Kỹ năng và tiến bộ

GS John Vu06/06/2025 13:00
Kỹ năng và tiến bộ

Cái nhìn truyền thống của đào tạo về Khoa học máy tính là phát triển người lập trình để viết mã và sửa lỗi.

Phần lớn những người lập trình KHÔNG gặp khách hàng, KHÔNG kiến trúc hay thiết kế hệ thống, KHÔNG viết yêu cầu, hay viết trường hợp kiểm thử tự động mà chỉ viết mã. Cái nhìn này bây giờ là LẠC HẬU vì viết mã chỉ là một phần nhỏ của toàn bộ việc phát triển phần mềm. Ngày nay, người phần mềm tốt nghiệp từ Khoa học máy tính hay Kĩ nghệ phần mềm phải làm nhiều thứ HƠN việc lập trình. Tuỳ theo chỗ họ làm việc, liệu đó là công ti nhỏ hay lớn, việc đào tạo của họ có thể thực sự tạo ra khác biệt trong thành công hay thất bại của họ.

Trong công ti nhỏ, người làm phần mềm phải làm nhiều điều khi được yêu cầu. KHÔNG thể nào chỉ viết mã hay kiểm thử được. Các công ti nhỏ cần người phần mềm có khả năng làm bất kì cái gì cần thiết để giúp cho dự án thành công. Đó là lí do tại sao hầu hết các công ti nhỏ đều thà thuê người kĩ sư phần mềm hơn là sinh viên khoa học máy tính bởi vì họ biết về việc đào tạo cho các bằng cấp này. Nhân tố then chốt trong công ti nhỏ là sự linh hoạt và nhanh nhẹn của người phần mềm.

Công ti lớn tổ chức qui trình phát triển thành các khu vực đặc biệt cho nên họ ưa thích thuê các chuyên gia có kinh nghiệm. Việc làm của họ thường yêu cầu nhiều năm kinh nghiệm trong khu vực đặc biệt như Kiến trúc sư phần mềm, Kĩ sư yêu cầu, Người phân tích nghiệp vụ, Người kiểm thử phần mềm, Chuyên viên đảm bảo chất lượng v.v. Trong trường hợp này, mọi việc đều đặc biệt hội tụ vào chuyên môn. Chẳng hạn Kiến trúc sư thiết kế; Người lập trình viết mã; Người lãnh đạo kĩ thuật quản lí người lập trình; Người quản lí dự án lập kế hoạch và giám sát hoạt động dự án. Nhân tố then chốt trong công ti lớn là phân biệt vai trò, trách nhiệm và đảm nhiệm.

Tính linh hoạt và vai trò đôi khi tạo ra vấn đề cho người phần mềm. Một người đã làm tốt trong công ti lớn có thể KHÔNG cảm thấy thoải mái trong công ti nhỏ và ngược lại. Theo cảnh quan giáo dục và đào tạo, tôi tin mọi sinh viên phần mềm trước hết phải học khái niệm nền tảng về phát triển phần mềm hay lập trình (viết mã và sửa lỗi). Sau khi làm chủ lập trình, sinh viên cũng phải học các kĩ năng hỗ trợ như Kiểm thử, Quản lí cấu hình, Đảm bảo chất lượng, Làm tài liệu, Phân tích yêu cầu. Thực tế đó là những kĩ năng hỗ trợ tạo ra sự khác biệt giữa người lập trình và người phát triển.

Người phát triển có cái nhìn rộng hơn nhiều và có khả năng thấy toàn thể quá trình phát triển. Người lập trình chỉ viết mã và kiểm thử công việc của họ có cái nhìn hẹp hơn nhiều và KHÔNG biết qui trình phát triển. Đào tạo kĩ sư phần mềm đi xa hơn vào toàn thể hệ thống bằng việc hiểu vấn đề doanh nghiệp, giải pháp kiến trúc và thiết kế, lựa chọn phần cứng thích hợp và trên hết tất cả, họ cũng hiểu khía cạnh quản lí của dự án phần mềm.

