Hal - Hal Inti yang Wajib Dikuasai Seorang Programmer

Muhammad Arslan 17 Juli 2017

Hal - Hal Inti yang Wajib Dikuasai Seorang Programmer

Banyak sekali bahasa pemrograman dan tools yang free dan open source sehingga dapat membuat kita bimbang memilih mereka karena memang solusi yang ditawarkan pun sangat bagus dan menarik. Banyak juga bahasa pemrograman dan tools yang berbayar yang justru semakin memudahkan kita untuk menggunakannya dan sudah banyak hal teknis yang ditangani oleh tools berbayar tersebut.

Namun semua itu hanya diferensiasi, pada dasarnya investasi waktu kita harusnya diluangkan untuk sesuatu yang mendasar dan bersifat global, sehingga bila kita pindah bahasa pemrograman atau tools pun tidak akan kaget dan panik karena harus belajar dari awal. Kita pun tidak harus merasa terlalu sulit bila harus berpindah version dari versi yang lama ke versi yang terbaru.

Apapun bahasa pemrograman dan tools-nya. Sebenarnya ada beberapa teknik yang bisa dikuasai seorang programmer dan dapat membuat dirinya menjadi dinamis terhadap tools apapun. Apa sajakah itu? berikut adalah hal - hal penting yang harus dikuasai oleh seorang programmer. Cekidot gan :D.

###1. Membaca Dokumentasi

Hal inti yang satu ini sering dilupakan oleh programmer padahal sebagian besar masalah dapat diselesaikan melalui dokumentasi (selama dokumentasinya lengkap). Karena sudah jelas bahwa pihak pemilik library, aplikasi pihak ketiga, ataupun sistem yang kita gunakan sudah terdokumentasi dengan baik.

Terlebih bila dokumentasi sudah mempunyai Getting Started, Tutorial, API Reference, dan Changelog. Dokumentasi tersebut sudah sangat lengkap untuk kita gunakan sebelum bertanya hal yang sudah sering ditanyakan ke forum. Selain mengurangi waktu untuk menanggapi komentar pedas dari para senior yang ada di forum. Kita juga memiliki waktu untuk menangani masalah kita sendiri untuk menjadi lebih baik.

Dokumentasi pun bisa saja bukan yang resmi, artikel dan forum yang ditulis oleh komunitas pun dapat menjadi bahan pelajaran bagi seorang programmer.

###2. Algoritma dan Struktur Data

Mengapa algoritma dan struktur data itu penting? bayangkan bila seseorang tidak bisa memecahkan masalah yang sebetulnya bisa diselesaikan dengan looping dalam looping atau harus mentranslasikan sebuah aturan bisnis hanya menjadi struktur if yang bersarang. Belum lagi tidak sedikit programmer yang masih belum mengerti apa itu fungsi.

Algoritma baik programmer yang kuliah di jurusan IT atau bukan, tetap harus mengetahui dasar dan prinsipnya terlebih dahulu. Bahkan untuk masalah yang sama ada beberapa algoritma yang dapat digunakan agar eksekusi kode lebih cepat. Bahkan kita pun harus mampu untuk menerjemahkan algoritma yang dirancang oleh seseorang untuk ditransalasikan menjadi kode program. Oleh karena itu penguasaan algoritma dasar sangat diperlukan mengingat dasar dari pemrograman itu sendiri adalah algoritma.

Struktur data merupakan representasi data kompleks yang digabung dari data sederhana dan mempunyai operasi tersendiri. Sebuah array memang cukup. Namun lebih mudah bila kita mampu menggunakan list untuk sebuah operasi deret, atau merepresentasikan sebuah jalur dengan graf atau tree. Struktur data sangat banyak dipelajari oleh jurusan IT, namun seringkali dilupakan oleh mahasiswanya sendiri.

Walaupun di dunia pekerjaan jarang sekali digunakan struktur data. Bila menguasainya akan mengubah cara berpikir kita untuk menangani suatu masalah. Dan tidak jarang ada kasus yang memang membutuhkan struktur data untuk menyelesaikan masalah tersebut. Misalnya pencarian jalur terpendek atau riset operasi.

###4. OOP dan Design Pattern

