Saat programmer berbicara hal teknis

Seringkali kita temui bahwa seseorang menempati sebuah posisi pada pekerjaan seperti melompat atau tidak melalui jenjang yang seharusnya dilalui, sehingga jenjang pengetahuan dan pengalaman yang seharusnya dimiliki sering terlewatkan. Hal ini juga sering terjadi di dunia IT dimana para analis dan manager adalah orang2 yg belum pernah berpengalaman diposisi engineers.

Hal ini berdampak pada pandangan para engineer terhadap para Analyst dan manager dimana mereka beranggapan bahwa Analyst dan manager tidak memiliki cukup pengetahuan teknis, sehingga sering sekali para programmer memberi penjelasan yang aneh dan sering mengada2.

Namun hal ini akan terdengar sangat lucu bahkan konyol bila mendengar programmer mencoba mengeluarkan istilah2 teknis untuk membuat para Analyst dan manager pusing dan akhirnya menyetujui saran mereka bila sebenarnya para Analyst dan manager adalah orang yang memiliki pengalaman sebagai engineer. Dimata mereka yg memiliki pengalaman teknis, tindakan seperti ini malah akan menjadi bumerang dimana mereka malah akan menganggap programmer yang seperti ini adalah tipe yang sangat tidak profesional dan harus segera diganti.

Maka bagi anda para developer, sebaiknya lebih berhati2lah bila ingin melakukan hal diatas, pastikan anda benar2 tau latar belakang orang yang anda ajak bicara, bisa jadi mereka hanya memperhatikan sikap anda dan berfikir kapan harus mengeluarkan anda dari tim.

Haruskah selamanya jadi programmer ?

Terlepas dari bagaimana masyarakat di Indonesia memandang dan menilai profesi programmer, sebagai sebuah profesi, programmer juga merupakan sebuah jenjang karir. Banyak orang yang berprofesi sebagai programmer tetap menekuni profesi tersebut hingga akhir karirnya karena berbagai alasan, ada yang karena memang hanya merasa bahwa programmer lah profesi yang diminatinya dan tidak pernah terfikir untuk melakukan pekerjaan lain selain menulis program. Ada juga yang menginginkan profesi lain yang masih berkaitan dalam bidang IT namun memiliki jenjang yang lebih tinggi dari programmer akan tetapi dengan berbagai kondisi dan alasan belum dapat meraihnya.

Pertanyaaan tentang haruskah selamanya jadi programmer memang bukan ditujukan bagi mereka yang memang telah memilih bahwa programmer adalah satu - satunya profesi yang diminatinya, pertanyaan ini adalah bagi mereka yang menginginkan untuk menjejaki karir selanjutnya setelah programmer. 

Programmer adalah mereka yang menulis kode program.
Cara paling mudah untuk meraih karir selanjutnya adalah dengan memasuki perusahaan baru dan melamar untuk jabatan yang lebih tinggi dari dari programmer diperusahaan lain berbekal pengalaman kita sebagai programmer, dan bila diterima, memang anda sudah menjajaki karir selanjutnya, namun apakah dengan memiliki jabatan baru ini anda sudah bukan lagi programmer ?, bisa ya, bisa tidak. Banyak dari programmer yang telah menjajaki karir selanjutnya diatas programmer yang pada kenyataannya masih melakukan hal yang dilakukan programmer, yaitu menulis kode program, lalu apa bedanya ? apakah hanya sebatas "yang penting ada perubahan gaji". Bila demikian, anda tetaplah seorang programmer yang memiliki gaji yang lebih baik dari sebelumnya, anda belum menjejaki karir selanjutnya.

Banyak programmer yang telah menjejaki karir selanjutnya yang memiliki jabatan yang tidak memiliki kata - kata "developer, programmer" seperti Development Lead, Developer Team Leder, dan sebagainya seperti Analyst, Project Manager, Product Manager, dan sebagainya tetap menulis kode program, sedangkan mereka telah membawahi bebera programmer yang seharusnya melakukan hal ini. Ya, memang menulis kode program merupakan godaan atau kebiasaan yang sangat sulit hilang. dengan alasan dan kondisi apapun anda tetap menuliskan kode program. Alasan paling klasik adalah disuruh bos, atau project sedang banyak sehingga harus bantu2 programmer dsb. Namun bukankah ketika anda sedang fokus menulis kode program, anda akan kehilangan fokus anda untuk melakukan hal - hal yang seharusnya anda lakukan sesuai dengan kapasitas jabatan baru anda ?.

