19 Jan, 2021
Kĩ nghệ phần mềm và Khoa học máy tính
Một sinh viên năm thứ nhất hỏi tôi: “Tại sao một số người gọi chương trình đào tạo “Kĩ nghệ phần mềm” nhưng số khác lại gọi nó là “Khoa học máy tính” cái nào đúng? Sao tên khác nhau?”
Đáp: Có nhiều khác biệt giữa “Khoa học máy tính” và “Kĩ nghệ phần mềm”. Xin đọc các bài trước đây trên website SEGVN. Để hiểu tại sao có những cái tên khác nhau chúng ta cần quay trở lại lịch sử. Vào quãng sáu mươi hay bẩy mươi năm trước, khi máy tính vẫn còn là phát minh mới, chỉ vài nhà khoa học có thể dùng chúng trong phòng thí nghiệm. Vào thời đó, phần cứng là điều quan trọng nhất và lập trình là rất khó học. Các nhà khoa học người làm chương trình cho máy tính đã không tuân theo phương pháp luận nào mà chỉ “làm cái gì đó” để làm cho máy tính làm việc. Viết mã và kiểm thử đã là những hoạt động chính và lĩnh vực này đã được đặt tên là “Khoa học máy tính”.
Trong thời gian này, do nhu cầu cao về những người lập trình máy tính, các đại học bắt đầu mở các khoa mới để đào tạp người phát triển phần mềm cho một bằng cấp có tên là “Khoa học máy tính”. Bởi vì đây vẫn còn là lĩnh vực tương đối mới, phần lớn những người dạy về máy tính đều là các giáo sư toán học, chương trình đào tạo tập trung nặng về toán học.
Khi máy tính được “thương mại hoá” để được dùng trong công nghiệp, nhiều máy tính hơn được cần tới, nhiều công ti máy tính được thành lập và cạnh tranh thành dữ dội. Với công nghệ điện tử tiến bộ trong chế tạo, chi phí phần cứng máy tính đi xuống và không còn là tài sản quan trọng nhất nữa. Ngược lại, phần mềm trở nên quan trọng hơn để làm cho máy tính thực hiện được nhiều chức năng chuyên dụng. Vào thời gian đó, đã có rất ít cách tiếp cận phát triển đúng, đại đa số công việc vẫn là trong viết mã và kiểm thử. Phần lớn các ứng dụng đã được phát triển với chi phí rất cao và mất thời gian lâu hơn để xây dựng. Khi kích cỡ phần mềm trở nên ngày càng lớn hơn và phức tạp hơn, nhiều ứng dụng thành khó bảo trì. Bởi vì kích cỡ lớn hàng triệu dòng mã, lỗi thành không thể sửa được điều gây ra tỉ lệ hỏng cao đáng kể. Khi nhiều công ti tuỳ thuộc vào máy tính để tự động hoá, lỗi trong ứng dụng phần mềm đã tạo ra tổn thất nhiều triệu đô la hàng năm. Tình huống này được gọi là ‘Khủng hoảng phần mềm’.
‘Khủng hoảng phần mềm’ đến điểm ngoặt làm cho mọi người phải nghĩ một cách nghiêm túc về qui trình phát triển phần mềm. Công nghiệp yêu cầu những giải pháp nào đó cần được áp dụng để đảm bảo việc thực hiện phần mềm được thành công, có hiệu quả chi phí. Nhiều người bắt đầu nghĩ về những ý tưởng mới của phát triển có hệ thống về phần mềm mà có thể chuyển giao đúng thời gian, theo lịch biểu, với chất lượng cao và chi phí hợp lí. Trong thời gian này, nhiều cách tiếp cận đã được phát minh và đóng góp cho tư duy hiện đại và tiên tiến về “giải pháp kĩ nghệ” cho qui trình phát triển phần mềm. Kĩ nghệ là kỉ luật tồn tại một thời gian dài, nó hội tụ vào ứng dụng các nguyên tắc khoa học như tư duy logic và thiết kế vào mục đích thực hành như làm cầu, đường, máy cơ khí với hiệu quả và hiệu lực lớn. Bằng việc áp dụng “nguyên lí kĩ nghệ” vào phát triển phần mềm, một lĩnh vực mới đã được tạo ra có tên là: ‘Kĩ nghệ phần mềm’.
Kĩ nghệ phần mềm chủ trương cách tiếp cận “Vòng đời” hệ thống trong mọi việc phát triển phần mềm. Nó chỉ ra rằng phần mềm có thể được xây dựng tuân theo nhiều pha với các hướng dẫn, kĩ thuật và công cụ để đảm bảo việc hoàn thành thành công của dự án. Có nhiều vòng đời cho mọi nhu cầu như ‘Thác đổ’, ‘Mô hình xoáy ốc’, ‘Xây dựng gia tăng’, v.v. để làm cho dễ phát triển và quản lí phần mềm. Những cách tiếp cận này cũng giúp cho những người quản lí hiểu vấn đề xuất hiện trong phát triển và điều phải làm để giải quyết chúng. Nguyên tắc kĩ nghệ cũng tuyên bố rằng chất lượng của sản phẩm phần mềm được xác định bởi qui trình tạo ra sản phẩm. Bằng việc hội tụ vào chất lượng của qui trình, chúng ta có thể có sản phẩm chất lượng cao hơn.
Khi phần mềm trở nên quan trọng hơn trong mọi ngành công nghiệp, đã có nhu cầu cao hơn nhiều về kĩ sư phần mềm và một số đại học bắt đầu cung cấp bằng cấp mới có tên là “Kĩ nghệ phần mềm”. Phần lớn những người dạy trong lĩnh vực này đều là các giáo sư kĩ nghệ cho nên chương trình đào tạo hội tụ nặng vào tư duy logic, giải quyết vấn đề, và qui trình phát triển. Từ đó, bằng kĩ nghệ phần mềm đã được thiết lập tại nhiều đại học. Phần lớn chương trình đào tạo dạy cả khoa học máy tính và các nguyên lí và thực hành kĩ nghệ. Bằng thạc sĩ kĩ nghệ phần mềm đã được lập ra tại đại học Seattle năm 1979 rồi Carnegie Mellon và Stanford đã thiết lập chúng như là chương trình đào tạo tốt nhất.
Từ đó bằng kĩ nghệ phần mềm đã thành sẵn có từ nhiều đại học hơn trên toàn thế giới. Ở châu Á, nó vẫn còn là lĩnh vực tương đối mới bởi vì giới hàn lâm truyền thống làm chậm việc chấp nhận thay đổi. Vào cuối những năm 1990, Hàn Quốc là nước đầu tiên đã chấp nhận chương trình đào tạo kĩ nghệ phần mềm, tiếp sau đó là Nhật Bản và Ấn Độ.
Về truyền thống, phần lớn người làm phần mềm tự gọi họ là người lập trình hay người phát triển phần mềm. Tuy nhiên, ở Mĩ và châu Âu, thuật ngữ “người lập trình” thường đã được dùng để chỉ những người không có bằng cấp hay giáo dục đúng, những người được đào tạo từ trường dạy nghề trong vài tháng và không thể làm công việc chất lượng tốt. Đáp ứng lại, nhiều người phần mềm tự gọi họ là người phát triển phần mềm hay kĩ sư phần mềm để tránh bị “gọi” là người lập trình. Trong nhiều công ti Mĩ, danh hiệu người phát triển nói tới những người có bằng khoa học máy tính và kĩ sư phần mềm nói tới những người có bằng kĩ sư phần mềm.
—-English version—-
Software Engineering and Computer Science
A first year student asked me: “Why some people call the training program “Software Engineering” but other call it “Computer Science” which one is correct? Why different names?”
Answer: There are several differences between “Computer Science” and “Software Engineering”. Please read previous articles in the SEGVN website. To understand why there are different names we need to go back in history. About sixty or seventy years ago, when computer was still a new invention, only few scientists could use them in the laboratory. At that time, hardware was the most important thing and programming was very difficult to learn. Scientists who program the computer did not follow any methodology but just “do something” that make the computer work. Coding and testing were the main activities and the field was named “Computer Science”.
During this time, due to high demand of people to program computer, universities began to open new department to train software developers for a degree called “Computer Science”. Because this was still a relatively new field, most people who taught computer were mathematic professors, the training program was heavily focus on mathematics.
As computer was “commercialized” to be used in industry, more computers were needed, more computer companies were founded and competition were fierce. With advanced electronic technology in manufacturing, computer hardware costs were going down and no longer the most important asset. On the contrary, software became more important to make computer performed more specific functions. At that time, there were very few proper development approaches, a majority of works were still in coding and testing. Most applications were developed at a very high cost and took longer to build. As software size was getting larger and more complex, many applications were difficult to maintain. Because of the large size of million lines of code, defects were impossible to fix which caused significant high failure rate. As more companies were depending on computer for automation, defects in software applications created lost of several million dollars each year. The situation was called “The Software Crisis”.
The ‘Software Crisis’ was a turning point that made people think seriously about the software development processes. The industry demanded certain solutions to be applied to ensure successful, cost-effective software implementation. Many people began to think about new ideas of systematic development of software that can be deliver on time, on schedule, with high quality and reasonable costs. During this time, many approaches were invented and contribute to the modern and advanced thinking of an “Engineering solution” to the software development process. Engineering is a discipline that exist a long time, it focuses on the application of scientific principles such as logical thinking and designing to practical ends such as building bridges, roads, mechanical machines with significant efficiency and effective. By apply “Engineering principles” to the development of software, a new field was created called: ‘Software Engineering’.
Software Engineering advocates a systematic “Life-cycle” approach in all software development. It shows that software can be built following several phases with guidelines, techniques, and tools to ensure the successful completion of the project. There are many Life-cycles for every needs such as ‘Waterfall Model’, ‘Spiral Model’, “Incremental build”, etc. to make it easier to develop and manage the software. These approaches also help managers understand problems which occur during the development and what to do to solve them. The engineering principle also dictates that the quality of the software product is determined by the process that create the product. By focus on the quality of the process, we can have a higher quality product.
As software became more important in every industry. There were significant higher demands for software engineers and some universities began to offer a new degree called “Software Engineering”. Most people who taught this field were engineering professors so the training program was heavily focus on logical thinking, problem solving, and development process. Since then, software engineering degrees have been established at many universities. Most training programs [update]teach both computer science and engineering principles and practices. The first software engineering Master’s degree was established at Seattle University in 1979 then Carnegie Mellon and Stanford have established themselves as having the best training programs.
Since then software engineering degrees have been made available from many more universities across the world. In Asia, it is still a relatively new field because the traditional academic is slow to adopt changes. In late 1990s, S. Korea was the first country that adopted the software engineering training program, following by Japan and India.
Traditionally, most software people called themselves programmers or software developers. However, in the U.S and Europe, the term “programmer” has often been used to refer to people without the degree or proper education, who are trained from vocational schools for few months and cannot do good quality works. In response, many software people called themselves software developers or software engineers to avoid being “called” programmer. In many U.S companies, the titles software developer refers to people who has a computer science degree and software engineer refers to people who has a degree in software engineering.