Bilgisayar Bilimleri Eğitimi ve Birleştirici Dil

0
cayfer
slashdot'da gördüğüm bir kitap kritiğinden esinlenerek Birleştirici Dil'in (Assembly dili) bilişimci eğitimindeki yerini tartışmaya açmak istiyorum
Yıllardır herhangi bir birleştirici dil bilmeden iyi bir yazılımcı olunamayacağını savunur dururum. Daha da radikal bir fikir olarak bu konudaki formal eğitimlerin bir birleştirici dil (Assembly dili) ile başlaması gerektiğini söyler dururum. Söz konusu eğitimin, endüstrideki CPU'ların biraz fazla karmaşık olasından dolayı gerçek bir CPU'nun birleştirici dili ile değil, bir simulatör-emülator eşliğinde çok basit bir CPU üzerinde öğretilmesini savunurum.

Slashdot da okuduğum bir tartışma bu inancımı gene gündeme getirdi.

"Bir aletin çalışma ilkelerini iyi bilmiyorsanız o aleti iyi kullanamazsınız" mantığına dayanıyor bu görüşüm.

Sizler ne dersiniz? Bir BT eğitim programına Java ya da C++ ile mi başlamalı yoksa 8080 veya M6800 benzeri basit bir CPU'nun birleştirici dili ile mi başlamalı? "Register, instruction, stack, Program counter nedir" diye bilmenin bir önemi var mı yoksa "sihir" gücüyle i++ deyince i'nin değerinin bir artacağını mı öğretmeli? Pointer aritmetiğini hayatın bir parçası olarak mı öğretmeli yoksa öğrencilerin buna gereksinim duymalarını mı sağlamalı?

Bir programın bellekte nasıl yayıldığını bilmek önemli mi?

Özellikle genç arkadaşların bu konudaki fikirleri benim için çok önemli. Ancak tartışmak istediğim "yazılım geliştirmeyi öğrenmek için assy bilmek gerekli mi?" sorusu değil; "yararlı mı?" sorusudur. Bir başka deyişle "assy bilmiyorum ama kütür kütür yazılım geliştiriyorum" türü yorumlarınız varsa hiç yazmayın derim.




Görüşler

0
Soulblighter
"Bir aletin çalışma ilkelerini iyi bilmiyorsanız o aleti iyi kullanamazsınız" mantığını savunanlardanım. Zaten bilgisayar kullanıcıları bilinçli olsalardı, kullandıkları işletim sisteminin basit şekilde bile olsa çalışma prensibini bilselerdi böyle virüslerle, trojanlarla uğraşılmazdı.

Ne yazık ki Windows işletim sistemi üstün pazarlama tekniği ile insanları cahil birer bilgisayar kullanıcısı yaptı. İnsanlar için bilgisayar kullanmak farenin tuşuna çift tıklamak oldu. Ama bir gün çift tıklayıp da programın çalışmadıklarını gördüklerinde hiç birşey yapamadılar. Çünkü gerçekte o sistemi kullanmayı bilmiyorlar.

Linux kullanıyorum, ve bu yüzden Linux'u seviyorum. Kullandıkça size bilgisayarı öğretiyor.

Sanırım konudan saptım biraz :)

Bir programcı bilgisayarın çalışma prensibini bilmelidir. i++ yaptığında aslında arka planda neler olduğunu bilmeli?

diyorum...
0
eternity
Bir bilgisayar muhendisligi ogrencisi olarak programlama egitimime asm ogrenerek baslamadim, hatta Java vb birkac ust seviye diye tabir edebilecegimiz dili ogrendikten sonra asm ogendim. Isin acikcasi sizin assembler basit bir mikroislemci mimarisi uzerinde gosterilse bile baslangicta ogretilmelidir tezinizi ben de dogru buluyorum. Neden derseniz mikroislemcilerin nasil calistigini ogrenmek en basitinden i++ yazdiginizda aslinda atomik bazda birden cok islemin yapildigini bilmek bir programcinin yaptigi isi cok daha iyi kavramasina neden oluyor. Ben eger asssembler dersi almasaydim herhalde operating systems dersindeki process synchronization konularini kavrayamazdim...

Diger bir yandan asm bilmek derleyicilerin calisma mantigini anlamak icin de isik tutuyor.
0
anonim
her yer de M$'in sertifkasyonlarindan en az birini alana programci gozu ile bakildigi bir donemde, ne derece assembly tartisilabilir ki? (vallaha dusunmuyor da degilim sirf m$ sertifikasi alip, inadina linux ortaminda program gelistirip; yardimci oldugum m$ musterilerinden aldigim para ile linux cekirdek gelistiricilerine aynen bagis yapmayi. yanlis anlasilmasin tam tamina 2.5 senedir, m$'in arial fontundan baska hicbir seyine elimi surmedim, makinemde bile debian woody'im 2.5 senenin ardindan hala gicir gicir parlar.)

