Một sinh viên viết cho tôi: “Em đã từng nghĩ về đổi lĩnh vực học tập của em sang kĩ nghệ phần mềm. Cần cái gì để có được bằng cấp này? Có cách nhanh chóng học nó không? Phương pháp phần mềm tốt nhất nào cần theo? Có nhiều toán học và viết mã hay chỉ cần đủ để có kĩ năng máy tính nào đó? Phải mất bao lâu để trở thành người quản lí phần mềm?”

Đáp: Bạn cần biết tại sao bạn muốn đổi lĩnh vực học tập của bạn sang kĩ nghệ phần mềm. Động cơ của bạn sẽ xác định liệu bạn sẽ thành công như người kĩ sư phần mềm hay không. Kĩ nghệ phần mềm không khó nhưng yêu cầu sinh viên dành thời gian và nỗ lực để xây dựng tri thức và kĩ năng của họ. Không có cách nhanh chóng để học nó và không có phương pháp nào làm chủ mà không mất nỗ lực nào. Mọi lĩnh vực kĩ nghệ đều yêu cầu nền tảng nào đó về toán học. Bạn cũng cần tư duy logic và khả năng phân tích và giải quyết vấn đề.

Không có một phương pháp “tốt nhất” nhưng có nhiều phương pháp tốt, từng phương pháp đều được thiết kế để giải quyết vấn đề đặc thù. Nếu bạn học kĩ nghệ phần mềm, bạn sẽ cần học nhiều phương pháp trong chúng. Tất nhiên, bạn phải viết mã chứ. Không có cách nào để học phần mềm mà không lập trình. Đó là nền tảng của phần mềm nơi mọi thứ được xây dựng trên nó và tuỳ thuộc vào kiểu dự án và vai trò của bạn mà bạn có thể viết mã nhiều hay ít. Nếu các yêu cầu được viết rõ ràng, giải pháp được thiết kế tốt thì viết mã là dễ và trực tiếp nhưng nếu chúng không có, thì viết mã có thể là khó khăn do nhiều thay đổi và sửa lỗi. Kĩ nghệ phần mềm là lĩnh vực yêu cầu nhiều thực hành. Bạn càng viết mã nhiều bạn sẽ càng trở thành người lập trình giỏi hơn. Tuy nhiên, có cái gì đó mà bạn cần chú ý tới. Hầu hết các sinh viên đều phát triển kĩ năng lập trình khi họ lần đầu tiên học viết mã. Nếu họ không học cách viết mã đúng, họ sẽ phát triển thói quen xấu. Nhiều người không chú ý tới “cách” họ viết mã chừng nào nó vẫn còn chạy được cho nên họ viết càng nhiều mã, thói quen trở thành cách họ làm việc và rất khó thay đổi. Không may, một số trường thường hội tụ vào cú pháp đúng, luồng logic, và thuật toán thay vì “cách” sinh viên viết mã. Nếu chương trình chạy với kết quả đúng thì thế là đủ tốt. Đến lúc sinh viên tốt nghiệp, họ đã có thói quen viết mã. Đó là lí do tại sao có những người lập trình giỏi và người lập trình “cẩu thả”.

Lời khuyên của tôi là tìm đại học tốt dự mọi lớp, chú ý tới bài giảng, làm bài tập về nhà, và đưa nhiều nỗ lực vào học tập thì bạn sẽ học tốt trong bất kì lĩnh vực nào bạn chọn. Điều quan trọng là hiểu khác biệt giữa Khoa học máy tính, Kĩ nghệ phần mềm, Quản lí hệ thông tin và Kĩ nghệ máy tính và lựa chọn khu vực thích hợp để học tập.

