Nấc thang lập trình viên: Để trở thành một Senior Developer

Đây là phần 2 trong series bài viết dành cho lập trình viên - những người đang tìm cách nâng cao kĩ năng của họ. Phần 1 đã dẫn dắt chúng ta qua các giai đoạn bắt đầu, các giai đoạn mà ta tìm kiếm những cách hiệu quả để từ con số 0 trở thành một lập trình viên. Bây giờ, hãy nâng các yêu cầu lên thêm 1 mức nữa.

Bài viết này dành cho tất cả lập trình viên, những người đang mong muốn bước lên 1 nấc thang mới trong sự nghiệp lập trình, sau vài năm làm việc (hoặc cũng có thể bạn là 1 tay mơ mới vào nghề và muốn thấy trọn vẹn con đường của 1 lập trình viên). Nó dành cho mọi lập trình viên, với 1 mong muốn đơn giản: được mọi người công nhận là 1 lập trình viên Senior, trở nên xuất sắc hơn trên con đường sự nghiệp của riêng họ. Sau khi đọc xong, bạn sẽ có được phương hướng, cùng với các tài nguyên tốt nhất để giúp bạn tăng tiến khả năng, trở thành 1 lập trình viên Senior.

Chú ý: Bạn hoàn toàn tự do với quyết định của riêng bạn. Phương hướng trong bài viết này đương nhiên không phải là duy nhất, nó là cái mà tôi đã khám phá ra trong sự nghiệp lập trình của tôi, qua rất nhiều cuộc thảo luận và phỏng vấn với các lập trình viên có tiếng và được kính trọng trong cộng đồng. Tôi đã tích lũy tất cả những điểm tương đồng vào trong bài viết này. Cuối cùng, đây không hẳn chỉ là 1 bài viết để giúp các bạn trở thành những lập trình viên tốt hơn. Đây còn là hướng dẫn giúp bạn tối ưu hóa thời gian với các công cụ hữu ích để giúp cho sự nghiệp của bạn trở nên dễ dàng hơn. Và bạn hoàn toàn có thể áp dụng những kiến thức này trong tương lai.

Điều chúng tôi muốn

Tất cả chúng ta đều mong muốn trở nên tốt hơn trong công việc của mình. Cụ thể hơn thì nó lại phụ thuộc vào từng cá nhân riêng biệt. Tuy nhiên tôi chắc rằng hầu hết các bạn sẽ đồng ý với những điểm chung sau:

  • Chúng ta đều không muốn bị xem là "đồ kém cỏi".
  • Chúng ta mong được đồng nghiệp xem trọng.
  • Chúng ta muốn trở nên thông minh và có tài.
  • Chúng ta mong được mọi người hiểu rõ giá trị bản thân.

Để đạt được những điều đó, ta không thể há miệng chờ sung. Đặc biệt là trong thế giới lập trình, nơi mà công nghệ luôn luôn thay đổi, lượng thông tin xung quanh chúng ta là khổng lồ. Với việc ngày càng nhiều các lập trình viên đến từ trường đại học hay các bootcamp, ta càng cần mài sắc kĩ năng của mình, và để làm mình nổi bật ta cần học tập 1 cách thông minh và hiệu quả. Có vẻ nói chuyện đã đủ, hãy cùng nhau đào sâu vấn đề nào. Sẽ vẫn như mọi khi, ta sẽ thử và tìm ra cách tốt nhất.

Lập trình viên Senior là ai?

