1 điểm bởi GN⁺ 5 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Các công cụ AI đã nâng cao năng suất phát triển và năng lực đội ngũ, nhưng chất lượng và độ ổn định của phần mềm lại không cải thiện tương xứng, khiến người dùng bắt đầu mặc định rằng trải nghiệm sau mỗi bản cập nhật sẽ tệ hơn
  • Những lỗi thường ngày như ứng dụng ngân hàng liên tục yêu cầu xác thực FaceID, Slack chiếm mất focus, đăng ký bảo hành LG thất bại, lỗi hệ thống thông tin giải trí trên ô tô… đang cản trở tài chính, công việc, hỗ trợ khách hàng và việc lái xe
  • Khác với quá khứ đơn giản hơn, các tầng trừu tượng mới, framework frontend và độ phức tạp hạ tầng đã tích tụ; kết hợp với tiêu chuẩn trải nghiệm người dùng ngày càng cao, hệ thống ngày càng trở nên mong manh
  • Dù có các mô hình mới nhất và ngân sách token dồi dào, việc cải thiện độ ổn định khó nổi bật trong KPI hay tài liệu thuyết trình, nên doanh nghiệp ưu tiên tính năng mới và thiết kế lại thay vì sửa lỗi
  • Trong khi các công ty tích lũy nợ AI, lập trình viên cá nhân có thể thử sức với những phần mềm trước đây khó tự làm; sự phản kháng đối với macOS và Windows có khả năng lan sang việc cải thiện phần mềm hằng ngày

Trải nghiệm người dùng vẫn tệ đi trong kỷ nguyên AI

  • Giữa cơn sốt AI, mọi người tiêu tốn token quá mức để giành lấy giá trị thị trường trước khi mọi thứ bị tự động hóa
    • Nỗi bất an tăng lên bởi hiệu năng mô hình cải thiện, các đợt sa thải lập trình viên liên tiếp và dự đoán rằng AI sẽ viết 100% mã nguồn vào cuối năm
  • Kỷ nguyên agent hứa hẹn năng suất và chất lượng cao hơn
    • Các công cụ mới đã thay đổi cách tạo ra và sử dụng phần mềm
    • Ban lãnh đạo yêu cầu đội ngũ tạo ra nhiều đầu ra hơn, và năng lực trung bình của các nhóm phần mềm có lẽ cũng đã tăng lên một mức khác trước
  • Tuy nhiên, nhiều sản phẩm thực tế thậm chí không đảm bảo được độ ổn định cơ bản
    • Ứng dụng ngân hàng trung bình yêu cầu đăng nhập FaceID ba lần trước khi màn hình xác nhận 3D Secure xuất hiện
    • Slack cho macOS mở lên muộn rồi cướp focus của Ghostty, khiến lệnh git pull đang gõ trong terminal bị gửi vào chat nhóm
    • Đăng ký bảo hành tủ lạnh LG thất bại ở bước gửi cuối cùng của một biểu mẫu nhiều bước với vô số trường, và chỉ khi kiểm tra console JavaScript mới biết có lỗi
    • Hệ thống thông tin giải trí trên ô tô khởi động lại mỗi lần lái sau bản cập nhật; âm thanh xi-nhan biến mất hoặc radio mở thay vì Google Maps, còn thao tác chạm trên màn hình cũng bị trễ 1–2 giây
    • Lỗi trên ô tô không chỉ là bất tiện UX đơn thuần mà còn làm giảm sự tập trung khi lái xe
  • PM của đội thiết kế lại OS ô tô đã tự chúc mừng thành quả trên LinkedIn, nhưng người dùng thực tế vẫn phải vật lộn với sản phẩm
  • Các đội này có khả năng dùng các mô hình mới nhất và ngân sách token dư dả, và LLM cũng có thể thể hiện rất tốt trong việc sửa lỗi nếu được trao cơ hội

