18/08/2018, 10:14

Làm thế nào để trở thành một lập trình viên giỏi hơn bằng cách không lập trình

Lần trước trong bài viết Lập trình viên cũng là con người, tôi đã đề cập rằng mình đã đọc cuốn sách Programmers At Work. Nó là một tuyển tập những bài phỏng vấn rất hay với các lập trình viên nổi tiếng vào khoảng năm 1986. Tất cả các bài phỏng vấn đó đều đáng đọc, nhưng bài phỏng vấn ...

Lần trước trong bài viết Lập trình viên cũng là con người, tôi đã đề cập rằng mình đã đọc cuốn sách Programmers At Work. Nó là một tuyển tập những bài phỏng vấn rất hay với các lập trình viên nổi tiếng vào khoảng năm 1986. Tất cả các bài phỏng vấn đó đều đáng đọc, nhưng bài phỏng vấn với Bill Gates có một câu trả lời đặc biệt mà nhói đến tận xương tủy là:

Bạn không thể trở thành một lập trình viên giỏi chỉ bằng cách đóng cửa ngồi lập trình, mà bạn cần phải quan tâm đến nhiều vấn đề khác nữa.Bạn không thể trở thành một lập trình viên giỏi chỉ bằng cách đóng cửa ngồi lập trình, mà bạn cần phải quan tâm đến nhiều vấn đề khác nữa.

Liệu việc tích lũy kinh nghiệm thông qua nhiều năm có cần thiết để khiến cho công việc lập trình trở nên dễ hơn không thưa ông?

Bill Gates: Không. Tôi nghĩ rằng sau khoảng 3 đến 4 năm đầu tiên, thì nó đã cho thấy một cách chắc chắn là liệu bạn có là một lập trình viên giỏi hay không. Một ít năm sau đó nữa, thì bạn có thể biết nhiều hơn về cách quản lý các dự án lớn bao gồm nhiều người, nhưng chỉ sau 3 hoặc 4 năm, thì đã cho thấy kết quả rõ ràng rằng bạn sẽ trở thành cái gì. Không có một ai tại Microsoft mà chỉ là dạng lập trình viên xoàng xoàng trong một vài năm, và sau đó đột nhiên trở thành một ngôi sao sáng chói cả. Tôi có thể nói với ai đó về một chương trình mà anh ta đã viết ra và biết ngay rằng liệu anh ta có thực sự là một lập trình viên giỏi hay không.

Chúng ta đã biết rằng có một sự phân chia rất lớn giữa những người có thể lập trình và những người không thể lập trình.

Nhưng có một bí mật bẩn thỉu nho nhỏ trong ngành công nghiệp phát triển phần mềm đó là, điều trên thậm chí cũng đúng đối với những người có thể lập trình: có một sự phân chia rất lớn giữa những lập trình viên giỏi và những lập trình viên xoàng xĩnh. Một lập trình viên xoàng xĩnh có thể lập trình bằng cả trái tim của anh ta hoặc cô ta trong vòng 4 năm trời, nhưng điều đó sẽ không thể biến họ thành một lập trình viên giỏi được. Và một lập trình viên giỏi thì dường như luôn có một tố chất bẩm sinh đối với lĩnh vực này ngay từ khi mới bắt đầu.

Tôi đồng ý với Bill về quan điểm này. Từ những điều mà tôi đã quan sát thấy, thì không có một cách nào để vượt qua hố sâu khoảng cách kỹ năng của một nhà phát triển phần mềm cả. Hoặc là bạn có nó, hoặc là không. Bất kể số lượng thời gian công sức mà bạn cắm cổ cày cuốc hay mài dũa cũng sẽ chẳng thay đổi được điều đó. Nhưng nếu bạn chấp nhận tiền đề đó, thì nó cũng tạo ra cho chúng ta một nghịch lý: nếu kinh nghiệm không giúp bạn trở thành một lập trình viên giỏi hơn, thì cái gì mới giúp được? Các cấp độ kỹ năng của chúng ta đã được viết vào đá chăng? Hay việc trở thành một lập trình viên giỏi hơn là điều không thể?

Để trả lời câu hỏi đó, bạn phải cân nhắc đến sự ám ảnh tự nhiên của bản thân công việc lập trình. Các nhà phát triển phần mềm giỏi thì rất giỏi trong việc lập trình. Thực sự giỏi trong việc lập trình. Bạn có thể thậm chí nói là cực giỏi. Nếu họ có bất cứ cái gì đó giống như tôi, họ đã dành mỗi phút giây sau khi thức dậy để ôm lấy cái máy tính trong phần lớn cuộc đời họ. Và theo lẽ tự nhiên, họ sẽ trở nên giỏi hơn theo thời gian. Các nhà phát triển phần mềm giỏi đã tinh thông kỹ năng của lập trình, điều mà đã đưa họ vào một câu lạc bộ những con người ưu tú. Nhưng nếu bạn cũng đã có đến 97% năng khiếu về lập trình rồi, thì số % ít ỏi còn lại nào sẽ tạo ra sự khác biệt to lớn đó?

