Nên học ngôn ngữ trình nào cho người mới bắt đầu?
Đây một câu hỏi mà mình thường nhận được từ các em sinh viên mới ra trường, mới vào đại học, hoặc chưa biết gì về lập trình: “Giờ mình nên học ngôn ngữ lập trình nào đây?”. Nghe đơn giản, nhưng đây là 1 câu hỏi có độ khó khá cao, sánh ngang với câu “Em nên làm nghề gì, vào đại ...
Đây một câu hỏi mà mình thường nhận được từ các em sinh viên mới ra trường, mới vào đại học, hoặc chưa biết gì về lập trình: “Giờ mình nên học ngôn ngữ lập trình nào đây?”.
Nghe đơn giản, nhưng đây là 1 câu hỏi có độ khó khá cao, sánh ngang với câu “Em nên làm nghề gì, vào đại học nào …” của các em học sinh cấp 3. Trong phạm vi bài viết này, mình sẽ đưa ra một câu trả lời, dựa theo ý kiến cá nhân.
Tóm tắt nội dung bài viết :
- Trước khi hỏi câu này, hãy tự hỏi : Mình muốn học lập trình để làm gì?
- Lựa chọn thật ra không quan trọng. Học một ngôn ngữ mới là chuyện đơn giản.
- Lời khuyên
Phần 1 - Trước khi hỏi câu này, hãy tự hỏi : Mình muốn học lập trình để làm gì?
Khi được hỏi “Giờ mình nên học ngôn ngữ lập trình nào đây?”, mình luôn hỏi lại câu này “Bạn/Em muốn học lập trình để làm gì?”. Trả lời được câu hỏi này, bạn đã xác định được 50% ngôn ngữ mình cần học. Dưới đây là 1 số câu trả lời mình hay nhận được.
-
Em vừa ra trường, trường chỉ dạy C, C++, … giờ em cần học ngôn ngữ gì để dễ kiếm việc làm, lương cao? Thị trường việc làm IT hiện tại rất nhiều, tạm chia làm 3 mảng: embedded, web và mobile.
- Mảng embedded: yêu cầu khá cao về trình độ, lập trình ngôn ngữ C, C++, có thể có Java. Nếu bạn là lập trình viên C++ cứng, mức lương rất khá, mức độ cạnh tranh cũng ko nhiều.
- Mảng mobile: Chiếm thị phần cao nhất vẫn là app cho Android viết bằng Java, tiếp theo là app cho IOS, viết bằng Objective-C. Java là một ngôn ngữ khá dễ học, độ phổ biến cũng cao, ứng dụng rộng. Nên học Java vì có thể chuyển qua các mảng khác khá dễ dàng.
- Mảng web: Các công ty outsource ở VN hiện tại đều tuyển LTV C#.NET và Java, do đó nhu cần khá cao. Tuy nhiên nhu cầu cao nhất vẫn là PHP. Cần lưu ý 1 điều là số lượng developer PHP khá đông và hung hãn, thượng vàng hạ cám cũng nhiều, do đó mức độ cạnh tranh khá cao. Như đã nói, số lượng công việc cần PHP rất đông, từ part-time, full-time đến free-lance, nếu giỏi PHP thì mức lương ko hề thấp nhé. Trường mình có 1 bạn SV năm 2, chỉ kiếm việc free-lance PHP trên freelancer.com cũng kiếm được 20 triệu/tháng.
Kết luận: Nếu muốn học để kiếm tiền, hãy xác định mình sẽ làm mảng công việc nào, sau đó chọn ngôn ngữ được yêu cầu nhiều. Hiện tại có 1 số ngôn ngữ như Rails, Python,… ít người học, developer giỏi ngôn ngữ này cũng có thu nhập khá (Vì hiếm nên quý =))).
- Mình muốn làm 1 website, 1 ứng dụng cho người nhà, bản thân v….v. Có 1 số bạn học tài chính ngân hàng, kinh tế …. trả lời mình như vậy.
Nếu bạn muốn làm 1 ứng dụng di động, Java là lựa chọn tốt nhất. Còn việc tạo 1 website, hiện tại có rất nhiều hướng dẫn tạo website bằng Joomla, Drupal,… ko cần kiến thức lập trình. Các bạn có thể học thêm PHP để có thể tùy biến, thêm tính năng cho trang web.
Phần 2 - Lựa chọn thật ra không quan trọng. Học một ngôn ngữ mới là chuyện đơn giản.
Đọc tới đây, có lẽ nhiều bạn sẽ ném gạch mình tới tấp “dám chắc thằng chủ thớt không phải coder, phán như thánh”.
Trước khi ném đá, mong các đồng chí bình tĩnh nghe mình giải thích trình bày. Mình cũng từng là sinh viên IT như các bạn. Môn đầu tiên về lập trình mình học khi vào Đại Học là: “Cơ bản lập trình với C”. Mình từng điên đầu với khai báo biến, tách hàm, điều kiện, vòng lặp ,IO…. Môn tiếp theo là “Lập trình hướng đối tượng với C++”. Phải thú thật C++ không phải là ngôn ngữ phù hợp để học hướng đối tượng (Lẽ ra nên dùng Java hay C#). Mình từng nhầm lẫn trước các khái niệm “tính bao đóng, tính kế thừa”. Do đó, bản thân mình cũng biết sự khó khăn gặp phải khi học 1 ngôn ngữ. Tuy vậy, mình vẫn khẳng định học một ngôn ngữ mới là chuyện đơn giản.
Vì sao? Hãy tự xem lại kiến thức lập trình bạn có được khi vừa ra trường:
- Học qua 1,2 ngôn ngữ gì đó
- Cấu trúc dữ liệu và thuật toán
- Thiết kế, truy vấn cơ sở dữ liệu
- Design pattern (Có thể)
- Khả năng design front end …..
Khi mới tiếp cận lập trình, chúng ta cảm thấy khó khăn vì phải làm quen với vô số khái niệm mới. Tuy nhiên, khi đã có kiến thức cơ bản, việc tiếp cận ngôn ngữ mới trở nên rất dễ dàng. Bạn có thể tự hỏi, mình học gì khi học 1 ngôn ngữ mới? Đây là câu trả lời:
- Cách khai báo hàm, biến
- Cách khai báo vòng lặp, điều kiện if/else
- Các kiểu cấu trúc dữ liệu: list, set, tuple, …
- IO, multi-thread, delegate, event
- IDE phù hợp, cách build, debug
- Các framework, cách sử dụng, ….
Nếu bạn đã biết cách viết for, if/else, while … trong Java, khi chuyển qua học C# hoặc javascript, cấu trúc hàm for, if/else… vẫn giữ nguyên. Kiến thức của bạn được kế thừa từ ngôn ngữ lập trình trước, do đó việc học sẽ diễn ra nhanh hơn. Hoặc khi bạn đã rõ cơ chế làm việc của ASP.NET RestAPI, việc học cách xây dựng RestAPI bằng Spring của Java cũng không quá khác biệt. Mình từng tự học Python mất 1 tuần, và học framework Django mất khoảng 2 tuần nữa. Lý do mình học nhanh vậy là vì:
- Mình đã có kiến thức cơ bản về lập trình (class, data structure ….)
- Mình biết những gì mình cần học. Khi mới lập trình, bạn không biết mình cần học gì. Tuy nhiên nếu đã có kiến thức nói chung về lập trình, bạn sẽ biết mình tập trung học những gì, điều này tiết kiệm rất nhiều thời gian.
- Mình biết là mình làm được. Khi mình hỏi bạn bè chung ngành “Học 1 ngôn ngữ mới mất bao lâu”, hầu hết đều trả lời “1 tháng hoặc hơn”. Vì thấy tốn nhiều thời gian + khó khăn như vậy nên hầu như họ rất “ngại” học ngôn ngữ mới.
Điều mình muốn nhắn nhủ với các bạn qua bài viết này: Đừng sợ mình sẽ chọn nhầm ngôn ngữ, cứ học đi. Việc học 1 ngôn ngữ mới khi bạn đó có kiến thức cơ sở khá đơn giản, không hề khó khăn và mất thời gian như bạn nghĩ. Thêm vào đó, việc biết nhiều ngôn ngữ sẽ giúp bạn có lợi thế hơn khi xin việc =)).
Phần 3 - Lời khuyên.
Như tựa đề, dưới đây là một số lời khuyên của mình, dựa theo kinh nghiệm cá nhân
- Đừng quá tập trung vào công nghệ. Đây là lời khuyên của thầy mình. Một số bạn rất hăm hở tìm hiểu, học những công nghệ mới. Điều này không xấu, nó còn giúp bạn học được nhiều thứ mới, dễ xin việc. Công nghệ là thứ dễ thay đổi, mau hết thời. VD: Sliverlight, công nghệ Web của Microsoft từng làm mưa làm gió, giờ đang ngắc ngoải. WinForm thì đã lỗi thời, … thời gian bạn bỏ vào học các công nghệ này xem như lãng phí. Chưa kể, khi 1 công nghệ được nâng cấp, vd ASP.NET MVC 3 lên MVC 4, ta cần học thêm những điều mới trong bản 4. Việc đầu tư quá nhiều thời gian vào học công nghệ mới sẽ làm bạn dễ đuối, đôi khi là lãng phí thời gian.
- Hãy đầu tư vào những thứ lâu bền. Nếu không tập trung vào công nghệ, chúng ta nên học gì? Đó là những thứ ít thay đổi, nhưng lại vô cùng cần thiết với developer:
- Kiến thức cơ bản. Đừng vội cười, mình biết nhiều bạn tuy đã ra trường nhưng vẫn còn lờ mờ về khái niệm pointer, delegate, multi-thread,… Đây là những kiến thức mà ta sẽ sử dụng trong suốt cuộc đời lập trình, và hầu như sẽ chẳng bao giờ thay đổi. Bỏ thời gian ra học kĩ chúng sẽ không hại gì, phải không?
- Cách viết code: Đặt tên biến như thế nào, tách hàm ra sao, comment như thế nào. Có 1 câu nói: LTV dở viết code cho máy hiểu, LTV giỏi viết code cho cả máy và người hiểu. Có nhiều bạn code xong, 6 tháng sau nhìn lại không hiểu mình viết gì. Khi đi làm, có nhiều giai đoạn bạn phải maintainance, đọc những đoạn code do “thánh” viết và chửi thề “Thằng này ngu thế”. Hãy code có lương tâm, nghĩ tới người sau này sẽ đọc, fix bug, sửa code của mình bạn nhé (Biết đâu người đọc lại là mình đấy =)) ).
- Design Pattern. Nắm vững design pattern sẽ giúp bạn ghi điểm khi phỏng vấn. Đùa đấy, nó sẽ giúp bạn giải quyết rất nhiều vấn đề thường gặp trong khi code (Sẽ nói rõ hơn về chuỗi bài design pattern sau này). Ngoài ra, design pattern sẽ giúp bạn học và hiểu 1 framework mới dễ dàng hơn, 1 framework tốt thường áp dụng khá nhiều design pattern.
- Một số mô hình thường dùng: MVC, MVVM, MVP, mô hình Client-Server … Đây là câu hỏi được hỏi trong 90% các cuộc phỏng vấn, cũng là kiến thức cực kì quan trọng. Hiểu và nắm vững các mô hình trên sẽ làm cuộc đời lập trình của bạn thoải mái hơn nhiều.
- Front end là bắt buộc. Không cần biết bạn học PHP, Java, C# … bạn vẫn cần học và rành front end. Ở đây là HTML, CSS, JS. Trừ khi bạn làm ứng dụng mobile, embedded system, bạn sẽ phải đối mặt với html, css, js 8 tiếng làm việc mỗi ngày. Có gắng làm quen và làm thân với tụi nó nhé.
Tổng kết lại những điều mình đã nói qua 3 phần cho bạn nào lười đọc :
- Trước khi hỏi “Cần học ngôn ngữ gì”, hãy tự trả lời “Học lập trình để làm gì”.
- Đừng lo chọn sai ngôn ngữ, học một ngôn ngữ mới rất đơn giản.
- Đừng chạy theo công nghệ, hãy tập trung vào những thứ lâu bền Cảm ơn các bạn, chúc các bạn học tập thật tốt !!!