Selasa, 05 Juni 2012

Matematika Dasar untuk Software Engineers

[Tulisan ini saya buat untuk setiap calon mahasiswa yang ingin melanjutkan studi ke jurusan informatika (atau Ilmu Komputer). Juga bagi setiap mahasiswa program studi Informatika atau Ilmu Komputer. Dan tentu saja, khalayak umum yang ingin mengetahui dapat membaca tulisan ini.]

Pada umumnya, saya menduga, masyarakat awam tidak memahami dengan tepat, tentang Software Engineers (atau Sarjana Teknik Perangkat Lunak), Teknik Informatika, Ilmu Komputer ataupun Sistem Informasi. Kebanyakan hanya memahami bahwa seorang sarjana teknik komputer adalah mereka yang berhubungan dengan komputer, internet dan seperangkat mobile phone.

Gambar dibawah ini saya ambil dari Grup Facebook Only an Engineering Student can understand the value of Last Night Study


Sebuah Gambar yang menjelaskan secara "tajam", kekeliruan yang ada pada masyarakat awam (atau bahkan pada mahasiswa jurusan Teknik Informatika di seluruh dunia???) terkait pengertian seorang ENGINEERS tersebut. Sudah jelas bahwa, seorang engineers itu adalah seorang yang "good in math"; seperti yang dilukiskan oleh figur gambar kanan bawah (seorang anak yang sedang berpikir, dilatarbelakangi papan tulis yang bertuliskan rumus matematika dasar). Sehingga jika dihubungkan dengan Software Engineers, maka sudah dapat dipastikan bahwa seorang software engineers itu adalah engineers (dgn skill matematika) perangkat lunak.

Sebelum saya lanjutkan, maka perlu juga saya menjelaskan mengenai Informatika dan Ilmu Komputer. Pengertian kedua kata ini sebenarnya adalah sama maknanya, hanya berbeda dalam penggunaannya. Di dataran Eropa, lebih cenderung menggunakan kata "Informatics" (yang diterjemahkan menjadi informatika dalam bahasa Indonesia), sedangkan di dataran Amerika dan Kanada, lebih cenderung menggunakan kata "Computer Science" (atau Ilmu Komputer). Esensinya, yang dimaksud dengan informatics dan computer science ini adalah disiplin ilmu yang sama.

Seorang SOFTWARE ENGINEERS, adalah seorang yang "terampil dengan matematika" dalam hubungannya dengan membuat program atau perangkat lunak. Mengapa? Dalam pengertian yang paling mendasar, maka seseorang dapat membuat program jika memahami dan mengikuti suatu kaidah tertentu, suatu logika yang teratur. Dalam konteks inilah, suatu skill matematika dibutuhkan oleh software engineers; yakni matematika membantu memberikan dasar fondasi untuk memahami kaidah logika teratur ini sedemikian, sehingga akhirnya logika teratur ini dapat diterjemahkan menjadi sebuah bahasa pemrograman tertentu. Esensi matematika untuk seorang software engineers sangat terkait dengan "logic and reasoning".
Menurut IEEE Software Engineering Book of Knowledge (SWEBOK), dikatakan bahwa seseorang dapat membuat program yang menyelesaikan permasalahan tertentu hanya dengan mengikuti alur logis tertentu. Tujuan kemampuan dasar matematika adalah untuk mengidentifikasi dan memahami "alur logis tertentu" tersebut, dengan penekanan pada pemahaman konsep-konsep dasar matematis, dan bukan pada kemampuan aritmatika.
Sebagai suatu disiplin ilmu, maka Matematika sangat terkait dengan studi tentang formal system. Kata formal disini adalah PRECISENESS (atau ketepatan), dimana tidak boleh terdapat ambiguitas ataupun kesalahan dalam menginterpretasi suatu data (atau fakta). Seorang software engineers harus berurusan dengan proses abstraksi fakta; dimana ketepatan abstraksi adalah mandatory (diharuskan). Disinilah peran matematika dasar bagi seorang software engineers.

Mengikuti SWEBOK IEEE, maka berikut ini adalah daftar kemampuan dasar matematis yang harus dimiliki oleh seorang Software Engineers:
  1. Himpunan, Relasi dan Fungsi
  2. Logika Dasar, seperti Logika Proporsional dan Logika Predikat
  3. Teknik Pembuktian Matematika seperti Metode Pembuktian Teorema dengan Pembuktian Langsung dan Pembuktidan dengan Kontradiksi
  4. Dasar dasar Perhitungan, seperti Aturan Penjumlahan, Aturan Perkalian, Prinsip Inclusive-Exclusive, Fungsi Rekursive, Permutasi dan Kombinasi.
  5. Teori Graph dan Trees
  6. Probabilitas Diskrit; seperti model probabilitas, random variable, diskret dan kontinyu random variabel, distribusi probabilitas (mean dan variance).
  7. Finite State Machines
  8. Teori Formal Language
  9. Presisi Numerik (atau Metode Numerik)
  10. Teori Angka (Number Theory); misalnya bilangan natural, bilangan Real, bilangan integer, bilangan rational, bilangan prima dan bilangan kompleks.
  11. Struktur Aljabar
