Cũng như bao bao lập trình viên (LTV) khác, tôi cũng đã từng là LTV mới, là newbie, lơ tơ mơ bước vào nghề lập trình với bao khó khăn, bỡ ngỡ. Trải qua quãng thời gian 1 thập kỉ làm việc, qua rất nhiều dự án lớn nhỏ, làm nhiều vị trí từ Junior Dev, Senior Dev, Technical Leader cho đến Project Manager, Solution Architect thì tôi đã có cho mình khá nhiều trải nghiệm và khi ngẫm lại thì thấy rằng có rất nhiều kinh nghiệm mà nếu các anh em Dev áp dụng sớm thì CÓ THỂ sẽ giúp các bạn nhanh chóng trưởng thành, thăng tiến trong sự nghiệp hơn. Thực tế là trong quá trình làm việc tôi cũng đã chia sẻ những kinh nghiệm của mình cho khá nhiều đồng nghiêp trẻ thân thiết (gọi là “đệ”) và hầu hết trong số họ đều thăng tiến rất nhanh. Tôi luôn tự hào về điều đó và muốn chia sẻ những kinh nghiệm của tôi cho nhiều anh em hơn – những người có thể không quen biết nhưng có cùng đam mê lập trình giống tôi.
Những TIP tôi sẽ chia sẻ trong bài viết này là kinh nghiệm của riêng bản thân tôi, chắc chắn nó ko thể đúng với tất cả mọi người được, nếu các bạn quan tâm thì hãy đọc và áp dụng những điều mà các bạn thấy OK. Nếu các bạn có thể chia sẻ các tips riêng của các bạn thì quá ngon, hãy comment bên dưới bài viết nhé.
1. Trong quá trình làm việc, luôn luôn phải tạo document để lưu lại các hiểu biết, những kiến thức hay… gọi chung là knowhow được phát hiện và tích lũy trong quá trình làm việc.
Có thể ngay tại thời điểm đó chúng ta cảm thấy rất rất hiểu một vấn đề nào đó và cảm giác như sẽ dell bao giờ có thể quên được. Tuy nhiên trên thực tế thì não chúng ta không thể nhớ hết mọi thứ, khi chúng ta lâu không dùng đến các kiến thức đó, hoặc khi chúng ta nạp vào đầu những kiến thức mới phục vụ cho công việc mới thì các kiến thức đó sẽ dần dần bị xóa trong não để nhường chỗ cho kiến thức mới.
Nếu chúng ta không lưu lại thì các kiến thức đó sẽ thất truyền, sau này khi cần sẽ lại phải nghiên cứu lại. Tuy nhiên việc nghiên cứu lại này sẽ không phải là từ đầu và chắc chắn sẽ nhanh hơn rất nhiều nếu chúng ta có tài liệu lưu lại từ trước. Nếu các bạn có blog riêng thì quá ngon rồi, nhưng nếu chưa có blog hoặc không thích viết blog thì nên dùng GitHub để lưu tài liệu, vừa có thể truy cập từ bất cứ đâu, vừa có thể dễ dàng chia sẻ cho cộng đồng (những tài liệu nhạy cảm thì cất ở máy dùng riêng thôi nhé).
2. Cách tốt nhất để tìm hiểu legacy code là debug và vẽ lại sequence
Việc đọc code và cố để hiểu một hệ thống có sẵn nó hoạt động thế nào là một công việc nó cực vãi cả đ*i. Đọc hiểu code của thằng khác đã mệt, việc hiểu tổng thể cả hệ thống, liên kết giữa các module như thế nào là việc rất đau đầu khi mới tiếp cận hệ thống mới.
- Debug là cách tốt nhất để chúng ta có thể hiểu được chương trình hoạt động như thế nào, các module liên kết với nhau ra làm sao. Tuy nhiên không phải lúc nào chúng ta cũng có thể debug được vì có thể tại thời điếm đó chúng ta chưa thiết lập được môi trường để build, run và debug chương trình
- Trog trường hợp không thể debug thì đành phải đọc code chay và tự hình dung ra các mà chương trình hoạt động
- Nếu chỉ đọc và hiểu trong đầu nhưng không tạo document thì sẽ rất khó nhớ và nhanh quên. Để giải quyết vấn đề này mình khuyên các bạn nên vẽ lại UML diagram như component diagram (thể hiện kiến trúc tổng thể), sequence diagram cho các luồng xử lý chính của chương trình. Việc vẽ các diagram này sẽ giúp các luồng xử lý của chương trình nhập vào đầu chúng ta nhanh hơn. Những lúc nào quên chỉ cần mở lại xem thì sẽ hiểu và nhớ ra rất nhanh.
Một số tool vẽ UML mà mình hay dùng: Astah, Visual Paradigm
3. Luôn tìm hiểu và bổ sung những thuật ngữ mà mình không biết
Trong các cuộc meeting, thảo luận của team có thể bạn sẽ bắt gặp những thuật ngữ lạ mà mình không biết. Đừng bỏ qua, hãy âm thầm note lại sau đó lên mạng search xem nó là cái gì để lần sau còn biết mà gật gù, hoặc đọc tài liệu kỹ thuật thì còn hiểu.
4. Luôn đặt câu hỏi TẠI SAO và tìm câu trả lời
Bạn hãy luôn luôn tự đặt cho mình những câu hỏi đại loại như “TẠI SAO ?”, “NHƯ THẾ NÀO ?”, “LÀ THẾ DELL NÀO ?” và hãy tìm cho mình một Mentor tốt có thể giúp bạn giải đáp những thắc mắc đó hoặc tự mình tìm tòi để trả lời được những câu hỏi đó.
Dần dần kho kiến thức trong đầu bạn sẽ được bổ sung và củng cố, bạn có thể giải quyết vấn đề một cách tự tin và nhanh chóng vì bạn hiểu bản chất của mọi việc. Khi đó bạn đã ở tầm cao rất mới, và lúc này hãy quay trở lại bàn về vấn đề salary với các manager của bạn. Nếu không vừa lòng, bạn hoàn toàn có thể kiếm một chỗ khác tốt hơn, bạn giỏi bạn có quyền mà.
5. Chọn lọc câu trả lời trên StackOverflow
Tất nhiên rồi, thời nay ông LTV nào mà chả search và copy code trên StackOverflow (SO). Lại nhớ hồi đầu search code trên SO mình còn copy mẹ cả code ở câu hỏi về chạy :))
Các đồng chí newbie khi search code trên SO nhớ để ý nhé:
- Đọc câu hỏi xem có đúng với ý mình cần hỏi hoặc vấn đề mình đang gặp phải không. Nếu đúng thì sang bước 2, nếu không thì next
- Tìm câu trả lời có dấu tích xanh như thế này: Đây là câu trả lời giải quyết được vấn đề của người hỏi và sẽ hiện đầu tiên trong danh sách các câu trả lời
- Nếu không có câu trả lời tích xanh như trên thì hãy đọc những câu trả lời có nhiều upvote nhất, đừng mất thời gian vào các câu không có upvote hoặc upvote âm
6. Chủ động trong công việc
- Chủ động report công việc cho leader, không để leader hỏi mới báo cáo ⇒ Leader rất thích member như thế này
- Chủ động xin việc mới khi đã hoàn thành xong công việc được giao trước thời hạn ⇒ Leader sẽ nhìn bạn bằng con mắt khác: “Thằng này ngon đấy”
- Khi phát hiện ra leader SAI, hãy tìm cách BẬT lại để gây ấn tượng. Nhưng không phải BẬT kiểu sồn sồn lên: “đéo phải thế”, “anh nói đéo đúng”, “anh sai cmnr”, bala bolo, ect. Hãy trao đổi riêng và nói một cách cầu thị + tôn trọng đối phương: “theo em hiểu thì cái này nó thế này, cái lọ cái chai, …” ⇒ Nếu bạn đúng, leader sẽ tôn trọng bạn, lời nói của bạn sẽ có trọng lượng hơn. Nếu bạn có lỡ sai thì leader cũng không có lý do gì để chửi hay ghét bạn. Trường hợp bạn gặp phải leader hãm, đã ngu còn không biết tiếp thu, lại quay ra chửi bạn thì dell còn lý do gì để ở lại cái team đấy nữa.
7. Hãy code ĐẸP
Code đẹp là triệu chứng, là biểu hiện của một LTV có tư duy logic mạch lạc, tư duy design tốt, có hiểu biết về ngôn ngữ lập trình mà họ đang sử dụng. Khi bạn có ý thức muốn code mình đẹp thì cũng là luyện cách tư duy, trình bày mạch lạc, logic. Ngoài ra ý thức đó sẽ thúc đẩy bạn học hỏi thêm về ngôn ngữ lập trình, design, các kỹ năng khác, vân vân và mây mây. Khi trình độ bạn lên thì code auto đẹp.
Review code mà thấy thanh niên nào code ĐẸP là muốn CƯNG rồi, có sai cũng ko nỡ chửi 😆
8. Sử dụng Tools & Toys một cách hợp lý để tăng hiệu quả công việc
Nếu biết và sử dụng Tools & Toys hợp lý, năng suất và chất lượng công việc của bạn ngon hơn rất nhiều. Dưới đây là bộ Tools mà mình vẫn thường xuyên sử dụng trong công việc
- Tìm kiếm File/Folder: Everything
- Compare source code: WinMerge, Beyond Compare
- Code Editor: Notepad++, Visual Studio Code
- Binary Editor: HxD
- IDE: Visual Studio, QtCreator, Android Studio
- Vẽ UML: Astah
- Chạy máy ảo: VirtualBox, VmWare
- Ghi chú (đồng bộ lên cloud): Microsoft OneNote
- SSH/SCP tool: MobaXterm
Tool là để phục vụ công việc của chính bạn nên bạn hãy sử dụng những tool mà bạn cảm thấy thoải mái nhất, nếu bạn thấy dùng Visual Studio Code thuận tiện và thoải mái hơn so với Vim thì đừng cố dùng Vim chỉ vì mấy thằng trong team bạn cũng dùng Vim.
9. Dành thời gian đọc một số cuốn sách kinh điển cho lập trình viên
Một vài cuốn sách mình đã đọc, thấy khá hay, áp dụng được nhiều vào thực tế, anh em có thể tham khảo
- Effective C++ & More Effective C++ by Scott Meyers
- Clean Code by Robert C. Martin
- The Pragmatic Programmer by David Thomas & Andrew Hunt
- Code Complete by Steve McConnell
- Design Patterns For Dummies by Steven Holzner
- Lập trình và cuộc sống
— Phạm Minh Tuấn (Shun) —