Bila kita tidak dapat memikirkan hal lain selain ikut menulis kode, mungkin memang belum saatnya untuk berada diposisi lain selain programmer.
Pikirkan apa yang seharusnya anda lakukan untuk tim pada posisi anda, dan bantulah tim dalam kapasitas anda, hargailah bahwa mereka juga (pada akhirnya) dapat melakukan pekerjaan mereka, fokuskanlah diri anda pada fungsi seharusnya.


Crapware, Sebuah kesalahan yg disembunyikan

Dalam pengembangan aplikasi, kesalahan - kesalahan dalam pembuatan sering sekali terjadi dan tidak jarang pula kesalahan tersebut lolos dari proses pengujian dan sampai ke user. Kesalahan - kesalahan tersebut sangat beragam, dari mulai kesalahan yg nyata seperti munculnya error, kesalahan logika yang menyebabkan aplikasi tidak menghasilkan output yang diinginkan, hingga kesalahan yang tidak terlihat namun baru berasa dampaknya setelah diimplementasikan dalam jangka yang agak lama.

Kesalahan yang tidak terlihat diawal karena tidak menyebabkan output yang salah merupakan kesalahan yang paling sulit untuk diperbaiki karena kesalahan seperti ini biasanya datang dari kesalahan perancangan awal dari aplikasi. Kurangnya baiknya proses analisa perancangan aplikasi biasanya menjadi penyebab utamanya, dan kebanyalan disebabkan kurang kompetennya orang yang melakukan perancangan aplikasi. Kesalahan ini akan membuat para developer menghabiskan banyak waktu untuk memperbaikinya.

Kesulitan paling besar untuk memperbaiki kesalahan seperti ini biasanya datang justru tidak dari sisi teknis, mamun lebih sering datang dari sisi developer yang tidak mau mengakui bahwa mereka telah membuat sesuatu yang salah atau dengan cara yang salah. Dalam proses mencari penyebab aplikasi tidak berjalan baik menjadi sulit karena fakta sering tertutup oleh gengsi para developer.

Cara yg terbaik namun sangat berat untuk dilakukan adalah untuk menghentikan memperbaiki kesalahan demi kesalahan yg mulai muncul seiring waktu. Lebih baik untuk menghentikan pengembangan terhadap aplikasi yang telah memakan banyak waktu untuk perbaikan namun tidak membuahkan hasil yang signifikan. Berusahalah menerima bahwa aplikasi tersebut telah gagal.

Selanjutnya lakukan analisa ulang terhadap Requirement awal aplikasi tersebut, dan mulailah merancang dengan mempertimbangkan resiko kesalahan yang telah dialami.

Rework sebuah aplikasi adalah pilihan terakhir yang hampir tidak pernah diambil oleh developer, namun bagi mereka yang telah melakui proses rework sebuah kesalahan seperti ini akan membuka sebuah wawasan baru dimana mereka akan mulai percaya bahwa waktu rework is worth every second.

Membuat Fungsi Auto Updater Aplikasi

Overview

Walaupun saat ini aplikasi berbasis web dan mobile telah marak, masih banyak bisnis yang menggunakan aplikasi desktop, oleh sebab itu masih banyak juga software house yang membuat produk aplikasi desktop. Namun sebagaimana kita ketahui, tantangan utama dalam perawatan aplikasi desktop adalah melakukan update pada aplikasi, terutama bila aplikasi merupakan sebuah mass product atau aplikasi terinstall di banyak komputer dengan lokasi yang berbeda - beda. Pada kondisi ini biasa tim support akan sangat kesulitan apabila harus meng-update aplikasi dengan menginstall secara manual langsung ke masing - masing komputer, selain memakan banyak waktu, juga akan memakan banyak biaya bila aplikasi tidak terdapat pada satu lokasi yang sama.