almakta oldugum mat104e dersinin (The C Programming Language) basinda asistan bize ne dese begenirsiniz: "cocuklar burada dersi iyi dinleyin, bu c biraz zor olup ileri de ISINIZA PEK YARAMAYACAKTIR. o yuzden burada elinizden geldigi kadar idare edin, sonra kendiniz visual basic, visual c++ ile guzel guzel programlar yazarsiniz."
insanlara c++'in c'den daha ustun, onun ileri seviyesi oldugu sacmaligi herkese cicek asisi gibi empoze edilirken biz boyle bir statude nasil asm'den bahsedebiliriz ki?

kendi cabalarim ile ogrenmeye calistigim php dilinin ardindan c ogrenmeye calistim ki ancak boyle basardim c'yi cat pat ogrenmeyi. ama gelin gorun ki aldigim her yeni cekirdek mesajinda sahip oldugum platform hakkinda ne kadar az bilgim oldugunun farkina vardim. en azindan c'de bellek kullanimi hakkinda bayagi bir bilgiye sahip oldum ve ufkum inanilmaz derecede genisledi. bir de ayni durumun assembly ogrendigimde etkisinin ne olacagini kestiremiyorum bile.

hocam kisaca iyi guzel diyorsunuz ama, universitelerde bile insanlar artik dogruyu ogretmek adina parayi sectikleri bir memlekette nasil kendi dogrumuza kavusabiliriz ki?
0
FZ
Valla o asistanı buraya yolla, arkadaşlarla beraber dövelim kendisini.

Bildiğim kadarı ile İTÜ Matematik Müh. bölümünde doğru dürüst ASSEMBLER bilen tek bir hoca vardı o da Prof. Dr. Gazanfer Ünal. ITU Kontrol ve Bilg. Müh.den mezun daha sonra teorik mekanik araştırmalarına gönül vermiş sağlam bir adam. Gerçi onu son gördüğümde adamın ders verdiği yüksek lisans programını iptal etmişti rektör. Düşünsenize bir programa kaydoluyorsunuz, ITÜ´nün en popüler programlarından biri ve hoop kapatıyorlar programı, dağıtıyorlar ortamı falan. O adamı da küstürdüler ya artık başka da bir şey demiyorum, fakültede en ciddi ve seviyeli, derin bilgisayar derslerini veren hoca idi.

Daha aklı başında asistanlar ve hocalar ile karşılaşman ümidi ile.
0
cayfer
gene karanlığa söven bir yazı....

Neden herkes "memlekete" sövmeye bu kadar meraklı anlayamıyorum. Kaç tane başka memleketten bilişim eğitimi programı incelediniz? Kaç tanesinde eğitime assy ile başlanıyor?

Üniversitelerde C de öğretiliyor, Assy'de. İstatistik de, tarih de. Dolayısıyla parayı seçmek diye birşey söz konusu değil. Benim tartışmak istediğim assy ile "başlamanın" doğru/yararlı olup olmayacağı.

İnsanlar üniversitelere para kazanıp hayatlarını daha iyi koşullarla sürdürme istekleri için gidiyorlar. Yoksa doğruları öğrenmek için değil! Dolayısıyla onları olabildiğince kısa sürede sahaya oyuna çıkarmak zorundayız. Belki de assy ile hiç vakit kaybetmeyip o sürede PHP öğretmeli...

Bilişim eğitimi 2 veya dört yıl. Bu süreler insanlara meslek kazandırmak için yeterli süreler değil; hele bilişimde...

Bu kısa sürede ancak ilk ivmeyi verebiliyorsunuz, öğrencinin kendisini geliştirebilmesi için önündeki engeleri kaldırıyorsunuz.

Kendi doğrumuzu bulmak; daha doğrusu elimizde olduğuna inandığım "doğru"yu daha iyi kılmak için bu tip tartışma platformlarını kullanıyoruz işte. Gayet de güzel oluyor. Keşe birileri de çıkıp "Assy'ye hiç gerek yok, onun yerine XML öğretelim" dese. Doyasıya bir kavga ederdik :)

Sevgiler


0
bahadirkandemir
Kocaeli Üniversitesi'nin GNU/Linux kullanıcı grubu olarak (büyük ihtimalle) Linux şenliklerinde bulunacağız.

Ben ve arkadaşlarım, okulda Assy yerine XML öğretilmesini istiyoruz, şenliklerde olursanız sizinle bir görüşelim :P
0
cayfer
:)
aslında XML de fena değil yani... şöyle bir daha düşündüm de...
0
skoylu
Hocam, PHP ile başlamak, belki aslında o öğrencinin önüne gerçek bir engel çekmek olabilir.

Temel olarak ASP-VB/PHP gibi diller, programlama öğretmez. Programlamayı bilen insanlara kısa yoldan güçlü işler yaptıran, bilmeyenleri de susuz bırakmayacak kadar olsun bir şeyler yaptıran dillerdir bu ve benzerleri.

