Software Engineering: Pentingnya kemampuan Computational Thinking dan Komunikasi

ARYA BHANUARTHA
DOT Intern
Published in
6 min readJan 22, 2024

Software engineering atau rekayasa perangkat lunak adalah sebuah disiplin ilmu dalam proses pembuatan perangkat lunak dengan memperhatikan prinsip — prinsip rekayasa (engineering) tertentu. Sebagian besar dari kita terutama para software developer (engineer) mungkin pernah melalui masa — masa dimana kita membuat sebuah produk perangkat lunak sendiri namun belum menggunakan prinsip — prinsip dalam rekayasa perangkat lunak.

Mengapa prinsip rekayasa perangkat lunak itu penting?

Sebagian dari kita, termasuk saya sendiri pernah memiliki imajinasi untuk membuat aplikasi kita sendiri dan menjadi seorang superman. Namun terkadang kita melupakan beberapa aspek penting contohnya adalah perancangan dan testing, memang terkadang kita berpikir bahwa aplikasinya belum terlalu kompleks, namun mempelajari sekaligus menerapkannya bukanlah hal yang salah bukan?

Salah satu bab paling penting adalah SDLC (Software Development Lifecycle), adalah salah satu materi yang seharusnya dipelajari oleh semua jurusan yang berkaitan dengan ilmu komputer. SDLC adalah suatu siklus yang ada dalam pengembangan perangkat lunak, mulai dari perancangan, implementasi, testing, dan maintenance. SDLC juga memiliki beberapa jenis tertentu yang dapat dipilih oleh para engineer dengan melihat beberapa aspek atau faktor seperti biaya, risiko, scalability, dan tenggat waktu.

Selain itu, bab lain yang juga sangat berkaitan dengan rekayasa perangkat lunak adalah design pattern dan SOLID Principle. Design pattern dan SOLID Principle adalah dua hal yang saling berkaitan dimana desain pattern dibuat agar kode perangkat lunak dapat dibuat mengikuti pattern yang ada sehingga memenuhi prinsip dari SOLID. Apa itu design pattern? dan apa itu SOLID Principle? Sederhananya, design pattern adalah sebuah pola dalam perancangan dan penulisan kode dengan mengikuti kompleksitas dan fungsionalitas tertentu. Sedangkan SOLID Principle, adalah suatu prinsip yang dapat dipatuhi untuk membuat kode bersih, mudah dibaca, dan mengurangi code smell. Sehingga, suatu kode kemudian dapat sesuai atau setidaknya tidak bertentangan dengan SOLID Principle.

Kapan kita menggunakan prinsip rekayasa tersebut?

Prinsip rekayasa akan sangat berguna ketika kita mulai mengerjakan proyek dengan ukuran dan skala yang besar serta mulai mengerjakan proyek tersebut dalam bentuk tim. Dalam kasus tersebut, kita perlu melakukan perancangan dan menyusun sebuah pattern atau prinsip yang dapat diikuti sebuah tim ketika melakukan pengembangan perangkat lunak tersebut.

Namun yang terkadang terjadi adalah beberapa struktur kode yang berantakan karena keterbatasan waktu dan sumber daya lainnya. Sebenarnya iterasi dalam pengembangan perangkat lunak sangatlah wajar, dimana tiap iterasi pasti memiliki targetnya masing — masing sesuai dengan persetujuan para stakeholder dan tim. Disitulah bagian tricky — nya, dimana tidak semua kode akan dibaca oleh developer yang sama.

Photo by KOBU Agency on Unsplash

Deliver product is #1, Timelines are another part of it

Seberantakan apapun kode dari sebuah program, selama aplikasi tersebut dapat digunakan dengan baik oleh pengguna dan dimengerti oleh komputer, produk tersebut tetap valid dan useable. Namun disisi developer belum tentu readable. Meskipun terkadang sebuah proyek sudah memiliki guidelines sendiri dengan panduan dan boilerplate yang telah disusun dengan rapi dalam proses awal perancangan dan sesuai dengan prinsip — prinsip dalam rekayasa perangkat lunak, tetap saja akan banyak sekali code smell ketika kode tersebut dikerjakan oleh developer yang berbeda — beda secara iteratif ditambah lagi dengan monitoring yang kurang oleh maintaner proyek tersebut.

Bagaimana kita dapat memahami alur kode dengan baik?

Photo by Kelly Sikkema on Unsplash

Ketika kita diundang dalam sebuah project, terutama dalam hal ini adalah software house, setelah selesai melakukan instalasi dan konfigurasi, apa yang pertama kali muncul dalam benak kalian? atau apa yang pertama kali kalian lakukan? Hal ini sangat berhubungan dengan kemampuan computational thinking, meskipun tidak langsung berhubungan dengan kode dan program, tapi bagaimana kita dapat mengabstraksi sebuah permasalahan dan mengambil keputusan mengenai langkah apa yang harus diambil selanjutnya sehingga pekerjaan dapat dikerjakan dengan efektif dan efisien.

1. Please Guys, Read the Documentation !

Sepengalaman pribadi, ketika saya diundang masuk ke dalam sebuah proyek baru, maka project manager (PM) dari proyek tersebut akan menjelaskan secara singkat apa proyek yang akan dikerjakan serta memberikan dokumentasi aplikasi. Yess ! Dokumentasi.

Hal pertama yang memang harus dilakukan adalah membaca dokumentasi dari aplikasi tersebut. Mungkin tidak perlu semuanya, namun cukup cakupan atau modul yang sesuai dengan tugas yang telah diberikan. Umumnya dalam dokumentasi sudah memiliki informasi yang dapat berguna bagi para developer. Seperti fitur, ekspektasi pengguna, desain UI, dan flowchart dari aplikasi.