Jadi, dapat kita simpulkan bahwa kemampuan matematika dasar inilah yang akan menjadi PONDASI bagi seorang software engineers dalam melakukan analisis, abstraksi dan proses logis.


Rabu, 30 Mei 2012

IPv4 versus IPv6

IP version 4
IPv4 atau Internet Protocol version 4 merupakan revisi keempat dari pengembangan Internet Protocol (IP). IPv4 secra de facto merupakan protocol internet pertama yang digunakan secara meluas di seluruh dunia. IPv4 diusulkan oleh RFC791 di bulan September 1981.
Secara ringkas, dapat dikatakan bahwa IPv4 merupakan protocol pengalamatan jaringan yang digunakan didalam model arsitektur jaringan TCP/IP. Arsitektur IPv4 sendiri memeiliki panjang 32-bit dan 'dianggap' dapat mengalamati 4 miliar host, atau tepatnya 4.294.967.296 host. 
Jenis Alamat IPv4
Alamat IPv4 terbagi atas beberapa jenis, yakni:
1. Alamat unicast; 
yakni alamat IPv4 yang ditentukan untuk sebuah antarmuka jaringan yang dihubungkan ke sebuah internetwork IP. Alamat unicast digunakan dalam komunikasi point-to-point. Alamat unicast, sering disebut sebagai alamat logis karena alamat ini merupakan alamat yang diterapkan pada layer jaringan DARPA Reference Model. Komponen alamat unicast terbadi menjadi host identifier dan network identifier. Alamat unicast menggunakan kelas A, B dan C dari kelas-kelas alamt IP, sehingga ruang alamatnya adalah dari 1.x.y.y.z hingga 223.x.y.z. Sebuah alamat unicast dibedakan dengan alamat lainnya dengan menggunakan skema subnet mask.
Jenis-jenis alamat unicast adalah:
a. alamat publik; yakni alamat-alamat yang telah ditetapkan oleh InterNIC dan berisi beberapa buah network identifier yang telah dijamin unik.
b. alamat ilegal; yakni alamat-alamat yang digunakan dalam intranet pribadi, yang tidak dikoneksikan dengan internet. Alamat-alamat ini cenderung membuat konflik antara satu dan lainnya karena tidak dikoordinasikan dengan InterNIC.
c. alamat privat; ini merupakan alamat IP yang berada di dalam ruangan alamat pribadi. Biasanya digunakan dalam private network, dan tidak saling overlapping dengan publik address.
d. localhost; yakni rentang alamat 127.0.0.0/8 yang dicadangkan untuk host local. Paket data yang dikirimkan melalui alamat ini akan datang kembali kepada host sebagai incoming packet pada antar muka jaringan (NIC) yang sama (atau disebut loopback).
2. Alamat broadcast
Alamat broadcast merupakan alamat IPv4 yang didisain agar dapat memproses permintaan setiap node IP dalam segmen jaringan yang sama. Alamat broadcast digunakan dalam komunikasi one-to-everyone. Alamat IP broadcast hanya dapat ditujukan sebagai alamat tujuan saja, sehingga tidak dapat digunakan sebagai alamat sumber.
Ada empat jenis alamat IP broadcast, yakni network broadcast, subnet broadcast, all-subnets-directed broadcast dan limited broadcast.
3. Alamat multicast
Multicast address merupakan alamt IPv4 yang dapat memproses permintaan satu atau beberapa node dalam segmen jaringan yang sama atau berbeda. Alamat multicast digunakan dalam komunikasi one-to-many. IP multicast merupakan alamat yang digunakan untuk menyampaikan paket data kepada banyak penerima. Alamat-alamat multicast IPv4 didefinisikan dalam ruang alamat kelas D, yakni 224.0.0.0/4, yang berkisar dari 224.0.0.0 hingga 224.255.255.2555. Prefiks alamat 224.0.0/24 tidak dapat digunakan karena dicadangkan untuk digunakan sebagai lalu lintas multicast dalam subnet lokal.

