Sekilas tentang biaya dan investasi

Beberapa bulan ini Indonesia diramaikan dengan banyaknya penipuan dalam berbagai macam bentuk, baik investasi maupun jasa. Artikel ini akan mencoba membahas sedikit apa saja yang perlu diketahui perihal biaya jasa dan hasil dari investasi.

Private company berorientasi pada profit / untung

Satu hal yang perlu diingat saat ingin menggunakan suatu jasa, adalah perusahaan / orang / badan yang menawarkan jasa tersebut pasti mencari keuntungan dari transaksi tersebut. Perusahaan akan mengambil keuntungan dari profit margin yang telah ditetapkan sebelumnya. Ambil contoh profit margin 20%, yang berarti untuk transaksi sebesar Rp. 120 ribu berarti perusahaan mengambil untung 20 ribu, dan 100 ribu adalah biaya asli dari jasa yang dikeluarkan.

Profit margin bermacam-macam sesuai dengan barang / jasa dan kisaran harga yang ditawarkan. Namun role nya tetap sama, apabila perkiraan keuntungan yang diperoleh dari penyedia jasa sangat sedikit, pasti ada sesuatu di belakang barang / jasa yang ditawarkan.

Memperkirakan keuntungan

Untuk mencari tahu kisaran keuntungan dari satu barang / jasa tidak mudah dan diperlukan pengetahuan mendalam terkait bidang tersebut. Namun minimal, anda bisa membandingkan harga barang / jasa yang ditawarkan, dengan kisaran harga lain yang berada di pasaran.

Misalnya sebuah mouse wireless model A dijual di kisaran Rp. 90-100 ribu, maka bila ada yang menjual di harga 120 ribu adalah sangat kemahalan, dan di harga 70 ribu sangat kemurahan. Pasti ada sesuatu pada mouse yang dijual di harga 70 ribu itu, apakah penjualnya tidak membayar pajak penjualan, atau barang masuk melalui jalur gelap sehingga tidak terkena pajak impor, atau bisa jadi itu adalah barang rekondisi. Namun mungkin juga si penjual membeli mouse tersebut dalam jumlah grosiran, sehingga harga perolehannya bisa sangat murah dan mampu menjualnya lebih murah.

Intinya, bila tidak ada kompetitor yang mampu menwarakan barang / jasa di tingkat harga yang sangat rendah tersebut, pasti ada sesuatu di belakangnya.

“Sesuatu di belakang harga yang sangat rendah”

Banyak faktor yang bisa membuat harga suatu produk / jasa menjadi sangat rendah, baik itu positif ataupun negatif. Mengetahui alasan di balik harga yang rendah tersebut sangat membantu kita menilai apakah barang / jasa tersebut layak untuk dibeli / diperoleh.

Alasan pertama yang paling umum, yaitu untuk promosi. Produk-produk dengan merk / model baru banyak yang dijual dengan kisaran harga 10% lebih murah untuk kepentingan promosi. Setelah banyak transaksi yang berhasil, baru produk tersebut kembali ke nilai aslinya.

Berikutnya adalah adanya pendapatan di samping barang / jasa yang ditawarkan. Misalnya mesin pencarian google yang gratis, di belakangnya ada transaksi yang besar untuk menempatkan website-website tertentu di halaman pertama pencarian google.

Biaya yang lebih rendah juga bisa jadi alasan rendahnya harga barang / jasa yang ditawarkan. Membeli barang secara grosir dan langsung dari agen utamanya, tentu akan mendapatkan diskon dan dapat dijual lagi dengan harga lebih murah. Produksi furniture dengan mesin dalam jumlah yang banyak, seperti yang dilakukan IKEA saat ini, tentu mengurangi biaya produksi. Uber dapat menawarkan harga yang lebih murah dari taksi konvensional, terlepas dari niat promosinya, beberapa alasannya adalah struktur organisasi yang lebih ramping dan proses yang lebih efisien.

Dalam investasi

Dalam investasi, suku bunga bank dapat dijadikan acuan untuk menentukan ekspektasi return profit dari investasi di pasaran. Misalnya bank A, B dan C masing-masing menawarkan suku bunga deposito sebesar 5%, 5.5% dan 6% per tahun, berarti kisaran return profit investasi yang paling aman di pasaran adalah sebesar itu. (Bila dalam contoh ada bank D yang menawarkan bunga deposito 8% per tahun juga perlu diwaspadai, apalagi bank yang kurang ternama).

