[ Giới thiệu sách ] The pragmatic programmer – Lập trình viên … tiêu biểu. (P1)

    Như đã từng giới thiệu ở bài này, vừa rồi mình có dịp đọc qua cuốn sách “The pragmatic programmer” này, cuốn này được rất nhiều các lập trình viên gạo cội trong giới phần mềm khuyên đọc. Đúng như những lời giới thiệu trước đó, cuốn sách chứa hàng tá, hàng tá các lời khuyên sâu sắc và định hướng rất thực tế cho hầu hết mọi khía cạnh của việc trở thành 1 lập trình viên … tiêu biểu.

       Nếu dịch sát nghĩa thì từ pragmatic có nghĩa là “thực dụng”, hoặc “thực tế”, nhưng mình không nghĩ rằng tác giả chỉ có ý đó. Có lẽ tác giả muốn chúng ta trở thành những “lập trình viên tiêu biểu”, sở hữu một kĩ năng kĩ thuật điêu luyện cũng như có thái độ và triết lí làm việc tích cực, từ đó mà trở thành 1 tấm gương “tiêu biểu” đại diện cho những gì tốt nhất và hoàn thiện nhất để làm ra những phần mềm tuyệt vời nhất. Đi kèm với mỗi lời khuyên đều là các ví dụ minh hoạ, chính điều này làm cho cuốn sách cực kì sinh động và dễ hiểu.

the-pragmatic-programmer-1325231340.jpg
Được xuất bản lần đầu năm 1999, nhưng giá trị thì vẫn sẽ còn mãi với thời gian.

Điều gì làm bạn trở thành một lập trình viên tiêu biểu

the pragmatic programmer 2
Đây là câu đầu tiên trong phần mở đầu. Sau khi đọc xong cuốn này, mình tin điều đó!

       Trước khi nói về các điều kiện làm nên 1 lập trình viên tiêu biểu, tác giả cho rằng nghề phát triển phần mềm cũng tương tự như 1 nghành nghề thủ công. Không hề dễ! Hãy hình dung đến việc điêu khắc gỗ, không khó để học cách tạc ra 1 bức tượng, nhưng để thổi hồn vào sản phẩm và làm cho nó khác biệt thì bạn sẽ phải mất nhiều thời gian và phải chăm chút rất cẩn thận. Các công cụ hiện đại có thể giúp ích cho bạn đôi chút, nhưng chỉ có những nghệ nhân thực sự mới biết cách làm chủ các công cụ này để thoả sức sáng tạo theo ý muốn. Phải mất nhiều thời gian để kết hợp lí thuyết với luyện tập đều đặn mới đem bạn đến cảnh giới cao như vậy. Và việc phát triển phần mềm cũng sẽ như vậy đấy!

       Lập trình viên cũng là con người, mà như thế thì mỗi người trong số họ đều là những cá thể độc lập, có những điểm mạnh và điểm yếu riêng; họ có thể sẽ có những thiện cảm cá nhân đối với công nghệ này, yêu công cụ này và ghét công cụ nọ, .v.v. Đó là những tính cách riêng của họ, nhưng phàm đã là một cá thể tiêu biểu và nổi bật, họ đều chia sẻ chung với nhau những đức tính như:

  •  Sẵn lòng chấp nhận / thích nghi nhanh chóng: Họ là những người nhạy cảm với thay đổi, có 1 niềm đam mê nhất định với các vấn đề kĩ thuật và công nghệ, hay tọc mạch, vọc thử mọi thứ mà họ tò mò.
  • Luôn tò mò về mọi thứ: Họ như những đứa trẻ, luôn miệng hỏi và nghĩ về “tại sao”? Nếu thấy một thứ gì đó thật cool, họ sẽ tò mò ngay: tại sao người ta làm được như thế nhỉ?
  • Có tư duy phản biện: Họ luôn thắc mắc “tại sao”, nhưng nếu có ai đó giải thích cho họ, họ sẽ chẳng vội vàng tin ngay đâu. Họ sẽ luôn thắc mắc tiếp: nếu như kiểu này thì thế nào, kiểu khác thì ra sao? ..v.v.. Chính điều này mới đưa họ đi xa.
  • Khao khát tìm hiểu bản chất: họ luôn muốn biết về cơ chế ẩn bên dưới một hoạt động này là gì, điều gì thực sự thúc đẩy quá trình kia, …v.v.. Không chỉ là “tại sao” mà còn là “bằng cách nào” nữa.
  • Đa năng: Dẫu biết rằng để trở nên tiêu biểu, họ cần phải có hiểu biết rất chuyên sâu về lĩnh vực của họ, nhưng bạn có biết không, nếu phải thay đổi, họ cũng sẽ luôn “sẵn sàng” để bắt đầu chinh phục ngay những thử thách mới.

       Những thứ này có thể là bẩm sinh, nhưng cũng có thể rèn luyện được, điều quan trọng là bạn cần phải chú tâm và kiên trì. Giống như những thợ thủ công, hãy quan tâm tới “tay nghề” của bạn, hãy rèn luyện chúng.

         Đừng nôn nóng, sự tiến bộ là cả một quá trình dài!

