Pemrograman Berbasis LLM: Oh, benarkah?

Feb 26 2023
Sebanyak yang saya inginkan, saya bukan akademisi ilmu komputer. Sama sekali tidak.

Sebanyak yang saya inginkan, saya bukan akademisi ilmu komputer. Sama sekali tidak.

Padahal aku mengambil jalan yang berbeda.

Saya telah menghabiskan sebagian besar hari-hari saya membaca, menulis, mengubah, dan men-debug program komputer selama 25 tahun sekarang. Selama waktu ini, saya telah memperoleh gelar teknis dalam Pemrosesan Data, mengikuti kursus sarjana Ilmu Komputer selama lebih dari 3 tahun (sebelum putus sekolah pada tahun ke-4, satu semester atau lebih sebelum lulus), dan kemudian berakhir mengejar gelar pascasarjana dalam Ilmu Data & Data Besar, setelah mendapatkan gelar sarjana di bidang Nutrisi.

Dalam 25 tahun terakhir itu, Anda sebaiknya bertaruh saya telah membaca cukup banyak buku, artikel, blog, dan yang lainnya, dalam upaya jujur ​​untuk mendidik diri saya sendiri. Tetap saja, saya merasa diri saya kurang berpendidikan untuk memberikan pendapat di luar bidang keahlian saya ⎼ yaitu sistem perangkat lunak arsitek untuk Internet.

Itu sebabnya saya selalu mencari orang yang lebih tahu dari saya. Jadi saya tidak mempermalukan diri sendiri secara gratis di Internet. Ini mungkin tidak keren tetapi secara intelektual jujur. Aku akan mengambilnya.

Hype LLM

Belakangan ini ada hype tentang LLM (model bahasa besar, misalnya GPT-3 ), khususnya ChatGPT . Anda pasti hidup di bawah batu untuk tidak mendengarnya. Benda ini ada di mana-mana. Orang-orang panik tentang hal itu. Beberapa mencintai, beberapa membenci, dan segala sesuatu di antaranya, kurasa.

Saya disini.

Meskipun saya mendapat gelar pascasarjana dalam bidang ilmu data, saya jauh dari menjadi ahli dalam LLM. Jauh sekali. Bahkan tidak terlihat oleh mata manusia. Jadi pemikiran saya tentang itu didasarkan pada pengamatan saya selama bertahun-tahun dan pengalaman dunia nyata yang adil sebagai insinyur perangkat lunak. Ambillah dengan sebutir garam.

Apa yang saya pikirkan tentang itu?

Saya pikir ini mungkin alat yang berguna di kotak peralatan programmer Anda. Miliki di sana, seperti Anda memiliki Google dan Stack Overflow. Itu dia. Sederhana seperti itu.

https://commoncog.com/content/images/2018/12/Paper.Commonplace.37.png

Maksud saya, izinkan saya menguraikan sedikit lebih banyak tentang klaim ini.

Ketika saya pertama kali mempelajari pemrograman, saya harus membeli buku dan majalah atau meminjamnya dari sekolah dan perpustakaan umum; juga, saya punya teman baik di tempat kerja yang banyak mengajari saya tentang Clipper , dan hanya itu. Kemudian saya menemukan forum diskusi online (misalnya GUJ ). Dan kemudian saya mengetahui dan menghadiri pertemuan kelompok pengguna (mis. SouJava ). Dan kemudian ada Stack Overflow, GitHub , dan kebanyakan konten teknis ada di seluruh Internet ⎼ Anda tahu apa yang saya bicarakan, hanya Google apa pun tentang bahasa pemrograman paling esoteris dan begitulah.

Hal-hal itu tidak saling mengecualikan, mereka menjumlahkan satu sama lain, seperti batu bata sebuah bangunan. Atau haruskah saya mengatakan gedung pencakar langit? Pergi sosok.

Bagaimanapun, saya kira apa yang ingin saya katakan adalah bahwa, meskipun saya dapat mencari apa pun di Stack Overflow (atau lebih tepatnya di Google lalu arahkan & klik), baca blog, tonton semua jenis pembicaraan menarik di YouTube , dan seterusnya, saya masih membeli buku dan membacanya. Satu hal tidak mengecualikan yang lain.

Hal yang sama berlaku untuk alat LLM.

Jadilah Programmer Pertama Pendidikan

Saya ingin menegaskan di sini: Saya sangat percaya pada pendidikan "berkualitas". Dan yang saya maksud adalah menghadiri kursus universitas formal dan membaca buku-buku "berdaging".