Không như bạn nghĩ đâu. Trở thành 1 người đa-zi-năng, có thể lập trình với 10 ngôn ngữ khác nhau, tạo ra được 1 phiên bản Jarvis cho riêng mình không giúp cho người đó trở thành lập trình viên Senior (mặc dù vậy điều đó chứng tỏ bạn là 1 phiên bản đời thực của Tony Stark). Lập trình viên senior là người mang đến các lợi ích gia tăng theo thời gian. Đó là người giúp cho các lập trình viên xung quanh trở nên tốt hơn, là người có tầm nhìn xa và rộng, có định hướng lâu dài, luôn luôn tạo ra các giá trị kinh doanh cho tập thể. Bạn có thể biết rất nhiều các kĩ thuật lập trình hay ho, tuy nhiên bạn không có khả năng giao tiếp tốt với team, hay bạn không tập trung vào việc truyền tải các giá trị thực tế đến khách hàng, thì chắc chắn rằng bạn không phải là 1 lập trình viên Senior. Đây là điểm mấu chốt: Bạn mang đến giá trị gì cho công ty/tổ chức/start-up của bạn? Nếu có, và giá trị đó rất lớn thì ắt hẳn bạn là 1 lập trình viên senior. Lập trình viên senior, đó không phải là 1 chức danh, nó là khả năng sử dụng kinh nghiệm của mình để cung cấp lợi ích thực sự đến khách hàng cũng như doanh nghiệp.

Đã hiểu. Vậy làm thế nào để tôi có thể trở thành lập trình viên senior?

Đã đến phần các bạn đang mong chờ (đấy là trong tưởng tượng của tôi. Trong trường hợp chả ai đọc nữa thì tôi đành tự kỷ tiếp vậy). Đào sâu tìm hiểu các tài nguyên dưới đây và dành thời gian để học từng phần một. Nếu bạn có thể thuần thục các kĩ năng dưới, bạn sẽ vượt những người khác hàng dặm trên con đường sự nghiệp. Tôi gọi đó là nấc thang lập trình viên: sẽ luôn có người nhiều kinh nghiệm hơn bạn trong chính lĩnh vực của bạn, nhưng bạn có thể làm việc thông minh hơn, với thái độ tích cực hơn để tích lũy kiến thức, kĩ năng, giúp bạn nổi trội hơn. Điều này không chỉ giúp bạn trở thành lập trình viên giỏi hơn mà còn khiến bạn hạnh phúc hơn vì đã mang đến những giá trị thực cho mọi người.

Một khía cạnh thường bị bỏ sót của việc học đó là bạn cần chuyên sâu, tập trung vào 1 thứ. Tuy nhiên trong thực tế cuộc sống thì không hẳn như thế. Việc bạn chỉ cần 1 kĩ năng là việc bất khả thi. Đặc biệt là trong thế giới công nghệ liên tục chuyển động này, bạn lại càng cần có các kĩ năng khác nhau, liên quan đến nhau, giúp bạn có thể thích nghi trong mọi tình huống công việc.

Dưới đây là 6 kĩ năng chính mà bất cứ lập trình viên senior nào cũng cần có:

1. Kĩ năng chuyên môn

Đây ắt hẳn là kĩ năng xuất hiện đầu tiên trong suy nghĩ của mọi người. Đây là kĩ năng mà bạn không thể giả mạo. Tuy nhiên việc tập trung vào 1 thứ sẽ giúp bạn trở nên thành thạo hơn. Lập trình viên senior bỏ thời gian để tìm hiểu, đặt các câu hỏi TẠI SAO về công nghệ? Tạo sao lại tồn tại vấn đề này? Tại sao lại tồn tại framework này? Thư viện này giải quyết vấn đề gì? Với tư cách 1 lập trình viên, bạn cần có 1 trực giác tốt về tất cả các công cụ, ý tưởng có ảnh hưởng tốt đến chu trình sản phẩm, từ đó chọn lựa ra công nghệ phù hợp cho project. Thay vì chú tâm vào từng dòng tính năng mới của 1 framework testing mới ra mắt, các lập trình viên senior tập trung vào ưu và nhược của từng framework và cố gắng giải quyết các vấn đề thực tế cho công ty. Họ sẽ hỏi những câu hỏi kiểu: "Có thể cải tiến được điều gì trong quá trình Continuous Delivery để cung cấp được sản phẩm tốt hơn?".

