13 Jan, 2021
Người lập trình hay người phát triển
Tuần trước tôi nhận được một email hỏi: “Khác biệt giữa người lập trình và người phát triển phần mềm là gì? Người lập trình có thể trở thành người phát triển được không?
Theo “quan điểm thuần tuý”, “người lập trình” là ai đó chỉ viết mã và kiểm thử mã riêng của họ để sửa lỗi. Người lập trình KHÔNG làm việc với khách hàng hay người dùng để viết yêu cầu. Người lập trình KHÔNG giúp kiểm thử hay các trường hợp kiểm thử tự động cho hệ thống. Người lập trình KHÔNG xây dựng hệ thống hay cập nhật hệ thống. Người lập trình KHÔNG viết tài liệu. Mọi điều họ làm là viết mã. Nhiều người lập trình có thể có hay KHÔNG có bằng cử nhân: một số người có thể học vài lớp lập trình ở trường đào tạo đặc biệt. Một số công ti sẽ thuê loại người lập trình này để viết mã bởi vì họ không yêu cầu lương cao và họ không thể đổi việc thường xuyên vì việc làm của họ rất bị giới hạn. Theo ý kiến tôi, người lập trình KHÔNG phải là chọn lựa tốt vì triển vọng tương lai là rất hạn hẹp.
“Người phát triển phần mềm” là ai đó đóng góp theo nhiều cách để làm cho sản phẩm phần mềm thành công. Người phát triển PHẢI LÀ người lập trình trước hết nhưng cũng còn dính dáng tới các khu vực khác như làm việc với khách hàng và người dùng để viết yêu cầu, viết trường hợp kiểm thử cho hệ thống phần mềm, kiểm điểm mã từ người khác, hỗ trợ viết tài liệu, kiểm soát thay đổi với phần mềm bằng việc làm quản lí cấu hình, và nhiều điều nữa. Người phát triển phần mềm có cảnh quan rộng hơn nhiều và có khả năng nhìn bức tranh lớn hơn của toàn thể dự án khi người lập trình chỉ viết mã. Phần lớn việc làm đối với người phát triển phần mềm ở Mĩ và châu Âu đều yêu cầu bằng cử nhân từ đại học được công nhận chính thức.
Tôi KHÔNG tin vào quyết định cô lập người lập trình với mọi thứ mà chỉ có viết mã. Người lập trình phải KHÔNG có cảnh quan hẹp. Họ CẦN đào tạo để làm cho họ thấy cảnh quan lớn hơn của hệ thống phần mềm. Họ NÊN làm việc với khách hàng và người dùng và đóng góp nhiều hơn cho dự án. Tôi tin người lập trình nên lấy nhiều đào tạo hơn để LÀ người phát triển phần mềm. Có hai lí do mà người lập trình vẫn còn chỉ viết mã: Họ thích viết mã và không muốn làm cái gì khác – đó là chọn lựa của họ. Họ KHÔNG nhận giáo dục và đào tạo đúng vì công ti muốn lấy ưu thế của những người không có giáo dục chính thức hay bằng cấp cho nên công ti có thể trả lương thấp cho họ.
Trong cuộc thăm viếng Ấn Độ năm ngoái, một người quản lí nói với tôi: “Những người lập trình của chúng tôi không biết cách làm các thứ khác và đó là lí do tại sao họ chỉ viết mã.” Tôi hỏi ông ấy: “Ông có chắc đó là điều họ muốn không, nếu họ không biết cách làm các khía cạnh phi mã thì sao ông không dạy cho họ?” Người quản lí này giải thích: “Tại chúng tôi đào tạo cho họ thì họ có thể tìm được việc tốt hơn sao? Với đào tạo hạn chế, họ phải ở lại đây chứ” Tôi không muốn nói gì hơn nữa bởi vì tôi biết rằng công ti này đã trả lương rất thấp cho những người không có giáo dục đại học và đó là lí do tại sao phần lớn người lập trình chỉ viết mã và không làm gì khác. KHÔNG phải là họ không thể làm được gì khác. Chính “kinh doanh tốt” là giữ họ theo cách đó. Trên khắp Ấn Độ, có hàng nghìn trường đào tạo đặc biệt dạy ngôn ngữ lập trình hay vài chứng chỉ trong các hệ thống đặc biệt, họ KHÔNG yêu cầu bất kì giáo dục nào cho nên họ làm tiền bằng việc tạo ra hàng trăm nghìn người lập trình chỉ có tri thức giới hạn về phần mềm. Những người này KHÔNG có mấy tương lai vì các ngôn ngữ lập trình sẽ thay đổi khi kĩ năng của họ bị giới hạn. Vài năm trước, COBOL và ngôn ngữ Pascal là nóng, nhưng thế rồi tới C và C++, và ngày nay có Java, C#, Ruby và nhiều nữa. Nếu kĩ năng của bạn là trong COBOL và bạn có thể thấy rằng nó không còn được cần tới nữa và bạn có thể không có khả năng tìm ra việc làm. Tất nhiên, có một số người lập trình không muốn làm các thứ khác. Họ chỉ muốn viết mã và hạnh phúc với nghề của mình. Tuy nhiên, tôi tin nếu họ biết rõ hơn, nếu họ có thể thấy mọi khả năng, họ có thể đổi ý.
Đào tạo chính thức ở đại học là rất quan trọng cho những người muốn có nghề nghiệp tốt. Người phát triển tốt có kĩ năng giỏi là quí giá. Với việc thiếu hụt trầm trọng hiện thời về kĩ năng phần mềm trên khắp thế giới, triển vọng là rất tốt để kiếm việc tốt với lương tốt. Nếu bạn là người lập trình và muốn là người phát triển, bạn có thể cần một số tri thức và đào tạo về kĩ nghệ yêu cầu, làm tài liệu yêu cầu, quản lí cấu hình, kiểm điểm mã, kiểm thử, kiểm thử tự động, kiểm thử tích hợp, và hiểu vòng đời phần mềm và một số phương pháp như Agile (Scrum hay lập trình cực đoan) cũng như quen thuộc với một số công cụ phần mềm.
—-English version—-
Programmer or Developer
Last week, I received an email asking: “What is the different between a programmer and a software developer? Can a programmer become a developer?
From the “Pure view”, “programmer” is someone who only code and tests their own code to fix defects. Programmer does NOT work with customers or users to write requirements. Programmer does NOT help with testing or write automated test cases for the system. Programmer does NOT build system or update system. Programmer does NOT write documentation. All they do is write code. Many programmers may or may NOT have Bachelor degree; some may only take few programming classes in special training schools. Some companies would hire this kind of programmer to code because they do not require higher salary and they can not change jobs often as their job is very limited. In my opinion, programmer is NOT a good choice as the future prospect is very narrow.
A “Software Developer” is someone who contributes in many ways to make the software product successful. A developer MUST BE a programmer first but also involve in other areas such as working with customers and users to write requirements, write test cases for the software system, review code from others, support documentation, control changes to software by working as configuration management, and many more. Software developer has a much larger perspective and an ability to see the bigger picture of the entire project when the programmer only writes code. Most jobs for software developers in the U.S and Europe require Bachelor degree from an accredited university.
I do NOT believe in the decision to insulate programmers from everything but only code. Programmers should NOT have a narrow perspective. They NEED training to make them see the bigger perspective of software system. They SHOULD work with customers and users and contribute more to the project. I believe programmer should take more training TO BE software developer. There are two reasons that programmer stay in coding only: They love to code and do not want to do anything else – that is their choice. They do NOT receive proper education and training as company wants to take advantage of people without formal education or degree so the company can pay them lower salary.
During a visit in India last year, a manager told me: “Our programmers don’t know how to do other things and that is why they only code”. I asked him: “Are you sure that is what they want, if they don’t know how to do the non-coding aspects why don’t you teach them? The manager explained: “Why do we train them then they can find better jobs? With limited training, they have to stay here” I did not want to say anything more because I know that the company paid a very low salary to people without college education and that is why most programmers only code and not doing anything else. It is NOT that they can not do anything else. It is “good business” to keep them that way. All over India, there are thousand special training schools that teach programming language or few certificates in special systems, they do NOT require any education so they make money by produce hundred thousand programmers who only have limited knowledge of software. These people do NOT have much future as programming languages will change as their skills are limited. Few years ago, COBOL and Pascal language were hot, but then come C and C++, and today there are Java, C#, Ruby and many more. If your skill is in COBOL and Pascal, you may find that it is no longer needed and you may not be able to find a job. Of course, there are some programmers don’t want to do other things. They only want to code and happy with their career. However, I believe if they know better, if they can see the potential and all the possibilities, they may change their minds.
Formal training in college is very important to people who want to have a good careers. A good developer with strong skills is precious. With current critical shortage of software skills all over the world, the prospect is very good for getting good jobs with good salaries. If you are a programmer and want to be a developer, you may need some knowledge and trainings on requirements engineering, requirement documentation, configuration management, code reviews, testing, automate testing, integration testing, and understand software life cycle and some methods such as Agile (Scrum or extreme programming) as well as familiar with some software tools.