Theo dõi thời gian build của developer để quyết định có nâng cấp lên M3 MacBook hay không
(incident.io)- incident.io quyết định có thay laptop của developer sang M3 hay không dựa trên thời gian build Go thay vì cảm nhận chủ quan, và thu thập dữ liệu thực tế về vòng lặp phản hồi trong phát triển cục bộ
- Vì hot reloader Go hiện có khó cung cấp các giá trị cần thiết, họ tự xây công cụ riêng và nạp các sự kiện build như nền tảng, bộ nhớ, trạng thái nguồn điện, giai đoạn build, file kích hoạt và tổng thời gian vào data warehouse
- Sau khi lọc bỏ các bản build thất bại, bị hủy và chạy bằng pin trong khoảng 25k bản build, họ phân tích 12.525 bản build thành công và xác nhận có khác biệt thống kê rằng build khi cắm nguồn AC nhanh hơn build bằng pin
- Kết quả là người dùng M1 thường phải chờ gần 2 phút để build hoàn tất; M2 cải thiện lớn so với M1, còn M3 là cải thiện từng bước so với M2
- Với tổng thời gian build, khác biệt về bộ nhớ không rõ rệt, nhưng ở thời gian linker, máy 32~36GB có lợi thế, nên incident.io quyết định thay máy M1 bằng M3 Pro cấu hình cơ bản 36GB
Tiêu chí quyết định nâng cấp là vòng lặp phản hồi khi phát triển
- Tất cả developer của incident.io đều dùng MacBook cho công việc phát triển
- Sau khi Apple công bố M3 MacBook Pro vào tháng 10/2023, CTO Pete nói rằng sẽ thay máy nếu giá trị nâng cấp được chứng minh bằng dữ liệu
- Để quyết định có nâng cấp lên M3 hay không, đội ngũ chuẩn bị ba thứ
- Hot reloader Go tùy chỉnh
- Thu thập telemetry build từ laptop của developer
- Phân tích dữ liệu bằng model mới nhất của OpenAI và code interpreter
- Dù khó định lượng trực tiếp năng suất của developer, incident.io cho rằng vòng lặp phản hồi nhanh rất quan trọng với hiệu suất của developer
- Các vòng lặp phản hồi thường lặp lại trong phát triển cục bộ gồm
- Biên dịch monolith Go
- Sinh code như API client và interface
- Hot reload frontend và ứng dụng mobile
- Developer của incident.io chạy toàn bộ môi trường incident.io cục bộ trên laptop, duy trì vòng lặp phản hồi dưới 30 giây từ lúc đổi code đến lúc chạy
- Vì ứng dụng Go đang tiến gần tới 1 triệu dòng code, quá trình biên dịch Go vừa thường xuyên vừa tốn kém được chọn làm chỉ số so sánh hiệu năng MacBook
Cách thu thập telemetry build
- incident.io đã dùng codegangsta/gin làm hot reloader Go từ thời điểm tạo repository GitHub ban đầu
- Họ cũng xem xét các hot reloader thay thế, nhưng không tìm thấy công cụ nào cung cấp telemetry cần thiết để phân tích thời gian build
- Dữ liệu họ muốn thu thập ở mỗi bản build gồm
- Cấp hệ thống: nền tảng M1/M2/M3, tổng bộ nhớ, v.v.
- Chỉ số runtime: OS, mức sử dụng bộ nhớ, nguồn điện, dung lượng pin còn lại, v.v.
- Telemetry build: tổng thời gian, các giai đoạn build Go, file gây ra build, v.v.
- Vì không có lựa chọn có sẵn, họ tạo công cụ riêng bắt đầu từ
main.go, chạy và parse output của nhiều binary trên Mac để trích xuất giá trị cần thiếtmemory_pressuredockersysctlpmset
- Code liên quan được công bố dưới dạng Gist
- Sau khi tạo collector hệ thống và runtime, họ bọc lệnh build Go để thu thập thời gian theo từng giai đoạn như linker và compile, cùng file kích hoạt build
- Hot reloader cuối cùng chạy trong target
make runhiện có, và đây là thay đổi không hiển thị với đội ngũ engineering - Mỗi khi build kết thúc, sự kiện telemetry được gửi tới HTTP endpoint và nạp vào data warehouse bằng trình nhận webhook của Fivetran
Luồng phân tích bằng OpenAI Assistant
- Sau vài tuần tích lũy đủ dataset, họ export kết quả
select * except(payload) from developer__build_eventstừ BigQuery ra CSV - Họ cung cấp cho OpenAI Assistants một prompt mô tả mục tiêu và file CSV
- Họ bật model thử nghiệm
gpt-4-1106-previewvà code interpreter để dùng cho phân tích dữ liệu - Thời gian build biến động lớn ngay cả trên cùng một hệ thống, và ảnh hưởng cache của Go compiler cũng lớn, nên chỉ so sánh trung bình theo nền tảng sẽ không công bằng
- M3 Max không có cache có thể chậm hơn một Intel MacBook cũ có cache
- Phân tích được thực hiện không phải bằng cách so sánh trung bình đơn giản, mà bằng cách chuẩn hóa điều kiện build rồi tách theo nền tảng, bộ nhớ và trạng thái nguồn điện
Làm sạch dữ liệu và điều kiện so sánh công bằng
- Toàn bộ dataset có khoảng 25k bản build, được thu thập ở nhiều thời điểm trong ngày, trên nhiều laptop và điều kiện khác nhau
- Để so sánh nền tảng một cách công bằng, họ loại trừ các bản build sau
- Build thất bại hoặc bị hủy: vì công việc chưa hoàn tất nên không phù hợp để so sánh tốc độ build
- Build chạy bằng pin: OS X có thể giới hạn hiệu năng để kéo dài thời lượng pin
- Sau khi loại các bản build thất bại, số bản build thành công được tổng hợp là 12.525
- Chênh lệch hiệu năng build giữa nguồn AC và pin được so sánh chủ yếu trên M1 Pro và M2 Max
- Trong kiểm định thống kê, thời gian build trung bình khi cắm nguồn AC thấp hơn, với p-value khoảng 0,0014
- Các phân tích sau đó chỉ dùng bản build thành công khi cắm nguồn AC
Vì sao thời gian build Go dao động
- Monolith Go của incident.io là đối tượng được theo dõi hiệu năng build liên tục; việc loại bỏ hoặc tinh chỉnh chính quy trình build cũng quan trọng không kém mua phần cứng
- Dự án Go gồm nhiều package, và Go compiler dùng cache để chỉ biên dịch lại những package mà nó cho là có thay đổi
- Ứng dụng incident.io được thiết kế với đồ thị phụ thuộc rộng và ít module nền tảng, để phần lớn thay đổi không dẫn tới biên dịch lại toàn bộ đồ thị
- Loại build có thể chia đại khái thành bốn nhóm
- Hoàn tất tức thì, dưới 3 giây: thay đổi không liên quan đến Go compiler, có thể dùng binary đã cache
- Build nhanh, dưới 30 giây: thay đổi một package đơn lẻ có ít package phụ thuộc, phần lớn cache được tái sử dụng, thời gian chủ yếu nằm ở link
- Build trung bình, 30 giây~1 phút: sửa package tính năng có một số phụ thuộc cấp dưới, nhưng phần lớn vẫn có thể tái sử dụng
- Build chậm, trên 1 phút: thêm type vào package nền tảng
domain, khiến mọi package của ứng dụng phải được biên dịch lại
- So sánh nền tảng cần xét tới các khác biệt về tính chất build như vậy; nếu trộn mọi bản build lại với nhau sẽ thành so sánh khập khiễng
Kết quả so sánh M1, M2, M3
- Trước tiên, họ so sánh M1 Pro và M2 Max chỉ với các bản build thành công khi cắm nguồn AC
- M2 Max vượt M1 Pro đáng kể về tốc độ build, nhưng hai máy khác nhau không chỉ về chipset mà cả cấu hình bộ nhớ
- Phân bố sự kiện build thành công theo nền tảng và bộ nhớ như sau
- Apple M1 Pro 16GB: 5.235 bản
- Apple M2 Pro 16GB: 1.927 bản
- Apple M2 Max 32GB: 3.842 bản
- Apple M3 Pro 18GB: 321 bản
- Apple M3 Pro 36GB: 899 bản
- Apple M3 Max 36GB: 301 bản
- So sánh M1 Pro 16GB và M2 Max 32GB không hoàn toàn công bằng do khác biệt bộ nhớ
- Khi so sánh M2 Pro 16GB và M2 Max 32GB, ảnh hưởng của 32GB bộ nhớ tới tổng thời gian build có vẻ nhỏ
- M2 Pro và M2 Max nhìn chung dùng cùng một chip, trong đó Max có thêm 2 core tiết kiệm năng lượng
- Các core này chỉ đạt khoảng 1/5 so với core hiệu năng, nên được cho là đóng góp nhỏ vào việc compile chương trình Go
- Để đánh giá M3, họ mua ba máy sau
- M3 Pro 12-core, 6 core hiệu năng + 6 core tiết kiệm năng lượng, 18GB
- M3 Pro 12-core, 6 core hiệu năng + 6 core tiết kiệm năng lượng, 36GB
- M3 Max 14-core, 10 core hiệu năng + 4 core tiết kiệm năng lượng, 36GB
- Biểu đồ thời gian build của M3 Pro 18GB và 36GB tương tự nhau, nhưng dữ liệu M3 ít hơn các nền tảng khác
- Khi loại các bản build rất nhanh dưới 3 giây và so sánh M3 Pro với M3 Max, M3 Max không cho thấy cải thiện nổi bật đủ để biện minh cho mức giá cao hơn 60% so với M3 Pro cơ bản
- Đánh giá tổng thể như sau
- Người dùng laptop M1 thường phải chờ gần 2 phút để build hoàn tất
- M2 là nâng cấp lớn so với M1
- M3 là cải thiện từng bước so với M2
- Người dùng M1 sẽ nâng cấp lên M3 Pro cơ bản
- Người dùng M2 không cần nâng cấp
Bộ nhớ thể hiện rõ hơn ở thời gian linker
- Khi so sánh tổng thời gian build, việc tăng từ 16~18GB lên 32~36GB không cho thấy cải thiện đáng kể rõ ràng
- Vì hiệu ứng bộ nhớ không hiện rõ trên biểu đồ như dự đoán, họ phân tích riêng thời gian linker trong các giai đoạn build
- Sự kiện telemetry có chứa thời gian của giai đoạn link và compile; họ tạo cột
linker_timetừbuild_stages.link.duration_secondsđể phân tích - Khi so sánh
linker_timetheo nền tảng và cấu hình bộ nhớ, một mẫu hình khác xuất hiện- Các máy M1, M2, M3 có bộ nhớ 32~36GB gần như luôn hoàn tất link trong dưới 20 giây
- Máy có bộ nhớ 18GB trở xuống thường gặp trường hợp link vượt quá 20 giây
- Việc thêm bộ nhớ tuy kém rõ ràng hơn ở tổng thời gian build, nhưng được xác nhận là hữu ích trong giai đoạn linker
- Họ cũng đang xem xét phương án loại Docker khỏi máy phát triển; với máy ít bộ nhớ, việc tăng bộ nhớ hệ thống khả dụng khi không có Docker có thể cải thiện thời gian link
- Trong phát triển ứng dụng mobile, simulator dùng nhiều bộ nhớ hệ thống, nên họ cho rằng nâng RAM cũng hợp lý như một khoản chi cho tương lai
Quyết định cuối cùng và tác dụng phụ
- incident.io quyết định nâng cấp máy M1 lên M3 Pro cấu hình cơ bản với 36GB bộ nhớ
- Máy M2 vốn đã có hiệu năng đủ tốt nên tạm thời không nâng cấp
- Ngoài quyết định mua laptop, họ cũng hiểu thêm về môi trường và công cụ phát triển
- Kết quả đội ngũ thu được gồm
- Tìm ra thời gian build Go là benchmark tốt để đo hiệu năng máy developer
- Tự xây hot reloader Go theo dõi các metric cần thiết, đồng thời có thêm cải thiện về khả dụng
- Hiểu rõ hơn những yếu tố khiến build Go nhanh hoặc chậm
- Xác nhận có thể dùng OpenAI Assistants cho các bài toán phân tích dữ liệu tương tự
- Định lượng mức cải thiện của các dòng chip Apple từ góc nhìn developer Go
- Bộ nhớ quan trọng, nhưng thể hiện rõ hơn ở thời gian linker so với tổng thời gian build
1 bình luận
Ý kiến trên Hacker News
Bài viết rất hay và tôi cũng thích cách thu thập, phân tích dữ liệu khá đa dạng, nhưng có lẽ sẽ dễ và chính xác hơn nhiều nếu đặt các laptop cạnh nhau rồi chạy build có đo thời gian trong cùng một kịch bản
Có thể so sánh vài trường hợp như build toàn bộ, build gia tăng cho các thay đổi gần đây, build gia tăng cần build lại một mô-đun cụ thể; hoặc có lẽ chỉ trong một ngày là viết được script lần lượt áp dụng 100 commit Git gần nhất và đo thời gian build gia tăng
Nếu gom thống kê toàn công ty thì độ lệch có thể lớn. Ví dụ, nhân viên mới có khả năng dùng M3, nhân viên lâu năm dùng M1; nhân viên mới thường tạo nhiều thay đổi nhỏ hơn, còn người có kinh nghiệm xử lý các phần sâu trong code hoặc những khu vực phức tạp hơn nên thời gian build có thể dài hơn
Vì vậy bản phân tích tự thân rất tuyệt, nhưng xét đến các thiên lệch vốn có trong mẫu, tôi nghĩ trước khi xây kiến trúc thu thập dữ liệu toàn công ty thì nên bắt đầu bằng cách đơn giản: benchmark các commit gần đây trên từng laptop
Lý do thu thập dữ liệu này không chỉ là để so sánh giữa các thiết bị, mà còn để tích lũy dữ liệu lịch sử về thời gian build của lập trình viên và liên tục đo hiệu năng build nhằm phát hiện hồi quy
Khi thấy thời gian build tăng lên, chúng tôi thường điều chỉnh cấu trúc codebase để build nhanh hơn
M3 có thể build nhanh hơn M1 30%, nhưng build qua mạng nhanh hơn 15 lần. Có thể cân nhắc liệu đáng ra nên đầu tư vào build qua mạng thay vì cấp M3 cho lập trình viên hay không
Họ đã làm kiểm định t trên dữ liệu không được lấy mẫu độc lập; nhiều điểm dữ liệu đến từ những người khác nhau, và mỗi người làm các tác vụ khác nhau nên nhu cầu tính toán có thể khác, tạo ra yếu tố gây nhiễu. Điều này vi phạm giả định cơ bản của kiểm định t, nhưng trình thông dịch code đã không chỉ ra
Thay vào đó, có thể dùng mô hình hiệu ứng hỗn hợp tuyến tính, đưa các yếu tố như chủ sở hữu laptop, thâm niên làm hiệu ứng ngẫu nhiên
Dù vậy dữ liệu tự nó vẫn thú vị, đặc biệt là phần RAM. Cache rất mạnh, và nhiều RAM mang lại lợi ích lớn hơn mọi người thường nghĩ. Một chiếc MacBook có nhiều RAM hơn mức thường cần sẽ dùng phần lớn RAM dư để làm cache
Thu thập khoảng một tuần là có thể có được một lát cắt về tải công việc thực tế; các build đó có thể được chạy lặp lại trên từng hạng phần cứng và sau này cũng tái sử dụng được cho phần cứng mới
Với tư cách một nhà khoa học, tôi thấy cách các lập trình viên máy tính xử lý dữ liệu khá thú vị
Họ vẽ biểu đồ đẹp, tự động hóa phân tích rất nhanh bằng ChatGPT, và ChatGPT đưa ra một kiểm định t nghe khá hợp lý
Nhưng có biến động theo dung lượng bộ nhớ và loại chip mà lại không nghĩ đến hồi quy tuyến tính, đồng thời vẽ các histogram khó so sánh. Có thể bổ sung trung bình đơn giản và thanh lỗi, hoặc dùng hàm phân phối tích lũy (CDF) để dễ thấy độ chồng lấn hay dịch chuyển
Nói chung, người ta xử lý dữ liệu theo cách công cụ hiển thị, điều này cũng khá liên quan đến các bộ sản phẩm phần mềm phân tích, phân tích hiệu năng và khả năng quan sát
Kỳ vọng một kỹ sư phần mềm trung bình phải biết CDF cũng giống như kỳ vọng họ phải biết quaternion trong đồ họa 3D hay các nền tảng viết shader
Hoặc cũng có thể dùng hồi quy phân vị. Nếu có giả thuyết M3 > M2 > M1 thì kiểm định Jonckheere–Terpstra nổi tiếng cho các trung vị có thứ tự có lẽ rất hợp với kiểu phân tích quyết định này
Có thể xem ví dụ ở biểu đồ cuối trang này: https://ggplot2.tidyverse.org/reference/stat_ecdf.html
Phân tích rất chắc chắn, nhưng từ trải nghiệm cá nhân, tôi muốn đưa ra một cảnh báo
Ở một công ty phần mềm cỡ vừa khoảng 2.000 nhân viên, chúng tôi đã cố nâng cao năng suất phát triển và từng tìm hiểu phương án chuyển stack phát triển lên các instance AWS thay vì mua laptop mới
Kết quả là nó trở thành một dự án kéo dài nhiều năm với khoảng 4 developer làm toàn thời gian, và nhìn lại thì lợi ích không xứng với chi phí. Việc tái hiện trải nghiệm phát triển hoàn toàn local trên cloud vẫn còn quá khó
Vì vậy tôi nghĩ nâng cấp laptop là lựa chọn tốt hơn
Code nằm trên laptop, nhưng được đồng bộ theo thời gian thực với các service remote mà không cần Docker build hay deploy K8s, nên cảm giác thật sự như local
Đặc biệt, có thể chạy ngay các bài test từ mức integration test trở lên trong lúc code, tránh được vòng lặp commit-push-pray
Chúng tôi dùng Garden(https://docs.garden.io) cho việc này. Dù có dùng Garden hay không, nếu có công cụ phù hợp thì việc tận dụng sức mạnh của cloud trong vòng lặp phát triển nội bộ có thể rất tuyệt
Bài viết ghi lại thêm trải nghiệm: https://thenewstack.io/one-year-of-remote-kubernetes-develop...
Nhiều thứ từng không thể làm được với phiên bản chỉ local nay cũng khả thi. Ví dụ khi chuyển qua lại giữa nhiều branch, thay vì đổi file local thì đổi máy, độ trễ khi chuyển ngữ cảnh thấp hơn nhiều
Khi phải dựng hơn 200 bộ phận để làm một việc gì đó, ngay cả việc xử lý một phần đơn lẻ chỉ tương tác với vài phần cũng trở nên khó
Trong thời đại đã có server 128 core trở lên, 256 thread trở lên, tôi ngày càng nghiêng về suy nghĩ rằng với phần lớn phần mềm, quay lại monolith là tốt hơn
Đúng là lãng phí tiền bạc và thời gian. Có thể thấy việc hook mọi system call bằng phần mềm rác của vendor có hại cho toolchain kiểu Unix vốn chạy rất nhiều subprocess
Ở các công ty công nghệ lớn như Google, Meta, môi trường phát triển nằm trên cloud đối với phần lớn kỹ sư phần mềm
Đó là trải nghiệm phát triển tốt hơn local rất nhiều
Kết luận tôi tự khảo sát, có tính cả chi phí, cho phát triển iOS là như sau
M2 Pro tốt, nhưng mức cải thiện so với M1 Pro 10 core không quá lớn. Theo XcodeBenchmark là 136 giây so với 120 giây: https://github.com/devMEremenko/XcodeBenchmark
M3 Pro có cảm giác bị làm yếu đi để tách biệt với M3 Max, và vì chỉ có 6 performance core nên thực chất khá giống M2 Pro
Cuối cùng tôi đã mua một chiếc M1 Pro 10 core đã qua sử dụng nhẹ và rất hài lòng. Với chi phí chưa bằng một nửa giá M3 Pro bản cơ bản, tôi có được 85% hiệu năng; tôi cũng tính đến việc thông thường CPU phải nhanh hơn ít nhất 33–50% thì mới cảm nhận được khác biệt
Nó hiệu quả hơn M2 Pro rất nhiều trong khi hiệu năng nhỉnh hơn một chút. Ở laptop, đó là điều tôi muốn, còn băng thông bộ nhớ thì tôi không có mấy dịp dùng đến
Không có khác biệt lớn như trong bài này. Có thể tùy ngôn ngữ hoặc dự án, nhưng khi benchmark cùng một lệnh compile đặt cạnh nhau, tôi không thấy chênh lệch lớn như vậy
Toolchain compile khác nhau nên cũng không đáng ngạc nhiên, và ngay cả với Go toolchain cũng có thể thấy các thông số cụ thể tác động khác nhau lên từng giai đoạn build, chẳng hạn bộ nhớ bổ sung giúp hiệu năng linker
Tôi cũng đã nhiều lần thấy phản ứng rằng hiệu năng M3 bị giới hạn một cách kỳ lạ, hy vọng điều đó sẽ không tiếp diễn ở các mẫu từ M4 trở đi
Có 120Hz cũng tốt, nhưng có lẽ nó sẽ không xuất hiện trên các laptop Air
Tôi từng là người đóng góp cốt lõi cho Chromium và Node.js, hiện là người đóng góp cốt lõi cho gRPC Core/C++, nhưng chưa bao giờ thấy thời gian build là điều khiến mình quá bận tâm
Có “build tương tác”, tức build tăng dần để chạy lại các unit test liên quan trong lúc làm việc, và build không tương tác, tức chạy rồi đi uống cà phê hoặc đọc email. Tôi chưa từng thấy việc đổi phần cứng biến một build không tương tác thành tương tác
Máy cá nhân của tôi là Intel i7 đã hơn 5 năm tuổi với 16GB RAM, và khi biết cần thêm bộ nhớ để link Node.js trên WSL, tôi đã gắn thêm 16GB
Laptop công việc là Intel MacBook Pro có Touch Bar, và tôi không nghĩ nó ảnh hưởng lớn đến năng suất. Điều quan trọng là kích thước và chất lượng màn hình, cùng tốc độ lưu trữ. So với tiến bộ CPU, hệ thống build như tốc độ build tăng dần và hỗ trợ build phân tán có tác động lớn hơn. Với dự án cá nhân tôi dùng Bazel
Compile và link thực ra nên xong gần như tức thì, nhanh đến mức bạn không cảm thấy có bước compile
Release build có các kỹ thuật như tối ưu hóa toàn chương trình thì lâu cũng được, nhưng vòng lặp compile/debug/test thông thường có thể tức thời. Việc compile của các ngôn ngữ hệ thống chậm đến khó tin vì lý do legacy, nhưng không nhất thiết phải như vậy
Vì mất nhiều thời gian chỉnh file BUILD, tôi tự hỏi liệu nó có đáng giá hơn một Makefile bình thường không. Đó là chuyện 3 năm trước, nên có thể hệ sinh thái public hiện giờ đã tốt hơn
Tốc độ lưu trữ thì tôi không rõ, và toàn bộ build của chúng tôi đều chạy trên các máy phát triển từ xa rất mạnh
Với những người muốn phân tích dữ liệu bằng AI như trong bài viết, tôi nghĩ đưa dữ liệu vào R hoặc Stata rồi tự truy vấn sẽ dễ hơn nhiều
Lệnh ngắn hơn, chính xác hơn, và quan trọng nhất là khả năng tái lập cao hơn
Phần khó nhất trong phân tích dữ liệu là hiểu dữ liệu và cơ chế đã tạo ra nó. Để làm được vậy cần có mô hình nhân quả của miền vấn đề
Nếu AI chưa được huấn luyện trước trên các dữ liệu khác của lĩnh vực đó, tôi không rõ nó có thể tạo ra mô hình nhân quả hữu ích hay không. Không có mô hình đó thì không thể diễn giải dữ liệu một cách hợp lý, và tôi cũng tò mò liệu các mô hình AI hiện tại có phát hiện được nhiễu, ảnh hưởng quá lớn của outlier, hay các biến điều tiết hiệu ứng thú vị hay không
Khi tôi làm thì dùng Python và pandas, và có thể yêu cầu nó cho xem code đã dùng để phân tích
Khác biệt là giữa việc đưa dữ liệu vào R/Python rồi tìm “làm xyzzzy thế nào” để tự viết code, hoặc dùng ChatGPT
Phần “mọi developer chạy cục bộ một môi trường incident.io hoàn chỉnh trên laptop, và có vòng phản hồi dưới 30 giây từ thay đổi code đến khi chạy” có vẻ là thành quả lớn nhất
Ngoài vài lần hỗ trợ startup trong thời gian ngắn, tôi chưa từng thấy công ty nào có thể chạy toàn bộ môi trường dev/instance cục bộ của công ty trên một máy
Luôn có thứ gì đó không thể truy cập, và luôn có bẫy
Tôi không hiểu vì sao mọi người không tức giận hơn với trải nghiệm developer tệ hại như vậy. Có vẻ các bạn mới ra từ đại học ngày nay không biết mình đang bỏ lỡ điều gì
Người chưa sống trong thế giới đó không hiểu nó tốt hơn đến mức nào và sẽ hợp lý hóa theo đủ mọi cách
Tuy nhiên năm ngoái chúng tôi thêm Snowflake; nó thực sự giải quyết được vấn đề, nhưng phát triển lặp lại cho phần đó thì rất đau đớn
Nó tuyến tính theo số dịch vụ cần hỗ trợ, và cũng tuyến tính theo số kỹ sư cần hỗ trợ. Rồi xuất hiện nhiều use case khác nhau không khớp nhau, chẳng mấy chốc đội hạ tầng trở thành nút thắt cho việc ra mắt tính năng, và mọi người bắt đầu dùng các cách riêng
Khi chiếc hộp Pandora đó đã mở thì gần như không thể quay lại. Dù vậy, rút chu kỳ phát triển từ vài giờ/vài ngày xuống vài phút quan trọng hơn nhiều so với giảm vài phút đi 25%
Cho đến giờ mọi thứ vẫn ổn
Với tư cách tác giả bài viết, cảm ơn vì đã đăng
Bài có nhiều nội dung như profiling quá trình compile Go, xây hot reloader, phân tích dataset build bằng AI, v.v.
Kết luận là M1 đáng nâng cấp lên M3 Pro, còn trong thử nghiệm Max không tạo ra khác biệt lớn. M2 khá gần M3 nên với chúng tôi không đáng nâng cấp
Nếu có câu hỏi tôi có thể trả lời
Tôi cũng tò mò chi phí đó ảnh hưởng thế nào đến thời gian hoàn vốn
Hoặc cũng có thể công việc kết thúc quá nhanh nên trong sử dụng thực tế không tạo khác biệt
Ý tưởng thì thú vị, nhưng chất lượng phân tích dữ liệu có vẻ khá thấp và tôi không chắc liệu có thực sự học được điều mình đang nghĩ hay không
Đặc biệt, rất khó hiểu vì sao khi chuyển từ M1 Pro sang M2 Pro, các bản build dưới 20 giây lại tăng mạnh đến vậy. Trong tác vụ biên dịch code, chênh lệch hiệu năng thực tế giữa hai máy vào khoảng 20–25%
Việc máy M3 có ít bản build dưới 20 giây hơn máy M2, hay M3 Pro với số nhân chỉ bằng một nửa lại có nhiều bản build dưới 20 giây hơn M3 Max, cũng không hợp lý lắm
Nhiều khả năng khác biệt trong hành vi của lập trình viên, chẳng hạn những người dùng các loại laptop khác nhau thường làm những việc khác nhau, đã tạo ra các chênh lệch này
Một vài quan sát sau khi đọc lướt: có vẻ trình biên dịch Go không tận dụng thêm nhân CPU được nhiều; cách gộp dữ liệu về cơ bản khá bất tiện; cách so sánh cũng thiếu nhất quán vì trộn histogram với biểu đồ mật độ chia theo khoảng, và phạm vi trục y cũng khác nhau
Mac không throttle hiệu năng CPU chỉ vì đang dùng pin. Nếu build thực sự chậm hơn khi chạy pin thì chỉ nhìn biểu đồ khó mà chắc chắn, nhưng có lẽ là do đã bật thiết lập “Low Power”
Hơi lạc đề một chút, nhưng tôi tò mò các công ty khác cân bằng giữa quản lý endpoint, phần mềm bảo mật và năng suất của lập trình viên như thế nào
Công ty chúng tôi đang chạy hơn 5 dịch vụ nền trên cả Mac lẫn Windows của laptop lập trình viên. Bao gồm quản lý endpoint, chặn/can thiệp việc nâng quyền, chặn và kiểm tra TLS, chống mã độc, và VPN client
Tổ hợp này ảnh hưởng lớn đến hiệu năng. Dù làm gì trên máy, các dịch vụ này cũng ngốn CPU và hiệu năng I/O, và các lập trình viên đã phàn nàn về tình trạng máy ngẫu nhiên bị đơ và khựng
Xét việc ransomware và đánh cắp sở hữu trí tuệ đang gia tăng, tôi hiểu là cần có bảo mật, nhưng tôi tò mò liệu có công ty nào đã tìm được cách tốt hơn để cung cấp bảo mật mà ít ảnh hưởng hơn đến năng suất của lập trình viên không