Khi mình cố gắng code mọi thứ hoàn hảo

Công Nghệ
Khi mình cố gắng code mọi thứ hoàn hảo
Bài viết được sự cho phép của tác giả Phạm Bình Chào các bạn, Con người chúng ta sinh đã luôn thích cái đẹp: người đẹp, tâm hồn đẹp, nhà đẹp, xe đẹp, quần áo đẹp và… Code đẹp – một quan niệm về cái đẹp chỉ có ở các lập trình viên. Mình cũng vậy, mình cũng như các bạn, rất thích cái đẹp, và rất thích code đẹp. Code thế nào được coi là code đẹp? Mỗi người lại quan điểm về cái đẹp khác nhau, hơn nữa “code đẹp” lại là một khái niệm chưa có trong từ điển Tiếng Việt, thế nên phần này mình xin trình bày quan điểm của mình thế nào là code đẹp nha: Code chạy đúng trong mọi trường hợp : Nghĩa là cho dù sản phẩm của bạn có phát triển lớn tới cỡ nào, thì cũng vẫn là đoạn code đấy chạy. Sản phẩm của bạn có 1 người dùng cũng chạy đúng mà 10 triệu người dùng cũng vẫn chạy đúng, vẫn đáp ứng được hiệu năng. Code chuẩn Style Guide : Style Guide là những quy ước về cú pháp, cách đặt tên biến, tên hàm, tên hằng trong dự án. Code chuẩn style guide là code tuân theo các quy ước này. Code áp dụng các design pattern phù hợp : Design Pattern hiểu nhanh nó là một mô hình giúp các bạn giải quyết vấn đề, áp dụng design pattern chuẩn sẽ giúp code của bạn trong sáng và dễ hiểu, dễ tái sử dụng. Code áp dụng các công nghệ tiên tiến nhất : Tất cả những gì tiên tiến nhất sẽ phải hội tụ trong dự án của bạn. Code không bị dư thừa : Không dư thừa các các hàm không dùng...

Bài viết được sự cho phép của tác giả Phạm Bình

Chào các bạn,

Con người chúng ta sinh đã luôn thích cái đẹp: người đẹp, tâm hồn đẹp, nhà đẹp, xe đẹp, quần áo đẹp và… Code đẹp – một quan niệm về cái đẹp chỉ có ở các lập trình viên. Mình cũng vậy, mình cũng như các bạn, rất thích cái đẹp, và rất thích code đẹp.

Code thế nào được coi là code đẹp?

Mỗi người lại quan điểm về cái đẹp khác nhau, hơn nữa “code đẹp” lại là một khái niệm chưa có trong từ điển Tiếng Việt, thế nên phần này mình xin trình bày quan điểm của mình thế nào là code đẹp nha:

  1. Code chạy đúng trong mọi trường hợp: Nghĩa là cho dù sản phẩm của bạn có phát triển lớn tới cỡ nào, thì cũng vẫn là đoạn code đấy chạy. Sản phẩm của bạn có 1 người dùng cũng chạy đúng mà 10 triệu người dùng cũng vẫn chạy đúng, vẫn đáp ứng được hiệu năng.
  2. Code chuẩn Style GuideStyle Guide là những quy ước về cú pháp, cách đặt tên biến, tên hàm, tên hằng trong dự án. Code chuẩn style guide là code tuân theo các quy ước này.
  3. Code áp dụng các design pattern phù hợpDesign Pattern hiểu nhanh nó là một mô hình giúp các bạn giải quyết vấn đề, áp dụng design pattern chuẩn sẽ giúp code của bạn trong sáng và dễ hiểu, dễ tái sử dụng.
  4. Code áp dụng các công nghệ tiên tiến nhất: Tất cả những gì tiên tiến nhất sẽ phải hội tụ trong dự án của bạn.
  5. Code không bị dư thừa: Không dư thừa các các hàm không dùng đến, không dư thừa các file, các thư mục không dùng đến.
  6. Code an toàn và bảo mật: Code sao để hacker không thể tấn công được.

Các tiêu chí về code đẹp là do mình tự đặt ra như vậy, có bạn nào đã từng làm dự án nào mà chứa toàn code đẹp như vậy chưa?

Code đẹp rất Lợi – Hại