Solusi untuk mengatasi hal ini salahsatunya adalah dengan menanamkan fungsi update otomatis seperti yang biasanya terdapat pada aplikasi - aplikasi anti virus. Tentu saja untuk dapat mengimplemenasikan dengan baik fungsi ini, tiap - tiap komputer memerlukan koneksi internet untuk dapat mendownload paket update aplikasi seperti juga yang terjadi pada aplikasi - aplikasi anti virus. Pada artikel ini saya akan memberi contoh alur fungsi update melalui FTP, artikel ini hanya membahas hingga level alur logika program, sehinga anda dapat mengimplementasikannya menggunakan bahasa program apapun yang anda sukai.

Cara Kerja Updater

Cara kerja dari fungsi updater menggunakan dua buah executable, dimana executable pertama adalah executable utama aplikasi anda yang selanjutnya akan kita sebut sebagai MainExe, dan executable kedua yaitu executable selanjutnya akan kita sebut sebagai UpdateExe yang berfungsi untuk mengextract paket update, mengeksekusi query update (bila perubahan aplikasi memerlukan perubahan pada database), dan kemudian kembali memanggil MainExe untuk menjalankan aplikasi yang sudah terupdate.

untuk itu kita akan membutuhkan pembanding antara versi yang sedang berjalan dengan versi yang tersedia pada FTP, dengan demikian kita akan membutuhkan sebuah text file (*.txt) yang akan kita tempatkan di FTP sebagai acuan update yang selanjutnya akan kita sebut VersionFile. Pada FTP hanya boleh ada 1 file penanda update atau versi yang tersedia di FTP, dan file ini akan selalu anda rewrite isinya dengan nomor versi terbaru tiap kali anda upload versi terbaru ke FTP, sedangkan format dari nomor versi aplikasi bebas anda sesuaikan dengan kebutuhan fungsi pemeriksaan version aplikasi yang anda gunakan pada level pemrograman.

Paket Update merupakan sebuah archive file yang berbentuk executable untuk mempermudah proses extract sehingga tidak membuyuhkan library khusus untuk proses extract. Paket update bisa berisi file - file seperti :
  1. MainExe sebagai executable utama yang terupdate
  2. Library file (*.dll) bila anda perlu mengupdate file library
  3. Query File apabila anda perlu untuk mengupadate database, file ini bisa berbentuk plain text atau format apapun sesuai kebutuhan anda.
  4. File Update Notice, apabila anda ingin menampilkan informasi fitur apa saja yang ditambahkan atau bug apa saja yang diperbaiki kepada user.

Fungsi Pemeriksaan Update

Fungsi pemeriksaan update berfungsi untuk secara berkala melakukan koneksi ke FTP dan mendownload VersionFile, membaca no versi dan membandingkan dengan no versi pada MainExe, kemudian selanjutnya apabila no versi yang ada pada VersionFile lebih besar (berarti ada update terbaru), maka funsi ini akan mendownload file paket update. Dan dikarenakan proses pemeriksaan akan dilakukan secara berkala, sebaiknya anda menuliskan fungsi ini menggunakan thread (multi threading) yang berbeda dengan thread utama aplikasi yang berinteraksi dengan user. Berikut ini adalah workflow dari fungsi pemeriksaan update.


Fungsi Notifikasi Update

Selanjutnya setelah paket update terdownload, anda dapat memunculkan notifikasi pada tampilan UI aplikasi anda bahwa ada update terbaru yang tersedi dan siap diupdate, Sebaiknya notifikasi ini dibuat menggunakan fungsi khusus yang memeriksa apakah ada paket update yang belum dieksekusi dan tetap menampilkannya selam update tersebut belum dieksekusi. gambaran sederhana dari fungsi ini adalah memeriksa apakah terdapat file paket update, dan bila ada, maka akan memunculkan notifikasi, dengan logia demikian maka tentunya kita tidak boleh lupa untuk menghapus paket update setelah update selesai dilakukan. Berikut ini adalah workflow dari fungsi notifikasi update. Pada sisi UI, notifikasi ini juga dapat kita berikan sebuah tombol agar user dapat melakukan update.

