Coding dengan TabNine, Copilot, dan ChatGPT

Saat ini ada beberapa tool pembantu coding berbasis AI. Sejak ada Tabnine yang menyediakan autocomplete dengan AI, saya langsung berlangganan, dan ketika Github meluncurkan Copilot, saya juga langsung memakainya. Saat ini saya sudah menggunakan Tabnine lebih dari setahun dan Copilot selama beberapa bulan, dan ingin menceritakan pengalaman serta tips menggunakan tool-tool ini.

Meme (sumber asli tidak diketahui)

Penggunaan tool asisten programmer berbasis AI tentunya juga menimbulkan pertanyaan: apakah di masa depan programmer akan tergantikan oleh AI? Saya akan membahasnya sedikit di akhir tulisan ini.

Coding di HP dengan NeoVIM dan plugin Copilot

IDE, TabNine dan Copilot

Sebuah IDE biasanya akan memberikan autocomplete berdasarkan file yang sedang kita edit, yang cukup membantu tapi juga terbatas. Saran yang diberikan biasanya hanya nama fungsi, nama method, dan field yang kita gunakan.

Kemudian muncul TabNine versi dasar, yang merupakan tool autocomplete pintar. TabNine ini mirip dengan keyboard ponsel. Di ponsel, ketika kita mengetik, keyboard bisa memprediksi kata apa yang akan kita ketikkan berdasarkan konteks kata sebelumnya, dan kita bisa menerima autocomplete-nya. TabNine cukup mempermudah coding dan cukup akurat. Autocomplete dasar TabNine juga dapat berjalan lokal (tidak terhubung ke internet).

Berikutnya muncul Copilot, yang dapat melengkapi kode hanya berdasarkan komentar. Setelah fitur ini muncul, TabNine juga membuat fitur yang sama. Namun, untuk masalah kemampuan mengimplementasikan kode berdasarkan komentar, Copilot saat ini jauh lebih unggul.

Coding dengan komentar

Dengan Copilot, kita bisa coding dengan menggunakan komentar saja. Misalnya:

//implement bubble sort function
void sort(int *data, int len) { 

Maka Copilot akan mengimplementasikan kodenya untuk kita. TabNine masih sering kesulitan dalam hal coding dengan komentar ini, akan menyarankan beberapa baris, tapi berikutnya sering bingung mengulang baris di atasnya, sedangkan Copilot bisa menyarankan fungsi lengkap sampai puluhan baris.

Berbagai kode yang repetitif juga bisa dihasilkan berdasarkan konteks saat ini. Misalnya:

if (direction==LEFT) {
     x--;
}

Maka Copilot bisa melengkapi baris berikutnya dengan direction==RIGHT dan akan menghasilkan x++. Sebagai programmer, mungkin akan terlihat bahwa kode tersebut sepertinya kurang lengkap. Misalnya: apakah jika x boleh negatif? apakah jika pergi ke kiri lalu mentok atau tiba-tiba kita muncul di kanan? kita perlu memberikan komentar ekstra, misalnya only go to the left if x is non zero.

Test autocomplete Copilot

Kita juga bisa memberikan detail per baris, tidak langsung satu fungsi, misalnya di bagian main, kita bisa memberikan komentar seperti ini:

//get filename from parameter
<autocomplete>
//open the file
<autocomplete>
//read first line
<autocomplete>
//convert into integer
<autocomplete>

Autocomplete akan melengkapi sesuai dengan bahasa pemrograman yang kita pakai saat ini. Copilot memiliki support yang baik di semua bahasa yang saya coba (Rust, Python, dan C), sedangkan TabNine kurang paham Rust, tapi cukup mengerti Python dan JavaScript.

Selama 25 hari terakhir ini saya mengerjakan Advent Of Code, dan berusaha sebanyak mungkin melakukan coding dengan memakai komentar. Saya akan memulai dengan menjelaskan struktur data yang ingin saya buat, fungsi/method yang saya butuhkan untuk struktur itu, lalu bagian utama programnya.

Sebagian fungsi bisa diimplementasikan dengan baik tanpa campur tangan, sebagian salah. Jika ada yang masih kurang jelas, saya akan memperjelas komentar, dan jika tetap salah, saya coding manual.

Saya menyukai cara kerja Copilot ini, dan terkadang bingung harus menulis komentar apa. Tapi setelah beberapa kali mencoba, saya mulai terbiasa, dan merasa lebih efisien. Saya rasa banyak programmer yang masih ragu mencoba tool ini, tapi sebenarnya sangat mudah digunakan. Cukup install, kemudian tinggal memakai saja.

Advent of Code 2022, saya banyak dibantu Copilot

ChatGPT

Walau bukan itu kemampuan utamanya, salah satu kemampuan ChatGPT adalah membantu membuat kode program. Kita berinteraksi dengan ChatGPT menggunakan percakapan biasa seperti menjelaskan kepada programmer. Saat ini kemampuannya terbatas dalam memprogram, dan hanya berguna di konteks tertentu.

Beberapa hal menarik yang bisa dilakukan ChatGPT adalah:

  • menjelaskan potongan program yang sudah ada
  • membantu mendebug (kadang ChatGPT bisa menemukan bagian program yang salah)
  • menjelaskan tradeoff berbagai algoritma
  • menerjemahkan satu fungsi dari satu bahasa pemrograman ke bahasa lain
  • membantu membuat contoh data (misalnya: diberikan struktur tabel dalam SQL, buatkan data dummy dengan “INSERT”).
  • mengubah algoritma versi rekursif menjadi iteratif
  • membuat implementasi inverse fungsi tertentu

Beberapa keterbatasan ChatGPT saat artikel ini ditulis:

  • Inputnya terbatas. Kita bisa saja memberikan konteks program (struktur/kelas yang dipakai, dsb), tapi kemampuan untuk “mengingat” satu sesi masih terbatas.
  • Untuk membuat program baru, ChatGPT bisa membantu untuk memulai
  • Kadang benar-benar ngawur dan keras kepala

Contoh hal ngawur yang kadang disarankan oleh ChatGPT:

  • memberikan nama fungsi/method yang tidak ada
  • memberi tahu kita agar memakai versi library versi X, yang belum ada (misalnya baru ada versi library 1.2, tapi dia menyarankan memakai versi 1.3, dengan alasan bahwa fungsi yang kita mau ada di versi tebaru).
  • memberikan kode yang logikanya jelas salah

Ketika kita koreksi, kadang ChatGPT akan memberikan solusi lain, yang juga salah, dan ketika kita koreksi lagi, akan memberikan jawaban awal lagi (yang masih salah).

Perlu dicatat bahwa: output ChatGPT bisa salah. Kesalahannya bisa kecil, tapi bisa juga sangat serius. Untuk kode yang agak kompleks, ChatGPT sering menghasilkan kode yang sekilas benar, bisa dicompile, bahkan hasilnya benar untuk kasus paling sederhana, tapi secara umum hasilnya salah. Ini sangat berbahaya jika seseorang percaya saja dengan hasil ChatGPT, tapi tidak memiliki test case untuk mengujinya.

Keamanan dan Privasi

Baik TabNine maupun Copilot defaultnya tidak akan menggunakan kode yang kita tuliskan untuk bahan training AI, jadi teorinya aman saja menggunakan keduanya untuk kode yang rahasia ataupun sifatnya umum. Tapi perlu dicatat bahwa Copilot wajib menggunakan cloud untuk autocompletenya, jadi kode akan dikirimkan ke server. Jadi tetap ada kemungkinan data disadap di jalan, atau ada kemungkinan server mereka memiliki kelemahan.

Sesuai FAQ ChatGPT versi saat ini, data conversation kita akan dipakai untuk memperbaiki sistem mereka. Dan percakapan kita dengan ChatGPT akan direview. Jadi sebaiknya jangan memberikan hal-hal bersifat rahasia pada ChatGPT. Sebagai tambahan, sebaiknya juga memeriksa kebijakan privasi dari TabNine dan Copilot untuk memastikan bahwa data yang kita gunakan dengan aplikasi tersebut tidak akan digunakan secara tidak sesuai.

ChatGPT: data kita akan dipakai

TabNine memiliki opsi: bisa full offline, bisa hybrid, dan bisa cloud only. Untuk offline, maka data akan diproses lokal, tapi kemampuan autocomplete sangat terbatas (masih cukup membantu dibandingkan autocomplete standard IDE). Kelemahan autocomplete lokal: boros batere jika memakai laptop.

Untuk hybrid, TabNine akan melakukan komputasi lokal, tapi juga akan terhubung dengan server TabNine untuk melakukan pemrosesan di sana. Untuk cloud only, TabNine akan terhubung dengan server TabNine secara terus-menerus dan menggunakan cloud seperti Copilot.

Pilih yang mana?

ChatGPT dapat membantu kita menemukan berbagai library, struktur data, dan algoritma untuk masalah yang kita ajukan. Namun, jika kita belum yakin, kita perlu melakukan riset lanjutan menggunakan Google untuk memastikan bahwa nasihat ChatGPT benar.

Data ChatGPT terbatas sampai tanggal cut-off trainingnya, sehingga kadang ada solusi baru yang lebih baik yang muncul dalam hitungan bulan. Oleh karena itu, sebaiknya ChatGPT hanya digunakan untuk menjawab hal-hal generik saja di versi prototipe saat ini, karena privasi tidak dijamin. Alternatifnya adalah menggunakan solusi berbayar dari OpenAI (berbagai versi GPT3).

Saat mengimplementasikan kodenya, saya akan menggunakan Copilot jika tidak membutuhkan kerahasiaan tinggi, dan akan menggunakan TabNine lokal jika memang perlu kerahasiaan. Contohnya, jika ada NDA (Non Disclosure Agreement) untuk pentesting API tertentu, saya lebih memilih menggunakan TabNine agar 100% yakin tidak akan membocorkan URL, API Key, dsb

Peran Programmer di masa depan

Apakah profesi programmer akan segera hilang? Menurut saya, tidak. Namun, teknologi AI dapat membantu mengurangi jumlah programmer yang dibutuhkan untuk mengimplementasikan sesuatu dan meningkatkan produktivitas programmer.

Ada banyak aplikasi sederhana yang dapat dibuat dengan AI, tapi menurut saya ini tidak akan terlalu mempengaruhi banyak hal. Saat ini sudah ada banyak low-code atau no-code platform, dan banyak juga yang menjual template aplikasi yang dapat diedit sesuai keinginan kita.

Aplikasi yang kompleks masih membutuhkan programmer, dan tanpa disadari, banyak aplikasi memiliki aturan yang kompleks. Contohnya, aplikasi shopping memiliki aturan diskon yang sangat kompleks (yang juga membuat saya bingung): promo A dapat digabungkan dengan promo C, tapi tidak bisa digabungkan dengan promo B, dan maksimum tidak boleh lebih dari 10000, dan metode pembayaran jika digabung dengan promo C harus menggunakan Wallet yang terdapat di aplikasi Shopping.

AI saat ini belum mampu mendebug aplikasi kompleks, terutama yang melibatkan situasi real world. Misalnya, aplikasi tidak akan membuka link jika dijalankan di Android 13 dan pengguna menggunakan browser Samsung Internet. Atau yang lebih kompleks lagi: sistem autodriving traktor memiliki masalah di pencahayaan tertentu atau di suhu tertentu.

Penggunaan AI masih menghasilkan kesalahan yang bisa dimaafkan, seperti jika AI menghasilkan gambar dengan tangan yang cacat, kita dapat meminta AI menghasilkan gambar lagi. Namun, jika kasusnya adalah kode program, pembayaran, atau menangani kesehatan seseorang, AI masih sulit dipercaya (untuk saat ini).

AI untuk programming dapat dibandingkan dengan AI untuk self-driving car. Sejak lebih dari 5 tahun yang lalu, self-driving car sudah digaungkan akan menggantikan mobil biasa. Namun, sampai saat ini, pemakaiannya masih sangat terbatas.

Penutup

Tidak tertutup kemungkinan bahwa di masa depan, AI akan dapat melakukan lebih banyak hal lagi dari yang sekarang. AI kemungkinan akan bisa menghasilkan test case dan mengecek sendiri kesalahan kodenya, sehingga semakin sedikit hal-hal yang perlu dilakukan oleh programmer.

Atau bahkan, AI bisa cukup generik, sehingga sebuah model AI bisa menjadi aplikasi apa saja. Namun menurut saya, ini masih jauh di masa depan. Inferensi dengan AI masih membutuhkan kemampuan komputasi yang sangat tinggi, dan masih perlu progress sampai dapat digunakan di komputer yang umum dipakai oleh orang.

Profesi programmer menurut saya akan tetap ada. Sama seperti petani yang jumlahnya semakin sedikit, tapi tetap ada. Di Amerika, kebanyakan petani sudah menggunakan sistem otomatis, sehingga dapat mengelola tanah berhektar-hektar sendirian. Demikian juga di masa depan, akan semakin sedikit programmer, tapi tanggung jawab dan scope pekerjaan mereka akan semakin besar.

Saat ini, level AI sudah cukup membantu bagi programmer yang paham, dan dapat menyesatkan programmer pemula. Menurut saya, programmer saat ini sebaiknya minimal mengenal AI dan minimal pengunaannya. Sebagai minimum, pandanglah AI sebagai salah satu alat untuk mempermudah pekerjaan.

Saya masih menemukan banyak teman di bidang IT yang belum mencoba ChatGPT (hanya mencoba memakainya, bukan memahami arsitektur Transformer di AI). Banyak programmer yang belum mencoba Copilot atau TabNine. Banyak yang memiliki prekonsepsi yang salah: “ah, ini hanya chatbot biasa kan?” atau “ini hanya autocomplete saja kan?” tanpa mencobanya terlebih dahulu. Semoga artikel ini dapat memberikan motivasi bagi semua orang untuk mencoba berbagai alat AI saat ini.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.