Categories
Dev's Corner

Đừng chỉ viết code, hãy tập giải quyết vấn đề

Những lần gặp khó khăn khi code là những lần ta tích lũy kinh nghiệm, nhận ra được các mẫu có tính lặp lại và khám phá những chiến lược nhất định. Nếu phân loại được đoạn code và những vấn đề tương tự sẽ giúp ích rất nhiều cho lập trình viên.

Tập trung giải quyết vấn đề
Tập trung giải quyết vấn đề để cải thiện kỹ năng lập trình. Ảnh: lloorraa – Pixabay

Việc học giải quyết vấn đề theo hệ thống như vậy đã được thảo luận từ rất lâu.

Gambaru xin giới thiệu với các bạn một trong những nhà toán học tuyệt vời đã chia sẻ về vấn đề này, George Polya, qua cuốn sách nổi tiếng How to solve it, a new aspect of mathematical method xuất bản lần đầu năm 1945.

Không rõ George Polya có mong đợi lập trình viên thế kỷ 21 đọc được tác phẩm toán của mình hay không, nhưng tôi mong các bạn nhận ra được những góc nhìn của ông có giá trị đến thế nào.

George Polya
Nhà toán học George Polya. Ảnh: Alchetron
How to Solve it
Sách How to Solve it – A new aspect of mathematical method viết bởi George Polya. Ảnh: Amazon

Giải quyết vấn đề không phải là một năng khiếu

“Giải toán là một kỹ năng thực tế như bơi lội. Chúng ta thành thục được bất kỳ kỹ năng nào bằng cách bắt chước và thực hành. Khi tập bơi, bạn bắt chước theo cách mọi người dùng tay và chân để giữ cho đầu ở trên mặt nước và cuối cùng, bạn biết bơi nhờ tập luyện. Khi tập giải toán, bạn quan sát và bắt chước những gì người khác làm khi giải toán và cuối cùng, bạn biết giải toán nhờ thực hành.”

George Polya, How to solve it

Giải quyết vấn đề không chỉ là về “trí óc”

“Dạy giải toán chính là sự rèn luyện ý chí. Để giải quyết những bài khó, người học sẽ học cách kiên trì vượt qua thất bại, trân trọng những tiến bộ nhỏ, chờ đợi ý tưởng cần thiết và tập trung hết sức khi ý tưởng xuất hiện.”

George Polya, How to solve it

Quyết tâm và cảm xúc đóng một vai trò quan trọng khi giải quyết các vấn đề khó.

Quy trình giải quyết vấn đề

Bất cứ khi nào thực hiện quá trình giải quyết vấn đề, hãy ghi nhớ bốn bước sau:

  • Hiểu vấn đề
  • Lập kế hoạch
  • Thực hiện kế hoạch
  • Nhìn lại và đánh giá

1. Hiểu vấn đề

Hiểu vấn đề
“Thật ngớ ngẩn khi trả lời một câu hỏi bạn không hiểu. Thật đáng buồn khi làm việc để ra một kết quả bạn không mong muốn.” – George Polya, How to solve it. Nguồn ảnh: Rawpixel

Trước khi đi tìm giải pháp, cần phải trình bày được tất cả các yếu tố của vấn đề để hiểu nó rõ hơn.

Bạn có thể nêu vấn đề trong một câu không?

Bài tập nhỏ này rất hữu ích: thuyết phục bản thân rằng bạn đã hiểu mục tiêu và không tốn quá nhiều năng lượng để hiểu nó nữa khi đang tập trung giải quyết vấn đề.

Như được đề cập trong sách The Pragmatic Programmer, khi lập trình viên debug với “vịt cao su” chính là buộc bản thân phải hiểu rõ vấn đề để có thể dạy nó cho người khác.

Debug bằng vịt cao su
Kỹ thuật debug đỉnh cao với vịt cao su: Bạn có giải thích được vấn đề cho người khác

Có những ràng buộc nào cần phải đáp ứng không?

Những ràng buộc cần đáp ứng
“Trước hết, hãy hiểu vấn đề một cách tổng thể. Từ đó, ta mới có thể đánh giá những điểm cụ thể nào là quan trọng nhất. Sau khi xem xét một hoặc hai điểm trọng yếu, ta mới có thể đánh giá xem chi tiết nào đáng để điều tra kỹ hơn. Hãy đi vào sâu chi tiết và phân tích vấn đề dần dần, nhưng không đi xa hơn mức mình cần.” – George Polya, How to solve it. Ảnh: Freepik

