Cảm ơn vì câu trả lời!

 

quickSortInPlace() thứ hai mà bạn đính kèm cũng là một cách triển khai chậm.

Hãy thử chạy đoạn mã dưới đây.

function quickSortInPlace(arr, left = 0, right = arr.length - 1) {
if (left >= right) return;

const pivotIndex = partition(arr, left, right);
quickSortInPlace(arr, left, pivotIndex - 1);
quickSortInPlace(arr, pivotIndex + 1, right);
}

function partition(arr, left, right) {
const pivot = arr[right];
let i = left;

for (let j = left; j < right; j++) {
if (arr[j] < pivot) {
[arr[i], arr[j]] = [arr[j], arr[i]];
i++;
}
}

[arr[i], arr[right]] = [arr[right], arr[i]];
return i;
}

function quickSort(arr) {
if (arr.length <= 1) return arr;

const pivot = arr[arr.length - 1];
const left = [];
const right = [];

for (let i = 0; i < arr.length - 1; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}

return [...quickSort(left), pivot, ...quickSort(right)];
}

const repeat = 100;
const arrLength = 10000;
const unsortedArray = new Array<number>();
for(let i = 0; i < arrLength; i++)
unsortedArray.push(Math.round(Math.random() * arrLength));

let sorted: Array<number>;

const qb = performance.now();
for(let i = 0; i < repeat; i++)
sorted = quickSort(unsortedArray);
const qe = performance.now();

const rqb = performance.now();
for(let i = 0; i < repeat; i++) {
let copied = [...unsortedArray];
quickSortInPlace(copied);
}
const rqe = performance.now();

console.log(q: ${qe - qb} ::: rq: ${rqe - rqb});

 

Đây là một bài viết mang lại cảm giác có chiều sâu lớn. Quả nhiên là a16z.

 

Thường thì tôi không hay viết bình luận, nhưng lý do tôi đặc biệt để lại bình luận cho bài này là vì tôi đồng cảm khá nhiều với suy nghĩ của tác giả. Tôi nghĩ điều quan trọng không phải là AI hay LLM, mà là với tư cách một lập trình viên, bản thân "tôi" phải luôn sẵn sàng dù môi trường nào có đến đi nữa.

Do đặc tính của mã nguồn đã được huấn luyện, LLM chủ yếu cung cấp dữ liệu nằm gần mức trung bình của dữ liệu trực tuyến trên toàn thế giới. (Ví dụ quicksort trong js trước đó đã chứng minh điều này.) Vì vậy, tôi thường dùng nó để hỏi xem về mặt tư tưởng/thiết kế thì nó có phần nào đồng điệu hay lệch khỏi góc nhìn phổ biến hay không, hoặc để hỏi những nội dung mà từ trước đến nay khá khó biết nên hỏi ai.

 

Tôi không rõ việc tiếp tục trao đổi thêm còn có ý nghĩa gì.

Ngay từ đầu, nếu ý kiến là mã do AI tạo ra có thể tiềm ẩn một số rủi ro, nên cần tinh chỉnh kỹ và sử dụng cho phù hợp, thì có lẽ chỉ cần giải thích xem trong bài viết của tác giả, suy nghĩ nào của tác giả là thiên lệch. Ngay cả trong bản tóm tắt cũng có câu mang ý tương tự: "có thể nhanh chóng cung cấp scaffold/mã nháp thiếu ngữ cảnh, nhưng thiết kế hoàn chỉnh và tinh chỉnh vẫn là phần việc của lập trình viên con người".

 

Về cơ bản, có thể xem đây là đoạn code hoàn toàn không đồng cảm với gánh nặng của việc tạo, vận hành và hợp nhất collection. Với C++, từ khoảng 10 năm trước đã có các đề xuất/triển khai về Move Constructor, và việc luôn cực kỳ nhạy cảm với chi phí sao chép bộ nhớ vốn là điều cơ bản nhất. Về mặt cơ chế, quick sort là thuật toán có thể xác định index của mọi giá trị, và tốt hơn là mỗi field nên hỗ trợ random access.

Ngay cả khi không có những tối ưu hóa kiểu "dị" mà chỉ áp dụng những điểm trên, hiệu năng cũng chênh hơn 2 lần so với cách ở link bạn gửi.

 

return [...quickSort(left), ...equal, ...quickSort(right)];

Hãy đặt đoạn mã này xuống và suy nghĩ kỹ về nó.

 

LLM và AI đang tiếp tục phát triển theo thời gian. Chỉ mới vài tháng trước thôi, gần như khó có thể kỳ vọng vào những thứ như tính nhất quán của mã theo đúng như đã mô tả, nhưng giờ thì trong không gian làm việc đó, nếu tải lên dưới dạng tệp phần mã mà AI đã được yêu cầu cấu hình ban đầu, rồi khi viết mã mới luôn đưa ra chỉ dẫn phải tuân thủ phong cách mã hiện có, thì nó thực sự có thể tạo ra mã khá nhất quán.

 

Hình như yolo mode đã được đổi thành auto run mode.

 
blizard4479 2025-05-26 | bình luận cha | trong: Hãy tìm những người của bạn (foundersatwork.posthaven.com)

Mình cũng đang thử nhiều thứ để tìm ra hướng đi, nên cách tiếp cận lấy con người làm trung tâm hơn là hành động này khá thú vị. Có giống như kiểu hình mẫu để noi theo không nhỉ? Mình đọc rất vui, cảm ơn bạn.

 

Có vẻ như có gì đó không hoạt động tốt với liên kết nên tôi đăng lại. https://chatgpt.com/canvas/shared/68341217ae788191b66a523c948b1a8e

 

