Học lập trình thế nào để không thất nghiệp?
Làm sao có thể Học lập trình thế nào để không thất nghiệp, 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?
Bài toán khó mà không khó, dễ mà không dễ nhỉ? Tự học và thi lấy chứng chỉ hay bằng cấp là 1 chuyện,còn học và đi làm thế nào thì là chuyện khác.Câu hỏi này nếu có lời giải đáp thì VN đã không có vài trăm nghìn người thất nghiệp,không làm đúng việc
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ôi 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, người viế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ôi đó 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ôi 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ôi còn thấy nhiều bạn đi học kèm thì tôi cảm thấy quá thất vọng. Tôi 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ôi. Tôi không phê phán việc giải nhiều bài tập, nhưng cái tôi 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ôi 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ôi, 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ôi 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ôi 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ôi thích học, tuy nhiên tôi 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ôi.
Nhưng cái tôi 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ôi không làm được trong một sớm một chiều, vì khả năng của tôi cũng có giới hạn, nhưng nhất định tôi sẽ không bỏ. Nếu không đủ kiển thức, tôi sẽ học thêm để có thể truyền đạt lại cho mọi người.
Cái tôi 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ôi không có khả năng dạy, bởi vì hầu hết họ giỏi hơn tôi.
Tóm lại, tôi 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ôi 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ôi rất may mắn học được ở ĐH KHTN là những kiến thức cơ bản. tôi 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ôi 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ôi 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ôi 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.
Các bạn có thể tham khảo các bài viết hay về JavaScript tại đây.
Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.