Namun tentu tidak cukup sampai membaca dokumentasi saja, karena kita sebagai developer juga perlu untuk mengetahui alur secara detail dari sebuah kode program. Umumnya dokumentasi hanya digunakan sebagai panduan secara garis besar saja, agar nantinya ketika membaca kode dapat mengetahui apa input dan ekspektasi output dari program tersebut.

2. Diving the code

Programmer : Understand how the code work and how the others write

Pada bagian ini, kita akan menghabiskan sebagian besar waktu kita untuk “ngulik” kode program yang sudah ada atau bagaimana kita mengikuti panduan untuk mulai menulis kode. Seperti yang sudah dijelaskan sebelumnya, bahwa pengerjaan proyek dalam sebuah tim tentu memerlukan sebuah panduan atau guidelines sehingga tiap divisi dapat mengerjakan dengan baik. Selain itu dalam proses maintance pada existing code, kita juga perlu mengetahui alur dari program tersebut.

Adanya dokumentasi tidak menjamin bahwa sebuah kode program akan rapi dan readable. Semakin kompleks dari sebuah aplikasi maka, kemungkinan kode akan menjadi berantakan semakin tinggi. Namun sayangnya, kompleksitas tersebut kemudian tidak ditangani lebih lanjut seperti menyusunnya menjadi beberapa bagian atau modul sehingga mengikuti prinsip SOLID.

Oleh karena tidak adanya jaminan bahwa kode program akan selalu rapi atau readable, maka programmer juga perlu memiliki kemampuan untuk membaca dan menganalisa kode tertentu yang telah dibuat oleh orang lain. Disinilah kemampuan computational thinking kita akan diuji.

Secara umum, computational thinking adalah cara berpikir untuk menyelesaikan masalah dengan menerapkan teknik-teknik ilmu komputer. Teknik-teknik tersebut meliputi:

  • Dekomposisi: Memecahkan masalah besar menjadi masalah-masalah kecil yang lebih mudah diselesaikan.
  • Pola: Mencari pola dalam data atau informasi untuk menemukan solusi.
  • Abstraksi: Menyederhanakan masalah kompleks menjadi komponen-komponen yang lebih kecil dan terkelola.
  • Algoritma: Menentukan urutan langkah-langkah yang diperlukan untuk menyelesaikan masalah.

Meskipun terdapat frasa computation, tidak berarti bahwa cara berpikir tersebut hanya bisa dilakukan dalam bidang IT, namun cara berpikir tersebut memang mengikuti bagaimana komputer bekerja yang sangat berkaitan dengan logika dan algoritma.

Memahami pola dalam kode adalah kemampuan yang sangat penting dan membutuhkan jam kerja serta pengalaman. Dari saya pribadi, terkadang saya dapat mengerti sebuah kode dalam bahasa pemrograman yang tidak saya mengerti sebelumnya, namun kode atau bahasa terkadang memiliki sintaksis yang bersesuaian polanya serta semantik yang sama, sehingga terkadang sedikit mengerti.

Selain itu, kita juga terkadang perlu memperhatikan penggunaan modul dan fungsi tertentu dalam sebuah kode dan sebisa mungkin untuk tetap mengikuti pola yang ada dalam kode tersebut. Semisal dalam fungsionalitas dalam cakupan tertentu sudah disediakan komponen atau modul yang telah dibuat sebelumnya, kita terkadang sebisa mungkin untuk menggunakan komponen atau modul tersebut, meskipun tidak terdapat dokumentasi yang jelas dalam penggunaannya, itulah mengapa memahami alur pemikiran dan penulisan orang lain sangatlah penting.

Untungnya hari ini, sudah terdapat tools yang membantu developer dalam proses pengembangan aplikasi perangkat lunak. Sebut saja IDE atau code editor. Dengan tools tersebut, kita dapat menelusuri kode dengan lebih mudah, dimana sebuah fungsi digunakan dan diletakkan dalam suatu file kode. Manfaatkan kemampuan code editor dan IDE sehingga dapat memberikan developer experience yang maksimal.

3. Ask the people

Kita bekerja dalam tim sehingga komunikasi adalah hal yang sangat penting. Komunikasi dan kerja sama tim tentu dapat memberikan performa terbaik dalam pengerjaan suatu proyek. Sangat wajar bagi kita untuk memahami kode atau alur program yang diberikan, terlebih lagi jika dokumentasi yang kurang lengkap, task yang kurang jelas, atau mungkin terdapat broken code yang membingungkan kita. Oleh karena itu, penting bagi kita untuk mengkomunikasikan apa yang menjadi blocker kepada project manager atau engineer sebelumnya. Penulisan dan eksekusi kode juga sebaiknya dilakukan dengan berkonsultasi dan atas kesepakatan tim, sehingga kode akan tetap rapi dan lebih mudah untuk dimaintain kedepannya.

Kesimpulan

Ketiga langkah diatas dapat digunakan secara iteratif selama proses pengembangan aplikasi. Langkah — langkah diatas juga dapat dikerjakan secara bergantian dan tidak harus berurutan. Hal diatas sangat berhubungan dengan bagaimana kita dapat mengatur diri kita dengan baik sehingga dapat menyesuaikan dengan lingkungan dan kondisi kita bekerja. It’s all about self-management and dealing with experience. Tidak ada sesuatu yang benar — benar pasti dalam manajemen, karena itu berkaitan dengan pengalaman dan intuisi pribadi yang dapat berkembang dengan sendirinya. Langkah — langkah diatas mungkin dapat berperan sebagai panduan, namun anda dapat menemukan sendiri bagaimana kita dapat memposisikan diri kita dengan baik sesuai dengan lingkungan kerja terutama dalam software engineering

--

--