Học công nghệ thông tin

Một sinh viên hỏi tôi: “Liệu có thể học Khoa học máy tính, cho dù em không thích viết mã được không? Em biết rằng khoa học máy tính là lĩnh vực học tập có thể giúp em có được việc làm tốt. Nhưng em sợ rằng em có thể không học tốt việc viết mã.”

 

Đáp: Bạn có thể tính bạn còn bao nhiêu tiền trong ngân hàng khi bạn chi $25 trong nhà hàng không? Tất nhiên, bạn tính được vì bạn biết số học. Khi bạn học cộng, trừ, nhân và chia ở trường phổ thông, bạn có phải thích số học không? Có thể có và có thể không, nhưng bạn vẫn phải học nó vì nó là điều cần thiết.

Cũng giống như số học, viết mã là ngôn ngữ được thiết kế để trao cho máy tính các lệnh. Trong Khoa học máy tính, bạn học về lí thuyết máy tính, nhưng để dùng nó, bạn cần biết các ngôn ngữ lập trình để cho bạn có thể bảo máy tính làm mọi thứ cho bạn. Bạn có phải “thích” viết mã không? Không nhất thiết, nhưng bạn vẫn phải học viết mã để trao đổi với máy tính.

Bất kể việc học Công nghệ thông tin (tức là Khoa học máy tính, Kĩ nghệ phần mềm và Quản lí hệ thông tin), sinh viên thường chia thành hai nhóm; nhóm thứ nhất coi nó là rất khó, và thậm chí cho dù bạn có việc làm trong lĩnh vực này, bạn vẫn phải làm việc chăm chỉ. Nếu bạn đồng ý với điều đó, bạn có thể không lựa chọn công nghệ trong đại học. Nhóm thứ hai nghĩ công nghệ không khó, chừng nào bạn đưa nỗ lực vào, và phát triển kĩ năng, bạn sẽ có được việc làm tốt.

Tại sao sinh viên nghĩ công nghệ thông tin là khó? Tôi nghĩ lí do là trong việc học công nghệ; bạn phải phát triển cách học khác. Bạn không thể ghi nhớ các sự kiện để qua được bài thi; bạn không thể học nhồi nhét trước kì thi, mà bạn học cách trao cho máy tính các lệnh để cho nó có thể làm mọi thứ cho bạn. Do đó, để học công nghệ, bạn phải “học qua hành” và nếu bạn không quen với phương pháp này, bạn có thể thấy nó khó.

Câu hỏi là: “Bạn có phải viết mã không?” Tất nhiên, bạn cần viết mã nhưng viết bao nhiêu thì tuỳ vào việc làm, vì một số việc yêu cầu nhiều hơn những việc khác. Công nghệ thay đổi nhanh chóng, ngôn ngữ lập trình cũng vậy. Cách tốt nhất để học ngôn ngữ lập trình là thực hành viết vài dòng mã một lúc; từ các lệnh đơn giản cho tới các thuật toán phức tạp hơn. Nhớ rằng bạn phải “học qua hành” và không cố ghi nhớ mọi thứ. Để giỏi lập trình, bạn phải thực hành bằng việc phạm sai lầm; bạn sẽ phạm nhiều sai lầm và học từ chúng cho tới khi bạn không còn phạm sai lầm nữa. Đến lúc đó, bạn rất giỏi lập trình.

Sau kĩ năng lập trình, bạn cũng cần học về các cấu trúc dữ liệu và thuật toán. Bạn sẽ cần thiết kế các thuật toán dùng các ngôn ngữ lập trình. Bạn nên biết về “bảng băm”; “danh sách móc nối”; “cây”; “cây tìm kiếm nhị phân”; và cả đồ thị có hướng và vô hướng. Để là nhà khoa học máy tính hay kĩ sư phần mềm giỏi, bạn cần hiểu kiến trúc máy tính từ mức thấp nhất, như transistor, mạch tích hợp, mạch lật, bộ nhớ ẩn, cho tới bộ nhớ, đơn vị điều khiển, RAM, CPU, và GPU. (Lưu ý: Hiểu biết về mô hình GPU của tính toán hiệu năng cao sẽ là quan trọng vì chẳng bao lâu hầu hết các máy tính sẽ dùng GPU trong tương lai.)

Ngày nay, phần lớn các chương trình Công nghệ thông tin bao giờ cũng bao gồm môn học về an ninh máy tính. Sự kiện là đa số những mong manh an ninh đều tới từ viết mã kém vì nhiều trường không cung cấp đào tạo tốt về lập trình và nhiều sinh viên không biết cách giữ an ninh cho mã của họ. Một chương trình đào tại CNTT tốt phải dạy cho sinh viên viết lập trình có tính phòng thủ; sinh viên phải hiểu cách giữ an ninh cho mã của họ.

Sinh viên thường hỏi tôi: “Chúng em có phải giỏi về toán để học công nghệ không?” Tôi bảo họ rằng nền tảng của công nghệ thông tin là toán học (tức là, số học, đại số tuyến tính, tính toán, phương trình vi phân, thống kế và xác suất.) Họ không phải “rất giỏi” về toán, nhưng họ cần hiểu rõ nó đủ để tiến bộ trong nghề nghiệp của họ. Tuy nhiên, công nghệ thông tin không phải là về các kĩ năng kĩ thuật mà cũng là về kĩ năng mềm nữa. Nhưng những kĩ năng này không phải là cái gì đó sinh viên có thể học trong một lớp mà phát triển qua thời gian. Để phát triển những kĩ năng này, sinh viên cần tham gia vào thảo luận trên lớp, trình bày của tổ và học cách tranh cãi quan điểm của họ trong lớp. Theo ý kiến của tôi, phương pháp học chủ động là cách tốt hơn để học công nghệ.