Để đạt được điều đó, thì phần nhiều là tôi tin rằng chỉ có một cách duy nhất để trở thành một lập trình giỏi hơn đó là bằng cách không lập trình. Bạn phải quan sát tất cả mọi thứ, hãy tắt trình biên dịch đi một lúc, và suy nghĩ về cái mà bạn thực sự đang làm. Việc ngồi code thì rất quan trọng, nhưng nó chỉ là một phần nhỏ của toàn bộ quy trình.

Đoạn trích sau đây trên tờ Design Observer mang lại cho chúng ta một chút lời khuyên hữu ích liên quan:

Qua nhiều năm, tôi dần dần nhận ra rằng công việc tốt nhất của tôi thì luôn luôn liên quan đến những chủ đề mà khiến tôi cảm thấy thú vị, hoặc — thậm chí tốt hơn — là những chủ đề về cái mà tôi trở nên cảm thấy thích thú, và thậm chí đam mê nó, thông qua mỗi quá trình làm công việc thiết kế. Tôi tin rằng mình vẫn đang đang mê về thiết kế đồ họa. Nhưng điều tuyệt vời về lĩnh vực thiết kế đồ họa đó là nó hầu như luôn luôn về một cái gì đó khác. Về một công ty luật. Về một cầu thủ bóng đá nổi tiếng. Về nghệ thuật, chính trị. Về đạo diễn nổi tiếng Robert Wilson. Và nếu tôi không thể trở nên hào hứng về bất cứ cái gì khác, thì thực ra tôi đã gặp vấn đề trong việc làm tốt công việc của một nhà thiết kế. Đối với tôi, cái kết luận rút ra thì rất đơn giản là: càng nhiều thứ mà bạn cảm thấy thú vị với chúng, thì bạn sẽ càng làm tốt hơn trong công việc của mình.

Đam mê lập trình là một điều tuyệt vời. Nhưng tất cả nó sẽ dễ dàng trở nên dại dột, khi bạn cứ tự đào hố xung quanh mình ngày càng sâu hơn vào trong một kỹ năng mà bạn đã chứng tỏ rằng bản thân mình có năng lực ở rất nhiều lần trước đó. Để thực sự trở thành một lập trình viên giỏi hơn, bạn phải nuôi dưỡng đam mê về tất cả mọi thứ khác  xung quanh công việc lập trình đó.

Bill Gates, trong một bài phỏng vấn vào năm 2005, cũng đã nhấn mạnh lại cái quan điểm của ông đã thể hiện vào năm 1986:

Điều tự nhiên của những công việc này thì không chỉ là đóng cửa nhà bạn lại rồi ngồi viết code, và nó rất dễ để nhận ra một thực tế rằng. Kỹ năng thiếu hụt lớn nhất là một ai đó mà có cả khả năng hiểu ở mặt kỹ nghệ và cũng có mối quan hệ tốt với những kỹ sư nòng cốt khác, và bắc cầu nối để làm việc với khách hàng và tiếp thị cùng những thứ khác giống như vậy. Và đó là kiểu nghề nghiệp của việc quản lý kỹ nghệ, thậm chí xung quanh tất cả những người mà chúng tôi có, chúng tôi vẫn cảm thấy khó khăn trong việc tìm ra những người muốn làm công việc này, và vì vậy chúng tôi thường phải đẩy người vào vị trí đó.

Tôi rất muốn có những người mà đến với những công việc đó, mà chỉ nghĩ nó là một bài tập trong việc quản lý con người và động lực con người, cũng ngang như là các kỹ năng về kỹ nghệ cơ bản vậy.

Và chúng tôi có thể hứa với những người đó trong vòng 2 năm tính từ lúc bắt đầu vào nghề rằng hầu hết công việc họ làm sẽ không phải là coding, bởi vì có nhiều con đường sự nghiệp khác nhau. Giống như bên trong nhóm phát triển Microsoft Office nơi mà bạn là một phần đang tạo ra sản phẩm tuyệt vời đó, bạn tìm hiểu để xem mọi người sử dụng nó như thế nào, sau đó dành ra 2 năm để xây dựng nên một phiên bản khác, và kết quả thực sự thay đổi năng suất rất lớn. Bạn dám đánh cược lớn vào cái mà bạn đang làm và làm một số thứ mà chỉ nhằm đáp ứng lại điều mà khách hàng muốn.

Bạn sẽ không– bạn không thể— trở thành một lập trình viên giỏi hơn bằng cách chỉ thông qua việc tập trung hết sức duy nhất vào công việc lập trình. Bạn chỉ có thể bổ sung và mở rộng các kỹ năng lập trình đang có của mình bằng cách học thêm những lĩnh vực liên quan khác. Tìm hiểu về người dùng của bạn. Tìm hiểu về toàn bộ ngành công nghiệp phần mềm này. Và học về mô hình kinh doanh của bạn.

Càng có nhiều thứ bạn cảm thấy thú vị trong đó, thì công việc của bạn sẽ càng trở nên tốt hơn.

Techtalk via vinacode

0