Bởi vì sự khác biệt trong chương trình và đào tạo, một số sinh viên làm tốt hơn những người khác. Người lập trình tốt có thể KHÔNG phải là người phát triển phần mềm tốt. Viết mã là quan trọng nhưng không đủ dưới dạng phát triển phần mềm. Người phát triển tốt có thể KHÔNG phải là người có thể giải quyết được vấn đề doanh nghiệp. Biết thiết kế và viết mã là bản chất nhưng không thích hợp dưới dạng giải quyết vấn đề doanh nghiệp. Điều quan trong với sinh viên là hiểu các chương trình đào tạo khác nhau, điều họ bao quát và lựa chọn chương trình thích hợp.

Nhiều giáo sư hàn lâm tranh cãi rằng chương trình bậc đại học hiện thời phải dạy nhiều chủ đề thế, sinh viên phải học nhiều môn thế nên đào tạo thêm về phát triển phần mềm là quá nhiều. Tốt hơn cả là để người lập trình viết mã và thuê người khác, người có nhiều kinh nghiệm hơn làm các hoạt động khác. Tôi KHÔNG đồng ‎ với cách nhìn đó bởi vì nó giới hạn sinh viên vào kĩ năng tầm thường và cách li họ với mọi thứ trong phát triển phần mềm. Ngày nay, công nghệ thay đổi nhanh thế, có cảnh quan hẹp sẽ làm hại cho họ nhiều hơn là giúp họ để tiến vào chuyên nghiệp phần mềm. Ngày nay, công nhân phần mềm phải hiểu công việc của khách hàng và người dùng. Họ phải giúp khách hàng giải quyết các vấn đề. Nếu nhà trường không dạy những kĩ năng này thì điều quan trọng đối với công nhân phần mềm là đi đào tạo thêm về quản lí cấu hình, đảm bảo chất lượng hay hỗ trợ kĩ thuật v.v.

Một số sinh viên KHÔNG muốn là người phát triển phần mềm hay kĩ sư phần mềm. Họ chỉ muốn là người lập trình vì họ thích viết mã và học C, C++. Java, Dot.Net, Network, J2EE v.v. Tất nhiên, họ có thể tìm được việc làm nhưng tương lai của họ bị rất giới hạn. Họ có thể học kĩ năng thêm tại công ti của mình, vì họ có kinh nghiệm họ có thể chuyển từ người lập trình sang người phát triển nhưng điều đó mất thời gian. Công nghiệp phần mềm đang thay đổi nhanh chóng bởi vì công nghệ thay đổi nhanh chóng. Công nhân phần mềm không theo kịp những thay đổi này có thể bị tụt lại sau. Công nhân phải bắt kịp với công nghệ mới để nhận diện cơ hội và xác định cách các công nghệ này tác động tới việc làm của họ. Nếu họ không làm như vậy, họ có thể bị ra ngoài công việc.

Ngày nay một số người lập trình vẫn kiếm sống tốt chỉ bằng việc viết mã nhưng việc làm lập trình sẽ thay đổi khi người lập trình từ các nước có chi phí thấp hơn đang đi vào trong thị trường này và cạnh tranh. Vài năm trước, có nhiều người lập trình ở Mĩ và châu Âu nhưng khi những người lập trình từ Ấn Độ và Trung Quốc vào thị trường này, phần lớn trong họ hoặc đổi việc làm hoặc phải học kĩ năng mới để vẫn còn được thuê. Ngày nay, người lập trình Ấn Độ và Trung Quốc sợ mất việc cho các nước có chi phí thấp như Nam Mĩ và châu Phi. Tôi đã thấy nhiều người lập trình từ các nước như Chile, Argentina, Nicaragua, Nigeria, Congo, và Kenya cạnh tranh thành công với Ấn Độ và Trung Quốc khi họ làm quãng 20% của điều người lập trình trung bình ở Trung Quốc làm.

