12 Jan, 2021
Việc làm phần mềm
Nhiều sinh viên tin rằng bằng việc có kĩ năng lập trình như Java, C, và C++ họ có thể thành công trong công nghiệp phần mềm. Kĩ năng lập trình là cần nhưng KHÔNG đủ.
Để thành công, họ phải có khả năng làm việc trong tổ, đưa ra việc trình bày, trao đổi ít nhất là trong một ngoại ngữ, và biết cách làm việc với khách hàng để hiểu nhu cầu của họ. Ý tưởng về người lập trình ngồi trước máy tính cả ngày để lập trình là “quan niệm sai” lớn nhất về việc làm phần mềm. Mọi dự án phần mềm đều là nỗ lực tổ và phần lớn công việc phần mềm đều bao gồm trao đổi và tương tác với mọi người.
Với toàn cầu hoá, ngày nay hầu hết các công ti đều không xây dựng phần mềm ở một chỗ, hay một nước nữa. Đa số công việc phần mềm được phân phối toàn cầu dựa trên khái niệm về “xây dựng 24 giờ” hay “phát triển phần mềm toàn cầu” nơi công việc dự án được phân phối cho nhiều tổ, ở nhiều nước hay múi thời gian. Khi tổ này hoàn thành công việc của họ và về nhà thì tổ khác tiếp tục công việc đó cho nên phần mềm có thể được xây dựng “không ngừng”. Một khái niệm khác được gọi là “Khoán ngoài” nơi một phần của công việc dự án được gửi cho tổ ở nước có chi phí thấp hơn để làm giảm chi phí. Bởi vì việc phân phối này, để thành công người phần mềm phải nói chuyện với khách hàng, nói chuyện với nhau, nói chuyện với người hỗ trợ, nói chuyện với nhà cung cấp v.v. Đó là lí do tại sao kĩ năng ngôn ngữ tốt là bản chất trong công nghiệp phần mềm. Mâu thuẫn với khái niệm mà hầu hết người phần mềm là “hướng nội” và không thích nói chuyện với bất kì ai ngoài máy tính, thực tế người phần mềm nói nhiều hơn hầu hết các việc làm khác.
Bên cạnh các kĩ năng kĩ thuật và trao đổi, người phần mềm phải có kĩ năng tưởng tượng tốt với “bộ não canh tân” mạnh khi họ tạo ra “cái gì đó từ cái không”. Người phần mềm bắt đầu từ một ý tưởng, một khái niệm và dùng các công cụ và ngôn ngữ lập trình để tạo ra “phần mềm” chạy trên “phần cứng” để thực hiện “cái gì đó” cho người khác dùng. Loại công việc này rất đòi hỏi và đặc biệt có sức ép cao vì các dự án thường phải đáp ứng những yêu cầu nào đó trong một thời gian giới hạn. (Năm ngoái, tôi đã tới thăm một công ti trò chơi phần mềm và thấy hàng trăm người làm việc 80-giờ một tuần trong vài năm chỉ để tạo ra trò chơi “Halo 2”.)
Tuỳ theo các kĩ năng có đa dạng ứng dụng phần mềm như:
1) Phần mềm tính toán cá nhân: Ứng dụng phần mềm chạy trên máy tính cá nhân được dùng cho cá nhân và doanh nghiệp nhỏ như xử lí văn bản, trò chơi hay tài chính cá nhân.
2) Phần mềm hệ thống: Phần mềm được viết để phục vụ các chương trình khác như hệ điều hành, trình biên dịch, quản lí tệp.
3) Phần mềm doanh nghiệp: Phần mềm dùng để quản lí hệ thống tin được dùng bên trong công ti để quản lí hoạt động như kế toán, tính lương, và tài chính – Nhiều trong các ứng dụng này có thể là phần mềm bán sẵn (COTS) như Peoplesoft, SAP v.v.
4) Phần mềm nhúng: Phần mềm nằm thường trú trong bộ nhớ điều khiển các sản phẩm cho việc dùng tiêu thụ và công nghiệp như phần mềm trong lò vi sóng, điện thoại, tivi, robots trong chế tạo, máy bay, rada v.v.
5) Phần mềm khoa học: Phần mềm tính toán và được dùng cho mục đích khoa học như chế tạo tự động, thiết kế có máy tính hỗ trợ (CAD)
6) Phần mềm chuyên gia: Tính toán trí tuệ nhân tạo giải quyết các vấn đề phức tạp như qui trình đòi bảo hiểm, động cơ tìm kiếm internetv.v.
Khi công nghệ thay đổi thường xuyên, người công nhân phần mềm tốt phải tập trung vào việc giữ các kĩ năng kĩ thuật của họ mạnh, nhưng cũng đảm bảo họ theo kịp với thay đổi. Để thành công, người phần mềm phải liên tục học những điều mới, phương pháp mới, ngôn ngữ mới, công cụ mới, cũng như học nhiều hơn về kinh doanh nghiệp vụ của công ti. Bằng việc có các kĩ năng này, họ thành có giá trị hơn cho công ti hơn chỉ là viết mã về một gói Java hay vài trăm dòng mã C++. Người phần mềm tốt thường thăng tiến nghề nghiệp của họ lên các vị trí khác, như người lãnh đạo dự án, kiến trúc sư phần mềm, hay người quản lí dự án khi họ thu được kinh nghiệm trên đường. Bằng việc hiểu công nghệ, học những điều mới nhanh chóng, thường xuyên cải tiến họ có thể áp dụng cả qui trình tư duy logic và sáng tạo để giải quyết các vấn đề doanh nghiệp. Người phần mềm tốt có thể làm bất kì cái gì họ chọn, dù đó là đi vào quản lí hay mở công ti riêng của mình.
—-English version—-
Software jobs
Many students believe that by having programming skill such as Java, C, and C++ they could succeed in the software industry. The programming skill is necessary but NOT enough. To succeed, they must be able to work in teams, provide presentations, communicate at least, one foreign language, and know how to work with customers to understand their needs. The idea that programmer sits in front of computer all day to do programming is the biggest “misconception” about software jobs. Every software project is a team effort and a large part of software works involves communicating and interacting with people.
With globalization, today most companies do not build software in one location, or one country anymore. The majority of software works are distributed globally based on the concept of “24 hours build” or “Global software development” where project work is distributed to several teams, located in several countries or time zones. When one team completes their works and goes home then the other team continues that works so software can be build “Non-stop”. Another concept is called “Outsourcing” where part of the project works is sent to team in lower cost countries to reduce the cost. Because of the distribution, to succeed software people must talk to customers, talk with each other, talk to support personnel, talk to suppliers etc. That is why a good foreign language skill is essential in software industry. Contradict to the notion that most software people are “Introvert” and do not like to talk to anyone but the computer, actually software people talk more than most other jobs.
Beside technical and communication skills, software people must have good imagination skills with strong “innovation brain” as they are creating “Something from nothing”. Software people starts with an idea, a concept and using tools and programming language to create “software” that runs on “Hardware” to perform “something” for others to use. This kind of work is very demanding and especially high-pressure as projects often have to meet certain requirements within a limited time. (Last year, I visited a software game company and saw hundreds people work 80-hour weeks for several years just to create the “Halo 2” games).
Depending on the skills there are varieties of software applications such as:
1) Personal Computing Software: Software applications that runs on personal computer used for personal and small business such as world processing, games or personal finance.
2) System software: Software written to service other programs such as operating systems, compilers, file management.
3) Business software: Software use to manage information systems used within a company to manage operations such as accounting, payroll, and finance – Many of these applications can be Commercial off the shelves (COTS) such as Peoplesoft, SAP etc.
4) Embedded software: Software residing in memory that controls products for consumers and industrial use such as software in microwaves, phone, TV, robots in manufactures, airplanes, radars etc.
5) Scientific software: Software that calculate and used for scientific purposes such as automated manufacturing, Computer aided design (CAD)
6) Expert software: Artificial intelligence computing that solves complex problems such as Insurance claim processing, internet search engines etc.
As technology changes often, a good software worker must focus not only on keeping their technical skills strong, but also on ensuring they are keeping up with changes. To succeed, software people must continue to learn new things, new method, new languages, new tools, as well as, learn more about the business of the company. By having these skills, they are more valuable to the company than just coding one more Java package or a few hundred line of C++ code. Good software people often advancing their careers onto other positions, such as a project leaders, software architects, or project manager as they gaining experience along the way. By understand technology, learn new things quick, constantly improving they can apply both logical thought processes and creativity to solve business problems. Good software people can do anything they choose, whether it’s moving into management or open their own companies.