Jurnal Anas

Cuap-cuap Tentang Fullstack Developer

Nearly two years after I left Google, I’m starting to understand what’s going on in the professional sphere. The conventional seams between disciplines are fraying, and the set of skills necessary to succeed are broader and more nebulous than they’ve been before.

These days, you’ve gotta be a real polymath to get ahead; you’ve got to be a full-stack employee.

Entah perasaan saya doang atau memang bener, sepertinya saat ini lagi trend orang membicarakan Full Stack Developer. Mungkin nggak semua orang, tapi, _, karena perusahaan sekeren Facebook mencari orang-orang seperti ini, saya rasa nggak butuh waktu yang lama sampai Full Stack Developer banyak diminta. Dan sebenernya ini memang udah jadi trend.

Sebagian besar job offer ataupun job suggestion yang saya dapet dari LinkedIn ataupun email, meminta kualifikasi engineer yang bisa semuanya. Polymath. Yang nggak cuman bisa bikin aplikasi yang menyelesaikan problem yang diminta, tapi juga yang user friendly, cepat, indah, responsive, reliable, secure, dan scalabale.

Biasanya posisi seperrti ini adalah Senior Develope dan sejenisnya. Dia harus punya kemampuan di berbagai layar karena dia yang akan memimpin tim developer itu sendiri, sehingga harus tau apa yang sebenarnya harus dicapai, bagaimana caranya, dan apa yang harus dilakukan kalau ada hambatan dibagian tertentu.

Dan ya, itu berarti nggak mudah.

Tapi satu hal yang gue tahu saat ini adalah, kalau semuanya aspek yang di minta dalam kualifikasi Full Stack Developer itu memang perlu. Mungkin seseorang nggak bisa mendalami semua bagian itu secara mendalam, tapi seenggaknya tahu mana sistem yang baik di tiap bagian tertentu dan mana yang nggak.

Apalagi waktu dan energi yang kita punya terbatas. Seenggaknya kita perlu tau prioritasnya, dan memilih prioritas inilah yang harus kita lakukan dengan benar.

Saya jadi inget saat saya membuat aplikasi ekstensi yang termasuk dalam sebuah aplikasi web dengan traffic yang tinggi. Dan disitu saya belajar beberapa hal penting. Misalnya, saya jadi semakin sadar bahwa seorang Web Developer penting untuk mengerti bagaimana cara kerja HTTP. Dan kalau sistem yang besar itu dipotong-potong, penting untuk tahu bagaimana interaksi server pada skala yang paling kecil.

Lebih lengkapnya tentang apa yang idealnya seorang Full Stack Developer itu perlu tahu, kurang lebih sebagai berikut dikutip dari sini:

Server, Network, and Hosting Environment.

  • This involves understanding what can break and why, taking no resource for granted.
  • Appropriate use of the file system, cloud storage, network resources, and an understanding of data redundancy and availability is necessary.
  • How does the application scale given the hardware constraints?
  • What about multi-threading and race conditions? Guess what, you won’t see those on your development machine, but they can and do happen in the real world.
  • Full stack developers can work side by side with DevOps. The system should provide useful error messages and logging capabilities. DevOps will see the messages before you will, so make them count.

Data Modeling

  • If the data model is flawed, the business logic and higher layers start to need strange (ugly) code to compensate for corner cases the data model doesn’t cover.
  • Full stack developers know how to create a reasonably normalized relational model, complete with foreign keys, indexes, views, lookup tables, etc.
  • Full stack developers are familiar with the concept of non-relational data stores and understand where they shine over relational data stores.

Business Logic

  • The heart of the value the application provides.
  • Solid object oriented skills are needed here.
  • Frameworks might be needed here as well. API layer / Action Layer / MVC
  • How the outside world operates against the business logic and data model.
  • Frameworks at this level should be used heavily.
  • Full stack developers have the ability to write clear, consistent, simple to use interfaces. The heights to which some APIs are convoluted repel me.

User Interface

  • Full stack developers: a) understand how to create a readable layout, or b) acknowledge they need help from artists and graphic designers. Either way, implementing a good visual design is key.
  • Can include mastery of HTML5 / CSS.
  • JavaScript is the up and coming language of the future and lots of exciting work is being done in the JavaScript world (node, backbone, knockout…)

User Experience

  • Full stack developers appreciate that users just want things to work.
  • A good system doesn’t give its users carpal tunnel syndrome or sore eyes. A full stack developer can step back and look at a process that needs 8 clicks and 3 steps, and get it down to one click.
  • Full stack developers write useful error messages. If something breaks, be apologetic about it. Sometimes programmers inadvertently write error messages that can make people feel stupid.

Understanding what the customer and the business need.

  • Now we are blurring into the line of architect, but that is too much of a hands off role.
  • Full stack developers have a grasp of what is going on in the field when the customer uses the software. They also have a grasp of the business.