Kenapa sih harus belajar OOP? sebenarnya OOP ini membuat kode program kita menjadi lebih terstruktur dan lebih mudah dibaca ketimbang bila kita menulisnya dengan satu skrip besar atau masih secara prosedural. Selain itu prinsip OOP ini ditopang pula oleh UML yang mana dengan desain aplikasi dan sistem yang sama dapat direpresentasikan ke berbagai bahasa pemrograman.

Tingkat lanjutnya adalah design pattern, dimana kita tidak perlu membuat pola kode kita sendiri dan dapat mencomot pattern yang sudah diterapkan oleh orang lain. Semisal kita ingin membuat sebuah class yang dapat menghasilkan class lain. Atau ingin menerjemahkan URL untuk dieksekusi pada class dan method dari suatu class melalui frontend controller. Semuanya dapat dipelajari melalui design pattern.

Salah satu alasan utama adalah bila kamu ingin menguasai web framework, mempelajari library, atau menulis suatu library. Dengan OOP dan design pattern, library yang kamu buat akan menjadi lebih baik dan dapat digunakan oleh banyak orang. Sedangkan bila kamu menguasai OOP dan design pattern, kamu pun tidak akan kesulitan bila harus mengobrak - ngabrik suatu web framework sampai ke dalam - dalamnya.

Walaupun OOP itu penting, namun tidak semua bahasa pemrograman harus menggunakan OOP. Sebagian bahasa pemrograman fungsional sangat tidak memerlukan OOP dalam mengimplementasikan kode - kode yang dibuat oleh bahasa pemrograman tersebut.

###5. Desain Aplikasi dan Database

Hanya coding saja tidak cukup. Walaupun kamu jago coding, programmer harus juga bisa menganalisis suatu sistem dan aplikasi sendiri. Bagaimana menerjemahkan kebutuhan bisnis menjadi alur aplikasi mulai dari menerima input meneruskannya ke proses dan menampilkannya menjadi suatu output.

Data - data yang lewat selama di dalam proses suatu sistem dan aplikasi, haruslan disimpan ke dalam sebuah perangkat yang dinamakan database dan tentunya untuk mendesainnya pun diperlukan keahlian khusus. Kamu harus belajar desain database mulai dari Boyce-Code Normal Form sampai Entity Relationship Diagram.

Untuk desain aplikasi sendiri kamu dapat mempelajari UML, DFD, dan Flowchart sebagai alat bantu untuk merepresentasikan ide - ide kamu dalam membangun suatu alur kerja dari aplikasi atau sistem yang akan kamu bangun.

Misal untuk membuat sebuah aplikasi pendaftaran pelatihan saja, tentu kita membutuhkan suatu form, memvalidasinya, sampai mencatatnya ke database yang akan kita gunakan.

###6. Matematika

Tidak semua programmer wajib menguasai matematika, namun menguasai matematika dasar hukumnya wajib. Masa iya programmer tidak mengerti kali, bagi, tambah, atau kurang? Matematika, suka tidak suka tetaplah harus dikuasai apalagi bila seorang programmer yang terjun dalam dunia simulasi, bisnis, machine learning, akuntansi, dan ekonomi.

Tidak bisa seorang programmer lepas tangan untuk tidak menguasai matematika dasar dan matematika yang terkait dengan kasus yang sedang dikerjakannya. Walaupun beberapa rumus dan formula dikerjakan oleh orang lain. Namun seorang programmer wajib tahu bagaimana cara merepresentasikan suatu formula kedalam kode aplikasi yang dibuatnya.

###7. Bahasa Inggris

Salah satu kelemahan programmer yang tidak berbicara bahasa inggris sebagai bahasa ibunya adalah malas membaca artikel atau solusi lain dalam bahasa Inggris. Padahal manual dan dokumentasi mayoritas ditulis menggunakan bahasa Inggris. Selain itu konten-konten belajar tingkat intermediate sampai advance ditulisnya pun menggunakan bahasa Inggris.

Bahasa Inggris sangat memegang peranan penting. Walaupun programmer hanya sampai tingkat pasif dimana hanya menggunakannya untuk kebutuhan membaca saja. Bahasa Inggris juga menjadi bahasa standar untuk berkomunikasi dengan klien atau rekan sesama programmer dari belahan dunia lain (selama masih bisa berbicara bahasa Inggris).

###8. Memaksimalkan Sistem Operasi yang Digunakan