Tôi tin hoặc bạn học bây giờ hoặc học về sau nhưng bạn không thể dừng lại với cùng một kĩ năng mãi mãi được. Thế giới đang thay đổi nhanh chóng và nếu bạn KHÔNG đi cùng nó, bạn sẽ bị tụt lại sau. Ngày nay khi những công nghệ mới như dùng các bộ xử lí đa lõi và lai, tính toán ảo hoá và “kết cấu” (các bộ xử lí nối kết qua mạng), kết mạng xã hội, tính toán mây, công nghệ Web, tính toán phổ cập, tính toán ngữ cảnh, thực tại gia tăng (dữ liệu do máy tính sinh ra và dữ liệu thế giới thực hỗn hợp), và ngữ nghĩa nâng cao (ngôn ngữ phần mềm được gán nghĩa) đã làm thay đổi công nghiệp phần mềm rất nhiều khi so sánh chỉ tròn hai năm. Chẳng mấy chốc nhiều công ti sẽ bắt đầu với tính toán ảo hoá và mây, công ti phần mềm hay bộ phận CNTT vận hành theo cách truyền thống sẽ KHÔNG có khả năng cạnh tranh, người lập trình có kĩ năng hầu hết để viết mã trong Pascal hay C sẽ không có khả năng tìm được việc.

Vì công nghệ vẫn cứ thay đổi ngày một nhanh chóng hơn mọi năm, bạn phải tiếp tục học điều mới để đáp ứng cho nhu cầu thị trường. Trong tương lai rất gần, những thứ như Ruby, Ajax, Enterprise 2.0, Web 2.0, SEO, Phần mềm xã hội, Mô hình tiêu thụ, Phần mềm như dịch vụ (Saas), Tính toán mây, Hướng ngữ cảnh sẽ là thông dụng như C++, Java, Dot.Net, hay J2EE ngày nay vì môi trường làm việc tiếp tục thay đổi và trở nên phức tạp hơn. Tất cả những điều này đã thêm vào điều người phát triển phần mềm trung bình phải biết. Trong tương lai rất gần, người phát triển phần mềm phải làm việc chặt chẽ với doanh nghiệp bởi một phần của doanh nghiệp tương tác với phần khác của doanh nghiệp. Họ phải hiểu khái niệm về Quản lí quan hệ khách hàng (CRM), Lập kế hoạch tài nguyên doanh nghiệp (ERP), và Quản lí dây chuyền cung cấp (SCM) vì điều này phải được quản lí tại mức chương trình hay tuyển tập chương trình. Đó là lí do tại sao để thành công, sinh viên cần chấp thuận việc học cả đời và tiếp tục học những điều mới khi chúng tới.

English version

Skills and progress

The traditional view of Computer Science training is to develop programmers to write code and fix defects. Most programmers do NOT meet customers, do NOT architect or design systems, do NOT write requirements, or write automated test cases but only write code. This view is now OBSOLETE as coding is only a small part of the entire software development. Today, software people graduate from Computer Science or Software Engineering must do much MORE than programming. Depend on where they work, whether it is small or large company, then their training can really make the difference in their success or failure.

In small company, software people must do multiple things as needed. It is NOT possible just to write code or test. Small companies need software people who are capable to do whatever it takes to help the project succeed. That is why most small companies rather hire software engineer than computer science graduates because they know about the training for these degrees. The key factor in small company is the flexibility and versatility of software people.

Big company organizes the development process into special areas so they prefer to hire specialists who have experiences. Their jobs often require many year of experiences in specific area such as Software architect, Requirements engineer, Business analyst, Software tester, Quality assurance specialist etc. In this case, every job is specifically focusing on a specialty. For example Architects design; Programmers write code; Technical Leads manage programmers; Project Managers plan and monitor project activities. The key factor in big company is distinguishing roles, responsibilities and accountabilities.

Flexibility and roles sometime create problem to software people. A person who has been doing well in large company may NOT feel comfortable in smaller company and vice versa. From the education and training perspective, I believe every software student must first learn the fundamental concept of software development or programming (Write code and fix defects). After master the programming, students must also learn the supporting skills such as Testing, Configuration management, Quality assurance, Documentation, Requirement analysis. Actually it is these supporting skills that make the difference between a programmer and a developer. The developer has a much larger view and an ability to see the entire development process. Programmers who only write code and test their works have much narrower view and do NOT know development process. Software engineer training go further into the entire systems by understand business problems, architect and design solutions, select appropriate hardwares and most of all, they also understand the managing aspect of software project.

