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

Làm việc hay không làm việc

Tuần trước tôi nhận được một email: “Dường như là thầy đang khuyến khích sinh viên đi làm trong khi vẫn đang học đại học nhưng bố mẹ em bảo em rằng em phải tập trung vào học tập vì họ có thể chăm lo cho em. Đi làm sẽ làm phân tán học tập của em và em KHÔNG nên làm hai điều đồng thời thì sẽ không thành công trong cái nào. Thầy nghĩ thế nào?”
2

Phần mềm mã nguồn mở

Phần mềm “nguồn mở” là phần mềm được viết theo cách mã nguồn để mở, sẵn có cho mọi người dùng, thay đổi, cải tiến và tự do phân phối lại nó.
3

Tri thức và kỹ năng

Tuần trước, tôi đã thảo luận với sinh viên về kĩ năng mà công nghiệp phần mềm cần. Khi tôi bảo họ rằng có nhiều việc làm cho xây dựng ứng dụng di động và làm việc với các ứng dụng bán sẵn trên thị trường Commercial Off The Shelf (COTS) như SAP và PeopleSoft, một sinh viên lập tức lên tiếng lo ngại rằng những điều đó không được dạy trong trường.
4

Điều nước Mỹ cần

Theo báo cáo của chính phủ Mĩ, trong năm thứ hai liên tiếp, kĩ sư phần mềm là việc làm số một ở Mĩ.
5

Công nghệ và cơ hội

Nếu chúng ta nhìn lại thành tựu của công nghệ, chúng ta sẽ ngạc nhiên về tiến bộ đã được thực hiện.

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 đủ.

Công nghiệp công nghệ thông tin ở Nga

Blog GS John VU - GS John Vu - 21/06/2026 12:00
Khi lần đầu tiên tôi tới thăm Nga năm 1996 để tiến hành nghiên cứu về xu hướng phần mềm, tôi đã bị ấn tượng về lực lượng lao động kĩ năng cao quãng vài nghìn người phát triển phần mềm, nhiều người có bằng tiến sĩ và thạc sĩ với đào tạo chuyên sâu về toán học và vật lí.

Vì sao quẹt thẻ ngân hàng thanh toán đúng chỗ nhưng bạn không được hoàn tiền như quảng cáo?

Kỹ năng - Thu Thủy - 21/06/2026 11:00
Bạn nghĩ mình đã quẹt thẻ tại đúng nhà hàng, đúng chương trình ưu đãi nhưng vẫn không nhận được hoàn tiền như kỳ vọng. Trong khi đó, người khác chi tiêu tương tự lại được hưởng đầy đủ. Sự khác biệt nằm một mã 4 chữ số ít ai để ý.

Sau 30 tuổi, bạn biết mình có thể làm khác đi, nhưng chưa dám

Suy ngẫm - Hà Nguyên - 21/06/2026 10:00
Không phải không muốn cố gắng, mà là không biết cố vào lúc nào.

Từng bị smartphone "khai tử", Gen Z bất ngờ hồi sinh dòng máy ảnh 20 năm tuổi

Phong cách sống - Minh Ngọc - 21/06/2026 09:00
Bị smartphone 'khai tử' suốt hơn 10 năm, máy ảnh compact bất ngờ hồi sinh: Gen Z đang săn lùng thứ công nghệ lỗi thời này vì điều gì?

Cô đơn ở đỉnh cao

Từ sách - Phim - Minh Nguyệt - 21/06/2026 08:00
Có một câu hỏi mà nhiều lãnh đạo tự hỏi mình sau một cuộc họp dài, khi căn phòng đã vắng hết người: tại sao mình lại cô đơn đến vậy?

Làm việc hay không làm việc

Blog GS John VU - GS John Vu - 20/06/2026 12:00
Tuần trước tôi nhận được một email: “Dường như là thầy đang khuyến khích sinh viên đi làm trong khi vẫn đang học đại học nhưng bố mẹ em bảo em rằng em phải tập trung vào học tập vì họ có thể chăm lo cho em. Đi làm sẽ làm phân tán học tập của em và em KHÔNG nên làm hai điều đồng thời thì sẽ không thành công trong cái nào. Thầy nghĩ thế nào?”

‘Thuật nhìn người’ của Gia Cát Lượng: Quan sát 7 điều, người tài - người tệ không thể che giấu!

Kỹ năng - Diệu Đan - 20/06/2026 11:00
7 tiêu chí nhìn người của Gia Cát Lượng không chỉ đúng trong việc chọn tướng thời loạn, mà còn là kim chỉ nam hữu ích trong thời hiện đại khi quản trị nhân sự, kinh doanh ngày nay.

Bộ não của bạn đạt đỉnh cao ở độ tuổi nào?

Suy ngẫm - Phạm Hường - 20/06/2026 10:00
Khi tuổi trẻ dần trôi vào dĩ vãng, bạn có thể bắt đầu lo sợ về tuổi già, nhưng nghiên cứu cho biết nhiều người trong chúng ta, chức năng tâm lý tổng thể thực sự đạt đỉnh điểm ở độ tuổi từ 55 đến 60.

CEO Nvidia hé lộ bí mật thành công trong sự nghiệp của một con người

Phong cách sống - Mai Trang - 20/06/2026 09:00
Đó là hãy học cách yêu công việc mình đang làm thay bằng tìm kiếm công việc mình yêu thích.

Trạm dừng sinh tử: Quan sát trung thực về những cuộc gặp gỡ trong giây phút cuối cùng

Từ sách - Phim - TĐ - 20/06/2026 08:00
Có một câu hỏi mà hầu hết chúng ta đều né tránh suốt cả cuộc đời: điều gì xảy ra sau khi chúng ta chết?

Lập mục đích

Blog GS John VU - GS John Vu - 19/06/2026 12:00
Bạn có biết thuyền trưởng dẫn hướng con thuyền của mình trên đại dương thế nào không?

Tâm lý CEO: Nghệ thuật giữ bình tĩnh, ra quyết định và dẫn dắt trong áp lực

Kỹ năng - Vũ Anh - 19/06/2026 11:00
Giữ được sự minh mẫn, kiểm soát cảm xúc và ra quyết định tỉnh táo trong khủng hoảng — đó là “môn võ thượng thừa” mà không trường lớp nào có thể dạy.

"Thần đồng" Đại học Thanh Hoa, 49 tuổi vẫn thất nghiệp: Khi ra tới biển lớn, mới biết bản thân chỉ là hạt cát nhỏ

Suy ngẫm - Nguyễn Phượng - 19/06/2026 10:00
Khi vào đại học Thanh Hoa, nam sinh được mệnh danh là "thần đồng" mới biết còn nhiều người giỏi hơn mình.

Con trai duy nhất của Gia Cát Lượng vì sao không thể nối nghiệp cha?

Phong cách sống - Linh Lan - 19/06/2026 09:00
Gia Cát Lượng chỉ có một con trai ruột, rất thông tuệ và sớm được trọng dụng, nhưng "bên ngoài chẳng giúp được quốc gia, bên trong chẳng thể thay đổi triều chính".

Minh triết từ nỗi bất an - Khi hiểu biết làm con người mệt mỏi hơn

Từ sách - Phim - Bảo Lam - 19/06/2026 08:00
Trong “Minh triết từ nỗi bất an”, Alan Watts viết về một nghịch lý rất gần với con người hiện đại: càng cố hiểu, cố dự đoán và kiểm soát đời sống để thấy an toàn, ta lại càng dễ mắc kẹt trong lo âu.
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