Những hạn chế trong vấn đề bạn đang giải quyết là gì?

Hãy viết chúng ra. Nó có thể là một comment phía trên dòng đầu tiên của một hàm bạn viết, một danh sách các gạch đầu dòng trên đầu tài liệu thiết kế.

Điều quan trọng là phải tập trung vào chúng khi cố gắng tìm giải pháp.

Gỡ bỏ nhiều ràng buộc khỏi bộ não cũng là một cách loại bỏ một số quả bóng khi tâm trí ta chơi trò “tung hứng” trong khi cố gắng đưa ra một ý tưởng hay.

Ngoài ra, hãy cẩn thận nếu có quá nhiều ràng buộc.

Theo Polya, nếu xem xét quá nhiều chi tiết cùng một lúc, bạn có thể lạc lối. Chúng có thể khiến bạn mất tập trung vào điểm chính yếu hoặc thậm chí không nhìn thấy điểm chính yếu đó.

Bạn có thể vẽ hình minh họa hay một hệ thống ký hiệu phù hợp?

Vẽ minh họa hay hệ thống ký hiệu
Vẽ minh họa hay hệ thống ký hiệu “Một bước quan trọng khi giải toán là chọn hệ thống ký hiệu. Điều này cần được thực hiện một cách cẩn thận. Làm được ta sẽ tiết kiệm thời gian cho sau này do tránh được những do dự và nhầm lẫn không đáng.” – George Polya, How to solve it. Nguồn ảnh: Sarah Pflug – Burst

Các bản vẽ hay phác thảo sẽ giúp bỏ bớt một số suy nghĩ ra giấy và tạo nhiều khoảng trống hơn cho bộ não tập trung vào những phần khó.

Hãy chọn hệ thống ký hiệu giúp bạn hiểu rõ mọi thứ hơn: diagram, flowchart….

2. Lập kế hoạch

Lập kế hoạch
“Ta có kế hoạch khi biết, hoặc ít nhất là biết sơ bộ, mình phải thực hiện những phép tính, thuật toán hoặc cấu trúc nào để tìm ra lời giải. Con đường từ hiểu vấn đề đến hình thành một kế hoạch có thể dài và quanh co. Thành tựu chính khi tìm ra giải pháp là hình thành ý tưởng về một kế hoạch.” – George Polya, How to solve it. Nguồn ảnh: ThisIsEngineering – Pexels

Giải quyết vấn đề trên giấy trước. Việc viết code luôn có vẻ dễ dàng hơn trong đầu và trở nên phức tạp hơn nhiều khi làm nó chạy được.

Đừng làm cả hai việc cùng một lúc. Đầu tiên, hãy giải quyết vấn đề. “Chạy thử” một ví dụ trên sổ hoặc trên pseudocode. Sau đó, chạy trên máy.

Bạn có biết một vấn đề liên quan?

Bạn cần biết ít nhất loại vấn đề hoặc nhóm vấn đề bạn đang giải quyết. Đối với dân phần mềm, hãy thử trả lời những câu hỏi sau:

  • Đây có phải là vấn đề kiến ​​trúc không?
  • Có những mẫu kiến ​​trúc nào thường được sử dụng trong kịch bản này không?
  • Vấn đề này có nhiều hơn ở cấp độ của một giải thuật không?
  • Có giải thuật đã được chứng minh có thể giải quyết loại vấn đề này không?

Khi có thể tìm thấy một vấn đề liên quan đến vấn đề của mình và đã được giải quyết trước đó, bạn nên ăn mừng.

Đặt tiếp câu hỏi: “Mình có thể sử dụng nó không?”

Nhiều vấn đề có thể có một số điểm chung, nhưng những vấn đề có chung các yêu cầu hoặc nền tảng cốt lõi nhất có lẽ sẽ hữu ích nhất.

Bạn có thể trình bày lại vấn đề được không?

Bạn có thể nhìn nhận vấn đề ở một góc độ khác? Có thể bỏ một phần điều kiện hoặc một số yêu cầu không? Có thể nêu vấn đề này theo một kịch bản cụ thể hơn không?

