Programmer Berdasarkan LEVEL-nya

Create: Sen, 09/10/2012 - 11:22
Author: nurhidayat
Programmer Berdasarkan Level Keahlian Skill

<p>Sebagai programmer kita <strong>harus tahu pada posisi mana kita sekarang</strong> sehingga kita bisa merencanakan arah <strong>pengembangan skill</strong> yang kita miliki. Berikut ini matriks sederhana untuk membantu kita menentukan tingkat skill programming kita, sekaligus membantu menentukan skill apa saja yang diperlukan untuk naik level...</p>
<p>Cheers.....</p>
<p>&nbsp;</p>
<table border="1" cellpadding="2" cellspacing="2" width="960px">
<tbody>
<tr>
<th scope="col" width="10%">
Tema</th>
<th scope="col" width="10%">
Level-0</th>
<th scope="col" width="25%">
Level-1</th>
<th scope="col" width="25%">
Level-2</th>
<th scope="col" width="25%">
Level-3</th>
</tr>
<tr>
<th scope="row" width="10%">
struktur data</th>
<td>
tidak tahu perbedaan antara Array dan LinkedList</td>
<td>
mampu menjelaskan dan menggunakan Array dan LinkedList</td>
<td>
tahu keuntungan dan kerugian Array vs LinkedList. mampu menjelaskan hashtable dapat digunakan untuk menangani collision dan priority queue, serta tahu cara penerapannya</td>
<td>
tahu tentang struktur data dewa seperti B-Tree, Binomial Heap, Fibonaci Heap, Splay Tree, Skip List, dll</td>
</tr>
<tr>
<th scope="row">
algoritma</th>
<td>
tidak bisa menemukan rata-rata angka dalam Array (serius... ane pernah interview orang macem ini)</td>
<td>
mengetahui algoritma sorting, searching, traversal dan retrieval struktur data</td>
<td>
tahu tentang Tree, Graph, algoritma Greedy, dan algoritma Devide-And-Conquer sederhana. <strong>serta</strong> mampu memahami isi posting ini :D</td>
<td>
memahami dan mampu membuat pemrograman dinamis. memiliki pemahaman yang baik tetang graph, komputasi numerik, NP problems, dll</td>
</tr>
<tr>
<th scope="row">
dekomposisi masalah</th>
<td>
straight-line coding dengan banyak sekali coding copy-paste</td>
<td>
mampu memecah masalah menjadi beberapa fungsi atau prosedur</td>
<td>
mampu membuat fungsi, prosedur, atau class yang dapat digunakan kembali (<em>reusable</em>) untuk memecahkan masalah secara keseluruhan</td>
<td>
menggunakan struktur data dan algoritma yang tepat dan mampu membuat coding generic (object oriented) untuk merangkum aspek-aspek dari masalah yang dinamis, misalkan dependency injection</td>
</tr>
<tr>
<th scope="row">
komunikasi</th>
<td>
tidak mampu mengekspresikan (menyampaikan) ide dan pikiran ke rekan kerja, miskin tata bahasa</td>
<td>
rekan kerja dapat memahami apa dikatakan, walau mungkin banyak juga yang gak bisa dimengerti. tata bahasa sedikit lebih baik</td>
<td>
mampu berkomunikasi secara efektif dengan rekan kerja</td>
<td>
mampu memahami dan mengkomunikasikan pikiran, desain, ide dan spesifikasi secara jelas dan sesuai dengan konteks</td>
</tr>
<tr>
<th scope="row">
organisasi file</th>
<td>
tidak ada organisasi file, semuanya tumplek bleg dalam 1 (satu) file</td>
<td>
file-file terkait diletakkan dalam satu folder yang sama</td>
<td>
setiap file fisik mempunyai tujuan yang unik dan jelas. misalkan satu file untuk definisi class, file lain untuk definisi view, dll</td>
<td>
organisasi code, folder dan penentuan nama file memudahkan kita melihat desain aplikasi bersangkutan</td>
</tr>
<tr>
<th scope="row">
kemudahan membaca kodingan</th>
<td>
variable gaje dengan suku kata tunggal, misalnya $a, $b, $px</td>
<td>
nama yang lebih manusiawi untuk file, class, variable, method, dll</td>
<td>
tidak ada lagi fungsi yang panjang. ada komentar tentang asumsi koding, ada komentar untuk menjelaskan koding yang <em>kreatif</em>, serta ada perbaikan bug</td>
<td>
asumsi coding diverifikasikan menggunakan fungsi asserts, kode mengalir secara alami, dan tidak ada deep nesting untuk conditionals dan methods</td>
</tr>
<tr>
<th scope="row">
database</th>
<td>
berpikir bahwa Mikocok Excel adalah database relasional</td>
<td>
tahu (<em>sekedar tahu saja</em>) konsep basisdata, normalisasi, dan transaksi. serta bisa menulis SQL stetement sederhana. pernah dengar istilah flat file dan nosql</td>
<td>
<p>mampu merancang skema database yang baik dan ternormalisasi, mahir dalam penggunaan views, stored prosedur, trigger. tahu perbedaan index cluster dan non-cluster.</p>
<p>tahu perbedaan antara flat file, rdbms dan nosql. serta keuntungan dan kerugian masing-masing.</p>
</td>
<td>
<p>dapat melakukan administrasi database dasar, optimasi kinerja database, optimasi index, mahir menggunakan SQL dan cursor. memahami database mirroring dan replication serta implementasinya</p>
<p>Tahu kapan sebaiknya menggunakan rdbms dan kapan sebaiknya menggunakan nosql, serta mampu membuat solusi yang menggabungkan keunggulan rdbms dan nosql.&nbsp;Mampu mengunakan MapReduce untuk query ke database nosql</p>
</td>
</tr>
<tr>
<th scope="row">
bahasa pemrograman</th>
<td>
Hanya menguasai salah satu pemrograman Imperatif (Prosedural) <strong>atau</strong> Object Oriented</td>
<td>
Menguasai penrograman Imperative, Object-Oriented dan declarative (SQL). Nilai tambah bagi yang memahami perbedaan static vs dynamic typing, perbedaan weak vs strong typing and penggunaan static inferred types.</td>
<td>
Menguasai pemrograman Functional (misalnya Lisp, Scheme, F#, OCaml atau Haskell), Nilai tambah bagi yang memahami lazy evaluation, currying, continuations</td>
<td>
Menguasai pemrograman Concurrent (Erlang, Oz) and Logic (Prolog)</td>
</tr>
</tbody>
</table>
<p>disarikan dari&nbsp;<a href="http://www.starling-software.com/employment/programmer-competency-matri…">http://www.starling-software.com/employment/programmer-competency-matri…;