Eğer bir programcı, XPX diye bir dil vs. icat edildiğinde, eğer bunu oturup 2-3 gün içinde çözemiyorsa bu alemde aç kalmaya mahkumdur.

Kınamak vs. için söylemiyorum. 4 Yıl okuyup ITU'yü bitirmiş iki mühendis arkadaşla beraberiz. Doğrusu programlama kavramının P'sinde bile değiller henüz.

Assembler ve assembly bence başlangıç için yanlış tercihtir. Çünkü bunu kavramak için bilgisayar denen aletin nasıl çalıştığı hakkında iyi fikir sahibi olmak gerekir. Elbette basitleştirilmiş bir CPU örneğinde her şey daha makul olacaktır. Fakat, bu aslında bilgisayar mefhumunu açıklamak için daha kullanışlı olacaktır.

Assembly denince zaten akla nedense op-code yığını vs. geliyor. Oysa CPU mimarisinde Assembler Level, Operating System Level'in bile üstünde kalır (TANENBAUM, Structured Computer Arch.). Öncelikle alt katları öğrenmek icap eder.

Bence kapıdan yeni gelen elemana hurra diyerek assembler ile refüze etmektense, işe bilgisayar nedirden başlayıp, devamında C ile algoritma kullanımı, Assembler ile de sistemi çalıştırma dersleri paralel verilmelidir.

Bu sayede, 2 yıl sonunda elle tutulur bir programcı yetişebilir sanıyorum. Devamında algoritma üretme, optimizasyon, uykusuzlukla mücadele, kahve ve çay seçimi gibi elzem konular öğretilebilir. Sonuçta, 3. Sınıfı bitiren birisi kernel yazmaya soyunabilecek donanıma sahip oluverir. Ama bu onun PHP ile WAP sayfası yapmasını önünde engel değildir ve daha güzeli her marka/model cep telefonunda sorunsuz çalışabilecek kodu da en kısa yoldan üretebilecek adam olmasını sağlar. Dahası, birisi çıkıp bakın ben ZML icat ettim ne güzel protokol veya programlama dili dediği zaman, alır ve onu hemencecik kullanmaya başlar.

Eh, bizim yeni mühendislere dedik. Bir inceleyin bakalım, WebDAV'ı döküman yönetimi için nasıl kullanabiliriz.. 2 Saat sonra dediler ki öğrendki WebDAV'ın ne olduğunu, http tabanlı dosya iletimi yapmaya yarıyormuş..

Doğrusu, 4 Yıl okumuş olan insanın diplomayı aldığı gün elle tutulur işler çıkarabilmesi beklenir. Ama bizim arkadaşlar maalesef bunu yapamıyor. Sonuçta bankalarda WEB sayfası yapan yüksek lisans mezunu mühendislerimiz oluyor ortalıkta. Bence bu israf. Çünkü inanıyorum ki, bu elemanlar bilgisayara takla attıracak beyne sahipler, ama bilgilendirilme ve yetiştirilme durumları onları böylesine hallere düşürüyor..
0
cayfer
Tartışmak istiyordum ama söylediklerinize verecek yanıt bulamadım. :)

Bence kapıdan yeni gelen elemana hurra diyerek assembler ile refüze etmektense, işe bilgisayar nedirden başlayıp, devamında C ile algoritma kullanımı, Assembler ile de sistemi çalıştırma dersleri paralel verilmelidir.


öneriniz çok makul. Bunu uygulamak için "bilgisayar mimarisi" derslerini biraz öne almak gerekecek ama olmaması için hiçbir neden yok.

Sevgiler

0
FZ
Assy bilmiyorum ama çatır çatır P-IV üzerinde çalışan SQL, ASP, JScript, VB programı yazıyorum, süper programcıyım, siz zavallı dinozorlara acıyorum, hahahahahaha!

Tamam tamam sakin olun geçti, basit bir kişilik bölünmesi idi, arkadaşın beyninde gerçekleştirdiğimiz küçük bir lezyonla konuyu hallettik. Hipokampus ve prefrontal korteksin bir bölümünü almak zorunda kaldık ama artık daha iyi. Derin bir nefes alıp yazıyı okumaya devam edebilirsiniz :)

Pek genç sayılmam, en son ne zaman assembler ile uğraştım onu da hatırlamıyorum.

Kendi adıma şu kadarını söyleyebilirim: Mikroişlemcilerin assembler ile programlanmalarının öğrencilere öğretilmesinin faydalı olduğuna inanlardanım. Her şeyden önce bilgisayar denilen şeyin mimarisini daha iyi anlamalarına yardımcı olur. Bunun dışında bu öğrenciler ilerde profesyonel programcı olup, Java, C++, Delphi, Perl, Python, SQL, vs. ile program yazarken ve dokümantasyon okurken yaptıkları işin hangi durumda ne kadar maliyetli olduğunu daha iyi bilebilirler. Bir veriyapısı ya da algoritma seçerken bunun ellerindeki bilgisayarı nasıl kullanacağı konusunda bilinçli olurlar.
0
skoylu
-> Assy bilmiyorum ama çatır çatır P-IV üzerinde çalışan SQL, ASP, JScript, VB programı yazıyorum, süper programcıyım, siz zavallı dinozorlara acıyorum, hahahahahaha!

