Management Mantras
Bài viết này tập trung vào những nguyên tắc quản lý quan trọng để xây dựng một môi trường làm việc hiệu quả và trách nhiệm. Dưới đây là một số điểm chính:
- Đừng “ban ơn” cho ai: Mọi người nên tập trung vào công việc quan trọng nhất của họ và được hỗ trợ bởi những người có trách nhiệm. Việc “giúp đỡ” có thể là dấu hiệu của sự nhầm lẫn, thiếu sót trong quy trình hoặc làm việc không hiệu quả.
- Nhân viên không cần lòng thương hại: Các công ty không nên tỏ ra ban phát cho nhân viên. Thay vào đó, hãy coi những gì bạn làm cho nhân viên là phần thưởng xứng đáng hoặc là một phần trách nhiệm của bạn để hỗ trợ đội ngũ.
- “Tôi có thể sửa nó”: Đừng đổ lỗi cho người khác khi mọi việc không thành công. Hãy chịu trách nhiệm và tìm cách giải quyết vấn đề. Nếu các dự án bạn tham gia liên tục thất bại, bạn cần xem xét lại năng lực của mình.
- Quản lý là công việc hàng ngày: Quản lý hiệu quả đòi hỏi sự nỗ lực liên tục để thúc đẩy mọi người, giải quyết xung đột và đưa ra phản hồi. Đó là sự tích lũy của những hành động nhỏ hàng ngày chứ không phải những quyết định lớn hiếm hoi.
The Ultimate Guide to Programming Languages: Choosing the Right Tool for the Job
Bài viết này cung cấp một cái nhìn tổng quan về một số ngôn ngữ lập trình phổ biến nhất trong năm 2025, giúp người đọc đưa ra quyết định sáng suốt khi lựa chọn ngôn ngữ phù hợp cho dự án của mình.
Điểm chính:
- Python: Dễ học, đa năng, phù hợp cho machine learning, khoa học dữ liệu, phát triển web, và tự động hóa.
- JavaScript: “Ông vua” của web, không thể thiếu cho phát triển giao diện người dùng, full-stack development (với Node.js) và ứng dụng đa nền tảng (với Electron và React Native).
- Java: “Trâu cày” của doanh nghiệp, ổn định, có khả năng mở rộng cao, bảo mật, phù hợp cho các ứng dụng quy mô lớn, phát triển Android và backend.
- C++: “Cường quốc hiệu năng”, thích hợp cho hệ thống lập trình, game engine, và các ứng dụng thời gian thực.
- Rust: Ngôi sao đang lên, tập trung vào an toàn bộ nhớ và hiệu năng cao, phù hợp cho hệ thống lập trình, WebAssembly và mật mã.
- Xu hướng năm 2025:
- Python vẫn là dẫn đầu trong machine learning, nhưng Julia đang nổi lên trong các tác vụ quan trọng về hiệu năng.
- Solidity và Rust là những người chơi chính trong lĩnh vực blockchain.
- Kotlin Multiplatform và Flutter (Dart) đang được ưa chuộng để thống nhất phát triển ứng dụng di động, web và desktop.
Tóm lại: Bài viết nhấn mạnh rằng việc lựa chọn ngôn ngữ lập trình phù hợp phụ thuộc vào yêu cầu của dự án, kinh nghiệm của nhóm và mục tiêu dài hạn. Mặc dù không có ngôn ngữ nào phù hợp với mọi trường hợp, nhưng việc hiểu rõ điểm mạnh và hạn chế của từng ngôn ngữ có thể giúp đưa ra quyết định thông minh hơn.
Discovery Coding
Bài viết giới thiệu “Discovery Coding” (tạm dịch: Lập trình khám phá) như một phương pháp tiếp cận vấn đề bằng cách viết code trước, thay vì cố gắng thiết kế hoặc suy nghĩ trước. Tác giả so sánh phương pháp này với việc “viết khám phá” trong văn học, nơi tác giả khám phá ra câu chuyện trong quá trình viết.
Điểm chính:
- Khái niệm “Discovery Coding”: Thay vì bắt đầu với một kế hoạch chi tiết, người lập trình khám phá suy nghĩ về bối cảnh, các mối quan hệ trong hệ thống và viết code để hiểu rõ vấn đề.
- Đối lập với “Outlining”: Discovery Coding trái ngược với phương pháp lập trình dựa trên outline, nơi người lập trình lập kế hoạch chi tiết trước khi viết code.
- Không phải là Bottom-Up Design: Tác giả nhấn mạnh rằng Discovery Coding không giống với thiết kế từ dưới lên (bottom-up design).
- Lợi ích: Ngay cả đối với những người thích lập trình theo outline, Discovery Coding có thể giúp tránh việc áp dụng các giải pháp quen thuộc và buộc họ phải hiểu rõ các ràng buộc của hệ thống.
- Công cụ hỗ trợ: Các công cụ hỗ trợ lập trình trực tiếp trong một hệ thống đang chạy (live programming) và trực quan hóa code có thể rất hữu ích cho người lập trình khám phá.
- Lời kêu gọi: Tác giả kêu gọi cộng đồng lập trình chấp nhận và tôn trọng sự khác biệt trong cách tư duy của mỗi người, và không nên coi phương pháp tiếp cận kém tổ chức hơn là một phương pháp kém hiệu quả.
Tóm lại: Bài viết giới thiệu một phương pháp tiếp cận lập trình mới, tập trung vào việc khám phá và hiểu vấn đề thông qua quá trình viết code, và khuyến khích sự chấp nhận sự đa dạng trong cách tư duy của các lập trình viên.
Building a best-selling game with a tiny team
Bài viết này tóm tắt một tập của podcast “The Pragmatic Engineer” với khách mời Jonas Tyroller, một trong hai nhà phát triển của trò chơi indie thành công “Thronefall”. Thronefall là một trò chơi chiến lược tối giản kết hợp phòng thủ tháp và xây dựng vương quốc, đã bán được 1 triệu bản trong năm đầu tiên ra mắt.
Điểm chính:
- Thành công của Thronefall: Một trò chơi indie được phát triển bởi chỉ hai người đã bán được 1 triệu bản, chứng tỏ tiềm năng của thị trường game indie.
- Kỹ năng đa dạng: Để thành công trong vai trò nhà phát triển game indie, cần có nhiều kỹ năng khác nhau, bao gồm thiết kế, phát triển, sáng tác nhạc, marketing và xây dựng cộng đồng.
- Không cần tuân thủ nghiêm ngặt các best practices: Các best practices trong kỹ thuật phần mềm như code review và unit test không phải lúc nào cũng cần thiết cho các game indie nhỏ.
- Xây dựng nhiều game: Để trở nên giỏi trong việc xây dựng game, cần xây dựng nhiều game khác nhau, từ đơn giản đến phức tạp.
- Công cụ hỗ trợ: Các công cụ như Unity giúp việc xây dựng game trở nên dễ dàng hơn bao giờ hết.
- Pathfinding: Một trong những thách thức lớn nhất trong quá trình phát triển Thronefall là tìm đường đi (pathfinding) cho các đơn vị trong game.
- ChatGPT: ChatGPT có thể được sử dụng để tạo code khung, dịch code và trả lời các câu hỏi về các chủ đề không quen thuộc.
- Tìm sự cân bằng: Để thành công, game indie cần tìm được sự cân bằng giữa sở thích cá nhân và tính thị trường.
Tóm lại: Bài viết cung cấp cái nhìn sâu sắc về quá trình phát triển game indie, nhấn mạnh tầm quan trọng của sự đa năng, khả năng thích ứng và sự hiểu biết về thị trường. Nó cũng cho thấy rằng các công cụ và kỹ thuật mới có thể giúp các nhà phát triển game indie tạo ra các sản phẩm thành công.
Serving a billion web requests with boring code
Bài viết chia sẻ kinh nghiệm xây dựng hệ thống API phục vụ hàng triệu người dùng mỗi ngày cho trang web so sánh kế hoạch Medicare của chính phủ Mỹ. Tác giả nhấn mạnh tầm quan trọng của việc sử dụng các công nghệ “nhàm chán” (đã được chứng minh và đáng tin cậy) và tập trung vào sự đơn giản, rõ ràng trong thiết kế và code.
Điểm chính:
- Ưu tiên sự “nhàm chán”: Tác giả coi việc lựa chọn công nghệ “nhàm chán” (boring technology) là kim chỉ nam. Các công nghệ được chọn bao gồm:
- Postgres: Nền tảng cơ sở dữ liệu đáng tin cậy.
- Golang: Ngôn ngữ lập trình hiệu quả, đơn giản và dễ học.
- React: Framework frontend phổ biến và được biết đến rộng rãi.
- Kiến trúc module: Backend được chia thành ba module lớn (druginfo, planinfo, beneinfo), mỗi module có cơ sở dữ liệu riêng và giao tiếp qua gRPC.
- gRPC: Mặc dù có một số khó khăn với tooling, gRPC giúp định nghĩa interface bằng code và tạo các công cụ, interface thay đổi đồng bộ. grpc-gateway cho phép phục vụ các yêu cầu web.
- Tính tương thích ngược: Tuân thủ nghiêm ngặt yêu cầu tương thích ngược, chỉ thêm và không xóa các trường khỏi interface và cơ sở dữ liệu.
- Tìm kiếm faceted: Sử dụng Postgres để triển khai tìm kiếm faceted bằng cách xây dựng chuỗi truy vấn SQL dựa trên các điều kiện.
- ETL: Quy trình ETL được tự động hóa bằng shell script và cron job, tạo cơ sở dữ liệu mới hàng ngày từ dữ liệu đầu vào.
- Logging: Sử dụng request ID để theo dõi các yêu cầu và zerolog để ghi log.
- Documentation: Tạo một cuốn sách về cách hệ thống hoạt động bằng Sphinx, được đồng nghiệp đóng góp và sử dụng rộng rãi.
Bài học:
- Chất lượng phần mềm có thể được viết dưới các ràng buộc của chính phủ.
- Sự đơn giản, rõ ràng và các công nghệ đã được chứng minh có thể giúp xây dựng các hệ thống quy mô lớn.
- Đội ngũ làm việc tích cực, sáng tạo và gắn kết là yếu tố quan trọng để thành công.
Java Language Evolution in 2025 - Inside Java Newscast #84
Video này trình bày các hướng phát triển của ngôn ngữ Java trong năm 2025, tập trung vào các cải tiến và tính năng mới được phát triển thông qua Project Amber.
Điểm chính:
- Project Amber: Giới thiệu về Project Amber và mục tiêu cải thiện Java.
- Flexible Constructor Bodies (Thân hàm tạo linh hoạt): Cho phép thực hiện các lệnh trước khi gọi
super()
hoặcthis()
trong hàm tạo. - Simplified Main (Hàm main đơn giản hóa): Giúp viết code Java dễ dàng hơn, đặc biệt là cho các script nhỏ.
- Module Imports (Nhập module): Đơn giản hóa việc quản lý và sử dụng các module.
- Primitive Patterns (Pattern cho kiểu dữ liệu nguyên thủy): Cải thiện khả năng sử dụng pattern matching với các kiểu dữ liệu nguyên thủy trong
instanceof
vàswitch
. - Deconstruction (Phân rã cấu trúc): Khám phá tiềm năng của việc phân rã cấu trúc để trích xuất dữ liệu từ các đối tượng.
- Withers: Thảo luận về việc sử dụng “withers” để tạo các bản sao của record với các giá trị đã sửa đổi.
- String Templates (Chuỗi mẫu): Cập nhật về tiến độ phát triển của tính năng chuỗi mẫu.
- Miscellaneous Work (Các công việc khác): Đề cập đến các công việc khác, bao gồm cải tiến serialization.
Tóm lại: Video cung cấp một cái nhìn tổng quan về các cải tiến quan trọng dự kiến sẽ có mặt trong Java năm 2025, giúp các nhà phát triển Java nắm bắt được hướng phát triển của ngôn ngữ và tận dụng các tính năng mới.
Valhalla - Java’s Epic Refactor
Video cung cấp một bản cập nhật chi tiết về Project Valhalla, một dự án quan trọng nhằm hiện đại hóa hệ thống kiểu của Java, mang lại hiệu năng tốt hơn và đơn giản hóa việc lập trình. Brian Goetz giải thích các tính năng mới và mục tiêu của dự án.
Protecting your time from predators in large tech companies
Bài viết đặt ra nhiều câu hỏi thú vị về tương lai của lập trình dưới tác động của AI, nhấn mạnh rằng AI sẽ thay đổi cách chúng ta viết code, nhưng vẫn chưa rõ chính xác như thế nào.
Hands-On Career: The Evolution of a Java Champion
Bài viết khám phá cách AI tạo sinh có thể hỗ trợ các nhà phát triển trong việc phát triển sự nghiệp, đồng thời nhấn mạnh tầm quan trọng của việc sử dụng AI một cách có ý thức, đánh giá kết quả cẩn thận và tiếp tục phát triển các kỹ năng cần thiết để thành công trong kỷ nguyên AI. Nó cũng nêu bật tầm quan trọng của việc hiểu rõ các hạn chế của AI và sử dụng nó như một công cụ hỗ trợ, thay vì một sự thay thế hoàn toàn cho trí tuệ con người.
Token Bucket Rate Limiter (Redis & Java)
Bài viết cung cấp hướng dẫn chi tiết về cách triển khai thuật toán Token Bucket Rate Limiter bằng Redis và Java, bao gồm cả ví dụ code, cách thiết lập môi trường kiểm thử và các test case để đảm bảo tính chính xác.
Bonus?
Huhu, đợt này hỏng có bonus nào hết nha mọi người :<