Họ cũng là những người hiểu CÁCH mà mọi thứ kết nối với nhau. Để bắt đầu tập cách suy nghĩ như thế, mind mapping là 1 công cụ rất tuyệt. Nó là 1 công cụ thiết yếu để nâng cao năng lực nhằm hướng đến nấc thang kế (Đây là 1 ví dụ tuyệt vời của mind mapping cho lập trình viên Javascript). Bản mind map này sẽ giúp não bộ của bạn kết nối các ý tưởng và công nghệ khác nhau.

Một ví dụ: giả sử tôi là 1 lập trình viên Javascript (thực ra chính xác là thế), khóa học này của Cory House sẽ là thứ bạn cần để liên kết các kiến thức của bạn về Javascript. Một khi bạn đã nắm vững được những kiến thức về công cụ và công nghệ trong stack bạn học, bạn cần tạo 1 mind map về chúng, về những vấn đề bạn gặp phải khi sử dụng chúng. Bằng cách tạo mind map, bạn sẽ có được kết nối về các chi tiết, từ đó hiểu sâu hơn vấn đề, giúp bạn tập trung vào các tài nguyên ở những điểm quan trọng, giúp bạn có 1 cái nhìn tổng quát về vấn đề mà trước đó bạn chỉ có thể nhìn qua 1 cửa sổ hẹp.

Nếu bạn là lập trình viên xuất thân từ bootcamp, hay bạn chả có bằng Khoa học máy tính, bạn cần phải bắt đầu học từ cấu trúc dữ liệu, giải thuật và các topic về khoa học máy tính. Tại sao ư? Lý do là cho dù framework và công nghệ có thay đổi như vũ bão đi chăng nữa, các định luật chính của khoa học máy tính (hầu hết) chả thay đổi gì cả. Bằng cách học những topic đã nêu, bạn 1 lần nữa có khả năng thấy được, rằng phần lớn các vấn đề phần mềm hay các cách tiếp cận đúng, là bất biến cho dù bề ngoài sử dụng ngôn ngữ gì. Cuốn sách này (Rob Conery) và cuốn này (Gayle Laakmann McDowell) gần như là những cuốn sách tốt nhất mà tôi tìm được để nâng cao kiến thức về mặt này. Mặc dù chúng không đi quá sâu vào chi tiết, kiến thức chúng cung cấp sẽ giúp bạn có 1 nền tảng tốt cho tương lai.

Hãy bắt đầu với việc nghe các chương trình podcast như Software Engineering Daily (Jeff Meyerson), nhờ đó bạn sẽ luôn cập nhật với các vấn đề hiện tại trong cộng đồng, cũng như có được cái nhìn tương lai về ngành công nghiệp công nghệ mình đang theo đuổi.

Cuối cùng hãy đọc bài viết tuyệt vời này. Nó sẽ dẫn bạn qua tập các kĩ năng con chỉ thuần trên góc độ kĩ thuật.

Tham khảo các khóa học lập trình online, onlab, và thực tập lập trình tại TechMaster

2. Kĩ năng làm việc nhóm

Đây thường là kĩ năng hay bị xem nhẹ. Bạn làm việc với các thành viên trong nhóm như thế nào? Bạn có hay bức xúc với các Pull Request review của các thành viên trong nhóm không, có hay tạo nên bầu không khí không tốt trong nhóm không? Hay là bạn là người hợp tác, động viên các thành viên còn lại? Để tôi nói với bạn điều này: lập trình viên senior không giữ cái tôi lớn. Họ biết họ đủ tốt, và cũng biết rằng chả cần thiết phải chứng minh điều đó với bất cứ ai. Họ viết những dòng code sạch, giản dị, họ không cố tỏ ra mình giỏi giang hơn người bằng cách viết những dòng code thông minh nhưng lại chả ai đọc hiểu nổi. Họ sẵn sàng giúp đỡ, sẵn sàng hỏi bất cứ khi nào họ không hiểu.

Đó chính xác là nhờ EQ của họ. Tâm lý học xã hội là 1 công cụ quan trọng trong việc cải thiện kĩ năng này và cuốn sách How to win friends and influence people? sẽ giúp bạn. Hãy nhớ rằng: làm cách nào để có thể khiến những cá nhân quanh bạn trở nên tốt hơn? Nếu nhóm bạn có 5 thành viên, 1 + 1 + 1 + 1 + 1 nên lớn hơn hoặc bằng 5, bởi vì bạn đang cố giúp mọi người tiến bộ.