Saya tahu itu bukan pendapat yang populer saat ini, dengan semua kamp pelatihan, kursus video cepat, dan konten nano yang banyak diiklankan di luar sana, seolah-olah itu adalah penisilin abad ke-21, tetapi jujur ​​saya tidak peduli. Memantapkan pengetahuan yang melewati ujian waktu membutuhkan pendidikan yang kuat. Jadi luangkan waktu Anda, lakukan kerja keras, lewati tutorial singkat, dan pelajari diri Anda sendiri.

Perlu diingat bahwa hanya dengan pengetahuan yang dangkal Anda bahkan mungkin tidak dapat membedakan apakah jawaban Stack Overflow benar atau salah; dan jika itu benar, dan jika berfungsi seperti yang diharapkan, mengapa demikian. Dan dalam hal ini, apa yang akan Anda lakukan jika tidak berhasil? Trial and error ad nauseam , kan? Yang membawa kita ke fakta yang tak terbantahkan.

Tidak ada yang menyukai pria / wanita di kantor yang mengajukan pertanyaan sepanjang waktu dan ingin mendapatkan setiap informasi yang dikunyah untuk ditelan saja tanpa harus berkeringat. Saya tentu saja tidak.

Izinkan saya memberi tahu Anda: pemrograman yang digerakkan oleh salin & tempel telah menjadi hal yang cukup lama , setidaknya sejak kami dapat menemukan solusi kandidat untuk sebagian besar masalah komputasi yang kami cari melalui Internet. Ini bukan hal baru. Orang-orang telah melakukan hal ini selama berabad-abad sekarang. Terlebih lagi setelah munculnya perangkat lunak open source dan mesin pencari yang kuat. Dan tidak ada yang salah dengan salin & tempel kode dari Internet. Tidak ada apa-apa. Yah, setidaknya sampai itu terjadi.

Lagi pula, kita dapat menyalin & menempelkan potongan kecil kode di sana-sini, contoh penggunaan API yang tidak terlalu kita kenal, atau yang belum kita gunakan, atau yang sedang kita mulai dengan cepat. Kita semua telah melakukan itu dan akan tetap melakukannya. (Regex? Cron? Ya, saya merasakannya.) Namun, jika kita tidak memiliki dasar yang kuat pada pemrograman dan desain perangkat lunak, jika kita tidak meluangkan waktu untuk memahami apa yang kita lakukan, kita akan berakhir dengan frustasi. lingkaran trial and error. Lebih buruk dari itu, teman-teman, pada akhirnya kami akan memperkenalkan bug yang sulit ditemukan, masalah kinerja, dan kerentanan keamanan dalam perangkat lunak kami ⎼ yang omong-omong, seringkali bukan perangkat lunak kami tetapi perangkat lunak perusahaan kami. Pikirkan tentang itu sebentar.

Ada lebih banyak hal dalam pengembangan perangkat lunak daripada menulis kueri SQL, atau membuat titik akhir API, atau memanggil layanan jarak jauh dari aplikasi seluler, atau membuat kode pencarian yang mengutamakan kedalaman. Solusi perangkat lunak lengkap dibuat lebih dari itu. Rekayasa perangkat lunak, sebagai suatu bidang, adalah apa yang dikhawatirkan tentang itu. Oleh karena itu maksud saya di sini adalah, jika Anda tidak tahu harus bertanya apa, menurut Anda jawaban seperti apa yang akan Anda dapatkan? Dan apakah Anda dapat membedakan jawaban yang tepat untuk kasus khusus Anda?

Seperti kata pepatah, Sampah masuk, sampah keluar

Saat Anda membaca jawaban di Stack Overflow, sebaiknya Anda cukup yakin tentang apa yang Anda cari, agar cukup asertif ⎼ ada banyak konten sampah di luar sana juga, ingatlah; dan mereka tidak datang dengan label "sampah". Maka Anda harus mempertimbangkan semua konteks dari pertanyaan awal dan jawaban yang diberikan, melewatkan sampah di sana-sini, sebelum Anda dapat membuat keputusan untuk menyalin & menempelkan beberapa cuplikan kode apa adanya atau menulis solusi Anda sendiri berdasarkan pada yang dibangun pengetahuan ⎼ misalnya masalah spesifik yang Anda coba selesaikan memiliki kasus tepi khususnya. Dan hal ini, berulang kali, akan menambah pengetahuan bagi Anda.