Nếu đang viết các bài test, hãy thử nghĩ đến các ví dụ đơn giản được tạo ra chỉ bởi các điều kiện cụ thể của vấn đề để tìm ra giải pháp cuối cùng, tổng quát hơn.

Điều này dẫn chúng ta đến…

Nếu không thể giải quyết vấn đề được đề xuất, hãy cố giải quyết một số vấn đề liên quan trước tiên

Hoặc một vấn đề liên quan và đơn giản hơn.

Giống như viết phần mềm hiệu quả, việc thực hiện giải quyết vấn đề hiệu quả có thể được coi là một quá trình mang tính tịnh tiến.

Đừng cố làm mọi thứ cùng một lúc.

Xây dựng code cuối cùng hoặc thậm chí là các sơ đồ và ý tưởng thiết kế hệ thống là một quá trình sẽ mang lại lợi ích rất nhiều từ việc thực hiện điều tương tự cho các vấn đề quy mô nhỏ hơn.

3. Thực hiện kế hoạch

Thực hiện kế hoạch
“Đề ra phương án, hình thành ý tưởng giải pháp không hề đơn giản. Ta cần rất nhiều yếu tố để thành công: kiến ​​thức tích lũy, thói quen tư duy, sự tập trung và may mắn. Thực hiện kế hoạch lại dễ hơn nhiều; yếu tố chủ chốt là kiên nhẫn.” – George Polya, How to solve it. Nguồn ảnh: Pixabay

Phiên bản dành cho lập trình viên của câu trên là “Nghĩ trước, code sau”. Khi đã hiểu các bước của giải thuật hoặc thiết kế hệ thống, việc triển khai sẽ dễ dàng hơn rất nhiều.

Polya cho rằng những người giải toán giỏi có khả năng kiểm tra từng bước trong giải pháp sau khi hoàn thành và chất vấn từ đầu đến cuối.

Chỉ một dòng suy nghĩ về phân tích, phép toán sai sẽ làm hỏng mọi thứ.

Điều này có vẻ không mang đến nguy hiểm tức thì trong lập trình phần mềm, nhưng nó có thể là nguy hiểm chí mạng, vì bug nghiêm trọng sẽ xuất hiện trong thời điểm tồi tệ nhất – và có thể trong trường hợp rất cụ thể.

Điều này có nghĩa là cần có phạm vi kiểm thử tốt.

Nếu không kiểm thử, bạn sẽ không chất vấn, cứ tự tin coi giải pháp của mình là hoàn hảo.

Rất hữu ích khi có tư duy “Nó sẽ có lỗi chứ?” và liên tục đưa ra tất cả các kịch bản thất bại khác nhau trong giải pháp của mình và tư duy này sẽ được thể hiện rõ trong các bài test phần mềm.

4. Nhìn lại

Nhìn lại
“Ngay cả học sinh khá giỏi, khi đã có được lời giải bài toán và viết xong các lập luận, các bạn liền đóng tập lại. Các bạn đã bỏ lỡ một giai đoạn quan trọng. Khi nhìn lại bài giải, xem xét và nhìn nhận lại kết quả và con đường dẫn đến nó, các bạn có thể củng cố kiến ​​thức và phát triển khả năng giải quyết vấn đề của mình.” – George Polya, How to solve it. Nguồn ảnh: Reshot

Không nhìn lại và đánh giá sự đánh đổi của giải pháp thường xảy ra khi mọi thứ được thực hiện trong vội vàng.

Nếu đó là một giải thuật, bạn có thể nói rõ độ phức tạp về thời gian và không gian không? Code có đọc tốt không?

Nếu đang đưa ra quyết định sẽ có tác động đến toàn hệ thống, hãy ghi ra những đánh đổi.

Dành một giờ để xem xét lại kết quả công việc sẽ giúp bạn tiết kiệm hơn rất nhiều sau này.

Bạn có thể nghỉ ngơi rồi quay lại với nó sau. Việc đắm chìm sâu vào vấn đề đang giải quyết có thể sẽ khiến bạn quên mất những chi tiết liên quan.

Ngoài ra, giải pháp cho vấn đề cụ thể đó có thể được tổng quát hóa để được sử dụng trong nhiều tình huống.