Assy bilmiyorsan, Bir ilkbahar sabahı hiç güneşle uyanmamış vede geçen günlere yazık, hemde pek yazık etmişsin derim hocam..

Tez zamanda kalan günlerinde -hiç yoktan- nirvanaya ulaşabilmen için sana bir formül icat edelim derim FM tayfası olarak.. Dur bir düşüneyim.. Makul bir başlık bulursam, foruma bir entry açarım netekim.. :)

0
mascix
dediğiniz konu low-level programlamaya girer ve yüksek sevyeli c++/Java diller ile karıştırılmaması kanaatindeyim.

asm bilmek veya CPU nun mantığını kavramak yüksek seviyeli dillerle çalışan geliştiriciye uygulama bazında bir değer katmaz. sadece geliştirilen özel moduller ile hız getirebilir bu işlem ise çok yüksek hızlara ihtiyacı olabilen numerik yöntemler veya grafik işlemlerin olduğu büyük uygulamalarda kullanılabilir. örnek Gimp, octave vs.

burdan asm bilmek hiç gereksizdir çıkmamalı. sonuçta özel işlemlerde kullanılabilir. fakat bu tip bir uygulamanın geliştirilmesi işide 1 kişinin işi değildir bir takım işidir. ve bu takımda uygulamanın türü gereği bir veya iki tane asm bilen eleman alınabilir ve gereken modifikasyonlar o kişilere yazdırılır. ve design işi yine c++ veya java cılara brakılabilir.

bence yazılım geliştirmek için asm bilmek gerekli değildir. önemli olan güzel dizayn edilmiş uygulamayı üretebilmekdir. performans için bilen bir arkadaşdan yardım almak en uygunudur.
0
cayfer
Ama ben assy gereklidir demedim. Assy kullanılsın da demedim. Artık mikroişlemciler bile C derleyicileri ve geliştirme ortamları (IDE) ile birlikte geliyor. Assy bilmenin, yani bir işlemcinin içinde neler olup bittiğini bilmenin yararlı olup olmayacağını tartışmak istiyorum.

Araba kullanmayı öğretirken insanlara devir saatine bakmalarını, 4000 devir olunca vites büyütmelerini, 2000 devir olunca küçültmelerini söylerseniz o insan araba kullanır. Ama vitesin ne işe yaradığını kavratabilirseniz o insan arabayı daha etkin (örneğin yakıt tasarrufu, güç iletim mekanizmalarının ömrü, şanzman ömrü, balata ömrü gibi faktörler) ve daha konforlu bir seyahat sağlayacak şekilde kullanır .. diye düşünüyorum.

Bu insan zaten otomatik araba kullanacak diye ona vitesten bahsetmeye gerek olmadığını düşünebilirsiniz. Ya da "madem otomobil kullanmaya girişti, o zaman vitesi de bilmeli" diye düşünebilirsiniz.

Bilgisayar eğitimi dünyasından örnek vermek gerekirse; öğrenciler "derleyici" ne demek bilmiyorlar. Tanımını biliyorlar ama derlenmiş bir programın neye benzediğini bilmiyorlar. "Linking" ne demek hiç bilmiyorlar. Çünkü hiçbir derleyici artık "link" adımını açık açık yapmıyor. DLL'i koyarsın kullanırsın diye belliyorlar.

Interrupt mekanizmasından hiç birinin haberi yok. GetMouseCursorPosition() zart zurt diyorsun oluyor. Hiçbir öğrenci de bunun nasıl olabildiğini merak etmiyor. İşletim sistemine sorunca söylediğini düşünüyorlar.

Kaç öğrenci DMA'nin ne demek olduğunu biliyor? Kaç öğrenci ekranda A harfinin nasıl olup da belirdiğini biliyor ya da merak ediyor.

Assy işine bulaşmamış öğrencilerimiz hala PC klavyesinde "A" tuşuna basınca klavyenin "A" gönderiğini sanıyor. (ikinci "A" yerine "x41" yazmıştım ama sonra farkettim ki kimse artık hex notasyon kullanmıyor)

"Port" diyince herkes Kazaa portu anlıyor.

Sonuç olarak bilgisayarların içinde neler olup bittiği bilgisi yok oldu. Zaten bilgisayar denince windows altında çalışan PC dışında bir aygıt da kimsenin aklına gelmiyor artık.

Beni rahatsız eden konu, bilişim dallarından mezun olan insanların bir bilgisayarın nasıl çalıştığını bilmemeleri. Ama makine mühendisleri benzin motorunun nasıl çalıştığını biliyorlar.