Investasi dengan profit return yang lebih kecil dari bunga deposito tidak bermanfaat, taruh saja di deposito bank. Semakin besar return profit investasi yang ditawarkan dibandingkan dengan suku bunga bank, semakin besar risk yang harus dihadapi dari investasi tersebut (misalnya saham).

Dalam dunia IT…

Aturan yang sama juga berlaku dalam dunia IT. Harga yang sangat beragam dari vendor-vendor yang beragam untuk satu produk (applikasi) IT memiliki alasan-alasan tersendiri di belakangnya. Apakah memang biaya development nya mahal (jumlah programmer banyak), apakah vendor tidak efisien sehingga harga mahal atau sebaliknya, apakah vendor memiliki produk yang serupa sehingga kustomisasi tidak banyak, ataukah vendor menghasilkan produk yang berkualitas rendah (kita akan membahas kualitas software di lain kesempatan).

Namun secara umum, profit margin yang cukup logis (mungkin sekitar 15%-20%) sangat diperlukan bagi vendor untuk tetap mampu melanjutkan usahanya.

Kesimpulan

Setiap produk / jasa memiliki biaya dasarnya, dan ditambah dengan profit margin lalu menghasilkan harga pasaran. Harga yang lebih murah dari harga pasaran pasti memiliki alasan di belakangnya. Untuk IT, karena proses developmentnya lebih kompleks, maka harga penawarannya lebih beragam dari satu vendor ke vendor lainnya.

Advertisements

Node await is synchronous

Starting from node 8, or node 6 with babel, we can use a feature named async await. It makes programming asynchronous code in synchronous way. For example, let’s say a function getNumberis returning Promise with resolve, we can call the function using await like this:

async function processNumber(){
  var number = await getNumber();
  number = number + 2;
  return number;
}

Async function will always return Promise, even though it isn’t described in code. Pretty neat huh, now that we can treat the promise as function that return something (synchronously). However, as I had previously assumed, await statement is executed synchronously.

I am using the test scripts at the following github repository. The code in app.js is using Promise.all, while the code in app2.js is using async await. In both code, they will execute same function, called execThings.

var execThings = function(i){
	return new Promise(function(resolve){
		var curIndex = i;
		setTimeout(function(){
			console.log(curIndex, model);
    		resolve(model.num++);
		}, 120 - ((i * i) - (2 * i) + 5));
    });
};

This function is accepting a numeric parameter, then it will resolve an incrementing number, defined in model.num. For the sake of some randomness and asynchronous process, I use setTimeout with randomized timeout based on input argument. When executed, here is one of the result:

12 { num: 0 }
13 { num: 1 }
14 { num: 2 }
15 { num: 3 }
16 { num: 4 }
17 { num: 5 }
18 { num: 6 }
19 { num: 7 }
11 { num: 8 }
10 { num: 9 }
9 { num: 10 }
8 { num: 11 }
7 { num: 12 }
6 { num: 13 }
0 { num: 14 }
5 { num: 15 }
1 { num: 16 }
4 { num: 17 }
3 { num: 18 }
2 { num: 19 }
[ 14, 16, 19, 18, 17, 15, 13, 12, 11, 10, 9, 8, 0, 1, 2, 3, 4, 5, 6, 7 ]

The top list is the log for each promise when executed. The bottom array is the Promise.all result. As we can see here, that Promise.all is executing all functions simultaneously, because the log is in unordered index. But the result is sorted according to executed promise. In the result, index 0, with value 14 is also in index 0 of Promise.all result. Index 1, same with result index, valued 16, and so on.

Now when executing app2.js (I’m using babel due to still using node 6), the result is:

0 { num: 0 }
1 { num: 1 }
2 { num: 2 }
3 { num: 3 }
4 { num: 4 }
5 { num: 5 }
6 { num: 6 }
7 { num: 7 }
8 { num: 8 }
9 { num: 9 }
10 { num: 10 }
11 { num: 11 }
12 { num: 12 }
13 { num: 13 }
14 { num: 14 }
15 { num: 15 }
16 { num: 16 }
17 { num: 17 }
18 { num: 18 }
19 { num: 19 }
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ]

As we can see here, async await is executed in synchronous process. The index is sorted neatly and the result is also as expected. And when executing the app2.js, it takes around 5 seconds, due to waiting for timeout delay. Meanwhile app.js is executed in up to 1 second.

Conclusion