Không thể phủ nhận, code đẹp có rất nhiều mặt lợi. Mình nhớ hồi còn là sinh viên, vì túng tiền nên nhận bảo trì một trang web bán hàng cho một doanh nghiệp nọ. Họ yêu cầu mình thay đổi một số giao diện website kèm phát triển thêm một số tính năng mới, và hứa sẽ thưởng thêm nếu làm tốt công việc. Lúc nhận yêu cầu, mình thấy công việc cũng không có gì khó khăn, nghĩ bụng phen này chắc sắp giàu rồi. Thế nhưng mọi thứ quay ngoắt 180 độ khi mình có trong tay source code của họ… Dự án không hề áp dụng MVC mà viết lẫn lộn cả 3 thành phần vào nhau, tên file và thư mục thì tùy ý đặt tên, code thì không tuân theo style nào cả, mọi thứ cứ lẫn lộn lên như ly chè thập cẩm. Mình chán ngán và hỏi tại sao code lại “thúi” như vậy, thì các anh ở đấy bảo code này được phát triển từ một đề tài của sinh viên từ khá lâu rồi, lại trải qua nhiều lần nâng cấp, mỗi người thêm thắp một tý thành ra source code mới rối rắm đến thế. Nghĩ mà chán, thế nên mình quyết định từ bỏ dự án này, cũng may là bên họ tốt không bắt mình đền bù dự án :'(.

Kể câu chuyện như vậy để bạn thấy rằng tầm quan trọng của việc code đẹp, nếu dự án được được áp dụng mô hình MVC thôi, là quá trình bảo trì đã đơn giản hơn rất nhiều rồi. Nhưng đằng này…

Bên cạnh những mặt lợi không thể chối cãi, thì khi code quá đẹp cũng gây ra một số tác dụng phụ ảnh hưởng xấu tới dự án và chính mình, vì cái gì quá cũng không tốt mà. Bản thân mình đã gặp và cảm nhận được một số ảnh hưởng tiêu cực của việc lúc nào cũng cố gắng code đẹp như sau:

Code nắn nót quá sẽ tốn nhiều thời gian

Quá nắn nót vào từng dòng code khiến mình mất nhiều thời gian để suy nghĩ hơn. Giả sử như nỗi khi muốn đặt tên biến, tên hàm, tên file, tên thư mục… Mình thường suy nghĩ kỹ xem có nên đặt tên như vậy không, nhiều khi lúc này thấy hợp lý rồi, nhưng ngày mai nghĩ lại thì lại thấy cái tên khác hợp lý hơn. Thế là quay ra sửa lại code ngày hôm qua, cứ như vậy tạo nên một vòng luẩn quẩn khiến mình mãi không hoàn thiện nổi một tính năng.

Suy nghĩ đến những trường hợp quá xa

Nghĩ quá xa, vượt quá phạm vi của bài toán khiến mình mãi không ưng với những dòng code mình viết ra. Ví dụ dự án của mình làm xong thì cùng lắm có 5000 người dùng, thế nhưng mình luôn nghĩ phải thiết kế hệ thống sao cho đáp ứng được 5 triệu người dùng. Dự án của mình không cần phải mở rộng, thế nhưng mình luôn code theo hướng có thể mở rộng. Điều này khiến mình tốn rất nhiều thời gian để tìm hiểu, để thay đổi, trong khi các trường hợp đấy không bao giờ xảy ra với dự án mình đang theo đuổi.

Tích hợp nhiều công nghệ mới, trong khi nó chưa phổ biến

Khi PHP vừa mới ra mắt phiên bản 7.0, mình hí hưởng triển khai ngay một dự án cho công ty trên nền tảng mới này. Sau khi làm xong, đến bước deploy thì không deploy nổi bởi vì hosting mà công ty mua chỉ chạy được PHP 5.x. Kết quả là công ty mình đã phải chuyển qua sử dụng VPS, để có thể tự cài PHP 7 lên và chạy.