Nếu bạn thuộc tuýp người mà với mọi project, mọi nhóm bạn đã tham gia, bạn có khả năng thân thiết với mọi người cũng như kết nối mọi người, khiến mọi người thoải mái làm việc với nhau, thì đừng lo lắng. Bởi như thế chứng tỏ kĩ năng làm việc nhóm của bạn đã tốt hơn hầu hết mọi lập trình viên khác. Nhờ nó mà bạn sẽ giúp cho công việc của các nhà quản lý, giám đốc, Scrum master, CTO,... dễ dàng hơn.

3. Kĩ năng Client/User

Liệu bạn có tự tin rằng bạn có thể nói chuyện với người dùng và hoàn toàn hiểu được yêu cầu của họ? Khi họ nói vài thứ mang tính gợi ý, liệu bạn có hiểu họ đang gặp vấn đề gì? Lập trình viên senior là phải là 1 người biết cách lắng nghe, sau đó đưa ra những lời khuyên phù hợp nhất với vấn đề mà khách hàng của họ gặp phải. Họ rất giỏi trong việc tạo dựng các mối quan hệ. Họ không áp đặt ý kiến cá nhân lên người dùng. Họ hoàn toàn hiểu rằng mục đích không phải là anh sai tôi đúng, mà là sự hoàn thiện của sản phẩm. Đây là cuốn sách sẽ giúp bạn nâng cao kĩ năng này.

Sau cùng, lập trình viên senior là người có khả năng giải thích khái niệm chung của 1 chương trình phức tạp cho 1 người ngoại đạo. Hãy bắt đầu phát triển kĩ năng này bằng cách học hỏi từ những người nổi tiếng, xem cách chia nhỏ chủ đề như thế nào. Đây là chương trình ưa thích của tôi, và đây nữa. Mặc dù các chủ đề họ nói khá khó, bạn có thể nhận thấy sự tương đồng giữa họ.

4. Kĩ năng phát triển

Lập trình viên senior luôn luôn học hỏi mỗi ngày. Điều đó không có nghĩa là họ bỏ ra 14 giờ/ngày để dán mắt vào các bài viết trên màn hình máy tính. Họ học tập hiệu quả hơn thế. Họ luôn tìm cách để nói chuyện với các lập trình viên khác, hỏi các câu hỏi, thảo luận các chủ đề mới. Họ không tự giới hạn mình trong 1 stack nào. Bạn có thể trở thành số 1 thế giới ở 1 khía cạnh nào đó, tuy nhiên nếu bạn không có cái nhìn tổng thể hay có sự hiểu biết tổng quát về vấn đề cần giải quyết, thì đừng tự tin rằng mình là số 1.

Các lập trình viên senior có 1 lộ trình phát triển và họ tin vào việc luyện tập có chủ đích. Họ hiểu rằng việc học mọi thứ là bất khả thi, do đó họ dành thời gian vào những thứ họ hứng thú, đáng học.

Họ sẽ không thốt ra những câu cảm thán kiểu "Tôi ghét cái thư viện này". Hầu hết những người hay kêu ca ghét bỏ cái này cái kia là những người không hiểu chúng. Đại loại kiểu "Tôi ghét jQuery. Chỉ có những đứa gà mới dùng jQuery". Lập trình viên senior sẽ chỉ ôn tồn trả lời: "jQuery đã góp phần vào sự phát triển Web và cộng đồng JavaScript". Tư tưởng của các lập trình viên senior không cố định mà nó sẽ thay đổi vì họ tận hưởng việc học những điều mới mẻ. Họ sẽ thử khám phá theo nhiều cách trước khi quyết định "ghét" cái gì đó.

5. Kĩ năng sale/ phỏng vấn