Despite being very convenient, be aware that async await feature in node 8 or above (or babel) is being executed synchronously. Meanwhile the more complex Promise.all is execute the same process asynchronously. If you have a long-running process that need to be executed in parallel, Promise.all is the answer. However if you certain that the process is still very fast when executed synchronously, it’s okay to use async await since it’s more readable.

Again, you can get the complete test scripts in this  github repository.

Kuliah IT tidak berguna? Betulkah?

Pagi ini saya sempat membaca satu artikel yang cukup menarik, mengenai 4 alasan yang membuat kuliah IT tidak berguna. Sebelum saya membahasnya, perlu saya ingatkan bahwa gelar sarjana atau S1 komputer cukup menjadi faktor penting atau bahkan faktor utama diterimanya bekerja di Indonesia sebagai programmer.

Gelar S1 Komputer (Sarjana Komputer)

Kemungkinan terbesar seseorang berniat menjalani dan menyelesaikan perkuliahan adalah untuk mendapatkan gelar S1. Minimal, gelar s.komp berlaku di perusahaan-perusahaan besar yang bidang usaha utamanya bukan di IT. Misal perbankan dan finansial sejenisnya, exportir-importir besar, perusahaan perminyakan, perusahaan produksi seperti mi instant dan lainnya. Startup-startup baru sepertinya lebih longgar mengenai gelar s1 saat perekrutan programmer.

Sepertinya bagus untuk dilakukan survey, untuk mencari tahu seberapa relevan gelar S1 komputer sebagai programmer saat ini.

Algoritma, analisa dan soft skill

Ada hal-hal yang tidak bisa diperoleh hanya dengan mempelajari pemograman saja dari internet, di antaranya algoritma, analisa, soft skill dan pengetahuan mengenai sistem. Perlu pengalaman dan latihan sendiri untuk mengasah kemampuan-kemampuan itu. Mungkin tidak tampak saat coding, bahwa skill-skill tersebut cukup besar manfaatnya dalam pengembangan sistem.

Tahukah anda, bahwa ada beberapa faktor yang menjadi tolak ukur kualitas system? Ini adalah beberapa di antaranya. Tahukah anda apa itu SDLC (Software Development Life Cycle)? OOAD (Object Oriented Analysis and Design)? Algoritma bubble sort, linked list, recursive? Soft skill seperti cara presentasi, komunikasi, kerja group dan diskusi. Banyak skill tersebut yang mungkin tidak anda kenal bila hanya mempelajari pemograman saja, tetapi diajarkan di universitas.

Note: skill-skill di atas berdasarkan pada pengalaman saya saat kuliah S1 Sistem Informasi di Bina Nusantara (BINUS).

Unit Kegiatan Mahasiswa (UKM), koneksi dan networking

Perkuliahan tidak hanya belajar saja. Koneksi, relasi dan networking bisa dibangun selama perkuliahan. Bisa saja anda menemukan partner yang tepat untuk membangun startup selama masa kuliah. Atau bisa saja menemukan pasangan hidup :).  UKM-UKM di universitas sangat berguna dan memberi pengalaman yang baik seperti mengatur seminar / acara, berhubungan dengan orang-orang yang bisa saja berpengaruh (seperti CEO startup atau pembicara), dan sekali lagi networking. Memiliki banyak networking sangat bermanfaat di dunia profesional nantinya.

Secara pribadi, saya memang tidak mengikuti UKM saat kuliah dulu. Berkaca pada saat ini, saya sangat menyarankan para mahasiswa/i untuk mengikuti UKM yang berhubungan dengan profesi yang ingin digeluti nantinya, misal computer club, atau yang dapat mengembangan soft skill, seperti english club. Pengalaman dalam UKM juga dapat disertakan di CV (curriculum vitae) sebagai pendukung sertifikasi.

Dosen juga manusia

Gali ilmu dan pengalaman dosen

Dan yang perlu ditekankan, dosen (apalagi dosen senior) adalah orang yang sudah berpengalaman di bidangnya, dan sudah/sedang mengalami dunia profesionalisme.

Jangan menyamakan kuliah dengan sekolah, di mana anda datang ke kelas, mengikuti pelajaran yang diberikan lalu pulang. Buat relasi dengan dosen, gali pengalaman-pengalaman dosen dan cari tahu pandangannya mengenai dunia profesionalisme. Asah kemampuan di rumah dan diskusikan hambatan-hambatan yang anda temui saat bertemu dengan dosen, setelah selesai kelas misalnya.