Một câu chuyện khác nữa, thời mà vuejs nổi lên như một framework js tích hợp những thứ hay ho nhất của angularjs và reactjs. Mình có áp dụng vue vào một dự án outsource, thời gian đầu dự án chỉ có một mình mình làm thì không có đáng nói, chuyện chỉ đáng nói khi mình không làm dự án nữa và bàn giao lại cho team khác. Nhưng vì vue là một framework mới, nên team đó không ai biết gì về vue cả. Vậy là mình phải dành 1 tuần để training cho họ về vue. Thế nhưng cũng vì có dịp training này mà mình có thêm vài người bạn mới, và sau đó cũng nhận thêm được một vài dự án outsource của team đấy gửi về – đúng là cho đi thì sẽ được nhận lại mà.

Quá tập trung vào code mà quên mất mục đích chính của dự án

Có lần mình làm một dự án về rao vặt bất động sản, tính năng chính là cho khách có thể tạo tài khoản và đăng tin rao vặt lên website. Thế nhưng vì quá mải mê vào việc code sao cho đẹp mà mình cứ làm đi làm lại một tính năng phụ, trong khi tính năng chính cần tập trung thì không làm. Kết quả là sắp deadline, mình phải OT để làm cho kịp dự án.

Khi mình cố gắng code mọi thứ hoàn hảoKhi mình cố gắng code mọi thứ hoàn hảo
Cứ tập trung vào các chi tiết phụ, còn chi tiết chính thì lại làm nham nhở :p

Mang dao mổ trâu đi giết gà

Một bài toán đơn giản thì hãy cứ giữ cho nó đơn giản – Mình chỉ ước là nhận ra điều này sớm hơn. Hồi mới đi làm, mình được giao cho một task là liệt kê danh sách các khách hàng dưới dạng bảng và có bộ lọc theo mã khách hàng, tên khách hàng, trạng thái,… Tính năng này không hề khó, thế nhưng vì muốn sản phẩm nhìn phải thật ngầu, thật đẹp nên mình đã tích hợp thư viện datatable để hiển thị danh sách này. Cứ nghĩ phen này chắc là được khen tấm tắc, nào ngờ phải đập đi làm lại vì lý do “mang dao mổ trâu đi giết gà”. Việc sử dụng datatable để hiển thị giao diện bảng nhìn thì đẹp thật nhưng nó không cần thiết trong trường hợp này, hơn nữa việc tích hợp thư viện bên thứ ba như vậy sẽ làm dự án khó bảo trì hơn.

Một câu chuyện khác nữa, mình có web có tính năng rút gọn link. Phiên bản đầu dự án được build bằng PHP thuần với html, css tự viết. Sau đó mình nghe nói đến framework Laravel tuyệt lắm, thế là mình sử dụng Laravel để làm backend thay cho PHP thuần trước đó. Tiếp đến, mình lại nghe nói đến Single Page App đem lại trải nghiệm mượt mà, thế là mình lại mày mò áp dụng Single Page App cho dự án này. Kết quả là sản phẩm có tốt hơn, nhưng không tốt hơn là mấy, trong khi mình lại tốn quá nhiều thời gian cho việc thay đổi này. Nếu như bỏ qua việc mình học được thêm 2 công nghệ mới ra, thì việc đánh đổi như vậy là không xứng đáng. Nhưng cũng may, đây chỉ là dự án cá nhân của mình, nên không ảnh hưởng tới ai cả.

Lời kết

Các cụ nói cấm có sai “cái gì cũng có hai mặt”, tốt quá cũng xấu, mà xấu quá thì… chắc chắn là xấu rồi. Qua bài viết này, mình muốn nhắn nhủ một vài điều như sau

  • Thứ nhất: Code đẹp, nhưng phải đẹp trong phạm vi của bài toán. Sản phẩm có 1 trăm người dùng, khác hoàn toàn với sản phẩm có 1 triệu người dùng, mặc dù hai sản phẩm có thể cùng tính năng.
  • Thứ hai: Code đừng quá thông minh, bởi không phải ai cũng đủ thông minh để có thể hiểu được những dòng code thông minh đó.
  • Thứ ba: Đôi khi phải đánh đổi sự tốt nhất, nhanh nhất bằng sự phổ biến nhất.
  • Thứ tư: Cân nhắc công sức bỏ ra để đánh đổi lấy code đẹp. Nếu có hai lựa chọn “Code đẹp 8 mất 1 giờ” và “Code đẹp 10 mất 100 giờ” thì hãy chọn Code đẹp 8.
  • Thứ năm: Những tính năng đã hoàn thiện thì hãy cứ để nó ở quá khứ, nếu muốn cải thiện thì phải có kế hoạch rõ ràng.
  • Thứ 6: Code đẹp chưa chắc tạo ra sản phẩm tốt, sản phẩm tốt chưa chắc đã là code đẹp