Ngay cả sau khi tốt nghiệp, bạn sẽ cần vài năm phát triển kĩ năng và tri thức chuyên gia của bạn. Có thể là bạn sẽ bắt đầu làm người kiểm thử phần mềm hay người phát triển, và rồi với thời gian và kinh nghiệm bạn sẽ đi lên thành người lãnh đạo tổ, kiến trúc sư hệ thống và người quản lí dự án. Về trung bình, mất quãng năm tới bẩy năm để đi vào vị trí quản lí. Bạn càng đưa nhiều nỗ lực vào trong những năm đại học, cơ hội là bạn sẽ làm tốt và leo lên những vị trí cao hơn nhanh hơn những người khác.

Là kĩ sư phần mềm giỏi, bạn phải quyết tâm học tập cả đời vì công nghệ bao giờ cũng thay đổi. Điều quan trọng là phát triển thói quen tốt về đọc sách kĩ thuật, tin tức, websites, blogs, wiki để cho bạn giữ việc mở rộng tri thức kĩ thuật của bạn. Tôi đã từng là kĩ sư phần mềm chuyên nghiệp trong gần bốn mươi năm tới giờ nhưng tôi vẫn cảm thấy tôi có nhiều thứ thế để học. Ngày nay nhiều sinh viên không thích đọc, họ ưa thích cái gì đó nhanh chóng, ngắn cho nên nhiều người phát triển thói quen xấu về biết chút ít cái này cái nọ nhưng chẳng cái gì biết đủ rõ. Với kĩ năng nông cạn, họ không thể thăng tiến nghề nghiệp của họ hơn nữa được.

—-English version—-

Software Engineer’s skills

A student wrote to me: “I have been thinking about changing my field of study to software engineering. What is involved in getting this degree? Is there a quick way to learn it? What is the best software method to follow? Is there lot of math and code or is it just enough to have some computer skills? How long does it take to become a software manager?

Answer: You need to know why do you want to change your field of study to software engineering. Your motivation will determine whether you will be successful as a software engineer or not. Software Engineering is not difficult but it requires students to commit time and efforts to build their knowledge and skills. There is no quick way to learn it and no method to master without any effort. Every engineering field requires some fundamentals of mathematics. You also need logical thinking and ability to analyze and solve problems.

There is no single “best” method but many good ones, each is designed to solve a particular problems. If you study software engineering, you will need to learn many of them. Of course, you must write code. There is no way to study software without programming. It is the foundation of software where everything is built on it and depends on the type of project and your role that you may code more or less. If the requirements are clearly written, the solution is well designed than coding is easy and straight forward but if they are not, than the coding could be tough due to many changes and fixes. Software engineering is a field that requires a lot of practices. The more code you write the better programmer you will become. However, there is something that you need to pay attention. Most students develop their programming skills when they first learn to write code. If they are not learning on how to write code properly, they will develop bad habit. Many do not pay attention to “how” they code as long as it works so the more code they write, the habit become the way they work and it is very difficult to change. Unfortunately, some schools often focus on correct syntax, logical flow, and algorithms rather than “how” students write code. If the program works with correct outcomes than it is good enough. By the time student’s graduate, they already have a habit on writing code. That is why there are good programmers and “sloppy” programmers.

My advice is to find a good university, attend all the classes, pay attention to lectures, do homeworks, and put more efforts to learn then you will do well in any field that you choose. It is also important to understand the difference between Computer Science, Software Engineering, Information System Management and Computer Engineering and select the appropriate area to study.

Even after graduate, you will need several years to develop your skills and expertise. It is likely that you will start as a software tester or developer, and then with time and experience you will move up to team leader, system architect and project manager. On the average, it takes about five to seven years to move to management position. The more efforts you put in during your college years, the chance is you will do well and climb up to higher positions faster than others.

To be a good software engineer, you have to be committed to a lifelong learning because technology always changes. It is important to develop a good habit of reading technical books, news, websites, blogs, wiki so that you keep broadening your technical knowledge. I have been a professional software engineer for almost forty years now but I still feel I have so much to learn. Today many students do not like to read, they prefer something quick, short so many develop a bad habit of knowing a little bit of this and that but nothing well enough. With shallow skills, they cannot advance their career further.