16 điểm bởi GN⁺ 2024-05-21 | 5 bình luận | Chia sẻ qua WhatsApp
  • UNIX, Git, Emacs, Boost.Graph, Bazel
  • Với tư cách là một lập trình viên, mỗi ngày tôi đều tương tác với các công cụ phần mềm, nhưng phần lớn chúng chỉ đơn thuần giúp hoàn thành công việc ở mức tối thiểu
  • Thỉnh thoảng, ta bắt gặp những phần mềm vượt xa tính hữu dụng đơn thuần: chúng kích thích trí tưởng tượng, mở ra những khả năng mới và ảnh hưởng đến cách ta thiết kế hệ thống
  • Tôi gọi những phần mềm như vậy là “phần mềm khai sáng” (Enlightenmentware)
  • Với lập trình viên, nguồn khai sáng phổ biến nhất là các ngôn ngữ lập trình họ sử dụng, kể cả những ngôn ngữ học vì sở thích
  • Tôi đã trải nghiệm nhiều sự khai sáng khi làm việc với các ngôn ngữ lập trình như MASM, C, Prolog và Idris
  • Vì ảnh hưởng của việc học ngôn ngữ đối với sự mở rộng tư duy đã được biết đến từ lâu, nên trong bài này tôi sẽ không tập trung vào ngôn ngữ mà chỉ nói về những phần mềm mang lại sự khai sáng

UNIX

unix thân thiện với người dùng—chỉ là nó kén bạn mà thôi.

Vô danh, "Art of unix Programming" của Eric S. Raymond

  • Năm 2008, khi còn học đại học, tôi bắt đầu tìm công việc lập trình đầu tiên.
  • Phần lớn tin tuyển dụng đều yêu cầu kiến thức về UNIX và socket.
  • Vì chương trình học ở trường không có môn nào về unix hay hệ điều hành, tôi quyết định tự học.
  • Tôi bước vào thế giới unix qua cuốn "The unix Operating System" của Andrey Robachevsky và cộng sự.
  • Việc cài Mandriva Linux đã đưa tôi đi khám phá môi trường unix.
  • Kể từ đó, unix đã đồng hành cùng tôi qua mọi giai đoạn của cuộc sống.
  • Phần lớn phần mềm đều vận hành trong môi trường unix, và đến nay tôi vẫn tham khảo cuốn "Advanced Programming in the unix Environment".

Git

Dùng git để tự bắn vào chân mình thì dễ, nhưng quay về chân trước đó rồi hợp nhất nó với cái chân hiện tại cũng dễ không kém.

Jack William Bell

  • Đầu năm 2009, tôi lần đầu tiếp xúc với hệ thống quản lý phiên bản khi dùng Rational ClearCase.
  • ClearCase cực kỳ rối rắm và chỉ đáp ứng được những yêu cầu tối thiểu.
  • Sau đó tôi chuyển sang dùng Subversion và học qua cuốn "Version Control with Subversion".
  • Subversion dễ hiểu và dễ dùng, nhưng lại bất tiện cho các dự án cá nhân.
  • Rồi tôi phát hiện ra Git.
  • Git có đường cong học tập dốc và cũng gây bối rối, nhưng đó là kiểu bối rối khác với ClearCase.
  • Git loại bỏ ma sát trong việc dùng quản lý phiên bản, cho phép ta đưa mọi thứ đáng giá vào version control.
  • Thiết kế của Git hấp dẫn ở chỗ nó là sự pha trộn thanh nhã giữa hệ phân tán, đồ thị không chu trình và kho lưu trữ định địa chỉ theo nội dung.
  • Việc tìm hiểu nội tại của Git thú vị đến mức khiến tôi quan tâm cả những hệ thống quản lý phiên bản khác.
  • Nhược điểm lớn của Git là cách tiếp cận định hướng snapshot khiến việc hiểu merge trở nên khó khăn hơn.

Emacs

