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…


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