Sesi bimbingan dengan dosen, misal saat skripsi, sangat berguna dan tidak boleh disia-siakan. Dapatkan ilmu sebanyak-banyaknya dari orang yang sudah berpengalaman.

Take a project

Masa-masa perkuliahan memiliki waktu luang yang sangat banyak. Jadwal kuliah seminggu mungkin hanya sekitar 40 jam. Libur semester genap saja bisa sampai 1 bulan. Waktu yang ada itu jangan disia-siakan. Anda bisa mengambil project berbayar, mengambil part time, atau melakukan hobby project untuk sekedar melatih ilmu. Pergunakan github atau public repository lainnya dalam hobby project, agar nantinya dapat disertakan di CV.

Bekerja paruh waktu dan kuliah malam juga biasanya menjadi pilihan untuk mengambil gelar di saat tetap produktif.

Sistem perkuliahan IT

Berhubungan dengan artikel awal, 4 alasan yang membuat kuliah IT tidak berguna, tidak dapat dipungkiri bahwa perkuliahan IT di Indonesia masih kurang maksimal. Point 3 yang berbunyi “BANYAK SARJANA KOMPUTER TIDAK MAMPU JADI PROGRAMMER, HANYA JADI INSTALLATOR” juga adalah fakta. Akhirnya mahasiswa perlu melakukan usaha lebih untuk menutup kekurangan-kekurangan dari tidak efektifnya sistem perkuliahan.

Di samping itu, faktor mahalnya biaya perkuliahan bisa dianggap menjadi hambatan, dan menurunkan pandangan orang terhadap nilai-nilai tambah yang bisa diperoleh dalam dunia perkuliahan.

Kesimpulan

Kuliah tidak berguna bila skill yang mau dikembangan hanya sebatas skill pemograman saja. Tetapi bila ingin berkarya di dunia profesional, satu skill pemograman saja biasanya tidak cukup. Perkuliahan dapat membantu, atau lebih tepatnya menyediakan jalan untuk melengkapi skill-skill tersebut.

Is Artificial Intelligence can become dangerous?

This article is purely my opinion about dangers present in Artificial Intelligence, based on arguments between two amazing person in computer fields, Mark Zuckerberg and Elon Musk about it. In short, Elon says that there is danger present in non-regularized A.I. development, while Mark says not (one example article).

I don’t want to discuss or guessing who is right or wrong, and considering that application and fields in Artifical Intelligence is very wide, we cannot decide anything based on several fields. Furthermore my understanding about A.I. is far more limited than theirs are, so saying that one is right and another isn’t, is nonsense. But let’s say that I agree with Elon that in some cases, AI can be devastating, and it is because our lack of control and security concern.

One of A.I. design is to mimic us

The above video is MarI/O, machine learning (a part of Artificial Intelligence) for classic game Super Mario World in SNES (oh, how nostalgic). It shows how it learns to beat a stage using experience gained from losing each time. It is seems like a very simple application of AI, though at current technology, it’s kind of amazing.

Now what if we can somehow develop the same system with purpose of bypassing captcha? Kind of similar with virus vs antivirus, it is a game of cat and mouse, captcha vs bot is a game of cat and mouse. Captcha must evolve to keep able to detect bots, and bots need to evolve to keep able to fool Captcha. It’s a constant battle.

Assuming that bot can be evolved using supercomputer and machine learning and it’s so advanced so it can mimic us, humans flawlessly, then Captcha is fighting a losing battle. At worst, captcha will even prevent human from access.

Now what will happen if that resource is focused towards development of hacking tools, powered by supercomputer? That hacking tools are being armed with skills from clever hackers and improved overtime from experience and trial and error. One of the existing application of programmed hacking, by brute-force attack, is the example. Fortunately, brute-force attack is being greatly mitigated with account locking and captcha.

Now that when the tools are ready, it then mounted on hundreds of supercomputers to exploit the vulnerabilities existing in internet. How much outrage will happen at that time? Many sites will be hacked at same time, many other will be down. Considering our credit card and banking information exists there, it is also at risk to be blown over. Combine with Ransomware like WannaCry, it’ll make matters worse. What’ll happen if GitHub fall over because of that?

Lack of Control

Soon, we will have autonomous driving car in the streets. They’ll become common. Now what will happen if for one time there occurs a system failure? Maybe due to short circuit, deteriorating hardware or even cosmic ray. Usually it’s being handled by changing the control to manual mode, but how if at the same time, due to how advanced the A.I. has become, that the A.I. decided to not give away control? Or more realistically, if the passenger / driver is too unaware or distracted to act on specific time. It’ll be bad.

