Học gì để thành lập trình viên?

9:59 10/01/2018

Có ba câu hỏi căn bản thường bám đuổi mỗi người trước khi học bất cứ thứ gì: “Học thế nào?”,“Học cái gì?” và “Học để làm gì?”. Trong bài viết “Học lập trình cần bao nhiêu thời gian?” đã đăng trước đây, tôi từng nêu lại quan điểm của các nhà tâm lí học cũng như các lập trình viên mẫu mực về việc phải tích lũy đủ thời gian, rèn luyện và cải tiến liên tục ra sao để lập trình viên có thể đi từ học việc tới mức độ “lành nghề”.

Trong bài “Học lập trình trong 10 năm” rất có ảnh hưởng, Perter Norvig đã đưa ra lời khuyên với các lập trình viên: “Hãy học ít nhất khoảng nửa tá ngôn ngữ lập trình, bao gồm: Một ngôn ngữ hỗ trợ bạn trong việc tạo các lớp trừu tượng (Java hoặc C++), một ngôn ngữ dùng trong lập trình hàm (Lisp hoặc ML), một ngôn ngữ cú pháp (Lisp), một ngôn ngữ hỗ trợ khai báo định danh (Prolog hoặc C++ templates), một ngôn ngữ hỗ trợ coroutine (Icon hay Scheme) và một ngôn ngữ hỗ trợ song song (Sisal)”.

Để trở thành một Lập trình viên lành nghề cần cả một quá trình luyện rèn nhất định.
Để trở thành một lập trình viên lành nghề cần cả một quá trình luyện rèn nhất định.

Thực tế, một sinh viên  hiện nay thường chỉ học được một nửa trong số đó sau khi hoàn tất một chương trình học về kĩ thuật phần mềm (software engineering). Liệu Norvig có yêu cầu cao quá đối với nhân lực trong ngành này không? Câu trả lời là KHÔNG bởi thực ra, đó là lời khuyên dành cho những người làm nghề trên chặng đường 10 năm. Một người học việc ban đầu có thể chỉ quan tâm tới những gì vừa đủ để họ bắt đầu làm việc. Khi được hỏi: Đâu là bộ kĩ năng tối thiểu mà một lập trình viên cần có?, Norvig đã trả lời trong cuốn “Lập trình viên nói về công việc”, rằng: “chỉ cần đủ để nhìn ra được một sự tiến bộ nào đó, và biết cách cải thiện dần”. Điều Norvig nói hàm ý muốn nói đến khả năng tự học liên tục. Tuy câu trả lời của ông là rất sâu sắc, nhưng rõ ràng là chưa đi thẳng vào vấn đề, chưa đủ cụ thể được những điều người nghe muốn.

Kì thực, cụm từ “lập trình viên” có thể hơi mông lung và dễ khiến chúng ta mất phương hướng khi tìm hiểu. Hiện nay có rất nhiều kiểu lập trình viên khác nhau, có kiểu người học chỉ cần vài tháng để làm quên, có kiểu lại cần bỏ ra tới vài năm mới hoàn thiện được. Mỗi kiểu công việc đó lại đòi hỏi những bộ kĩ năng khắc nhau. Nói cách khác, đối với việc học lập trình, trước khi tìm hiểu “học cái gì”, trước tiên bạn phải tìm hiểu về đầu ra của việc học. Yêu cầu của công việc thế nào thì học thế ấy. Người làm việc trong lĩnh vực này có thể tự học hoàn toàn, tham gia vào việc học tại một trung tâm đào tạo lập trình viên chuyên nghiệp, tham gia một chương trình học tập trực tuyến, hoặc theo đuổi việc học tại các trường  cao đẳng, đại học. Bất kì con đường nào trong số đó đều có thể dẫn đến cái đích là lập trình viên, nhưng chính những yêu cầu công việc mà người học lựa chọn sẽ quyết định họ cần trang bị tối thiểu những gì.

Có một dạng lập trình viên dường như cần ít thời gian học hơn cả là “web front-end developer” (lập trình viên giao diện web, gọi tắt là front-end developer). Những điều tối thiểu họ cần học chỉ đơn giản là HTML, CSS, JavaScript, UI/UX và sử dụng một số công cụ cũng như framework cần thiết. Với những công cụ này, họ có thể thuần thục trong việc thao tác với phần nổi của một hệ thống web, đó chính là phần mà chúng ta nhìn thấy ngay mỗi khi vào một trang web. Quá trình học tập này có thể chỉ kéo dài vài tháng là đã có thể hoàn thành.

Hiện nay, nhu cầu công việc cho front-end developer khá nhiều. Nhiều nhóm phát triển sản phẩm cần  tuyển dụng front-end developer để làm đẹp cho giao diện của ứng dụng, thiết kế trải nghiệm người dùng thật ưu việt. Ngược lại, có những startup lại chỉ tập trung làm thuê hoặc làm sẵn những themes, templates (các mẫu giao diện) mới để đem bán cho các nhà phát triển phần mềm khác. Ngay ở Việt Nam, có những startup kiếm tiền triệu đô bằng việc tập trung vào phân khúc đơn giản này.

Ngược lại với các front-end developer, các lập trình viên back-end (back-end developer) chuyên viết mã lệnh để thực hiện những nghiệp vụ ẩn phía sau một hệ thống phần mềm. Một trang web bán hàng trực tuyến đơn giản có thể chỉ có một vài trang hiển thị thông tin sản phẩm, vài trang khác để hướng dẫn người dùng mua hàng. Nhưng ở đằng sau, hàng tá chương trình khác được viết ra để thực hiện việc truy xuất thông tin từ cơ sở dữ liệu, gửi thông tin qua mạng, tổ hợp thông tin hiển thị, và thực hiện việc giao dịch trực tuyến với các hệ thống khác của ngân hàng. Nếu hệ thống ứng dụng web là một ngôi nhà, thì phần back-end chính là phần thô của ngôi nhà đã xây xong, còn front-end chính là nội thất và phần decor của ngôi nhà đó. Trong nhiều loại phần mềm hiện nay, phần chìm back-end chiếm phần lớn nỗ lực phát triển.

Quá trình học tập để trở thành back-end developer thường mất công hơn nhiều so với các front-end developer. Họ phải học một trong các ngôn ngữ lập trình chủ đạo như PHP, Ruby, Python, Java, C#…, cùng với các công cụ và thư viện sẵn có để biết cách xử lí nghiệp vụ; học cách sử dụng thành thạo một hoặc vài cơ sở dữ liệu để lưu trữ, truy vấn và xử lí dữ liệu; thành thạo thao tác với các máy chủ web; có hiểu biết về hệ thống đa lớp, bảo mật, lập trình phân tán và mạng, cũng như hiểu biết sâu sắc hơn về quy trình và phương pháp luận phát triển phần mềm (Agile, Scrum, XP, CMMI…) với các nhóm làm việc có quy mô khác nhau. Tùy từng quy mô và yêu cầu mà những lập trình viên back-end cũng sẽ phải thành thạo nhiều hơn các công cụ cộng tác, các công cụ quản trị dự án, các công cụ quản lí mã nguồn và cấu hình, các công cụ và quy trình tự động hóa để gia tăng chất lượng và năng suất. Ở một số lĩnh vực, lập trình viên còn phải hiểu sâu sắc nghiệp vụ của lĩnh vực ấy (domain knowledge) mới có thể làm việc được. Một lộ trình học tập như vậy thường đòi hỏi thời gian gấp đôi hoặc hơn thế so với các lập trình viên front-end.

 

Cùng chuyên mục

Đăng Kí học Fpoly 2023

Bình Luận