Fungsi Eksekusi Update

Setelah user mengklik tombol update atau dengan cara lainnya sehingga fungsi update ter trigger, maka selanjutnya kita akan mengeksekusi fungsi update untuk mengextrak isi paket updater dan menggantikan MainExe dengan versi yang terbaru dan meletakkan file lainnya sesuai kebutuhan, untuk hal ini maka sangat penting anda perhatikan untuk melakukan setting berupa silet file replace saat anda membuat file paket updater. Dan apabila diperlukan, anda juga dapat menambahkan sebuah fungsi untuk mengeksekusi query SQL untuk melakukan update terhadap database apabila perubahan yang terjadi pada MainExe juga membutuhkan perubahan dari sisi database, proses eksekusi update ini dilakukan oleh UpdateExe. Berikut ini adalah workflow dari proses eksekusi update.


Kesimpulan

Setelah file updater diextract dan menggantikan (replace) MainExe dengan versi terbaru dan setelah mengeksekusi file query (bila dibutuhkan), maka kita sudah dapat memanggil MainExe dari UpdaterExe untuk menjalankan versi terupdate dari aplikasi. 

Workflow yang ditampilkan diatas merupakan general workflow, sehingga pada workflow tersebut tidak menampilkan custom condition. Anda dapat memodifikasi dan melengkapi workflow diatas sesuai dengan proses yang anda butuhkan dan atau disesuaikan dengan fungsi - fungsi lainnya yang ada pada aplikasi anda. 

Dengan mengimplementasikan fungsi auto update pada aplikasi anda, baik aplikasi tersebut merupakan aplikasi internal yang didevelop oleh divisi IT internal, maupun aplikasi yang didistribusikan sebagai produk, anda telah dapat menghilangkan sebuah faktor maintenance yang yang memakann waktu dan resource yang besar terhadap aplikasi desktop anda.

Semoga artikel ini bermanfaat.

Memulai Pengembangan Aplikasi Untuk Programmer Pemula Yang Merangkap Segalanya

Programmer Yang Merangkap Segalanya

Suka tidak suka, pada kenyataannya di Indonesia masih sangat banyak perusahaan yang hanya mampu merekrut programmer non pengalaman dengan tugas yang dibebankan jauh melebihi kapasitas programmer junior dan bahkan harus merangkap seluruh fungsi yang seharusnya dipegang oleh orang2 yang berbeda. Pada kondisi seperti ini, terutama untuk programmer junior, banyak yang mengacuhkan fungsi lainnya karena memang kekurangan skill dan pengalaman dan juga kurang kesadaran bahwa dengan hanya fokus pada code akan memperbesar kemungkinan project yang dikerjakannya akan gagal, atau setidaknya menjadi bom waktu yang akan menimbulkan banyak permasalahan dibelakang.

Pada artikel ini saya tidak akan membahas tentang metode - metode best practice, namun saya akan memberikan beberapa tips metode - metode common sense untuk memberikan sedikit gambaran pada para programmer junior yang terjebak dalam kondisi merangkap segalanya, tips yang akan saya berikan adalah untuk membuat teman - teman junior programmer dapa tmempermudah menjalankan pekerjaannya.

Kenali Project Anda (Knowing The Devil)

Hal pertama dan terpenting adalah mengetahui seluk beluk dan latar belakang ilmu, lingkungan implementasi dari projejct anda. Misal anda diminta untuk membuat sebuah aplikasi Sistem Pelaporan Lapangan Berbasis SMS. Bagi programmer junior, mungkin sekejap setelah mendengar nama tersebut, hal yang ada dikepanya adalah "gimana kodingnya", tahan pemikiran koding untuk sementara, mari forkus untuk menguak "setan" dibalik nama tersebut.

Biasakan selalu mengawali sebuah project dengan riset mengenai project tersebut, berikut beberapa point penelitian awal yang dapat kita lakukan untuk membuka wawasan kita untuk lebih mengenal siapa setan yang kita hadapi.

