Category Archives: Software Development

Modem Itegno 3000 USB

Sambil ngoprek di hari Minggu ini, saya ingin mengulas sedikit tentang salah satu barang riset yang sudah menemani perjalanan saya sejak tahun 2006. Ini modem Itegno 3000 USB, salah satu modem industrial yang dibuat untuk pasar M2M waktu itu. Modem Itegno 3000 USB

Modem ini menggunakan chipset buatan Wavecom Q2406B (sudah diakuisisi Sierra Wireless). Sesuai spesifikasi Wavecom Q2406B, modem ini sudah mendukung AT+Command untuk GPRS. Waktu itu belum ada teknologi 3G.

Modem Itegno 3000 USB

Driver bawaan modem ini hanya ada untuk Windows. Tapi karena chipset usb-serial yang digunakan sebetulnya buatan Prolific, PL-2303 maka modem ini dapat dikenali di Linux Ubuntu dan FreeBSD tanpa instalasi apapun.

Jalankan dmesg di Linux Ubuntu 14.04.3 LTS, saya mendapatkan hasil berikut:

itegno3000-linux

Nah, kelihatan kan “Manufacturer: Prolific Technology Inc.”

Sekarang, saya coba konek menggunakan port =0/dev/ttyUSB0 dan baudrate=115200 dan coba kirim beberapa perintah AT+Command. Hasilnya….

itegno3000-miniterm

 

Saya beli modem ini di sebuah toko komputer Mangga Dua sekitar bulan Mei tahun 2006. Dari pada saya pinjem terus sama customer dan ditagih-tagih, lebih baik saya beli sendiri. Harganya cukup mahal untuk ukuran saya waktu itu, Rp 2.5 juta. Saya beruntung tidak pernah menjual modem ini sebab modem ini sudah tidak diproduksi lagi oleh Itegno. Mereka membuat versi baru Itegno 3800 menggunakan chipset lain yang chipsetnya berbeda.

Memang hampir semua barang riset saya sejak tahun 2005 masih awet dan kondisinya masih bagus. Hanya penampilannya saja yang dekil akibat debu yang menempel bertahun-tahun.

Dengan modem ini, sekarang saya mengembangkan sebuah layanan backend sms 1 arah dan 2 arah yang rencananya akan saya buka beta testnya kepada komunitas developer, khususnya komunitas IoT Bandung.

Kalau Anda berminat untuk mencobanya, silakan menghubungi saya di email irs[at]sandiloka[dot].com

Kerangka Belajar Pemrograman

Saya menemukan salah satu faktor yang membuat seorang pemula sulit belajar programming, yaitu tidak memiliki kerangka belajar pemrograman. Kerangka ini sangat memudahkan kita belajar pemrograman, mempelajari bahasa baru dalam waktu singkat. Bukan karena menghapal rumus cepat 😀 Mau belajar bahasa apapun, baliknya ke kerangka ini lagi. Berikut saya bagikan kerangka belajar pemrograman tersebut.

Tapi sebelum Anda menyesal, saya ingatkan juga bahwa belajar pemrograman memang tidak mudah. Tidak ada cara yang mudah, hanya ada cara yang tepat. LURUSKAN NIAT ANDA. Jika niat Anda cari cara yang mudah, Anda akan sangat-sangat menyesal dan sebaiknya segera tutup halaman ini.

Kerangka ini sebetulnya bisa kita temukan dengan membaca buku Algoritma dan bahasa pemrogaman secara UTUH, bukan secuil-secuil. Buku pemrograman yang bagus, akan mengajarkan kerangka ini dari dasar, langkah demi langkah. Oleh sebab itu sejak tahun 1990an, kita sudah mengenal buku-buku menguasai bahasa pemrograman dalam 21 hari seperti Teach Yourself C++ in 21 days misalnya.

Programmer yang baik akan menguasai kerangka ini dulu, dijadikan sebagai mindset, kemudian dilatih berulang-ulang menjadi habit/kebiasaan. Di luar kerangka ini, kita tinggal baca help, manual atau dokumentasi.

Oke, masih bersama saya rupanya. Berikut kerangka belajar pemrograman yang saya maksud. 🙂

1. Membuat Alur Kerja

Coba pelajari resep sederhana membuat mie rebus atau nasi goreng. Ada langkah-langkahnya kan? Ada urutan prosesnya kan? Nah itulah salah satu bentuk alur kerja. Urutan proses yang benar, akan memberikan hasil yang benar atau diinginkan.