Bài viết trên là các kinh nghiệm mình rút ra được trong quá trình làm việc. Hy vọng sẽ giúp ích cho ai đó…

Bài viết gốc được đăng tải tại phambinh.net

Có thể bạn quan tâm:

Xem thêm việc làm IT hấp dẫn tại Station D

Bài viết liên quan

Bộ cài đặt Laravel Installer đã hỗ trợ tích hợp Jetstream

Bộ cài đặt Laravel Installer đã hỗ trợ tích hợp Jetstream

Bài viết được sự cho phép của tác giả Chung Nguyễn Hôm nay, nhóm Laravel đã phát hành một phiên bản chính mới của “ laravel/installer ” bao gồm hỗ trợ khởi động nhanh các dự án Jetstream. Với phiên bản mới này khi bạn chạy laravel new project-name , bạn sẽ nhận được các tùy chọn Jetstream. Ví dụ: API Authentication trong Laravel-Vue SPA sử dụng Jwt-auth Cách sử dụng Laravel với Socket.IO laravel new foo --jet --dev Sau đó, nó sẽ hỏi bạn thích stack Jetstream nào hơn: Which Jetstream stack do you prefer? [0] Livewire [1] inertia > livewire Will your application use teams? (yes/no) [no]: ... Nếu bạn đã cài bộ Laravel Installer, để nâng cấp lên phiên bản mới bạn chạy lệnh: composer global update Một số trường hợp cập nhật bị thất bại, bạn hãy thử, gỡ đi và cài đặt lại nha composer global remove laravel/installer composer global require laravel/installer Bài viết gốc được đăng tải tại chungnguyen.xyz Có thể bạn quan tâm: Cài đặt Laravel Làm thế nào để chạy Sql Server Installation Center sau khi đã cài đặt xong Sql Server? Quản lý các Laravel route gọn hơn và dễ dàng hơn Xem thêm Tuyển dụng lập trình Laravel hấp dẫn trên Station D

By stationd
Principle thiết kế của các sản phẩm nổi tiếng

Principle thiết kế của các sản phẩm nổi tiếng

Tác giả: Lưu Bình An Phù hợp cho các bạn thiết kế nào ko muốn làm code dạo, design dạo nữa, bạn muốn cái gì đó cao hơn ở tầng khái niệm Nếu lập trình chúng ta có các nguyên tắc chung khi viết code như KISS , DRY , thì trong thiết kế cũng có những nguyên tắc chính khi làm việc. Những nguyên tắc này sẽ là kim chỉ nam, nếu có tranh cãi giữa các member trong team, thì cứ đè nguyên tắc này ra mà giải quyết (nghe hơi có mùi cứng nhắc, mình thì thích tùy cơ ứng biến hơn) Tìm các vị trí tuyển dụng designer lương cao cho bạn Nguyên tắc thiết kế của GOV.UK Đây là danh sách của trang GOV.UK Bắt đầu với thứ user cần Làm ít hơn Thiết kế với dữ liệu Làm mọi thứ thật dễ dàng Lặp. Rồi lặp lại lần nữa Dành cho tất cả mọi người Hiểu ngữ cảnh hiện tại Làm dịch vụ digital, không phải làm website Nhất quán, nhưng không hòa tan (phải có chất riêng với thằng khác) Cởi mở, mọi thứ tốt hơn Bao trừu tượng luôn các bạn, trang Gov.uk này cũng có câu tổng quát rất hay Thiết kế tốt là thiết kế có thể sử dụng. Phục vụ cho nhiều đối tượng sử dụng, dễ đọc nhất nhất có thể. Nếu phải từ bỏ đẹp tinh tế – thì cứ bỏ luôn . Chúng ta tạo sản phẩm cho nhu cầu sử dụng, không phải cho người hâm mộ . Chúng ta thiết kế để cả nước sử dụng, không phải những người đã từng sử dụng web. Những người cần dịch vụ của chúng ta nhất là những người đang cảm thấy khó sử dụng dịch...

By stationd
Hiểu về trình duyệt – How browsers work