Cấu trúc nơi độ phức tạp và KPI đẩy chất lượng ra rìa

  • Phần mềm luôn có lỗi, và nỗi hoài niệm rằng thời macOS Snow Leopard hoàn toàn ổn định cũng pha trộn ký ức chọn lọc
    • Nếu phần mềm ngày trước tốt hơn, lý do chính là vì nó đơn giản hơn hiện nay rất nhiều
    • Sau đó, các tầng trừu tượng mới, framework frontend và nhiều độ phức tạp hạ tầng hơn đã được thêm vào
    • Tiêu chuẩn trải nghiệm người dùng tiếp tục tăng, nhưng toàn bộ hệ thống lại càng mong manh hơn
  • Các bản cập nhật của macOS và những ứng dụng phụ thuộc vào nó đã trở thành điều đáng lo hơn là đáng mong đợi, và người dùng trước hết dự đoán khả năng phiên bản mới sẽ tệ hơn phiên bản cũ
  • Vấn đề nằm ở việc ưu tiên dùng AI vào đâu hơn là bản thân AI
    • Hạ tầng GPU đã trao cho lập trình viên năng lực mạnh mẽ, nhưng chưa được dùng đủ để tạo ra phần mềm tốt hơn
    • Các công ty phần mềm từ lâu đã vận hành xoay quanh KPI, và cải thiện độ ổn định có thể không được phản ánh trực tiếp bằng con số
    • Một kế hoạch dừng tính năng mới và thiết kế lại trong một quý để chỉ tập trung sửa lỗi khó có thể nổi bật trong tài liệu thuyết trình
  • Nếu thứ tự ưu tiên này không thay đổi, chất lượng phần mềm suy giảm chắc chắn sẽ tiếp diễn

Cơ hội mở ra cho lập trình viên cá nhân

  • Trong khi các công ty tập thể rơi vào nợ AI, lập trình viên cá nhân có cơ hội xây dựng những phần mềm mà trước đây nằm ngoài khả năng của họ
  • Kỳ vọng dành cho Android Auto trên ô tô hay website LG không cao, nhưng sự bất mãn tích tụ với tình trạng hiện tại có thể trở thành động lực cải thiện phần mềm hằng ngày
    • Một phong trào phản kháng trước tình trạng hiện nay của macOS và Windows đã xuất hiện
    • Có thể kỳ vọng xu hướng này lan rộng ra toàn bộ stack phần mềm