IP version 6
IP version 6 atau IPv6 merupakan protokol pengembangan IPv4. Dalam Ipv6, alamt 128 bit akan dibagi ke dalam 8 blok berukuran 16-bit yang dapat dikonversikan ke dalam bilangan heksadesimal berukuran 4-digit. Format notasi yang digunakan IPv6 sering disebut colon-hexadecimal format (berbeda dengan IPv4 yang disebut dotted-decimal format)
IPv6 memiliki angka prefiks, tetapi angka prefiks IPv6 tidak digunakan untuk merujuk kepada subnet mask (karena IPv6 memang tidak mendukung subnet masking). Struktur prefiks dinyatakan dengan [alamat]/[angka panjang prefiks]. Panjang prefiks menentukan jumlah bit terbesar paling kiri yang membuat prefisk subnet.
Alamat IPv6 terbagi atas beberapa jenis:
1. Alamat unicast; yang menyediakan komunikasi secara point-to-point; secara langsung antara dua host dalam sebuah jaringan.
2. Alamat multicast; alamat ini digunakan untuk komunikasi one-to-many.
3. Alamat anycast; alamat ini digunakan dalam komunikasi one-to-one-of-many. Alamat ini digunakan sebagai alamat tujuan (destination address) dan diberiakan hanya kepada router, bukan kepada host-host biasa.


Rabu, 23 Mei 2012

Pengantar Cloud Computing

Makin banyak yang bertanya-tanya kepada saya, tentang apa itu cloud computing, atau dalam bahasa Indonesia disebut Komputasi Awan. Dunia Teknologi Informasi, dikenal memiliki banyak jargon, yang membuat masyarakat awam (bahkan para mahasiswa pun) kesulitan untuk memahaminya. Sebuah tulisan pengantar Cloud Computing, kiranya dapat membantu untuk memulai pemahaman kita.

Menurut NIST (National Institute of Standard and Technology) maka sebuah Cloud Computing dikatakan memiliki beberapa karakteristik tertentu, yakni:
1. Layanan Sendiri
Komputasi Awan harus dapat memberikan layanan sendiri kepada para penggunanya. Layanan sendiri yang dimaksud disini tentu saja layanan aplikasi yang terkait proses bisnis penggunanya. Intinya disini adalah kebebasan pengguna untuk meng-customize, atau "men-setting" sendiri layanan yang diinginkan pengguna.
2. Elastisitas Layanan
Elastisitas Layanan menyangkut kapasitas layanan yang diberikan oleh pihak penyedia komputasi awan, dimana pengguna diberi keluasan untuk dapat meningkatkan kapasitas layanan yang ingin dimilikinya. Kapasitas layanan ini terkait aplikasi, infrakstuktur maupun platform dalam komputasi awan. Tentu saja, penyedia layanan komputasi awan harus dapat menyediakan kapasitas layanan secara tak-terbatas untuk pengguna layanan komputasi awan tersebut.
3. Akses Jaringan Pitalebar
Akses jaringan pitalebar atau broad network access menyangkut prinsip "segala alat". Maksudnya layanan komputasi awan itu harus dapat diakses dengan menggunakan berbagai perangkat seperti desktop, smart phone, ipad, Tab, Laptop, PDA dan KindleFire dari Amazon. Prinsip segala alat ini menunjukkan bahwa komputasi awan sebenarnya adalah sebuah platform yang dapat digunakan oleh berbagai macam device yang terhubung dengan layanan tersebut.
4. Sumberdaya yang terkumpul
Karakteristik lainnya dari komputasi awan adalah sunberdaya layanan yang terkumpul. Karakteristik ini terkait penyedia layanan komputasi awan yang "mengumpulkan" layanan komputasi awan secara terpusat, atau lebih tepat dikatakan terpadu dan terkendali. Sumberdaya komputasi awan menyangkut bandwith, media penyimpanan, CPU, dsb. Pengguna komputasi awan "melihat" sumber dayanya secara terpusat, meskipun sebenarnya sumber daya tersebut bisa juga tersebar oleh berbagai penyedia web services misalnya, namun penyedia layanan, menampilkannya secara terpadu, terpusat dihadapan user.
5. Layanan yang terukur.
Karakteristik terakhir yangharus dimiliki komputasi awan, yakni layanan yang terukur. Disini yang dimaksudkan adalah monitoring dan evaluasi dari layanan komputasi awan tersebut.