Hiểu về trình duyệt – How browsers work

Bài viết được sự cho phép của vntesters.com Khi nhìn từ bên ngoài, trình duyệt web giống như một ứng dụng hiển thị những thông tin và tài nguyên từ server lên màn hình người sử dụng, nhưng để làm được công việc hiển thị đó đòi hỏi trình duyệt phải xử lý rất nhiều thông tin và nhiều tầng phía bên dưới. Việc chúng ta (Developers, Testers) tìm hiểu càng sâu tầng bên dưới để nắm được nguyên tắc hoạt động và xử lý của trình duyệt sẽ rất hữu ích trong công việc viết code, sử dụng các tài nguyên cũng như kiểm thử ứng dụng của mình. Cách để npm packages chạy trong browser Câu hỏi phỏng vấn mẹo về React: Component hay element được render trong browser? Khi hiểu được cách thức hoạt động của trình duyệt chúng ta có thể trả lời được rất nhiều câu hỏi như: Tại sao cùng một trang web lại hiển thị khác nhau trên hai trình duyệt? Tại sao chức năng này đang chạy tốt trên trình duyệt Firefox nhưng qua trình duyệt khác lại bị lỗi? Làm sao để trang web hiển thị nội dung nhanh và tối ưu hơn một chút?… Hy vọng sau bài này sẽ giúp các bạn có một cái nhìn rõ hơn cũng như giúp ích được trong công việc hiện tại. 1. Cấu trúc của một trình duyệt Trước tiên chúng ta đi qua cấu trúc, thành phần chung và cơ bản nhất của một trình duyệt web hiện đại, nó sẽ gồm các thành phần (tầng) như sau: Thành phần nằm phía trên là những thành phần gần với tương tác của người dùng, càng phía dưới thì càng sâu và nặng về xử lý dữ liệu hơn tương tác. Nhiệm...

By stationd
Thị trường EdTech Vietnam- Nhiều tiềm năng nhưng còn bị bỏ ngỏ tại Việt Nam

Thị trường EdTech Vietnam- Nhiều tiềm năng nhưng còn bị bỏ ngỏ tại Việt Nam

Lĩnh vực EdTech (ứng dụng công nghệ vào các sản phẩm giáo dục) trên toàn cầu hiện nay đã tương đối phong phú với nhiều tên tuổi lớn phân phối đều trên các hạng mục như Broad Online Learning Platforms (nền tảng cung cấp khóa học online đại chúng – tiêu biểu như Coursera, Udemy, KhanAcademy,…) Learning Management Systems (hệ thống quản lý lớp học – tiêu biểu như Schoology, Edmodo, ClassDojo,…) Next-Gen Study Tools (công cụ hỗ trợ học tập – tiểu biểu như Kahoot!, Lumosity, Curriculet,…) Tech Learning (đào tạo công nghệ – tiêu biểu như Udacity, Codecademy, PluralSight,…), Enterprise Learning (đào tạo trong doanh nghiệp – tiêu biểu như Edcast, ExecOnline, Grovo,..),… Hiện nay thị trường EdTech tại Việt Nam đã đón nhận khoảng đầu tư khoảng 55 triệu đô cho lĩnh vực này nhiều đơn vị nước ngoài đang quan tâm mạnh đến thị trường này ngày càng nhiều hơn. Là một trong những xu hướng phát triển tốt, và có doanh nghiệp đã hoạt động khá lâu trong ngành nêu tại infographic như Topica, nhưng EdTech vẫn chỉ đang trong giai đoạn sơ khai tại Việt Nam. Tại Việt Nam, hệ sinh thái EdTech trong nước vẫn còn rất non trẻ và thiếu vắng nhiều tên tuổi trong các hạng mục như Enterprise Learning (mới chỉ có MANA), School Administration (hệ thống quản lý trường học) hay Search (tìm kiếm, so sánh trường và khóa học),… Với chỉ dưới 5% số dân công sở có sử dụng một trong các dịch vụ giáo dục online, EdTech cho thấy vẫn còn một thị trường rộng lớn đang chờ được khai phá. *** Vừa qua Station D đã công bố Báo cáo Vietnam IT Landscape 2019 đem đến cái nhìn toàn cảnh về các ứng dụng công...

By stationd