Từng bước để trở thành senior programer

Kỹ sư phần mềm trải qua nhiều giai đoạn trong sự nghiệp của họ, bắt đầu khi bắt đầu tập tành code với tên gọi Junior coder, trải qua quá trình học tập và làm việc, họ đạt tới mức Mid Level. Sau đó, sau những ngày ôm bàn phím miệt mài, họ trở thành senior. Trong bài viết này, tôi sẽ chia sẻ từng bước để trở thành Senior.

Tại sao phải quan tâm?

  • Bạn sẽ được trả nhiều hơn, level của bạn tăng nghĩa là bạn cũng được trả xứng đáng
  • Thăng tiến trong sự nghiệp, Senior software engineers hướng tới các chức danh như Architect, Team Lead, CTO ..
  • Gánh vác các các trọng trách lớn hơn, bạn có sức ảnh hưởng lớn hơn.

Làm thế nào

Ngành công nghệ phần mềm được cho là khó, luôn luôn thay đổi, và bạn luôn phải theo kịp với nó. Bạn cần nỗ lực liên tục, và cần rất nhiều thời gian. Luôn luôn có nhiều thứ để học hơn những thứ mà bạn có thể tiếp thu được. Nhiều kĩ sư mất vài tháng để băt đầu chương trình đào tạo nhưng không nhận ra cần phải học thêm bao nhiêu nữa để đạt đến đỉnh cao của nó. Nhưng đừng lo lắng, có một con đường được vạch ra giúp bạn có thể đạt đến level Senior trong hầu hết các lĩnh vực software.

Lựa chọn con đường của bạn và theo đuổi nó

do one thing and do it well - Doug McIlroy : Unix Philosophy

(Nếu đã có con đường riêng của mình, bạn nên bỏ qua bước này)

Tôi không nhấn mạnh chỉ cần thế là đủ. Nhưng điều đó là đầu tiên và quan trọng nhất. Bạn phải chọn một chuyên ngành và một ngăn xếp kĩ thuật mà bạn sẽ làm việc. Gắn bó với nó và không được mất tập trung sẽ giúp bạn mau chóng trở thành Senior.

Đây là một lựa chọn quan trọng để thực hiện. Và làm sao để thực hiện

  • Chọn một lĩnh vực cho riêng bạn, việc mà bạn muốn làm. Có thể là Web development, Mobile development ...
  • Chọn ngôn ngữ lập trình. Nếu là Web development thì ngôn ngữ có thể là Ruby on Rails, Python, PHP, JSF ... Nếu là Mobile development thì có thể là Android, iOS.
  • Xong bước chọn lựa rồi hẵng kiên nhẫn theo đuổi nó, rồi trở thành master trong lĩnh vực đó.

Tôi không nói rằng bạn không nên thử những thứ khác ngoài chuyên môn của bạn. Một kỹ sư phần mềm có thể biết về các khía cạnh khác chuyên môn của họ. Miễn là chuyên môn của họ tốt.

Sau khi đã lựa chọn được lĩnh vực mà mình quan tâm, bạn sẽ có rất nhiều thứ để học đấy. Nhưng khoan đã, từ từ hãy bắt tay vào việc nhé. Có thể mất đến vài năm, đọc rất nhiều những cuốn sách và luyện thêm các kỹ năng lập trình đấy. Điều đó có được khi bạn thử thách chính mình trong một khoảng thời gian.

Step 1: Tạo nền móng vững chắc

Hãy đọc sách gì đó như là The Pragmatic Programmer để bắt đầu cho sự nghiệp software engineering của bạn. Ngôn ngữ lập trình không quan trọng bằng nguyên tắc cơ bản của lập trình, điều đó ở các ngôn ngữ là giống nhau.

Step 2: Hãy là master ở ngôn ngữ của bạn

Bạn sẽ sử dụng rất nhiều ngôn ngữ lập trình hàng ngày, phụ thuộc vào technology stack mà bạn chọn. Mặc dù, phần lớn code của bạn sẽ được viết bằng một loại ngôn ngữ. Ví dụ: một developer Ruby on Rails sẽ sử dụng nhiều nhất là Ruby. Một developer Angular JS sẽ sử dụng JS là chủ yếu. Xác định ngôn ngữ lập trình rất quan trọng cho sự phát triển sự nghiệp của bạn. Hãy học, và trở thành master! (nguyên văn: Learn it, master it!). Xác định ngôn ngữ mình sẽ đầu tư, và không ngừng nâng cao khả năng của mình. Khi đã là master ở một lĩnh vực, thì bạn sẽ nắm được những nguyên tắc cơ bản nhất, việc trở thành một super man trong lĩnh vực khác cũng nhanh chóng thôi.

Step 3: Hãy chọn cho mình một Framework

Nếu ngôn ngữ lập trình là từ vựng, thì Framework chính là ngữ pháp. Giúp bạn kết hợp các từ vựng lại tạo thành câu có nghĩa. Tương tự như vậy, Framework giúp hệ thống lại, giúp bạn có thể xây dựng project của mình ổn định và hiệu quả hơn. Nếu bạn có thời gian ghé qua post Xin đừng đánh nhau với Framework thì sẽ cảm nhận rõ rệt hơn Framework hơn code chay những gì.

