21 Apr, 2021
Công việc phần mềm có khó không?
Một sinh viên viết cho tôi: “Thầy nói thì dễ rằng phần mềm là lĩnh vực học tập tốt mà có thể làm cho bạn có việc làm tốt nhưng học lập trình là khó và phần lớn những người làm trong phần mềm đều bảo em rằng việc làm là gian nan và nhiều người bỏ sau vài năm. Xin thầy bình luận.”
Đáp: Không ai nói phần mềm là dễ. Không ai nói học lập trình là dễ. Không ai nói giáo dục đại học là dễ bởi vì bạn phải đưa nỗ lực của bạn vào bất kì cái gì bạn làm. Nếu bạn muốn có việc làm tốt, làm ra nhiều tiền nhưng không muốn làm việc chăm chỉ hay không đưa nỗ lực nào vào thì bạn phải đang mơ rồi. Xin thức dậy và đối diện với thực tại.
Bạn phải hiểu rằng phần mềm chỉ là một lĩnh vực học tập, không khác các lĩnh vực khác như kinh doanh, toán học, phần cứng hay thậm chí văn học. Để học bạn phải đưa nỗ lực vào để thu lấy tri thức và kĩ năng. Chương trình máy tính là không khác với việc học ngoại ngữ như học tiếng Anh hay tiếng Pháp, điều có nghĩa là bạn phải thực hành để thu được tri thức và kĩ năng. Ngôn ngữ lập trình được viết theo cách thức có phương pháp và logic cũng giống như văn phạm trong ngoại ngữ. Nếu bạn muốn học lập trình máy tính, bạn phải bắt đầu với những điều cơ sở bằng việc học cú pháp và qui tắc và viết vài chương trình đơn giản để làm chủ những nền tảng này trước khi tiến vào những trình phức tạp hơn. Nhiều sinh viên thường không học các qui tắc này mà học các thủ thuật và lối tắt chỉ để viết chương trình chạy được. Đó là lí do tại sao họ đối diện với khó khăn khi họ phải giải quyết với những chương trình lớn hơn và phức tạp hơn. Bạn không thể học lập trình bằng việc đọc sách; bạn không thể học viết mã bằng việc học lối tắt hay thủ thuật. Bạn phải thực hành nó mọi ngày từ các lệnh đơn giản tới thuật toán phức tạp hơn.
Tôi tin mọi người không học tốt trong lập trình là vì họ không học điều nền tảng mà vội vàng vào viết cái gì đó nhanh chóng qua thủ thuật và lối tắt nào đó. Có thể là họ thậm chí không tới trường và không nhận hướng dẫn đúng bởi hướng dẫn viên có đủ tư cách. Không có chỉ dẫn đúng, không có phương pháp đúng và không tuân theo những qui tắc nào đó, họ thường thất bại sau vài năm. Bạn phải hiểu rằng máy tính chỉ làm điều bạn bảo chúng làm. Nếu bạn cho chúng mệnh lệnh sai, thế thì chúng có lỗi. Cách tốt nhất để học cách lập trình là “Thực hành, thực hành và thực hành” bằng việc nghĩ một cách logic và tuân theo trình tự các bước có tên là qui trình phần mềm. Khi bạn học cách làm nhiều hơn, bạn sẽ thấy rằng lập trình là KHÔNG khó như điều người khác nói. Nếu bạn sẵn lòng đưa nỗ lực vào và học mọi điều cơ sở thì bạn sẽ tận hưởng việc lập trình cũng giống như bạn thưởng thức âm nhạc hay trò chơi video. Xin nhớ rằng không có cái thay thế cho thực hành vì bạn phải làm nó một cách cần cù.
Lời khuyên của tôi là tìm một chương trình của đại học tốt và đưa nỗ lực của bạn vào học nhiều nhất có thể được. Phần mềm KHÔNG chỉ là lập trình như nhiều sinh viên nghĩ mà còn nhiều hơn nhiều. Ngôn ngữ lập trình là nền tảng; cũng như nhà phải có móng vững nhưng nó cũng phải có tường, mái, cửa và cửa sổ v.v. Cùng điều này cũng áp dụng cho phần mềm vì nó có nhiều khía cạnh như yêu cầu, kiến trúc, thiết kế, và nhiều ứng dụng. Bạn nên lựa chọn chương trình cho phép bạn làm việc trong tổ để cho bạn học được về làm việc tổ vì phần lớn công việc phần mềm được thực hiện trong các tổ. Một số trường có “Dự án đặc biệt” hay “Capstone” nơi bạn làm nó trong tổ. Đây là dự án gần với dự án “thế giới thực” vì bạn có thể tham gia vào trong môi trường nhà trường và nó có giá trị. Bạn cần tham gia vào chương trình thực tập mùa hè trong các công ti “thực” để cho bạn có thể thu được kinh nghiệm làm việc nữa. Cố làm nhiều lập trình và tạo ra một số dự án cho bạn bè để cho bạn có thể thực hành các kĩ năng của bạn. Viết mã trong thời gian rỗi của bạn. Giúp người bạn bằng việc tạo ra website, hay làm cái gì đó hữu dụng cho bản thân bạn. Bạn sẽ học nhiều hơn bằng việc làm các dự án thực, cho dù là của riêng bạn, hơn là bạn sẽ học từ sách.
Nhiều người thường nói rằng học máy tính, bạn phải giỏi về toán. Điều đó là đúng; lập trình không là gì ngoài logic thuần tuý cho nên nó là toán học. Từ quan điểm này, máy tính toàn là về logic; mọi thứ nó làm là thao tác con số. Mọi điều nó biết là không và một, và mọi thứ khác được xây dựng lên trên điều đó. Lập trình về nền tảng dựa trên đại số và logic cơ sở nhiều hơn bất kì dạng toán nào khác. Tuy nhiên, nếu bạn vào đại học bạn phải biết đại số cơ sở như bạn học về nó ở trường tiểu học cho nên nó không khó như một số các bạn của bạn có thể giải thích cho nên đừng để họ thuyết phục bạn làm cái gì khác. Đừng để từ “toán” làm cho bạn sợ.
Khi bạn được thuê như người lập trình hay người kiểm thử mức vào nghề bạn sẽ làm việc với những người phát triển, người có thể có vài năm kinh nghiệm nhiều hơn bạn. Một số người có thể đề nghị bạn giúp họ tìm và gỡ một số lỗi trong chương trình của họ. Tuỳ theo công ti, bạn có lẽ sẽ dành sáu tháng tới hai năm để đọc mã và tìm lỗi trước khi chuyển vào phát triển phần mềm. Điều đó thực sự phụ thuộc vào kĩ năng nào bạn có mà bạn có thể tiến lên vị trí tiếp. Phần lớn mọi người dành thời gian vào kiểm thử rồi phát triển rồi vào lãnh đạo kĩ thuật và người quản lí dự án. Nghề của người phần mềm là mở rộng với nhiều vị trí và đa dạng khu vực để chọn. Chừng nào bạn còn sẵn lòng đưa nỗ lực vào và liên tục học hỏi những điều mới, bạn sẽ làm tốt. Bạn nói rằng nhiều người phần mềm phàn nàn rằng việc làm phần mềm là vất vả và thường bỏ sau vài năm, tôi tin rằng đấy là những ngoại lệ bởi vì phần lớn sinh viên của tôi đều bảo tôi rằng họ thích công việc phần mềm lắm. Trong hai mươi nhăm năm dạy học đã qua, tôi hiếm khi nghe nói về người nào bỏ công việc máy tính.
—-English version—-
Is software work difficult?
A student wrote to me: “It is easy for you to say software is a good field of study that can get you good job but learning programming is difficult and most people who work in software told me that the job is hard and many quit after few years. Please comment.”
Answer: No one says software is easy. No one says learning programming is easy. No one says college education is easy because you must put your effort in anything that you do. If you want to have a good job, make a lot of money but do not want to work hard or put in any effort than you must be dreaming. Please wake up and face the reality.
You must understand that software is just a field of study, no different than other fields such as business, math, hardware, or even literature. To study you must put in the effort to gain the knowledge and skills. Computer program is no different than learning a foreign language just like learning English or French that means you must practice to gain the knowledge and skills. Programming language is written in a methodical and logical way just like grammars in a foreign language. If you want to learn computer programming, you must start with the basics by learning the syntax and the rules and write few simple programs to master these fundamentals before advancing in more complex routines. Many students often do not learn these rules but learn tricks and short cuts just to write programs that run. That is why they are facing difficulty when they have to deal with larger or more complex programs. You cannot learn programming by reading books; you cannot learn to write code by learn some shortcuts or tricks. You must practice it every day from simple instructions to more complex algorithms.
I believe people who do not do well in programming because they do not learn the fundamentals but hurry in writing something quickly via some tricks and shortcuts. It is possible that they may not even go to school and receive proper instructions by a qualified instructor. Without proper instructions, without proper methods and without following certain rules, they often failed after few years. You must understand that computers only do what you tell them to. If you give them wrong instructions, then they have bugs. The best way to learn how to program is “Practice, practice and practice” by thinking logically and following a sequence of steps called software process. As you learn how to do more, you will find that programming is NOT that difficulty as what others say. If you are willing to put in the efforts and learning all the basics then you will enjoy programming just like you enjoy music or videogames. Please remember that there is no substitute for practice as you must do it diligently.
My advice is to find a good university’s program and put in your efforts to learn as much as you can. Software is NOT just programming as many students think but much more. Programming language is the foundation; just like the house must have strong foundation but it must also have walls, roofs, doors and windows etc. The same thing also applies to software as it has many aspects such as requirements, architecture, designs, and many applications. You should select program that allow you to work in team so you learn about teamwork as most software works are done in teams. Some schools have “Special projects” or “Capstone” where you do it in a team. This is as close to “real-world” project as you could get in the school environment and it is valuable. You need to participate in a summer internship programs in a “real” companies so you may gain working experience too. Try to do more programming and create some projects for friends so you can practice your skills. Write code in your spare time. Help out a friend by create a website, or make up something useful for yourself. You will learn more by doing real projects, even on your own, than you ever will from a book.
Many people often said that to learn computer, you must be good with mathematics. It is true; programming is nothing but pure logic so it is math. From this view, computer is all about logic; everything it does is the manipulation of numbers. All it knows is zero and one, and everything else builds on that. Programming fundamentally relies on basic algebra and logic more than any other form of mathematics. However, if you go to college you must know basic algebra as you learn about it in elementary school so it is not as difficult as some of your friends may explain so do not let them persuade you to do anything else. Do not let the word “mathematics” scare you.
When you get hired as an entry level programmer or tester you will work with developers who may have few years of experiences more than you. Someone may ask you to help them find and fix some bugs in their programs. Depending on the company, you will probably spend six months to two years to read code and find bugs before moving into software development. It is really depending on what skills you have that you can advance to the next position. Most people spend time in testing then to developing then to technical lead and project manager. The career of software people is wide open with many positions and variety of areas to choose. As long as you are willing to put in efforts and continue to learn new things, you will do well. You said that many software people complained that software job was hard and often quit after few years, I believe that those are the exception because most of my students told me that they enjoy software works very much. In the past twenty five years of teaching, I rarely heard of anyone who is quitting computer works.