Triết lí của những người tiêu biểu

       Giữa hàng vạn người, điều gì khiến một người nào đó trở nên nổi bật? Dường như họ – những người tiêu biểu – luôn có một thái độ và một phong cách tích cực. Hơn nữa, những triết lí và quan điểm tiếp cận vấn đề của họ, hay như cách mà họ giải quyết vấn đề cũng luôn rất khác biệt với mọi người. Họ không vội bắt tay vào giải quyết ngay vấn đề, nhưng lùi lại một bước để có thể đánh giá bức tranh toàn cảnh. Người ta vẫn hay có câu hát: “nên anh lùi bước về sau, để thấy em rõ hơn, để có thể ngắm em từ xa, âu yếm hơn”, chẳng phải khi có một cái nhìn tổng quát, giải pháp sẽ tối ưu hơn đó hay sao?

        Là một người tiêu biểu, hẳn nhiên là không thể thiếu được tinh thần trách nhiệm, mỗi lập trình viên đều phải có trách nhiệm với code mình viết ra, phải giữ đúng tiến độ chung của công việc, luôn giải quyết vấn đề phát sinh sớm nhất có thể (tự mình hoặc bàn bạc cùng team), đừng đổ thừa “Con mèo đã ăn mất code của em” (mục “The cat ate my source code“) để bao biện cho việc code không chạy được ở buổi tổng kết team, hay tệ hơn là buổi demo khách hàng. Hãy chuyên nghiệp trong mọi việc.

        Tất nhiên không gì là hoàn hảo, nhưng thế nào là đủ tốt? Đừng có gắng nhận hàng tá các yêu cầu rồi OT thâu đêm hòng làm vui lòng khách hàng, hãy biết giới hạn yêu cầu để luôn đảm bảo mỗi tính năng khi được triển khai đều tốt đạt chất lượng cao. Hãy nhớ: không phải số lượng, chất lượng mới là hàng đầu, (Mục “good-enough software”). Triết lí này khá giống với lời khuyên “be professional enough to say NO” của cụ Uncle Bob trong cuốn The Clean Coder.

the stone soup.jpg
Câu chuyện nồi “lẩu đá” (the stone soup) chứa đựng nhiều bài học ý nghĩa

       Có một câu chuyện mà mình đặc biệt ấn tượng trong cuốn sách này, đó là câu chuyện về một nồi lẩu toàn là đá, nhưng về sau nó lại trở thành một nồi thức ăn cực kì ngon và bổ ích cho rất nhiều người. Mọi người có thể tìm hiểu thêm về câu chuyện này trên google. Đại ý của câu chuyện này là việc những người tiêu biểu sẽ luôn biết cách để trở thành 1 chất xúc cho những thành công lớn hơn, họ có thể không có tài năng gì hơn người (chỉ có hòn đá vô dụng, không ăn được), nhưng có thể quy tụ được nhiều nguồn lực từ mọi người (gia vị và nguyên liệu cho nồi lẩu). Phải thừa nhận rằng “People find it easier to join an ongoing success“, do đó, hãy luôn là 1 chất xúc tác, hãy luôn luôn chuẩn bị sẵn những gợi ý, những “giải pháp đề xuất” trước khi kêu gọi sự đóng góp nguồn lực của mọi người. Khi đó xác suất nhận lại được giải pháp tốt hơn sẽ tăng nhiều.

