Làm thế nào để viết code cho chuẩn – kinh nghiệm từ một coder lão làng

prod-consulting-tn

Bạn có biết rằng code chuẩn chính là cách duy nhất để dự án của bạn không bị trễ deadline, đảm bảo chất lượng, và tiết kiệm chi phí sức lực của bạn cũng như team-mates của bạn? Nếu bạn còn chưa tin, thì hãy lắng nghe cuộc trò chuyện của chúng tôi với một lập trình viên dày dạn kinh nghiệm chiến đấu, anh đã làm cho nhiều công ty outsource cũng như product của Việt Nam và nước ngoài. Hiện nay anh đang là một Technical Leader cho một công ty nước ngoài ở Việt Nam.

  • Chào anh T. Cảm ơn anh đã dành thời gian tham dự cuộc trò chuyện với Dammecode. Được biết là anh là một lập trình viên có nhiều năm kinh nghiệm và đã dẫn dắt không ít các dự án khó đi tới thành công. Vậy anh có thể chia sẻ một chút về những bí quyết đã đưa lại những thành công như vậy?
  • Chào dammecode và tất cả các bạn độc giả. Thật ra nếu nói tôi là người mang lại thành công cho các dự án thì cũng không hẳn, có nhiều người đã cùng tôi nỗ lực để đi đến thành công và tôi chỉ là người cùng chiến đấu để đảm bảo thành công cho mỗi dự án. Đối với tôi, vẫn còn nhiều điều tôi phải tiếp tục học hỏi và luôn có những điểm có thể cải thiện. Mặc dù vậy tôi vẫn cảm thấy rất hạnh phúc với những gì tôi và đồng nghiệp đã làm được. Nói về bí quyết thì có thể nói là chia sẻ những kinh nghiệm và bài học của bản thân với người khác chính là cách để mang lại thành công, đó cũng chính là lý ho tôi rất vui được tham dự cuộc trò chuyện này.
  • Đúng vậy, tôi cảm thấy là ở Việt Nam các lập trình viên chưa có thói quen chia sẻ cho cộng đồng mà chủ yếu đi tìm lời giải cho chính họ qua internet. Tôi nghĩ là điều này nên được cải thiện.
  • Anh nói rất đúng…
  • Vâng cảm ơn anh. Tôi xin được đề cập nhiều hơn đến khía cạnh kỹ thuật, cụ thể là trong việc viết code. Bởi vì có nhiều bạn thắc mắc tại sao lại phải viết code chuẩn, trong khi thời gian dự án không có nhiều, và code của các bạn tuy không theo một chuẩn nào nhưng vẫn chạy bình thường. Anh có thể cho biết tầm quan trọng của việc code chuẩn, và phương thức để đạt được điều đó?
  • Nói ngắn gọn thì code chính là sản phẩm trung tâm của bất kỳ dự án phần mềm nào. Sản phẩm tốt thì mới được đánh giá cao. Đơn giản vậy đó. Nhưng lợi ích của viết code chuẩn còn nhiều hơn thế. Code của bạn có thể viết ra rất nhanh, và tester không tìm thấy bug tại thời điểm đấy. Tuy nhiên trong thực tế thời gian code ra một sản phẩm chỉ chiếm một phần nhỏ so với thời gian fix bug và thay đổi tính năng. Bởi vì thời gian trôi, cuộc đời thay đổi, yêu cầu phần mềm do vậy cũng không bao giờ đứng yên, kéo theo là các tính năng và cấu trúc phần mềm phải đáp ứng một cách linh hoạt với những biến động đó. Viết code bẩn, code bốc mùi thì chi phí để bảo trì nâng cấp sẽ rất lớn so với viết một đoạn code sạch sẽ ngay từ đầu. Đó là chưa kể code chuẩn cũng làm năng suất của việc phát triển phần mềm cao hơn trông thấy.
  • Anh có thể giải thích rõ hơn về điều này? Tại sao viết code chuẩn lại mang lại năng suất phát triển cao hơn vì có vẻ như là cần nhiều thời gian hơn để viết một đoạn code chuẩn chỉ?
  • Đúng là để viết được code chuẩn không phải dễ, cần nhiều kinh nghiệm và kỷ luật để đạt được một source code tạm gọi là ổn. Nhưng lưu ý là khi bạn muốn viết code chuẩn nghĩa là bạn phải theo một quy tắc chung được các nhà phát triển hàng đầu trên thế giới đưa ra. Đó là các “best practices” mà khi áp dụng phù hợp sẽ làm công việc code nhẹ nhàng đi rất nhiều, hạn chế code thừa và cách đặt tên tuỳ tiện, các thành phần trở nên độc lập và linh hoạt chứ không bị bó chặt vào nhau. Như vậy việc sửa đổi code cũng dễ dàng hơn và ít gây ra lỗi vặt. Hơn nữa việc cộng tác với các lập trình viên khác trong team cũng dễ dàng hơn vì tất cả mọi người đều theo một chuẩn chung. Nói cách khác, các thành viên trong team sẽ nói cùng một ngôn ngữ “chuẩn quốc tế” và việc giao tiếp trở nên thuận lợi hơn rất nhiều.
  • Nói như vậy nghĩa là chỉ cần chúng ta theo các quy tắc coding, các “best practices” là có thể code chuẩn?
  • Thực sự không đơn giản như vậy. Tôi xin nhắc lại là viết code chuẩn là việc không đơn giản, các quy tắc đưa ra theo một phạm vi chung nhất, và để áp dụng được vào bài toán cụ thể thì đòi hỏi bạn cần hiểu được vấn đề cần giải quyết và kết hợp các quy tắc khác nhau vào bài toán của bạn. Cũng giống như bạn có một danh sách dài các công thức tính toán, nhưng để giải một bài toán thì bạn cần động não, có thể cần tới sự sáng tạo của bạn trong việc dùng các công thức, phương trình đã biết.
  • Vậy lập trình viên chúng ta, đặc biệt các bạn mới chập chững vào nghề cần làm gì để nâng cao những kỹ năng coding ở trên? Anh có thể chia sẻ cụ thể một chút chẳng hạn về kinh nghiệm bản thân trong quá trình làm việc của anh?
  • Lập trình là một công việc vất vả, đặc biệt là các bạn mới ra trường hay các bạn mới vào nghề bởi có quá nhiều kiến thức liên quan, các công nghệ ra đời và thay đổi liên tục. Các bạn dễ bị ngợp với những bài toán lập trình và khó có thể viết được code chuẩn ngay từ đầu. Đó là điều dễ hiểu. Tôi cũng đã trải qua quãng thời gian như vậy. Khi tôi học ở trường, tôi chỉ có những kiến thức hàn lâm và hết sức cơ bản nên khi gặp những bài toán thực tế tôi đã gặp không ít khó khăn. Ở thời điểm bắt đầu sự nghiệp lập trình viên của tôi, tôi đã thực sự làm việc hết mình, không ngại học hỏi những kiến thức và công nghệ mới. Tôi đã dần dần trưởng thành qua các dự án, và code của tôi – sản phẩm mà tôi làm ra – cũng dần tốt lên. Đúng là có nhiều kỹ năng cần thiết cần học, tuy nhiên bạn đừng nản chí bởi vì coding là một công việc thuộc về tư duy logic và sự kiên trì. Nếu bạn có tư duy logic và luôn mong muốn học hỏi những điều mới, thì đây chính là công việc tuyệt vời dành cho bạn. Các kiến thức học được ở trường thực sự cũng không hề vô nghĩa, đó là những kiến thức nền tảng để bạn có thể nắm bắt các công nghệ khác. Hãy thực hành coding càng nhiều càng tốt, đồng thời tham khảo source code của những người có kinh nghiệm, bạn có thể học hỏi nhiều điều từ việc so sánh với code của người khác. Có một thời gian ở công ty cũ, tôi đã được thực hành pair programming (code theo cặp) với anh leader, và thực sự tôi đã học được rất nhiều từ anh ấy, không những là cách code theo chuẩn mà còn là tư duy giải quyết vấn đề và cách debug để fix các bug và tìm hiểu cách chương trình chạy. Tôi khuyên các bạn hãy thực hành pair programming thật nhiều, bạn có thể học hỏi từ người khác hoặc giúp các bạn ít kinh nghiệm hơn đạt được kỹ năng code chuẩn trong thời gian sớm nhất. Còn một điểm mà tôi muốn nhấn mạnh đó là kỹ năng dùng tool. Các công cụ hỗ trợ cho việc lập trình là cực kỳ quan trọng, nó hỗ trợ đắc lực cho việc code nhanh, chuẩn và ít lỗi. Các IDE thường được tích hợp các bộ code suggestion, code highlight, hay các plugin để check code theo chuẩn. Và tất nhiên là chúng sẽ tích hợp các bộ debugger mạnh mẽ, giúp bạn nắm được luồng dữ liệu cũng như fix bug nhanh hơn. Sự thực là có rất nhiều tool tuyệt vời miễn phí mà bạn có thể tải về dễ dàng trên mạng. Hãy biến chúng trở thành trợ thủ đắc lực trong công việc của bạn.
  • Vâng cảm ơn anh đã chia sẻ với chúng tôi những kinh nghiệm rất thiết thực, nhất là các bạn junior. Còn với các bạn senior đã có nhiều năm kinh nghiệm thì anh có chia sẻ gì không ạ?
  • Các bạn đã may mắn trở thành những lập trình viên “cứng” tức senior có nghĩa là các bạn đã trải qua những thời điểm khó khăn ban đầu. Các bạn đã có những kinh nghiệm và kiến thức nhất định, có bạn luôn bắt kịp xu hướng công nghệ mới, có bạn vẫn trung thành với những công nghệ “cũ” hơn, nhưng có thể cho là các bạn đã biết cách hoàn thành một bài toán lập trình và dùng các công cụ để trợ giúp cho công việc. Tuy vậy tôi nhận thấy là có nhiều bạn senior còn lập trình khá tuỳ tiện, code rối rắm và phức tạp không cần thiết. Việc không tuân thủ các coding rule cũng khá phổ biến, điều này đã khiến source code nhiều bug và khó maintain. Vì vậy, tôi mong là các bạn hãy chăm chút cho mỗi dòng code của mình giống như một hãng sản xuất uy tín sẽ đảm bảo chất lượng cho mỗi sản phẩm mà họ bán ra. Các bạn hãy áp dụng triệt để các coding rules, các nguyên tắc lập trình như SOLID, áp dụng phù hợp các design patterns để tổ chức cấu trúc code phù hợp. Trong ngành phần mềm, các bạn thường sẽ làm việc theo nhóm và trao đổi thường xuyên với khách hàng, vì vậy kỹ năng giao tiếp thuyết trình cũng rất quan trọng. Bạn cần bảo vệ được quan điểm của mình, thuyết phục được khách hàng, cũng như truyền đạt được các ý tưởng của bạn cho các member khác. Bạn hãy chia sẻ nhiều hơn, bởi vì chia sẻ cho người khác chính không những tạo ra một team mạnh, một công ty mạnh, một cộng đồng mạnh, mà còn giúp bạn củng cố kiến thức. Chia sẻ chính là cách củng cố kiến thức tốt nhất. Đừng ngại chia sẻ sẽ làm bạn mất đi các “bí kíp” của mình, trong thời đại công nghệ thông tin bùng nổ như hiện nay, kiến thức luôn sẵn sàng cho tất cả mọi người với một đường truyền internet, kiến thức là tài sản chung của nhân loại chứ không của riêng ai. Thực tế những người thành công là những người rất tích cực chia sẻ, ví dụ như Bill Gates, Mark Zuckerberg luôn sẵn sàng chia sẻ các kiến thức họ có, các quyển sách hay mà họ đọc. Bạn hãy tích cực chia sẻ bằng cách truyền đạt các kiến thức mà bạn có, dành thời gian để pair programming với người khác, viết blog về các vấn đề chuyên môn mà bạn quan tâm. Hãy nhớ là kiến thức là vô tận, quan trọng là chúng ta làm được điều gì hữu ích với những kiến thức mà chúng ta học được.
  • Anh T. này, tôi cảm thấy mình nhận ra được nhiều điều qua những chia sẻ rất chân thành của anh. Tôi cũng tin là các bạn đọc của Đam mê code cũng nghĩ như vậy. Cộng đồng lập trình viên của Việt Nam đã phát triển rất nhanh chóng trong những năm gần đây, tuy nhiên trình độ chung của lập trình viên chúng ta vẫn còn nhiều hạn chế, mặc dù có nhiều người đã vươn tới tầm quốc tế. Tôi nghĩ là chúng ta còn rất nhiều việc phải làm. Sẽ cần nhiều lập trình viên tâm huyết như anh thì chúng ta mới sớm đạt được một cộng đồng lớn mạnh. Thời gian buổi phỏng vấn đến đây đã hết, một lần nữa xin cảm ơn anh T. đã có những chia sẻ hết sức tuyệt vời với chúng tôi ngày hôm nay. Chúc anh sức khoẻ để hoàn thành nhiều dự định sắp tới!
  • Vâng, xin cảm ơn Đam mê code đã giúp tôi có cơ hội chia sẻ với mọi người. Chúc các bạn sức khoẻ, luôn giữ được niềm đam mê với coding và code ngày càng chuẩn nhé (cười) ^^

Leave a comment