Muốn thành lập trình viên nên học những gì?

2
Lập trình viên cần học những gì

Trong thời gian còn giảng dạy, tôi gặp nhiều sinh viên có nguyện vọng đi theo hướng lập trình viên. Tuy nhiên, do định hướng của chương trình đào tạo không thực sự tốt, các bạn định vị không trúng những gì cần học.

Một sai lầm mà nhiều bạn mắc phải là học quá nhiều công cụ lập trình trong khi không biết/bỏ qua những vấn đề khác quan trọng hơn.

Các bạn chắc sẽ nói ngay, làm lập trình viên đương nhiên phải học nhiều kỹ thuật và công nghệ phát triển ứng dụng rồi. Điều đó không hoàn toàn đúng.

Trong bài viết này, chúng tôi sẽ cố gắng giúp bạn định hình những gì quan trọng nhất mà một lập trình viên tương lai cần chuẩn bị trước khi tốt nghiệp. Qua bài viết này hi vọng bạn sẽ nhìn ra điểm mạnh và điểm yếu của chương trình đào tạo của mình để bù đắp.

Lập trình viên tương lai cần kỹ năng gì?

Một lập trình viên chuyên nghiệp cần rất nhiều kỹ năng khác nhau. Tuy nhiên, trong quá trình học bạn có thể tự xây dựng cho mình những kỹ năng quan trọng nhất để bắt đầu sự nghiệp. Dưới đây là một số kỹ năng quan trọng bạn cần hình thành trước khi tốt nghiệp.

Master một công cụ lập trình

Công cụ lập trình là không thể thiếu với một developer. Cũng giống như khi nấu ăn bạn không thể không có bộ dao-thớt-nồi-niêu-xoong-chảo tốt. Công cụ lập trình giúp chuyển ý tưởng và thiết kế thành code và chương trình.

Tùy thuộc vào sở thích và nhu cầu bên ngoài bạn có thể tùy ý lựa chọn một ngôn ngữ như C# .NET, Java, PHP, JavaScript và hướng công nghệ cụ thể sử dụng ngôn ngữ đó (desktop, web, mobile). Cái cần lưu ý ở đây là biết ít (công cụ) nhưng phải biết rất sâu. Giống như các cụ nói “quý hồ tinh, bất quý hồ đa” ấy.

Một điểm cần lưu tâm là khi chọn lựa công cụ nên hướng tới những gì thuộc về tương lai. Các ngôn ngữ và công nghệ thường thay đổi khá nhanh. Thường chỉ sau một hai năm là xuất hiện cái mới thay thế cái cũ. Từ khi bắt đầu đến khi bạn chính thức sử dụng được nó trong công việc cũng mất hàng năm trời.

Tuy nhiên, trước khi chọn và thành thạo một công cụ nào đó, bạn cần học tốt lập trình căn bản ở trường (hoặc tự học). Lập trình căn bản có thể không cung cấp ngay công cụ cho bạn nhưng nó cung cấp cho bạn cách suy nghĩ kiểu lập trình. Từ đó bạn có thể học tiếp bất kỳ công cụ nào mình thích.

Viết code “sạch”

Khái niệm code sạch (clean code) xuất hiện trong cuốn sách cùng tên của Robert C. Martin. Đây là tập hợp rất nhiều kinh nghiệm để viết code dễ đọc – dễ hiểu – dễ sử dụng – dễ bảo trì mà bất kỳ ai khi code cũng nên áp dụng.

Các vấn đề clean code đề cập tới như đặt tên, sử dụng hằng, chú thích, cách viết function, v.v. thoạt nghe tưởng rất “tầm thường”. Thực tế hầu hết người lập trình đều mắc phải. Từ đây dẫn đến những khó khăn không đáng có khi sử dụng và bảo trì code.

Để viết được code sạch ngoài việc “biết” cần phải sử dụng liên tục trong quá trình học và làm để nó trở thành một kỹ năng. Sau khi học lập trình căn bản nên đọc cuốn sách này.

Một điều khá đáng buồn là việc viết code sạch này hầu như không được quan tâm chỉ dạy ở trường. Hầu hết các bạn chỉ biết đến nó khi đã đi làm/thực tập và được các senior chỉ dẫn.

Phân tích bài toán

Các bạn sinh viên thường có thói quen rất xấu: nhận được đề tài ngay lập tức ngồi viết code. Code chán chê rồi bắt đầu sửa, sửa đi sửa lại.

Trước hết cần nhớ rằng, developer là người giúp giải quyết vấn đề bằng phần mềm máy tính. Do đó bạn sẽ phải giải quyết rất nhiều bài toán khác nhau. Chẳng hạn quán ăn cần phần mềm giúp khách hàng order đồ ăn, rạp chiếu phim cần phần mềm giúp quản lý các suất chiếu, v.v..

