Tamam tamam yazmadık. Abarttım ben.
Ama ASM ile yılan oyunu yaptık. 8051 serisi mikrodenetleyicilerde çalışacak bir yılan oyunu. Sırf ASM ile.
Vallahi boş işler yapmıyoruz. Ödev bu, ondan yaptık. 😀
Evet C gibi bir dil varken, bizden inatla ASM’de yazmamızı istediler, yanlış anlamadınız.
Yo yo, C’yi derste de gördük. Gösterdiler yani. Ama yine de inatla ASM’de yazmamızı istediler.
Vallahi ben anlamadım mantığını. Nedenini sordum, “Biz öyle uygun gördük.” dediler.
Cidden.
Hiçbir okurumu inandıramadım. Özlem’e sorun. İnanırsınız. Zaten takım arkadaşım da o. Kod yazdığıma falan inanmazsanız ona da inandırır.
Ödev
Her neyse… ASM ile bizden oyun istediler. Derste C görmemize rağmen hem de. Uğraşmazsak olmaz ya!
Biz de tasarladık. Net 15 saatimizi aldı. Hata ayıklarken canımız çıktı. Programı yazarken bize derste gösterilen Linux üzerinde çalışan MCU IDE isimli yazılımı kullandık. Ama program öyle yavaş ve öyle sorunluydu ki, defalarca çöktüğü gibi, mikrosaniyelik işi yapması saniyeler alıyordu. Yani görüp görülebilecek en kötü IDE’lerden biriydi.
En az beş altı defa çöktü. Ve biz bu IDE’de yılan yazdık!
Daha doğrusu yazamadık ve bir süre sonra FxDev’den yardım isteyince, bize Windows’ta çalışan ve adam gibi çalışan, orası burası çökmeyen ve yazdığımız kodu 8051’e göre gerçekzamanlı işleyebilen bir yazılım önerdi: Keil uVision.
Kodu hemencecik Windows’a taşıdık ve bu programda tasarıma devam ettik. Canımız çıka çıka, saya söve ödevi bitirdik.
Kontrol
Ödev kontrolünde hocamız bize bu ödevin bize ne kattığını sordu. Ben de açık açık söyledim kendisine: “Açıkçası üç günümüzü boşa harcamaktan başka bir şey katmadı.” Meğerse öyle değilmiş… Bu ödev bize, eğer ileride alt seviyeli işlerle meşgul bir yerde çalışırsak (mesela embedded) o zaman işlerin nasıl gittiğine dair fikrimiz olmasını sağlayacakmış.
Kimse bu ödevi vermeden önce, gelecekte ne yapacağımı sormadı ki bana! Ben gelecekte alt seviyeyle falan uğraşmayacağım, “webci” olacağım ben, ben niye yapıyorum o zaman? Bunun cevabı yok tabi. Aslında var: Finali %20 etkiliyor da ondan yapıyorum.
Neyse, böyle bir ödevi yaptık.
Teknik Bilgiler
Biraz da teknik bilgi verelim şimdi.
- Program klasik bir yılan oyunudur.
- Oyun 40H ile 7FH bellek bölgeleri arasında oynanmaktadır.
- Elmalar 0FFH’tir.
- Yılan’ın başı 01H ve devamı 02H, 03H.. diye gitmektedir.
- Veriler Port 0’dan alınır.
- 0.0 sol, 0.1 sağ, 0.2 yukarı, 0.3 aşağı yönlerini kontrol eder. Aynı anda iki tane girişe basılmamalıdır. Basılırsa sistem bir tanesini kabul eder, diğerini yok sayar.
- 0.4 yılanı yavaşlatır, 0.5 hızlandırır.
- Yılanı kontrol etmek için yön tuşuna sürekli basmanız gerekmemektedir. Hiçbir tuşa basmazsanız aynı yönde devam eder.
- Yılan sola giderken bir anda sağa gidemez. (180 derece dönüş olmaz.)
- Oyun tahtasında sınır yoktur. Bir taraftan çıkınca öbür taraftan girer.
- Elmalar, T1 zamanlayıcısındaki MOD2 sayacı ile rastgele üretilir.
- T0, MOD1 yılanın hızını ayarlamak için kullanılır.
- Oyun yılan kendine çarpınca biter.
- Çarpışmanın olduğu yer 0FEH ile gösterilir.
- Skor oyunun sonunda bilumum registerlara ve aküye yazılır.
- Skor, yenilen elma sayısıdır.
- Elmalar GDO’lu değildir.
Bitirirken
Bu kadar incik cıncık özelliği olan bir ödevi, zaten kısıtlı ve değerli olan vaktimizde bize yaptırılmasının yanlış olduğunu düşündüğümü tekrar söylemeden geçemiyor ve oyunun ödev metinini, raporumuzu ve kaynak kodumuzu aşağıda paylaşıyorum.
Teknik birkaç ayrıntıya rapordan ulaşabilirsiniz.
Kaynak kodları (olur da anlarsanız 😀 ) istediğiniz gibi kullanabilirisiniz. Kodları indirmek istemezseniz her zamanki gibi yazının sonunda bulabilirsiniz.
- Ödev Metni
- Proje Raporu
- Bizim Çözümümüz (snake.asm)
Kodlar
; YILANIN BASINI KUCUKKEN EZECEKSIN YEGEN (16:1 ) MOV 63H, #001H ;YILANIN BASLANGIC KONUMU MOV 64H, #002H ;YILANIN BASLANGIC KONUMU MOV R2, #00H ; YILANIN GIDECEGI YON 00H:sol, 01H:sag, 02H:ust, 03H:alt -Default olarak soldan baslatilir.- MOV R6, #002H ;YILANIN BASLANGIC UZUNLUGU MOV 008H, #0100D ;BASLANGIC HIZI ; ZAMANLAYICIYA AIT SURUYLE KOD BASLA: MOV R7, 008H ;Baslangic hizi R7 registerina atilir. ZAMANLAYICI: MOV 16H, #0FFH IC_ZAMANLAYICI: MOV TMOD, #00100001B ;ZAMANLAYICI 1 MOD2'DE ZAMANLAYICI ZAMANLAYICI 0 MOD 1'DE MOV TH0, #0FFH ;Zamanlayici 0'ın donme sayisi TH0 ve TL0 ile ayarlanir. MOV TL0, #0FFH MOV TH1, #63D ;Zamanlayici 1'in donme sayisi TH1 ve TL1 ile ayarlanir. MOV TL1, #63D SETB TR0 ; Zamanlayici 0 calismaya baslar. SETB TR1 ; Zamanlayici 1 calismaya baslar. ; YILAN HIZINA GORE BEKLEMEK BEKLE: JNB TF0, BEKLE CLR TF0 DJNZ 16H, IC_ZAMANLAYICI DJNZ R7, ZAMANLAYICI ; EKRANA RASTGELE ELMA KOYMA (ELMALAR FFH) ; GUNCEL ELMANIN YERI O9H ADRESINDE TUTULUR. BU ADRESTE 00 VARSA ELMA YOK DEMEKTIR. ; EGER ELMA YOKSA BIR TANE RASTGELE YARATILIR VE BELLEGE FFH OLARAK ISLENIR. MOV A, 09H JNZ PORT_KONTROL MOV A, R6 SUBB A, #64D JNZ ELMA_YARAT LJMP BITTI ELMA_YARAT: ;ELMA YARAT MOV R0, TL1;SAYACTAKI DEGERI (YENI ELMA KOORDINATINI AL) MOV A,@R0 ;ELMANIN OLUSTURULMASI DUSUNULEN NOKTANIN ICI A'YA ATILIR. ;BU NOKTADA 00H DISINDA BIR SEY VARSA, YILANIN USTUNDE ELMA OLUSTUYORUZ DEMEKTIR. JNZ ELMA_YARAT ;BU NOKTADA ARTIK ELMAYI YARATABILIRIZ MOV @R0, #0FFH MOV 09H, R0 JMP PORT_KONTROL ; PORTTAN BILGI ALIP GIDILECEK YONE KARAR VERMEK VEYA HIZ ARTIRIP AZALTMAK PORT_KONTROL: MOV P0, #0FFH ;P0 giris portu olarak ayarlanir. MOV C, P0.0 ; Yilanin sola donmesi isteniyorsa JNB CY, SOLL MOV C, P0.1 ;Yilanin saga donmesi isteniyorsa JNB CY, SAGL MOV C, P0.2 ;Yilanin yukari cikmasi isteniyorsa JNB CY, USTL MOV C, P0.3 ;Yilanin asagi inmesi isteniyorsa JNB CY, ALTL MOV C, P0.4 ;Yilan hizlandirilmak isteniyorsa JNB CY, HIZLANDIR MOV C, P0.5 ;Yilan yavaslatilmak isteniyorsa JNB CY, YAVASLAT ; YON BELIRTILMEMISSE (YANI HIC GIRDI YOKSA, EN SON NEREYE GIDILIYORSA ORAYA GITMEYE DEVAM ETMEK) YONBELIRTILMEMIS: CJNE R2, #00H, YON_SOL_DEGIL ; Bir onceki yonun ne olduguna bakilir, teker teker. Yukarida aciklanan kabullenmeler kullanilir. JMP SOLL YON_SOL_DEGIL: CJNE R2, #01H, YON_SAG_DA_DEGIL JMP SAGL YON_SAG_DA_DEGIL: CJNE R2, #02H, YON_UST_DEGIL JMP USTL YON_UST_DEGIL: JMP ALTL HIZLANDIR: ;Yilan hizlandiriliyor... MOV A, 008H CLR C SUBB A, #20D MOV 008H, A JNZ BASLA MOV 008H, #20D JMP BASLA YAVASLAT: ;Yilan yavaslatiliyor... MOV A, 008H ADD A, #20D MOV 008H, A CLR CY SUBB A,#0F0H JNZ LBASLA MOV 008H, #0DCH LJMP BASLA LBASLA: LJMP BASLA ;Asagida, yilan belli bir yone giderken tam ters yon secilmisse, secilen yonun ignore edilip yilanin gittigi yonde devam etmesi saglanmistir. ;Ters yonden kastimiz, yilan sola giderken saga gitmesinin istenmesi ya da yilan yukari cikarken asagi gitmesinin istenmesidir. ;Boyle bir durumda yilan yon secimi hic yapilmamis gibi gittigi yonde devam eder. SOLL: CJNE R2, #01H, SOLDAN_DEVAM_ET LJMP SAG SOLDAN_DEVAM_ET: MOV R2, #00H LJMP SOL SAGL: CJNE R2, #00H, SAGDAN_DEVAM_ET LJMP SOL SAGDAN_DEVAM_ET: MOV R2, #01H LJMP SAG USTL: CJNE R2, #03H, USTTEN_DEVAM_ET LJMP ALT USTTEN_DEVAM_ET: MOV R2, #02H LJMP UST ALTL: CJNE R2, #02H, ALTTAN_DEVAM_ET LJMP UST ALTTAN_DEVAM_ET: MOV R2, #03H LJMP ALT SOL: ;YILAN HAREKETLERI MOV R5, #001H ;YILANIN BASINI BUL (BULUNACAK OLAN YE R5'E ATILMALIDIR) MOV R0, #040H BAS_SOL_ARA: MOV A,@R0 CJNE A, 005H, BAS_SOL_YOK JMP BAS_SOL_VAR BAS_SOL_YOK: INC R0 JMP BAS_SOL_ARA BAS_SOL_VAR: ;R0'IN ICERISINDE YILANIN BIYERI VAR. HAREKET_SOL: MOV @R0, #0FEH ; KOSELERE GELMIS MI KONTROLLERI (SOL) ; Her kose teker teker kontrol edilir ve yilanin duvardan gecmesi saglanir. MOV A,#40H CJNE A, 00H, YOK40_SOL MOV R0, #47H JMP SOL_TAMAM YOK40_SOL: MOV A,#48H CJNE A, 00H, YOK48_SOL MOV R0, #4FH JMP SOL_TAMAM YOK48_SOL: MOV A,#50H CJNE A, 00H, YOK50_SOL MOV R0, #57H JMP SOL_TAMAM YOK50_SOL: MOV A,#58H CJNE A, 00H, YOK58_SOL MOV R0, #5FH JMP SOL_TAMAM YOK58_SOL: MOV A,#60H CJNE A, 00H, YOK60_SOL MOV R0, #67H JMP SOL_TAMAM YOK60_SOL: MOV A,#68H CJNE A, 00H, YOK68_SOL MOV R0, #6FH JMP SOL_TAMAM YOK68_SOL: MOV A,#70H CJNE A, 00H, YOK70_SOL MOV R0, #77H JMP SOL_TAMAM YOK70_SOL: MOV A,#78H CJNE A, 00H, YOK78_SOL MOV R0, #7FH JMP SOL_TAMAM YOK78_SOL: DEC R0 SOL_TAMAM: ;OYUN SONU VE YILAN ELMA YEDI MI KONTROLLERI MOV A, @R0 JNZ SOL_BUYU JMP SOL_ILERI SOL_BUYU: ; Yilanin buyumesi lazım. CLR C SUBB A, #0FFH JNZ SOL_BITTI MOV 010H, #0FFH ;BUYU BAYTINI SET ET JMP SOL_ILERI SOL_BITTI: ;Yilanin boyunun 8 olmasi durumunda bir sirada yuruyebilmesinin saglanmasi amaciyla yazilmis bir dizi kod... MOV A, @R0 CLR C SUBB A, R6 JNZ SOL_CIDDEN_BITTI MOV 011H, #0FFH ;YILAN TAM UCTA BAYTINI SET SET JMP SOL_ILERI SOL_CIDDEN_BITTI: LJMP BITTI SOL_ILERI: MOV @R0, #001H ;DEGISECEK BITTI MOV R4, #002H ; BIR SONRAKI YILANIN YERI (SBIZLEYE PARAMATRE OLARAK KULLANDIK) JMP SBIZLE SAG: ;YILAN HAREKETLERI MOV R5, #001H ;YILANIN BASINI BUL (BULUNACAK OLAN YE R5'E ATILMALIDIR) MOV R0, #040H BAS_SAG_ARA: MOV A,@R0 CJNE A, 005H, BAS_SAG_YOK JMP BAS_SAG_VAR BAS_SAG_YOK: INC R0 JMP BAS_SAG_ARA BAS_SAG_VAR: ;R0'IN ICERISINDE YILANIN BIYERI VAR. HAREKET_SAG: MOV @R0, #0FEH ; KOSELERE GELMIS MI KONTROLLERI (SAG) ; Her kose teker teker kontrol edilir ve yilanin duvardan gecmesi saglanir. ;DEGISECEK BASLA MOV A,#47H CJNE A, 00H, YOK47_SAG MOV R0, #40H JMP SAG_TAMAM YOK47_SAG: MOV A,#4FH CJNE A, 00H, YOK4F_SAG MOV R0, #48H JMP SAG_TAMAM YOK4F_SAG: MOV A,#57H CJNE A, 00H, YOK57_SAG MOV R0, #50H JMP SAG_TAMAM YOK57_SAG: MOV A,#5FH CJNE A, 00H, YOK5F_SAG MOV R0, #58H JMP SAG_TAMAM YOK5F_SAG: MOV A,#67H CJNE A, 00H, YOK67_SAG MOV R0, #60H JMP SAG_TAMAM YOK67_SAG: MOV A,#6FH CJNE A, 00H, YOK6F_SAG MOV R0, #68H JMP SAG_TAMAM YOK6F_SAG: MOV A,#77H CJNE A, 00H, YOK77_SAG MOV R0, #70H JMP SAG_TAMAM YOK77_SAG: MOV A,#7FH CJNE A, 00H, YOK7F_SAG MOV R0, #78H JMP SAG_TAMAM YOK7F_SAG: INC R0 SAG_TAMAM: ;OYUN SONU VE YILAN ELMA YEDI MI KONTROLU MOV A, @R0 JNZ SAG_BUYU JMP SAG_ILERI SAG_BUYU: CLR C SUBB A, #0FFH JNZ SAG_BITTI MOV 010H, #0FFH ;BUYU BAYTINI SET ET JMP SAG_ILERI SAG_BITTI: ;Yilanin boyunun 8 olmasi durumunda bir sirada yuruyebilmesinin saglanmasi amaciyla yazilmis bir dizi kod... MOV A, @R0 CLR C SUBB A, R6 JNZ SAG_CIDDEN_BITTI MOV 011H, #0FFH ;YILNAN TAM UCTA BAYTINI SET SET JMP SAG_ILERI SAG_CIDDEN_BITTI: LJMP BITTI SAG_ILERI: MOV @R0, #001H ;DEGISECEK BITTI MOV R4, #002H ; BIR SONRAKI YILANIN YERI (SBIZLEYE PARAMATRE OLARAK KULLANDIK) JMP SBIZLE UST: ;YILAN HAREKETLERI MOV R5, #001H ;YILANIN BASINI BUL (BULUNACAK OLAN YE R5'E ATILMALIDIR) MOV R0, #040H BAS_UST_ARA: MOV A,@R0 CJNE A, 005H, BAS_UST_YOK JMP BAS_UST_VAR BAS_UST_YOK: INC R0 JMP BAS_UST_ARA BAS_UST_VAR: ;R0'IN ICERISINDE YILANIN BIYERI VAR. HAREKET_UST: MOV @R0, #0FEH ; KOSELERE GELMIS MI KONTROLLERI (UST) ; Her kose teker teker kontrol edilir ve yilanin duvardan gecmesi saglanir. MOV A,#40H CJNE A, 00H, YOK40_UST MOV 78H, #001H JMP UST_TAMAM YOK40_UST: MOV A,#41H CJNE A, 00H, YOK41_UST MOV R0, #79H JMP UST_TAMAM YOK41_UST: MOV A,#42H CJNE A, 00H, YOK42_UST MOV R0, #7AH JMP UST_TAMAM YOK42_UST: MOV A,#43H CJNE A, 00H, YOK43_UST MOV R0, #7BH JMP UST_TAMAM YOK43_UST: MOV A,#44H CJNE A, 00H, YOK44_UST MOV R0, #7CH JMP UST_TAMAM YOK44_UST: MOV A,#45H CJNE A, 00H, YOK45_UST MOV R0, #7DH JMP UST_TAMAM YOK45_UST: MOV A,#46H CJNE A, 00H, YOK46_UST MOV R0, #7EH JMP UST_TAMAM YOK46_UST: MOV A,#47H CJNE A, 00H, YOK47_UST MOV R0, #7FH JMP UST_TAMAM YOK47_UST: CLR C MOV A,R0 SUBB A, #8H MOV R0,A UST_TAMAM: ;OYUN SONU VE YILAN ELMA YEDI MI KONTROLU MOV A, @R0 JNZ UST_BUYU JMP UST_ILERI UST_BUYU: CLR C SUBB A, #0FFH JNZ UST_BITTI ;Yilanin boyunun 8 olmasi durumunda bir sirada yuruyebilmesinin saglanmasi amaciyla yazilmis bir dizi kod... MOV 010H, #0FFH ;BUYU BAYTINI SET ET JMP UST_ILERI UST_BITTI: MOV A, @R0 CLR C SUBB A, R6 JNZ UST_CIDDEN_BITTI MOV 011H, #0FFH ;YILNAN TAM UCTA BAYTINI SET SET JMP UST_ILERI UST_CIDDEN_BITTI: LJMP BITTI UST_ILERI: MOV @R0, #001H ;DEGISECEK BITTI MOV R4, #002H ; BIR SONRAKI YILANIN NOSU (SBIZLEYE PARAMATRE OLARAK KULLANDIK) JMP SBIZLE ALT: ;YILAN HAREKETLERI MOV R5, #001H ;YILANIN BASINI BUL (BULUNACAK OLAN YE R5'E ATILMALIDIR) MOV R0, #040H BAS_ALT_ARA: MOV A,@R0 CJNE A, 005H, BAS_ALT_YOK JMP BAS_ALT_VAR BAS_ALT_YOK: INC R0 JMP BAS_ALT_ARA BAS_ALT_VAR: ;R0'IN ICERISINDE YILANIN BIYERI VAR. HAREKET_ALT: MOV @R0, #0FEH ; KOSELERE GELMIS MI KONTROLLERI (ALT) ; Her kose teker teker kontrol edilir ve yilanin duvardan gecmesi saglanir. ;DEGISECEK BASLA MOV A,#78H CJNE A, 00H, YOK78_ALT MOV R0, #40H JMP ALT_TAMAM YOK78_ALT: MOV A,#79H CJNE A, 00H, YOK79_ALT MOV R0, #41H JMP ALT_TAMAM YOK79_ALT: MOV A,#7AH CJNE A, 00H, YOK7A_ALT MOV R0, #42H JMP ALT_TAMAM YOK7A_ALT: MOV A,#7BH CJNE A, 00H, YOK7B_ALT MOV R0, #43H JMP ALT_TAMAM YOK7B_ALT: MOV A,#7CH CJNE A, 00H, YOK7C_ALT MOV R0, #44H JMP ALT_TAMAM YOK7C_ALT: MOV A,#7DH CJNE A, 00H, YOK7D_ALT MOV R0, #45H JMP ALT_TAMAM YOK7D_ALT: MOV A,#7EH CJNE A, 00H, YOK7E_ALT MOV R0, #46H JMP ALT_TAMAM YOK7E_ALT: MOV A,#7FH CJNE A, 00H, YOK7F_ALT MOV R0, #47H JMP ALT_TAMAM YOK7F_ALT: MOV A,R0 ADD A, #8H MOV R0,A ALT_TAMAM: ;OYUN SONU VE YILAN ELMA YEDI MI KONTROLU MOV A, @R0 JNZ ALT_BUYU JMP ALT_ILERI ALT_BUYU: CLR C SUBB A, #0FFH JNZ ALT_BITTI ;Yilanin boyunun 8 olmasi durumunda bir sirada yuruyebilmesinin saglanmasi amaciyla yazilmis bir dizi kod... MOV 010H, #0FFH ;BUYU BAYTINI SET ET JMP ALT_ILERI ALT_BITTI: MOV A, @R0 CLR C SUBB A, R6 JNZ ALT_CIDDEN_BITTI MOV 011H, #0FFH ;YILNAN TAM UCTA BAYTINI SET SET JMP ALT_ILERI ALT_CIDDEN_BITTI: LJMP BITTI ALT_ILERI: MOV @R0, #001H ;DEGISECEK BITTI MOV R4, #002H ; BIR SONRAKI YILANIN YERI (SBIZLEYE PARAMATRE OLARAK KULLANDIK) JMP SBIZLE SBIZLE: ;BIR SONRAKI YILANIN YERI (R4 ILE SETTIRILIR) MOV 003H, 006H MOV A, 11H JNZ SON_BASA_DENK_GELMIS JMP DONGU_BAS SON_BASA_DENK_GELMIS: DEC 003H DONGU_BAS: DJNZ 003H, IZLE_DONGU SJMP IZLE_BITTI IZLE_DONGU: ;YILAN HAREKETLERI MOV R5, #0FEH ;YILANIN BIR YERINI BUL (BULUNACAK OLAN YE R5'E ATILMALIDIR) MOV R0, #040H IZLE_FE_ARA: MOV A,@R0 CJNE A, 005H, IZLE_FE_ARA_YOK JMP IZLE_FE_ARA_VAR IZLE_FE_ARA_YOK: INC R0 JMP IZLE_FE_ARA IZLE_FE_ARA_VAR: ;R0'DA FEhın yeri var MOV B,R0 ;YILAN HAREKETLERI MOV R5, 004H ; YILANIN DEGISECEK PARCASININ YERINI TESPIT ET MOV R0, #40H IZLE_DEGISECEK_ARA: MOV A,@R0 CJNE A, 005H, IZLE_DEGISECEK_ARA_YOK JMP IZLE_DEGISECEK_ARA_VAR IZLE_DEGISECEK_ARA_YOK: INC R0 JMP IZLE_DEGISECEK_ARA IZLE_DEGISECEK_ARA_VAR: ;R0'DA DEGISECEK ELEMANIN FE hın yeri var MOV @R0, #0FEH MOV R0,B MOV @R0, 004H INC R4 JMP DONGU_BAS IZLE_BITTI: ;YILANIN SON ELEMANI ILE ILK ELEMANI CAKISMIS MI MOV A, 11H JNZ SON_BASA_DENK_GELMIS_2 JMP SONU_HALLET SON_BASA_DENK_GELMIS_2: MOV 11H,#00H ;;SON BASA GELMIS BITINI TEMIZLE ;YILAN HAREKETLERI MOV R5, #0FEH ;YILANIN BIR YERINI BUL (BULUNACAK OLAN YE R5'E ATILMALIDIR) MOV R0, #040H IZLE_SON_ARA: MOV A,@R0 CJNE A, 005H, IZLE_SON_ARA_YOK JMP IZLE_SON_ARA_VAR IZLE_SON_ARA_YOK: INC R0 JMP IZLE_SON_ARA IZLE_SON_ARA_VAR: ;R0'DA FEh'nin yeri var MOV @R0, 006H JMP SBIZLE_BITTI SONU_HALLET: ; YILAN HAREKET ETTIKTEN SONRA, EN SONDA KALACAK FE'YI KALDIRMAMIZ GEREKIR. ; BU KISIM BU ISLEMI YAPMAKTADIR. MOV R5, #0FEH ;YILANIN BIR YERINI BUL (BULUNACAK OLAN YE R5'E ATILMALIDIR) MOV R0, #040H IZLE_FE_BITTI: MOV A,@R0 CJNE A, 005H, IZLE_FE_BITTI_YOK JMP IZLE_FE_BITTI_VAR IZLE_FE_BITTI_YOK: INC R0 JMP IZLE_FE_BITTI IZLE_FE_BITTI_VAR: ;R0'DA FE'IN yeri var MOV A, 010H JNZ BUYUYECEK MOV @R0, #00h JMP SBIZLE_BITTI BUYUYECEK: MOV 010H, #00H ;YILAN UZAYACAK MI BAYTINI SIFIRLA MOV 009H, #00H ;ELMANIN BELLEKTEKI ADRESINI SIFIRLA KI TEKRAR YARATILSIN INC R6 ;YILANIN UZUNLUGUNU ARTIR MOV @R0, 006H ;BELLEK GORUNTUSUNDE YILANI UZAT JMP SBIZLE_BITTI SBIZLE_BITTI: LJMP BASLA BITTI: DEC R6 DEC R6 MOV R0, 06H MOV R1, 06H MOV R2, 06H MOV R3, 06H MOV R4, 06H MOV R5, 06H MOV R6, 06H MOV R7, 06H MOV A, 06H MOV B, 06H END
Makine Kodu ile Red Alert 3 Yazdık 22 yorum aldı.
Güzel bir ödev olmuş, lakin oyundan görüntü yok mu hiç 🙂 Hem gerekliliği konusunda Özlem’e sorsak eminim o da oyundan bir iki görüntü olması gerektiğini söyleyecektir. :))
@Ömer: Teknik Bilgiler başlığının hemen üstündeki fotoğrafın sağ altındaki bellek görünütüsü programın çalışan hali. Videosunu çekmek için de uğraştım ama, akıcı olmadığından koymadım. Oyun direk RAM’de oynanıyor.
Kodlar için teşekkürler 🙂
>>Kimse bu ödevi vermeden önce, gelecekte ne yapacağımı sormadı ki bana! Ben gelecekte alt seviyeyle falan
>>uğraşmayacağım, “webci” olacağım ben, ben niye yapıyorum o zaman?
Okudugun bolumun elestirilecek bir cok yonu ve eksigi var ama bu yazida belirttiklerinin hicbiri bir arguman olamaz elestirilerin icin. Dunyadaki ciddi universitelerin Bilgisayar Bilimleri ya da Muhendisligi bolumlerinin programlarini incelemeni tavsiye ederim. Hicbirinde Web ile programla (Php, asp, java script), Windows ile programla, ya da urun tabanli “populer” programlama dersleri bulamazsin. Bulacagin seyler bilgisayar biliminin temelleri, otomata teorisi, bilgisayar bilimleri icin ileri mantik gibi dersler olacaktir. Webci olacak ve kendisine ne olacagi sorulmamis birisi olarak diyebilirsin ben bunlarin hicbirini kullanmayacagim diye. Hayatinin ileriki bolumlerinde buyuk olasilikla fizik, kimya, matematik ve biyoloji de kullanmayacaksin. O baglamda lise hayatini da kaldir cope at.
Bu yazdiklarim seni elestirmek, polemik yaratmak ya da uzmek amacini tasimiyor. Blogunu da uzun suredir takip ediyorum. Ancak elestirel olayim derken lutfen “piyasa” denen seyin empoze ettigi argumanlari kullanma. Yasca ve genel ogrenci egilimleri nedeniyle bu hataya dusmen normal.
Kaldiki belirttigin ders temel teorik bilgisayar bilimi dersi bile sayilmaz. Piyasa zaten temel bilgisayar bilimlerinden haberdar cozum ureten muhendis degil webci, javaci filan ariyor. Merak etme bunlarin hicbirini okulda ogrenmesen bile iyi maasli is bulur ilk 6 ay icerisinde ogrenirsin (deneyimle ve gozlemle sabittir).
Öncelikle yazının oldukça ukalaca yazıldığını, bir fikir açıklamasından daha çok bir küçümseme niteliğini taşıdığını belirtmek isterim. Ancak yine de her türlü fikrin özgürce dile getirilmesinden yana olduğum için, bu yazının bir şekilde yazılmış ve yayınlanmış olması beni memnun etti. Bölümümüz öğrencilerinin bilgi sahibi olmadan düşünce sahibi olduklarını, “mühendislik” nedir sorusunu cevaplayamayacaklarını ve işin en önemlisi bizim ülkeden neden belirli bir bakış açısında mühendis çıkmadığını gösteren güzel bir yazı olmuş. Aslında gençliğin verdiği heyecan ve enerjinin kabından taşması olarakta nitelendirebileceğim bu yazı, bu yazıya cevap yazarken benim değerli vaktimi de harcamama sebep oluyor.
Biraz ukalalık yapmak gerekiyorsa, 9 senelik, yüksek lisans sahibi ve doktorasına devam eden bir mühendisim. Bunun 4.5 senesini Beko Elektronik Ar-Ge’de çalışarak geçirdim. Araştırma geliştirme bölümünde Tübitak gözetmenlerinden duyduğumuz kadarıyla Türkiye’de özel sektörde o güne kadar yapılmış en büyük projelerden birinde ortalama 12 mühendis 18 ay çalışarak ürün ve test kodu ürettik. Ayrıca projemiz sayesinde birçok patent alındı. Patentlere ve özel sektöre karşı biriyim. Ancak bu süreç sayesinde gömülü sistemler konusunda belirli bir uzmanlık taşımaktayım. Bir üretim hattında çalışmamış, daha mühendis olmamış ve bu kadar kolay yapılabilecek bir projeyi abartan öğrencileri görmek beni üzdü. Öncelikle “Bu insan benden daha bilgili ve bir uzmanlığa sahip. Acaba ben hata yapıyor olabilir miyim?” düşüncesi yerine herşeyi ben bilirim bunlar gereksiz denilmesi büyük bir cahillik göstergesidir. Ülkenin teknoloji üretememesinin temel nedeni de budur. Ben “web”ci olacağım demek, yurt dışından bize dayatılan teknolojileri alıp onların bayiliğini yapacağım demekten öteye geçmez. Bilgisayar donanımı ve mimarisi hakkında bilgi toplamamak, öğrenmemek anatomi bilmeyen bir tıp doktoru olmakla eş değerdir.
Bölümümüzdeki öğrenciler Java üzerinde kod geliştiriyorlar genellikle. Acaba kaç öğrenci Java sanal makinası nasıl çalışıyor, bir java sanal makinasını nasıl yazabilirim diye merak ediyor? Kaç tane öğrenci bir web server nasıl yazılır ya da bir scripting dili nasıl geliştirilir konusuna eğildi, araştırma yaptı? Hangi öğrencilerimiz bir programlama dili tasarladı ve bunun derleyicisini yazmak için uğraştı? Bir işlemci tasarlamaya meraklı ve bunun için çalışan öğrenciler var mıdır?
“Ben gelecekte alt seviyeyle falan uğraşmayacağım, “webci” olacağım ben, ben niye yapıyorum o zaman?”: Tabiki istediğiniz alana yönelmek konusunda özgürsünüz. Ancak şunu akıldan çıkarmayın webci olmak için ya da program geliştirmek için mühendis olmaya gerek yoktur. Mesela matematik, ayrık yapılar, bilgisayar mimarisi, mantık tasarımı bunları da bilmene gerek yok.
Bilgisayar donanımı, donanımın dili bilgisayarın kromozomları dna’sı dır. Size verilen proje kısıtlı kaynakların bulunduğu donanımsal bir ortamda, hatta işletim sistemi ve kütüphanelerin olmadığı bir ortamda program nasıl geliştirilir bunun farkına varmanız içindi. C dilinde yazdırmamamızın nedeni de budur: Bir mühendislik yapın, elinizde hiçbirşey yok hadi çözün problemi. Tüm bunlara ek olarak Linux işletim sistemini kullandırmak istedik. Bu sayede öğrenciler açık kaynak kodlu yazılımları kullanacaklar ve bu dünyaya giriş yapacaklardı. Hatta açık kaynak kod denilen şeyin ne olduğunu görsünler. Linux görmeden mezun olan öğrencilerimiz var ne yazıkki…
Özetle, öğrencilerimizin bir bakış açısına gelebilmesi için sanırım uzun zaman geçmesi gerekiyor. Öğrencilerimiz kolaya kaçan ve not için çalışan, kendilerini geliştirmeyen, kendi beğenileri ve doğrularını mutlak doğru kabul eden bir bakış açısına sahipler. 8051 mikrodenetleyicisini bilgisayar mimarisi dersinde de göreceksiniz ne yazıkki. Ama bu sefer içsel tasarımını. Gerçi gereksiz bilgiler ama siz yine de öğrenmeye bakın. Günün birinde bir üniversitenin yüksek lisans ya da doktora mülakatında (hem de gözümüzde büyüttüğünüz hem yurt içi hem yurt dışındaki üniversiteler) size bir soru sorulursa cevap verebilin. Birden bire araştırma geliştirme bölümünde önünüze 8051 tabanlı bir sistem koyabilirler…
Sevgiler ve sınavlarda başarılar,
Sinan
@Sinan Hocam:
Kabul etmeliyim ki hocam, üslubum dalga geçer gibi. Bu blogu yazmaya başladığım günden beri bu böyle gitti maalesef. Ne kadar uğraşırsam uğraşayım bunu değiştirmeyi başaramadım. Çok defa olumsuz anlaşıldı, ki hak da veriyorum kesinlikle. O yüzden bu konuda rahatsızlık verdiğim için özür diliyor ve yazım sitili kişisel ya da aşağılayıcı almamamızı sizden önemle diliyorum çünkü böyle bir şey kesinlikle yok.
Yazdıklarınızda bazı yerlere katılıyorum ama bazı yerlere de katılmamaktayım.
Hocam mesela bu verilen proje önceki tecrübelerinizden dolayı sizin için kolaylıkla yapılabilecek ve basit bir proje olarak görünse de, ben ve ödevi yapan tandığım birçok arkadaşım ödevi tamamlayana kadar çok zorlandı ve çok ciddi vakit harcadı. Kendi kodumuz için konuşuyorum, 15 saatlik emek var üstünde. 15 net saat. Bu da az gelebilir belki ama, Nesneye Dayalı Analiz ve Tasarım ödevi, Windows Web ödevi, İşletim Sistemleri Ödevi, finallere hazırlanmak, diğer İşletim Sistemleri ödevi, staj görüşmeleri arasında gerçekten çok fazla bir saat. Ve bu vaktin büyük iki kısmı kopyala yapıştır yapmak ve MCU 8051 ide’de kodun çalışmasını seyrederek geçti (çünkü çok yavaş çalışıyordu).
Tam olarak bu yüzden verilen ödevin çok aşırı uzun olduğunu düşünüyorum. Geçen dönem de ASM ile kod geliştirmiştik. Prosedür yazmıştık. EBOK EKOK almıştık, ve o zamanlar gıkım çıkmamıştı. Gerek algotimayı geliştirmek, gerek kodlamadaki ayrıntıları öğrenmek için önemli bir fırsattı ve gerçekten çok şey öğrendik. Bu sefer ise, ödev uzundu ve genelde yaptıklarımız birbirine çok benzediğinden pek bir şey katmadı. Serzenişim budur.
Bunun dışında “webci” olmak kısmını biraz açarsam, sunucu istemci mimarisini kullanan sistemlerde iletişim, güvenlik veya bunları içeren sistemlerin nasıl tasarlanırsa daha etkin olabileceği, hangi tasarımların genişletilebilirlik sağlayacağı gibi konulara kafa yormak ilgimi çekiyor. Ve tasarımsal şeyler içeren bu konuları bilgisayar mühendisliği okumamış, otomata nesneye dayalı analiz, nesne ve hatta assembly ve işletim sistemi derslerini almamış olan birinin yapabileceğine inanmıyorum. Yani derdin oturup “site yazmak” değil. Ama “site yazılabilecek” bir frameworkun nasıl olması gerektiği ya da bununla ilgili tasarımlar çok ilgimi çekiyor.
Bilgisayar mühendisliği okumayan birinin yapacağı bir yazılım iskambil kağıtlarından kule gibi olur diye düşünüyorum. Bu yüzden de “webci” yani bu konuda tasarım yapan, sistemi tasarlayan mühendislerin gerektiğini düşünüyorum.
Hocam şurada beni yanlış anlamışsınız: Ben bu derse gereksiz demiyorum. Deseydim zaten bu bölümde işim olmazdı. Ben bu ödeve gereksiz diyorum. Geçen dönemki EBOB EKOK ödevleri gibi, ya da öğretici içeriği olan ama kopyala yapıştır faslı değil, eğitici faslı çok olan bir ödev verilebilirdi inancındayım. Çünkü yazdım, yazanları gördüm. Hatta internetten kod bulup, değiştirenleri de duydum. Herkes uzunluğundan şikayet etti.
Bunun dışında her ne kadar ileride bir programlama dili yazmak ya da geliştirmek ve benzeri şeyler kendimi geliştireceğim şeyler olmasa da merak ettiğim ve cevaplarını teorik olarak öğrendiğim şeyler. JVM’nin nasıl çalıştığını da teorik olarak biliyorum ve eğer kendimi bu yönde geliştirmek isteseydim fazlasını da bilirdim. Ama ben bunun yerine HTTP protokolünün inceliklerini öğrendim ve yavaştan TCP’ye doğru da gitmem lazım inancındayım.
Linux’te çalışmak konusunda haklısınız. Farklı bir sistem, hele de açık kaynak bir sistem görülmesi lazım. Ama “Simple Keypad” koyduğum anda çöken ya da simulasyonu gerçek hayattakinden 100’lerce kat yavaş yapan ve bir türlü hızlanmayan, pencereyi boyutlandırdığımda bile çöken bir programı kullanıyorsak bu konuda serzenişte bulunmalıyım. Keil mikrovision, deneme sürümü, bir defa çökmedi, MCU IDE en az 10 defa falan çöktü.
Bu yüzden hocam, normalde ödevleri bir şeyler öğrenmek için yapsam da (geçen seneki ASM’ler ve günde 4 saat uyumama sebebiyet veren Windows da buna dahil) bu ödevi not için yaptım. Tek öğrendiğim, MCU IDE’nin genelde çöktüğü ve bir de timer ile rastgele sayı üretilmesi oldu. Diğerleri geçen dönemkinden farklı değildi. Sorun da burada.
8051’in iç yapısını çok merak ediyorum. Çünkü farklı bir şey öğreneceğiz. Muhtemelen hayatımda bir defa bile gerekmeyecek ama farklı bir şey olunca merak edeceğim ve seve seve öğreneceğim.
Derdim, ödevin amacına ulaşamamış olması. Daha doğrusu bunu düşünmem.
Sınavlarla ilgili dilekleriniz için teşekkür ederim hocam.
Daha önemlisi vaktinizi ayırıp, eleştirilerime yanıt verdiğiniz için.
İyi günler
Sayın Sinan Bey,
Söylemleriniz bir çok öğretim üyesi, öğretmen hatta artık bu işin üstü dediğimiz profesörlerin görüşlerini yansıtmaktadır.
Maalesef günümüz öğretim elemanları teknolojinin çok gerisinde kalmışlardır. Bu elbette sizin ya da bir başkası için geçerli olmayabilir fakat genele vurduğumuzda durum budur.
Kendi sitem olan FxDev.org’da görebileceğiniz üzere Ege Üniversitesi Elektrik ve Elektronik Mühendisliği öğrencisiyim. Öncelikle kim mikroişlemci tasarlamak ister demişsiniz. Buna cevap vermek isterim;
Evet, ben tasarlamak istedim ve bir mikroişlemci tasarladım. 32bit, Pentium serilerinin teknolojisiyle denkti. Benim dalım için bu gerekli bir uygulama idi ve gerekli donanımlar bölümümde mevcuttu.
Size sormak istediğim, istediğiniz donanımsal özellikleri sağlayacak altyapıya bölüm olarak sahip misiniz?
Acaba şu anda projede yüksek not verdiğiniz kaç tane proje gerçek hayatta çalışır durumda?
Simülasyonda çalışan gerçek hayatta da bire bir çalışır mı? (Buna elbette bir Elektronik Mühendisi gülecektir)
Benim gördüğüm kadarıyla, bölüm olarak bu yetilere sahip değilsiniz!
Kimse üzerine alınmasın ama bence bölümünüz bir bilgisayar mühenisliğinden öte, bir yazılım mühendisliği ve yazılım geliştirme üzerine kurulu. Bunu bölümümüzde görüştüğüm bir çok arkadaşımdan, benim bölümümde çift ve yan dal yapan arkadaşımdan duyuyorum.
İşte bu anlayışla kurulan bir bölümde, sadece ‘and’ ve ‘or’ kapılarını donanımsal olarak gösterip ‘işte biz size donanım gösterdik’ deyip, insanlardan bunun gibi ‘bana’ bile garip gelen proje veya projeler istenmesi uygun değil.
Bizler de 8051 ile projeler geliştirdik, uyguladık. Fakat Umut’un bahsettiği derleyiciyi ilk gördüğümde bana çok ironik geldi. Sırf açık kaynak kodlu diye kimsenin profesyonel anlamda kullanmadığı bir derleyiciyi öğrencilerinize gösteriyorsunuz ve de buradan olumlu bir sonuç çıkmasını bekliyorsunuz.
Bu işi sıfırdan öğretmeye hevesli bir bölümde acaba şu anda kaç kişi ekran kartı, CPU, RAM, bunların birbiri ile bağlantıları, gömülü sistemler üzerine çalışıyor?
Bölümünüz bilgisayar donanımı açısından ‘bu klavye, bu da fare’ demekten başka öğrencilerinize neler katıyor?
Örneğin bir öğrenci bu bölüme ben VGA monitörü bilgisayarsız, kendi tasarladığım mikrodenetleyici ya da mikroişlemci ile süreceğim, kendi yarattığım ekran kartımı test edeceğim dediğinde bölümünüz bu öğrenciye donanım ya da yardım olarak ne sağlıyor?
Şu anki bitirme tezlerinin kaçı donanıma yönelik?
Ya da en basitinden, neden bu tasarlattığınız projeler gerçek ortamda denenmiyor?
Bun soruların, bilgisayar mühendisliğinde görev yapan bir öğretim üyesi tarafından cevaplanmasını canı gönülden isterim.
Saygılarımla..
Tekrardan merhabalar,
Gençlerin bu düşüncelere sahip olması ki elbette doğrular olduğu gibi oldukça yanlışlar da vardır, üniversitelerimizin bir lise mantığına sahip olmasından ileri gelir. Öğrenciler üniversite ile liseyi bir tutuyorlar. Üniversiteye gelince farklı birşeyle karşılaşmadıkları için ki bu onların suçu değil, bazı gerçekleri görememektedirler.
Bilgisayar mühendisliği ile elektronik mühendisliği bölümleri, kendi içlerinde örtüşen ve ayrışan bir sürü noktaya sahiptirler. Elbette bir bilgisayar mühendisi mezunu bir elektronik mühendisi kadar donanımsal bilgiye sahip olamaz. Yaptığı tasarımlar iyi bir elektronik mühendisinin gerisinde kalacaktır. Hatta kalmalıdırda. Aynı şeyi yazılım için de düşünebiliriz. Elektronik mühendisleri tabiki C ve benzeri dillerde program geliştirebilir. Ancak yazılım geliştirme başlı başına büyük bir araştırma alanıdır ve binlerce araştırma projesini içerisinde barındırır. Bir elektronik mühendisi de algoritmik analizler, yazılım sistemleri tasarımı ve benzeri konularda bilgisayar mühendisi kadar yetkin olamaz. Hatta olmamalıdırda.
Bizim donanıma bakış açımız elbette elektronik mühendislerinin bakış açısından farklıdır. Biz gömülü sistemler ya da alt seviye sistemler denildiği zaman, işin sistem yazılımı kısımlarını düşünürüz. Donanımsal süreçler bizim için bir fikir sahibi olmamız gereken şeylerden birisidir. Ancak biz donanım üzerinde koşan sistem yazılımları ya da yazılımlar ile ilgileniyoruz. Bunun içerisinde işletim sistemi geliştirme, donanımı süren yazılımların geliştirilmesi, donanımı verimli bir şekilde kullanan alttaki donanımın yeteneklerini bilerek onu süren yazılım sistemlerinin tasarımı, geliştirilmesi ve uygulama yazılımı yer alır. Bunların hiçbiri elektronik mühendisliğinin kapsamı içerisinde yer almaz. Tabiki elektronik mühendisleri de bunlarla ilgilenebilir hatta bunları geliştirebilir.
Şimdi ana konulara gelecek olursak, öğrencilerimiz henüz bir araştırma içerisinde girmedikleri için örneğin bir yüksek lisans ya da doktora süreci içerisinde yer almadıkları için bazı şeylerin farkında değiller. Üniversiteler teknoloji öğretim yerleri değildir, üniversite bir bilim yani bilgi üretim merkezidir. Özetle, toplumu ileriye götürecek bilgi üretiminin ve aydınlanmanın merkezi üniversitelerdir. Bu bilgiler teorik ve pratik bilgiler olabilir. Teknoloji, bilimin uygulamacı yönüdür. Size üniversite hiçbir teknoloji öğretmeyebilir. Ancak bilim nasıl yapılır bu üniversiteden her mezunun sahip olması gereken temel özelliktir.
Öncelikle yazılım mühendisliği nedir, bilgisayar mühendisliği nedir ve tüm bunlara ek olarak bilgisayar bilimleri nedir bir tanımını yapmanızı ya da öğrenmenizi tavsiye ederim. Tüm bunlara ek olarak dünyada bilimsel olarak önde olan üniversitelerin bilgisayar mühendisliği bölümlerini ve bunların araştırma ve eğitim planlarını irdelemenizi tavsiye ederim. Sanırım bunları yaptıktan sonra bazı şeyler kafanızda daha net olacaktır. Arkadaşlar lütfen bilgi sahibi olmadan düşünce sahip olmayınız. Öncelikle araştırma!
Bölümümüzün amacı donanım tasarlayan bilgisayar mühendisleri mezun etmek değildir. Nasıl C programlama dilini bilmek bilgisayar mühendisi olmak değilse, and or kapılarını bilmek te donanım tasarlamak ya da elektronik mühendisi olmak değildir tabiki. Bunun herkes farkındadır zaten. Gömülü sistem konusunda uzmanlaşan bilgisayar mühendisi, gömülü sistem donanımı üzerinde yazılım geliştirebilen bir mühendistir. Bölümümüzde günümüzde aktif bir araştırma alanı olan wireless sensor network konusu üzerinde araştırma yapacak gençler için 40 adet kablosuz algılayıcı düğümümüz mevcuttur. Bunun dışında bir donanımımız mevcut değildir. Ancak gömülü sistem yazılımı geliştirme konusunda araştırma yapacak öğrenciler için bu algılayıcı düğümleri kanımca yeterlidir. Hatta çalışmak isterseniz beklerim.
Bir yazılım-donanım işbirliği sürecinde çalışmamış ve gerçekten bir üretim bandında yer almamış gençlerin kendilerinden emin bir şekilde gerçekten bilgisizce bazı şeyleri savunması bence haddinden fazla özgüvenden ileri gelmekte. Kullandığımız bir derleyici değil bir IDE’dir. IDE alt yapıda sdcc http://sdcc.sourceforge.net/ kullanmaktadır ki bu derleyici gömülü linux işletim sistemi kullanarak sistem geliştiren bir sürü gömülü sistem firması tarafından kullanılmaktadır. IDE ise oldukça basit ve bizim projelerimiz için yeterlidir. Hangi yazılımları kullanacağımıza neyi öğreteceğimize müsade edinde biz karar verelim. Bilgisayar mühendisliği öğrencisi için program kullanmak, bir IDE öğrenmek çok kolay işlerdir. Öğrencilerimiz istedikleri IDE’yi kullanmakta özgürdürler. Öğrencilere zaten hemen hemen herşey gereksiz gelmektedir. Örneğin artık bilgisayarların otomatik yaptığı integral işlemlerini öğreten matematik dersleri de ironik ve gereksiz olabilir. Simulasyon ortamlarına gelince, bu araçlar da yazılım geliştirme süreçlerinin bir ürünüdür. Gömülü yazılım geliştirme süreci nedir konusunda google’da bir sürü bilgi mevcuttur. Araştırabilirsiniz.
Verdiğimiz projeler ve öğrettiklerimiz bir lisans öğrencisi tarafından eleştirilebilir, anlaşılmayabilir ya da eksik görülebilir. Sizler de ilerde üniversitelerde yer alırsanız yanlış gördüğünüz şeyleri düzeltmek için mücadele ediniz. Ancak önce pişmek, olgunlaşmak, çok okuyup çok araştırmak gerek.
Buraya yazmak hem uzun hem yorucu. Bundan sonraki süreçte buraya yazamayacağım ne yazikki. Bu ve benzeri sorularınızı, düşüncelerinizi iletmek için odama gelebilirsiniz. Dediğim gibi hepinizi beklerim hatta bekliyorum.
Sayin FxDev,
>>Söylemleriniz bir çok öğretim üyesi, öğretmen hatta artık bu işin üstü dediğimiz profesörlerin görüşlerini
>>yansıtmaktadır. Maalesef günümüz öğretim elemanları teknolojinin çok gerisinde kalmışlardır. Bu elbette sizin ya >>da bir başkası için geçerli olmayabilir fakat genele vurduğumuzda durum budur.
Teknolojinin gerisinde kalmaktan kastiniz nedir anlamadim ama o belirttiginiz teknolojileri ureten sirket calisanlarinin genel olarak mezun oldugu universitelerin programlarini bir inceleyin lutfen. Birkacinin linki asagida:
Hicbirinde teknoloji ya da urun tabanli bir ders yok. Php programlara, Javaci, Webci olmanin temelleri gibi. Ha dersinizki yazilim muhendisligi farkli bilgisayar muhendisligi farkli. Asagida da dunyadaki ilk yazilim muhendisligi bolumlerinden birinin programi:
http://www.se.rit.edu/content/line-co-op-student-work-assignment-evaluation
Ben ciddi universitelerin hicbirinde teknoloji ogretilen, urun ogretilen bir ders bulamadim.
Akademiyle teknolojinin (teknoloji dediginiz sey aslinda piyasa, adini dogru koyalim) birbiriyle cok icli disli olmadigi dogrudur. Aslinda boyle olmasi da gerekir. Universite meslek ogretilen bir yer degildir. Bilgi uretmeyi, tartisma ortami yaratmayi amaclar. Mezunlarida aranmasi gereken seyler alanla ilgili temel bilgi becerileri edinmesi ve temel problemleri ozgun cozumler getirip getirmemesidir.
Bolumun bir cok eksigi var bu dogru ama bence eksikler belirtilen seylerin tam aksi istikametindeki seyler. Temel teorik dersler eksik filan denilse anlasilabilir, ama getirilen yorumlarin ve elstirilerin ben dayanak noktasini anlamis degilim.
Yazida ve cevaplarda webci olmak konusunda belirtilen seylerin hicbirisi universite egitimi icerisinde yer almaz. Daha oncede dedigim gibi bunlarin hepsi ilgili bulunacak iste ilk 6 ay icerisinde ogrenilir.
@Arda: Ürün tabanlı ders dediğiniz ders bu dönem benim için “Windows ile Web Programlama”. Ve içerisinde “Windows” adı geçmesine rağmen, “Windows” ile pek alakası da olmayan ve ilgi alanıma girek sunucu istemci iletişimindeki protokolleri öğernmiş oldum. Aynı şekilde yine Windows ile alakası olmayan, bir proje geliştirme sürecini yaşadım. 5 kişilik bir ekip nasıl idare edilirmiş (ya da edilemezmiş oldu daha çok), proje geliştirme sürecinde çıkabilecek sorunlar neler olurmuş, sunum nasıl yapılırmış gibi şeyleri öğrendim. Brinici elden gereksinim analizi yaptık ve adında “Windows” geçse bile ben bu dersten sırf “piyasa” ile alakalı olmayan da onlarca şey öğrendim. Açıkçası ders programlarına açık bakmadım ama eminim bunların karşılığı olan ama adında “Windows” geçmeyen dersler başka üniversitelerde de vardır. Biz nesneye dayalı analiz ve tasarımda da güya gereksinim analizi yaptık. Ama kafadan. Şunu şöyle yapalım, bu böyle güzel olur diye. Bunu birinci elden yapmak ayrı bir tecrübeydi.
Öte yandan bu konuyla pek alakalı olmayan giriş paragrafını geçersek, şu dil şöyledir şu dil böyledir gibi her dili ayrı ayrı göstermek (her ne kadar benim hoşuma da gitse) akademik olmadığına katılıyorum. Ama eğer yazımı okuyacak olursanız tekrardan, yazının bunla alakası olmadığını göreceksiniz.
Yazının “mikrodenetleyiciler dersi çok gereksiz ve saçma” ile alakalı olmadığını da göreceksiniz. Sinan hocaya yazdığım yorumda da göreceksiniz. Bu yazının amacı şudur:
1- Niye bir dönem önce zaten öğrendiğimiz şeyleri tekrarlıyoruz? Başka bir şey görsek?
2- Niye yarısından fazlası kopyala yapıştır olan bu yüzden vakit kaybından başka bir şey olmayan bir ödev veriliyor? Bunun yerine geçen dönemki assembly ödevleri gibi öğretici ama kopyala yapıştırı olmayan daha güzel bir ödev verilmiyor?
3- Açık kaynak olsun ya da olmasın, dünyadaki tek IDE’ymiş gibi, bize hangi tuşa basarsak basalım çöken, stabilitesi bu kadar kötü olan bir IDE tanıtılıyor? Madem o derleyici açık kaynak kodlu, kullanan adam gibi hiç mi derleyici yok? Ekran görüntüsünü görüyorsunuz, her daim “Error, error…” ve simülasyonu gerçek zamanlı yapabilme kapasitesi de yok. Bu kadar başarısız bir IDE olmasa, ben de yakınmazdım.
Bu yazının amacı bunladır. Eğer bölümümüzde niye dile yönelik dersler var diye sorup bunu tartışacaksak, ayrı bir başlık açayım, onda tartışalım. Ama eğer konudan sapmıyorsak, benim derdim mikrodenetleyici falan görmek değil. Merak ediyorum zaten ben bunları. Ama bu verilen ödevi anlamlı kılmıyor hala.
Benim ödevin anlamsızlığından yakınmamı, “mikrodenetleyicileri görmek saçma”ya çekmeyelim.
alıntı:
Ödev kontrolünde hocamız bize bu ödevin bize ne kattığını sordu. Ben de açık açık söyledim kendisine: “Açıkçası üç günümüzü boşa harcamaktan başka bir şey katmadı.” Meğerse öyle değilmiş… Bu ödev bize, eğer ileride alt seviyeli işlerle meşgul bir yerde çalışırsak (mesela embedded) o zaman işlerin nasıl gittiğine dair fikrimiz olmasını sağlayacakmış.
Bu fikir bize geçen dönem sağlandı. Ha yok diyelim sağlanmadı, tekrar dediğim gibi kopyala yapıştırı az, öğretisi bol olan bir ödev ile sağlanabilirdi.
Ödevin çözümüne bakın, kopyala yapıştırı görün. Bu kadar kopyala yapıştırı yapınca, ben bunu niye yapıyorum diye sormamı mazur görün.
simdi beni iyi ve dikkatle dinleyin.eleştiri oklarim yaydan çıkmak üzere.ama bunlardan bir ders çıkarmaya çalışın.Eleştriyi hazmedebilin.Yoksa yazdiklarim sizin için birşey ifade etmeyecektir.
Sayin Arastirma ve Ogretim gorevlileri :Her eleştiri durumunda ,”öğrenci hic birseyden memnun olmaz zaten ” gibi kıt bir bakış acisiyla ne bilime ne ogrencilere bir katki saglanmaz.
“Ogrenciler eksik,ogrenciler cahil,onlar anlamiyorlar”
.Kişisel yazmiyorum bunu sinan bey.ama diger arastirma gorevlilerinden acik yureklilikle memnunmusunuz? bir kac kisi haricinde onlar kendini biliyor uzerlerine alinmasinlar,iş bulamayip aman devlete kapagi atayim memur olayim maasimi tikir tikir alayim kafam rahat etsin dusuncesinde olan insanlar arastirma gorevlisi olarak yer ediniyor universitemizde..Lablarda öğrencilerin sordugu basit sorulara cevap veremeyen,kendi asistanliginin yaptigi dersler hakkinda bile o dersin lisans ogrencileri kadar bile bilgi sahibi olmayan kac tane arastirma gorevlisine sahibiz??
Öğrencilerin eleştirilerinden faydalanmak sizin icin onur kirici bir hareketmidir?Bu sonsuz özgüven,ogrenciler bisey bilmez biz biliriz mantalitesi acaba dunyaya ve bilime at gozlukleri ile bakmaniza sebep olmus olabilir mi?Verilen odev kendisini tekrar eden ayni islemleri defalarca yazmaktan ibaret oluyorsa ve ogrenciler bu konu hakkindaki serzenişini dile getiriyorsa bundan neden rahatsiz oluyorsunuz?? daha yaratici ,daha ogretici odevler verelim bundan sonra diye dusunmek bu kadar zor mu?
IDE konusunda bu kadar ogrenci sorun yasamis.Ama sizin yaklasminiz bu IDE iyidir,hangi ideyi sececegimze biz karar verelim … simdi tekrar soruyorum bu kadar ogrenci sorun yasadi gelecek donemde şu IDE yi tanitalim derslerde demek bu kadar mı zor??
universitelerin teknolojiyle olan bağına bir Akademisyen olarak bu yaklasiminiz beni inanin cok uzdu.Bence universitelerin teknoloji olan iliskisini tekrar incelemenizi tavsiye ederim.
ornek gosterdiginiz universitelerden birisi MIT,Silikon Vadisinin temelleri MIT sayseinde atilmistir.Teknoloji üretmek ise temel hedefidir MIT nin.adi bile üzerinde.inanin cok üzüldüm yaklasiminiza.
ogrenciler eksik ogrenciler cahilde acaba bölüm akademisyenleri ne alemde? açık yüreklilikle bana bu bolumun tum akademisyenleri devletten aldigi parayi hakediyor diyebilirmisiniz?Vicdaniniz buna elverir mi?(herkes uzerine alinmasin,gerci boyle yazinca kimse de uzerine alinmayabilir )
öğrencilerin feedback lerine kulak verin.Öğrenciler IBM 360 sistemlerinin gosterildigi Sistem Programlama dersini elestiriyordu.ama yine ayni mantalitedeki arastirma gorevlileri,bunun ne kadar gerekli bir ders olduguna dair sayfalarca size bilgi verebilridi.ne oldu MÜDEK bu dersin artik günümüzde uygulama alani olmadigina ve gereksiz olduguna karar vererek müfredat tan cikardi.
8051 mimarisi bir bilgisayar muhendisi icin olmazsa olmazlardan biridir.Bir mühendis ile piyasda gezinen farkini yaratan bir cok unsurdan biridir sadece..
ancak bu ders amacina ulaşamiyorsa,eleştiriler artiyorsa ayna dönüp bakmak gerekir.bir ogrenci kalkip bu odev size ne kalkti sorusuna hic birsey katmadi diyorsa,inanin katmamistir.sorunda ogrencide degildir.ne katip ne katmadigini akademisyenler degil ogrenciler bilir…bu cevaplardan sonra donup aynaya bakip ogrencilere daha faydali neler yaptirabilirz diye dusunmek gerekir.
Teknolojiler universitelerden cikar.kişisel yaraticiligi ,yeni fikirleri onleyerek ben bunu sectim herkes bunu yapsin denilen bir kurumda ne uretim ne bilim ne de hic birsey ortaya cikmaz.
Amacim burda herseyi bildiklerini sanan ancak ne yazikki cok az bilgi birikimne sahip olan arastirma gorevlilerinin donup aynaya bi bakmalarini ogrencilere ve bagli bulunduklari kuruma nasil daha fazla fayda saglayabileceklerini dusunmelerini saglamaktir..Yapici olmasini umduugum bu eleştirilere kulaklarini tikayanlar bulunduklari yollarinda ilerlemeye devam edebilirler,zaten umutsuz birer vakaya donusmek üzereler….
‘de, da’ eki nasıl yazılır?
Almanya’da nasıl ehliyet aldım?
Almanya’dan kalıcı oturuma izni (niederlassungserlaubnis) nasıl alınır?
Harici monitör parlaklığı klavye ile nasıl değiştirilir?
Almanya’da nasıl ehliyet aldım?
Bir şirket neden uzaktan çalışmaya (remote working) izin verir?
-de -da eki ne zaman ayrı yazılır?
Almanya’ya gelmek için yapılan bürokratik işlemler