Sistem operasi yang kita gunakan masih menjadi misteri bagi beberapa programmer. Padahal sistem operasi yang digunakannya bisa menjadi titik awal bagi dia untuk berkarir dengan menggunakan bahasa pemrograman tertentu. Misal pengguna Windows bila menyadari bahwa sistem operasinya itu sangat potensial bila digunakan untuk membuat aplikasi dengan ASP.NET, SQL Server, dan Azure. Tentu saja akan dimanfaatkannya untuk mempelajari ketiga teknologi tersebut di Windows.

Selain itu bila programmer yang menggunakan OSX tahu bahwa sangat besar potensi bila kita berkarir untuk membuat aplikasi iOS tentu mereka akan mulai memasang XCode dan Objective-C atau Swift untuk mulai membuat aplikasi mobile yang eksklusif untuk produk Apple saja.

Dan bila seseorang tahu bahwa Linux yang digunakannya hampir sama strukturnya dengan server Linux yang biasa dipasang di VPS cloud hosting tentu mereka akan mulai belajar membangun infrastruktur sendiri dan mempelajari berbagai potensi yang terkunci di dalam Linux untuk menjadikan Linux di laptopnya sebagai simulasi untuk Linuxnya yang ada di Server.

###9. Jaringan Komputer

Sebelum beranjak ke internet dan cloud computing tentu seorang programmer wajib menguasai dasar - dasar jaringan komputer seperti ip address, subnetting, dan client server. Mungkin banyak yang malas untuk menguasai TCP/IP atau OSI Layer secara menyeluruh, namun wajib tahu beberapa hal mendasar agar programmer lebih cakap dalam menguasai jaringan komputer.

Tidak semua aplikasi yang dikembangkan harus terhubung ke internet. Tentu dengan bantuan network engineer, seorang programmer harus tahu juga seluk beluk jaringan komputer untuk menghubungkan aplikasi yang dikembangkannya kepada berbagai perangkat yang terhubung melalui jaringan komputer baik lokal, antar gedung, ataupun antar wilayah.

Terlebih bila membangun aplikasi perkantoran, dimana kita harus memaksimalkan arsitektur jaringan komputer yang dibangun network engineer terhadap aplikasi kita.

###10. Internet

Programmer tidak bisa mengirim e-mail? Masih ada kok yang seperti itu, di tengah era cloud yang sedang booming tentu saja dasarnya harus kita kuasai dulu. Berbagai protokol pun harus kita ketahui walaupun tidak kita kuasai. Seperti beberpaa protokol berikut:

  • HTTP
  • HTTPS
  • WebSocket
  • WebSocket Secure
  • SMTP
  • FTP
  • TELNET
  • Socket
  • Thrift
  • SOAP
  • Oauth
  • Json Web Token
  • dan lainnya

Tidak hanya berbagai protokol yang harus dikuasai, beberapa layanan dasar internet seperti email harus kamu kuasai untuk proses bertukar informasi dan mengikuti suatu layanan aplikasi yang tersedia secara online.

Tidak lupa pula seorang programmer seyogyanya menguasai berbagai aplikasi yang berkaitan dengan internet, dan mampu membangun salah satu komponen infrastrukturnya sendiri. Misal web server dan mail server.

###11. Source Management

Git, Svn, Mercurial, ketiganya adalah tools yang dapat memudahkan kamu untuk melakukan source code management. Masih suka menggabungkan source code dengan flashdisk? Lupakan! Waktunya kamu menggunakan source code management.

Masalahnya bila kamu harus mengerjakan suatu proyek bersama 10 orang tapi masih menggunakan flashdisk apakah tidak akan repot? Tentu saja akan repot. Dengan source code management, kamu dapat melihat kode yang konflik, dapat rollback ke kode sebelumnya, dapat menambahkan komentar pada perubahan kode yang ditambahkan, dan yang paling utama adalah penggabungan kode program yang ditulis dari beberapa orang yang berbeda.

Selain itu source code management memudahkan kamu untuk mem-backup source code kamu di server tempat layanan tersebut berada agar tidak terjadi kecelakaan yang tidak diinginkan.

Beberapa layanan source code management yang terkenal dan gratis antara lain, BitBucket, Github, dan GitLab.

###12. Cloud Computing

Tidak harus semua programmer menguasai cloud computing, namun bila menguasai sedikit saja, tentu akan membantu bila sewaktu-waktu diperlukan. Rata-rata cloud computing sudah berupa managed service yang ditawarkan suatu vendor. Ada juga yang on-premise dan harus dikelola sendiri.