1 bình luận

 
Ý kiến trên Hacker News
  • Trước đây, người ta cập nhật với sự háo hức xem sẽ có tính năng mới miễn phí nào, và còn tìm hiểu các thay đổi của Fedora Workstation 45, nhưng giờ thì mỗi lần cập nhật điện thoại, TV, ô tô hay hệ điều hành không phải Linux đều khiến họ thấy lo trước
    Họ lo lại có thêm những tính năng không mong muốn và kết nối ra bên ngoài; macOS thì từ lâu đã làm mất cảm giác mong đợi, chẳng hạn bắt người dùng phải tìm một đường viền trong suốt nhỏ xíu để thay đổi kích thước cửa sổ
    Windows 11 dường như dùng dark pattern kiểu sau bản cập nhật bảo mật lại gợi ý bật lại các tính năng kết nối không mong muốn hoặc tính năng AI

    • Giờ hễ thấy biểu tượng “đang chờ cập nhật” là người ta lo trước xem lần này nó sẽ làm hỏng thứ gì
      Ngoại trừ trò chơi điện tử, gần như mọi bản cập nhật phần mềm đều gây khó chịu; ngay cả Dead By Daylight thì điều an ủi cũng chỉ là sự kém cỏi của nhà phát triển Behaviour vẫn bị giới hạn bên trong trò chơi
    • Phần mềm mà người dùng không sợ cập nhật là phần mềm tự do và nguồn mở (FOSS)
      Phần mềm độc quyền không còn được làm vì người dùng nữa, nhưng một số FOSS vẫn đặt người dùng lên trước
    • Bản thân bản cập nhật bảo mật tích lũy của Windows không chứa tính năng hệ điều hành mới, và trên bản Pro, ít nhất trước đây còn có thể bỏ qua các bản cập nhật chất lượng/tính năng
      Thay vào đó, họ phân phối “trải nghiệm được kết nối” qua các gói Store/AppX tự động cập nhật, rồi chạy OOBE sau khi khởi động lại sau bản vá để lại gợi ý hoặc kích hoạt tính năng
      Về mặt kỹ thuật thì không gắn vào bản cập nhật bảo mật, nhưng vẫn là dark pattern phớt lờ người dùng
  • Những công cụ này kết hợp với văn hóa “di chuyển nhanh và phá vỡ mọi thứ” của Silicon Valley đã đẩy kỳ vọng của ban lãnh đạo về sản lượng của đội ngũ lên cao, và việc gánh các kỳ vọng đó là điều khổ sở nhất

  • Phần mềm có thể được tạo ra nhanh, nhưng để có niềm tin rằng nó đúng thì cần thêm thời gian
    Nhờ AI tạo mã, một kỹ sư giàu kinh nghiệm có thể làm trong một giờ việc trước đây mất một tuần, nhưng nó không rút ngắn được thời gian kiểm chứng tính đúng đắn
    Nhiều lập trình viên chỉ nhận lấy lợi ích về tốc độ sinh mã, còn phớt lờ chi phí xác nhận độ ổn định, hiệu năng và không lỗi; tuy vậy, chất lượng phần mềm đại chúng đi xuống đã diễn ra từ trước AI

    • Nếu giả định cùng một mức chất lượng, việc rút 1 tuần xuống còn 1 giờ gần như là trường hợp tối ưu cực đoan; thông thường có vẻ giống việc làm trong một giờ thứ vốn mất hai, ba giờ hơn
      Hiệu quả thay đổi rất lớn tùy tác vụ, không mở rộng tuyến tính trong các dự án dài hạn, và đôi khi AI còn gây chậm trễ lớn hơn
      Nếu bỏ qua chất lượng thì có thể đạt tốc độ khủng khiếp, nhưng ngay cả không có AI, chỉ cần không quan tâm chất lượng cũng đã nhanh hơn nhiều
    • Điều tạo niềm tin không phải là thời gian phát triển mà là thời gian nó đã hoạt động trong thực tế
      Dù phát triển lâu đến đâu, kết quả chạy tốt tại hiện trường trong 3 tháng vẫn đáng tin hơn, nên cần phát hành sớm và thường xuyên
  • Chất lượng phần mềm luôn bị chi phối bởi động lực thị trường, và AI không tự động tạo động lực để làm phần mềm vững chắc
    Thị trường thưởng cho việc chọn sản phẩm một cửa của Microsoft hơn là các ứng dụng không hỏng sau mỗi lần cập nhật hay tổ hợp nhiều giải pháp độc lập
    Trước đây chỉ là do hiệu năng máy tính và kiến thức còn thiếu nên chưa làm được như vậy; giờ đây có thể nói ngành này đã tìm ra các điều kiện tối thiểu để phần mềm chỉ vừa đủ đứng vững, cùng giới hạn của những bất tiện lặt vặt mà người dùng sẽ chịu đựng

    • Liệu việc giữ mọi người mãi ở trạng thái ngay trước khi rời bỏ hoặc chịu thiệt hại có phải là điểm cân bằng đáng để xã hội chấp nhận hay không là điều đáng nghi
    • Khi độ hoàn thiện và chính xác đạt khoảng 90–99%, đường cong chi phí tăng vọt theo tiệm cận, nên từ góc độ lợi nhuận thì không còn đáng đầu tư
      Chỉ khi rủi ro trách nhiệm pháp lý do lỗi gây ra đủ lớn thì phần mềm hoàn chỉnh và chính xác mới được tạo ra
    • Điều đáng tò mò là ngưỡng thực tế nằm ở đâu, khi người dùng tiếp tục tiêu thụ dù chấp nhận chất lượng giảm cho đến lúc dừng lại và nói “thế là đủ rồi”
  • Wayland của KDE Plasma có thiết lập toàn cục để kiểm soát cửa sổ nào được phép cướp focus, và hoạt động rất tốt
    Mỗi lần dùng Mac cho công việc hoặc PC Windows lại thấy nhớ tính năng này; tài liệu có ở mục “Focus stealing prevention”: https://docs.kde.org/trunk_kf6/en/kwin/kcontrol/windowbehavi...

    • Cách chắc chắn để tránh phần mềm ngày càng tệ là chuyển sang FOSS và Linux/KDE
      Đó là một môi trường giống như Windows 7 vẫn tiếp tục được cải thiện chậm rãi và bổ sung thêm mức độ hoàn thiện hữu ích
      NixOS có một vấn đề lâu năm là tải thư viện theo n² khiến chương trình GUI khởi động chậm, nhưng ngay cả trên mini PC N100 thì mọi thứ cũng chạy trong khoảng 1 giây, và xử lý mượt cả màn hình 4K 240Hz HDR
      Quan trọng nhất là máy tính chỉ làm đúng những gì bạn ra lệnh
    • Không hẳn macOS không có tính năng chống cướp focus, mà có vẻ nhà thiết kế chưa từng hình dung tình huống ứng dụng khởi chạy bị trễ
      Nếu người dùng chờ rồi nhập vào nơi khác, đó có thể là tín hiệu rằng họ không còn muốn ứng dụng kia nhận focus nữa, nhưng thiết kế dường như chỉ giả định kịch bản lạc quan rằng ứng dụng sẽ mở ngay lập tức
    • Điều khổ sở nhất trong công nghệ ngày nay là tính khó đoán khi giao diện thay đổi đúng lúc người dùng sắp bấm
      Từ gợi ý từ trên bàn phím cảm ứng đổi ngay trước khi ngón tay chạm tới, đến iOS Liquid Glass hay các web app bất ổn khiến cả nút bấm cũng di chuyển
      Popup và những lời kêu gọi tương tác kiểu “Bạn có thích ứng dụng này không?” cũng tràn lan
      Việc Windows cướp focus đã là vấn đề từ năm 1995, và các thay đổi đột ngột lặp lại theo đơn vị 100ms liên tục kích thích phản xạ giật mình của cơ bắp và hệ viền, đến mức vài giờ sau cơ thể có thể run lên
      Cần dừng những kích thích kiểu máy đánh bạc và các chỉ số tương tác nhắm vào số lượt nhấp, để người dùng có thể tập trung làm việc
    • Đây là một tính năng tuyệt vời, nhưng hiện có lỗi khiến các mức ngăn chặn cao hơn “Low” chặn quá mạnh: https://bugs.kde.org/show_bug.cgi?id=509990
    • Trên Windows, khi Slack tải ở nền và sẵn sàng, nó chỉ nhấp nháy biểu tượng trên thanh tác vụ, nên không cướp focus của ứng dụng hiện tại cho đến khi người dùng tự chuyển sang
  • Khi người dùng đang nhập liệu hoặc tương tác với UI, mặc định phải có cơ chế debounce chống chiếm focus để ứng dụng khác tuyệt đối không thể giành focus
    Dù có dùng popup, âm thanh hay biểu tượng nhấp nháy, cũng không được để một ứng dụng không liên quan đến việc đang làm chặn lấy input
    Cũng không phải chuyện cần đòi ngoại lệ chỉ vì đã kết nối sau khi bấm nút kết nối như Cisco AnyConnect, và cũng như ta không chấp nhận việc ứng dụng terminal cướp STDIN, GUI cũng không nên cho phép điều đó

    • Thực tế hầu như không có tình huống nào người dùng muốn focus tự động bị lấy mất, vậy mà không hiểu vì sao hành vi này lại là mặc định và thường xuyên xảy ra
    • macOS cũng có thể để ứng dụng mới mở nằm ngoài focus, và điều này xảy ra nhất quán khi laptop lâu ngày không khởi động lại
      Có thể là bug, nhưng nếu người dùng đã bấm sang cửa sổ khác trước khi ứng dụng khởi chạy xong thì đó ngược lại có thể là một tính năng hợp lý
    • Hàng đợi sự kiện của hệ điều hành hoạt động xuyên qua các process và cửa sổ, nên khó debounce việc này một cách đơn giản
      Có thể không trao focus cho cửa sổ mới như X11, nhưng đó có thể không phải hành vi đa số người dùng mong muốn
    • Popup, âm cảnh báo và biểu tượng nhấp nháy cũng đã là những can nhiễu đủ tệ, và sự tập trung của người dùng còn quý hơn thế
  • Vấn đề vốn không phải là hành động viết code, mà là quá trình tạo ra thứ gì đó một cách cẩn trọng và nghiêm ngặt
    Phát triển phần mềm đã tiến bộ trong thời gian dài nhờ tích lũy thói quen, cơ chế an toàn và cấu trúc đã được kiểm chứng, nhưng giờ đây ta chỉ mô tả vấn đề rồi không kịp xem xét đúng mức kết quả được tạo ra quá nhanh, đến mức không biết mình đã triển khai cái gì
    Giống như đồ gỗ thủ công chuyển thành hàng sản xuất nhà máy khiến ta không biết ai làm phần nào và sản phẩm không còn bền lâu, phần mềm cũng đã đi đến giai đoạn lắp ráp và triển khai mà không hiểu rõ
    Sự cẩu thả sẽ tích tụ, nhưng đây cũng có thể là khởi đầu của một chu kỳ nghiêm túc suy nghĩ lại cách làm tốt

    • Sự cố NPM left-pad đã xảy ra từ 10 năm trước, các cuộc thảo luận về tấn công chuỗi cung ứng và SBOM cũng đã có từ lâu, còn SourceForge từng chèn cả phần mềm quảng cáo vào file phân phối
      Nếu không review code, thì giao code cho AI cũng không đặc biệt tệ hơn việc chạy PIP hay NPM install mà không kiểm tra
  • Phần mềm tiếp tục tệ đi vì chính tiền đề coding đã được giải quyết là sai

    • Coding có thể đã được giải quyết, nhưng ngay từ đầu nó không phải nút thắt cổ chai
      Coding từ lâu đã rẻ, các công ty đã thuê ngoài cho nguồn nhân lực rẻ nhất, nhưng năng lực xác định vấn đề và thiết kế giải pháp lại là chuyện khác
      Code là nợ hơn là tài sản, nên chỉ nên viết lượng tối thiểu cần thiết để giải quyết vấn đề thực tế, và việc này cần kỹ sư
      Sau khi review đầu ra của AI và sửa lỗi, thời gian cũng gần như tự viết, nên không giúp ích nhiều cho công việc
    • Vấn đề thật sự không phải là việc coding đã được giải quyết, mà là niềm tin rằng điều đó đúng
  • Tôi đồng ý rằng phần mềm đang tệ đi, nhưng không thể chỉ đổ lỗi cho AI
    Việc streaming không truyền được lên TV, trình duyệt báo lỗi 500, hay màn hình cảm ứng công cộng hiện blue screen đều đã tồn tại từ trước
    Ngoài chuyện số lượng lập trình viên tăng theo cấp số nhân khiến một nửa chỉ có vài năm kinh nghiệm trở xuống, việc chỉ luyện thuật toán đơn luồng không đủ để xử lý hệ thống phân tán, CQRS, event sourcing, khả năng audit và tính idempotent
    Ngoài ra, khi product owner (PO) không thuộc khối kỹ thuật nắm vòng đời sản phẩm và buộc chỉ triển khai happy path của MVP, bug và việc phải viết lại sau này là điều chắc chắn
    Ngôn ngữ đã chuyển từ C++ sang Java, JavaScript, Python theo hướng thân thiện hơn với người mới, nhưng công việc lại phức tạp hơn với hệ thống phân tán giữa doanh nghiệp, vận hành 24/7, hàng triệu người dùng, bảo mật, machine learning, v.v.

    • Khi MVP kết thúc, nó như có phép màu biến thành sản phẩm phát hành, và đúng lúc đội ngũ bắt đầu hiểu cách cải thiện thì ban lãnh đạo lại xáo trộn tổ chức
      Trong lúc việc thăng chức lãnh đạo và sáp nhập bộ phận được đóng gói thành “tin vui”, tính liên tục của cải tiến sản phẩm biến mất
    • Chủ nghĩa lấy product manager làm trung tâm và sự ám ảnh với MVP là nguyên nhân lớn khiến chất lượng giảm
      Không cần áp dụng agile một cách máy móc đến ngớ ngẩn; cả hạ tầng lẫn ứng dụng cho người dùng đều có thể lập kế hoạch cho các tính năng cần sau 3, 6, 12 tháng dựa trên sản phẩm tiền nhiệm, đối thủ và kinh nghiệm của đội ngũ
      Cũng như khi đi theo GPS ta vẫn xem toàn bộ lộ trình và ba bước tiếp theo, agile không có nghĩa là chỉ sau khi hoàn tất một bước mới lần đầu nghĩ đến bước kế tiếp
    • Khi làm cho lập trình đủ đơn giản để ai cũng có thể làm, thì đúng là ai cũng nhảy vào làm
    • Uncle Bob giờ cũng có nguy cơ hoàn toàn chấp nhận AI và trở thành một phần của vấn đề
    • AI có thể không phải nguyên nhân làm chất lượng giảm, nhưng đang đẩy nhanh sự suy thoái
      Nếu máy làm giường nhanh hơn 150% nhưng tỷ lệ lỗi là 70%, thì sản phẩm lỗi tăng lên, chuyên môn mộc biến mất, đồng thời động lực và giá trị của thợ lành nghề cũng giảm
      Ngay cả nếu một ngày nào đó máy móc được cải thiện, thì trong thời gian đó vô số người vẫn phải ngủ trên những chiếc giường tệ hại
  • LLM không thể đọc và hiểu toàn bộ codebase cùng một lúc rồi ra quyết định dựa trên sự hiểu đó
    Phần khó của lập trình không phải là một hàm hay một class riêng lẻ, mà là cách chúng tương tác với nhau trong một hệ thống khổng lồ, và quy mô phần mềm về cơ bản lớn hơn cửa sổ ngữ cảnh của LLM
    Dù cửa sổ ngữ cảnh có lớn hơn, nó cũng không tích lũy hiểu biết như con người, nên không thể nói AI đã giải quyết được coding
    Với dự án mới thì hữu ích, nhưng việc tạo phần mềm mới nhanh chóng vốn dĩ cũng đã dễ hơn làm việc trên code cũ