11 Jan, 2021
Kĩ sư phần mềm chuyên nghiệp
Tới lúc này, có lẽ bạn đã biết về trạng thái của công nghiệp ô tô Mĩ rồi. Trong nhiều năm, ô tô Mĩ đã là tốt nhất trên thế giới nhưng cái gì đó đã thay đổi trong những năm 1970 khi cấp quản lí quyết định rằng chất lượng không quan trọng bằng số lượng bởi vì họ có thể sản xuất càng nhiều xe thì họ càng có thể kiếm được nhiều lợi nhuận hơn. Thay vì hội tụ vào chất lượng, các nhà chế tạo ô tô Mĩ đã sản xuất số lượng lớn xe ô tô để tăng lợi nhuận.
Tương phản với cách nhìn này, các công ti Nhật Bản như Toyota, Honda tiếp tục hội tụ vào chất lượng và dành nhiều nghiên cứu để dựng xe với tiêu thụ ít nhiên liệu hơn khi họ dự kiến rằng giá dầu sẽ tiếp tục tăng lên. Ngày nay Toyota là nhà chế tạo xe ô tô lớn nhất thế giới khi GM, Chrysler đang đệ trình đơn xin phá sản. Câu chuyện này là lời nhắc nhở cho nhiều người trong chúng ta đang làm việc trong ngành công nghiệp phần mềm về vấn đề chất lượng so với số lượng.
Khi tôi hỏi những người lập trình: Điều quan trọng nhất trong phần mềm là gì? Câu trả lời là: “Viết mã, viết mã và viết mã thêm.” Với những người đang được đào tạo trong khoa học máy tính, viết mã là hoạt động chính và phần lớn nỗ lực phát triển phần mềm chiếm 80% trong viết mã và 20% trong kiểm thử. Nếu bạn nhìn vào chương trình dành cho người tốt nghiệp đại học về khoa học máy tính, bạn sẽ thấy rằng sinh viên dành phần lớn thời gian cho các lớp lập trình, lớp cấu trúc dữ liệu, lớp thuật toán v.v. Nhiều sinh viên tin rằng chất lượng nghĩa là phần mềm chạy và không hỏng nhưng họ không được dạy về chất lượng như “giá trị cho khách hàng” và chính chọn lựa của khách hàng mới quyết định cái gì cần mua và họ muốn làm kinh doanh với ai. Nhiều sinh viên được dạy rằng năng suất là họ có thể viết bao nhiêu dòng mã trong một thời gian nào đó cho nên họ càng có thể viết mã nhiều, họ càng tạo ra kết quả tốt hơn. Giống như công nghiệp ô tô Mĩ, họ đang hội tụ vào số lượng chứ không chất lượng.
Theo nhiều nghiên cứu đại học, nhiều người phát triển không chú ý tới thay đổi trong công nghệ. Họ không phát triển hay nâng cao bản thân mình theo hướng chuyên nghiệp. Sau khi tốt nghiệp, họ dừng học tập và nếu cần, họ sẽ hỏi bạn bè về “lối tắt” và “mẹo” chỉ để thực hiện việc của họ. Họ làm việc chủ yếu bằng “thử và sai,” điều có nghĩa là họ học các thói quen xấu thay vì thực hành tốt. Thái độ này duy trì các thực hành vô hiệu quả, vô hiệu lực làm cản trở thành công của dự án phần mềm cũng như công nghiệp phần mềm. Chất lượng phần mềm không phải là vấn đề mới, nó đã cải tiến qua nhiều năm với một số thực hành tốt nhưng những điều này không được dạy trong chương trình truyền thống. Kết quả là, nhiều công ti vẫn đối diện với phần mềm chất lượng thấp, quá chi phí và để người của họ làm việc nhiều giờ mới xây dựng xong phần mềm.
Trong chương trình kĩ nghệ phần mềm, chúng tôi dạy sinh viên rằng chất lượng phần mềm được xác định bởi chất lượng, tính đầy đủ, tính hiệu năng, tính an ninh, tính truy nhập được, tính liên quan, tính chính xác, tính đúng thời gian và tính hữu dụng toàn thể của các chức năng mà nó cung cấp. Một phần mềm lớn cung cấp thông tin vô dụng là vô dụng. Chất lượng cũng là giá trị mà phần mềm có thể cung cấp cho khách hàng và đó là sự phân biệt then chốt cho thành công doanh nghiệp. Người kĩ sư phần mềm không chỉ là con người kĩ thuật mà còn là con người doanh nghiệp vì chương trình đào tạo nhằm vào phát triển “con người toàn bộ” liên tục học tập trong cả đời họ và với thái độ này, họ có thể làm việc trong bất kì ngành công nghiệp nào.
—-English version—-
Professional software engineer
By this time, you probably know about the state of American automobile industry. For many years, American cars were the best in the world but something changed in 1970s when management decided that quality was not important than quantity because the more cars they can produce the more profits that can get. Instead of focus on quality, American automobile makers are massively producing more cars to increase profits.
Contrast to this view, Japanese companies such as Toyota, Honda continue to focus on quality and spent a lot of research to built car with less fuel consumption as they anticipated that oil price will continue to go up. Today Toyota is the largest car manufacturing in the world when GM, Chrysler are filing for bankruptcy. The story is a reminder for many of us who are working in the software industry on the issue of quality versus quantity.
When I asked programmers: What is the most important thing in software? The answer is: “Coding, coding and more coding”. For people who are trained in Computer Science, coding is the main activity and software development effort is mainly 80% coding and 20% testing. If you look at programs for a Bachelor degree in Computer Science, you will find that students spent a large amount of time in programming classes, data structure classes, algorithms classes etc. Many students believe that quality means software runs and does not crash but they are not taught about quality as a “value to the customers” and it is the customer’s choices to decide what to buy and who they want to do business with. Many students are taught that productivity is how many line of code they can do within a period of time so the more they can code, the better they are producing. Just like the American automotive industry, they are focusing on quantity not quality.
According to several university studies, many developers do not pay attention to the changing in technology. They are not developing or advancing themselves professionally. After graduated, they stop learning and if needed, they will ask friends for “short cuts” and “Tricks” just to do their jobs. They work mostly by “trial-and-error”, which means that they are learning bad habits rather than best practices. This attitude perpetuates ineffective, inefficient practices that hinder the success of software projects as well as the software industry. Software quality is not a new issue, it has been improving for many years with numerous best practices but these are not taught in traditional programs. As a result, many companies are still facing low quality software, cost overruns and have their people work long hours to build software.
In software engineering program, we teach students that software quality is determined by the quality, completeness, performance, security, accessibility, relevance, accuracy, timeliness, and overall usefulness of the functions that it provides. An big software that provides useless information is useless. Quality is also the value that software can provide to the customer and that is the key discriminator for business success. A software engineer is not just a technical person but also a business person as the training program aim at develop a “Total person” that continue learning throughout their life and with this attitude, they can work in any industry.