Jabarkan setiap project dalam 4 kategori penjabaran yang akan diteliti yaitu :
  • Sasaran, konsep dasar dan tujuan dari aplikasi tersebut, pada contoh diatas, berarti anda harus meneliti tentang konsep sistem pelaporan lapangan,
  • Common business process, cari tahu tentang bagaimana biasanya sistem ini dibangun, siapa yang akan mengoperasikannya, 
  • Technical Matters (Urusan Teknis), cari tahu mengenai prasyarat sistem seperti hardware, OS, database, dan hal lain yang akan berkaitan dengan aplikasi yang akan dibangun.
  • Project Plans (perencanaan project), hal ini menyangkut fase - fase pengerjaan project dari tahap pengumpulan requirement sampai maintenance.
Kesemua informasi yang disebutkan diatas, anda dapat melakukan penelitian singkat dengan memanfaatkan media google untuk mencari tahu hal - hal yang disebutkan diatas berdasarkan referensi dan pengalaman - pengamalam orang yang sudah pernah mengimplementasikan hal serupa.

Adalah sebuah langkah yang sangat baik untuk mengetahui latar belakang project sebelum melangkah ke tahap coding yang biasanya menjadi satu - satunya tahap yang ada dibenak programmer junior. Biasanya penelitian latar belakang hanya memakan waktu 1 sampai 2 hari.

Perencanaan Project

Bagi para programmer junior, biasanya langkah ini sering diabaikan, terutama bagi mereka yang mempunyai fungsi merangkap segalanya, namun perencanaan project akan membuat anda dapat mengerjakan project dengan aman dan tenang selama anda tidak melanggar semua yang telah anda rencanakan.

Bagi anda yang melakukan segalanya, perencanaan project tidak harus dalam bentuk yang rumit dan lengkap seperti yang dilakukan para project manager professional, namun hal yang paling penting untuk anda lakukan adalah mencatat dan merencanakan timeline anda seperti menetapkan batas waktu design database, membuat design UI, menulis kode, melakukan uji coba, menyiapkan dokumentasi, melakukan instalasi, training, dsb. Intinya adalah list pekerjaan, dan kapan harus diselesaikan. Dikarenakan anda hanya bekerja sendiri, maka hal ini akan sangat penting untuk membuat anda tidak melupakan hal - hal yang harus anda lakukan selain koding.

Development, Shit...., where to start (Dari mana harus memulai)

Dalam posisi anda yang harus melakukan segalanya, step pengembangan aplikasi yang umum tetap dapat digunakan, namun terutama bagi anda yang masih junior, hal ini akan memperlambat dan sangat membingungkan anda. anda harus menerapkan metode yang berbeda untuk membuat anda dapat terus berjalan tanpa banyak stuck. Pada posisi anda, jangan pernah memulai pengemabngan dari membuat design UI atau interface, hal ini sangat menyenangkan namun hanya akan membuat anda membuang banyak waktu mempercantik sesuatu yang tidak bisa jalan (karena belum ada code yang ditulis).

Buat Fungsi Inti.
Bila aplikasi anda menggunakan database, anda dapat memulai dengan membuat table inti dari aplikasi, dari contoh diatas, maka anda hanya perlu membuat table laporan, jangan perdulikan dahulu relasi ke table - table lainnya yang akan berkaitan dengan table inti. Selanjurnya, mulailah membuat kode untuk fungsi utama, ya....cukup untuk fungsi utama terlebih dahulu, pada contoh diatas, maka anda harus membuat sebuah fungsi sederhana untuk membaca SMS dan menampilkannya dalam bentuk form. Dalam tahap ini anda telah mempunyai aplikasi dengan fungsi untuk membaca sms dan menapilkan sms yang telah tersimpan di database, fungsi utama aplikasi anda telah ada dan berjalan.

Sesuaikan Dengan Business Proces.
Setelah fungsi utama selesai, mulai untuk menyesuaikan fungsi inti dengan bussienss proces dan business rule yang disesuaikan dengan requirement user. Mulailah dengan kembali menambahkan table atau field hanya yang diperlukan untuk kelengkapan business process, pada tahap ini anda belum perlu membuat hal - hal yang berkaitan dengan keamanan seperti login, validasi, enkripsi dan sebagainya.