an-investment-in-knowledge-pasys-the-best-interest-investment-quote.jpg
Benjamin Franklin, một trong những người khai sinh ra nước Mẽo vĩ đại, ta hay gặp ổng ở trên mấy tờ $$$ đó ^_^

      Quá rõ rồi, những kiến thức, kĩ năng và kinh nghiệm là những tài sản quý giá nhất của mỗi người. Bạn có 1 cái nhà hay 2 cái nhà không quan trọng, bản thân những thứ đó không thể tự sinh sôi thêm, chỉ có kiến thức và kĩ năng của bạn mới giúp bạn có thêm nhiều tài sản vật chất khác. Nhưng điều đáng buồn là: kiến thức thì lỗi thời theo năm tháng. Vì vậy, hãy quan tâm tới kiến thức của bạn như thể bạn quan tâm tới giá vàng mỗi ngày vậy, hãy luôn cập nhật nó hàng ngày.

  • Những người ưu tú luôn làm mới kiến thức một cách nghiêm túc và đều đặn.
  • Nếu bạn còn nhớ nguyên tắc “không phải tất cả trứng vào 1 giỏ” trong quản trị tài chính, thì việc “đa dạng hoá hiểu biết” cũng sẽ đảm bảo nhiều thuận lợi trong tương lai.
  • Rất giống với tài chính, thị trường công nghệ cũng có những thứ “rủi ro cao, lợi nhuận lớn” (high-risk, high-return), hãy cân nhắc cẩn thận điều đó.
  • Cuối cùng, luôn đánh giá và lên kế hoạch định kì, đừng làm việc thiếu quan sát.

      Làm thế nào để có thể theo đuổi những mục tiêu trên? Tác giả cũng sẽ cho chúng ta vài gợi ý:

  • Học một ngôn ngữ mới mỗi năm: Mỗi ngôn ngữ lập trình sẽ có một vài cách tiếp cận vấn đề khác nhau, hãy mở rộng khả năng ứng phó của bạn. Nếu bạn đã biết PHP, hãy thử tìm hiểu Javascript, rồi Java, rồi C#, rồi Go, Python, …v.v..
  • Làm quen với những môi trường phát triển phần mềm khác nhau: nếu bạn đang dùng window, hãy thử dùng linux để dev, hoặc dùng thêm các công cụ ảo hoá và tự động hoá, vấn đề bảo mật, ..v.v.
  • Đọc một cuốn sách kĩ thuật mỗi 3 tháng: Sách vẫn luôn là đỉnh cao tri thức của nhân loại, vậy nên hãy đọc sách nếu bạn muốn nâng tầm tri thức. Số liệu cho thấy trung bình mỗi lập trình viên đang đọc ít hơn 1 cuốn mỗi năm, vậy nên nếu bạn đọc 1 hoặc 2 cuốn mỗi năm cũng đã khá tốt rồi đấy.
  • Đọc cả sách non-technical nữa: đừng quên máy móc được điều khiển bởi con người, vậy nên hãy cũng tranh thủ hiểu về con người nữa nhé. Cái này cũng giúp giải trí nhiều đấy ^_^
  • Đi học: có thể là đến trường, cũng có thể là học onl, học từ bạn bè, ..v.v. đừng ngừng học.
  • Tham gia vào các nhóm, đoàn hội xung quanh bạn: đừng cô lập bản thân, hãy giao lưu để luôn biết được tình hình thế giới công nghệ và chia sẻ kinh nghiệm.
  • Đóng góp và kết nối tới cộng đồng: ngày nay có rất nhiều các open-source hoặc các dự án cộng đồng, hãy tham gia để có thể ứng dụng kiến thức của bạn vào thực tế. Bạn cũng có thể viết blog để chia sẻ kiến thức và trao đổi với mọi người. Thú vị lắm đấy!

       Như bạn thấy đấy, không chỉ tập trung cải thiện các vấn đề của bản thân, mà ta còn phải có những mối liên kết với bên ngoài. Vì vậy, kĩ năng giao tiếp và trao đổi cũng là một kĩ năng rất cần được chú ý cải thiện. Hãy luôn đặt mình vào vị trí người nghe để chuẩn bị nội dung cho tốt, hãy luôn chăm chút tới kĩ năng trình bày vấn đề, học cách biểu đạt sao cho mọi người dễ hiểu. Xây dựng 1 blog cá nhân cũng là 1 cách thức hay, điều này vừa giúp bạn xây dựng danh tiếng cá nhân, vừa giúp bạn rèn luyện kĩ năng trình bày.

_* _*    Còn tiếp   *_ *_

    Tóm tắt những mục tiếp theo của sách:

  • Những cách tiếp cận khôn ngoan
  • Nhưng đừng vội hoang tưởng
  • Làm gì để nâng cao chất lượng sản phẩm
  • Xây dựng những sản phẩm tiêu biểu

 

One thought on “[ Giới thiệu sách ] The pragmatic programmer – Lập trình viên … tiêu biểu. (P1)

  1. Pingback: [ Giới thiệu sách ] The pragmatic programmer – Lập trình viên … tiêu biểu. (P2) – Những dòng code vui

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s