Kompetensi Programming

Persepsi mahasiswa lulusan Computer Science atau Informatika terhadap profesi programmer selalu berubah-ubah. Di Indonesia, dulu programmer identik dengan geek dan bayaran rendah. Penyebab utamanya karena saat itu di Indonesia, tidak ada industri perangkat lunak besar, dimana programmer canggih akan sangat dibutuhkan. Skill programming yang biasa-biasa saja seolah cukup untuk menyelesaikan pekerjaan.

Kebanyakan orang berpikir bahwa Programmer adalah profesi terendah dalam perusahaan. Kalau mau naik jabatan, harus jadi System Analyst, lalu jadi Project Manager. Dalam konteks software project, yang biasanya dianggap “mahal” adalah profesi “makelar”, yaitu orang yang mampu meng-goal-kan project. Ini karena di Indonesia, kebanyakan project diperoleh dengan cara tidak legal – maaf, saya tidak mau menghakimi siapapun, tapi boleh kan kita berbeda pendapat 🙂

Sebagai orang yang mencintai dunia programming, saya merasa ada yang harus diperbaiki. Kata kuncinya adalah:

Harus tersedia jenis pekerjaan yang memang membutuhkan programmer berkualitas tinggi.

Masalahnya, jenis pekerjaan seperti ini belum tentu dibutuhkan di pasar Indonesia. Lalu kemudian, saya berpikir, “Apa benar tidak dibutuhkan?”. Setelah melalui beberapa pemikiran, kira-kira 10 tahun yang lalu, saya sampai pada kesimpulan bahwa setidaknya ada 2 jalan yang memungkinkan hal ini terwujud:

  1. Faktanya, trend penggunaan IT, khususnya kebutuhan atas software pendukung bisnis di perusahaan-perusahaan besar semakin meningkat. Jika kita berfokus pada kebanyakan sektor, dimana pekerjaan diperoleh dengan cara menyogok, maka yang akan memenangkan persaingan adalah yang paling jago melakukan lobby. Kemampuan teknis menempati urutan ke-29, jauh dibawah kemampuan kongkow sama calon klien 🙂 Berita baiknya, ada sektor yang begitu membutuhkan dukungan IT, bahkan tidak bisa hidup tanpanya. Di sektor ini, kemampuan teknis akan sangat diperhitungkan. So, sewajarnya kita bisa berfokus pada area ini.
  2. Faktanya, software tidak selalu harus dijual sendiri. Ada banyak jalur yang memungkinkan software dijual, misalnya saat ini ada AppStore dan Android Market. Pengembang bisa berfokus pada produksi ketimbang pemasaran, meski tetap ada urusan masalah promosi. Di sektor ini, para konsumen haus dengan inovasi, sehingga kreatifitas dan kemampuan teknis akan sangat dibutuhkan.

Setiap bidang IT membutuhkan jenis keahlian yang berbeda. Programmer hanyalah salah satu dari berbagai jenis posisi engineering. Namun demikian, programmer adalah pintu masuk bagi posisi-posisi lain tersebut.

Belakangan ini saya berpikir untuk menerapkan struktur yang lebih baik dalam organisasi pengembangan aplikasi. Jika dibagi berdasarkan jenjangnya, saya membagi posisi programmer sbb:

  1. Junior
  2. Associate
  3. Unit Head / Supervisor
  4. Consultant
  5. Expert

Junior Programmer

Junior programmer umumnya adalah mahasiswa yang baru lulus dan mulai bekerja. Meski faktanya, lulusan universitas ternama cenderung memiliki kualitas yang lebih baik, saya sendiri berpendapat bahwa kualitas programmer tidak ditentukan oleh asal universitas – apalagi IPK-nya. Kualitas programmer lebih ditentukan oleh passion si pelamar. Seorang calon programmer yang tidak pernah kuliah sama sekali, bisa saja jauh lebih valuable ketimbang lulusan universitas ternama.

Kebanyakan Junior Programmer adalah seorang MCP – Master Copy Paste 🙂 karena biasanya bekerja dengan mencontoh atau melanjutkan template yang diberikan oleh supervisornya. Kompetensi yang dibutuhkan:

    • Kompetensi Fungsional:
      • Programming Concept (OOP, Exception Handling, Algorithm, etc)
      • Common Framework and Protocol (MVC, WebService, Entity Framework, LINQ, Ajax, JSON, etc)
      • Common Library (JQuery, Twitter Bootstrap, dll)
      • Common Methods / SDLC (Waterfall, RUP, Scrumm)
      • Source Control and Versioning Management
      • SQL Query dan Basic RDBMS Administration
      • Personal Time-Management
    • Kompetensi Inti dan Manajerial:
      • Achievement Orientation (Med): Memiliki semangat untuk berprestasi
      • Conceptual Thinking (Med): Mampu memahami masalah mendasar dalam sebuah urusan yang kompleks, serta melihat pola keterkaitan antar masalah yang tidajk tampak jelas.
      • Teamwork (Low): Mampu bekerja sama dan menjadi bagian dari tim