Dùng sự nhạy bén và tư duy cẩn thận để tạo ra những abstraction mới là một cách giải quyết vấn đề đó cho những người khác đối mặt với nó sau này.

Kết

Dù là một cuốn sách dạy giải toán, nhưng How to solve it của George Polya với những lời khuyên vượt thời gian của ông lại hữu ích với dân lập trình như tôi khi tập giải quyết vấn đề bởi lập trình thực sự là một quá trình sử dụng nhiều tư duy và kỹ năng giải quyết vấn đề hiệu quả.

Theo Douglas Navarro

Categories
Dev's Corner

5 Giá trị của Scrum và cách Scrum Master làm việc

5 Giá trị của Scrum

Scrum là công cụ tạo nên thành công của rất nhiều team trong suốt nhiều năm nay và có thể nói, yếu tố thành công chủ yếu xoay quanh 5 giá trị của Scrum.

Tôi sẽ kể cho các bạn về khoảng thời gian tôi tham gia nhóm nhảy trường trung học nhé.

Trải nghiệm này liên quan ra sao đến Scrum nhỉ? Gambaru sẽ cùng bạn kết nối dữ kiện và hướng đến 5 giá trị cốt lõi và cực kỳ thực tế của Scrum.

5 Giá trị của Scrum và cách Scrum master làm việc
5 Giá trị của Scrum và cách Scrum master làm việc

1. Can đảm

Trong nhóm nhảy, chúng tôi là một nhóm theo đuổi nhiều phong cách khác nhau.

Tôi nhớ có lần một số chị lớp trên đã lên tiếng và đề xuất một số thay đổi cho bài nhảy giáo viên đã chuẩn bị trước đó, sao cho phù hợp hơn với phong cách khiêu vũ cổ điển.

Các thành viên của một Scrum Team có lòng can đảm để làm những gì phải làm và giải quyết những thách thức khó khăn - The Scrum Guide.
Các thành viên của một Scrum Team có lòng can đảm để làm những gì phải làm và giải quyết những thách thức khó khăn – The Scrum Guide. Ảnh: Pexels

Điều gì xảy ra tiếp theo?

Một số bước nhảy đã được điều chỉnh. Hậu bối chúng tôi lúc đó mới nhận ra rằng bạn có thể nói ra suy nghĩ của mình và điều đó thực sự đã giúp cả nhóm gắn kết tốt hơn.

Tương tự, Scrum Team cần sẵn sàng dũng cảm áp dụng văn hóa phê bình mang tính xây dựng và giao tiếp cởi mở.

Bạn có thể làm gì với tư cách là một Scrum Master?

  • Giúp đỡ team – Nếu thành viên trong team chuẩn bị thực hiện một task mới, hãy hướng dẫn họ nếu họ cần giúp đỡ. Khuyến khích, động viên team trở thành một không gian an toàn để mọi người không cảm thấy có trở ngại trong việc yêu cầu hỗ trợ.
  • Hãy tự xây dựng lòng can đảm – Hãy làm gương. Hãy đứng lên bảo vệ lẫn nhau nếu cảm thấy team mình đang gặp áp lực hoặc tinh thần đội nhóm đang đi xuống.

2. Tập trung

Vì các cuộc thi thay đổi chủ đề và phong cách liên tục, chúng tôi phải chuẩn bị các điệu nhảy trong thời gian ngắn và chuẩn bị/biểu diễn chúng với khả năng tốt nhất của mình.

“Hãy luôn nhớ rằng, sự tập trung sẽ quyết định thực tại của bạn.” - George Lucas.
“Hãy luôn nhớ rằng, sự tập trung sẽ quyết định thực tại của bạn.” – George Lucas. Ảnh: Paul Skorupskas – Unsplash

Trong Sprint theo khung thời gian cố định (time-boxed Sprint), team cần phải tập trung vào các mục tiêu đã đặt ra ban đầu.

Bạn có thể làm gì với tư cách là một Scrum Master?

  • Điều phối – Hướng dẫn team bạn giới hạn lại số lượng task và mức độ ưu tiên cho mỗi người trong một Sprint để đảm bảo mọi thành viên đều tập trung.
  • Nhắc lại trọng tâm trong Daily Scrum – Thảo luận với team làm thế nào để cả nhóm đạt được mục tiêu.

