Selasa, 05 Juni 2012

Dasar Komputasi untuk Software Engineers

[Tulisan ini dibuat untuk Calon Mahasiswa Informatika, para mahasiswa program studi informatika dan khalayak umum yang ingin mengetahui kompetensi dasar seorang software engineers]

Komputasi untuk Software Engineers merupakan "core competency" atau kompetensi inti. Komputasi pada dasarnya terkait dengan dasar-dasar ilmu komputer yang mendukung proses analisa, perancangan dan konstruksi dari perangkat lunak. Komputasi dasar juga akan terkait dengan proses transformasi "disain" perangkat lunak, menjadi perangkat lunak yang siap digunakan (implementasi), tools (atau alat pendukung) yang diperlukan dalam proses-proses ini dan berbagai metode pengembangan perangkat lunak.
Pada umumnya, kita menerima sebagai suatu kenyataan bahwa software engineering (atau Rekayasa Perangkat Lunak atau Teknik Informatika) "dibangun" diatas dasar-dasar ilmu komputer dan ilmu matematika. Meskipun demikian, ada beberapa ilmuwan yang tidak sependapat dengan pandangan ini. Saya berpendapat bahwa software engineering "dibangun" diatas keilmuan ilmu komputer dan matematika.

Seorang pakar ilmu komputer Andrew Tanenbaum, menulis dalam bukunya Structured Computer Organization ISBN 978-0-13-148521-1; bahwa ilmu komputer mempelajari komputer sebagai "berbagai level abstraksi perangkat keras dan perangkat lunak". Level abstraksi sistem komputer itu dapat dilihat pada Gambar dibawah ini:
(Gambar Abstraksi Komponen Sistem diatas diambil di http://kambing.ui.ac.id/bebas/v06/Kuliah/SistemOperasi/2003/41/produk/SistemOperasi/c1.html)

Software Engineers "melihat" komputer dari sudut pandang software abstraction layer dan hardware abstraction layer. Dibagian lebih dasar dari hardware abstraction layer ada layer solid-states yang merupakan bagian dari disiplin ilmu Elektro (Electrical Engineering). Dibagian lebih atas dari software abstraction layer, dapat ditambahkan layer internet, web (1.0, 2.0 dan X.X) dan komputasi awan/cloud computing. Layer ini sering disebut Teknologi Informasi.
Keilmuan software engineering meliputi "abstraksi" dari perangkat lunak dan perangkat keras. Secara kasar dapat dikatakan bahwa tidak ada perangkat lunak yang "berjalan" tanpa membutuhkan perangkat keras. Software Engineering melihat kerangka kerja perangkat lunak, perangkat keras dan konektivitas jaringan sebagai bagian level abstraksi. Abstraksi perangkat lunak dan perangkat keras dibangun berdasarkan ilmu komputasi dan matematika. Sehingga, dengan demikian setiap software engineer harus memiliki kompetensi terkait ilmu komputasi dasar, karena ilmu komputasi dasar sangat erat terkait dengan proses analisis, disain dan implementasi perangkat lunak, dalam lingkungan abstraksi seperti pada Gambar diatas.

Ilmu Komputasi Dasar meliputi bahasan seperti pemrograman, struktur data, algoritma, organisasi dan arsitektur komputer, networking, sistem terdistribusi, dan lainnya. Pemetaan ilmu komputasi dasar dengan matematika dasar, analisa dan perancangan perangkat lunak, pengembangan perangkat lunak, pengujian perangkat lunak, jaminan kualitas perangkat lunak dan pemeliharaan perangkat lunak MERUPAKAN salah satu pemahaman kunci yang harus dimiliki seorang Software Engineers.

Berikut adalah topik bahasan ilmu komputasi dasar menurut Software Engineering Body of Knowledge yang dikeluarkan IEEE:
  • Abstraksi; level abstraksi, enkapsulasi, prinsip hierarki
  • Pemrograman Dasar: proses pemrograman, paradigma pemrograman dan defensive programming.
  • Dasar Bahasa Pemrograman: Sejarah Bahasa Pemrograman, Sintaks dan Semantik Bahasa Pemrograman, Bahasa Pemrograman Tingkat Rendah, Bahasa Pemrograman Tingkat Tinggi, Bahasa Pemrograman Imperative dan Declarative
  • Teknik dan Tools Debugging: Tipe Error, Teknik Debugging, Tools Debugging.
  • Struktur dan Representasi Data: Struktur Data, Tipe-tipe struktur data dan Operasi pada Struktur Data.
  • Algoritma dan Kompleksitas: Pengantar Algoritma, Atribut Algoritma, Analisa Algoritma dan Disain  Strategis Algoritma.
  • Konsep Dasar Sistem: Karakteristik Emergent System, System Engineering, Pengantar Sistem Komputer.
  • Organisasi dan Arsitektur Komputer: Pengantar Organisasi Komputer, Sistem Digital, Logika Digital, Ekspresi Data, Central Processing Unit, Organisasi Sistem Memori, Unit Input/Output.
  • Dasar Kompilasi: Pengantar Kompilasi, Interpretasi dan Proses Kompilasi.
  • Dasar Sistem Operasi: Pengantar Sistem Operasi, Abstraksi Sistem Operasi, Fungsi Sistem Operasi dan Klasifikasi Sistem Operasi.
  • Basis Data dan Manajemen Data: entitas dan schema, sistem manajemen basis data, bahasa query basis data, manajemen data, data mining.
  • Dasar Komunikasi Jaringan: Tipe Jaringan, Komponen Dasar Jaringan, Standar dan Protokol Jaringan, Internet, Internet of Things dan Virtual Private Network.
  • Parallel dan Distributed Computing: Pengantar Parallel dan Distributed Computing, Perbedaan Parallel dan Distributed Computing, Model dan Isu terkini.
  • Basic User Human Factors: Tampilan Masukan dan Keluaran, Pesan Kesalahan, dan Software Robustness
  • Basic Developer Human Factors: Struktur, Comments
  • Secure Coding: Aspek Secure Coding, Coding Security pada Software, Persyaratan Security, Disain Security dan Implementasi Security.

Tidak ada komentar:

Posting Komentar