Cobalah ubah urutan prosesnya.Misalnya, pada saat Anda membuat nasi goreng, taruh kecapnya ke dalam bumbu sebelum nasi. Hasilnya apa?

Nah, membuat program juga perlu tahu dulu urutan proses yang harus dilakukan bagaimana sebelum menulis source codenya. Di sinilah kita mengenal pseudo-code, yang mewakili urutan proses tersebut secara abstrak.

Nah di sini kita harus tentukan dulu problemnya apa dan kita mau buat apa? Alur kerjanya bagaimana? Urutan prosesnya apa saja? Apakah itu hanya berupa operasi matematika sederhana atau operasi yang lebih kompleks? Kalau tidak tahu alur kerjanya, trus mau bikin apa?

2. Membuat Statement & Expression

Statement dan Expression adalah perintah atau instruksi yang kita berikan kepada CPU untuk diproses. Misalnya, statement untuk menerima input, menghasilkan output ke layar, operasi matematika, operasi logika, deklarasi variabel.

Untuk tahap awal, fokus saja pelajari statement dasar ini

  • Input & Output: Buatlah program Hello World yang menampilkan nama Anda.
  • Operasi aritmatika sederhana: Buatlah program sederhana untuk penjumlahan 2 variabel, perkalian dan pembagian. Di sini Anda akan belajar berbagai tipe variabel numerik.
  • Operasi logika: Buatlah program sederhana dengan melakukan operasi logika AND, OR, XOR, NOT, NAND, dengan input bertipe boolean, numerik bahkan string.
  • Operasi string: String adalah tipe variabel untuk menampung data teks yang sangat bermanfaat dan sangat sering digunakan. Cobalah buat program sederhana untuk memotong string, menggabungkan 2 string, membolak-balik (reverse) string, mengacak-acak isi elemennya. Percayalah ini bagian yang sangat menyenangkan 😀

Sebagai tambahan, pelajari tipe data yang lebih kompleks seperti record, pointer, array, set, dan tipe data yang spesifik ada di bahasa pemrograman tersebut. Setiap tipe data atau tipe variabel, punya karakternya sendiri. Bagaimana data tersebut disimpan di memori, diolah, ditampilkan ke layar, dan lain sebagainya.

3. Membuat Keputusan (Decision) atau Percabangan

Salah satu fitur yang membuat prosesor itu cukup ‘pintar’ adalah karena ia dapat membuat keputusan berdasarkan kondisi yang diterimanya. Keputusan yang konsisten tentu saja 😀 Membuat keputusan ini direpresentasikan dalam statement IF dan CASE (atau SWITCH).

Dalam bentuk sederhananya seperti ini:

C/C++

if(kondisi)
 {
   // jalankan blok statement ini
 }

Pascal

if kondisi then
 begin
   // jalankan blok statement ini
 end;

Python

if kondisi:
    statement

Pada intinya, statement IF ini artinya: Jika kondisinya begini, lakukan ini, tapi kalau kondisinya begitu, lakukan yang itu. 🙂

Statement IF bisa dibuat beranak-pinak, artinya dalam statement IF, kita bisa buat statement IF lagi di dalamnya. Istilahnya Nested (bersarang).

CASE/SWITCH

Statement CASE atau SWITCH adalah bentuk decision yang lebih lengkap dari pada IF. Jika kita harus melakukan pengecekan variabel yang variasinya bukan cuma TRUE dan FALSE, maka gunakan statement CASE atau SWITCH.

C/C++

switch(condition)
{
  case satu:
  {
    // jalankan statement ini
  }

  case dua:
  {
    // jalankan statement ini  
  }

  else
  {
    // jalankan statement ini  
  }
}

4. Membuat Perulangan, Loop atau Repetition

Nah, perulangan ini sangat membantu programmer dalam membuat program. Kalau CPU tidak mengenal perulangan, niscaya tidak ada orang yang mau jadi programmer 🙂

Perulangan artinya melakukan satu atau beberapa statement sekaligus dalam jumlah tertentu atau sampai menemukan suatu kondisi.

FOR (Unconditional Loop)