In a current, simpler case will be when a gas pedal is stuck at automatic car. In manual car, pressing the clutch will definitely cancel the acceleration. Put the gear to natural for further safety, then no danger will present. However in automatic car, it needs the gear to change to neutral, still with a chance of error. It’s not much, but the more we lose control over something, the more dangerous it will be.

Even in today’s lifestyle, companies will try to use A.I. to sell you more goods. Sometimes you don’t realize, but for they who don’t notice it, they can be powerless in front of those companies, only to burn more bucks for them.

Smart encryption

So let’s say that terrorist already develop an evolving-tightly-encrypted, anti-spy messaging service via internet. They can use that platform to communicate each other, freely, without able to be tracked by government or officials. Worse if they actually can hack into officials (police or army) communication line, they can get the security hole to perform some action.

No robots?

AI robots situation like Terminator or I, Robot maybe possible in distant future, but not in near future. Limitation of energy supply and processing power is one of the big cause they cannot be realized soon. Furthermore the lacking of robot-shaped humans hinders them in place / specific area. As xkcd has explained, it’s very unlikely for it to happen.

Conclusion

The way A.I. can be dangerous is not in a physical form that is popular in movies, like robot apocalypse. It is more related to our daily life, our interaction with computers and security concern.

Newbie? Baca ini dulu

“Liburan sebentar lagi nih, iseng-iseng mau belajar programming ah”

“Mau coba cara bikin website e-commerce nih”

“Mau coba pemograman android nih”

Mulai dari mana ya?

Pemula-pemula yang baru mau mulai masuk ke dunia programming / IT biasanya dipenuhi pertanyaan-pertanyaan seperti “bagaimana caranya”, “mulai dari mana”, “cari di mana”, “ada contohnya nggak” dan lain-lainnya. Sementara, sebagian besar programmer berpengalaman, yang sehari-hari kerjaannya nge-google nyari-nyari info dan solusi, rata-rata nggak suka dengan pertanyaan seperti itu. Rata-rata programmer memang harus bisa mandiri dan bisa cari (baca: google) solusi sendiri. Tapi pemula yang nggak ngerti apa-apa juga akan bingung mau cari apa. Maka dari itu, sebelum mulai bertanya ada baiknya baca petunjuk-petunjuk ini dulu:

(more…)

Oh PHP empty…

Salah satu kelemahan terbesar PHP menurut saya adalah di null / value checking. Melihat bagaimana PHP adalah interpret language berarti validasi undefined value tidak dapat dilakukan di level compiler. Lalu bagaimana PHP adalah dynamic typing juga membuat null checking lebih sulit.

Null / Undefined

Ada 2 jenis variable kosong, yaitu null dan undefined. Variable null berarti variable tersebut pernah di-declare, dan di-initialize nilainya sebagai NULL. Undefined variable, adalah variable yang tidak pernah di-declare atau sudah di-declare namun tidak pernah di-initialize. Contoh:

$null = NULL; //null variable
$null2; //masih undefined
$null = $null + 1; //nilai $null jadi 1
$null = NULL;
echo $null["key"] === NULL ? "true" : "false"; //hasilnya true
$undefined = $undefined + 1; //error undefined variable

Lucunya di PHP, NULL dianggap sebagai sebuah value. Hal ini membuat operasi matematik / string yang berinteraksi dengan NULL tidak error, seperti contoh penambahan di atas. Untuk operasi matematik, NULL dianggap 0 dan untuk operasi string maka null dianggap string kosong. Bahkan untuk array, NULL hanya akan menghasilkan nilai NULL lagi dan tidak error.

empty / isset

Tadi kita sudah melihat bagaimana null dianggap sebagai value. Tetapi tidak pada pengecekan empty / isset. Anehnya lagi, kedua operasi tersebut tidak 100% berlainan dengan arti kata !empty == isset. Anggap kita menggunakan satu set variable sebagai berikut untuk mengecek validasi empty / isset:

$one = 1;
$two = 0;
$three = "";
$four = " ";
$five = "0";
$six = "false";
$seven = false;
$eight = [];
$null = NULL;
$null2;

Snippet untuk mengecek empty