Test Pertama
Pada tahap ini, anda telah memiliki sebuah aplikasi yang sesuai dengan bussiness process, kini saatnya untuk melakukan testing awal untuk menguak masalah - masalah yang mungkin akan terjadi. pada tahap ini, sebisanya lakukan test yang sangat mendekati penggunaan secara real, test terus menerus selam 2 sampai 3 hari, pikirkan segala kemungkinan, kemudian catat hal apa saja yang anda temukan yang perlu diamankan, atau dibuat validasi. pada tahap ini sebaiknya anda membuat sebuah test list dimana anda akan menuliskan point - point apa saja yang harus ditest berikutnya. alangkah baiknya bila test selalu melibatkan oranglain selain anda, agar anda mendapat bayangan bagaimana nanti user akan menggunakannya.

Validasi, Keamanan, laporan, dan pelengkap aplikasi.
Pada tahap ini, anda akan menemukan banyak bugs baik logical maupun technical. mulilah perbaiki bugs tersebut, kemudian lengkapi dengan berbagai validasi yang perlu. selanjutnya anda dapat meli kembali melengkapi table dan field, dan tampilan UI untuk kebutuhan keamanan, laporan, dan sebagainya.

UI Design
Pada tahap ini anda sudah memiliki aplikasi jelek yang berjalan sepenuhnya, anda dapat sedikit bersantai dan memanjakan diri anda dalam mendesign UI, membuat tampilan yang menarik dan ergonomis, karena seburuk2nya, anda telah memiliki aplikasi yang telah siap pakai.

Dokumentasi Test & Live Test
Pada tahap ini anda sudah dapat membuat dokumentasi sederhana yang berisi poin -poin sederhana dari cara pengoperasian aplikasi anda untuk kebutuhan testing, anda tidak perlu membuat penjelasan yang panjang lebar, dalam tahap ini, dokumenasi cukup berupa step by step, klik ini, lalu klik itu. setelah iut, anda dapat melakuka test live di customer untuk mendapatkan feed back sekaligus menguak bug - bug yang masih tersisa. dari tahap ini anda akan mendapatkan berbagai revisi dan catatan - catatan kekurangan aplikai anda. pada step ini sangat penting bagi anda untuk membedakan mana yang harus direvisi karena kesalahan aplikai dan mana yang merupakan permintaan yang keluar dari requirement awal. Pada step ini, sangat penting bagi anda untuk menjaga agar customer tidak keluar dari perjanjian awal mengenai spek dan fitur dari aplikasi.

Revisi & Dokumentasi Final
Tahap ini dapat terjadi berulang - ulang, tergantung pada bagaimana anda atau bos anda membuat kesepakatan awal dengan customer. Pada step ini, anda telah dapat melengkapi dokumentasi dengan deskripsi lengkap dan hal - hal lain yang perlu disebutkan dalam dokumentasi.

Instalasi, Training, Live & Maintenance
Pada tahap ini adalah tahap penutupan dari proses development.

Lakukan Yang Anda Butuhkan Saat Ini 

Langkah - langkah yang disebutkan diatas memang akan membuat anda berkali - kali merubah atau melengkapi design database, bukankah hal ini tidak sesuai dengan konsep design sistem ?. ya, memang tidak sesuai, namun dalam kondisi yang juga tidak sesuai dengan bagaimana tim development seharusnya, diman anda melakukan segala sesuatunya sendiri, sangatlah penting untuk menjaga fokus anda untuk hanya mengerjakan hal yang anda butuhkan saat ini, dengan demikian akan meminimalisir anda stuck dalam renungan akan sebuah proses atau fungsi yang belum anda perlukan saat ini, hal ini akan membuat anda tetap produktif. 

Hal yang disebutkan dalam artikel ini sekalilagi bukanlah "Best Practice" yang biasanya disarankan para developer professional, namun hal ini adalah best practice untuk menjaga anda tetap produktif dilingkungan development yang jauh dari "Best Practice".

Semoga bermanfaat.