Hanjir, seriusan?

Kalau kamu adalah mahasiswa yang baru masuk di program Ilmu Komputer atau baru aja lulus mata kuliah Algoritma dan Pemrograman, mungkin akan kaget baca list tadi. Dan sebagian besar orang juga bakal kayak gitu. Banyak banget yang harus diketahui, walaupun sebenarnya sebagian besar yang ada di daftar tadi biasanya dipelajari di kurikulum Ilmu Komputer.

Kalau menurut saya sih, ini hanya masalah perspektif.

Misalnya, saya lebih suka menyelesaikan sesuatu itu dari gambaran besarnya, dan mulai melakukan satu demi satu pekerjaan dari belakang. Contohnya dalam hal ini, saya nggak pusing-pusing cari resource untuk pelajari satu per satu aspek pengembangan perangkat lunak yang banyak tadi.

Saya akan mulai dari apa aplikasi yang ingin saya buat. Lalu mulai mengerjakannya walaupun dalam skala yang sederhana. Walaupun hasilnya abstrak. Lajutkan eksplorasi dan pelajari teknologi apa yang diperlukan untuk membuatnya.

Dan seiring dengan berjalannya waktu, kebutuhan untuk mempelajari bagaimana mendesain UX yang bagus atau bagaimana membuat aplikasi tersebut scalable, akan mendorong kita untuk mempelajari aspek-aspek yang lebih kecil tadi dengan serius. Setiap ada bottleneck, cari solusinya dan selesaikan. Ada bottleneck, cari solusinya. Begitu seterusnya.

Dan itu berarti, semakin banyak yang kita buat, semakin banyak yang kita berkontribusi dan mengembangkan sebuah project, urgensi untuk menggali lebih dalam akan datang dengan sendirinya.

Selain itu, yang akan kita pelajari nanti akan langsung terasa gunanya pada project yang sedang kita kerjakan. Dan ini menurut saya, adalah cara belajar yang seru.

Misalnya, Budi ingin belajar javascript supaya bisa membuat aplikasi yang keren. Inilah teknologi-teknologi yang bisa Budi dalami:

  • HTML - struktur dari web
  • CSS visual - halaman web
  • Bootstrap - sebuah “responsive design” tool yang keren
  • jQuery/Ajax - untuk ngoprek-ngoprek konten halaman web
  • Chrome DevTools - debugging
  • JavaScript - satu bahasa pemrograman yang semua web browser gunakan
  • Common - algorithms beberapa resep untuk bisa menyelesaikan problem
  • Agile - a set of software development principles
  • Git - version control untuk menyimpan dan berbagi project
  • Database relasional yang populer seperti PostgreSQL atau database non-relasional yang populer seperti MongoDB
  • Node.js - event-driven platform untuk membuat web server
  • Express.js - framework
  • Chai.js or Jasmin.js - untuk testing

Engineers are hired to create business value, not to program things.

Sekilas mungkin terlihat menyeramkan, tapi nggak kalau kita menikmatinya. Dan satu cara untuk bisa menikmatinya adalah dengan belajar sambil membangun aplikasi yang kita suka. Nggak perlu bagus, dan nggak perlu dilihat anyak orang, yang penting seru. Itu aja. Memang, akan memakan waktu, tapi begitu pula dengan semua hal lain yang layak dicoba.

Sebenarnya, kalau kita mau coba jujur, kebanyakan perangkat lunak yang dibuat itu bukan aplikasi web populer atau aplikasi-aplikasi yang ada di app store.

Kebanyakan aplikasi dan perangkat lunak adalah aplikasi-aplikasi yang digunakan khusus oleh masing-masing instansi dan perusahaan, dan itu bermacam-macam. Dan seringkali, mereka nggak peduli dengan secanggih apa teknologi yang kamu gunakan untuk membuat perangkat lunak.

Yang mereka inginkan adalah perangkat lunak yang bisa menambah revenue perusahaan, dan atau mengurangi biaya pengeluaran. Intinya yang bisa menambah profit. Itu aja.

Mereka nggak peduli aplikasi yang perlu dibuat mungkin hanya sistem CRUD paling sederhana di dunia, tapi kalau itu yang bisa membuat perusahaan untung, itulah yang membuat mereka senang. Karena pada kenyatannya, tujuan Engineer di cari adalah untuk memberi nilai ekonomi, bukan memprogram berbagai mainan.

Kemampuan Full Stack Developer itu perlu, dan kita perlu mendalaminya. Tapi yang lebih penting adalah ingat, bahwa Engineer banyak diperlukan, utamanya untuk memberi nilai ekonomis. Jadi, entah apapun posisi kamu saat ini, nggak ada titik yang menandakan kamu sudah terlambat.