Indonesia

Newbie? Baca ini dulu

“Liburan sebentar lagi nih, iseng-iseng mau belajar programming ah”

“Mau coba cara bikin website e-commerce nih”

“Mau coba pemograman android nih”

Mulai dari mana ya?

Pemula-pemula yang baru mau mulai masuk ke dunia programming / IT biasanya dipenuhi pertanyaan-pertanyaan seperti “bagaimana caranya”, “mulai dari mana”, “cari di mana”, “ada contohnya nggak” dan lain-lainnya. Sementara, sebagian besar programmer berpengalaman, yang sehari-hari kerjaannya nge-google nyari-nyari info dan solusi, rata-rata nggak suka dengan pertanyaan seperti itu. Rata-rata programmer memang harus bisa mandiri dan bisa cari (baca: google) solusi sendiri. Tapi pemula yang nggak ngerti apa-apa juga akan bingung mau cari apa. Maka dari itu, sebelum mulai bertanya ada baiknya baca petunjuk-petunjuk ini dulu:

(more…)

Oh PHP empty…

Salah satu kelemahan terbesar PHP menurut saya adalah di null / value checking. Melihat bagaimana PHP adalah interpret language berarti validasi undefined value tidak dapat dilakukan di level compiler. Lalu bagaimana PHP adalah dynamic typing juga membuat null checking lebih sulit.

Null / Undefined

Ada 2 jenis variable kosong, yaitu null dan undefined. Variable null berarti variable tersebut pernah di-declare, dan di-initialize nilainya sebagai NULL. Undefined variable, adalah variable yang tidak pernah di-declare atau sudah di-declare namun tidak pernah di-initialize. Contoh:

$null = NULL; //null variable
$null2; //masih undefined
$null = $null + 1; //nilai $null jadi 1
$null = NULL;
echo $null["key"] === NULL ? "true" : "false"; //hasilnya true
$undefined = $undefined + 1; //error undefined variable

Lucunya di PHP, NULL dianggap sebagai sebuah value. Hal ini membuat operasi matematik / string yang berinteraksi dengan NULL tidak error, seperti contoh penambahan di atas. Untuk operasi matematik, NULL dianggap 0 dan untuk operasi string maka null dianggap string kosong. Bahkan untuk array, NULL hanya akan menghasilkan nilai NULL lagi dan tidak error.

empty / isset

Tadi kita sudah melihat bagaimana null dianggap sebagai value. Tetapi tidak pada pengecekan empty / isset. Anehnya lagi, kedua operasi tersebut tidak 100% berlainan dengan arti kata !empty == isset. Anggap kita menggunakan satu set variable sebagai berikut untuk mengecek validasi empty / isset:

$one = 1;
$two = 0;
$three = "";
$four = " ";
$five = "0";
$six = "false";
$seven = false;
$eight = [];
$null = NULL;
$null2;

Snippet untuk mengecek empty

echo 'empty($one) ';
echo empty($one) === true ? "true" : "false";
echo "\n";
echo 'empty($two) ';
echo empty($two) === true ? "true" : "false";
echo "\n";
echo 'empty($three) ';
echo empty($three) === true ? "true" : "false";
echo "\n";
echo 'empty($four) ';
echo empty($four) === true ? "true" : "false";
echo "\n";
echo 'empty($five) ';
echo empty($five) === true ? "true" : "false";
echo "\n";
echo 'empty($six) ';
echo empty($six) === true ? "true" : "false";
echo "\n";
echo 'empty($seven) ';
echo empty($seven) === true ? "true" : "false";
echo "\n";
echo 'empty($eight) ';
echo empty($eight) === true ? "true" : "false";
echo "\n";
echo 'empty($null) ';
echo empty($null) === true ? "true" : "false";
echo "\n";
echo 'empty($null2) ';
echo empty($null2) === true ? "true" : "false";
echo "\n";
echo 'empty($undefined) ';
echo empty($undefined) === true ? "true" : "false";
echo "\n";

Snippet untuk mengecek isset