3. Cam kết

Cam kết là điều đã thúc đẩy nhóm nhảy của chúng tôi.

Chúng tôi đều có chung mong muốn giành được danh hiệu cấp khu vực và tất cả mọi người đều cam kết thực hiện mục tiêu trên.

“Các cá nhân cần cam kết đạt được các mục tiêu của Scrum Team.” - The Scrum Guide.
“Các cá nhân cần cam kết đạt được các mục tiêu của Scrum Team.” – The Scrum Guide. Ảnh: freepik

Ở mỗi buổi biểu diễn, chúng tôi phải cố gắng hết sức và làm việc cùng nhau.

Chúng tôi phải nghĩ làm thế nào để mang đến màn trình diễn tốt nhất với tư cách là một nhóm nhảy và đồng thời cũng phải trình diễn đạt nhất có thể với tư cách vũ công cá nhân.

Các thành viên một Scrum Team nên cam kết hướng đến tầm nhìn của team và cùng nhau tạo ra các mục tiêu thực tế.

Các team nhỏ trong Scrum Team cần duy trì cam kết với Mục tiêu Sprint và tự tổ chức để đạt được các mục tiêu này trong thời gian Sprint đề ra.

Bạn có thể làm gì với tư cách là một Scrum Master?

  • Điều phối Sprint Planning – Đảm bảo rằng team mình cảm thấy thoải mái với việc lập kế hoạch và có phạm vi để giải quyết các lỗi hay vấn đề trong quá trình thực hiện.
  • Bảo vệ nhóm trước việc phạm vi dự án bị thay đổi, vượt phạm vi (scope creeps/changes) – Là Scrum Master, hãy bảo vệ team khỏi những thay đổi không mong muốn trong Sprint, những thay đổi về Mục tiêu Sprint và cả áp lực không đáng có từ Product Owner.

4. Tôn trọng

Là một team, để thực hiện hết khả năng của mình, chúng ta cần làm việc như một nhóm duy nhất và điều đó chỉ có thể xảy ra nếu có sự tôn trọng lẫn nhau.

"Không ai trong chúng ta thông minh bằng tất cả chúng ta." - Ken Blanchard, Tác giả sách Vị giám đốc một phút.
“Không ai trong chúng ta thông minh bằng tất cả chúng ta.” – Ken Blanchard, Tác giả sách Vị giám đốc một phút. Ảnh: Matthew Henry – Burst

Trong Scrum Team, tôn trọng có nghĩa là tin tưởng các thành viên hoàn thành nhiệm vụ của họ, lắng nghe và xem xét ý tưởng của mọi người cũng như công nhận thành tích của nhau.

Bạn có thể làm gì với tư cách là một Scrum Master?

  • Ăn mừng các thành tựu – Là một team, hãy cùng ăn mừng thành tích lớn nhỏ của nhau.
  • Tôn trọng các cá nhân – Cho các thành viên không gian riêng của mình và tôn trọng những đóng góp của họ cho cả team.

5. Cởi mở

Khi học một bài nhảy mới, nếu ai trong nhóm gặp khó khăn, chúng tôi thường trao đổi, nói chuyện sớm nhất để có thể học và giải quyết mọi vấn đề sớm nhất.

“Scrum Team và các bên liên quan đồng ý cởi mở về tất cả công việc và những thách thức khi thực hiện công việc.” - The Scrum Guide
“Scrum Team và các bên liên quan đồng ý cởi mở về tất cả công việc và những thách thức khi thực hiện công việc.” – The Scrum Guide. Ảnh: Reshot

Khi các thành viên của một Scrum Team sớm nói về những trở ngại họ đang gặp phải, họ có xác suất quyết tâm và tiến bộ cao hơn.

Bạn có thể làm gì với tư cách là một Scrum Master?

  • Hãy trung thực – Điều này phải bắt đầu từ bạn, hãy có những buổi trò chuyện trung thực với cả nhóm.
  • Hãy là tấm lưới an toàn – Là một Scrum Master, hãy tập quan sát những điểm đang gặp vấn đề. Nếu thấy các vấn đề không được đề cập trong các buổi stand-up chẳng hạn, hãy hỏi các thành viên trong team xem họ có đang đi đúng hướng không.