Because of the difference in programs and trainings, some students do better than the others. A good programmer may NOT be a good software developer. Coding is important but insufficient in term of software development. A good developer may NOT be the person who can solve business problems. Knowing to design and code are essential but inadequate in term of solving business problem. It is important for student to understand the different training programs, what they cover and select the appropriate one. Many academic professors argue that current undergraduate program must teach so many subjects, students have to take so many courses so more training in software development is too much. It is better to let programmer write code and hire others, more experienced people to do other activities. I do NOT agree with that view because it limits students to a trivial skill and insulate them from everything in software development. Today, technologies have changed so fast, having a narrow perspective will hurt them more than helping them to advance into software professionals. Today, software workers must understand the business of the customers and users. They must help customers solving problems. If the school does not teach these skills then it is important for software workers to take additional trainings in configuration management, quality assurance or tech support etc.

Some students do NOT want to be software developers or software engineer. They only want to be programmers as they like to code and learning C, C++. Java, Dot.Net, Network, J2EE etc. Of course, they can find works but their future is very limited. They may learn additional skills at their companies, as they have experiences they can move from programmer to developer but it takes time. The software industry is changing fast because technology is changing rapidly. Software workers who do not keep up with these changes could be left behind. Workers should keep up with new technology to identify opportunities and determine how these technologies impact their jobs. If they don’t, they could be out of work.

Today some programmers still make good living just by writing code but programming jobs will change as programmers from lower cost countries are moving into the market and compete. Few years ago, there are many programmers in the U.S and Europe but as programmers from India and China begin to enter the market, most of them either change jobs or have to learn new skills to stay employed. Today, India and Chinese programmers are afraid of losing works to lower cost countries such as S. America and Africa. I have seen many programmers from countries such as Chile, Argentina, Nicaragua, Nigeria, Congo, and Kenya compete successfully against India and China as they make about 20% of what an average programmer in China made.

I believe either you learn now or learn later but you can not stay with the same skill forever. The world is changing quickly and if you do NOT move with it, you will be left behind. Today as new technologies such as the use of multi-core and hybrid processors, virtualization and “fabric” computing (linking processors across a network), social networking, cloud computing, Web technology, ubiquitous computing, contextual computing, augmented reality (blending computer-generated and real-world data), and advanced semantics (the meaning-assigned software language) have change the software industry significantly as compare with just only two years ago. Soon many companies will start with virtualization and cloud computing, a software company or IT department that operates in the traditional way will NOT be able to compete, a programmer whose skill is mostly code in Pascal or C will not be able to find employment.

As technology keeps changing faster and faster every year, you must continue to learn new thing to meet the market demand. In the very near future, things such as Ruby, Ajax, Enterprise 2.0, Web 2.0, SEO, Social software, Consumption models, Software as a service (Saas), Cloud computing, Context Oriented will be as common as today C++, Java, Dot.Net, or J2EE as the software working environment continue to change and becoming more complex. All these things have added to what the average software developer must know. In very near future, software developer must work closely with the business where part of the business interacts with another part of the business. They must understand the concept of Customer Relationship Management (CRM), Enterprise Resource Planning (ERP), and Supply Chain Management (SCM) as thing should be managed at the program or portfolio levels. That is why to succeed, students need to adopt the lifelong learning and continue to learn new things as they come.

 


Gửi bình luận
(0) Bình luận
1

Vòng đời kiểm thử

Nhiều người trong các bạn đã hỏi tôi về kiểm thử và mối quan hệ của nó với vòng đời phát triển phần mềm. Về căn bản kiểm thử tuân theo vòng đời tương ứng với mọi pha của vòng đời phát triển.
2

Một dòng mã

Khi tôi là sinh viên khoa học máy tính, tôi chưa bao giờ học về Quản lí cấu hình phần mềm Software Configuration Management (SCM).
3

Cách đo và độ đo

Tôi nhận được một email người gửi viết: “Cái gì là khác biệt giữa cách đo và độ đo và có bao nhiêu cách đo hay độ đo phần mềm?”
4

Thành công ở đại học

Thành công nghĩa là đạt tới mục đích của bạn, dù chúng là bất kì cái gì.
5

Cách đo

Tôi nhận được một email từ một sinh viên: “Tại sao chúng ta phải đo công việc của mình? Đo là khó và phí thời gian vì nó không cung cấp cho tôi giá trị. Nếu chúng ta có lỗi, chúng ta có thể sửa chúng về sau bất kể chúng có bao nhiêu. Tôi không biết tại sao chúng ta cần đo?”

Trở lại chuyện kiểm thử phần mềm