echo 'empty($one) ';
echo empty($one) === true ? "true" : "false";
echo "\n";
echo 'empty($two) ';
echo empty($two) === true ? "true" : "false";
echo "\n";
echo 'empty($three) ';
echo empty($three) === true ? "true" : "false";
echo "\n";
echo 'empty($four) ';
echo empty($four) === true ? "true" : "false";
echo "\n";
echo 'empty($five) ';
echo empty($five) === true ? "true" : "false";
echo "\n";
echo 'empty($six) ';
echo empty($six) === true ? "true" : "false";
echo "\n";
echo 'empty($seven) ';
echo empty($seven) === true ? "true" : "false";
echo "\n";
echo 'empty($eight) ';
echo empty($eight) === true ? "true" : "false";
echo "\n";
echo 'empty($null) ';
echo empty($null) === true ? "true" : "false";
echo "\n";
echo 'empty($null2) ';
echo empty($null2) === true ? "true" : "false";
echo "\n";
echo 'empty($undefined) ';
echo empty($undefined) === true ? "true" : "false";
echo "\n";

Snippet untuk mengecek isset

echo 'isset($one) ';
echo isset($one) === true ? "true" : "false";
echo "\n";
echo 'isset($two) ';
echo isset($two) === true ? "true" : "false";
echo "\n";
echo 'isset($three) ';
echo isset($three) === true ? "true" : "false";
echo "\n";
echo 'isset($four) ';
echo isset($four) === true ? "true" : "false";
echo "\n";
echo 'isset($five) ';
echo isset($five) === true ? "true" : "false";
echo "\n";
echo 'isset($six) ';
echo isset($six) === true ? "true" : "false";
echo "\n";
echo 'isset($seven) ';
echo isset($seven) === true ? "true" : "false";
echo "\n";
echo 'isset($eight) ';
echo isset($eight) === true ? "true" : "false";
echo "\n";
echo 'isset($null) ';
echo isset($null) === true ? "true" : "false";
echo "\n";
echo 'isset($null2) ';
echo isset($null2) === true ? "true" : "false";
echo "\n";
echo 'isset($undefined) ';
echo isset($undefined) === true ? "true" : "false";
echo "\n";

Hasilnya

empty($one) false
empty($two) true
empty($three) true
empty($four) false
empty($five) true
empty($six) false
empty($seven) true
empty($eight) true
empty($null) true
empty($null2) true
empty($undefined) true

isset($one) true
isset($two) true
isset($three) true
isset($four) true
isset($five) true
isset($six) true
isset($seven) true
isset($eight) true
isset($null) false
isset($null2) false
isset($undefined) false

Untuk isset logikanya cukup mudah, semua variable yang sudah di set dengan nilai apapun terkecuali NULL menghasilkan true. Untuk empty cukup beragam, sebuah variable dianggap empty bila bernilai string kosong($three), string 0 ($five), boolean false ($seven), int 0 ($two) dan array kosong ($eight).

Encapsulate in function

Khusus untuk validasi undefined, saya belum menemukan cara lain kecuali dengan empty atau isset. Contoh dalam snippet kode berikut:

function isNullOrEmpty($str){
	return !(isset($str) && $str != '');
}
echo 'isNullOrEmpty($six) ';
echo isNullOrEmpty($six) ? "true" : "false";
echo "\n";
echo 'isNullOrEmpty($null) ';
echo isNullOrEmpty($null) ? "true" : "false";
echo "\n";
echo 'isNullOrEmpty($undefined) ';
echo isNullOrEmpty($undefined) ? "true" : "false";
echo "\n";

Hanya kode yang menggunakan variable $undefined saja yang menghasilkan PHP notice / error, lainnya tidak. Hal ini berarti kita tidak dapat meng-encapsulate function empty ke beberapa function validasi lain, seperti stringIsNullOrEmpty dan stringIsNullOrWhitespace.

Kesimpulan dan saran

Variable null dan undefined di-handle berbeda oleh PHP. Function empty dan isset juga menghasilkan validasi yang berbeda. Khusus untuk validasi variable undefined, saya belum menemukan function selain empty dan isset yang dapat meng-handle nya.

Sebagai programmer yang sudah lama menggunakan static type dan compiled language (C#), saya sudah terbiasa untuk melakukan variable declaration sehingga kemungkinan terjadinya undefined variable lebih kecil. Cukup baik untuk terbiasa melakukan variable declaration di awal function terlebih dulu untuk meminimalisir validasi empty / isset.

Pergunakan isset bila ingin me-validasi false dan empty value. Pergunakan empty bila sudah tahu kriteria-kriteria validasi yang dilakukan empty.