Misalnya saja, kita dapat melakukan kerjasama dengan vendor tertentu dengan tipe kerjasama berupa kampus dan mahasiswa. Atau juga dengan kerjasama berupa akselerator bisnis. Kamu dapat memanfaatkan layanan cloud mulai dari IaaS, SaaS, sampai PaaS. Selain itu kamu pun dapat dengan mudah menangani masalah availibility dan reliabilitas aplikasi yang kamu kembangkan.

Selain itu beberapa aplikasi yang sudah menjadi cloud seperti Google Docs atau Trello, dapat kamu gunakan untuk mendukung proses pembuatan aplikasi yang sedang kamu kerjakan saat ini seperti pendokumentasian proyek atau pembagian tugas dalam proyek tersebut.

###13. Package Manager

PIP, NPM, NuGet, Composer, Yarn, Gem, GoPkg, dan lainnya merupakan salah satu dari sekian package manager yang sudah terkenal di pengguna bahasa pemrogramannya masing - masing. Memang kita terbiasa menggunakan class - class yang kita buat sendiri dan digabungkan dengan source proyek kita. Namun alangkah lebih baik bila kita mulai mengubah kode class kita ke dalam package manager sesuai bahasa pemrograman kita.

Selain itu kelebihan dari menggunakan package manager adalah mudahnya mengelola library yang kita gunakan atau yang kita buat, sehingga bila ada update terbaru cukup meng-update library tertentu saja ketimbang mengganti file-nya secara manual dan membuat kita capek sendiri.

###14. Unit Testing

Cukup banyak perusahaan yang menaruh perhatian besar terhadap unit testing demi meningkatkan kualitas produk mereka. Ada juga yang tidak peduli dengan unit testing karena memang lebih penting selesai sebelum deadline dan deliver.

Unit testing sangat dibutuhkan oleh seorang programmer untuk memastikan kode yang dibuatnya sesuai dengan bisnis proses dan yang terpenting adalah mengurangi waktu pengujian yang terlalu lama dibanding harus memeriksanya secara manual dan diulang lagi dari awal bila ada penambahan fungsi baru.

Pada umumnya bahasa pemrograman yang tersedia sudah memiliki alat untuk melakukan unit testing. Misalnya di Java ada Junit, Python ada UnitTest, PHP ada PHPUnit, dan lainnya.

###15. Text Editor

Terdengah remeh, namun memang text editor wajib dikuasai juga demi meningkatkan produktivitas saat menulis source code. Pastikan kamu menguasai segala fitur dan shortcut yang sudah ada di dalam text editor tersebut.

Banyak yang menguasai Vim, tidak sedikit juga yang menguasai Sublime Text dan Visual Studio Code. Hampir semua teks editor sudah memiliki fitur - fitur canggih seperti multiline editing, split view, minimap, full text search, dan lainnya.

###16. Bidang yang Digeluti

Terlalu banyak hal-hal inti yang dikuasai, selain itu, tidak sama bahan belajar seorang desktop application programmer yang menggunakan VB.NET dengan mobile application programmer yang menggunakan Android, masing-masing mempunyai disiplin dan teknik yang berbeda dalam membuat sebuah aplikasi.

Belum lagi bila kita membandingkan backend web application programmer dengan frontend web application programmer keduanya memiliki fokus yang mirip namun berbeda. Dimana frontend web application programmer dituntut untuk lebih mahir menggunakan HTML - CSS - Javascript dalam membuat tampilan web yang memukau. Sedangkan backend web application programmer dituntut untuk membuat proses bisnis menjadi aplikasi web berupa service ataupun non service yang dapat mengirim email, integrasi dengan sistem lain, mencetak laporan, dan menyimpan data ke database.

Tidak sama juga dengan programmer yang menggeluti bidang IoT dimana mereka lebih fokus pada mikrokontroler dan rangkaian elektronika untuk menangkap suatu data dari entitas bergerak dan lingkungan sekitar.

Oleh karena itu ketika seorang programmer terjung ke suatu bidang, diharapkan dia mau meluangkan waktu untuk mempertajam konsentrasinya di bidang yang digelutinya. Sehingga menjadi lebih ahli di konsentrasinya walaupun belum tentu mahir di bidang lainnya.