Statement FOR pada intinya memberi instruksi kepada CPU untuk menjalankan perintah tersebut sebanyak sekian kali. Disebut Unconditional Loop sebab dia baru selesai setelah melakukannya sebanyak X.

Misalnya, saya mau instruksikan CPU untuk membuat flashdisk custom dengan memanggil fungsi buat_flashdisk_custom() sebanyak 1000 pcs. Kira-kira instruksinya begini.

C/C++

for( jumlah = 1; jumlah <= 1000; jumlah++ )
{
   buat_flashdisk_custom();
}

Pascal

for jumlah:=1 to 1000 do
  buat_flashdisk_custom;

atau

for jumlah:=1 to 1000 do
begin
  buat_flashdisk_custom;
end;

WHILE-DO & DO-WHILE (Conditional Loop)

Conditional Loop artinya memberi instruksi kepada CPU untuk menjalankan perintah berulang-ulang sampai suatu kondisi ditemukan (do-while) atau selama kondisi tersebut ditemukan (while-do). Biar gampang, bedanya hanya di pengecekan kondisi saja. WHILE-DO mengecek kondisi di depan sebelum instruksi loop dijalankan. Sementara DO-WHILE mengecek kondisi di akhir setelah instruksi.

while-do

C/C++

jumlah = 0;
while(jumlah < 1000)
{
  buat_flashdisk_custom();
  jumlah++;
}

do-while

C/C++

jumlah = 0;
do
{
  buat_flashdisk_custom();
  jumlah++;
}
while(jumlah < 1000);

Bisa lihat bedanya? Mungkin belum. Kita butuh kasus yang lebih sesuai untuk mengetahui kapan pakai while-do dan kapan pakai do-while.

Penutup

Nah, kerangkanya sih cuma itu aja. Jangan dihafalkan. Tapi jadikan sebagai mindset, lalu otomatiskan sebagai habit/kebiasaan. Sisanya baca manual dan dokumentasi. Lupa, bingung, error, tinggal baca manual aja kok. Yang susah itu mengalokasikan ruang pikiran dan waktu untuk latihan 😀

Bagaimana dengan Pemrogaman Berorientasi Objek atau OOP (Object Oriented Programming)? OOP itu perluasan saja dari pemrograman fungsional. Anda bisa hidup tanpa OOP, tapi Anda tidak bisa hidup tanpa FUNCTIONAL programming. OOP akan kita bahas di kesempatan lainnya.

Jika Anda tertarik belajar pemrograman terutama C, C++, Pascal/FreePascal/Delphi, Python, PHP, bisa belajar sama saya gratis di kantor. Syaratnya ngga susah kok, cuma rajin dan kerja keras 😀

 

Kumpulan Karya sejak 2005

Hari ini saya mulai memajang karya-karya saya sejak tahun 2005. Ada yang saya bikin sendiri, ada yang dibikin bareng-bareng bersama tim. Ada yang sudah jalan, stabil dan ada juga yang masih dalam proses pengembangan. Tentu saja tidak semua karya saya pajang. Hanya yang masih relevan dan kira-kira masih dibutuhkan saja. Karya-karya yang saya buat antara tahun 1999 – 2005 sudah tidak bisa dipajang karena entah ada di mana file-filenya. Kecuali tugas akhir 😀

Pada saat saya menengok perjalanan 10 tahun ke belakang sejak tahun 2004, saya jadi heran sendiri. Waktu itu ilmu saya masih terbatas, pengalaman masih sedikit, networking belum luas, tapi toh produk bisa jalan juga, bisa dapat project juga. Kok bisa ya?

Pada saat saya lihat ke belakang lagi dari tahun 1999, makin heran lagi. Komputer belum punya, internet masih mahal, kalau butuh harus ke warnet atau ke kampus yang koneksinya lelet. Kemana-mana bawa disket atau tas kecil berisi CD-RW buat backup. Tapi toh bisa juga bikin sesuatu yang bermanfaat. Kok bisa ya?

Lalu saya lihat hari ini. Ilmu ada, pengalaman ada, networking ada, karyawan ada, modal ada, waktunya ada, koneksi internet kenceng, komputer banyak, fasilitas cukup. Dengan begitu saya jadi lebih SEMANGAT lagi berkarya.

Anda dapat melihat sebagian daftar karya, produk, project yang pernah saya kerjakan di sini.

 

4 Jenis Problem – The Cynefin Framework