echo 'isset($one) ';
echo isset($one) === true ? "true" : "false";
echo "\n";
echo 'isset($two) ';
echo isset($two) === true ? "true" : "false";
echo "\n";
echo 'isset($three) ';
echo isset($three) === true ? "true" : "false";
echo "\n";
echo 'isset($four) ';
echo isset($four) === true ? "true" : "false";
echo "\n";
echo 'isset($five) ';
echo isset($five) === true ? "true" : "false";
echo "\n";
echo 'isset($six) ';
echo isset($six) === true ? "true" : "false";
echo "\n";
echo 'isset($seven) ';
echo isset($seven) === true ? "true" : "false";
echo "\n";
echo 'isset($eight) ';
echo isset($eight) === true ? "true" : "false";
echo "\n";
echo 'isset($null) ';
echo isset($null) === true ? "true" : "false";
echo "\n";
echo 'isset($null2) ';
echo isset($null2) === true ? "true" : "false";
echo "\n";
echo 'isset($undefined) ';
echo isset($undefined) === true ? "true" : "false";
echo "\n";

Hasilnya

empty($one) false
empty($two) true
empty($three) true
empty($four) false
empty($five) true
empty($six) false
empty($seven) true
empty($eight) true
empty($null) true
empty($null2) true
empty($undefined) true

isset($one) true
isset($two) true
isset($three) true
isset($four) true
isset($five) true
isset($six) true
isset($seven) true
isset($eight) true
isset($null) false
isset($null2) false
isset($undefined) false

Untuk isset logikanya cukup mudah, semua variable yang sudah di set dengan nilai apapun terkecuali NULL menghasilkan true. Untuk empty cukup beragam, sebuah variable dianggap empty bila bernilai string kosong($three), string 0 ($five), boolean false ($seven), int 0 ($two) dan array kosong ($eight).

Encapsulate in function

Khusus untuk validasi undefined, saya belum menemukan cara lain kecuali dengan empty atau isset. Contoh dalam snippet kode berikut:

function isNullOrEmpty($str){
	return !(isset($str) && $str != '');
}
echo 'isNullOrEmpty($six) ';
echo isNullOrEmpty($six) ? "true" : "false";
echo "\n";
echo 'isNullOrEmpty($null) ';
echo isNullOrEmpty($null) ? "true" : "false";
echo "\n";
echo 'isNullOrEmpty($undefined) ';
echo isNullOrEmpty($undefined) ? "true" : "false";
echo "\n";

Hanya kode yang menggunakan variable $undefined saja yang menghasilkan PHP notice / error, lainnya tidak. Hal ini berarti kita tidak dapat meng-encapsulate function empty ke beberapa function validasi lain, seperti stringIsNullOrEmpty dan stringIsNullOrWhitespace.

Kesimpulan dan saran

Variable null dan undefined di-handle berbeda oleh PHP. Function empty dan isset juga menghasilkan validasi yang berbeda. Khusus untuk validasi variable undefined, saya belum menemukan function selain empty dan isset yang dapat meng-handle nya.

