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ế. Làm phần mềm tốt cần thiết kế cấu trúc phần mềm, tính năng, UX, test, document nữa.

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.


Quan điểm khác của @Huy_Do

mình nghĩ là có.
Competitive programming giúp tăng khả năng giải quyết vấn đề (problem solving)
thông qua lập trình lên rất nhiều. 8-90% các công việc lập trình hiện nay chỉ đơn thuần là các vấn đề đơn giản như lập trình web/mobile mà chỉ cần biết là làm được, không cần phải suy nghĩ nhiều. Tuy nhiên để vào đc 10% còn lại (như google, facebook, linkedin…), thì competitive programming giúp ích khá nhiều.

Trở lại ví dụ của Đạt về robert love hay các comment trên quora, phần lớn những người đó đều là expert rất sâu trong ngành của họ, cụ thể như rlove là kernel hacker, và những vấn đề họ solve đều rất khó, khó hơn cả competitive programming rất nhiều. Họ không làm competitive chỉ vì họ không có hứng thú, chứ không phải họ không thể.
Nếu bạn nào đã có đam mê về một ngành hẹp nào đó thì có thể làm theo cách như họ, còn nêu không thì competitive chính là con đường ngắn để đưa bạn vào cánh cửa hẹp 10% trong ngành lập trình (đây là ý kiến cá nhân, chỉ có tính chất tham khảo :slight_smile: )

30 Likes

Đạt nên dạy theo cách làm một sản phẩm cụ thể trong khoá học của Đạt và đưa lên trên github để mọi người có thể fork và yêu cầu học viên khi học phải fork về và làm bài tập cải tiến ứng dụng.

Mình nghĩ là nếu người học thấy được mình làm ra cái gì đó thú vị họ sẽ rất hứng thú học tiếp. Kinh nghiệm của mình có được là đi học làm bánh, thấy tuyệt vời vô cùng vì sau mỗi bữa học mọi người được ăn và nhận xét bình luận sản phẩm của nhau. Sau đó, thầy giáo cũng sẽ chấm xem là bánh của ai cần sửa thế nào để lần sau có mẻ bánh ngon hơn.

9 Likes

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ế.

mình nghĩ là có.
Competitive programming giúp tăng khả năng giải quyết vấn đề (problem solving)
thông qua lập trình lên rất nhiều. 8-90% các công việc lập trình hiện nay chỉ đơn thuần là các vấn đề đơn giản như lập trình web/mobile mà chỉ cần biết là làm được, không cần phải suy nghĩ nhiều. Tuy nhiên để vào đc 10% còn lại (như google, facebook, linkedin…), thì competitive programming giúp ích khá nhiều.

Trở lại ví dụ của Đạt về robert love hay các comment trên quora, phần lớn những người đó đều là expert rất sâu trong ngành của họ, cụ thể như rlove là kernel hacker, và những vấn đề họ solve đều rất khó, khó hơn cả competitive programming rất nhiều. Họ không làm competitive chỉ vì họ không có hứng thú, chứ không phải họ không thể.
Nếu bạn nào đã có đam mê về một ngành hẹp nào đó thì có thể làm theo cách như họ, còn nêu không thì competitive chính là con đường ngắn để đưa bạn vào cánh cửa hẹp 10% trong ngành lập trình (đây là ý kiến cá nhân, chỉ có tính chất tham khảo :slight_smile: )

3 Likes

Hiện tại em có tham gia khóa học hướng đối tượng với java https://www.coursera.org/learn/object-oriented-java/ trên coursea. Tất cả các bài giảng trong khóa học đều dạy những kiến thức rất cơ bản nhưng rất chú trọng đến việc suy nghĩ và giải quyết các assignment của mỗi bài học. Nhiều khi em cũng đặt câu hỏi Với kiến thức như thế thì có thể đi làm được không?. Nhờ bài viết của anh, hôm nay em mới hiểu được vấn đề.

Cảm ơn Huy đã góp ý but don’t get me wrong.

Đạt không phản đối competitive programming, ngược lại Đạt còn ủng hộ competitive programming bởi vì đúng, nó giúp ta giải quyết vấn đề bằng lập trình.