Để thành công trong bất kì nghề nào, bạn cần được tự động viên. Không có nghề nghiệp dễ dàng hay cách dễ dàng để phát triển kĩ năng. Nếu bạn không có động cơ hay tham vọng mà muốn cái gì đó dễ dàng, thì bạn sẽ làm phí thời gian trong đại học, và nghề nghiệp của bạn có thể không phải sáng sủa như bạn ước ao. Động cơ thành công của bạn phải tới từ bên trong; bạn phải đưa nỗ lực, thời gian vào và sẵn lòng học từ những sai lầm của bạn. Không có nghề nào quá khó nhưng có nỗi sợ về điều khó. Nếu sinh viên khác có thể học được công nghệ, bạn cũng có thể chứ. Bạn không phải thích viết mã, nhưng bạn vẫn có thể học viết mã. Bạn không phải thích số học, nhưng bạn có thể học số học vì nó là điều cần thiết. Đừng phí thời gian đi tìm cách dễ dàng để có việc làm tốt. Có nhiều sinh viên đang đi tìm cách dễ dàng đó và phần lớn đã hối tiếc về sau, sau khi họ đã có bằng cấp nhưng không có việc làm.  Hôm nay và trong tương lai gần, phần lớn các việc làm sẽ dùng công nghệ, và có kĩ năng công nghệ là điều cần thiết.

 

—English version—

 

Studying Information Technology

A student asked me: “Is it possible to learn Computer Science, even if I do not like to write code? I know that computer science is the field of study that can help me to get a good job. But I am afraid that I may not do well with coding.”

 

Answer: Can you calculate how much money you have left in your bank after you spend $25 in a restaurant? Of course, you do because you know arithmetic. When you learn addition, subtraction, multiplication and division in school, do you have to like arithmetic? Maybe and maybe not, but you still have to learn it because it is a necessity.

Just like arithmetic, coding is a language designed to give instructions to a computer. In Computer Science, you learn about theories of the computer, but to use them, you need to know the programming languages so you can tell the computer to do things for you. Do you have to “like” writing code? Not necessary, but you still have to learn coding to communicate with a computer.

Regarding the study of Information Technology (i.e., Computer Science, Software Engineering and Information System Management), students are often dividing into two groups; the first group considers it is very hard, and even you get a job in this field, you have to work hard. If you agree with it, you may not select technology in college. The second group thinks technology is not difficult, as long as you put in the efforts, and develop the skills, you will get a good job.

Why do students think information technology is difficult? I think the reason is in studying technology; you must develop a different way of learning. You cannot memorize facts to pass exams; you cannot cram before the exam, but you learn how to give instructions to a computer so it can do things for you. Therefore, to study technology, you must “learn by doing” and if you are not familiar with this method, you may find it difficult.

The question is: “Do you have to write code?” Of course, you do need to write code but how much is depending on the job, as some require more than others. Technology changes quickly, so are programming languages. The best way to learn programming languages is to practice writing a few lines of code at a time; from simple instructions to more complex algorithms. Remember that you must “learn by doing” and do not try to memorize things. To be good at programming, you must practice by making mistakes; you will make a lot of mistakes and learn from them until you no longer making mistakes. By that time, you are very good at programming.

After learning programming skills, you also need to learn about data structures and algorithms. You will need to design algorithms using programming languages. You should know about “hash tables”; “linked lists”; “trees”; “binary search trees”; and both directed and undirected graphs. To be a good computer scientist or software engineer, you need to understand computer architecture from the lowest level, such as a transistor, integrated circuits, flip flops, caches, up to the memory, control units, RAM, CPU, and GPU. (Note: An understanding of the GPU model of high-performance computing will be important as soon most computer will use GPU in the future.)

Today, most Information Technology programs always consist of a course in computer security. The fact is the majority of security vulnerabilities come from bad code because many schools do not provide good training in programming and many students do not know how to secure their code. A good IT training program must teach students to write defensive programming; students must understand how to secure their code.

Students often asked me: “Do you have to be good at mathematics to learn technology?” I told them that the foundation of information technology is mathematics (i.e., arithmetics, linear algebra, calculus, differential equations, statistics, and probability.) They do not have to be “very good” in maths, but they need to understand it well enough to advance their career. However, information technology is not about just technical skills but also soft skills. But these skills are not something students can learn in a single class but developing over time. To develop these skills, students need to participate in class discussions, team presentations and learn how to debate their view in class. In my opinion, the Active learning method is a better way to learn technology.

To succeed in any career, you need to be self-motivated. There is no easy career or easy way to develop skills. If you have no motivation or ambition but want something easy, then you will waste time in college, and your career may not be as bright as you wish. Your motivation to succeed has to come from within; you have to put in the effort, the time and willing to learn from your mistakes. There is no career too difficult but there is the fear of difficult thing. If other students can study technology, so can you. You do not have to like coding, but you still can learn to write code. You do not have to like arithmetics, but you can learn arithmetics because it is a necessity. Do not waste time looking for an easy way to get a good job. There are a lot of students who are looking for that easy way and most have regretted later after they have a degree but no job.  Today and in the near future, most jobs will use technology, and having technology skills is becoming a necessity.