Các lập trình viên senior có thể đạt được những vai trò cộp cán bởi vì họ có khả năng truyền đạt tốt. Họ có khả năng nhận biết được nhu cầu của ông chủ hoặc doanh nghiệp. Họ có thể tạo sự tin tưởng nơi ban lãnh đạo, rằng họ là người có khả năng giải quyết các vấn đề. Họ tự tin nhưng khiêm nhường. Họ đủ tự tin để đảm nhận các vai trò cao cấp, cũng như có thể làm việc dưới áp lực lớn. Lập trình viên senior biết rằng, nếu không hỏi thì câu trả lời sẽ luôn là không. Do đó họ tự đề bạt mình vào các vị trí tạo thách thức cho họ vì họ tin tưởng ở bản thân mình. Kĩ năng bán hàng và đàm phán là những kĩ năng giá trị mà bạn cần có để trở nên senior hơn. Ramit Sethi có 1 bài viết rất tuyệt dành cho bạn. Mặc dù nó chỉ nói về đàm phán lương nhưng 1 số định lý hoàn toàn có thể được áp dụng theo các cách khác.

6. Kĩ năng cộng đồng

Lập trình viên senior luôn đóng góp cho cộng đồng. Cho dù là các cuộc nói chuyện, các buổi meetup, đóng góp vào các dự án mã nguồn mở, hay thậm chí là viết bài. Họ là những con người chia sẻ. Thay vì giữ khư khư cho mình các mánh và mẹo, họ tương tác với các lập trình viên khác trong cộng đồng, mở rộng các mối quan hệ. Nó cũng giống như 1 cuộc du lịch: bạn càng đi và gặp nhiều nền văn hóa, con người, bạn càng hiểu thêm sự giống và khác nhau giữa mọi người với nhau, cũng như bạn càng biết ơn mọi người hơn.

Một điều cuối

Nếu bạn có thể chủ động thực hiện và trau dồi các kĩ năng trên, bạn sẽ tự làm nổi bật mình ngay lập tức. Tuy nhiên tôi đã bỏ qua điều quan trọng nhất: Bạn phải thích thú với những gì bạn làm. Nếu bạn không thấy thoải mái, vui vẻ khi dành cả ngày để học về khoa học máy tính và phát triển phần mềm, bạn sẽ không bao giờ trở thành 1 lập trình viên senior. Niềm đam mê thực sự chỉ đến khi bạn đã thành thục 1 kĩ năng. Bạn cần làm việc chăm chỉ để có thể thành thạo các kĩ năng. Bạn cần phát triển kĩ năng, sau đó những lợi ích mà bạn đem đến cho mọi người sẽ tạo động lực thúc đẩy bạn tốt hơn. Đó chính là cách mà bạn vun đắp cho đam mê của mình.

Kết luận

Nếu bạn đã học code và đang tìm kiếm nấc thang kế trong sự nghiệp, bạn cần nghĩ khác đi. Làm cách nào để trở nên nổi bật? Làm cách nào để phát triển bản thân? Làm cách nào để giúp mọi người giải quyết vấn đề, tạo ra các giá trị? Để trở thành lập trình viên senior không đơn giản. Bạn cần những thứ có thể thách thức bạn, đẩy bạn ra khỏi vùng thoải mái của mình. Bạn học tập và thích ứng dần dần, hệt như buổi đầu bạn tập tễnh viết những dòng code "Hello Wolrd" vậy. Mỗi bước đi nhỏ sẽ dần gộp thành 1 con đường lớn. Đừng bao giờ ngừng đọc và ngừng học, nhưng cũng nên biết cái gì đáng giá với thời gian bạn bỏ ra.

Bài viết được dịch từ: https://hackernoon.com/developers-edge-how-to-become-a-senior-developer-f1ec1738cf45#.hdco1bpbo

DevOps DevOps Techmaster team Blog Home Một lập trình viên nên biết 6 công nghệ cần học trong 2013 Một lập trình viên nên biết 6 công nghệ cần học trong 2013 Techmaster team
Đinh Thiên Phúc

We can never learn to fly without crashing a few times