Sebagai programmer yang sudah lama menggunakan static type dan compiled language (C#), saya sudah terbiasa untuk melakukan variable declaration sehingga kemungkinan terjadinya undefined variable lebih kecil. Cukup baik untuk terbiasa melakukan variable declaration di awal function terlebih dulu untuk meminimalisir validasi empty / isset.

Pergunakan isset bila ingin me-validasi false dan empty value. Pergunakan empty bila sudah tahu kriteria-kriteria validasi yang dilakukan empty.

Dunning–Kruger effect

Kalau anda pernah mendalami dan sudah cukup ahli dalam suatu bidang/keahlian, kemungkinan besar ada saatnya dimana semakin anda belajar/berlatih, semakin rendah rasa percaya diri dan semakin anda merasa tidak mampu di bidangnya. Namun setelah mempelajarinya beberapa kali lagi, rasa percaya diri dan persaan mampu mulai berkembang dan bertambah seiring dengan banyaknya pelajaran/ilmu yang diterima.

Fenomena seperti itu disebut sebagai dunning-kruger effect.

dunning-kruger-effect-1024x724

Pengalaman saya dalam mengalami Dunning-Kruger effect

Dalam pemograman, saya sudah cukup banyak mempelajari dan memahami bidang architecture dan maintainability dari sebuah applikasi. Saya pernah mengalami rasa percaya diri yang tinggi setelah memahami N-Tier, dependency injection dan C#. Saat itu, saya berpikir bahwa inilah arsitektur terbaik dan paling mudah di-maintain. Sekitar 6 bulan berikutnya, saya mendapat kesempatan untuk menerapkan pemahaman saya dalam pengembangan di dunia nyata.

Setelah 3-6 bulan pengembangan berjalan, saya mulai merasakan masalah dan kesulitan dari arsitektur yang saya pilih. Semakin saya mempelajari lebih dalam, semakin saya ragu dengan kemampuan saya. Akhirnya setelah 1 tahun berjalan, proyek dibatalkan (yang merupakan keputusan dari sisi bisnis) dan applikasi yang saya kembangkan tidak berguna.

Kejadian ini saya manfaatkan untuk mengevaluasi pemahaman2 saya dan meneliti arsitektur-arsitektur secara lebih luas lagi. Saya mulai mempelajari nodejs dan kembali memperdalam php. Saya mulai menemukan banyak arsitektur baru dan mempelajari keunggulan dan kelemahan dari masing-masing arsitektur. Dari sana, saya mendapatkan pemahaman yang lebih luas dan menjadi semakin ahli dalam bidang ini.

Manfaat memahami / mengalami Dunning-Kruger effect

Dunning-Kruger effect adalah fenomena alamiah yang dapat dialami oleh siapapun. Efek ini juga alami terjadi dalam sebuah proses pembelajaran. Karena ini adalah proses alami, maka anda tidak perlu takut atau menghindarinya.

Orang biasa pada umumnya sudah menampilkan tanda-tanda menyerah saat mulai mengalami penurunan tingkat confidence saat baru mempelajari suatu bidang. Semakin mempelajari, semakin rendah tingkat confidence nya dan saat mencapai tingkatan terendah, mereka menyerah.

Namun sekarang anda menyadari bahwa ini adalah proses alamiah dan rendahnya rasa percaya diri itu adalah normal. Anda dapat mulai mempelajari bidang tersebut dari sudut pandang yang berbeda-beda, mencari teknik2 dan menggunakan cara-cara belajar yang berbeda. Perubahan cara pandang dan cara belajar tersebut memperbesar kemungkinan anda dalam mendapatkan pemahaman yang lebih luas, lebih dalam, dan meningkatkan confidence. Setelah itu, anda sudah mencapai tahap terakhir dari Dunning-Kruger effect dan pelajaran yang anda dapatkan berikutnya hanya akan memperkuat kemampuan dan confidence anda.

Conclusion

Dunning-Kruger effect adalah fenomena alami yang normal terjadi dalam proses pembelajaran. Memahami fenomena ini dapat membantu anda dalam melewati tahap confidence ter-rendah dan menjadi ahli dalam sebuah bidang yang diminati.

seminar at bizzy.co.id 22 feb 2016

Mengapa menggunakan framework?

Topik ini adalah salah satu bahasan yang cukup sering ditanyakan oleh programmer-programmer muda (saya belum tua tapi ya) yang baru akan memulai atau baru selesai memperlajari cara menggunakan framework. Sekedar flashback, penggunaan framework pada sekitar tahun 2005-an masih belum populer di Indonesia. Dan pada saat itu, konsep bahwa menggunakan framework menambahkan kode / size yang tidak perlu sangat mendominasi keputusan untuk mengarah ke scratch (tanpa framework).

Karena keterbatasan processing power dan kapasitas harddisk, sayapun pada saat itu juga mengarah untuk tidak menggunakan framework. Namun apa yang saya rasakah setelahnya adalah:

kalau kamu cukup mahir dan tidak menggunakan framework yang tersedia, kamu pasti akan membangun framework-mu sendiri

Mengapa demikian?

Susunan folder dan penempatan file

Untuk project berskala besar dengan tingkat kesulitan kompleks, susunan folder dan penempatan / pengelompokkan file menjadi suatu hal yang penting. Susunan file yang berantakan akan menyulitkan programmer-programmer lain untuk memahami kode, serta mengurangi kualitas dan meningkatkan resiko terjadinya bug.

Framework, pada umumnya sudah memiliki panduan untuk penempatan / pengelompokkan file-file dalam folder-folder tertentu. Standarisasi tersebut akan mempercepat programmer-programmer lain dalam memahami kode, atau mencari posisi kode yang menjalankan proses-proses tertentu. Contohnya folder config, constants, language dan sebagainya.

Bila tidak mengikuti / menggunakan framework yang tersedia secara umum, saya cukup yakin anda nanti akan membangun standar dan aturan pengelompokkan sendiri.

Arsitektur

Umumnya sebuah framework mengikuti susunan arsitektur tertentu. Misalnya pada php, umumnya framework-framework digunakan arsitektur MVC atau HMVC, karena paling cocok dalam server-client architecture. Bila menggunakan contoh lain, misalnya C# dan desktop, prism adalah framework MVVM untuk WPF.

Bagi programmer-programmer yang memahami manfaat arsitektur dalam pemograman, saya cukup yakin bila mereka tidak menggunakan framework yang tersedia, maka mereka akan membangun arsitektur yang mirip (misal dengan MVC).

Class Library

Project yang kompleks memerlukan banyak sekali operasi yang beragam. Namun tidak sedikit dari operasi tersebut yang mirip, berulang dan dapat dikelompokkan menjadi library / class library. Contohnya: logging, serialization, export to excel/csv, image manipulation dan masih banyak lagi.

Framework umumnya sudah memiliki cara sendiri / standar untuk meng-organize library-library tersebut. Contohnya pada laravel yang sudah menggunakan composer sebagai package manager, dan PSR4 untuk autoload class.

Common cases / operation

Mirip dengan class library, ada beberapa kasus / operasi yang umum dan sering ditemui dalam pengembangan applikasi. Contohnya bila dalam php adalah routing, login authentication, response type dan view templating. Umumnya framework sudah mendukung operasi-operasi tersebut.

Standar pengembangan, update dan komunitas

Keuntungan dari menggunakan framework yang tersedia, adalah framework tersebut sudah memiliki standar pengembangan (penempatan kode). Framework juga umumnya diupdate mengikuti teknologi terbaru, dan memiliki komunitas pengguna yang secara tidak langsung meningkatkan kualitas framework, dan mengurangi kemungkinan bug yang ada.

Kesimpulan

Banyak keuntungan yang didapat dengan menggunakan framework. Dan meskipun seseorang yang mahir tidak menggunakan framework yang sudah tersedia, cepat atau lambat applikasi yang dikembangkan akan mengarah dan pada akhirnya menghasilkan framework buatan sendiri.

skill

Saya programmer dengan skill tinggi, saya pasti bisa sukses

Apakah anda seorang programmer? Dan apakah anda berpikiran hanya dengan skill yang tinggi maka anda bisa sukses di dunia kerja / dunia bisnis? Tunggu dulu, ada beberapa faktor yang perlu diketahui sebelumnya.

Skill technical hanya menentukan separuh dari kesuksesan anda sebagai programmer

Apakah benar begitu? Skill technical hanya menentukan separuh dair kesuksesan anda sebagai programmer? Lalu sisa separuhnya adalah faktor-faktor apa lagi?

Mungkin skill technical bisa menentukan lebih dari separuhnya (50%), tapi tidak akan melebihi 70-80% sebagai faktor penentu kesuksesan anda sebagai programmer. Faktor penentu sisanya didominasi oleh skill komunikasi dan negosiasi. Saya tidak akan membahas attitude di sini karena pada artikel ini, saya akan lebih fokus kepada skillset yang diperlukan.

Skill / kemampuan komunikasi

Sebagai pelajar dalam dunia IT dan pemograman, saya juga awalnya tidak tahu seberapa pentingnya kemampuan komunikasi dalam dunia pemograman. Namun setelah memasuki dunia kerja / organisasi, tampak jelas bagi saya seberapa penting, sering dan bergunanya kemampuan komunikasi dalam dunia pemograman. Bila dibandingkan dengan skill-skill non-technical lainnya, saya rasa skill komunikasi adalah yang paling berpengaruh dan bermanfaat dalam dunia pemograman.

Saat interview

Bahkan sebelum interview, kemampuan komunikasi anda akan sangat menentukan apakah anda akan mendapatkan panggilan interview atau tidak. Personal branding, desain CV yang bagus serta dapat menunjukkan skill-skill utama anda, sangat membantu anda dalam mendapatkan panggilan interview.

Pada saat interview, kemampuan komunikasi anda tentu akan lebih berpengaruh lagi. Bagaimana anda berkomunikasi tatap muka dengan orang-orang yang tidak mengenal anda, dan bagaimana anda mempersiapkan diri dengan penampilan terbaik tentu akan dipengaruhi oleh kemampuan komunikasi anda.

Komunikasi dengan atasan

Sebagai programmer, anda akan mendapat proyek / tugas dari atasan / team leader. Pada saat pemberian tugas tersebut, akan ada beberapa kondisi yang memerlukan skill komunikasi. Seperti bagaimana anda bertanya mengenai hal-hal yang tidak jelas dari tugas tersebut, atau mungkin saja ada beberapa ide terkait tugas tersebut yang bisa anda sampaikan. Kemampuan komunikasi anda akan sangat membantu dalam proses tersebut.

Selain itu, umumnya saat sebuah tugas / proyek selesai, sang programmer akan memberikan laporan kepada atasannya. Bagaimana cara menyusun laporan yang baik dan cepat dimengerti, sedikit banyak akan dibantu oleh kemampuan komunikasi anda.

Komunikasi dengan sesama programmer

“Program saya error”, “entah mengapa applikasi ini tidak jalan”, “kenapa datanya duplikat ya?”. Banyak sekali proses komunikasi yang akan terbentuk antar sesama programmer pada saat proyek dikerjakan. Contoh paling umum adalah saat anda perlu menanyakan proses detail dari module yang sebelumnya dikerjakan rekan programmer. Dan sebaliknya, saat anda ditanya oleh rekan anda terkait modul yang anda kerjakan sebelumnya. Sekali lagi, kemampuan komunikasi anda akan diuji di sini.

Komunikasi dengan user / non-technical

Ada beberapa perusahaan yang memerlukan anda untuk berhubungan langsung dengan user / pihak non-teknis. Di sinilah kemampuan komunikasi diuji. Bagaimana cara kita menjelaskan proses techincal kepada pihak-pihak non-technical, yang tidak mengerti istilah-istilah dalam dunia IT.

Skill negosiasi

Skill negosiasi / persuasi sangat diperlukan, terutama pada saat interview. Ya, tentu saja soal gaji dan benefit / tunjangan. Hanya dengan memiliki kemampuan negosiasi dan persuasi saja memungkinkan gaji anda bisa lebih tinggi dari standar dengan tunjangan yang lebih oke.

Selain untuk interview, skill negosiasi / persuasif akan berguna saat berdiskusi / berdebat mengenai kandidat-kandidat solusi untuk sebuah project. Contohnya, senior anda akan marah / tidak terima bila langsung dikatakan “solusi anda nggak akan jalan”. Namun bila diutarakan dengan lebih baik, misal “cara itu ada banyak request ke server kan? Apakah nggak akan membebani? Kalau misalnya begini … bagaimana?” tentu akan lebih mudah diterima dan mereka akan kurang resistif.

Dunia bisnis

Dalam dunia bisnis, lebih banyak lagi skill yang diperlukan selain skill-skill di atas. Contohnya seperti skill leadership / management, networking, kemampuan inovasi, desain dan marketing. Di sini, pengaruh kemampuan technical terhadap kesuksesan anda jadi lebih kecil dibandingkan dalam dunia kerja.

Kesimpulan

Walaupun programmer memiliki tugas utama untuk mengembangkan program, namun bukan berarti skill-skill lain tidak ikut ambil bagian dalam menentukan kesuksesan anda di dunia kerja. Terlebih lagi dalam dunia bisnis. Skill komunikasi dan negosiasi cukup berperan dalam membantu menentukan kesuksesan anda di dunia kerja.

Gaji programmer di Indonesia rendah, kok bisa?

Latar belakang

Selama saya beraktifitas dalam komunitas programmer dan berdiskusi dengan programmer2 lain, banyak muncul pertanyaan mengapa gaji programmer di Indonesia tergolong rendah bila dibandingkan dengan negara-negara lain. Saya pernah memberi beberapa jawaban yang kira-kira mampu menggambarkan sebab-akibat rendahnya gaji programmer di Indonesia. Pada kesempatan kali ini, saya mencoba merangkumnya dalam sebuah tullisan artikel dengan harapan lebih banyak orang yang dapat melihatnya dan mempermudah saya menjelaskan topik ini berulang kali.

Gaji programmer

Periode saat saya mulai berkarir di dunia pemograman adalah sekitar awal 2012. Saat itu kisaran gaji programmer entry level adalah di 3 juta rupiah hingga 4 juta rupiah. Saat ini di awal 2016, kisaran gaji programmer entry level juga tidak jauh berubah, sekitar di kisaran 4 juta rupiah.

Nilai ini tergolong rendah bila dibandingkan dengan negara2 tetangga seperti singapura dan malaysia. Apalagi dengan banyaknya berita tentang hebatnya jadi programmer dan beberapa kisah programmer yang sukses membuat kita merasa tingkatan gaji programmer di Indonesia tergolong rendah. Benarkah begitu?

Nilai tukar rupiah dan nilai biaya hidup

Salah satu penyebab rendahnya gaji programmer bila dibandingkan dengan negara-negara lain di level setingkat adalah karena rendahnya nilai tukar rupiah dibandingkan dengan mata uang asing. Selain itu, rendahnya nilai biaya hidup di Indonesia membuat perusahaan-perusahaan tidak terdesak untuk meningkatkan gaji programmer.

Masih dianutnya konsep tradisional career ladder di perusahaan

Career ladder yang masih dianut di Indonesia adalah yang masih bersifat tradisional. Jenjang karir tersebut berarti setelah diawali dari junior programmer, dilanjutkan dengan senior programmer dan masuk ke jenjang managerial. Sementara konsep career ladder modern memungkinkan seorang programmer untuk naik ke jenjang berikutnya sebagai spesialis (technical) dan professional, salah satunya sebagai enterprise architect.

Konsep tradisional ini membuat stereotype bahwa gaji manajemen / project manager lebih tinggi dari programmer, dan gaji programmer sekali lagi terlihat rendah.

Supply and demand

Bila kita teliti lagi, gaji-gaji tinggi programmer di luar negeri dikarenakan kebutuhan akan skill programming yang juga tinggi dan tanggung jawab yang juga tinggi. Katakan Microsoft, Google, Facebook dan juga Wordpress (promosi terselubung) memerlukan programmer dengan skill yang tinggi dan tanggung jawab yang besar. Di samping itu, perusahaan2 tersebut juga adalah perusahaan IT yang bersifat sebagai provider / enabler, yang mana pendapatannya lebih tinggi dan service-nya lebih diminati.

Berbeda dengan kondisi di Indonesia. Hinga tahun 2010, mayoritas programmer diperlukan untuk men-develop custom application di software house atau internal perusahaan. Programmer2 tersebut masih menggunakan teknologi yang di-provide oleh perusahaan2 dari luar negeri seperi microsoft, SAP, atau wordpress. Dan sistem yang dikembangkan sebagian besar hanya bersifat CRUD atau administration screen.

Sejak tahun 2010, banyak startup-startup digital muncul di Indonesia. Kebutuhan akan programmer dengan skill lebih tinggi meningkat. Namun tetap saja peningkatan tersebut belum maksimal karena Indonesia masih belum mencetak produk-produk digital yang bisa digunakan secara internasional. Dan juga, demand untuk embedded programming dan robotik juga masih rendah, membuat kisaran gaji programmer juga ikut rendah.

Stereotype bahwa skill programmer Indonesia rendah

Masih berkaitan dengan supply and demand, rendahnya demand untuk programmer dengan skill tinggi membuat programmer2 dengan skill yang tinggi untuk mencari pekerjaan di luar negeri. Pencarian kerja di luar negeri dilakukan dengan harapan untuk mendapatkan gaji yang lebih tinggi dari kisaran gaji-gaji di Indonesia.

Kondisi tersebut mengakibatkan munculnya pandangan bahwa programmer-programmer di Indonesia memiliki skill yang lebih rendah dari programmer-programmer dari luar negeri. Maka saat startup-startup / perusahaan baru ingin menempatkan programmer di posisi strategis, maka dipilihlah mereka-mereka yang berasal dari luar.

Sulit menilai programmer dengan skill tinggi

Dari kacamata non-teknis, sulit membedakan programmer dengan skill tinggi atau programmer dengan skill rendah. Dengan anggapan bahwa semua programmer (katakan yang bisa bahasa pemograman php) memiliki skill yang sama, maka memilih programmer-programmer yang setuju dengan gaji rendah adalah logis.

Rendahnya dukungan pemerintah / institusi resmi di Indonesia

Partisipasi pemerintah dan institusi-institusi di Indonesia tegolong cukup rendah dalam bidang IT. Rendahnya partisipasi itu membuat perusahaan-perusahaan, terutama yang menengah di Indonesia menjadi antipati terhadap investasi dalam bidang IT. Mereka jadi beranggapan bahwa investasi IT tidak menghasilkan, mahal dan beresiko tinggi. Ditambah lagi dengan banyaknya transaksi / dokumen di Indonesia yang lebih diutamakan secara manual, makin membentuk anggapan perusahaan-perusahaan tersebut.

Kesimpulan

Terbentuknya tingkat gaji programmer yang rendah diakibatkan banyak faktor yang cukup kompleks, dengan berbagai pihak yang ikut bertanggung jawab di dalamnya.