Problem Solving Skills adalah salah satu kemampuan yang paling esensial di abad 21 ini. Apalagi jika profesi Anda seorang insinyur, software developer, programmer, sysadmin atau apa saja. Sebelum kita mampu mengatasi masalahnya, tentu saja kita harus mengenali dulu jenis-jenis masalahnya. Salah satu model yang sangat bermanfaat adalah Cynefin Framework.

Cynefin Framework pada dasarnya adalah mengidentifikasi masalah berdasarkan hubungan antara PENYEBAB dan AKIBAT. Masalah adalah akibat, maka berdasarkan hubungan dengan akar masalahnya/penyebab, berikut adalah 4 jenis problem berdasarkan Cynefin Framework.

cynefin-model

1. Simple (Sederhana)

Problem ini didefinisikan sebagai problem yang hubungan antara penyebab dan akibatnya sangat jelas dan erat. Saking jelasnya, sehingga semua orang juga tahu. Sumber pengetahuan ada di mana-mana dan bisa dilakukan siapa saja.

Untuk mengatasinya tidak memerlukan analisa dan pemikiran yang jelimet. Pendekatan yang dilakukan adalah Sense->Categorize->Respond. Artinya kita tinggal melihat situasinya bagaimana, kemudian mengidentifikasi akar masalahnya termasuk kategori apa, kemudian langsung merespon/mencabut akar masalahnya.

Dengan adanya kategori atau kelompok penyebab/akar masalah yang sudah jelas tersebut, maka untuk jenis problem yang simple sudah ada sekumpulan BEST PRACTICES. Apa yang berlaku efektif di tempat lain, bisa dipakai juga di sini. Tinggal digunakan, pasti beres.

Estimasi waktu yang dibutuhkan juga mudah sekali dikalkulasi. Anda bisa estimasi apakah ini akan selesai 1 jam, 1 hari atau 1 minggu.

Contoh: Handphone mati setelah 2 hari dipakai terus menerus. Tidak bisa melakukan panggilan telepon, tidak ada dial tone.

2. Complicated (Rumit)

Problem jenis ini didefinisikan sebagai problem yang hubungan antara penyebab dan akibatnya belum jelas. Sehingga untuk mengetahui penyebabnya, butuh pemeriksaan lebih lanjut, butuh analisa lebih lanjut. Penyebab/akar masalahnya bisa lebih dari satu kemungkinan dan bisa saling berkaitan. Sumber pengetahuan tersedia dan dapat diajarkan.

Karena membutuhkan pemeriksaan dan analisa, maka pendekatan yang dilakukan adalah Sense->Analyze->Respond. Kita lihat dulu situasinya untuk mendefinisikan masalahnya, kemudian kita analisa apa saja kemungkinan yang menjadi penyebabnya, kemudian merespon atau mengambil tindakan yang diperlukan.

Untuk problem jenis ini, kita memiliki sekumpulan GOOD PRACTICES. Kita bisa melihat contoh-contoh yang digunakan orang lain, atau kita bisa mengikuti tutorial/knowledge base, kemungkinan besar penyebabnya dapat diketahui.

Estimasi waktu untuk problem jenis ini agak sukar dikalkulasi. Kita hanya bisa melakukan estimasi berdasarkan waktu maksimum yang pernah kita lakukan sebelumnya. Mungkin antara 1 hari atau 2 hari. Mungkin juga 1 minggu sampai 2 minggu.

Contoh: Koneksi internet Anda lambat ke situs-situs tertentu saja. Aplikasi Anda mengalami connection timeout.

3. Complex

Problem jenis ini didefinisikan sebagai problem yang hubungan antara penyebab dan akibatnya tidak jelas. Sehingga untuk mengatasinya membutuhkan perenungan, kontemplasi, bertapa, mencari petunjuk, meminta pencerahan. Sumber pengetahuan mungkin tersedia tapi sangat terbatas.

Karena membutuhkan kontemplasi, pendekatan yang dilakukan adalah Probe->Sense->Respond. Jadi kita harus coba-coba dulu. Siapa tahu berhasil. Jika ternyata berhasil, baru kita bisa lihat mengapa berhasil kemudian merespon/menunjukkan penemuan tersebut.