Bạn nghĩ gì về 5 giá trị Scrum này? Mời các Scrum Master tài năng chia sẻ thêm những kinh nghiệm của riêng các bạn ở phần comment phía dưới cho cả cộng đồng Gambaru học hỏi thêm nhé!

Theo Rishika Mittal

Categories
Dev's Corner

Senior Software Engineer cần đáp ứng những tiêu chí nào?

Tylor Borgeson, một full-stack software developer chia sẻ quan điểm của mình về những kỳ vọng dành cho vị trí Senior Software Engineer. Gambaru mời các bạn đón đọc và cùng chia sẻ.

Tiêu chí của một Senior Software Engineer.
Tiêu chí của một Senior Software Engineer. Ảnh: Christina Morillo – Pexels

Những năm gần đây trong ngành công nghệ phần mềm, các công ty không còn đòi hỏi kỹ sư phải có một bằng cấp cụ thể nữa.

Cá nhân tôi thích điều này bởi vì để làm ngành này, điều thực sự quan trọng là năng lực.

Ứng viên dù có bằng Cử nhân hoặc Thạc sĩ mà không thể giải các bài toán lập trình, hoặc có thể giải thích về Big-O notation (độ phức tạp của thuật toán) nhưng lại không hiểu rõ cách thức hoạt động của MVC (Model-View-Controller) thì chẳng được đánh giá cao.

Tôi cũng cho rằng trở thành một Senior Sofware Engineer làm việc cùng một team đòi hỏi nhiều hơn là số năm kinh nghiệm.

Những tiêu chí để nhận ra một Senior Software Engineer

Code tốt

Đây hẳn là điều hiển nhiên nhất, song những điều cơ bản như vậy giúp phân biệt một dev giỏi và một dev xuất sắc
Đây hẳn là điều hiển nhiên nhất, song những điều cơ bản như vậy giúp phân biệt một dev giỏi và một dev xuất sắc. Ảnh: Chris Ried – Unsplash

Senior Software Dev làm được những việc đơn giản như đặt tên biến và phương thức một cách hiệu quả vì điều này sẽ tạo được tác động lớn.

Họ bắt buộc phải luôn chú tâm đến nguyên lý SOLID, liên tục tìm xem code nào cần tái cấu trúc, tìm dead code, đảm bảo việc test cũng quan trọng như việc code.

Senior Software Dev là người trong team có thể tìm thấy sự cân bằng để code vừa tối ưu vừa dễ hiểu và đảm bảo duy trì được sự cân bằng đó trong team của mình.

Chia sẻ kiến thức

Tôi tin rằng một trong những trách nhiệm quan trọng nhất đối với một Senior Engineer là giúp team member phát triển nhanh nhất có thể.

Điều này có thể được thực hiện theo nhiều cách, chẳng hạn:

  • Lập trình cặp (pair programming) với các dev khác trong team và không cô lập mình.
  • Khi thực hiện một dự án phức tạp, họ chia sẻ giải pháp với các thành viên, có thể trong một cuộc họp riêng. (Nhiều team thường thực hiện buổi chia sẻ kiến thức vào cuối một Sprint để trao đổi với nhau những điều quan trọng mình đã học).
  • Họ biết sự khác biệt giữa việc để team member học hỏi thông qua thử thách và việc hỗ trợ họ, đồng thời tạo được sự cân bằng sao cho member của mình cảm thấy tự tin thay vì thấy kém cỏi.
Giúp team member nâng cao năng lực nhanh nhất có thể
Giúp team member nâng cao năng lực nhanh nhất có thể. Ảnh: Freepik

Kiên trì

Kiên trì là một trong những yếu tố quan trọng nhất để trở thành kỹ sư phần mềm
Kiên trì là một trong những yếu tố quan trọng nhất để trở thành kỹ sư phần mềm. Ảnh: Gelgas – Pexels

Bạn tìm thấy bug. Bạn bắt tay fix lần đầu, lần hai và thậm chí là lần thứ 50 đều chẳng thành. Bạn bắt đầu bực bội, và sau một lúc, tự hỏi mình muốn làm nghề này bao lâu nữa.

