Opinion

Tingkatan Programmer dan Pentingnya Mentoring di Industri Startup Teknologi

[Ilustrasi: Damien Pollet – damienpollet|flickr.com]
Ada yang sudah tahu bahasa pemrograman Scala? Ini adalah sebuah bahasa pemrograman yang berjalan di platform JVM. Pencipta bahasa pemrograman berbasis JVM ini adalah profesor yang bernama Martin Odersky. Beliau ini adalah seorang profesor di bidang computer science dan pemrograman. Sekilas tentang Scala :

Scala merupakan singkatan dari “Scalable Language”. Artinya, Scala tumbuh bersama Anda. Anda bisa hanya bermain-main dengan Scala dengan mengetik one-line expressions dan mengobservasi hasilnya. Tetapi Anda juga bisa mengandalkannya untuk sebuah sistem krusial (mission critical systems), seperti yang saat ini dilakukan oleh Twitter, Linkedin atau Intel.

Tapi tulisan ini sendiri bukan menjelaskan tentang detail / tutorial Scala. Saya ingin mengulas tentang konsep yang menarik yang diberikan oleh si pencipta bahasa pemrograman Scala ini. Martin memberikan konsep tentang tingkatan (level) seorang programmer, yang bagi saya pribadi bisa diimplementasikan (mungkin dengan penyesuaian) di bahasa-bahasa pemrograman yang lain.

Tingkatan (Level) Programmer

Selama ini di sebuah startup (atau bahkan di korporasi besar), kita hanya mendengar istilah “junior” dan “senior” tanpa ada batasan yang jelas antara keduanya.  Padahal hal ini menurut saya cukup penting, termasuk di dalamnya untuk :

  1. Menentukan kualitas produk kita
  2. Menentukan gaji yang harus dikeluarkan oleh perusahaan

Martin mengajukan konsep pengkategorian level programmer dibagi menjadi dua, yaitu :

  1. Application programmer:  Di kategori ini, programmer dituntut untuk bisa membuat sebuah aplikasi / program.
  2. Library programmer:  Di kategori ini, programmer lebih dituntut untuk bisa mendesain sebuah library dengan desain API yang bisa dipertanggungjawabkan, generic dan reusable.

Setiap kategori ini memiliki levelnya sendiri. Level dan deskripsi ilmu seperti apa yang harusnya sudah dikuasai dan dipahami oleh masing-masing level tersebut adalah sebagai berikut:

Level A1: Beginning application programmer

  • Java-like statements and expressions: standard operators, method calls, conditionals, loops, try/catch
  • class, object, def, val, var, import, package
  • Infix notation for method calls
  • Simple closures
  • Collections with map, filter, etc
  • for-expressions

Level A2: Intermediate application programmer

  • Pattern matching
  • Trait composition
  • Recursion, in particular tail recursion
  • XML literals

Level A3: Expert application programmer

  • Folds, i.e. methods such as foldLeft, foldRight
  • Streams and other lazy data structures
  • Actors
  • Combinator parsers

Level L1: Junior library designer

  • Type parameters
  • Traits
  • Lazy vals
  • Control abstraction, currying
  • By-name parameters

Level L2: Senior library designer

  • Variance annotations
  • Existential types (e.g., to interface with Java wildcards)
  • Self type annotations and the cake pattern for dependency injection
  • Structural types (aka static duck typing)
  • Defining map/flatmap/withFilter for new kinds of for-expressions
  • Extractors

Level L3: Expert library designer

  • Early initializers
  • Abstract types
  • Implicit definitions
  • Higher-kinded types

Source: http://www.scala-lang.org/old/node/8610

Manfaat Pengkategorian Tingkatan Programmer

Bagi saya pribadi, pengkategorian dan leveling programmer ini sangat menarik.  Tetapi perlu diingat, kalau metode dan konsep ini bukan dimaksudkan untuk menyombongkan diri atau untuk eksis di social media dengan mencantumkan tag “I’m an Expert Programmer Level bla..bla. ” atau semacamnya, please…

Pengkategorian dan leveling programmer di sini, bisa berguna untuk :

  1. Meninjau kondisi internal tim engineer di sebuah startup
  2. Jenjang karir
  3. Memantau kondisi programmer ketika awal masuk sampai akhir (kalau perlu sampai resign), maksudnya untuk mengetahui apakah programmer tersebut berkembang atau tidak di sebuah startup
  4. Proses perekrutan programmer (atau hijacking?)
  5. Mentoring

Sekali lagi saya ingatkan di sini, kalau konsep ini bisa diimplementasikan di bahasa pemrograman apapun dan bisa bermanfaat pula untuk digunakan di startup manapun.

Mentoring

Dari beberapa manfaat leveling programmer di atas, yang ingin saya bahas di sini utamanya adalah mentoring.

Awal mula kenapa seharusnya startup membutuhkan mentoring adalah untuk meminimalisir adanya skill gap di tim engineering sebuah startup.  Pada dasarnya, yang dinamakan engineering di sebuah startup adalah sebuah permainan tim, bukan one man show.

Contoh sebuah startup yang melakukan one man show adalah ketika fitur-fitur kritikal dari sebuah produk hanya dipegang oleh satu orang, sedangkan puluhan (atau bahkan ratusan?) programmer lainnya hanya sekedar bekerja untuk membuat fitur “aksesoris”.  Apakah seorang engineer bisa berkembang di startup yang seperti ini ? Pendapat saya pribadi, bakal sulit berkembang, tapi kalau tertekan, mungkin bisa.. #eh

Proses mentoring juga bukan sesuatu yang mudah atau simpel.  Proses mentoring yang baik adalah yang dilakukan dengan berjenjang sesuai dengan levelnya.

Contoh, asumsi kita pakai model pengkategorian & leveling seperti yang diterapkan di Scala di atas tadi.  Seorang programmer dengan level A1 seharusnya dimentoring oleh A2, bukan langsung oleh A3.  Seorang library designer L1, seharusnya dimentoring oleh L2, bukan langsung oleh L3, begitu seterusnya.  Dengan cara ini, harapannya adalah proses mentoring lebih efektif, dan bisa meminimalisir miskomunikasi.

Barusan saya menyebutkan tentang miskomunikasi dalam proses mentoring.  Miskomunikasi ini sebenernya terjadi ketika misal seorang programmer dengan level A1 berbicara dengan programmer L3.  Si programmer A1 tidak paham dengan apa yang dikatakan oleh programmer L3, dan kemudian mengambil kesimpulan “Ah, ngomong apa sih dia (L3), ngomong gak jelas, kayak gitu kok udah L3”.  Dari sisi programmer L3 pun akan berpendapat “Lelet bgt sih dia ini (A1), gitu aja ga paham.”  Begitu seterusnya.  Dan dari sini, niat baik sebuah startup ingin menerapkan mentoring, alhasil malah jadi bubar.

Dengan konsep pengkategorian tingkatan programmer seperti di atas, akan lebih mudah memetakan seperti apa kemampuan masing-masing anggota tim engineer. Dengan begitu akan bisa segera dilakukan perencanaan agar gap skill antar engineer tidak terlalu jauh. Karena kemampuannya sudah terpetakan, maka proses mentoring pun akan lebih mudah dilakukan.

Akhir kata, selamat mentoring 🙂

Jangan lupa ikuti kami di Twitter untuk mendapatkan update terbaru dari @LabanaID