Xin chào. Vì tò mò nên tôi đã thử nói rằng: "Tôi định đưa vào frontend web, hãy triển khai giúp tôi thuật toán quicksort bằng js". Nhưng theo những gì tôi thấy thì khá khó để nhận ra vấn đề nằm ở đâu. Nếu bạn có thể chỉ ra giúp thì sẽ là trợ giúp rất lớn đối với tôi. Xin cảm ơn trước. https://chatgpt.com/share/68340f9b-b684-8002-8dd5-495d477065cd

 

Đây là một dự án Common Lisp nhỉ. Vì thế mới có thể dùng được tổ hợp ocicl+make. Có lẽ sẽ dễ bảo trì hơn nếu ném cái này cho Vibe AI rồi bảo nó làm luôn bằng typescript+deno.

 

Có vẻ như bạn chưa hiểu rõ vì sao tôi nhắc đến lĩnh vực của tác giả và “miền chuyên môn của bản thân” nghĩa là gì.
Giao mọi quyết định cho AI mà không có suy nghĩ riêng thì có vẻ ngớ ngẩn,
nhưng tôi cũng không hiểu lắm những người đứng ở thái cực ngược lại.

Cuối cùng, điều tôi muốn hỏi là superscv đang nghĩ nên dùng LLM cho việc lập trình như thế nào thì tốt?

 

Hàn Quốc rồi cũng sẽ phải đều đặn (...) kéo dài tuổi nghỉ hưu vì vấn đề lương hưu thôi...
Điểm bùng phát có lẽ sẽ là thời điểm cứ tăng mãi tăng mãi rồi vượt cả tuổi thọ trung bình
(Có vẻ như Nga đã thành ra như vậy rồi thì phải..)

 

Tóm tắt,

Tác giả: Nhà phát triển phải tự nâng cao và duy trì năng lực của mình. Thậm chí AI còn không hoạt động tốt đến vậy.

crawler: Ủa? Tôi thì dùng rất ổn mà?

superscv: Có nhiều vấn đề lắm...

crawler: Phải tinh chỉnh cho phù hợp rồi mới dùng chứ

superscv: Có vẻ ngay từ đầu đã đi quá xa khỏi thông điệp mà tác giả muốn truyền đạt..

 

Thông điệp của tác giả có phần hơi mạnh, nhưng nếu đọc kỹ bài viết thì đó không phải là "đừng dùng AI". Bài viết có đưa ra gợi ý về việc nên tận dụng nó như thế nào, và ý chính là bản thân lập trình viên không được thiếu năng lực.

Nếu nhìn vào lý do vì sao thông điệp của tác giả lại tạo cảm giác mạnh như vậy, thì có thể thấy nó được xây dựng như một góc nhìn phản biện trước quan điểm cho rằng sẽ có thể phát triển phần mềm bằng copilot (mang sắc thái phụ thuộc nhiều vào copilot trong phát triển). Vì thế, tác giả đã dẫn dắt thông điệp theo hướng rằng các lập trình viên không nên tự đặt mình vào một lập trường làm tổn hại giá trị tồn tại của chính mình.

Tác giả cũng không hề nhắn nhủ rằng "đừng dùng AI", nên nếu nói đến việc tận dụng AI thì rốt cuộc cũng sẽ nằm đâu đó ở một điểm thỏa hiệp. Vì vậy, thông điệp tổng thể cũng có phần khá giống với điều bạn vừa trả lời trước đó.

Tuy nhiên, trong nội dung bạn viết ban đầu, tôi khó đồng ý với phần gọi đó là một "góc nhìn thiên lệch", nên mới trả lời trước như vậy.

 

Tạo ra chỉ là khởi đầu, và nếu vận hành một dịch vụ khoảng 10 năm thì sẽ phát sinh đủ thứ chuyện ở giữa chừng; muốn trụ vững qua những lúc đó thì phải có nền tảng cơ bản... cần phải học.

 

Trước hết, trong ý tôi nói về việc "ứng dụng AI trong phạm vi domain", thì chuyện con người đảm nhiệm thiết kế và điều phối là điều hiển nhiên...
Thực ra, có lẽ ngày xưa thì khác, nhưng bây giờ khi ai cũng biết giới hạn của LLM rồi thì đây là chuyện quá đương nhiên, đến mức chẳng cần phải nói ra nữa.

Tiếp theo là trường hợp những người bình thường không có kiến thức phát triển dùng LLM,
có vẻ như cả bài gốc, Hacker News lẫn tôi đều chưa từng nói về chuyện này, nhưng dù sao thì ngay cả trong trường hợp đó, chất lượng cũng đã đạt đến mức người dùng có thể hài lòng với kết quả.
Nếu không phải vậy thì Bolt.new, v0, hay cả Cursor chắc cũng không nhận được những đánh giá như bây giờ.

 

Điều khó là đưa ra quyết định nên tái phát minh đến đâu và nên dựa vào phụ thuộc bên ngoài đến mức nào.
Trong mọi trường hợp, việc chọn phụ thuộc đó để tiết kiệm thời gian dù bản thân mình có thể tự làm ra nó, và việc bị trói vào phụ thuộc vì nếu không có nó thì không thể tạo ra dịch vụ, là hai câu chuyện hoàn toàn khác nhau.
Có thể điều này không khả thi với mọi đoạn mã (chẳng hạn như hệ điều hành), nhưng sẽ rất hữu ích cho việc hiểu hệ thống nếu cố gắng tiến càng nhiều về phía trước càng tốt.