Tuy nhiên, khi một cá nhân lùi lại một bước sau khi thử và thất bại 50 lần, hít một hơi thật sâu, ăn một ít sô cô la, và sau đó thành công trong lần thử thứ 51, đó chính là điều bắt buộc để cá nhân đó trở thành một Senior Engineer – một người chịu khó, bản lĩnh để nâng đỡ team vượt qua mọi thử thách.

Cởi mở, ham học những điều mới

Ngành công nghệ là một trong những ngành phát triển nhanh, nếu không muốn nói là nhanh nhất trên thế giới.

Cứ mỗi một hoặc hai năm, một số công nghệ, công cụ hoặc ngôn ngữ mới ra đời để giải quyết vấn đề hoặc mở rộng một cái gì đó đang có sẵn.

Để theo kịp, Developer phải luôn học hỏi những điều mới
Để theo kịp, Developer phải luôn học hỏi những điều mới. Ảnh: Blake Meyer – Unsplash

Một trong những điều đáng buồn nhất là khi một người lập trình theo cùng một cách, hoặc với cùng một công nghệ trong nhiều năm và do đó cảm thấy không cần phải học một cái gì đó mới, hoặc thử mày mò một cái gì đó nữa.

Tôi thường nghe câu đại loại như “Tôi muốn sử dụng ngôn ngữ A vì tôi không phải là chuyên gia về ngôn ngữ B” và tôi có thể hiểu điều này, nhưng có lẽ ngôn ngữ B phù hợp với vấn đề bạn đang phải giải quyết hơn thì sao?

Và nếu như tất cả các member khác đều giỏi ngôn ngữ B hơn thì sao?

Việc biết cú pháp và thủ thuật một ngôn ngữ lập trình không quan trọng bằng quá trình tư duy và hiểu biết về hệ thống và cách các thành phần tương tác với nhau.

Ta luôn có thể tìm hiểu về cú pháp hoặc thủ thuật trên Stack Overflow.

Ngoài ra, học một cái gì đó mới cũng có nghĩa là có được trải nghiệm mới và những cách tư duy vấn đề mới mẻ hơn.

Khả năng nhìn nhận tổng quan

Khả năng nhìn nhận được tổng quan về toàn bộ hệ thống
Khả năng nhìn nhận được tổng quan về toàn bộ hệ thống. Ảnh: Alex Powell – Pexels

Điều này đôi khi liên quan trực tiếp đến việc một người đã làm ở công ty bao lâu, nhưng tất cả Senior Engineer giỏi nhất mà tôi đã làm việc cùng đều có khả năng tuyệt vời nhìn nhận được tổng quan về toàn bộ hệ thống và do đó nhanh chóng hiểu được chức năng có thể hoặc nên được thực hiện như thế nào, và, thậm chí, có thể nhanh chóng xác định điều gì gây ra bug.

Khi đang cùng xử lý bug, một teammate của tôi đã không cần nhìn vào code mà nói với tôi rằng khả năng là do File A trên Dòng 25 hoặc File B trên Dòng 47.

Điều đó thật sự rất ngầu.

Đồng cảm

Cuối cùng, theo tôi, điều quan trọng nhất mà một Senior Engineer cần có, là sự đồng cảm
Cuối cùng, theo tôi, điều quan trọng nhất mà một Senior Engineer cần có, là sự đồng cảm. Ảnh: Andre Moura – Pexels

Hãy hiểu rằng mọi member của mình đang cố gắng hết sức, rằng mọi người vẫn đang học hỏi và sẽ tiếp tục học hỏi, kể cả bạn.

Hãy công nhận sự liên quan và tiềm năng của tất cả các ý tưởng khác nhau, không phải chỉ của riêng mình.

Những điều này gần như không thể dạy được, bạn phải tự trải nghiệm và tự học, nhưng chúng sẽ tạo ra tác động tích cực lớn hướng tới việc xây dựng một team nơi mọi người đều cảm thấy thoải mái và được tin tưởng.

Tôi hy vọng rằng mình sẽ không bị hiểu lầm khi nói rằng hơn 8 năm kinh nghiệm không phải là yếu tố làm nên vị trí Senior Dev.

Kinh nghiệm là quan trọng. Nhưng tôi cũng tin rằng vị trí này đòi hỏi những kỹ năng khác cần liên tục được trau dồi.

Theo Tylor Borgeson