| Contents |

2 Mục tiêu chính

“Giáo dục không phải là sự chuẩn bị cho cuộc sống; giáo dục chính là cuộc sống.”

—John “Not The Decimal System One” Dewey

“Người mù chữ của thế kỷ 21 không phải là những người không biết đọc và viết, mà là những người không biết học, không biết bỏ đi những gì đã học, và không biết học lại.”

—Alvin Toffler

Chúng ta học gì ở trường? Cách trở thành lập trình viên Flutter? Cách trở thành lập trình viên React? Cách trở thành lập trình viên Rust? Cách trở thành lập trình viên JavaScript? Cách trở thành lập trình viên C++? Cách trở thành lập trình viên C? Cách trở thành lập trình viên Pascal? Cách trở thành lập trình viên LISP? Cách trở thành lập trình viên FORTRAN? Cách trở thành lập trình viên COBOL?

Bạn có thấy điều tôi vừa làm không? Ngoài việc đặt ra rất nhiều câu hỏi?

Vâng, bạn có thể muốn vào đại học để làm việc với web development hoặc embedded systems bằng những ngôn ngữ mới nhất và tốt nhất. Và nếu may mắn, bạn sẽ được làm một phần điều đó ở trường.

Nhưng đây là vấn đề:

  1. Có quá nhiều công nghệ để bao quát trong bốn năm.
  2. Tất cả những thứ đó sẽ sớm lỗi thời dù sao. Bạn thấy tôi đã thêm COBOL7 vào danh sách không8?

Vậy là sinh viên bạn phải làm gì? Không có cách nào bạn có thể học hết tất cả.

Đây là lúc mục tiêu chính phát huy tác dụng. Nhiệm vụ của bạn với tư cách là sinh viên là làm một điều duy nhất:

Học cách giải quyết bất kỳ bài toán lập trình nào.

Dù bạn chưa từng thấy bài toán hay công nghệ đó trong đời.

Đó là toàn bộ mục tiêu.

Quan trọng là, mục tiêu không phải là học trở thành lập trình viên iPhone hay Android hay Go. Tất cả những thứ đó đều nằm trong mục tiêu chính. Bạn có thể không học lập trình Go ở trường, nhưng bạn sẽ học cách tự học lập trình Go.

Học cách giải quyết bất kỳ bài toán lập trình nào.

Chỉ vậy thôi. Mọi thứ khác chỉ là phụ trợ.

Khả năng tự học là một kỹ năng bắt buộc trong lĩnh vực phát triển phần mềm. Thực sự khó có khả năng công việc đầu tiên của bạn chỉ sử dụng các công nghệ bạn đã học ở trường. Và thực tế, những sinh viên mới ra trường có thể ngạc nhiên khi phát hiện ra rằng không có công nghệ nào họ dùng ở trường lại xuất hiện trong công việc đầu tiên của họ.

Vậy tại sao trên đời chúng ta lại dành bốn năm học tất cả những thứ nhảm nhí này về hệ điều hành, ngôn ngữ assembly, phân tích thuật toán và—?

EERRRNT! [tiếng còi vang] Bạn không chỉ dành bốn năm làm điều đó. Bạn vừa dành bốn năm học cách giải quyết bất kỳ bài toán lập trình nào.

Và hãy nghĩ về điều đó. Làm thế nào bạn có thể dạy mọi người giải quyết bất kỳ bài toán nào? Bạn không thể dạy toàn bộ hàng tỷ ngôn ngữ lập trình9, framework, và kỹ thuật. Vậy nên điều đó không khả thi. Và dù bạn chọn những thứ nào, chúng có thể hoặc không được dùng trong công việc của một người cụ thể.

Vì vậy, chúng ta phải đi sâu hơn vào nền tảng. Chúng ta phải luyện tập giải quyết bài toán nhiều lần đến mức phát triển và nâng cao kỹ năng giải quyết vấn đề. Bởi vì bạn sẽ đối mặt với những bài toán trong phỏng vấn hay ở nơi làm việc hoàn toàn xa lạ. Bạn sẽ không thể dựa vào bất kỳ ngôn ngữ hay thuật toán cụ thể nào đã học. Thứ duy nhất bạn có thể dùng chính là kỹ năng giải quyết vấn đề của mình.

Cuối cùng, có một hệ quả nhỏ ở đây: khi bạn đang học làm gì đó (dù bạn sẽ không bao giờ dùng nó ở nơi làm việc), đừng gian lận. Mục tiêu không phải là học cách xóa phần đầu của danh sách liên kết. Mục tiêu là luyện tập giải quyết bài toán lập trình! Và việc chỉ tra cứu câu trả lời sẽ tước đi cơ hội luyện tập đó của bạn. Gian lận qua hết các bài tập ở trường và bạn sẽ không bao giờ phát triển được kỹ năng nền tảng duy nhất của các lập trình viên phần mềm: khả năng giải quyết bất kỳ bài toán lập trình nào.

2.1 Suy ngẫm về chương


| Contents |