Tôi có nên học ngành Khoa học máy tính không nếu tôi thích toán nhưng lại lập trình rất tệ?

A: Shai Simonson

Cảnh báo: Câu trả lời dài lắm …

Hmmmm…

Chuyện gì đang thật sự diễn ra ở đây? Bạn nói là:

1. Bạn thích toán.

2. Bạn lập trình tệ.

Bạn có thích lập trình không? Bạn có học dốt toán không? Bạn chưa hề nói rõ ràng. Thật ra, có vẻ có đến bốn biến Boolean ở đây (trans: mình sẽ dịch luôn cho dễ hiểu.):

TT (thích toán)

DT (dở toán)

TL (thích lập trình), và

DL (dở lập trình)

mỗi cái trên có thể độc lập đúng hoặc sai.

Vậy ta có 2^4 = 16 tổ hợp khả thi, và mỗi tổ hợp đòi hỏi một câu trả lời riêng biệt về việc bạn có nên học khoa học máy tính hay không. Giờ tôi sẽ giả sử là bạn muốn nói bạn thích toán và không dở toán, và lại bạn thích lập trình nhưng lập trình tệ.

Như vậy,

TFTT (True False True True – tức là Đúng Sai Đúng Đúng) – Đây là một trường hợp rất thú vị trong 16 tổ hợp, vì trong 35 năm dạy toán và Khoa học máy tính, tôi gần như chưa từng thấy trường hợp này. Lý do là toán khó hơn rất nhiều so với lập trình. Việc lập trình đúng là đòi hỏi một nhóm kỹ năng nhất định mà một nhà toán học có thể không có, và tôi từng thấy những lập trình viên tài năng học toán loàng xoàng, nhưng lại chưa thấy ai học toán xuất sắc mà lại dở lập trình. Nhà toán học nào cũng lấy được con điểm A trong một khóa lập trình cơ bản, không liên quan đến việc anh/ cô ấy có thích nó hay không.

Những người dở lập trình không thể làm những việc đơn giản sau đây mà bất cứ nhà toán học bình thường nào cũng sẽ thấy là vặt vãnh:

a. Nhanh chóng viết một vòng lặp và liên hệ các biểu thức phức tạp khác nhau bên trong vòng lặp đến các biến trong tiêu đề vòng lặp. Điều này bao gồm việc tạo ra các chức năng tuyến tính từ hai điểm nhất định và nhiều thứ  khác khó nhằn hơn. Những học sinh kém thường xuyên làm rối các điểm kết thúc trên các vòng lặp, đó là một trường hợp đặc biệt của kỹ năng này.

b. Phá vỡ một thuật toán hoặc bài tập phức tạp thành các phần nhỏ hơn được định rõ ràng, sắp xếp các phần theo đúng thứ tự, và sắp xếp các output khác nhau của một cái là input của một cái khác. Các nhà toán học có thể suy nghĩ rõ ràng và có thể viết các bằng chứng (proof), một việc khó khăn hơn nhiều so với việc tạo ra một thuật toán.

c. Lấy một đặc tả hình thức – formal specification (một mô tả của một thuật toán) và diễn tả nó trong một “ngôn ngữ” – nói cách khác, là lập trình thuật toán. Các nhà toán học làm điều này khi họ chứng minh một cái gì đó – đặc tả hình thức là bằng chứng và “ngôn ngữ” là giải thích cho người khác bằng tiếng Anh trong giờ ăn trưa.

Vậy … tôi không tin được khi ca TFTT này là có thật. Tôi lại rất rất rất thường xuyên gặp ca TTTF – một người thích toán nhưng lại dốt toán, và thích lập trình nhưng không dở lập trình. Trường hợp này phổ biến hơn vì trở thành một lập trình viên khá là việc không quá khó. Một lập trình viên khá (lập trình không tệ) là một người có thể nhanh chóng và chính xác mô tả một thuật toán và triển khai (implement – trans: lol mấy khúc này dịch không nổi mấy ông ơi) trong ngôn ngữ lập trình của anh/ cô ấy. Một lập trình viên giỏi có thể tự tay thiết kế thuật toán. Những lập trình viên giỏi thường giỏi toán; lập trình viên khá thì không nhất thiết phải như vậy.

Và, tôi chưa từng thấy một lập trình viên tuyệt vời lại dốt toán … chưa bao giờ.

Tuy nhiên, câu trả lời này chắc hẳn là sẽ không thỏa mãn được bạn, vì tất cả những gì tôi vừa làm là bác bỏ điều mà tôi giả định là bạn nói … nên đây là 15 câu trả lời ngắn gọn hơn cho 15 trường hợp khác mà có thể là của bạn:

TTTT – Bạn thích toán và lập trình nhưng dở cả hai. Hãy học khoa học máy tính và học thật chăm chỉ. Bạn sẽ cải thiện được cả hai thứ. Do dù bạn không cải thiên được nhiều, cũng đã có nhiều công việc lập trình phần mềm ở mức độ khác nhau – và rất nhiều trang web để bảo trì.

TTTF – Bạn thích toán và lập trình nhưng dở toán. Hãy học khoa học máy tính. Bạn sẽ vào được một công ty xịn. Có hàng đống lập trình viên khá nhưng lại dốt toán. Và có rất nhiều việc cho mấy ông này – nhưng không phải là thiết kế thuật toán hay những việc phức tạp khác. Điều quan trọng là bạn thích lập trình – một việc mà bạn sẽ phải làm rất nhiều.

