Lập trình viên muốn thành công cần học những gì

Thời gian gần đây, mình thường xuyên được các bạn sinh viên nhắn tin hỏi và xin lời khuyên, định hướng về tương lai của các bạn, đặc biệt là con đường trở thành 1 lập trình viên giỏi. Bài viết dưới đây trả lời câu hỏi ấy, theo góc nhìn của riêng mình. Bạn không nhất thiết phải đi theo con đường mà mình chỉ, hãy tự xây dựng 1 con đường riêng, nhưng mình hy vọng bài viết này sẽ cho bạn thêm kinh nghiệm và kiến thức để xây dựng và lựa chọn con đường đúng đắn.

Sinh viên nên học những gì?

Kiến thức luôn luôn hữu ích và cần thiết. Có nghĩa là dù bạn học gì, thì nó cũng sẽ cần dùng cho bạn ở một thời điểm nào đó. Giống như mình, khi làm sinh viên, mình nghĩ sẽ chẳng bao giờ dùng đến kiến thức về kế toán, bán hàng hay thuyết trình. Nhưng bây giờ khi làm sản phẩm, mình lại phải sử dụng và đang đi học lại những kiến thức ấy.

Nhưng nếu học tràn lan, học quá nhiều, đôi lúc lại dễ bị tẩu hoả nhập ma và không sâu một cái gì cả. Cái sự cân bằng giữa sâu và rộng thực ra khó nói, tuỳ lựa chọn mỗi người và đánh giá của mỗi người mà thôi.

Nếu phải lựa chọn 4 môn bắt buộc phải học để trở thành lập trình viên giỏi, mình xin lựa chọn những môn sau (theo thứ tự ưu tiên):

  1. Tiếng Anh
    Tiếng Anh mình nghĩ quan trọng số 1. Để học và làm trong ngành CNTT, mà cụ thể hơn là lập trình viên, bạn sẽ phải thường xuyên đọc và tìm hiểu các công nghệ, nền tảng, kiến thức ở trên mạng và bằng tiếng Anh. Các tài liệu bằng tiếng Việt, thường thì không đủ mới (thậm chí cực kì cũ kĩ) và không đủ nhanh so với sự thay đổi liên tục của thế giới. Chưa kể, đến khi đi làm, bạn sẽ thường xuyên có cơ hội phải giao tiếp với khách hàng, nhóm làm việc nước ngoài. Do đó, tiếng Anh không tốt sẽ hạn chế khả năng làm việc của bạn đấy.
    Nói cho bạn biết, nếu giỏi tiếng Anh, bạn có cơ hội kiếm việc ở các công ty nước ngoài hoặc ít nhất là làm việc với khách hàng nước ngoài, với thu nhập cao hơn khoảng 20% (trừ 1 số công ty outsourcing làm việc với khách hàng Nhật).
  2. Ngôn ngữ lập trình hướng đối tượng: Java hay C++?
    Là lập trình viên, tất nhiên phải biết lập trình rồi. Đúng không? Vấn đề là tại sao lại chọn 1 trong 2 ngôn ngữ này?
    Sau này, khi làm lập trình viên, nếu bạn làm về frontend thì bạn không cần dùng Java hay C++, nếu bạn lập trình Web thì biết PHP cũng là đủ xài. Do đó, việc chọn ngôn ngữ lập trình có thể còn phải tính toán cả con đường tương lai của bạn.
    Ở mức chung chung và thông thường, cá nhân mình đưa ra lựa chọn C++ hay Java dành cho sinh viên, vì mình nghĩ 2 ngôn ngữ này thể hiện khá đầy đủ và đúng đắn bản chất của một ngôn ngữ lập trình bậc cao, việc rèn luyện thành thạo 2 ngôn ngữ lập trình này có thể dễ dàng học và chuyển sang một ngôn ngữ khác. Và ngoài ra, 2 ngôn ngữ này cũng nằm trong danh sách những ngôn ngữ lập trình thông dụng và có khả năng ứng dụng rộng rãi nhất.
  3. Cấu trúc dữ liệu và giải thuật
    Môn này, đa phần các lập trình viên bỏ qua và không xem trọng. Ở 1 số trung tâm đào tạo nghề, cũng không hề dạy môn này. Đó là vì môn này khó.
    Cũng đã có bài mình chia sẻ tầm quan trọng về giải thuật trong blog này. Nên bài này sẽ không nói thêm nhiều nữa. Nhưng cá nhân mình cho rằng, nếu học tốt về giải thuật, có tư duy giải thuật, bạn sẽ làm phần mềm tốt hơn và chính xác hơn bình thường.
    Có một sự thật, đó là bạn mình khi đi phỏng vấn các công ty lớn như Google, AWA hay Grab thì đều phải trình bày và giải quyết những bài tập có tính giải thuật rất cao. Bạn có thể không cần nhớ cách cài đặt một giải thuật, nhưng hãy biết đến nó, và vận dụng nó linh hoạt khi phần mềm của bạn cần sử dụng đến nó.
  4. Cơ sở dữ liệu
    Khi mình đi học, mình khá coi thường và ít học môn này. Đó thật sự là một sai lầm.
    Bạn biết rồi đấy, ngày hôm nay, sản phẩm phần mềm nào cũng dùng tới cơ sở dữ liệu. Kể cả là Game điện thoại hay Web bán hàng, bạn cũng cần lưu thông tin người sử dụng. Đặc biệt, trong các hệ thống lớn, cơ sở dữ liệu là 1 phần tất yếu và vô cùng quan trọng. Cơ sở dữ liệu sẽ là đơn giản, khi phần mềm của bạn chỉ có 10 hay 100 người dùng, số lượng nghiệp vụ chỉ bé tí tẹo và đơn giản như kiểu lưu điểm của học sinh hay thời gian đi làm của một nhân viên. Nhưng hãy suy nghĩ xem, nếu bạn phải làm những hệ thống lớn có hàng triệu người dùng, số lượng bản ghi sinh ra trong từng giây lên đến con số hàng chục triệu, cùng với các quan hệ, nghiệp vụ chồng chéo, bạn sẽ làm như thế nào?
    Rất nhiều đồng nghiệp hay chính tôi, đều biết cách viết 1 câu lệnh truy vấn để lấy được thông tin cần thiết. Nhưng chúng tôi không giải quyết được vấn đề, khi dữ liệu lớn, 1 câu lệnh truy vấn có thể tốn hàng chục giây. Nếu học và hiểu rõ về bản chất của cơ sở dữ liệu, các câu lệnh truy vấn, bạn mới thật sự có thể trở thành lập trình viên giỏi và tham gia để xây dựng một sản phẩm có rất đông người dùng
    ————————
    Còn rất nhiều môn đáng học và nên học như: “Mạng máy tính”, “Kiến trúc máy tính”, “Nguyên lý hệ điều hành”, … Mình không khuyên bạn bỏ qua mấy môn này, nhưng trong khuôn khổ và thời gian có hạn, cá nhân mình nghĩ 4 môn bên trên là cần thiết nhất để trở thành 1 lập trình viên giỏi.