Ben mi çok ihtiyarladım acaba...
0
bahadirkandemir
Beni rahatsız eden konu, bilişim dallarından mezun olan insanların bir bilgisayarın nasıl çalıştığını bilmemeleri. Ama makine mühendisleri benzin motorunun nasıl çalıştığını biliyorlar.


Bir firma bilgisayar mühendisi istiyor, ASP & MSSQL, Delphi, .NET bilmesi yeterli diyor, böyle olunca da öğrenci başka şeyler öğrenmesi gerektiğini düşünmüyor. Böylece piyasa Windows`tan başka işletim sistemi bilmeyen, bilgisayarın nasıl çalıştığını anlamayan bilgisayar mühendisleri ile doluyor.
0
skoylu
Bu mevzudaki asıl sorun, 'MÜHENDİS' aranmıyor olması. Her ne kadar o ilanı veren geri zekalı adam tersini düşünüyor olsada..

Teknisyen, tekniker, mühendis farklı şeylerdir. O noktada ASP, Delphi, .NET işleri, sadece basit sıradan uygulama seviyesi konular olarak istenirken, bir mühendis gücüne ihtiyaç duymaz. Bu patlayan ampülü takması için Enerji iletim hatları konusunda master yapmış birini aramak kadar saçmadır. Ama yapılır.

Asıl konu şu ki, mühendisleri bu ülkede teknisyenlerden daha ucuza çalıştırıyorsunuz. Ülkemiz için Atom mühendisi veya ne bileyim mesela roket mühendisi gibi kavramlar neyse, bilgisayar mühendisi de o kadar bir kavram. Kısacası o mühendis denen adamın maalesef mühendisliğini icra edebileceği bir iş bulabilmesi çok ama çok zor..

Hal böyle olunca da kısır döngü devam edip gidiyor. Şöyleki o mühendisler mühendislik yapmadıkça yetişen yenileri için iş alanı da ortaya çıkamıyor.. Öyle olunca da doğru düzgün mühendis yetişmiyor.

Ben her zaman derim, salak adamımdır diye, akıllı olsaydı, mesela ne bileyim çöpcü, araba tamircisi filan olurdum. En azından okul biterdi. Her akşam hala deli gibi ödev yapıyor, vizelere hazırlanıyor olmazdım. İşte bilgisayarcının Elektronikçinin filan akıbeti..



0
lifesdkver0_1
Bilgisayar mühendisliğinden mezun olan birinin, örneklediklerinizi bilmemesine imkan yok, çünkü Türkiye'deki yetkin üniversitelerin(ODTÜ,İTÜ,Bilkent vs) ders programlarında bilgisayar mimarisi, işletim sistemleri gibi aşağılarda neler olduğunu anlatan bir sürü ders var. Bunları bilmeyene de zaten mühendis denmesi pek kolay gözükmüyor. O yüzden mühendislik öğrencilerini dışarıda tutalım lütfen :)
0
caglar_onur
Türkiyedeki yetkin üniversitelerde okuyan 2 türlü öğrenci var.

1. Ezberleyenler...

Bunlar için dersin konusu,içeriği v.s hiç farketmez. Compiler kaynak kodu derleyen program onlar için. Compiler nasıl compile ediyor, niye ediyor, ediyorda napıyor. ben bunu nasıl çalıştırıyorum, memory'i nasıl daha uygun etkili kullanırım v.s filan önemli değil.

2. Merak edenler...

Zaten neyin niçin olduğunu biliyorlar yada öğrenmeye çalışıyorlar saygımız sonsuz....

Şimdi hal böyle olunca sen bu adamlara asm.de anlatsan mikroşlemcinin içini açıp bakın şurdakiler transistor buda slikon v.s de desen önemli değil onun için. O ya ezberliyor yada haa bu buymuş diyor, bitti.

Yani sonuçta iki tip insan var benim için merak eden ve kabul eden...

Kabul edenler yanlış anlamasın onlar işlerini yapmıyor, bilmiyor falan demiyorum asla. Onlar kabul etmişler vb iyi delphi güzel yeter abi demişler. M$ kolay kullanılıyor bundan iyisi can sağlığı demişler zaten. Bu adamlara sen eğitimleri sırasında asm. de anlatsan her dönem zorunlu Linux derside versen önemli değilki onlar bildiklerini okumaya devam edecekler.

Gelelim makina mühendisi benzin pompasını biliyor ama bil. müh compiler'ı bilmiyor mevzuna. Şu kadar basit;

Sıfatın mühendis ise o mühendisi lafından önce zikrettiğin kelimenin ( inşat olabilir, makina, kimya , bilgisayar ) ne anlama geldiğini bileceksin. Nasıl çalıştığını ,nasıl işlediğini, ne yaptığını , nasıl yaptığını v.s herşeyini bileceksin, bileceksinki adın , sıfatın mühendis olacak.

İnsan anatomisi bilmeyen doktor olurmu ya, şaka gibi....
0
cayfer
O yüzden mühendislik öğrencilerini dışarıda tutalım lütfen :)

Yok! tutmayalım. Öğrencileri bırakın, "bilgisayar mühendisi" diploması almış olanları bile sınav yapmadan bu genellemenin dışarıda tutmayalım.

Evet, belki sözünü ettiğiniz dersler var ama ona bakarsanız ben de kimya dersleri almıştım. :) ve de geçmiştim.... Kimya benim için büyüden farksızdır. Ne oluyor, neden oluyor; hiç bir fikrim yok. Hiç olmadı da...
Aynı genellemeyi bilgisayar mühendisliği dersleri almış, hatta yüksek notlarla geçmiş birisi için de kolaylıkla yapabilirim.


0
skoylu
>> asm bilmek veya CPU nun mantığını kavramak yüksek seviyeli dillerle çalışan geliştiriciye uygulama bazında bir değer katmaz.

Belki ilk bakışta öyle görünebilir. Asıl konu, programcının ne yaptığının bilincinde olmasıdır. Assembly ve C temelde bu disiplini en iyi kavrayabileceğiniz yegane ortamlardır.

Pek çok yerde Assembly ve C kullanmış adamların yazdıkları kodlarla, bunları kullanmamış adamların yazdıklarını karşılaştırma imkanı buldum. Sonuçta ilk bakışta bile aralarında bariz farklar görebiliyorsunuz. Dahası eğer konu hesap makinası yapmaktan ötede bir takım programlar yazmaksa, işte o anda C ve Assembler kullanmış elemanın farkı birden öne çıkıveriyor.

Kısacası C ve assembler bilmek size php yazarken çok daha rahat etmenizi sağlayacak gücü verir. Belki hayatınız boyunca 10 satırdan daha fazla assembler kodunu bir arada yazmanız gerekmeyebilir. Fakat assembler, en azından C mutlaka öğrenilmesi gereken bir şeydir. Buradan kullanılması gereken bir şey olduğu sonucunu çıkarmamak gerekir.

Dahası, bugün pek çoğunun Delphi vs. kullanarak yaptığı uygulamalar, verimlilik, hız, sağlamlık vs. noktasından bakınca, Excel/OOo calc veya mesela Access ile çok daha iyi yapılabilecek şeyler.

Anlayamadığım, insanların neden öğrenmekten kaçıyor olduğu. Kullanmaktan kaçmayı anlarım. Kaldı ki, çoğu yerde bende C vede bilhassa Assembler kullanmaktan kaçarım. Ama öğrenmekten niye kaçılır ki ? Bu kafayla, ingilizcede öğrenmeyin hiç bir şeyde.. Okula harcayacağınız paraları (TCO) biriktirip kendinize bir bakkal (veya belki ayakkabıcı) dükkanı açsanız büyük ihtimalle gene geçinebilirsiniz.

Kısacası, bunları öğrenerek gücü elde edersiniz. Kaldı ki bu pek çok master vs. diplomasından çok daha etkili bir şeydir gerçekte..
0
FZ
Assembler mı, teorik bilgisayar bilimleri mi, geçiniz bir kalemde ya, bakın Donald E. Knut bile gerçeği görmüş, olay Vizyüel Beyzik´tir arkadaşlar! Sürükle bırak, iki satır kod yaz malı götür, oh miss! Milyonlarca Vizyüel Beyzik geliştiricisinden daha mı iyi bileceksiniz, bakın işte kanıtı burada:

http://www.ibiblio.org/Dave/Dr-Fun/df200002/df20000210.jpg
0
malkocoglu
Muhtemel bir assembler dersi, eger uzun uzundayi islenmesi istenmiyorsa, ana hatlar ile cok rahat ogretilebilir. 3-4 ders saatine yayilmis bir zamanda ilk once soyut bir mikroislemci komut seti secilebilir, bunun uzerinde

- adresler arasi veri aktarma, nedir, cesitleri (mov)
- bellek bolgesine erisme (indeksli mov)
- assm. programlarinin kendini degistirebilecegi (ilginc bilgi)
- programin kendisinin bellekte veriden ibaret oldugu, FF mov demektir, EF ADD demektir, vs..vs.. (ilginc bilgi)

.. vs. Muhim olan, derslerin bol bol genel kulturel yan bilgiler ile suslenmesidir. Soyut bolumden sonra, herhangi bir mikroislemci secilir ve bunun uzerinde gayet basit bir program yazilir, ve assemby biter.

Yanliz eklemek gerekir ki, assembler bilmenin etkili bir programci olunmasi icin cok buyuk faydalari olacagini zannetmiyorum. Ne tur programci icin lazimdir, ne tur programci icin lazim degildir? Bunun da sorulmasi lazim. Bilgisayar muhendisleri (Turkiye'deki terim yanlis kullaniliyor, bilgisayar muhendisi "donanimcidir", yazilimci degil) icin assembler $arttir. Bilgisayar bilimciler icin de olsa iyi olur zannediyorum, Turing makinalari ile benzerlik/farklari gormek icin yararli olacaktir;

Bilgi islemciler icin assembler'in gerekecegini hic zannetmiyorum. Bilgi islemcileri bu seviyede bilgiler ile bogacagimiza, genelde verilmeyen proje idare teknikleri, liderlik, teknik yazim, sunum gibi ek dersleri versek bence daha iyi olur. Ag yonetimi de onemli tabii.









0
FZ
Valla Assembler´ı derste öğretmek kolay da, proje yönetimini ders vererek öğretmek mümkün mü bilmiyorum. Gençlere mesela şöyle bir ders vermek lazım: Para ve iktidar sahibi ve fakat bilgisayarın b´sinden Internet´in i´sinden anlamayan yöneticilerle/patronlarla çalışırken onları dövmek zorunda kalmadan nasıl bilgece iletişim kurarsınız. Bu derse paralel olarak Zen Budizm ve Taoculuk dersleri de verilmelidir ki gençler binbir entrikanın, ayak kaydırmanın, artistliğin ve büyük paraların döndüğü iş dünyasında iç huzurlarını ve manevi bütünlüklerini koruyarak yollarına devam edip program yazabilsinler ;-) Seçmeli ders olarak Machievelli de okutulmalıdır diye düşünüyorum.
0
malkocoglu
:)
0
junkie
Bence konu daha geni$ bir perspektifte ele alInmaLIdIr.

Gunumuzde programLar daha kompLike ve daha fazLa detay icermekteLer. KuLLanIcI arabirimi kodLarI artIk uyguLama kodLarInIn yarIsIndan fazLasInI te$kiL etmekte. Bu noktada programcILarIn beceriLerinin yanInda programcILarIn `MENZILI` de onemLI bir konu. Yani her projenin en buyuk kIsItLarIndan biri oLan `ZAMAN` artIk cok daha buyuk bir probLem.

Bu noktada programcInIn XOR AX.AX komutunun MOV AX,Oh komutundan daha verimLi oLdugunu `dogrudan` kuLLanmasI, gunumuz i$ dunyasInda pek mumkun degiL bence.

FAKAT, programcI aynI zamanda i$i iLe iLgiLi bir dunya goru$une de sahip oLmaLI. yazdIgI printf() yada echo (hadi bahsedeLim ) response.write arkada neLer yapar, neLer eder biLmeLIdir. Bunu sezebiLmeLIdir, ki efektif i$Ler cIkarabiLsin.

Karma$Ik sistemLerde minik bir hata, devasa `kusurLar` a sebebiyet verebiLir. ProgramcInIn dunya goru$u bu sistemLeri daha iyi anLamasI yada anLamamasI arasIndaki ince cizgIyi beLirLeyecektir. BirLe$tirici diLi biLmesi bir programcInIn sezgiLerini, onun idrak yetenegini geLi$tirecek `GEREKLIDIR` dedigimiz nispeten karmasIk sistemLerde menziLini arttIracaktIr.

Ornegin `numerik kar$ILa$tIrma, alfanumerik kar$ILa$tIrmadan daha hIzLI ve verimLidir` dusturu iLe veri tabanI tasarImI yapan bir programcI, yapmayanIndan benim nazarInda `DAHA EFEKTIFTIR`

Bu yuzden, bence birLe$tirici diL ya da en azIndan feLsefesi ve i$Leyi$ini - her i$Lemciyi ve tum komut setLerini biLmek de bence gerekmemekte- programcILarIn biLmesi gerekLidir. Ve programLama egitiminin bence en onemLi parcaLarIndan biridir.
0
FZ
Aaaa, adam Response.Write dedi iyi mi :)

Assembler nire, Response.Write nire ama madem konu açıldı aklıma gelen örneklerden birini vereyim:

Web ortamında ``Merhaba Dünya´´ karakter dizisini 1000 kere bastırmak istiyorsunuz. İki seçenek var, bin kere Response.Write çağırmak ya da bir değişkene bu diziyi atayıp sonra da bir döngü içinde değişkenin dibine 999 kere kendi kendisini eklemek ve sonra tek bir Response.Write fonksiyon çağrısı ile bu koca diziyi tek bir seferde ekrana dökmek.

Acaba hangisi daha hızlıdır?

Cevabı ilk görenlerin çoğu şaşırıyor. Tabii sonra açıklamalar yapılıyor falan, hangi yöntem hafızada nasıl iş güç yapar, assembly seviyesine iniliyor ve olay aydınlığa kavuşuyor falan.

Bu bağlamda benzer şey, junkie´nin dediği gibi veritabanı ortamı için de söylenebilir.

Aklıma İstanbul Bilgi Üniversitesi´nden tanıdığım yetenekli Java programcılarından biri geldi. Java ortamı için Borland araçları ile gayet hızlı kod yazan ve tasarım yapan bu adamın daha öncesinde Assembler ile pek çok uygulama geliştirdiğini ve C ile de uğraştığını biliyorum. Hal böyle olucan adamın efektif çalışması da normal görünüyor bana. Aynı adam ASP programlaması gerektiğinde de ilk olarak COM, COM+ neymiş, MTS kullanarak nasıl performans artışı sağlarız diye yaklaşıyor konuya, C++ ile komponent geliştirip bunu ASP ortamından çağırma mevzularına giriyor (ve bence gayet de iyi yapıyor :) (Meraklısına not: Bu dostumuz bilgisayar mühendisliğinden mezun değil, İktisat mezunu ;-)
0
FZ
HLA (High Level Assembly Language) ile ilgili güzel bir yazı:

http://www.unixreview.com/documents/s=8989/ur0402i/

ve Assembler ile ilgili güzel bir e-kitap:

http://webster.cs.ucr.edu/AoA.html
0
Nightwalker
IN AL, 60
CMP AL, 44
JNZ 100
INT 20

ilk defa "hello world" yazmadan bir programlama dili öğrenmeye başladım. Buradaki bu ufak çaplı tartışmaya kendi çapımda katkıda bulunmak için hiç assembly kodlamamış bakir bir bilişimci olarak www.mutasyon.net deki assembly derslerine biraz göz attıktan sonra ilk programımı yazdım. Sonuç : İNAILMAZ BİR ZEVK. Bilgisayarın hafıza hücrelerine direk olarak erişip kod yazmak ve bunu çalıştırmak, 12 yaşımda ms-dos kitabından autoexec.bat ve config.sys ayarlarını öğrenip prince of persia oyunumu çalıştırmamdan beri bilgisayarda yaptığım en zevkli şey oldu. Bu güne kadar ilgilenmediğime pişmanım. Ucundan kıyısındanda olsa IT ci olduğunu idda eden herkes mutlaka öğrenmeli.
0
FZ
Perl´i yaratan Larry Wall der ki: ``İyi bir programcı her dilde `assembly´ yazabilir.´´
Görüş belirtmek için giriş yapın...

