post-image

Lập trình viên có cần giỏi toán hay không?

1. Tổng quan

Khi học phổ thông, mình thường được nghe giáo viên nói chuyện rằng bạn này có khả năng tư duy tốt, học toán giỏi hay khả năng logic ấn tượng, chắc hẳn sau này sẽ là 1 lập trình viên. Tuy nhiên, trong quá trình làm việc và kiểm nghiệm thực tế, mình phát hiện ra một sự thật vô cùng kỳ lạ – không phải 100% coder đều giỏi toán như chúng ta thường nghĩ.

Hầu hết mọi người ngoại đạo đều có niềm tin vững chắc rằng các lập trình viên có đầu óc tính toán siêu việt hoặc có thế mạnh ở môn toán. Rất tiếc, điều này dường như chỉ đúng cho số lượng nhỏ lập trình viên.

Sự nhạy bén trong tư duy là cần thiết đối với coder nhưng nó không phải là thứ làm nên coder.

Ở rất nhiều trường hợp, chẳng hạn như trong các cuộc phỏng vấn, việc đưa ra một bài toán để kiểm tra sự nhạy bén trong tư duy và khả năng xử lý tình huống thường được đưa ra như một bài kiểm tra. Đó có thể là một câu đố mẹo, một bài toán hay một câu hỏi logic bất kì, điều quan trọng là nó yêu cầu sự động não. Cả toán học và lập trình đều cần rất nhiều đến sự hoạt động của não bộ. Về bản chất thì lập trình chính là giải quyết một bài toán cụ thể một cách tổng quát và đa số là cho nhiều trường hợp của đầu vào (input).

Mặc dù về bản chất giống như một bài toán và lập trình là cách để giải bài toán đó nhưng cách để giải một bài toán trong lập trình lại không hề hoàn toàn giống nhau.

Ví dụ với bài toán tính tổng các số từ 1 đến 100. Một lập trình viên bình thường sẽ sử dụng một vòng lặp để cộng từng số lại để thu được kết quả cuối cùng thay vì nhớ công thức tính tổng từ 1 đến 100 sẽ có giá trị là (1+100)*100/2. Với một bài toán có quy mô của đầu vào nhỏ, việc khác nhau về cách giải quyết vấn đề sẽ không cho ta thấy được rõ sự khác biệt giữa lập trình và toán học. Tuy nhiên, với một bài toán kinh điển như tính các chữ số thập phân của số Pi (tỉ lệ giữa chu vi và đường kính của đường tròn) thì toán học thuần túy gần như bó tay và không thể bắt kịp được. Các lập trình viên có thể tính chính xác số Pi đến hàng tỉ chữ số thập phân bằng các hàm và máy tính, đương nhiên là không thể tính số cuối cùng là gì vì toán học đã chứng mình được Pi là số thập phân vô hạn không tuần hoàn. Vì thế nên có thể nói rằng: “Toán học là nền tảng cơ bản và lập trình là cách ta sử dụng sức mạnh của máy móc để tính toán”.

Toán học là trừu tượng và lập trình là cụ thể.

Các nhà toán học đã mất hàng nghìn năm để xây dựng nên hệ thống toán học siêu to khổng lồ với vô vàn các tiên đề, định lý. Đối với lập trình, việc giải các bài toán cũng giống như cách các nhà toán học xây dựng nên các định lý. Điều này nghe có vẻ vô lý nhưng lại khá thuyết phục. Chúng ta đưa ra phương pháp giải, phương pháp này có thể giải tổng quát cho mọi đầu vào và mỗi khi có một bài toán như vậy chúng ta lại dùng lại phương pháp đó. Nói chính xác hơn thì lập trình sẽ giải quyết một bài toán ở mức tổng quát, thay vì làm từng bài toán nhỏ cho cá trường hợp nhỏ và điều mà chúng ta tưởng tượng rằng việc lập trình rất thực tế thì hóa ra lại trừu tượng hơn ta tưởng.

Liệu có phải giỏi toán sẽ giỏi lập trình?

Không, một lập tình viên giỏi là người áp dụng tốt các kiến thức toán học vào xử lý các bài toán, tận dụng được sức mạnh của máy móc và công nghệ. Về cơ bản thì thuật toán trong lập trình cũng không hề giống với các thuật toán cụ thể trong toán học, hai khái niệm này thực tế vẫn chưa được phân biệt rõ ràng. Vậy một lập tình viên giỏi có nhất thiết phải giỏi toán hay không? Không, đa số các bài toán lập trình thực tế hiện tại không yêu cầu những bài toán tinh vi và tỉ mỉ. Lập trình viên chỉ cần biết cách khai thác những yếu tố toán học ở mức thông dụng để giải bài toán và cách để lập trình giỏi hơn chính là lập trình nhiều hơn và rút ra kinh nghiệm. Toán học là quan trọng nhưng không phải tất cả.

Kết luận

Trên quan điểm của một người làm toán và một lập trình viên, tôi thấy sự khắt khe trong toán học có thể được lập trình làm cho trở nên nhẹ nhàng hơn. Còn lập trình là để yêu cầu, chỉ thị máy thực hiện, giải quyết 1 công việc, bài toán cụ thể nào đó của cuộc sống. Mỗi bài toán thực tế sẽ có cách giải quyết khác nhau. Hiểu và dùng đúng thuật toán sẽ giúp bạn giải quyết một cách dễ dàng, cùng với độ chính xác cao trong thời gian ngắn nhất.

Tuy nhiên nếu bạn không giỏi toán không có nghĩa là bạn không thể lập trình, đó là 2 thái cực khác nhau. Từ toán học đến lập trình không phải một con đường dễ như ta tưởng nhưng kể cả với người không có nhiều kiến thức về toán cũng có thể đến với lập trình một, chỉ cần sự nỗ lực và đam mê.

Chúc các bạn thành công.

Leave a Reply

Your email address will not be published. Required fields are marked *