TTFT – Bạn thích toán, dở toán, không thích lập trình và dở lập trình nốt. Đừng học khoa học máy tính. Nếu bạn không thích lập trình mà còn dở lập trình, bạn sẽ ghét ngành này và ghét cả sự nghiệp của bạn. Sẽ có rất nhiều lần bạn phải lập trình thứ gì đó mặc cho tính lý thuyết/ toán học của việc đó ra sao.

TTFF – Bạn thích toán, dốt toán, không thích lập trình nhưng có thể lập trình ổn. Đừng học khoa học máy tính, học thứ gì mà bạn thích – chứ không phải thứ mà bạn có thể làm và cũng được trả hậu hĩnh. Trong chặng đường dài, việc đổi đam mê bằng tiền sẽ giết chết tâm hồn bạn. Cũng có những ngoại lệ – nếu bạn trung lập về việc lập trình và có một sở thích phù hợp với đam mê – là cái gì cũng được – thì học khoa học máy tính là một cách tuyệt vời để kiếm cơm và dành thời gian cho sở thích của bạn.

TFTT – Chúng ta đã thảo luận ngay từ đầu rồi.

TFTF – Bạn thích toán, học toán được, thích lập trình và lập trình được. Học khoa học máy tính đi, trừ khi bạn thật sự yêu toán thì hãy theo toán – nó có chiều sâu hơn nhiều đấy.

TFFT – Bạn thích toán, không dở toán, không thích lập trình và dở lập trình. Đừng có học khoa học máy tính nhé. Học toán đi.

TFFF – Bạn thích toán, không dở toán, không thích lập trình và không dở lập trình. Đừng học khoa học máy tính và học toán đi.

FTTT – Bạn không thích toán và dở toán. Bạn thích lập trình nhưng dở lập trình. Đừng học khoa học máy tính. Nó sẽ quá khó và làm bạn nản lòng. Bạn rất có thẻ sẽ bỏ học. Bạn cần phải thích những thứ trừu tượng phức tạp mới có thể trở thành một lập trình viên thành công, và nếu bạn không thích toán học thì đó là một dấu hiệu tồi tệ. Chỉ muốn trở thành lập trình viên là là chưa đủ lí do để học khoa học máy tính. Những học sinh dạng FTTT này là loại dễ bỏ cuộc nhất.

FTTF – Không hứng thú với toán, không giỏi nó, thích lập trình và giỏi lập trình. Học khoa học máy tính đi. Dạng học sinh này khá thường thấy. Chúng có lẽ sẽ không trở thành những lập trình viên vĩ đại nhưng chúng sẽ đủ giỏi và có thể tìm được việc chúng thích mà thử thách được chúng. Đây không phải dạng làm ở Google, Amazon, Apple hay Facebook, nhưng cũng có ở nhiều công ty khác.

FTFT – Không thích thú hay giỏi toán, không thích hay giỏi lập trình. Đừng có học khoa học máy tính. Hãy học thứ gì trong liberal arts (trans: Giáo dục đại cương? Liberal arts rất cổ xưa và bao gồm nhiều thứ như văn học, triết học, khoa học xã hội và tự nhiên …).

FTFF – Bạn không thích toán và kém toán. Bạn không thích lập trình nhưng bạn có thể lập trình. Hãy xem loại TTFF, và đừng có học khoa học máy tính. Tránh đổi đam mê bằng tiền và sự ổn định. Yolo đi.

FFTT – Bạn không thích toán nhưng bạn học được, bạn thích lập trình nhưng dở lập trình. Cứ học khoa học máy tính nào. Bạn rồi sẽ lập trình giỏi hơn nếu bạn học toán được và thích lập trình.

FFTF – Bạn chẳng đam mê gì toán nhưng lại học được, bạn thích lập trình và cũng giỏi lập trình. Đây chính là dạng học sinh kinh điển trong ngành khoa học máy tính – vô cùng thích lập trình, nhưng lại thấy toán quá trừu tượng và nhàm chán dù có thể học tốt toán. Hãy học khoa học máy tính nhé.

FFFT – Không ưa toán nhưng học được, không thích lập trình và lập trình kém. Đừng học khoa học máy tính. Xem xét những môn học mà bạn yêu thích – và tránh xa những môn mà bạn cần phải khéo léo với máy tính.

FFFF – Không thích toán nhưng học toán tốt, không thích lập trình nhưng lại lập trình ổn. Cũng đừng học khoa học máy tính. Hãy cân nhắc những môn bạn đam mê mà có toán và lập trình – khoa học và kỹ thuật. Có thể bạn yêu thích môi trường, xây cầu hay hóa học chẳng hạn.

Đây là bìa Karnaugh đây (trans: hay còn gọi là giản đồ Veitch khi học mấy cái tổ hợp xác xuất lớp 11 mà đổ 2 con súc sắc ấy, cái này dùng để đơn giản các biểu thức Boolean. Hình mình search google tải về rồi chỉnh lại cho phù hợp.):

X là tiền đề bất khả thi. Vì vậy ta có thể gắn cho x là 0 hay 1 tùy ý.

Thú vị là, nó có thể được đơn giản qua tiếng Anh như sau:

Study CS if you like programming, unless you do not like math and suck at math.

(Hãy học khoa học máy tính nếu bạn thích lập trình, trừ khi bạn không thích toán và kém lập trình.)

Hay là … học khoa học máy tính nếu bạn thích lập trình, cho dù có hiểu hay thích câu trả lời này hay không. 

Theo: Tam Minh

Leave a Reply

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