Một sinh viên mới tốt nghiệp, làm việc cho một công ti phần mềm gặp tôi nói: “Tôi làm việc là người kiểm thử phần mềm, tôi kiểm thử mọi thứ rất cẩn thận nhưng khách hàng của tôi vẫn tìm ra lỗi. Tôi đã làm gì sai và tôi có thể làm gì để là người kiểm thử giỏi hơn?”

Làm việc theo tổ và làm việc theo nhóm

Có khác biệt giữa “Làm việc theo tổ” và “Làm việc theo nhóm”.

Làm việc theo tổ

Trong cuộc họp, nhiều cựu sinh viên tới gặp tôi kể về việc “Làm việc theo tổ”. Họ bảo tôi rằng họ đã làm việc trong tổ xây dựng phần mềm nhưng khi tôi hỏi thêm các câu hỏi, dường như là họ đã làm việc “trong nhóm” mà KHÔNG “trong tổ”.

Hệ thống giáo dục

Có ba kiểu hệ thồng giáo dục tồn tại ngày nay, giáo dục truyền thống, giáo dục thời đại công nghiệp, và giáo dục thời đại thông tin.

Phát triển nghề nghiệp

Mọi năm, tôi đều nhận được nhiều emails từ các sinh viên đã tốt nghiệp hỏi lời khuyên về nghề nghiệp của họ.

Xin việc

Mọi năm các công ti phần mềm đều nhận hàng nghìn đơn xin việc làm.

Công nghiệp phần mềm cần gì

Chúng tôi thảo luận với một nhóm quản lí cấp cao của các công ti phần mềm Trung Quốc khi họ thăm Carnegie Mellon về công nghiệp phần mềm ở Trung Quốc và họ bảo rằng rất khó tìm được người đúng với kĩ năng đúng bởi vì đào tạo đại học là KHÔNG nhất quán.

Người quản lý có kinh nghiệm

Một dự án điển hình thường yêu cầu các thành viên tổ có những kĩ năng kĩ thuật chuyên môn nhưng với người quản lí có kinh nghiệm, một mình kĩ năng kĩ thuật là KHÔNG đủ.

Không khóc giữa nhân gian: Gặp lại chính mình trong vô lượng khổ đau

"Không khóc giữa Nhân gian" không phải là một quyển sách chữa lành, mà là lời nhắn nhủ chánh niệm rằng chúng ta đừng sợ nỗi buồn. Nỗi buồn không đáng sợ, cái đáng sợ là hiểu sai và có thái độ chưa đúng với nỗi buồn mình đang trải qua.

Ưu tiên cho người quản lý dự án phần mềm

Blog GS John VU - GS John Vu - 13/07/2026 11:00
Phần lớn những người quản lí dự án được đào tạo để hội tụ vào lịch biểu nhưng theo kinh nghiệm của tôi, có lẽ điều quan trọng nhất là về đặt ưu tiên dự án.

10 câu trích dẫn ý nghĩa dành cho những ai đang cảm thấy lạc lối

Suy ngẫm - Trinh Quang - 13/07/2026 10:00
Khi bạn không thích những người xung quanh, cách tốt nhất để thể hiện sự không thích đó không phải là tranh cãi với họ, mà là chủ động rời bỏ họ.

Bức ảnh bữa cơm gia đình của tỷ phú Jensen Huang khiến nhiều người suy ngẫm

Truyền cảm hứng - Mi Vân - 13/07/2026 09:00
Một bữa cơm gia đình giản dị của Jensen Huang - CEO Nvidia và là một trong những tỷ phú giàu nhất thế giới - đang khiến nhiều người suy ngẫm về giá trị của gia đình giữa cuộc sống hiện đại.

Không khóc giữa nhân gian: Gặp lại chính mình trong vô lượng khổ đau

Từ sách - Phim - TĐ - 13/07/2026 08:00
"Không khóc giữa Nhân gian" không phải là một quyển sách chữa lành, mà là lời nhắn nhủ chánh niệm rằng chúng ta đừng sợ nỗi buồn. Nỗi buồn không đáng sợ, cái đáng sợ là hiểu sai và có thái độ chưa đúng với nỗi buồn mình đang trải qua.

Một dòng mã

