Tôi thường nhận các email từ các cựu sinh viên vì tôi yêu cầu họ chia sẻ kinh nghiệm làm việc với sinh viên hiện thời. Tuần trước một cựu sinh viên đã gửi cho tôi email thú vị này, phản ánh kinh nghiệm của anh ấy trong công nghiệp phần mềm.

Thưa giáo sư,

Sau khi tốt nghiệp, em đã làm việc như người phát triển phần mềm cho một công ti lớn ở San Jose. Sau đây là điều em đã kinh nghiệm trong ba năm qua mà em muốn chia sẻ với các sinh viên hiện thời.

Theo quan sát riêng của tôi, công nghiệp phần mềm đã không thay đổi nhiều trong nhiều năm. Điều đáng buồn là nhiều dự án phần mềm vẫn bị thiết lập để thất bại. Lí do đơn giản: cấp quản lí dự án không có kĩ năng. Chẳng hạn, tôi đã dành nhiều ngày chuẩn bị ước lượng chi tiết cho công việc của tôi trong dự án mới này rồi được bảo là lịch biểu đã được ấn định rồi bởi người quản lí dự án. Không hỏi ý kiến tôi hay kiểm điểm ước lượng của tôi, ông ấy đã cho tôi chỉ một nửa thời gian tôi cần để làm việc. Tôi đã học trong lớp của thầy rằng “lịch biểu hiện thực” là phần mấu chốt cho dự án thành công và thầy bao giờ cũng khuyến khích chúng tôi xây dựng phần mềm không chỉ làm việc, mà còn có chất lượng cao. Tuy nhiên, đây không phải là điều người quản lí dự án muốn. Ông ấy đặt mục đích rằng mọi thứ phải đáp ứng lịch biểu, và không gì hơn. Đó là bài học đầu tiên tôi học được về thực trạng của công nghiệp phần mềm.

Vì người phát triển không có đủ thời gian, điều đầu tiên họ làm là bỏ qua chất lượng. Bị buộc phải dựng “phần mềm dở” là điều tồi tệ nhất mà người quản lí dự án có thể làm cho người phát triển. Chuyển giao dự án đúng thời gian nhưng biết rằng phần mềm “có thể hay không thể làm việc” cho cảm giác như thất bại với tôi. Tôi tin tốt hơn cả là nên làm mọi thứ theo cách đúng, và không chỉ theo cách nhanh chóng cho nên tôi tới nói với người quản lí dự án. Người đó bảo vệ lập trường của mình là “Chất lượng là tốt nhưng lịch biểu là mọi thứ.” Tôi cảm thấy như tôi phí thời gian với kẻ ngốc. Đó là bài học thứ hai của tôi về thực trạng của công nghiệp phần mềm.

Tôi ngồi cạnh vài người phát triển từ một dự án khác. Họ được trao cho một tài liệu về một hệ thống cũ mà họ cần nâng cấp. Họ làm việc chăm chỉ trong vài tuần để thiết kế giao diện mới. Sau khi thiết kế được hoàn tất họ thấy rằng tài liệu này cũ ba năm rồi và đã không phải ánh thay đổi trong hệ thống. Điều đó nghĩa là điều họ đã thiết kế không còn đúng nữa. Tất nhiên, với thiết kế tồi thì mã cũng tồi rồi toàn thể dự án bị cắt bỏ vì hệ thống không làm việc. Nhiều người trong số họ mất việc làm nhưng người quản lí của họ thì không. Người đó được cho chức vụ khác trong dự án mới. Đó là bài học thứ ba của tôi về thực trạng của công nghiệp phần mềm.

Tất nhiên với chỉ ba năm làm việc trong công nghiệp, tôi có lẽ đã không thấy được mọi thứ. Tuy nhiên, tôi tin cấp quản lí tốt là điều “phải có” trong ngành công nghiệp “được quản lí nghèo nàn” này. Là người phát triển, chúng tôi ước ao rằng chúng tôi có thể làm việc cho người quản lí tốt để cho chúng tôi có thể kinh nghiệm được thành công. Tôi thường tự hỏi nếu mọi dự án mà bạn làm việc đều thất bại thì bạn đã học được gì? Tôi thích làm việc với ai đó biết phải làm gì để xây dựng phần mềm chất lượng, ai đó có thể ra quyết định đúng, và sẵn lòng bảo vệ cho tổ khi khách hàng muốn rút ngắn lịch biểu. Nếu chúng tôi có người quản lí như thế, chúng tôi sẽ “tắm trong dầu sôi” để bảo vệ người đó. Chúng tôi sẽ làm việc cả ngày cả đêm để hỗ trợ người đó. Ngày nay, có nhiều việc làm phần mềm mở ra ở San Jose vì kinh tế bắt đầu phục hồi. Trong số đó có nhiều việc mở ra cho người quản lí dự án. Bây giờ tôi biết tại sao công nghiệp vẫn cần nhiều người quản lí dự án vì nhiều người trong số họ kém thế và phải được thay thế.

