15 Jan, 2021
Việc làm phần mềm
Tôi nhận được một email mà người gửi viết: “Tôi là một người học về khoa học máy tính đã tốt nghiệp năm 2006 nhưng từ đó tôi đã làm việc cho công ti đầu tư và thương mại chứng khoán. Tôi thất nghiệp trong sáu tháng qua cho nên tôi tự hỏi liệu tôi có thể kiếm được việc làm trong công nghiệp phần mềm không? Vì thầy đã nhắc tới việc thiếu hụt người phần mềm trên toàn cầu, nếu tôi muốn làm việc ở Mĩ thì làm sao tôi có thể kiếm việc làm ở đó? Tôi cần có loại kĩ năng nào?”
Câu trả lời của tôi: “Mặc dù bạn có bằng cấp máy tính nhưng mọi sự đã thay đổi kể từ khi bạn tốt nghiệp và thị trường việc làm cũng có nhu cầu khác do tốc độ công nghệ thay đổi. Nếu bạn muốn làm việc trong ngành công nghiệp phần mềm, bạn có thể phải kiểm điểm lại kĩ năng tính toán của mình để xác định liệu bạn có cần quay lại trường để đào tạo lại không. Có thể là bạn quên mất bạn đã học gì trong trường vì bạn chưa bao giờ làm việc trong phần mềm. Bên cạnh kĩ năng lập trình như C, C++, C# và Java, bạn có thể cần kiểm điểm lại tri thức của mình về vòng đời phát triển phần mềm. Ngày nay, công nghiệp cũng yêu cầu những phương pháp luận và kĩ năng nào đó liên kết với phát triển web. Điều quan trọng là bạn kiểm tra với các công ti phần mềm nơi bạn sống để xác định loại kĩ năng nào họ cần, điều thực tế là bao giờ cũng bắt đầu tại nơi bạn sống trước khi nhìn đi đâu đó khác. Nếu bạn muốn làm việc cho công ti nước ngoài hay muốn làm việc ở Mĩ thì bạn cần có kĩ năng trao đổi rất tốt, đặc biệt là trong tiếng Anh. Dựa trên điều tôi biết, phần lớn các công ti nước ngoài chỉ chọn các ứng viên từ một số đại học mà họ đã biết tới và có mối quan hệ tốt. Tuỳ theo danh tiếng của trường mà bạn tốt nghiệp, bạn có thể được xem như ứng cử viên cho vị trí đó. Hiện thời có vài xu hướng đang nổi lên mà bạn có thể cần biết:
- Web như nền phát triển: Trình duyệt web cung cấp môi trường tốt khi chạy và truy nhập vào nhiều ứng dụng. Ngày nay nhiều công ti phần mềm đang chọn web làm nền chọn lựa của họ cho phát triển phần mềm. Phát triển web là rất phổ biến và có nhiều công cụ phát triển tốt, và công cụ thiết kế cho web mà bạn cần biết. Bạn cũng cần học về thư viện JavaScript vì nó cho phép người phát triển có nhiều việc được thực hiện với JavaScript hơn trước đây. Điều quan trọng với bạn là có tri thức về ứng dụng internet, như các ứng dụng viết cho Silverlight, Flash điều cho phép người phát triển bẻ tự do các giới hạn của HTML và lấy ưu thế của miền tài nguyên và tính năng trong khi vẫn đảm bảo tương hợp qua các nền.
- Tính toán mây: Bạn có thể học thêm về phần mềm như dịch vụ Software as a Service (SaaS) và tính toán mây – Cloud Computing vì đây là khu vực bùng nổ cho phép các công ti thúc bẩy tài nguyên tính toán bằng việc đi thuê thay vì mua. Nó cũng cho phép công ti tăng qui mô để giải quyết vấn đề tải việc trên đỉnh và tránh tổng phí quản lí kết cấu nền phần cứng. Tính toán mây cũng giúp tính toán với chi phí hợp lí và dự đoán được. Bạn có thể cần hiểu thêm về Windows Server, Windows Azure, SQL Azure, MySQL, và các dịch vụ như Windows Live, Office, và Xbox Live bởi vì có một số nhu cầu trong khu vực này.
- Phát triển mau lẹ Agile: Là người phát triển, bạn phải biết phương pháp này, kể cả Scrum, Lập trình cực đoan, phát triển được dẫn lái bằng kiểm thử, và tích hợp liên tục. Những phương pháp phát triển này thường được dùng bằng cách tổ hợp với các phương pháp phát triển phần mềm khác. Nhiều công ti ở Mĩ đang dùng Agile ngày nay cho nên nếu bạn muốn làm việc cho công ti Mĩ, bạn cần biết rõ Agile.
- Ứng dụng di động: Với việc tăng tính sẵn có của nhiều thiết bị di động kết nối với internet (như, điện thoại Smart phone, I-phone, Android, và Window 7 phone), phần lớn người dùng muốn truy nhập và tương tác với dữ liệu theo những cách thích hợp với năng lực của thiết bị di động của họ. Tôi trông đợi loại tri thức và kĩ năng này sẽ sớm được cần tới trên mọi thiết bị di động cho nhiều công ti viễn thông nơi người dùng có thể truy nhập căn cước và dữ liệu trực tuyến một cách dễ dàng và an ninh trên mọi thiết bị di động. Ngày nay, Microsoft cũng cung cấp truy nhập vào dữ liệu của người dùng thông qua Windows Live và Xbox LIVE. Với sự sinh sôi nảy nở của nhiều thiết bị thế sẽ có nhu cầu lớn về những người có kĩ năng này. Windows 7 có nhiều giao diện và ứng dụng hỗ trợ cho ứng dụng có khả năng chạm trong nền di động. Silverlight và WPF cũng có tương tác dựa trên camera và đa chạm, như MFC có.
- Làm việc tổ và kĩ năng mềm: Bên cạnh kĩ năng kĩ thuật, bạn cần các kĩ năng khác như kĩ năng trao đổi, kĩ năng làm việc tổ. Ngày nay việc phát triển phân bố tạo khả năng cho các thành viên tổ làm việc chặt chẽ mặc cho phân tách địa lí với nhau. Với toàn cầu hoá, nhiều công ti đang thuê người ở nhiều chỗ khác nhau đưa các tài năng toàn thế giới làm việc hướng tới dự án hay mục đích chung. Khả năng của thành viên tổ làm việc qua múi thời gian và biên giới đang trở thành quan trọng cho nên bạn có thể cần phải học nhiều nhất có thể được về làm việc theo tổ. Có nhiều hoạt động tổ như kiểm điểm mã phân bố, lập trình theo cặp từ xa, cộng tác người phát triển / người kiểm thử và chia sẻ tài nguyên.
Ý nghĩ cuối cùng của tôi: Nếu bạn nghiêm chỉnh về công nghiệp phần mềm, xin hãy học nhiều nhất có thể được, đọc nhiều nhất có thể được về bất kì chủ đề nào bạn quan tâm. Tôi tin công nghiệp phần mềm sẽ tiếp tục trưởng thành và bành trướng ra mọi nơi và với sự thiếu hụt kĩ năng hiện thời, nhiều công ti sẽ phải vươn tới chỗ có tài năng. Cho nên hãy được chuẩn bị và sẵn sàng nhận thách thức mới bất kì khi nào nó tới.
Chúc bạn may mắn trong tìm việc làm.
—-English version—-
Software jobs
I received an email where the sender wrote: “I am a computer science major who graduated in 2006 but since I worked for an investment and stock trading company. I am unemployed for the last six months so I just wonder if it is possible for me to get a job in software industry? Since you have mentioned about a shortage of software people globally, if I want to work in the U.S how can I get a job there? What kind of skills do I need?
My answer: “Although you have a computer degree but things have changed since you graduated and the job market also has different needs due to the speed at which technology changes. If you want to work in the software industry, you may want to review your computing skills to determine whether you need to go back to school for retraining. It is possible that you may forget what you have learned in school since you never work in the software. In addition to programming skills such as C, C++, C# and Java, you may need to review your knowledge about software development life cycles. Today, the industry also requires knowledge in certain methodologies and skills associated with web development. It is important that you check with software companies where you live to determine what kind of skills that they need, it is always practical to start where you live first before looking elsewhere. If you want to work for foreign companies or want to work in the U.S then you need to have very good communication skills, especially in English. Based on what I know, most foreign companies only select applicants from certain universities that they already know and have good relationship with. Depend on the reputation of the school that you graduated, you may be considered as candidate for the position. Currently there are several trends that are emerging that you may need to know:
- The Web as a development platform: The web browser provides a good runtime environment and access to many applications. Today many software companies are choosing the web as their platform of choice for software development. Web development is very popular and there are many good development tools, debugging tools, and designing tools for the web that you need to know. You also need to learn about JavaScript libraries since it allows developers to get more done with JavaScript than ever before. It is important for you to have knowledge on internet applications, such as those written for Silverlight, Flash that allows developers to break free of the limitations of HTML and take advantage of a range of resources and features while guaranteeing compatibility across platforms.
- Cloud Computing: You may want to learn more about Software as a Service (SaaS) and Cloud Computing since this is a booming area that allows companies to leverage computing resources by rental rather than buying. It also allows company to scale up to handle peak loads and avoid the overhead of managing hardware infrastructures. Cloud computing also help keep computing at a reasonable and predictable cost. You may need to understand more about Windows Server, Windows Azure, SQL Azure, MySQL, and services such as Windows Live, Office, and Xbox Live because there are some needs in this area.
- Agile development: As developers, you must know this method, including Scrum, Extreme programming, Test-driven development, and Continuous integration. These are commonly used often in combination with other software development methods. Many companies in the U.S are using Agile today so if you want to work for a U.S company, you need to know Agile well.
- Mobile applications: With the increasing availability of many mobile devices that connect to the internet (i.e., Smart phone, I-phone, Android, and Window 7 phone), most users want to access and interact with data in ways that are appropriate to their mobile devices’ capabilities. I expect this kind of knowledge and skills will be needed for many telecommunication companies soon where users can access online identities and data easily and securely on all mobile devices. Today, Microsoft also provides access to users’ data via Windows Live and Xbox LIVE. With the proliferation of so many devices there will be a great needs for people to have this skills. Windows 7 has many interfaces and applications that support for touch-enabled applications in the mobile platform. Silverlight and WPF also allow camera-based interactions and multi-touch, as has MFC.
- Teamwork and Soft-skills: Beside technical skills, you do need other soft skills such as communication skills, teamwork skills. Today distributed development enables team members to work closely despite geographic separation from each other. With globalization, many companies are hiring people in different places and bringing together worldwide talent to work toward a common project or goal. The ability of team members working across time zones and borders is becoming important so you may need to learn as much as possible about teamwork. There are many team activities such as distributed code reviews, remote paired programming, developer/tester collaboration and resource sharing.
My final thought: If you are serious about the software industry, please learn as much as possible about, read as much as you can on whatever topics that interested you. I believe the software industry will continue to grow and expand everywhere and with the current skills shortage, many companies will have to reach out to where talents are. So be prepared and ready to take on new challenges whenever it comes.
Good luck on your job search.