Trước vô số các vấn đề rất khác nhau như vậy, developer phải có khả năng phân tích bài toán. Việc phân tích này quan trọng hơn nhiều so với code. Nó giúp định hình phần mềm tương lai, làm rõ phần mềm phải thực hiện những gì. Phân tích lệch – phần mềm mô dụng.

Đây cũng là kỹ năng khó nhằn hàng đầu với hầu hết mọi người. Kỹ năng này không phải có được ngay sau khi đọc sách. Nó đòi hỏi phương pháp, kinh nghiệm, sự hiểu biết, tư duy phân tích – tổng hợp – hệ thống.

Ở trường học thường có một môn hướng tới vấn đề này. Tên nó đại khái là Phân tích thiết kế hệ thống thông tin.

Tư duy logic và thuật toán

Đừng nghĩ tới những thuật toán cao siêu trong môn học Cấu trúc dữ liệu và thuật toán nhé. Ở đây chúng ta đang nói tới kỹ năng suy nghĩ và diễn đạt vấn đề theo “kiểu thuật toán”. Nghĩa là phân chia một vấn đề lớn thành các vấn đề nhỏ hơn và trật tự giải quyết chúng để đạt được mục tiêu.

Đây là loại kỹ năng được sử dụng từng giờ từng phút. Nó chính là tiền đề trực tiếp của việc viết code. Một cách đơn giản, trước khi bạn viết bất kỳ đoạn code nào, trong đầu bạn phải có hình dung trước về những gì code đó sẽ làm và trật tự của chúng. Đó là tư duy theo kiểu thuật toán. Nó sẽ ánh xạ trực tiếp thành code.

Rất nhiều bạn cảm thấy học code rất khó khăn và mắc kẹt trong nó chính là do không biết cách suy nghĩ như vậy.

Đọc bài viết này nếu bạn đang bị mắc kẹt trong học code.

Tự học

Đây là kỹ năng quan trọng hàng đầu của developer. Khi công nghệ biến đổi liên tục, bạn phải tự chạy theo nó mà không có ai dạy bạn học và làm cả. Không có khả năng tự học = dậm chân tại chỗ.

Việc tự học ngành IT hiện nay thực ra vô cùng thuận lợi. Một lệnh search trên google cho bạn cả kho kiến thức liên quan. Những thứ trên Internet luôn cập nhật và hấp dẫn hơn nhiều so với giáo trình.

Đọc documentation tiếng Anh

Cái kỹ năng này thì khỏi phải bàn. Không đọc được tiếng Anh thì hơi bị khó tiến bộ trong nghề này.

Ví dụ đơn giản nhất như khi debug, mọi lỗi đều thông báo bằng tiếng Anh. Không đọc được tiếng Anh thì debug bằng niềm tin à! Rất nhiều bạn học lập trình chán chê rồi vẫn không thể debug được một phần vì kém tiếng Anh.

Các công cụ lập trình hay công nghệ đều có hỗ trợ và documentation rất tốt. Chỉ có điều mọi thứ là tiếng Anh hết. Chả ai đi dịch những thứ này ra cho bạn đọc cả. Một công nghệ mới ra đời, bạn muốn học thì chỉ có đường tự đọc lấy bằng tiếng Anh.

Cũng lưu ý rằng, tiếng Anh cho công nghệ này không phải là thứ tiếng Anh giao tiếp (A1-C2) dạy ở trường đâu ạ. Để rèn anh này chỉ có nước tự mình tập đọc tài liệu chuyên ngành tiếng Anh thôi. Ban đầu sẽ rất chậm và khó, sau sẽ nhanh dần lên.

Kiến thức lập trình viên tương lai cần biết

Dưới đây chúng tôi liệt kê một số kiến thức quan trọng nhưng ít được quan tâm trong chương trình đào tạo. Đây không phải là tất cả những kiến thức lập trình viên tương lai cần biết. Những kiến thức này đóng vai trò bổ sung cho những gì bạn đã có trong chương trình học.

Kiến trúc và thiết kế phần mềm

Đây là nội dung hết sức quan trọng để bạn có được cái nhìn tổng quan và hệ thống nhất về các hệ thống phần mềm. Mọi sự lựa chọn trong phát triển phần mềm đều nằm trong này.

Lấy ví dụ nhé, có thể bạn từng nghe thấy những thứ như phần mềm hướng dịch vụ (SOA), phần mềm chủ – khách, kiến trúc đa tầng, v.v.. Tất cả những thứ đó đều nằm trong khuôn khổ của kiến trúc và thiết kế phần mềm.

Các nội dung của món này vô cùng rộng và sâu (và khó hiểu nữa!). Bạn không thể học một phát hết ngay được đâu. Lời khuyên ở đây là nên tập trung đọc về một số loại kiến trúc thường gặp nhất.

