Programsírás
A mérnöki munka igazi sikerévei a múlt században voltak. A mérnökökre úgy néztek, mint a jövő építőire, a civilizáció nagy reménységeire. Akkor még úgy tekintették, hogy a mérnökök a világ problémáinak megoldói, mert mi, mérnökök konvertáljuk az álmokat valósággá.
Hogy megváltoztak azok az idők! Bár minden
kétséget kizáróan, a mi problémamegoldó készségünk végső soron az egyedüli
remény, hogy megoldjuk azt a gazdasági és ökológiai krízist, ami a következő
generációkat érinteni fogja, megértük, hogy már nem kapjuk meg a korábbi megbecsülést.
Igaz, hogy pár év egyetem még nem csinál
szükségszerűen szakértőt belőlünk, de ahogy a fejlődünk, az általunk megszerzett
bölcsesség és eredményesség növekedésével kiérdemelnénk a fokozódó társadalmi elismerést.
Csakhogy ez a trend felborult. Az ismeretek egyre magasabb hányada testesül meg
a gépekben, ami oda vezetett, hogy kevesebb képzett műszaki emberre van szükség.
Nő a termelékenység, közben az alkalmazottak egyre kevésbé értik, hogy mit is
végeznek pontosan. Mind több olyan terület létezik, ami túl gyorsan fejlődik, a
felsőoktatás pedig nem tudja tananyag szinten követni a változásokat. Megváltoztak
a tanuló igények is, sokan nem tudnak, vagy nem akarnak éveket igénylő oktatási
folyamatban részt venni, helyette instant karrier megoldásokat választanak. A
tanulás látszólagos értelmetlenségének és nehézségeinek vállalása és a
késztetés, hogy hirtelen keressünk egy csomó pénzt, a mérnöki fakultásra való jelentkezések
számát nagyon megnyirbálta. Megváltoztak a fizetések is. Mára egy jó szakmunkás
magasabb fizetést vihet haza, mint egy többdiplomás kutató. Szóval kijelenthetjük,
hogy a mérnöki diploma ma már nem rendelkezik olyan értékkel, mint jó pár
évtizeddel ezelőtt, a szakma társadalmi elismertsége csökkent.
Vegyük például a számítástechnikát. Az
informatikai munkák jelentős részében az egyetemi mérnöki diplomának alig van
hozzáadott értéke. Egy tanulmány szerint, az alig 6 hónapos tapasztalattal
rendelkező programozók ugyanúgy teljesítenek, mint a több évtizedes múltú mérnök
szakemberek. A programozók újabb generációját megvédték a programozás
valóságától a „magas szintű” objektum orientált nyelvek, meg a
"barátságos" operációs rendszerek. Sokan közülük nem is láttak még
ipari számítógépet, beágyazott rendszereket, vagy legalább egy "élő"
mikroprocesszort. Manapság szinte egyikük sem tud hexában számolni és nem ismerik
a gépi kódú programozás assembler nyelvét. Ez a programozási nyelvek között a
legalsó szinten található, ami nem az egyszerűségére utal, hanem éppen
ellenkezőleg, a fő nehézsége. Ennél a nyelvnél tisztában kell lenni a kontroller
legutolsó részletével is, az utasítás-végrehajtástól kezdve a regisztereken át
a perifériákig. Babra munka, de megvan az a nagy előnye, hogy így lehet megírni
a legrövidebb, leggyorsabban futó, leghatékonyabb programokat, segítségével nem
csak a hardvert, de saját képességeinket, kreativitásunkat is a legteljesebb
mértékben tudjuk kihasználni. Ehhez elmélyült tudásra van szükség, amit egy
átlag halandó hosszú éveken keresztül sem tud behozni felsőfokú iskolázás
nélkül.
Valaha olyan alkotások születtek
tisztán assemblerben néhány kilobájtból, hogy szinte katarzisélményt jelentett
csak megnézni is őket. Meg kell érteni a gépi kódolás filozófiáját. Ez tehetséget feltételez. Művészet. Érzék
kell hozzá nem tárgyi tudás. Ennek ellenére, nem az emberi gondolkodáshoz áll közelebb, hanem a
“gépi gondolkodáshoz”. A bonyolultság a részletekben van, viszont a lényeget
megértve a részleteket szorgalommal el lehet sajátítani tisztes mesterember
szinten. Akik ezen túllépve rendelkeznek művészi adottságokkal
is, bizony nagyon kevesen vannak. Pedig számos okunk van arra, hogy a gépi kód nyelvét, az assemblert
válasszuk a magas szintű programozási nyelvekkel szemben egy adott feladat megoldására.*
Az első gépi kódú programok
megjelenése után a számítástechnikusok első dolga az volt, hogy olyan
programokat készítsenek, amelyek megkönnyítik a további programok írását. Olyan
programozási nyelveket vezettek be, amelyekben az utasítások könnyen érthető
kulcsszavak, szerkezetük az ember számára jól áttekinthető és nem kell tudni
szinte semmit a hardver működéséről. Ezzel elérték, hogy a kreativitás és a
kimagasló intelligencia egyáltalán nem meghatározó abban, hogy valaki
programozóvá képezze magát. Csakhogy ennek ára van. A folyamat komplexitását el kellett rejteni valamilyen absztrakciós szoftverréteg mögé azoknak, akik nem akarnak, vagy nem
tudnak elmélyedni a gép közeli programozásban.
Azok a programozási feladatok, amelyek
magas szintű nyelvekkel könnyen megoldhatók, assembler nyelven sokkal több
utasítást igényelnek, ezáltal idő és munkaigényesebbek, nehezebben
áttekinthetőek és ráadásul csak egy adott típusú processzoron fognak futni. Tanácsos
tehát a nagyobb bonyolultságú és számítási igényű programokat magas szintű nyelven
írni? Igen, azokra a problémákra, amik megoldhatók ezen a szinten. A többiekre
nem!
Amit nem lehet Pythonban megírni, azt C++-ban
meg lehet. Amit nem lehet C++-ban megírni, azt Assemblerben meg lehet. Amit nem
lehet Assemblerben megírni, azt nem lehet megírni!
Előbb-utóbb mindent számítástechnika fog
működtetni, ehhez pedig jó programozók és jó fejlesztő technológiák kellenek. De
észre kell venni, hogy a társadalmunk inkább szoftverkódolókat termel, a
nemzetgazdaságunknak viszont fejlesztő mérnök informatikusokra lenne szüksége. Ehelyett
csak a humán erőforrások kihelyezését ösztönözzük, nem hozunk létre elég kutató-fejlesztői
munkahelyet, a multik sem kreálnak hozzáadott értéket nálunk, csak elszívják a
potenciális szakembereinket a magasabb fizetés reményével. Nyers-agyat exportálunk.
A piacról ugyanis ma már nem a zsenik, még csak nem is a mérnök informatikusok
hiányoznak. Lényegében kódolók kellenek, amiből hiány van és amiből meg lehet
élni, és akiknek ehhez gyakran még egyetemi diplomára sincs szükségük. De a
legtöbb kódolónak csak homályos elképzelése van, hogy egy-egy magas szintű
nyelven kiadott utasítás kb. mit okoz a gépben, amikor végrehajtódik. Mert ilyenkor
nem a gép szabályait követjük, hanem egy értelmező és egy fordító program
szabályait, amelyek aztán a gép számára is értelmezhető formára alakítják a
kódot, számunkra nem igazán átlátható módon.
Nem engedhetjük, hogy elveszítsük az
alapvető kapcsolatot a géppel. Aki tudja a gépi kódolást, az tudja az alapokat.
Ha tudja az alapokat akkor bármit megtehet, mert ura a rendszernek. Lehet, hogy egy gépi program bonyolult, de akkor is csak véges számú gépi utasítás. Ha lemondunk az assemblerről,
akkor önként adjuk át a hatalmat, egy kiváltságos kisebbségnek, akik a Gauss
görbe 1%-os abszcisszánál koptatják a statisztikát. Vagy akár a mesterséges
intelligenciának. Amelyik mindig az optimális megoldást választja. Például azt,
hogy a malária remekül megszüntethető az összes emlős kiirtásával.
______________________________________________
* Mire jó az assembler? Pontosan tudni akarjuk,
hogy mi történik program futása közben, mert mi akarjuk eldönteni, hogy mi
kerüljön a kódba és mi ne. Elengedetlen nagy biztonságú, meghekkelhetetlen rendszerek
tervezése. Méretre, memóriakihasználtságra akarjuk optimalizálni a kódot. Sebességre
akarjuk optimalizálni a kódot. Teljesítménykritikus algoritmusok implementálása,
ahol minden nanomásodperc számít. Szinkronizálásra akarjuk optimalizálni a
kódot, olyan komplex vezérlőjelek generálása esetén, amelyek fázisigényesek. Meghajtóprogramok
írása. Önmódosító kódok írása. Reverse engeneering. Új processzortípusra írandó
meghajtó programok írása. Beágyazott rendszerek önállóan futtatható
állományainak írása.
Vírusok kódjának visszafejtése. Vírusirtó algoritmusok kidolgozása. Vírusok írása. Magas szintű
programozási nyelvek fordítóprogramjainak írása. Kis memória méretű eszközök, mikrokontrollerek
programozása. Firmver hardver-közeli részeinek megírása. Vezérlőprogramok
komolyabb szintű hibajavítása. Operációs rendszerek kényesebb részeinek implementálása.
Még sorolhatnám.
Én általában papiron
VálaszTörlésKérdeztem de eltűnt
TörlésAz Assembler a kedvenc nyelvem, olyan verszatil !
VálaszTörlés