Untuk problem jenis ini, tidak ada satu senjata ampuh yang bisa digunakan untuk semua orang. There is no one silver bullet. Solusi yang bisa digunakan orang lain belum tentu bisa digunakan untuk kasus kita. Percuma kita meniru, mencontek atau mengadopsi bulat-bulat dari contoh yang sudah ada. Sebab belum tentu bisa digunakan.

Estimasi waktu untuk problem jenis ini sangat sulit dikalkulasi. Kita tidak bisa mengira-ngira kapan problem tersebut akan berhasil diatasi. Kalau berhasil, ya kita kabari. When it’s done, it’s done. Tapi kalau tidak berhasil, ya harus dicoba lagi.

Contoh: Membuat software baru. Mendesain pesawat. Menjalankan bisnis. Melakukan Riset.

4. Chaos (Kacau)

Problem jenis ini didefinisikan sebagai problem yang tidak memiliki hubungan antara penyebab dan akibat. Sehingga untuk mengatasinya bukan dengan berpikir atau kontemplasi. Tapi langsung bertindak tanpa banyak berpikir.

Pendekatan yang dilakukan adalah Act->Sense->Respond, yaitu kita bertindak dulu kemudian melihat situasinya baru bisa mengambil keputusan. Kalau mikir dulu keburu mampus duluan 😀

Untuk problem jenis ini, yang ada adalah Novel Practice yaitu berimprovisasi, melakukan sesuatu yang baru, aneh atau asing.

Estimasi waktunya juga tidak akan bisa diukur.

Contoh: Server crash, database corrupt, disk failed, kebakaran, kerusuhan, mendirikan bisnis baru, penyerbuan, peperangan.

Penutup

Demikian sharing saya mengenai 4 Jenis Problem menurut The Cynefin Framework. Semoga bermanfaat.

Referensi

http://en.wikipedia.org/wiki/Cynefin

Modul Veritrans untuk WHMCS

Hari ini saya berhasil membuat modul Veritrans untuk WHMCS. Modul ini kami gunakan sendiri untuk melengkapi metode pembayaran yang sudah ada. Modul yang saya buat ini memiliki spesifikasi:

  1. Support Veritrans API version 1 & 2.
  2. Support Veritrans VT-WEB & VT-Direct.
  3. Support 3D Secure.
  4. Support beberapa acquiring bank sekaligus.

Silakan lihat screenshot konfigurasi modul berikut di WHMCS.

whmcs-veritrans-setting

Modul ini masih versi beta. Setelah kami selesai melengkapi persyaratan legal dan melakukan testing transaksi riil dengan kartu Visa & Mastercard, kami akan rilis modul ini untuk umum.

Nantikan update berikutnya ya 🙂

Rencana Membuat Media untuk Programmer

Saya punya rencana membuat media untuk programmer. Media ini ditujukan untuk mereka yang berprofesi sebagai software engineer, developer, atau programmer. Minimal untuk mereka yang di Indonesia, tapi jika memungkinkan untuk dunia internasional.

Saya melihat banyak sekali programmer di Indonesia yang butuh edukasi, kekurangan bahan belajar, bahan untuk eksperimen dalam bentuk artikel yang berkualitas. Artikel yang berkualitas seringkali kita temukan dalam bahasa Inggris atau bahasa lainnya. Sementara itu di pihak lain, ada juga programmer-programmer berkualitas, mampu membuat tulisan berkualitas, punya blog atau media sendiri namun mengalami problem dalam persistensi/kontinuitas. Sementara persistensi itulah yang dibutuhkan sebuah media supaya proses edukasinya jalan terus.

Akibatnya kita sering melihat programmer Indonesia ketinggalan jauh dengan negara tetangga. Bahkan sampai hari ini saya sering menjumpai programmer kita yang belum menyadari pentingnya menggunakan Source Control, dan tentu saja tidak terbiasa menggunakan Source Control. Apalagi Automated Test, Automated Build, Issue Tracking/Bug Tracking System dan teknologi lainnya. Padahal itu semua sudah jadi komoditi dalam teknologi software development masa kini. Masya Allah, kalau begini terus kita ketinggalan lebih dari satu dasawarsa dalam teknologi software development.

Ada lagi hal yang lebih menyedihkan yaitu kebanyakan programmer saat ini tidak tahu apa itu algoritma. Dikit-dikit minta source-code, dikit-dikit tanya ke group, padahal itu problem sepele dan bisa lihat di Help (F1) atau Googling dulu.