Bạn có thể tham khảo bài viết này trên wikipedia để có khái niệm chung về kiến trúc phần mềm.

Cơ sở dữ liệu

Cơ sở dữ liệu là thành phần không thể thiếu của bất kỳ ứng dụng nào. Nội dung về cơ sở dữ liệu cũng được dạy rất kỹ trong chương trình đại học. Đây là thứ bạn bắt buộc phải học.

Tuy nhiên lưu ý rằng bạn nên tập trung vào phương pháp thiết kế cơ sở dữ liệu thay vì kỹ thuật trên một hệ quản trị cụ thể. Hiện nay các ORM (Object – Relational Mapping) được sử dụng rất phổ biến. Bạn không cần phải biết SQL để làm việc với cơ sở dữ liệu. Do đó, phương pháp quan trọng hơn nhiều so với kỹ thuật.

Mẫu thiết kế (Design patterns) và Mẫu kiến trúc (Architectural styles) UI

Có thể hình dung mẫu thiết kế là những dạng toán mẫu trong thế giới lập trình. Đây là những hướng dẫn (guideline) để giải quyết hầu hết các vấn đề thường gặp trong lập trình hướng đối tượng.

Nổi tiếng nhất về món này là cuốn sách “Design Patterns: Elements of Reusable Object-Oriented Software” của nhóm “Gang of Four”. Tuy nhiên phải nói thật, đọc cuốn này đau đầu lắm. Tốt nhất bạn hãy search Google “design pattern” với implementation bằng ngôn ngữ lập trình mình biết. Có rất nhiều tài liệu diễn đạt dễ hiểu hơn.

Các mẫu kiến trúc UI, tương tự như mẫu thiết kế, cũng là những hướng dẫn nhưng hướng tới việc xây dựng giao diện của ứng dụng. Mẫu kiến trúc UI có phần phụ thuộc vào sự hỗ trợ của công nghệ phát triển ứng dụng. Quen tai nhất là mẫu MVC hay gặp trong các framework cho phát triển ứng dụng web.

Khi học một công nghệ phát triển ứng dụng nào, hãy đào sâu xem có những style nào hay được sử dụng với nó.

Các nguyên lý về vận dụng OOP: SOLID, SoC, v.v.

Các bạn khi học lập trình hướng đối tượng đều biết các nguyên lý chung của mô hình này. Tuy nhiên, việc vận dụng hợp lý mô hình OOP trong phát triển ứng dụng lại là vấn đề hoàn toàn khác.

Dưới đây là một số nguyên lý quan trọng và thường được áp dụng nhất.

SOLID là một bộ năm nguyên lý quan trọng khi vận dụng OOP để đảm bảo tính dễ hiểu, uyển chuyển và dễ bảo trì.

SoC (Separation of Concerns) là một nguyên lý khác thường xuyên được dùng để phân chia chương trình ra các thành phần.

Loose coupling được sử dụng để giữ quan hệ “lỏng lẻo” giữa các thành phần của ứng dụng (như giao diện và xử lý dữ liệu) giúp dễ dàng thay thế chúng khi cần thiết.

Rất đáng tiếc, các vấn đề trên hầu như không được giảng dạy.

Kết luận

Đọc đến đây chắc nhiều bạn sẽ choáng phải không ạ!

Để trở thành một developer đúng nghĩa quả thực không đơn giản. Đi còn đường này cần nhiều thời gian và công sức lắm. Bạn cần học một cách bài bản. Một vài khóa học ngắn hạn là không đủ.

Nếu bạn đang là sinh viên và muốn đi theo con đường này hãy tự chuẩn bị cho mình một kế hoạch học riêng. Đừng trông chờ vào chương trình đào tạo của trường.

Lưu ý rằng, kỹ năng và kiến thức trên thu được không đơn giản chỉ qua việc đọc sách. Nó hình thành khi bạn làm nhiều project. Đừng nghĩ tới những gì to tát vội. Hãy bắt đầu bằng những phần mềm nho nhỏ để giải quyết những vấn đề riêng của bản thân. Trong quá trình làm, hãy cố gắng áp dụng hết những gì học được.

Chúc bạn thành công!

+ Nếu bạn thấy site hữu ích, trước khi rời đi hãy giúp đỡ site bằng một hành động nhỏ để site có thể phát triển và phục vụ bạn tốt hơn.
+ Nếu bạn thấy bài viết hữu ích, hãy giúp chia sẻ tới mọi người.
+ Nếu có thắc mắc hoặc cần trao đổi thêm, mời bạn viết trong phần thảo luận cuối trang.
Cảm ơn bạn!

Theo dõi
Thông báo của
guest

2 Thảo luận
Cũ nhất
Mới nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Rezit_Lorem

Cảm ơn tác giả đã chia sẻ bài viết rất bổ ích ạ.

Quang Thuận

cám ơn nhiều!