Hãy chuẩn bị trước chặng đường trở thành lập trình viên !
Có ba câu hỏi căn bản mà bất kỳ người học nghề nào cũng thường đặt ra: "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?", nhận định của các chuyên gia tâm lý và các lập trình viên giỏi đã được tôi đề cập về việc bạn cần dành đủ thời gian để rèn luyện và nâng cao kỹ năng lập trình từ việc học đến thành thạo. Đó chỉ là một phần câu trả lời cho câu hỏi "Học thế nào?". Trên thực tế, với lượng kiến thức rộng lớn và sự thay đổi liên tục của ngành phần mềm, các người học lập trình hiện nay thường gặp khó khăn trong việc quyết định "Học cái gì?".
Học cái gì để trở thành lập trình viên?
Trong bài viết “ tự học lập trình trong 10 năm” của Peter Norvig, ông khuyên lập trình viên nên học ít nhất nửa tá ngôn ngữ lập trình khác nhau. Điều này bao gồm một ngôn ngữ hỗ trợ tạo lớp trừu tượng (ví dụ như Java hoặc C++), một ngôn ngữ lập trình hàm (như Lisp hoặc ML), một ngôn ngữ cú pháp (như Lisp), một ngôn ngữ hỗ trợ khai báo định danh (như Prolog hoặc C++ templates), một ngôn ngữ hỗ trợ coroutine (như Icon hoặc Scheme) và một ngôn ngữ hỗ trợ đồng thời (như Sisal). Tuy nhiên, thực tế cho thấy, một sinh viên thường chỉ có thể học được một nửa trong số đó sau khi hoàn thành chương trình đào tạo kỹ thuật phần mềm.
Đúng như bạn nghĩ, Norvig yêu cầu khá cao. Các lập trình viên mới chỉ cần đủ kiến thức để bắt đầu làm việc. Khi được hỏi "Bộ kỹ năng tối thiểu mà một lập trình viên cần có là gì?", Norvig đã trả lời trong cuốn sách "Lập trình viên nói về công việc" rằng chỉ cần đủ kiến thức để nhìn ra một tiến bộ và biết cách cải thiện dần dần. Điều Norvig muốn bày tỏ là khả năng tự học liên tục. Mặc dù câu trả lời rất sâu sắc, nhưng nó chưa thẳng thắn trả lời cho câu hỏi cụ thể này.
Thực tế là thuật ngữ "lập trình viên" có thể làm chúng ta mất phương hướng trong quá trình tìm hiểu. Hiện nay có nhiều loại lập trình viên khác nhau, từ những người chỉ cần vài tháng học việc cho đến những người cần vài năm. Mỗi công việc lại yêu cầu các kỹ năng khác nhau. Do đó, trước khi tìm hiểu "Học cái gì?", bạn cần hiểu công việc cần gì, và học theo đúng yêu cầu công việc đó. Bạn có thể tự học, tham gia một trung tâm đào tạo chuyên nghiệp, tham gia các khóa học trực tuyến hoặc học tại trường đại học. Bất kỳ con đường nào cũng có thể đưa bạn trở thành lập trình viên , nhưng yêu cầu công việc mà bạn lựa chọn sẽ quyết định bạn phải học những gì ít nhất.
Lập trình viên giao diện (front-end developer)
Một dạng lập trình viên có thể học ít thời gian hơn để trở thành đó là "lập trình viên giao diện web" (hay còn được gọi là front-end developer). Điều duy nhất mà họ cần học là hiểu sâu về HTML, CSS, JavaScript, UI/UX và sử dụng một số công cụ và framework cần thiết để làm việc với phần giao diện của một trang web. Quá trình học này có thể kéo dài trong vài tháng.
Hiện nay, nhu cầu công việc cho lập trình viên giao diện không hề ít. Nhiều nhóm phát triển sản phẩm cần lập trình viên giao diện để trang trí giao diện ứng dụng hoặc thiết kế trải nghiệm người dùng tốt hơn. Ngược lại, nhiều startup tập trung vào việc cung cấp themes và templates (giao diện mẫu) để bán cho các nhà phát triển phần mềm khác. Chúng ta có thể thấy các startup ở Việt Nam kiếm hàng triệu đô la nhờ tập trung vào lĩnh vực này.
Lập trình viên back-end
Một khía cạnh khác là lập trình viên back-end, chuyên viết mã lệnh để thực hiện các nghiệp vụ phía sau cho một hệ thống phần mềm. Một trang web bán hàng trực tuyến có thể chỉ có một số trang hiển thị thông tin sản phẩm và hướng dẫn người dùng mua hàng. Tuy nhiên, phía sau đó là hàng tá các chương trình khác được viết để 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 giao dịch trực tuyến với các hệ thống khác của ngân hàng. Nếu xem hệ thống ứng dụng web là một ngôi nhà, thì phần back-end chính là phần thô đã hoàn thành, còn phần front-end chính là nội thất và trang trí. Trong nhiều loại phần mềm ngày nay, phần back-end chiếm phần lớn thời gian phát triển.
Quá trình học để trở thành lập trình viên back-end thường mất công hơn nhiều so với lập trình viên giao diện. Bạn phải học một trong số các ngôn ngữ lập trình chính 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ụ. Bạn cũng phải thành thạo việc làm việc với cơ sở dữ liệu, máy chủ web, 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. Ngoài ra, bạn phải có kiến thức sâu về quy trình và phương pháp luận phát triển phần mềm với các nhóm làm việc khác nhau. Việc trở thành lập trình viên back-end yêu cầu thời gian đào tạo gấp đôi hoặc hơn so với lập trình viên giao diện.
Lập trình viên ứng dụng di động
Kể từ khi các nền tảng di động lên ngôi, lực lượng lập trình viên ứng dụng di động cũng đã tăng. Đây là những người chuyên viết ứng dụng chạy trên các điện thoại thông minh, như hệ điều hành iOS của Apple, Android của Google, Windows Mobile của Microsoft, Tizen của Samsung, v.v. Quá trình học của lập trình viên ứng dụng di động tương đối giống với lập trình viên back-end, nhưng tập trung vào một nền tảng công nghệ cụ thể. Ví dụ, lập trình viên iOS tập trung phát triển ứng dụng trên hệ điều hành iOS, sử dụng công cụ và ngôn ngữ lập trình do Apple cung cấp, chẳng hạn như Objective-C, Swift, XCode. Trong khi đó, lập trình viên Android sử dụng công cụ và ngôn ngữ Java do Google cung cấp để phát triển ứng dụng cho các điện thoại chạy hệ điều hành Android.
Full-stack developer
Trong những năm gần đây, thuật ngữ "full-stack developer" đã trở nên phổ biến. Đây thường là những lập trình viên có khả năng làm được cả phần giao diện, back-end và thậm chí cả ứng dụng di động. Các lập trình viên kiểu này thường có hạng cao hơn, được trả lương cao hơn và yêu cầu không chỉ bộ kỹ năng mở rộng hơn mà còn kinh nghiệm nhiều hơn. Nhiều startup đòi hỏi lập trình viên của họ phải là full-stack để có thể làm nhiều công việc hơn, phản ứng nhanh hơn với các sự cố của hệ thống và đề xuất các giải pháp mới. Việc trở thành full-stack developer khó khăn hơn, mất thời gian hơn nhiều so với các loại lập trình viên khác.
Ngoài các loại lập trình viên đã nêu, chúng ta còn có lập trình viên hệ thống, lập trình viên ứng dụng, lập trình viên nhúng, lập trình viên game, v.v. Tất cả đều yêu cầu một quá trình học tập dài và liên quan đến nhiều kỹ năng khác nhau.
Như vậy, bài viết này đã cung cấp một cái nhìn tổng quan về các lộ trình học tập khác nhau để trở thành một lập trình viên. Đây không phải là tất cả những công việc mà các lập trình viên đang làm trên thế giới. Ngành phần mềm luôn chuyển động nhanh chóng và liên tục tạo ra các loại công việc mới. Một số công việc yêu cầu ít kỹ năng hơn, trong khi những công việc khác yêu cầu nhiều kỹ năng hơn. Tuy nhiên, có một số kiến thức cần thiết mà tất cả các lập trình viên cần biết hoặc thành thạo. Đó là những kiến thức "nền tảng" trong chương trình đào tạo lập trình. Điều này bao gồm cơ sở toán học, ngôn ngữ lập trình, hệ điều hành, quy trình phát triển phần mềm, phân tích nghiệp vụ, thiết kế và kiến trúc, kiểm thử phần mềm và nhiều kỹ năng mềm khác. Trang bị những kiến thức này sẽ giúp lập trình viên tiến xa trên con đường nghề nghiệp thú vị và đầy thách thức.