Học lập trình thế nào để không thất nghiệp?
Continuing the discussion from Làm sao có thể tạo được khóa học online mà giúp người tự học, học xong có thể tìm được việc:
Cảm ơn @Taihuynh đã đóng góp ý kiến.
Đây chính là vấn đề Đạt quan tâm nhất. Dạy học ở VN là một bài toán chưa có lời giải. Học xong, tốt nghiệp nhiều nhưng thất nghiệp và làm trái ngành cũng nhiều. Đạt muốn góp phần giải bài toán này để có nhiều người có thể làm đúng đam mê của mình.
Trước hết, Đạt xin nói lên quan điểm của mình về vấn đề này, tại sao người học lập trình lại không thể xin việc, hay nói cách khác là không thể lập trình đúng nghĩa. Theo Đạt đó là do cách dạy học ở mình còn nặng thành tích và tập trung vào cách làm sao có điểm cao là được.
Trường phổ thông thì Đạt không nói, mọi người lao đầu vào học và giải bài để đi thi ĐH. Nhưng lên ĐH rồi, Đạt còn thấy nhiều bạn đi học kèm thì Đạt cảm thấy quá thất vọng. Đạt từng viết một bài có hơi chua chát, cách học lập trình thất bại. Mọi người vẫn có tư tưởng ở phổ thông là giải thật nhiều bài tập, xin đừng hiểu sai ý của Đạt. Đạt không phê phán việc giải nhiều bài tập, nhưng cái Đạt muốn nói tới là giải bài tập vừa đủ để hiểu vấn đề. Đừng giải quá nhiều bài tập để thành thợ giải toán, thợ giải bài tập mà không đi sâu được. Mọi người cứ nghĩ lên ĐH rồi vẫn cần phải đi học kèm, phải giải thật nhiều dạng đề. Cái gì, giải nhiều dạng đề để làm gì? Doanh nghiệp họ đâu có tuyển lập trình viên vào giải đề? Trừ phi bạn giải đề để đi thi competitive programming.
Như hôm nay Đạt có trả lời một câu hỏi của một bạn, bạn ấy hỏi thợ code là gì? Theo Đạt, thợ code là người code nhanh, code nhiều, code không cần nghĩ. Ở đâu thì có thợ code, ở các nước đang phát triển như VN thì thợ code rất nhiều.
Các bạn học lập trình, không học cơ bản, thích học công nghệ. Ra trường vào một công ty outsource, không phải mọi outsource đều xấu, Đạt chỉ đang ví dụ một số công ty outsource cơ bắp. Khách hàng từ các nước phát triển không muốn phí tiền làm công việc cơ bắp, họ gửi đơn hàng về VN. Khi này, các thợ code có cơ hội ra tay, code mỗi ngày rất nhiều, mỗi tháng có thể làm được vài KLOC (K line of code) nhưng cứ code đi code lại một vài tính năng quản lý thành quen. Sau cùng, từ một người đam mê công nghệ, bạn mình, có người muốn bỏ nghề làm cái khác. Nhưng cuối cùng cũng vì cơm áo gạo tiền mà lại tiếp tục nai lưng ra làm thợ code.
Khi đi học trên trường, có giai đoạn Đạt rất thích học. Đó là khi được học cơ bản, biết về biến, con trỏ, hàm, class. Đó là khi được học giải thuật, học cách bảng băm hoạt động, cách mã hóa dữ liệu, cách nén và giải nén, cách xử lý ảnh, học về trí tuệ nhân tạo, .... Đó mới chính là những cái Đạt thích học, tuy nhiên Đạt muốn nhấn mạnh đây là sở thích cá nhân, cũng không cho rằng mọi người nên hoặc phải có cùng sở thích với Đạt.
Nhưng cái Đạt muốn dạy cũng gần như những cái ở trên, đó là dạy cách suy nghĩ của một kỹ sư phần mềm chứ không phải dạy để ra làm thợ code. Dạy những cái thật sự cơ bản, nguyên lý của mọi thứ. Có thể Đạt không làm được trong một sớm một chiều, vì khả năng của Đạt cũng có giới hạn, nhưng nhất định Đạt sẽ không bỏ. Nếu không đủ kiển thức, Đạt sẽ học thêm để có thể truyền đạt lại cho mọi người.
Cái Đạt nhìn thấy sau mấy năm đi làm là một người học CNTT ra, nhưng không có tư duy lập trình không có giải thuật, không có tìm hiểu, chỉ code như cái máy code thì không thể nào so sánh được với một người không cần từ ngành CNTT ra, nhưng họ có đam mê, họ muốn tìm hiểu, họ học hỏi từ người khác. Họ nghĩ trước khi code, họ nghĩ trước khi làm.
Những người này, Đạt không có khả năng dạy, bởi vì hầu hết họ giỏi hơn Đạt.
Tóm lại, Đạt nghĩ học CNTT ta cần phải có đam mê, nắm cơ bản ngôn ngữ lập trình, cấu trúc dữ liệu & giải thuật, sau đó tự tìm hiểu cái mình cần. Đạt sẽ cố gắng đem những điều đó vào trong khóa học C++. Tên nó là khóa học C++ nhưng bản chất là học cách lập trình thông qua ngôn ngữ C++.
Một điều Đạt rất may mắn học được ở ĐH KHTN là những kiến thức cơ bản. Đạt và những bạn học cùng lớp từng có nhiều lần nói chuyện với nhau sau khi ra trường rằng thực ra chỉ cần học 2 năm là đi làm được. Bỏ đi 1 năm đại cương, bỏ đi năm 4 học "phân tích phát triển phần mềm", chỉ cần 2 năm là đủ đi làm.
Note về Competitive programming:
Competitive programming là cái gì?
Đây là các cuộc thi giải thuật, bạn phải thật sự giỏi giải thuật thì mới có thể chiến thắng ở các cuộc thi này. Giống như các cuộc thi toán.
Cái này có tốt cho học lập trình hay không?
Đạt nghĩ là có, competitive programming yêu cầu bạn có hiểu biết sâu về giải thuật.
Cái này có giúp ta làm ra phần mềm tốt không
Theo Đạt nghĩ là không, competitive programming hầu hết là giải các bài toán, code để giải các bài toán này thường gói gọn trong một hàm. Làm phần mềm tốt yêu cầu nhiều hơn thế.
Có giải cao khi thi các giải này có lợi cho việc kiếm việc làm không?
Cá nhân Đạt thì nghĩ là không lợi không hại. Robert Love, người phát triển Kernel cho Android và đang ở trong hội đồng tuyển dụng của Google, cho rằng có giải trong các ký thi này không có ý nghĩa gì đối với ổng.
Robert Love's answer trên Quora
Các câu trả lời khác của các câu hỏi tương tự, có cùng chung quan điểm với Love.