Học như thế nào?

Điều muốn nói đầu tiên, học lập trình bạn phải chăm chỉ thực hành. Sẽ là vô nghĩa nếu bạn chỉ giỏi lý thuyết, nghe sơ sơ mà không luyện thường xuyên. Lập trình giống như võ thuật, bạn không thể giao đấu và chiến thắng người khác chỉ nhờ những lý thuyết kiểu như đấm thế này, đá thế kia. Lập trình là khổ luyện. Trong nửa năm đầu tiên, hãy nắm vững 1 ngôn ngữ lập trình. Hãy hiểu rõ bản chất các câu lệnh, từ khoá. Song song với học ngôn ngữ lập trình, hãy học thuật toán. Hãy cài đặt các thuật toán cơ bản, giải quyết các bài tập bằng ngôn ngữ lập trình mà bạn học. Việc rèn luyện và làm bài tập liên tục, sẽ giúp bạn nâng cao cả kiến thức về thuật toán lẫn cú pháp của ngôn ngữ lập trình.

Đối với các thuật toán kinh điển và khó như thuật toán tìm đường đi ngắn nhất, luồng, đồ thị, … bạn có thể không cần nắm vững và ghi nhớ cách cài đặt. Nhưng nên biết các thuật toán hay dùng, độ phức tạp thuật toán, cách áp dụng, … để sử dụng khi cần thiết. 1 hay 2 năm đầu, sau khi rèn luyện ngôn ngữ lập trình và thuật toán (khá tinh thông), hãy giảm cường độ và thời gian luyện tập món đó. Đã đến lúc bạn cần áp dụng kiến thức đã học vào dự án thật rồi đấy.

Hãy nghĩ ra 1 sản phẩm gì đó (ví dụ như game, phần mềm, …) cái gì cũng được rồi thử làm lại từ đầu hoàn toàn bằng những thứ bạn học. Sẽ có 1 sự khác biệt không hề nhẹ giữa những đoạn code ngắn và hàm nhỏ so với việc tạo ra 1 thứ gì đó hoàn chỉnh.

Tiếp tục, hãy thử sức với những sản phẩm có tính ứng dụng và độ phức tạp cao hơn. Hãy rủ bạn bè tham gia vào làm chung, để có thể có trải nghiệm và việc làm việc nhóm. Tới năm thứ 3 hay thứ 4, bạn thật sự nên có những sản phẩm nhỏ và hoàn thiện cho riêng mình. Sẽ rất hữu ích và thuận lợi khi bạn trình bày với nhà tuyển dụng về những sản phẩm mà bạn đã tự làm khi còn đang đi học. Có thể bạn cũng sẽ nhận đc một mức offer về mức lương lẫn vị trí cao hơn so với những người khác.

Và lời khuyên cuối cùng?

Lời khuyên cuối mình muốn nói, đó là sự chủ động. Học lập trình, làm lập trình viên, bạn cần tối đa hoá sự chủ động bản thân. Chủ động học (lên trang web tìm kiếm học, mua sách học), chủ động hỏi (lên diễn đàn, tham gia offline, hội thảo), chủ động làm (tự nghĩ ra dự án rồi làm, tự mày mò), … Và nếu có thể, hãy xin đi thực tập vào những năm sắp tốt nghiệp ở 1 công ty phần mềm. Đừng quan trọng là công ty outsource hay product, đừng quan tâm là công ty to hay nhỏ, vì dù là công ty nào, bạn cũng sẽ học đc những phần kiến thức khác nhau mà ở trường không dạy cho bạn. Có nơi bạn sẽ học được về kĩ thuật, có chỗ bạn học được về quy trình, có nơi thì tặng cho bạn đam mê, sáng tạo. Không có gì là vô ích cả. Và, nếu bạn thật sự có mong muốn trở thành một lập trình viên giỏi, muốn thực tập sớm hơn so với bình thường, bạn có thể liên hệ với tôi bất cứ lúc nào. Nếu bạn đủ điều kiện, tôi nghĩ sẽ đủ sức để giúp bạn đi thực tập ở 1 số công ty phần mềm mà bạn mong muốn.

Chúc các bạn thật sự thành công!

Comments are closed.