Jalan keluarnya menurut saya adalah edukasi terus-menerus. Ada banyak cara melakukan edukasi, yaitu menyelenggarakan pelatihan, workshop, gathering, dan media sebagai sarana kolaborasi, sarana interaksi, sarana edukasi. Saya berharap media ini menjadi sarana edukasi untuk programmer Indonesia dan memperkenalkan teknologi-teknologi baru seperti Lean Software Development, Agile Software Development, Scrum yang sebetulnya sudah ngga baru-baru amat.

Untuk merangsang minat programmer berkualitas untuk membuat tulisan, rencananya akan diberikan honor untuk tiap tulisan yang sesuai kriteria dan dimuat di media ini. Jadi ini adalah peluang bagi para programmer berkualitas untuk menambah penghasilan dengan membuat karya tulis. Namun pengunjung bisa membaca artikel tersebut secara gratis, mungkin perlu membership/registrasi saja.

Semua aktifitas ini jelas membutuhkan biaya, tidak ada yang gratis di dunia ini. Minimal butuh proses. Tapi sebagai pengusaha, kalau saya berpikir “dari mana uangnya?” ini namanya mengambil “kartu mati” sebab untuk saat ini saya juga belum tahu jawaban pastinya. Tapi yang jelas, salah satu sumber dananya adalah dari uang saya pribadi. Mungkin saja di masa yang akan datang ini jadi unit bisnis sendiri dari PT. Sandiloka, tapi ini butuh perencanaan yang lebih matang.

Untuk itu saya sedang mencari masukan, mencari nasihat mengenai hal-hal berikut ini:

  1. Berapa range honor yang pantas untuk sebuah artikel lepas?
  2. Bagaimana membuat aturan main yang jelas, terutama soal plagiarisme dan originalitas?
  3. Bagaimana proses dan periode pembayaran honornya?

Apakah rekan-rekan bisa memberikan masukan? Terima kasih sebelumnya ya 🙂

Kontribusi untuk Dunia Melalui Open Source

Sudah bertahun-tahun saya menggunakan software-software opensource yang ada di Linux, Sourceforge, Codeplex dan Google Code. Beberapa produk dan proyek yang saya berhasil selesaikan banyak memanfaatkan library, komponen yang tersedia di dunia open source.

Sangat menyenangkan karena menghemat waktu, tenaga dan biaya. Kita tidak perlu “membuat ulang roda”, tinggal reuse apa yang sudah ada.

Kini saatnya saya berkontribusi untuk dunia melalui open source. Saya akan menyumbangkan sebagian library, komponen maupun software yang saya buat dalam bentuk open source. Sebagian besar repository sudah saya simpan di server lokal Sandiloka. Khusus repository open source akan saya simpan di GitHub: https://github.com/ilhamrizqi

Selain repository pribadi, ada juga repository PT. Sandiloka di https://github.com/sandiloka. Semua repository menggunakan Git. Saya anggap Anda sudah terbiasa menggunakan Git sebagai source control.

Semoga bermanfaat.

Problem & Tantangan Layanan Support via Chat

Problem & Tantangan Layanan Support via Chat

Problem & Tantangan Layanan Support via Chat

Di PT. Sandiloka, kami menyediakan layanan support untuk mitra pengguna. Layanan support disediakan melalui berbagai media yaitu Forum, Email, Mailinglist, dan Yahoo! Messenger. Dari semua jalur/media tersebut, yang paling diminati adalah chat via Yahoo! Messenger.

Setelah dipelajari, ada beberapa faktor perilaku pelanggan yang menyebabkan layanan ini paling diminati.
Continue reading

3 Langkah Sederhana dalam Problem Solving

3 Langkah Sederhana Dalam Problem Solving

3 Langkah Sederhana Dalam Problem Solving

Sebagai seorang software developer, technical support, engineer kita perlu memiliki keahlian memecahkan masalah (problem solving skill). Tanpa keahlian dasar ini, segala macam tools yang kita miliki tidak akan membantu atau bermanfaat banyak. Sayangnya di jaman sekarang, sebagian besar software developer ternyata bukan problem solver yang handal. Akibatnya, software developer sulit mengatasi problem atau bug yang terdapat dalam softwarenya.

Untuk membantu software developer dalam melakukan problem solving, berikut saya bagikan 3 Langkah Sederhana dalam Problem Solving.
Continue reading