Step 4: Hãy là master với Text Editor/IDE của bạn

Chọn IDE cho mình, và hãy là master của IDE. Việc customize IDE sẽ đem lại cho bạn những tiện ích cũng như cảm nhận thú vị hơn khi lập trình. Khi từng ý tưởng của bạn đều được vẽ ra nhờ các dòng code trên IDE.

Step 5: Sử dụng trình quản lý code thành thạo.

Các trình quản lý code thông dụng là: Git, SVN. Bản thân tôi thường dùng Git, các bạn có thể tham khảo Tài liệu về Git Từ Git bạn có thể tham khảo được các mã nguồn mở, cũng như lưu trữ được code của mình, và đặc biệt là tăng khả năng Teamwork cuả mình.

Step 6: Code đi đôi với test

Về lý thuyết, viết test trước khi code giúp code rõ ràng, chạy đúng hướng hơn. Ngoài ra, nếu bạn thực hành viết test và chạy test cho các chức năng của code thì mới thấy rằng sẽ có cách viết code dễ hơn, đúng hơn, lúc đó bạn mới biết rằng code của mình đã xử lý thiếu trường hợp nào của vấn đề. Robert Glass nói rằng: 90% lỗi sinh ra có thể được loại bỏ từ sản phẩm phần mềm nếu bạn sử dụng first test. Con số đó hoàn toàn có cơ sở, bởi test trong khi code sẽ loại bỏ được rất nhiều các lỗi mà do dev chủ quan hoặc vô tình gõ nhầm tạo nên (yaoming)

Step 7: Refactor code như một thói quen.

Codebase ngày càng phức tạp hơn, và nhiều function hơn được viết ra, để giữ codebase bạn cần phải liên tục refactor để code được rõ ràng ngắn gọn hơn. Yêu cầu rõ ràng và dễ hiểu là một yêu cầu bắt buộc để người khác và cả chính mình có thể đọc hiểu code, và có thể thêm chức năng lại dễ dàng hơn, không bị lạc vào mê cung code. Việc thay đổi code sẽ là rất khó khăn cho bạn, cảm giác như đụng vào cái gì cũng có thể sập cả hệ thống xuống. Khi đó chẳng còn ai muốn bám theo codebase của bạn nữa, kể cả chính bạn. Đừng trì hoãn refactor code của bạn, vì lúc nào bạn cũng nghĩ sẽ có ngày mai để refactor code. Tuy nhiên, khi deadline cận kề, thì ngày mai ấy sẽ chẳng bao giờ xảy ra. Refactoring: Improving the Design of Existing Code bởi Martin Fowler

Step 8: Học kiến trúc phần mềm

Lập trình theo kiến trúc giống như bạn xây nhà theo bản vẽ vậy. Hãy tưởng tượng đến cảnh bạn xây tùy tiện không theo một sơ đồ, bản vẽ nào được phác thảo từ trước.

Step 9: Giải phóng sức mệnh của các dòng lệnh

Các dòng lệnh có thể thấy đáng sợ lúc đầu, bởi vì chúng ta còn chưa hiểu rõ tác dụng của nó, sợ sai lầm có thể sinh ra lỗi hoặc xóa sạch những đoạn mà ta đã code cả ngày trời. Tuy nhiên, ngay sau khi bạn học cách sử dụng nó, bạn sẽ cảm nhận rất nhiều hiệu quả trong thực hiện những công việc cơ bản, mà phải qua rất nhiều những cú click chuột bạn mới hoàn thành. Làm điều đó một mình giúp bạn đạt được nhiều thứ hơn trong một thời gian ít hơn.

Sau đó, bạn có thể áp dụng ở level cao hơn. Vận dụng các dòng lệnh cơ bản, xây dựng cho chaỵ tự động hóa các dòng lệnh đó trong dotfiles của bạn. Nếu bạn sử dụng Mac or Linux thì hãy học shell. Đây là cuốn sách khá hay của Mark Bates: Conquering the Command Line

Step 10: Code code code!

Hãy code hàng ngày, như là chơi thể thao vậy, bạn phải luyện tập, thực hành và không ngừng học hỏi, không ngừng làm những điều mới thì mới trở thành master được. Không ai có thể trở thành lập trình viên giỏi mà không code đâu.

Tóm lại

Để trở thành Senior Software Engineer không hề dễ dàng. Điều đó sẽ tốn rất nhiều thời gian và công sức của bạn. Với mỗi người sẽ đạt đến với thời gian khác nhau, nhưng trung bình phải mất 10 năm code ngày đêm đấy. Đó là một sự đầu tư lớn, và cũng trả lại lợi ích lớn. Tuy là thách thức lớn, là một quãng đường chông gai, nhưng trên con đường ấy, bạn sẽ cảm nhận được nhiều điều thú vị nếu bạn thật sự có sự yêu thích.

Trên đây chỉ là những bước cơ bản, tuy nhiên thực thế thì khó khăn đã nằm ngay ở bước đầu tiên khi bạn học cách in ra dòng lệnh "Hello word", và phải trải qua ngày đêm để tìm ra một lỗi nhỏ như là thiếu dấu ';' trong code của mình. Nhưng đừng bỏ cuộc nhé.

Have fun!