Blog GS John VU - GS John Vu - 12/07/2026 10:00
Khi tôi là sinh viên khoa học máy tính, tôi chưa bao giờ học về Quản lí cấu hình phần mềm Software Configuration Management (SCM).

10 câu trích dẫn giúp bạn khi lạc lối

Suy ngẫm - Trinh Quang - 12/07/2026 09:00
Một khi đã đánh mất điều gì đó, bạn sẽ không bao giờ có thể lấy lại được. Có những việc, nếu bạn không làm ngay bây giờ, bạn sẽ không bao giờ làm lại được nữa.

Không khóc giữa nhân gian - Làm sao để hết khổ?

Từ sách - Phim - FN - 12/07/2026 08:00
Đau khổ vốn không trừ một ai, và nó có trăm hình vạn trạng: một sự mất mát, cảm giác cô độc giữa đám đông, hay đơn giản là nỗi thất vọng khi không đạt được thứ mà mình mong chờ. Vậy phải làm sao để ta hết khổ? Đau khổ có thực sự đáng sợ như người ta vẫn nghĩ? Hay chúng ta vẫn có thể nhìn đau khổ dưới một góc độ bao dung hơn?

Cách đo và độ đo

Blog GS John VU - GS John Vu - 11/07/2026 11:00
Tôi nhận được một email người gửi viết: “Cái gì là khác biệt giữa cách đo và độ đo và có bao nhiêu cách đo hay độ đo phần mềm?”

Không thích ai đó, cách khéo léo để xử lý việc này là thông qua "Phương pháp Sedona"

Suy ngẫm - PV - 11/07/2026 10:00
Trong cuộc sống, chúng ta sẽ luôn gặp những người mình không thích: đó có thể là một đồng nghiệp luôn nhắm vào bạn ở nơi làm việc, một người quen giả tạo và hay buôn chuyện, hoặc một người lạ có giá trị sống trái ngược với bạn và bạn không thể hòa hợp.

Mẹ tỷ phú Elon Musk chỉ cách nuôi dạy con thành tài: điều tuyệt đối không nên làm

Phong cách sống - Hân Ly - 11/07/2026 09:00
Mẹ của người giàu nhất thế giới cho rằng việc nuôi dạy con không nằm ở sự áp đặt, mà ở điều này cực kỳ quan trọng và cần thiết.

Sắp phát hành: Hồi ký của hy vọng

Tủ sách - PV - 11/07/2026 08:00
Hồi ký của hy vọng (Saving Five: A Memoir of Hope) thu hút sự chú ý của truyền thông quốc tế không chỉ bởi câu chuyện có thật của Amanda Ngọc Nguyễn, mà còn bởi cách cô kể lại cuộc đời mình vượt ra ngoài khuôn mẫu của một hồi ký về sang chấn.

Bạn không cần thêm thành tựu đâu, điều bạn cần là nghỉ ngơi

Suy ngẫm - TĐ - 10/07/2026 11:00
 Có những người dành cả tuổi trẻ để thoát khỏi nghèo khó, nhưng rồi khi đã bước ra khỏi nó, họ lại không biết làm thế nào để dừng việc “sống sót”.

Thành công ở đại học

Blog GS John VU - GS John Vu - 10/07/2026 10:00
Thành công nghĩa là đạt tới mục đích của bạn, dù chúng là bất kì cái gì.

Cuộc sống bình dị thích mặc đồ cũ, ăn cơm bụi của 'tượng đài điện ảnh' Châu Nhuận Phát

Phong cách sống - Ngọc Thanh - 10/07/2026 09:00
Dù nắm trong tay khối tài sản khổng lồ, tài tử Châu Nhuận Phát vẫn giữ lối sống giản dị đến mức khó tin.

‘Không khóc giữa nhân gian’ - Học cách bình yên đi qua nỗi buồn

Từ sách - Phim - FN - 10/07/2026 08:00
​​​​​​​Chúng ta lầm tưởng rằng sở hữu càng nhiều thì càng hạnh phúc, nhưng đâu ngờ càng nắm chặt, càng mong cầu thì khổ lụy càng chất chồng.
HẠT GIỐNG TÂM HỒN
2019 Bản quyền thuộc về hatgiongtamhon.com.vn. Phát triển bởi ONECMS