Associate Programmer

Associate Programmer adalah programmer yang mampu bekerja dengan supervisi minimum. Dia akan diberi tugas dan kebebasan terbatas oleh supervisornya. Jika menemui masalah, dia harus belajar menemukan solusinya sendiri. Kompetensi yang dibutuhkan:

    • Semua kompetensi Junior Programmer
    • Kompetensi Fungsional:
      • Construction Method (misalnya: Test-Driven Development)
      • Create Automated Unit-Test. (Catatan: Automated UI Coded Test biasanya dilakukan oleh tim fungsional).
      • System Design, termasuk Data Model, Interface, dan Service Class.
      • Common Module Implementation Practice (Import/Export, Scheduler, Membership, Audit-Trail, etc).
      • Broadcasting, bisa menggunakan HTML5, nodejs, atau SignalR
    • Kompetensi Inti & Manajerial:
      • Achievement Orientation (Med), Conceptual Thinking (Med),
      • Peningkatan Level: Teamwork (Med)
      • Information Seeking (Low): Mengeluarkan usaha tambahan dalam mengumpulkan informasi untuk melaksanakan pekerjaan.
      • Organization Awareness (Low): Memahami cara kerja organisasi
      • Initiative (Low): Proaktif mengantisipasi keadaan di masa yang akan datang

Unit Head / Supervisor

Di titik ini programmer harus mampu bekerja tanpa supervisi. Biasanya di titik ini dia akan memiliki anak buah (junior atau associate). Unit Head bertanggung jawab penuh di sisi desain teknis dan implementasi. Semua permintaan yang bersifat teknis akan ditujukan ke Unit Head. Dia bisa mengerjakannya sendiri atau membagi dengan anak buahnya. Umumnya Project Manager hanya akan berhubungan dengan Unit Head dan tidak langsung berinteraksi dengan Junior atau Associate Programmer. Unit Head bertanggung jawab penuh atas kinerja anak buahnya, sehingga dia memiliki kewajiban mengembangkan keahlian mereka. Pada prakteknya, keberhasilan Unit Head akan sangat ditentukan oleh keberhasilan anak buahnya. Kompetensi:

    • Semua kompetensi Associate Programmer
    • Kompetensi Fungsional:
      • Performance Profiling and Tuning
      • Load Balancing Implementation
      • High Availability Implementation
      • Membuat WBS dan estimasi pelaksanaan pekerjaan
    • Kompetensi Inti & Manajerial:
      • Achievement Orientation (High), Conceptual Thinking (High), Initiative (Low)
      • Peningkatan Level: Teamwork (High), Information Seeking (Med), Organization Awareness (Med)
      • Developing Others (Med): Ingin mengajarkan atau mendorong proses belajar orang lain.
      • Directiveness (Low): Mampu memerintah dan mengarahkan orang lain sesuai posisi dan kewenangannya
      • Relationship Building (Med): Menjalin hubungan sosial agar tetap hangat dan akrab.
      • Customer Service Orientation (Med): Selalu berusaha untuk memberikan pelayanan yang terbaik

Consultant

Ada kalanya seorang programmer tertarik dengan dunia manajemen. Orang-orang seperti ini sebaiknya mengambil jalur manajerial. Dia perlu belajar tentang disiplin fungsional (menjadi seorang analis), lalu belajar tentang manajemen proyek. Pada akhirnya dia dapat menjadi kandidat manajer proyek.