Bất kỳ trình soạn thảo văn bản nào cũng có thể lưu tệp, nhưng chỉ Emacs mới cứu rỗi được linh hồn.

Per Abrahamsen

  • Tôi đã chỉnh sửa chương trình đầu tiên của mình trong cửa sổ màu xanh thân thuộc của Turbo Pascal 7.0.
  • Ở đại học, tôi học lập trình bằng Pascal, rồi sau đó dùng C++ và Java.
  • Ở công việc lập trình đầu tiên, tôi dùng NEdit nhưng dần quan tâm đến Vim và Emacs.
  • Vim mang lại thử thách nhưng cũng rất thú vị, giống như chơi một nhạc cụ.
  • Emacs là một cỗ máy Lisp cung cấp khả năng biên tập văn bản và quản lý cửa sổ.
  • Cấu trúc bên trong của Emacs sạch sẽ, ngăn nắp và được tài liệu hóa rất tốt.
  • Việc mở rộng nó bằng Emacs Lisp dễ hơn nhiều so với các trình soạn thảo khác.

Boost.Graph

Tôi có thành kiến mạnh với trào lưu mã tái sử dụng được. Tôi cho rằng “mã có thể biên tập lại” tốt hơn nhiều so với hộp đen hay bộ công cụ.

Donald Knuth, phỏng vấn với Andrew Binstock

  • Đêm giao thừa năm 2013, tôi đọc Boost Graph Library.
  • Phần lớn các thư viện thuật toán phụ thuộc vào một cách biểu diễn dữ liệu cụ thể, khiến việc tích hợp vào dự án sẵn có trở nên khó khăn.
  • Thư viện Boost.Graph giải quyết vấn đề này bằng lập trình generic.
  • Dù chưa từng thực sự dùng thư viện này, thiết kế của nó đã giúp tôi hiểu sâu hơn về thiết kế STL và lập trình generic.

Bazel

Nếu make không hoạt động như bạn mong đợi, khả năng cao là Makefile đã sai.

Adam de Boor, "PMake—A Tutorial"

  • Năm 2009, tôi viết Makefile đầu tiên cho một dự án nghiên cứu.
  • Sự phức tạp của make khiến tôi khao khát một công cụ tốt hơn.
  • Tôi đã thử nhiều hệ thống build khác nhau, nhưng đều không thấy thỏa mãn.
  • Năm 2016, tôi gia nhập Google và bắt đầu dùng blaze.
  • Bazel là mảnh ghép cuối cùng còn thiếu của bài toán build system.
  • Bazel nhanh, chính xác, dễ dùng và không phụ thuộc vào ngôn ngữ.

Kết luận

  • Điểm chung của một enlightenmentware tốt:
    • Giải quyết những vấn đề sâu sắc, đồng thời là những vấn đề ta gặp hằng ngày.
    • Chứa đựng rất nhiều chiều sâu trong một bề mặt nhỏ gọn.
    • Mời gọi và khuyến khích người dùng khám phá bên trong nó.

Ý kiến của GN⁺

  • Tầm quan trọng của UNIX: UNIX là hệ điều hành nền tảng trong nhiều môi trường lập trình và là yếu tố thiết yếu để hiểu các cơ sở của lập trình hệ thống.
  • Đường cong học tập của Git: Git lúc đầu khá khó, nhưng là công cụ cực kỳ quan trọng cho quản lý phiên bản. Nó đặc biệt hữu ích trong môi trường cộng tác và hệ phân tán.
  • Tính linh hoạt của Emacs: Emacs cung cấp nhiều hơn một trình soạn thảo văn bản, đặc biệt đáng khuyến nghị cho những ai quan tâm đến lập trình Lisp.
  • Lập trình generic trong Boost.Graph: Boost.Graph là một ví dụ mạnh mẽ về lập trình generic, giúp học cách hiện thực các thuật toán phức tạp một cách hiệu quả.
  • Hiệu quả của Bazel: Bazel là công cụ có thể tối đa hóa hiệu quả của build system trong các dự án quy mô lớn, đặc biệt hữu ích ở các công ty lớn như Google.