Lihat kemana kita pergi? Lihat poin saya di sini? Lihat bagaimana ChatGPT bisa menjadi jebakan? Anda bertanya, Anda mendapat jawaban. Sebuah jawaban yang sangat meyakinkan sehingga jika Anda tidak memiliki pengetahuan pemrograman yang luas dan solid, Anda membeli omong kosong kuda tanpa menyadarinya. Saya telah melihat cukup banyak dengan teman-teman di Twitter dan yang lainnya. Bahkan dengan algoritma yang dikenal luas.

Dengan demikian, "lebih banyak" ini adalah hal yang harus kita pedulikan (selain yang mendasar) dan yang harus kita fokuskan (asalkan kita memiliki dasar-dasarnya). Yang membawa kita ke fakta tanpa ampun lainnya.

Kami tidak tahu apa yang tidak kami ketahui. Dan satu-satunya hal yang dapat kita lakukan adalah memperoleh pengetahuan baru, lagi dan lagi ⎼ pertama luas , kedua mendalam .

Dasar-dasar Arsitektur Perangkat Lunak, Mark Richards & Neal Ford

Dengan cara ini, mudah-mudahan, kita akan mengetahui apa yang kita cari dan setidaknya memahami jawabannya ketika kita menemukannya.

- Pengetahuan yang luas memberi kita arah untuk mencari jawaban;
- Pengetahuan mendalam membantu kita membedakan jawaban yang ditemukan.

Oke. Dingin. Tapi bagaimana kita melakukannya?

Untuk memperluas pengetahuan Anda tentang apa yang perlu diketahui, menurut saya blog dan video YouTube sangat bagus. Itu adalah konten singkat yang dapat Anda konsumsi setiap hari tanpa berkeringat. Tapi untuk pengetahuan yang mendalam , menurut saya (N=1), tidak ada yang lebih baik daripada membaca buku dan dokumentasi resmi. Dan jika Anda bisa, jika Anda belum melakukannya, dapatkan tempat duduk (fisik atau online) di program universitas (pascasarjana atau pascasarjana).

Sekali lagi, bukan opini populer. Tapi aku sendiri tidak populer, jadi siapa yang peduli?

Memasuki alat LLM

Meskipun demikian, saya memiliki beberapa pendapat yang tidak populer, menurut saya yang ini akan populer: LLM mungkin merupakan alat yang luar biasa untuk membantu Anda mendapatkan pengetahuan yang kuat. Bagaimana itu? Saya akan memberi tahu Anda caranya.

Mulailah dengan bertanya kepada ChatGPT apa yang harus diketahui, katakanlah, tentang pengembangan aplikasi seluler. Kemudian minta tutorial singkat dan video YouTube untuk mendapatkan gambaran besarnya. Selanjutnya, mintalah buku dan ceramah yang sangat direkomendasikan tentangnya. Karena pada akhirnya Anda ingin membaca beberapa artikel yang mendalam, dari penulis yang berbeda, dengan sudut pandang yang berbeda, untuk mendapatkan pemahaman yang kuat tentang topik yang sedang Anda pelajari.

Itu untuk satu hal. Hal lain yang mungkin berguna adalah ketika Anda membaca buku dan terjebak oleh kurangnya pengetahuan tentang subjek yang diperlukan. Minta ChatGPT untuk meringkas subjek tersebut untuk Anda, sehingga Anda mendapatkan dasar sebelum melanjutkan. Hal yang sama yang akan Anda lakukan dengan Google, membaca satu atau dua sumber tetapi cepat dan langsung ke intinya. Namun, setelah itu, lanjutkan dan mendalami subjek tersebut jika itu adalah sesuatu yang penting untuk materi umum yang Anda pelajari. Tidak apa-apa untuk melakukan itu.

Dan keadaan lain yang mungkin sangat membantu adalah saat Anda ingin mengembangkan aplikasi perangkat lunak untuk domain tertentu, Anda tidak terlalu paham dengan semua seluk beluknya. Saya melihatnya beberapa hari yang lalu dan menganggapnya cukup cerdas.