Nhưng cái Đạt nghĩ tới khi nói về “làm ra phần mềm tốt” là cái 80-90% kia. Để làm ra một phần mềm tốt, công việc lập trình của mọi người đó là việc thiết kế cấu trúc phần mềm, tính năng, UX, test, document.

10% còn lại là giải thuật cực kỳ quan trọng. Nhưng để làm một phần mềm tốt, ta cần nhiều hơn thế.

2 Likes

Theo mình học để mà không that nghiệp thì :
Học, làm được và làm tốt những thứ người dùng / người tuyển dụng đang cần.

Nhưng những thứ đang cần bây giờ sẽ thay đổi rất nhanh. Biết đâu khi học xong thì “hết cần” nữa thì sao :cry

2 Likes

Bởi vì vậy người lập trình luôn cần phải thay đổi để phù hợp với thực tiễn và nếu tốt hơn thì nên theo dõi quá trình phát triển của ngành này để có những bước chuẩn bị cho thay đổi. :slight_smile:

Mong học xong có thể kiếm việc làm :blush:

uh mình hiểu ý Đạt không phản đối việc đó. Mình cũng không ủng hộ bỏ quá nhiều effort để tham gia các cuộc thi vì tham gia cuộc thi không thôi thì hoàn toàn xa vời với thực tế.
Ý mình chỉ là nên ủng hộ các bạn trẻ hiện nay chú trọng đến cái base computer science nhiều hơn là học những cái hời hợt như framework này ngôn ngũ nọ.
Khi có base và logic rồi thì học những cái còn lại vô cùng dễ dàng.

4 Likes

Em like A Đạt kể. Em thích đọc bài viết này…Em sẽ cố gắng học lập trình rùi sau này có việc làm như a Đạt…“Hãy học cách lập trình mà bạn có thể học. Hãy học cách lập trình mà theo bạn muốn. Chọn ngôn ngữ thích hợp và theo đuổi đam mê của bạn… Hãy vững bước thành công nhưng không bao giờ thất bại hay thất nghiệp, và không bao giờ lùi bước…hãy thẳng tiến lên phía trước và sẽ mở ra chân trời mới” (Tôi- Khiếm Thính) :grinning::blush:

2 Likes

Đọc nó sai sai sao ấy :grin: thấy tối nghĩa vô cùng luôn… Cảm giác như mình đang đọc Google dịch vậy!

Ặc… Cái này mình viết tiếng việt mà, làm gì có viết dịch tiếng anh ở đây Gony ơi :joy:… Mình ko thích xài google dịch đó…mình xài tra từ điển của oxford tốt và tự tìm hiểu chứ nhỉ . Hihi

Ủng hộ ý kiến của học cơ bản cho chắc của a Đạt
Em rẽ ngang từ kinh tế sang, ban đầu tiếp cận các ngôn ngữ như Python, JavaScript thì đọc documents em hoàn toàn hiểu được, nhưng thực sự mà nói hiểu khái niệm xong đi vào viết script cho web hoặc đọc code của người khác thì rất bỡ ngỡ và nhiều khi không hiểu logic như thế nào.
Sau đó e học thêm về Algorithms và Data Structure (with Python), tuy chưa học xong nhưng giờ đọc document nào đó liên quan đến thứ mình đã học thì không còn khó hiểu như trước nữa, thậm chí tìm hiểu thêm công nghệ mới cũng nhanh hơn và nắm sâu hơn trc nhiều.

anh đạt nói hay quá :+1:

Nếu vậy thì đó là dạy nghề chứ không phải dạy lập trình. Sản phẩm là kết quả của lập trình . Mà lập trình thì phải tự người đó lập trình ra. Còn để lập trình được thì người đó phải học, làm và thực hành.

Em nghĩ cái thay đổi là cái công cụ thôi chứ thực ra em thấy ở việt nam mình không thay đổi nhanh như nước ngoài. Ví dụ bên nước ngoài, họ lập trình asp.net mvc 6 mà việt nam vẫn còn 5.

Vote cho quan điểm của anh Đạt . Giai thuật chính là trái tim của CNTT , vì vậy mong anh hãy xây nhưng một khóa học về giải thuật trong năm 2017 .

Anh Đạt Học khoa học máy tính hả anh?

Hệ thống thông tin

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?