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.
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:
Để đạ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.
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.
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ó:
Đâ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.
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ì.
Đâ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.
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.
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.
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ì đó.
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.
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.
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.
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