Aslında "normal programlama" dediğin şey ASM'dir diyebiliriz. Diğer tüm diller ondan türediği ve ona dayandığı için bir programcının teoride en rahat anlaması gereken dil Assembler'dır. Ancak tabii bir de alışkanlık meselesi var. Sen senelerce C/C++, VB, Pascal, Delphi v.s. kullandıysan Assembler zor ya da en azından farklı gelebilir. ASM'nin programcılara kolay geldiği nokta şu. Ben C64'ün 6502 ASM yapısını çok iyi bilirim. Bu sayede x86 ailesine ya da Z80 (Spectrum) ASM'ye geçiş yaptığımda benim dertlerim şöyle sıralanabilir.
1) Bu ASM'de hangi registerlar var ve kaç bit?
2) Nasıl bir registera değer atar, o değeri hafızaya yazar ve bunları point ettirerek kullanabilirim?
3) Genel opcodelar hangileri? (bit shifting, or, and, xor(eor), jmp v.s.)
4) Loop komutları nelerdir?
5) Hangi flagler var ve hangi opcodelar ile kontrol edilebiliyorlar? (carry flag, zero flag, negative flag v.s.)
6) Makinenin genel hafıza adreslemesi, bank/segment mantığı nasıldır?
7) Özel hafıza adresleri (ekran adresleri v.s.) ve ROM adresleri nelerdir?
7 maddede sıraladım ancak elbetteki bunları öğrenmek vakit alıyor. Yine de öğrendikten sonra ASM ASM'dir, bu platformlarda da istediğimizi yapabiliriz.
Gelelim diğer dillere. MAX Script öğrenmeye çalış örneğin. Basit bir scripting dili ancak tamamen kendi notasyonlarına sahip ve 3-4 farklı dilin (basic, pascal, c, php v.s.) çeşitli izlerini taşıyor. Bu dili de sıfırdan öğrenmek assembler kadar zor bence çünkü herşeyi o dile özgü öğrenmek gerekiyor. Ancak diyelim ki eşit derecede MAX Script ve ASM biliyoruz. Elbette ki MAX Script'de çok daha hızlı code yazabiliriz. ASM'de ise "ne yaptığımızın tam olarak farkında olarak" daha uzun bir süreçte aynı code'u yazarız.
En kötü dil yapısı bence bazı basic dilleri gibi interpreted dillerdir. Bu dillerin oluşturduğu ASM code, en sıradan ASM'cinin dahi hayatta yazmayacağı kadar unoptimize bir sonuç çıkarır ortaya. Debug etmesi ASM tarafında imkansızdır. Özel debugging toolları geliştirmek gerekir.