Ngược với niềm tin chung rằng người phát triển thường sẽ bỏ việc để được trả lương tốt hơn ở đâu đó khác, tôi nghĩ phần lớn người phát triển sẽ trung thành hoàn toàn với người quản lí tốt. Trong nhiều năm, chúng tôi đã thấy nhiều người quản lí kém, người quản lí không có kĩ năng, và người quản lí yếu nên tôi có thể nói điều này: “Không người phát triển nào sẽ bỏ việc làm vì thêm tiền, họ bỏ việc vì người quản lí kém.” Đó là phát biểu của tôi về thực trạng của công nghiệp phần mềm.

Vì công nghệ thay đổi rất nhanh chóng, phần lớn người phát triển phải tiếp tục bắt kịp bằng việc học những điều mới. Tuy nhiên, có những người phát triển không có nền tảng tốt để học điều mới. Họ là những người học “lối tắt” và “thủ đoạn” trong trường chỉ đủ để qua các kì kiểm tra, lấy bằng, và kiếm việc làm. Một số tới từ các trường đặc biệt dạy kĩ năng chuyên môn trong thời gian ngắn để cho họ có thể kiếm được việc làm. Không có nền tảng giáo dục mạnh, phần lớn trong họ đều gặp khó khăn khi điều chỉnh theo nhu cầu mới. Bởi vì họ yếu về kĩ thuật do giáo dục kém, phần lớn chưa bao giờ kéo dài lâu trong ngành công ngiệp cạnh tranh này. Điều đáng buồn khác mà tôi đã quan sát trong ngành công nghiệp này, tôi được bảo rằng không lâu trước đây, công ti đã đầy những người phát triển Perl và HTML. Về sau khi ASP, PHP, và Java là công nghệ then chốt, nhiều người phát triển đã bị loại ra để được thay thế bằng những người phát triển mới có những kĩ năng được cần này. Thế rồi tới ASP.NET và XML rồi nhiều người trong họ lại bị loại ra. Mọi lúc một công nghệ mới tới, những người phát triển có kĩ năng giới hạn lại bị loại ra. Ngày nay đó là AJAX, Ruby và ASP.NET 2.0. và không ai biết cái gì sẽ là tiếp. Bây giờ tôi thực sự hiểu điều thầy đã dạy chúng tôi về khác biệt giữa nghề nghiệp và việc làm. Nghề nghiệp là cái gì đó bạn có thể làm cho cả đời bạn nhưng việc làm là cái gì đó chỉ kéo dài khi có nhu cầu.

Với người phát triển có nền tảng mạnh về giáo dục, công nghệ chỉ là công cụ họ dùng. Chúng ta biết đủ để đối phó với thay đổi công nghệ. Cho chúng ta vài tuần để học điều mới rồi chúng ta sẽ không có vấn đề trong việc dùng chúng. Chỉ bây giờ, tôi mới nhận ra điều thầy và các giáo sư khác đã nói về “học cả đời” để cho chúng ta có thể tiếp tục tăng tiến nghề nghiệp của mình trong ngành công nghiệp thay đổi nhanh này. Là một cựu sinh viên, tôi biết ơn sâu sắc về điều thầy và các giáo sư khác đã dạy cho chúng tôi. Khi thầy yêu cầu tôi nói lời khuyên cho sinh viên hiện thời, tôi muốn bảo họ tận hưởng đại học nhiều nhất có thể đi và đưa mọi nỗ lực vào xây dựng nền tảng giáo dục vững chắc. Điều đó có thể có vẻ như có nhiều thứ thế họ phải học, nhiều môn mà họ phải học. Tuy nhiên, tất cả những điều đó sẽ là những điều có giá trị cho họ khi họ phải đối diện với thực trạng của ngành công nghiệp phần mềm.