İlgili Yazılar

C-Kodunda Güvenlik Açıklarını Bulan Program

sundance

Freshmeat`de bulduğumuz ganimetlere bir yenisi eklendi. Flawfinder

Python ile yazılmış olan bu program C kodundaki, muhtemel buffer overflow problemlerini tespit etmekte ve bunları tehlike derecelerine göre sıralayıp raporlamakta.

Şu an için Unix sistemlerde çalışan bu program, Python tabanlı olduğundan çok kolaylıkla Windows`a uyumlu hale getirilebiliyor.

POV-Ray Tanıtımı

FZ

Amiga zamanlarından bu yana, bilgisayar destekli modelleme alanında birçok programlar geldi geçti. Imagine'dı, Lighwave'di, Real 3D'di, 3D Max'di, Blender'dı derken bu alanda birbiri ile kapışan oldukça fazla program var. Fakat bunlardan bir tanesi, gerek arkasındaki düşünce, gerekse başarıları ile diğerlerinden çok daha farklı bir yerde.

Bayanlar baylar, karşınızda Pov Ray

Borland Turbo Ailesini Bedava Olarak Dağıtıyor

kosumi_

Borland, şu anki saate göre 9 gün 16 saat sonra Turbo Delphi, Turbo C++, Turbo Delphi ( .NET), Turbo C# programlarını bedava olarak dağıtacağını açıkladı. Ayrıntılar için buraya bakabilirsiniz.