5 bình luận

 
zihado 2024-05-23

Trên Windows thì chẳng phải là Everything sao haha

 
bus710 2024-05-23

Magit tốt đến mức nào mà lại được xếp vào hàng ngũ những phần mềm kiệt tác như vậy nhỉ? Vì tôi không dùng Emacs nên cũng không biết được.
Nghe nói trên Nvim thì Neogit chịu ảnh hưởng từ Magit, chắc có lẽ tôi cũng nên thử cái đó...

 
bbulbum 2024-05-23

Cũng xin đề cử lazygit ạ hehe

 
bus710 2024-05-23

Cảm ơn.
Cuối tuần tôi sẽ cài superfilelazygit để thử xem sao.

 
GN⁺ 2024-05-21
Ý kiến trên Hacker News

Tóm tắt các bình luận trên Hacker News

  • Compiler Explorer:

    • Compiler Explorer đã thay đổi đáng kể cách thảo luận về compiler và tối ưu hiệu năng.
    • Tác động tích cực đến chất lượng thảo luận trên các diễn đàn.
    • Có thể nhanh chóng kiểm chứng các khẳng định táo bạo thông qua liên kết.
    • Các công cụ như llvm-mca và uiCA cũng rất hữu ích.
  • Ý kiến về việc dùng Windows:

    • Đưa ra một góc nhìn cân bằng về Windows.
    • Windows dòng NT là một hệ điều hành tuyệt vời.
    • Vẫn cài Windows để chơi game.
  • Docker:

    • Docker đã giúp tiết kiệm rất nhiều thời gian trong sự nghiệp tư vấn.
    • Cho phép chạy nhanh các dự án cũ.
    • Không còn cần cài nhiều máy chủ cơ sở dữ liệu.
    • Giúp môi trường Python có thể tái lập và chạy song song.
  • Spring Framework:

    • Spring Framework gây cản trở cho việc hiểu khái niệm dependency injection.
    • Khiến nhiều lập trình viên Java nghĩ rằng cần đến các framework phức tạp.
    • Bản thân Spring hữu ích, nhưng có thể làm phần mềm phức tạp hơn và kém tính di động hơn.
  • Nix:

    • Có thể thực hiện nhiều công việc phức tạp với Nix và Nixpkgs.
    • Có thể dễ dàng làm những việc như build tĩnh binary Rust.
    • Cung cấp nhiều tùy chọn build và khả năng caching.
    • Nix rất hữu ích, nhưng nên tiếp cận NixOS một cách thận trọng.
  • Emacs:

    • Emacs biến công việc sửa lỗi thành một bài luyện tập kỹ năng.
    • Biến những việc nhàm chán trở nên thú vị.
  • Khái niệm 'Round':

    • Khái niệm 'Round' cung cấp phạm vi giao diện lớn nhất với khối lượng lõi tối thiểu.
    • Phần lõi của Emacs và Git nhỏ, đơn giản nhưng mạnh mẽ.
  • Magit:

    • Magit là một ví dụ kiểu mẫu về sự đơn giản, hiệu quả và khả năng khám phá.
    • Giúp phơi bày các tính năng của Git tốt hơn.
    • Không đưa vào thuật ngữ hay quy trình làm việc riêng.
  • So sánh SVN và Git:

    • Trải nghiệm dùng SVN rất tiêu cực.
    • Git trực quan hơn nhiều và dễ hiểu hơn.
    • Quy trình làm việc được cải thiện khi dùng Git.
  • Trải nghiệm sử dụng Linux, Emacs, Bazel, Magit:

    • Làm việc trên Linux với Emacs và Bazel.
    • Tìm đọc blog, lưu công việc trong Emacs, và viết commit message bằng Magit.
    • Push lên kho Git.