Katakanlah Anda akan mengembangkan aplikasi seluler kebugaran, karena Anda menyukai kebugaran dan sangat senang dengan ide membantu orang menjadi sehat dan segalanya. Oke. Tetapi Anda tidak tahu semua aplikasi yang ada di luar sana, dan fitur yang paling mereka sukai, dan bagaimana aplikasi tersebut dimonetisasi, dll. Ini adalah pertanyaan yang sangat objektif. Jadi, Anda dapat mengajukan pertanyaan ini ke ChatGPT untuk memulai dengan cepat. Anda bertanya tentang persyaratan aplikasi. Anda memintanya untuk, misalnya, menulis email selamat datang yang akan Anda kirim ke pelanggan baru aplikasi kebugaran keren Anda, karena Anda tidak terlalu ahli dalam hal ini. Benar. Sekarang apa? Jika Anda mengerti apa yang saya bicarakan sampai saat ini, Anda sudah memiliki pemahaman yang baik tentang apa yang harus Anda lakukan selanjutnya. Anda memperbaikinya, Anda membuatnya lebih baik, Anda memakai saus spesial Anda. Dengan kata lain, mematahkan inersia, yang merupakan hal yang bisa dibilang paling penting dalam kasus ini, kemudian membuatnya menjadi sangat spesial ⎼ jika tidak, yang Anda miliki hanyalah barang generik untuk dijual. Tidak keren, kurasa.

Jika Anda mendapatkan akses ke GitHub Copilot dan tidak ada salahnya untuk menggunakannya pada pekerjaan Anda, Anda dapat memintanya untuk menyusun potongan kode untuk Anda, seperti metode untuk mengurai file, kasus uji berulang, atau yang lainnya. Anda tahu, hal-hal membosankan yang harus Anda lakukan sesekali dan tidak dapat sepenuhnya dihindari dengan desain kode yang tepat dan pustaka cerdas. Tidak ada yang salah dengan itu. Anda tidak mendapatkan poin ekstra jika tidak melakukannya ⎼ selama tidak ada kebijakan di tempat Anda bekerja.

Mungkin ada banyak aplikasi serupa lainnya, ingatlah. Berpikir tentang itu.

Oh tunggu. Saya memikirkan tentang manfaat terbesar yang dapat diberikan kepada kita: Apakah Anda mengenal orang-orang yang suka memposting di forum meminta solusi untuk tugas sekolah mereka? Seperti, Anda tahu, Anda membaca pertanyaannya dan itu hampir merupakan pernyataan tugas literal. Anda mungkin pernah melihatnya sebelumnya. Ya, sekarang mereka dapat meminta ChatGPT untuk itu dan tidak mengganggu kami. Semua orang senang tentang itu.

Akankah LLM menggantikan programmer manusia?

Tidak, saya rasa tidak. Saya sangat skeptis tentang "X akan menggantikan pemrogram manusia" . Sejak saya mulai dengan pemrograman pada tahun 1997, saya sudah mendengar sedikit tentang mode seperti itu.

Ini kemungkinan akan mengubah cara kita mendapatkan pendidikan tentang pemrograman, bagaimana kita mengatasi hambatan ketika kita macet saat memprogram, bagaimana kita menangani hal-hal yang membosankan, tetapi menggantikan kita, homo sapiens, untuk lebih dari CRUD dan aplikasi yang dikenal luas, tidak, saya Saya sangat skeptis tentang itu. Saya mungkin salah.

Dan ketahuilah, akhirnya, artikel ini menjadi lingkaran penuh dengan apa yang membuat saya termotivasi untuk menuliskannya.

Kemarin saya senang menemukan artikel luar biasa oleh Amy J.Ko , yang sangat menyenangkan untuk dibaca. Pertama karena saya setuju dengan sebagian besar semua yang dia tulis di sana. Kedua, karena tidak seperti saya, dia adalah seorang akademisi dan telah mengikuti materi pelajaran ini selama lebih dari satu dekade. Jadi dia pasti memiliki satu atau dua hal untuk dikolaborasikan dalam seluruh diskusi ini tanpa mempermalukan dirinya sendiri.

Jadi bantulah diri Anda sendiri, hentikan hype, dan baca artikel luar biasa ini untuk mendapatkan pemahaman yang lebih baik tentang topik ini dari sudut pandang yang berbeda:

- Model bahasa besar akan mengubah pemrograman… sedikit
- Model bahasa besar akan mengubah pemrograman… banyak

Tidak ada TLDR; di sana. Luangkan waktu Anda, nikmati perjalanannya.

Sekarang untuk mengakhiri bagian panjang ini dengan hal yang lucu: Saya biasa melihat orang-orang mengolok-olok akademisi sepanjang waktu, mengatakan betapa akademisi jauh dari pengembangan perangkat lunak dunia nyata, dan kemudian, tiba-tiba, orang-orang kagum dan ketakutan. sesuatu yang dihidupkan langsung dari penelitian akademisi. Ironi yang sangat besar. Sungguh waktu yang tepat untuk menjadi seorang akademisi.

Bagaimanapun, sampai jumpa lagi, teman-teman.

Hati-hati dengan hype.

⛧ Lihat juga di lendrosilva.com.br . Masih banyak lagi di sana.