LLM-Driven Lập trình: Ồ, thật sao?
Nhiều như tôi muốn, tôi không phải là một học giả khoa học máy tính. Không có gì.
Tôi đã đi một con đường khác mặc dù.
Tôi đã dành phần lớn thời gian trong ngày để đọc, viết, thay đổi và gỡ lỗi các chương trình máy tính trong 25 năm nay. Trong thời gian này, tôi đã lấy được bằng kỹ thuật về Xử lý dữ liệu, tham gia khóa học đại học về Khoa học máy tính trong hơn 3 năm (trước khi bỏ học vào năm thứ 4, một học kỳ hoặc lâu hơn trước khi tốt nghiệp) và sau đó kết thúc theo đuổi bằng sau đại học về Khoa học dữ liệu & Dữ liệu lớn, sau khi lấy bằng cử nhân Dinh dưỡng.
Trong 25 năm qua, bạn nên cá là tôi đã đọc khá nhiều sách, bài báo, blog, v.v., với nỗ lực trung thực để giáo dục bản thân. Tuy nhiên, tôi cảm thấy bản thân mình quá kém cỏi khi đưa ra những ý kiến nằm ngoài lĩnh vực chuyên môn của mình ⎼ tức là kiến trúc hệ thống phần mềm cho Internet.
Đó là lý do tại sao tôi luôn tìm kiếm những người biết rõ hơn tôi. Vì vậy, tôi không tự làm xấu mình khi rảnh rỗi trên Internet. Nó có thể không ngầu nhưng nó trung thực về mặt trí tuệ. Tôi sẽ lấy nó.
Cường điệu LLM
Gần đây, đã có sự cường điệu về chủ đề LLM (mô hình ngôn ngữ lớn, ví dụ: GPT-3 ), đặc biệt là ChatGPT . Bạn phải sống dưới một tảng đá để không nghe nói về nó. Thứ này ở khắp mọi nơi. Mọi người đang hoảng sợ tâm trí của họ về nó. Một số yêu thương, một số ghét bỏ, và tất cả mọi thứ ở giữa, tôi đoán vậy.
Tôi đây.
Mặc dù tôi đã có bằng sau đại học về chủ đề khoa học dữ liệu, nhưng tôi còn lâu mới trở thành một chuyên gia về LLM. Rất xa. Ngay cả trong tầm mắt của con người. Vì vậy, suy nghĩ của tôi về nó dựa trên những quan sát của tôi trong suốt nhiều năm và một phần kinh nghiệm thực tế trong thế giới thực với tư cách là một kỹ sư phần mềm. Mang nó theo một hạt muối.
Tôi nghĩ gì về nó?
Tôi nghĩ rằng nó có thể là một công cụ hữu ích trong hộp công cụ lập trình viên của bạn. Có nó ở đó, như bạn có Google và Stack Overflow. Đó là nó. Đơn giản như thế.
Ý tôi là, hãy để tôi giải thích thêm một chút về yêu cầu này.
Khi tôi mới bắt đầu học lập trình, tôi phải mua sách và tạp chí hoặc mượn chúng ở trường học và thư viện công cộng; Ngoài ra, tôi có một người bạn tốt tại nơi làm việc đã dạy tôi rất nhiều về Clipper , và chỉ có thế. Sau đó, tôi phát hiện ra các diễn đàn thảo luận trực tuyến (ví dụ: GUJ ). Và sau đó tôi được biết và tham dự các cuộc họp của nhóm người dùng (ví dụ: SouJava ). Và sau đó là Stack Overflow, GitHub và vô số nội dung kỹ thuật có khắp nơi trên Internet ⎼ bạn biết tôi đang nói về điều gì, chỉ cần Google bất cứ điều gì về ngôn ngữ lập trình bí truyền nhất và bạn sẽ có nó.
Những thứ đó không loại trừ lẫn nhau, chúng bổ sung cho nhau, giống như những viên gạch của một tòa nhà. Hay tôi nên nói một tòa nhà chọc trời? Đi hình.
Dù sao đi nữa, tôi đoán điều tôi đang cố nói là, mặc dù tôi có thể tìm kiếm bất kỳ thứ gì trên Stack Overflow (hay đúng hơn là trên Google rồi chỉ và nhấp vào nó), đọc blog, xem tất cả các loại cuộc nói chuyện thú vị trên YouTube , vân vân và vân vân, tôi vẫn mua sách và đọc qua chúng. Cái này không loại trừ cái kia.
Điều tương tự cũng áp dụng cho các công cụ LLM.
Trở thành lập trình viên ưu tiên giáo dục
Tôi muốn nêu rõ quan điểm ở đây: Tôi tin tưởng vững chắc vào giáo dục “chất lượng”. Và ý tôi là tham gia các khóa học chính thức của trường đại học và đọc những cuốn sách “xác thịt”.
Tôi biết ngày nay đó không phải là quan điểm phổ biến, với tất cả các chương trình đào tạo, khóa học video nhanh và nội dung nano được quảng cáo rầm rộ ngoài kia, như thể chúng là penicillin của thế kỷ 21, nhưng thành thật mà nói, tôi không thể quan tâm hơn. Việc củng cố kiến thức vượt qua thử thách của thời gian đòi hỏi một nền giáo dục mạnh mẽ. Vì vậy, hãy dành thời gian của bạn, làm việc chăm chỉ, vượt qua phần hướng dẫn nhanh và tự học.
Hãy nhớ rằng chỉ với kiến thức nông cạn, bạn thậm chí có thể không phân biệt được câu trả lời Stack Overflow là đúng hay sai; và nếu nó đúng, và nếu nó hoạt động như mong đợi, tại sao nó lại như vậy. Và trong trường hợp này, bạn sẽ làm gì nếu nó không hoạt động? Thử và sai quảng cáo buồn nôn , phải không? Điều này đưa chúng ta đến một thực tế không thể chối cãi.
Không ai thích anh chàng / cô gái trong văn phòng lúc nào cũng đặt câu hỏi và muốn moi từng mẩu thông tin để nuốt chửng mà không phải đổ một giọt mồ hôi nào. Tôi chắc chắn là không.
Để tôi nói cho bạn biết: lập trình theo hướng sao chép và dán đã là một việc khá lâu rồi , ít nhất là vì chúng ta có thể tìm thấy các giải pháp ứng cử viên cho hầu hết các sự cố máy tính mà chúng ta tìm kiếm qua Internet. Điều này không có gì mới. Mọi người đã làm điều này từ rất lâu rồi. Nhiều hơn nữa sau sự ra đời của phần mềm mã nguồn mở và các công cụ tìm kiếm mạnh mẽ. Và không có gì sai khi sao chép và dán mã từ Internet. Không có gì. Chà, ít nhất là cho đến khi nó xảy ra.
Rốt cuộc, chúng tôi có thể sao chép và dán các đoạn mã nhỏ ở đây và ở đó, các cách sử dụng API mẫu mà chúng tôi không quá quen thuộc hoặc chúng tôi chưa sử dụng hoặc chúng tôi đang bắt đầu sử dụng nhanh. Tất cả chúng ta đã làm điều đó và vẫn sẽ làm. (Regex? Cron? Vâng, tôi cảm thấy bạn.) Tuy nhiên, nếu chúng ta không có cơ sở vững chắc về lập trình và thiết kế phần mềm, nếu chúng ta không dành thời gian để hiểu những gì chúng ta đang làm, chúng ta sẽ rơi vào tình trạng bực bội. vòng lặp thử và sai. Tệ hơn thế nữa, thưa các bạn, cuối cùng chúng ta sẽ giới thiệu các lỗi khó tìm, các vấn đề về hiệu suất và lỗ hổng bảo mật trong phần mềm của mình ⎼ mà nhân tiện, phần lớn thời gian thậm chí không phải là phần mềm của chúng ta mà là phần mềm của nhà tuyển dụng. Hãy suy nghĩ về điều đó trong một giây.
Phát triển phần mềm có nhiều thứ hơn là viết truy vấn SQL, xây dựng điểm cuối API hoặc gọi dịch vụ từ xa từ ứng dụng dành cho thiết bị di động hoặc mã hóa tìm kiếm chuyên sâu. Một giải pháp phần mềm hoàn chỉnh được tạo ra từ nhiều thứ hơn thế. Công nghệ phần mềm, với tư cách là một lĩnh vực, là điều đáng lo ngại về điều đó. Do đó, quan điểm của tôi ở đây là, nếu bạn không biết phải hỏi điều gì, bạn nghĩ mình sẽ nhận được câu trả lời như thế nào? Và bạn sẽ có thể nhận ra câu trả lời đúng cho trường hợp cụ thể của bạn?
Khi bạn đọc qua các câu trả lời trên Stack Overflow, tốt hơn hết bạn nên khá chắc chắn về những gì mình đang tìm kiếm, để có thể khẳng định một cách hợp lý ⎼ cũng có rất nhiều nội dung rác ngoài kia, xin lưu ý bạn; và chúng không đi kèm với nhãn "rác". Sau đó, bạn phải tính đến tất cả ngữ cảnh của câu hỏi ban đầu và câu trả lời được cung cấp, bỏ qua rác ở đây và ở đó, trước khi bạn có thể đưa ra quyết định sao chép và dán nguyên trạng một số đoạn mã hoặc viết giải pháp của riêng bạn dựa trên giải pháp đã xây dựng kiến thức ⎼ ví dụ: vấn đề cụ thể mà bạn đang cố gắng giải quyết sở hữu các trường hợp cạnh cụ thể của nó. Và chính điều này, lặp đi lặp lại, sẽ bổ sung kiến thức cho bạn.
Xem chúng ta đang đi đâu? Xem quan điểm của tôi ở đây? Hãy xem ChatGPT có thể là một cái bẫy như thế nào? Bạn hỏi nó, bạn nhận được một câu trả lời. Một câu trả lời tự tin đến mức nếu bạn không có kiến thức sâu rộng và vững chắc về lập trình, bạn sẽ mua phải thứ vớ vẩn tuyệt đối mà không hề hay biết. Tôi đã thấy khá nhiều điều đó với bạn bè trên Twitter và không có gì. Ngay cả với các thuật toán được biết đến rộng rãi.
Như vậy, “nhiều hơn nữa” này là điều chúng ta nên quan tâm (bên cạnh những điều cơ bản) và là điều chúng ta phải tập trung vào (miễn là chúng ta có những điều cơ bản tại chỗ). Điều này đưa chúng ta đến một sự thật tàn nhẫn khác.
Chúng ta không biết những gì chúng ta không biết. Và điều duy nhất chúng ta có thể làm là tiếp thu kiến thức mới, lặp đi lặp lại ⎼ trước là rộng , sau là sâu .
Bằng cách này, hy vọng rằng chúng ta sẽ biết mình đang tìm kiếm điều gì và ít nhất cũng nắm bắt được câu trả lời khi tìm thấy nó.
- Kiến thức rộng cho ta hướng đi tìm câu trả lời;
- Kiến thức sâu rộng giúp chúng ta phân biệt giữa các câu trả lời được tìm thấy.
Được rồi. Mát mẻ. Nhưng chúng ta làm như thế nào?
Để mở rộng kiến thức của bạn về những điều cần biết, tôi nghĩ các blog và video trên YouTube rất tuyệt. Chúng là những nội dung ngắn mà bạn có thể xem hàng ngày mà không phải đổ mồ hôi. Nhưng để có kiến thức vững chắc sâu sắc , theo tôi (N=1), không có gì tốt hơn là đọc sách và các tài liệu chính thống. Và nếu bạn có thể, nếu bạn chưa có, hãy kiếm cho mình một suất (thực tế hoặc trực tuyến) trong một khóa học đại học (tương ứng là cao học hoặc sau đại học).
Một lần nữa, không phải là một ý kiến phổ biến. Nhưng bản thân tôi không nổi tiếng, vậy ai quan tâm chứ?
Nhập các công cụ LLM
Tuy nhiên, tôi có một số ý kiến không phổ biến, tôi nghĩ ý kiến này sẽ thành công: LLM có thể là một công cụ tuyệt vời giúp bạn có được kiến thức vững chắc. Làm như thế nào? Tôi sẽ cho bạn biết làm thế nào.
Bắt đầu bằng cách hỏi ChatGPT những điều cần biết, chẳng hạn như phát triển ứng dụng dành cho thiết bị di động. Sau đó, yêu cầu các hướng dẫn ngắn và video trên YouTube để có được bức tranh toàn cảnh. Tiếp theo, yêu cầu những cuốn sách và bài giảng được đánh giá cao về nó. Bởi vì suy cho cùng, bạn muốn đọc nhiều bài viết sâu sắc, của các tác giả khác nhau, với các quan điểm khác nhau, để hiểu rõ chủ đề bạn đang nghiên cứu.
Đó là vì một điều. Một điều nữa có thể hữu ích là khi bạn đang đọc qua một cuốn sách và gặp khó khăn do thiếu kiến thức về một chủ đề bắt buộc nhất định. Yêu cầu ChatGPT tổng hợp chủ đề đã nói cho bạn, để bạn có cơ sở trước khi tiếp tục. Điều tương tự bạn sẽ làm với Google, đọc một hoặc hai nguồn nhưng nhanh chóng và đi thẳng vào vấn đề. Tuy nhiên, sau đó, hãy tiếp tục và đi sâu vào chủ đề đã nói nếu đó là điều gì đó quan trọng đối với vấn đề chung mà bạn đang nghiên cứu. Không sao để làm điều đó.
Và một tình huống khác có thể rất hữu ích là khi bạn chuẩn bị phát triển một ứng dụng phần mềm cho một miền nhất định mà bạn không quá quen thuộc với mọi thông tin chi tiết. Tôi đã thấy điều đó vào ngày khác và thấy nó khá thông minh.
Giả sử bạn sắp phát triển một ứng dụng dành cho thiết bị di động về thể dục, bởi vì bạn yêu thích thể dục và cực kỳ hào hứng với ý tưởng giúp mọi người khỏe mạnh và mọi thứ. Được rồi. Nhưng bạn không biết tất cả các ứng dụng hiện có, các tính năng được yêu thích nhất của chúng cũng như cách chúng được kiếm tiền, v.v. Đây là những câu hỏi rất khách quan. Vì vậy, bạn có thể đặt những câu hỏi này cho ChatGPT để bắt đầu nhanh chóng. Bạn hỏi về yêu cầu ứng dụng. Ví dụ, bạn yêu cầu nó viết email chào mừng mà bạn sẽ gửi cho những người đăng ký mới ứng dụng thể dục tuyệt vời của mình, bởi vì bạn không đặc biệt giỏi việc này. Phải. Giờ thì sao? Nếu bạn hiểu những gì tôi đã nói cho đến thời điểm này, thì bạn đã có ý thức tốt về những gì bạn nên làm tiếp theo. Bạn cải thiện nó, bạn làm cho nó tốt hơn, bạn cho nước sốt đặc biệt của bạn vào. Nói cách khác, phá vỡ quán tính, đó là điều được cho là quan trọng nhất trong trường hợp này, sau đó làm cho nó trở nên đặc biệt ⎼ nếu không, tất cả những gì bạn có là những thứ chung chung để bán hết. Không mát mẻ, tôi đoán.
Nếu bạn có quyền truy cập vào GitHub Copilot và không có hại gì khi sử dụng nó cho công việc của mình, bạn có thể yêu cầu nó cung cấp các đoạn mã cho bạn, chẳng hạn như phương pháp phân tích cú pháp tệp, trường hợp kiểm tra lặp đi lặp lại, v.v. Bạn biết đấy, những thứ nhàm chán mà thỉnh thoảng bạn phải làm và không thể tránh khỏi hoàn toàn với thiết kế mã phù hợp và thư viện thông minh. Không có gì sai với điều đó. Bạn không nhận được thêm điểm nếu không làm như vậy ⎼ miễn là không có chính sách tại nơi bạn làm việc.
Có thể có nhiều ứng dụng tương tự khác, làm phiền bạn. Nghĩ về điều đó.
Ồ, đợi đã. Tôi nghĩ về lợi ích lớn nhất mà điều này có thể mang lại cho chúng ta: Bạn có biết những người thích đăng bài trên các diễn đàn để hỏi các giải pháp cho bài tập ở trường của họ không? Giống như, bạn biết đấy, bạn đã đọc câu hỏi và nó gần như là một câu lệnh gán theo nghĩa đen. Bạn có thể đã nhìn thấy điều đó trước đây. Vâng, bây giờ họ có thể yêu cầu ChatGPT về điều đó và để chúng tôi yên. Mọi người đều hài lòng về điều đó.
LLM sẽ thay thế các lập trình viên của con người?
Không. Tôi không nghĩ vậy. Tôi rất hoài nghi về việc “X sẽ thay thế các lập trình viên con người” . Kể từ khi tôi bắt đầu lập trình vào năm 1997, tôi đã nghe khá nhiều về những mốt như thế.
Nó có thể sẽ thay đổi cách chúng ta được giáo dục về lập trình, cách chúng ta vượt qua các trở ngại khi gặp khó khăn khi lập trình, cách chúng ta giải quyết những thứ nhàm chán, nhưng thay thế chúng ta, homo sapiens, không chỉ là CRUD và các ứng dụng thông thường được biết đến rộng rãi, không, tôi Tôi rất hoài nghi về điều đó. Tôi có thể sai mặc dù.
Và biết đâu, cuối cùng, bài viết này đã hoàn thành đầy đủ những gì đã thúc đẩy tôi viết nó ra.
Hôm qua, tôi rất vui khi tình cờ đọc được một bài báo tuyệt vời của Amy J. Ko , đó là một niềm vui thực sự khi đọc. Đầu tiên bởi vì tôi đồng ý với hầu hết mọi thứ cô ấy đã viết ở đó. Thứ hai, bởi vì không giống như tôi, cô ấy là một học giả và đã theo dõi chủ đề này hơn một thập kỷ. Vì vậy, cô ấy chắc chắn có một hoặc hai điều để hợp tác trong toàn bộ cuộc thảo luận này mà không làm bản thân xấu hổ.
Vì vậy, hãy tự giúp mình, bỏ qua sự cường điệu và đọc những bài báo nổi bật này để hiểu rõ hơn về chủ đề từ các quan điểm khác nhau:
- Các mô hình ngôn ngữ lớn sẽ thay đổi lập trình… một chút
- Các mô hình ngôn ngữ lớn sẽ thay đổi lập trình … rất nhiều
Không có TLDR; ở đó. Dành thời gian của bạn, tận hưởng chuyến đi.
Bây giờ để kết thúc bài viết dài này bằng một điều buồn cười: Tôi đã từng chứng kiến mọi người luôn chế giễu giới hàn lâm, nói rằng giới hàn lâm khác xa với sự phát triển phần mềm trong thế giới thực như thế nào, và rồi, đột nhiên, mọi người kinh ngạc và phát hoảng về một thứ được đưa vào cuộc sống ngay từ nghiên cứu học thuật. Thật là một sự trớ trêu lớn. Thật là một thời gian tốt để trở thành một học giả.
Dù sao, hẹn gặp lại lần sau, các bạn.
Hãy cẩn thận với sự cường điệu.
⛧ Xem thêm tại leandrosilva.com.br . Có nhiều hơn nữa ở đó.

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































