Trước khi đọc tiếp bài, bạn hãy thử trả lời câu hỏi này: “lập trình viên có cần giỏi toán?“
Chắc hẳn bạn đã có đáp án cho mình. Vậy hãy xem câu tiếp theo là đúng hay sai: “Nếu bạn giỏi toán, mặc nhiên bạn sẽ là một lập trình viên giỏi?”
Chắc chắn bạn đã nghe những cuộc tranh luận về chủ đề này rất nhiều lần rồi.
Trên một diễn đàn JavaScript trên Facebook, một thành viên khá nổi tiếng cũng có đăng một bài viết với chủ đề “Tư duy toán học và lập trình” được bàn luận rất sôi nổi. Tác giả viết:
“Thú thật là mình không hề giỏi Toán. Mình đã học ở FPT Aptech, nơi chỉ có 2 năm tập trung vào Java, C# và thêm vài môn cơ bản lập trình C thôi. Ở đây đương nhiên là không dạy các môn liên quan đến Toán (cao cấp) hay giải thuật gì cả. Mấy cái như BigO, quy hoạch động này nọ là mình không biết gì sau khi ra trường hết.”
Sau khi dẫn chứng những vấn đề trong lập trình được giải quyết gọn ghẽ bởi những người có kiến thức toán học rất tốt, tác giả kết luận:
“Những ngừoi mình rất ngưỡng mộ trong ngành cũng đều cực kì giỏi Toán hoặc có tư duy Toán học rất tốt.”
Trên Quora và nhiều diễn đàn khác, không khó để tìm thấy những chủ đề dài dằn dặt về mối liên quan giữa toán học và lập trình. Ví dụ như “Có phải tất cả các lập trình viên đều giỏi toán?” Hay “Tôi có cần biết toán để lập trình?”
Vậy đâu là câu trả lời đúng?
Nhưng trước khi tìm câu trả lời, chúng ta hãy xem thế nào là một lập trình viên giỏi.
Ai được gọi là lập trình viên giỏi?
Bạn có thể có ý khác, nhưng theo tôi, một lập trình viên giỏi là người:
- Giải quyết vấn đề xảy ra theo cách tốt nhất có thể
- Đam mê học hỏi những kiến thức mới
- Chuyên gia trong một số ngôn ngữ, công cụ và có những cách làm tốt nhất, đúng đắng nhất mà trong tiếng Anh người ta gọi là best practice.
- Sử dụng đúng ngôn ngữ lập trình, tools để giải quyết đúng vấn đề
- Viết code sạch và code có thể dễ dàng cập nhật, mở rộng (maintainable code), tức làm sao người khác có thể hiểu code của mình một cách dễ dàng.
- Xem xét sự cân bằng về hiệu suất, việc xử lý dữ liệu hay tính toán (scalability), tính bảo mật, khả năng bảo trì và khả năng mở rộng
- Là người biết làm việc theo nhóm và giao tiếp tốt.
- Hoàn thành công việc đúng thời hạn.
Vậy mối liên hệ giữa toán học là lập trình là gì?
Mối liên quan giữa Toán và Lập Trình
Chắc chắn bạn đã từng học toán ở trường đại học, học cách tính giao điểm của khối lập phương với hình cầu trong không gian ba chiều. Bạn cũng đã học rất nhiều về giới hạn, tích phân, vi phân… ở trường trung học. Nhưng cuối cùng, đó cũng chỉ là rất nhiều công thức mà hiếm khi được sử dụng, chứ đừng nói đến việc ghi nhớ. Không một công thức nào dạy bạn làm thế nào để trở thành một lập trình viên giỏi.
Toán học giúp phát triển kỹ năng giải quyết vấn đề và phân tích. Theo bài viết được đề cập trong phần mở đầu của bài này là vậy. Tuy nhiên bộ não con người phức tạp hơn những gì chúng ta hiểu và toán học không phải là cách duy nhất để phát triển các kỹ năng phân tích.
Một người biết cách giải các bài toán phức tạp không có nghĩa là họ biết cách giải một bài toán lập trình với code sạch, có thể bảo trì và hoàn thành công việc đúng hạn.
Chắc hẳn bạn đã từng biết các lập trình viên giỏi toán nhưng họ không thể hoàn thành một ứng dụng đơn giản đúng hạn. Họ viết code lộn xộn và thật khó mà mở rộng hay bảo trì.
Vậy toán học chưa chắc đã giúp bạn trở thành một lập trình viên giỏi, bạn có đồng ý không?
Có phải Toán học giúp bạn thông minh hơn?
Cũng có một quan niệm khác cho rằng giỏi toán làm cho người ta thông minh hơn. Vậy theo quan niệm này, các bác sĩ y khoa hoặc luật sư ít thông minh hơn chỉ vì họ không giỏi toán học?
Có một sự thật không thể bàn cãi, là có những người làm những điều phi thường trên thế giới này và họ không biết toán. Họ là người giải quyết vấn đề xuất sắc, họ phân tích rất giỏi và có thể giải quyết các vấn đề một cách hoàn hảo và đúng thời gian. Và họ không phải là người giỏi toán!
Những kỹ năng kiến thức của lập trình viên có liên quan gì đến toán học không?
Mặc dù toán học rất quan trọng và đã được sử dụng trong thiết kế máy tính, nhưng không phải tất cả lập trình viên đều cần phải giỏi toán. Ngay cả khi bạn đang xây dựng một ứng dụng liên quan đến rất nhiều hình ảnh, video hoặc xử lý âm thanh, bạn cũng không cần quá giỏi về toán học.
Toán học rất kỳ diệu, nhưng đó không phải là một kỹ năng thiết yếu cho các lập trình viên hiện nay.
Lập trình viên thời hiện đại cần giỏi một hoặc hai ngôn ngữ lập trình, thành thạo các cấu trúc dữ liệu, thiết kế patterns và database. Đây là loại kiến thức điển hình mà bạn cần phải biết, để trở thành một lập trình viên giỏi. Ngoài ra, các lập trình viên cũng sử dụng rất nhiều công cụ giúp làm việc dễ dàng hơn. Các công cụ để quản lý source code như Git, IDEs như visual studio, v.v. Đây là những kỹ năng mà các lập trình viên cần học để thành công trong công việc hàng ngày. Bạn phải biết thiết kế các patterns tốt nhất để phù hợp với yêu cầu, cần biết khi nào thì nên sử dụng data structure. Kiến thức về kiến trúc tổng thể của codebase, tools và công nghệ sẽ giúp bạn thành công trong công việc lập trình của mình.
Còn các bài toán tính toán phức tạp không dạy cho bạn bất kỳ kỹ năng nào trong danh sách trên.
Những lĩnh vực lập trình có liên quan đến toán học
Mặc dù hầu hết các lĩnh vực trong công nghệ phần mềm đều không cần dùng đến toán, nhưng không phải là tất cả. Nếu bạn làm trong ngành như machine learning, đồ họa, phát triển game, robot hay phát triển các ngôn ngữ lập trình thì bạn sẽ cần sử dụng đến toán học. Trong các lĩnh vực này, bạn phải làm với những việc cần có kiến thức về toán học như giải tích, đại số tuyến tính, lý thuyết đồ họa, xác suất, logic, các chủ đề toán rời rạc…
Tuy vậy, ngay cả những lĩnh vực nói trên, bạn cũng không phải thường xuyên trực chuyển những công thức toán thành code. Thông thường bạn sẽ dùng những hàm thư viện có sẵn để làm việc đó. Các thư viện này sẽ giúp bạn bớt đi việc tự xử lý những tính toán phức tạp và tập trung vào giải quyết những vấn đề ở mức độ cao hơn. TensorFlow là một tập thư viện như vậy, dành cho machine learning mà bạn có thể tham khảo. Một ví dụ là khi bạn cần giải bài toán Tối Ưu Hóa (gradient descent), bạn sẽ không cần phải viết code phức tạp để giải mà có thể dùng thư viện thích hợp.
Kết luận
Có lẽ bạn đã có câu trả lời rõ ràng cho câu hỏi “Lập trình viên có cần giỏi toán” rồi chứ? Lập trình là một công việc sáng tạo. Người lập trình phải là người có kỷ luật, có tính học hỏi, chín chắn, kiên định. Và đó là những điều tiên quyết.
Bạn có biết?
tham gia cộng đồng ITguru trên Linkedin, Facebook và các kênh mạng xã hội khác có thể giúp bạn nhanh chóng tìm được những chủ đề phát triển nghề nghiệp và cập nhật thông tin về việc làm IT mới nhất
Linkedin Page:
Facebook Group:
cơ hội việc làm IT : ITguru.vn