—-English version—-

The reality of software industry

I often receive emails from former students since I asked them to share their working experiences with current students. Last week a former student sent me this interesting email, reflecting his experience in the software industry.

Dear Professor,

After graduated, I worked as software developer for a large company in San Jose. Following is what I have experienced in the past three years that I wanted to share with current students.

From my own observation, the software industry has not changed much in many years. It is a sad thing as many software projects are still being set up to fail. The simple reason: unskilled project management. For example, I have spent many days preparing detailed estimate for my work in this new project then be told that the schedule was already set by the project manager. Without asking for my opinion or reviewing my estimate, he gave me only half of the time that I needed to do my work. I learned in your class that “realistic schedule” is a critical part for project to succeed and you always encourage us to build software that not only works, but of high quality. However, this was not what the project manager wanted. He sets goal that everything must meet schedule, and nothing more. That was the first lesson that I learned about the reality of the software industry.

Since developers did not have enough time, the first thing they did was skipping quality. Being forced to build “Bad software” was the worst things a project manager can do to developers. Delivering project on-time but knowing that software “may or may not work” feels like failure to me. I believe it is better to do things the right way, and not just the quick way so I came to talk to the project manager. He defended his position as “Quality is good but schedule is everything”. I felt like I am wasting my time with an idiot. That was my second lesson about the reality of the software industry.

I sat next to several developers from another project. They were given a documentation for an old system that they need to upgrade. They worked hard for several weeks to design a new interface. After the design was complete they found out that the documentation was three years old and did not reflect changes in the system. That means what they designed was no longer correct. Of course, with bad design came bad codes then the entire project was cancelled because the system did not work. Many of them lost their jobs but their manager did not. He was given another position in a new project. That was my third lesson about the reality of the software industry.

Of course with only three years of working in the industry, I probably have not seen everything. However, I believe good management is a “must-have” in this “poorly managed” industry. As developers, we wish that we could work for good managers so we can experience success. I often wonder if all projects that you work on failed then what have you learned? I like to work for someone who know what it takes to build quality software, someone who can make the correct decisions, and willing to defend the team when customers wanted to shorten the schedule. If we have manager like that, we would “bathe in boiling oil” to defend him. We  would work all days and all night to support him. Today, there are many software jobs opening in San Jose as the economy begins to recover. Among them are many openings for project managers. Now I know why the industry still needs more project managers as many of them are so bad and have to be replaced.

Contradict to the common belief that developers would often leave a job for better pay elsewhere, I think most developers would be completely loyal to good manager. For years, we have seen so many bad managers, unskilled managers, and weak managers so I could say this: “No developers would leave the job for more money, they leave their jobs because of bad managers.” That is my statement about the reality of the software industry.

As technology changes very fast, most developers must continue to keep up by learning new things. However, there are developers who do not have the good foundation to learn new things. They are people who learned “Short cut” and “tricks” in school just enough to pass tests, obtain degrees, and get jobs. Some came from special schools that teach specific skills in a short time so they can get jobs. Without a strong education foundation, most of them are having difficulty adjusting to new demands. Because they are technically weak due to their poor education, most never last long in this competitive industry. It is another sad thing that I have observed in the industry. I was told that not long ago, the company were full of Perl and HTML developers. Later when ASP, PHP, and Java were the key technology, many developers were eliminated to be replaced by new developers who had these needed skills. Then cameASP.NET and XML then many of them were eliminated. Every time a new technology came, developers who had limited skills were eliminated. Today it is AJAX, Ruby and ASP.NET 2.0. and nobody know what would be next. Now I really understand what you taught us about the different between a career and a job. A career is something you can do for your whole life but a job is something that only last when there is a need.

To developers who have strong foundation of education, technology is only a tool that they use. We know enough to handle technology changes. Give us few weeks to learn new things then we will have no problem using them. Only now, I realize what you and other professors said about “Lifelong learning” so we could continue to advance our career in this fast changing industry. As a former student, I am deeply grateful for what you and other professors have taught us. As you ask me about advising current students, I would tell them to enjoy college as much as possible and put all efforts to build a solid education foundation. It may look like there are so much things that they have to learn, so many courses that they have to take. However, all of that will be a valuable things for them when they have to face the reality of the software industry.