Layanan Komputasi awan itu sendiri sebenarnya dapat dibedakan menjadi tiga bagian, yakni:
1. software as service
2. infrastucture as service
3. platform as service
Kita dapat melihat secara jelas, apa sebenarnya yang dimaksud dengan layanan komputasi awan itu tersebut. Intinya ada pada kata "service". Ini berarti semua produk Teknologi Informasi Komunikasi, yakni perangkat lunak, perangkat keras, komputasi, storage dan networking dijadikan sebagai pendukung dan pemungkin proses bisnis pengguna layanan komputasi awan. Pendukung dan pemungkin proses bisnis inilah yang HARUS menjadi pemahaman kunci dalam "pendayagunaan" komputasi awam tersebut.

Berikut saya berikan sebuah link yang sangat bagus untuk mulai memahami komputasi awan,
http://www.cloudindonesia.org/pengantar-cloud-computing.html
Link tersebut juga memberikan FREE e-book Pengantar Komputasi Awan yang sangat menarik dan mudah dicerna.

Disain Arsitektur Aplikasi


The Physical Architecture Layer design atau disain arsitektur aplikasi memodelkan the system’s hardware, software and network environments. Secara teori maka design for physical architecture layer harus dapat menggambarkan model
[1] how system is distributed amongst computers, 
[2] the hardware of those computers and 
[3] the software on those computers

Beberapa catatan penting terkait elemen-elemen dari Disain Arsitektur Aplikasi adalah sebagai berikut:

1. Assigning software pada hardware akan melibatkan beberapa komponen arsitektur yakni: Server-based, Client-based dan Client-server (yang paling banyak digunakan sekarang ini)

2. Software system dapat dibedakan menjadi empat fungsi utama


  • Data storage; yang dimodelkan pada layer Data Management Layer sebagai the persistent objects (menggunakan CRC Cards dan UML Class Diagram)
  • Data Access Logic; yang dimodelkan sebagai Data Access and Management Classes pada Data Management Layer. Data Access Logic adalah proses yang dibutuhkan untuk mengkases stored data, misalnya SQL queries. (Pemodelan dapat menggunakan ERD)
  • Application logic; yang dimodelkan pada Problem Domain Layer’s functional dan behavioural models. Dimana Functional Model dimodelkan dengan UML Activity Diagrams, UML Use Cases atau Context Diagram dan DFD. Sedangkan untuk model Behavioural dapat menggunakan UML Sequence Diagrams and UML Communication diagrams untuk menggambarkan Behavioural State Machines 
  • Presentation Logic; yang dimodelkan sebagai HCI layer. Layer ini dimodelkan dengan menggunakan Storyboard dan UML Navigation Diagram.

3. Hardware components are


  • Client computers misalnya I/O devices or system’s users, e.g. desktop/laptop computers, handheld, mobile, etc
  • Servers, yakni Mainframes, minicomputers and high-end microcomputers
  • Connecting Network, termasuk diantaranya High-speed permanent Ethernet/T3/ATM, broadband, dialled 

Selengkapnya dapat diunduh disini





Human Computer Interaction

Dalam keilmuan Analisa dan Perancangan Sistem Informasi, HCI atau Human Computer Interaction memiliki peran penting; namun sayangya, HCI sering disalahpahami oleh para programmer dan analyst. Berikut sebuah ilustrasi percakapan tentang HCI.

(Sumber http://img.tfd.com/cde/_TOON4.GIF)


User: Tombol “Delete” gunanya buat apa ya ?
Analyst: menghapus file
User: Lalu tombol “Hapus” itu gunanya apa ?
Analyst: Menghapus file juga
User: Kenapa ada tombol yg namanya beda, namun fungsinya sama ?
Analyst: Untuk variasi saja, memberikan user pilihan lebih banyak ?
User: oooo ..

Ambiguitas dalam üser interface" merupakan masalah yang umum terjadi. Dalam kasus yang paling sederhana, hingga kompleks. Tantangan bagi seorang analyst sistem adalah bagaiman menghadirkan sebuah sistem human computer interaction yang dapat memberikan manfaat optimal bagi pengguna (bukan menunjukkan kejagoan seorang disainer antar-muka atau disainer grafis).


Sebagai pendahuluan maka antar muka sistem pengguna itu biasanya terdiri atas:
1) Tampilan Navigasi (atau screens for navigation through system) untuk menjelajah seluruh aplikasi/sistem informasi
2) Tampilan dan Form untuk capture data
3)  Laporan yang dihasilkan oleh system (laporan ini bisa dalam bentuk paper, screen, other media)

Sedangkan untuk disain antar-muka memerlukan proses:
1) Principles and processes
2) Interface structure and standards
3) I/O design
4) Navigation design

Selengkapnya tentang Materi disain antar muka dapat diunduh disini dan disini