Genişletilebilir Programlama Dilleri: 21. yy. İçin Tahminler

FZ

ACM tarafından yayınlanan QUEUE dergisinin son sayısının konusu programlama dilleri. Toronto Üniversitesi'nden Dr. Gregory V. Wilson'ın dergiye gönderdiği Extensible Programming for the 21st Century (21. yüzyıl için genişletilebilir programlama) yazısı Internet'teki değişik platformlarda ışık hızı ile yayıldı ve bitmek bilmez tartışmalara bir yenisi eklendi. FM olarak sonsuz+1 mantalitesine uyup sevgili okurlarımızı bundan haberdar etmemek ve bir başka teknik (sosyolojik, psikolojik, politik, kısaca bilgisayar dünyası ile ilgili) tartışmaya yol açmamak düşünülemezdi!

Python : iyidir - o kadar

gencbeyin

Proglamlama bilgisi olmayan biri için öğrenmesi kolay, öğrendikten sonra ise diger dillere geçiş olanağı olan Python hem hızlı geliştirme için kullanılabilen bir script dili, hem diğer bütün programlama stillerini ihtiva eden bir bilgisayar kültürü antolojisi gibi.
Mesela eski alışkanlıkları Lisp türü fonksiyon bazlı programlama için uygun tanımlamalar içermektedir. Aynı zamanda OO yani obje bazlı programlama için de elverişlidir. Son olarak perl tipi sıralayan türden programlama da yapılabilir. Bütün bunları python öğrenirken yeni baştan tekrar edebilirsiniz.