Ada kalanya juga seorang programmer lebih tertarik dengan teknis ketimbang manajemen. Orang-orang seperti ini sebaiknya mengambil jalur spesialis, yaitu menjadi Consultant. Di titik ini programmer mulai memiliki keahlian khusus. Tugasnya akan lebih berfokus pada review design yang di-submit oleh para Unit Head, mengembangkan kemampuan teknis para Unit Head, mengerjakan hal spesifik yang jarang dibutuhkan, serta turun tangan dalam keadaan emergency. Sebagai Professional, sang programmer akan mulai dituntut untuk memberikan kontribusi publik berupa menjadi pembicara di seminar, mengajar, atau minimal sharing knowledge di blog. Kompetensi:

    • Semua kompetensi Unit Head
    • Kompetensi Fungsional:
      • Design Review
      • Spesialisasi, misalnya Database, Collaboration, Big-Data, dll.
    • Kompetensi Inti & Managerial:
      • Achievement Orientation (High), Conceptual Thinking (High), Teamwork (High), Organization Awareness (Med)
      • Peningkatan Level: Information Seeking (High), Information Seeking (High), Developing Other(High), Directiveness(Med), Customer Service Orientation (High)
      • Emphaty (Med): Mampu melihat permasalah dari sudut pandang orang lain, memahami hal/keinginan/perasaan yang tidak diungkapkan.
      • Impact and Influence (Med): Mampu mempengaruhi orang lain untuk mendukung rencananya
      • Self-Control (Med): Mampu mengendalikan diri untuk melakukan tindakan-tindakan negatif pada saat ada cobaan, khususnya menghadapi tantangan dan penolakan dari orang lain atau pada saat berada dibawah tekanan.

Expert

Programmer dianggap mampu menjadi Expert ketika keahliannya bisa menghasilkan dampak yang amat signifikan terhadap keseluruhan organisasi. Ini bisa dicapai melalui kemampuan kreatif yang sangat tinggi atau kemampuan menciptakan sistem kerja baru. Dengan kemampuan kreatif, dia memiliki visi dan dapat menciptakan produk-produk unggulan, sedangkan kemampuan menyusun sistem kerja akan meningkatkan produktitas kerja keseluruhan perusahaan. Programmer yang ada di posisi ini biasanya menjadi VP Product Development, CTO, atau Fellow. Kompetensi yang dibutuhkan:

    • Semua kompetensi Consultant
    • Kompetensi Inti dan Manejerial:
      • Achievement Orientation (High), Conceptual Thinking (High), Teamwork (High), Information Seeking (High), Information Seeking (High), Developing Other(High), Customer Service Orientation (High)
      • Peningkatan Level: Organization Awareness (High), Directiveness (High), Impact and Influence (High), Self Control (High).
      • Flexibility (Med): Mampu bekerja secara efektif dengan berbagai jenis rekan/kelompok, mampu menghargai perbedaan, pandangan, dan pertentangan atas suatu isu.

Pendapatan (take-home-pay) seorang programmer tidak akan kalah dengan analyst, project manager, bahkan direktur sekalipun, selama dia terus mengembangkan keahliannya dan mencapai level yang lebih tinggi.

Beberapa tahun yang lalu saya sempat sangat kecewa dengan almamater saya, Fakultas Ilmu Komputer Universitas Indonesia. Hal ini karena semua pelamar dari almamater saya gagal melalui ujian teknis di perusahaan saya. Lebih mengkhawatirkan lagi, saat itu kelihatannya pelamar dari universitas manapun tampak buruk kualitasnya. Lalu saya mengambil inisiatif untuk bertemu dengan beberapa kawan yang jadi dosen di Fasilkom.

Saya tidak begitu paham apa yang mereka lakukan, tapi faktanya dalam beberapa tahun terakhir ini terjadi peningkatan yang sangat luar biasa. Para mahasiswa mulai memborong gelar seluruh kompetisi. Di gemastik, mahasiswa fasilkom memborong juara 1, 2, dan 3. Menjadi juara di ajang ACM tingkat Indonesia, bahkan 5 dari top 10 tim terbaik adalah tim fasilkom. Juara 5 dan10 di tingkat asia. Dan menjadi satu-satunya yang mendapat tiket atas dasar kompetisi ke ajang ACM tingkat Dunia. Its an amazing job. Thanks berat untuk Om Denny, Rulli Manurung, Ade Azurat, Nizar, dll, yang katanya jadi penanggung jawab urusan programming di kampus.

Anyway, seperti halnya menjadi seorang guru, bagi saya menjadi programmer adalah panggilan hidup. Meskipun saat ini posisi saya adalah manajemen, sambil guyon saya bilang sama COO nya, “Saya nggak akan biarkan seorang-pun di sini lebih jagoan coding daripada saya… hehehe…”. Its not about the job, it is about the passion.

Apakah ada pekerjaan yang lebih baik daripada dibayar untuk mengerjakan hobby kita?

Advertisements

One thought on “Kompetensi Programming

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s