Yazılım eğitimi ne olmalı, ne olmamalı

Blogda daha önce eğitim konusunda yazmıştım. O yazıda ülkenin eğitim sisteminde gördüğüm yanlışları ve eğitim kavramını incelemiştim kendimce. Son 3 yıldır yazılım eğitmeni olduğum için bu yazıda yazılım eğitimi konusunda düşündüğüm idealleri yazdım. Teknik olarak bir eğitim fakültesi mezunu değilim. Bu yüzden eğitim konusunda şunlar şöyle olmalı şeklinde fazla önerim yoktu. Fakat yazılım eğitimi konusunda 100 'lerce saat kendini geliştirmeye harcamış ve ayrıca 100 'lerce saat eğitim vermiş bir kişi olarak sanırım yazılım eğitimi nasıl olmalı konusunda birşeyler yazabilirim. 6 ayda yazılımcı olunur mu sorusuna kişisel bakışım da bu yazının sonunda :)

Fakat öncelikle konuyu ne olmamalı sorusunu sorarak düşüneceğim. Çünkü son yıllarda yazılım çok popüler bir alan haline geldi. Çok hızlı yayıldığı için insanlar yazılımın basit bir alan olduğunu veya herkesin rahatça öğrenip yazılım geliştirici olabileceğini düşünmeye başladı. Bu çok yanlış kanıyı da yazılım başlıklı yazımda yazmıştım. Yazılım işi yapmak kadar yazılımcı yetiştirmek de bir marifettir. Bir düşünce sistematiğini oturtabilmektir. Ama önce bu çok popüler olan alanda yazılım eğitimi başlığı altında yapılan yanlışlara bakalım.

Ne olmamalı?

Günümüzde 1. sırada gördüğüm en büyük sorun bir zaman kısıtı veya sınırı koyulması. Kimine sorsanız 100 saat, bazılarına göre 1 ay, kimine sorsanız 3 ay, kimine göre 6 ay veya bazılarına göre 1 yıl. Bence yazılımcı olmanın belli bir saat hedefi olmaz, minimumu olur. Bu süre ise yazılım dilinin doğasına göre değişir. Bu eğitmenin anlatma kabiliyeti ile değil alan kişinin detayları alabilme kabiliyeti ile ortalama belirlenecek bir süredir. Bu süre sadece bilgi iletme süresi de değildir. Tecrübe aktarma, hatalar yapma ve sorgulamaların bütünüdür. Bu yüzden dünyanın en zeki insanı için bile yaşanılması gereken belli bir süre vardır.

Sorun 2. Eğitim sonunda beklediğiniz yazılımcılık hedefi nedir? Her yerde yazılım eğitimi var ama sonunda sizi hangi seviyede yazılımcı seviyesine çıkarmayı amaçladığını genelde belirtmezler. Onun yerine iş sahibi olmayı öncelerler. Çünkü hiç yazılım deneyimi olmayan bir insanı senior seviyesine çıkarmak kelimenin tam anlamı ile imkansızdır mesela. Mid level 'dan senior 'a veya yeni başlayan yazılımcıyı mid level 'a çıkarma hedefleri koyulabilir. Hedefsiz gemiye hiçbir rüzgar yardım etmez.

Sorun 3. Proje bazlı yazılımcılık eğitimi sadece kod yazma deneyimi katar. Maalesef proje yaparak yazılım öğrenileceğini düşünen büyük bir kitle var. Bir proje üzerinde fikir üretmeden yazılımcı olunmaz evet ama fikir üretme yeteneğini kazanmadan da proje yapılmaz. Yani yolu tersten gidiyorlar aslında. Sadece belli domain 'lerin projelerini yapabilme ve belli case 'leri çözebilme yeteneği kazanıyorlar. Cephanelik biriktirmek yerine savaş stratejisi konuşuyorlar ve savaş başladığında farklı bir stratejide ellerindeki cephanelik işe yaramıyor.

Sorun 4. Kütüphane bazlı yazılımcılık. Sık sık framework yada kütüphane kullanan dillerde bu durum çok ortaya çıkabiliyor. Bir eğitmen kendi bildiği kütüphaneleri derinlemesine anlatıp yazılım dilini esgeçebiliyor. Yazılımda kütüphane çok büyük oranda kullanılır ama amaç kütüphaneleri kullanmayı öğrenmek değildir. Üzerinde fikir yürütebilecek seviyeye gelmektir. Bazen bir eğitmen sadece birkaç kütüphane bildiği için eğitim veriyor gibi görünebiliyor. Bu da kalıcı olmuyor tabi ki. Zaten eğitmenin bir hatası daha var.

Sorun 5. Eğitimcinin gözlüğü. Bir yazılım eğitimcisi olarak benim de kendi bilgim ve tecrübem belli bir yere kadar var. Benim de belli bir algım tabi ki var. Fakat bunu genel-geçer gerçeklermiş ve her zaman her yerde uygulanması gerekirmiş gibi yansıtmamalıyım. Bu yüzden çoğunlukla "bu benim düşüncem" veya "ben bu şekilde gördüm ama başka yollar da var" gibi açıklarım. Eğer eğitmen bilinçli değil ise size sadece kendi dünyası kadar ve bakış açısından göründüğü şekli ile bir yazılım tecrübesi çizer.

Sorun 6. Empatisiz eğitimci. Buradaki sorun eğitimcinin bildiği şeylerin kendini öğrencilerden çok daha ileriye götürdüğüne inanması ve kendisinin de bir zamanlar benzer soruları sorduğunu ve benzer sorunları yaşadığını unutmasıdır. Karşıdaki kişi acaba bu soruyu neden soruyor diye anlamak yerine "neyi anlamadın" diye sormak yanlış oluyor. Acaba farklı şekilde mi anlatmalıyım diye düşünmek gerekiyor. Bildiklerini aktarmanın bile sanatı vardır, sadece bilmekte eğitmen olunmaz.

Ne olabilir?

Bu başlık altında kesin konuşmamaya çalışacağım. Çünkü yazılım dilleri de kendi içinde çeşitlidir epeyce ve bunlar farklı mantalitelere sahiptir. Benim kendi bildiğim yazılım dilleri ile birebir uyumlu olmayan dillerin aynı sistematik ile öğretilmesi de doğru değildir. Fakat yine de bazı genel kaideler var diye düşünüyorum.

Eğitmen sabırlı olmayı, dinlemeyi, empati yapmayı bilmelidir. Soru sormaktan çekindiğiniz bir eğitim, eğitim değildir. Eğitmen ise gelebilecek her soruya açık olmalıdır. Zaten konuyu bilmeden sorulacak olan soruların da anlamlı olması beklenemez. Her zaman aklınızın bir köşesinde "bu soru geldi ama acaba ben doğru biliyor muyum" sorusu olmalı ve hatta bunu bazen öğrencilere bile yansıtabilmelisiniz. Yani öğrenci - eğitmen arasındaki ilişki o kadar sağlam olmalı ki, öğrenciler öğretmenin aslında bilgisiz olduğunu değil, doğruyu bulmaya çalıştığı için kendinden şüphe duyduğunu düşünmelidir.

Tabi eğitmenin kendini sadece gerekenleri öğreneyim yeter düşüncesi ile geliştirmemesi gerekir. Önce kendisi yapmalıdır ve detaylardan sıkılmamalıdır. Bu benim ne işime yarayacak diye sorarak konuların bazı kısımlarını kesip atmak sadece yazılım geliştiricinin gösterebileceği bir yaklaşımdır. Eğitmen detaylarda boğulmamak kaydı ile sürekli merakla ve pragmatist olmadan öğrenebilendir.

"Bu iş için şu kodu yazarız" yerine "bu kod şunun gibi işler için var" diyebilmek gerekiyor. Sonra "bu kod böyle olmasa idi yerine nasıl bir alternatif olabilirdi" diye gösterebilmek gerekiyor. Bunlar çok teknik ve sıkıcı gelecektir ama zaten sadece kod yazarak yazılımcı olunabilse idi, emin olun milyonlarcası olurdu şu anda ortalıkta. Amaç yazılım dilinin de felsefesini anlamak burada. Gerektiği yerde yolunuzu kaybetmeden kendi başınıza projede veya kodlarda yol alabilmelisiniz. Yani günün sonunda kendi ayaklarınız üzerinde durabilmeniz gerekiyor.

Bağlantılar kurmak ve sebepler sunabilmek gerekiyor. Çünkü günün sonunda bunu neden yapıyoruz sorusunun cevabı "proje yapabilmek için" değil "gerektiğinde yazabilmek için" dir. İşte nerelerde gerekebilir sorusuna az da olsa cevap verebilmek gerekiyor. Eğitimci sadece ezbere öğrenip öğretmemeli. Hayatta karşımıza hep seçimler veya sorunlar çıkar ve buralarda belli bir düşünce sistematiği ile kararlar veririz. İşte eğitim sonunda da bu şekilde kendine güvenen, kendi çıkarımlarını yapabilen öğrenciler yetişmesi gerekiyor.

Öğrenciye söz vermek, yerine göre zorlamak, yerine göre sorumluluk vermek gerekiyor. Ödevler ve sınavlar ile sürekli sıkıştırmak gerekiyor. Bu kısmı yanlış anlamayın, bu ödev-ceza temelli bir eğitim için değil. Tam aksine öğrenci ile ilgilenip kendini fark etmesi, görmesi ve eksiklerin giderilmesi için özveri üzerine kurulu bir sistem. Çok kalabalık sınıflarda kimsenin derdini dinleyemeden eğitim pek anlamlı olmayabilir. Yerine göre ödevler üzerinde konuşulur, yerine göre kodlar üzerinde yapıcı eleştiriler yapılır. Yerine göre beyin fırtınası yapılır. Zaten bana sorarsanız yazılım eğitiminde eğitmen kadar öğrenciler de konuşuyor olmalıdır.

Yazılım dillerinin genellikle bir arka planı oluyor. Veya java gibi dillerin üzerine kurulu olduğu JVM, C ve C++ gibi konular var. En başta bir yazılım dili neden vardır diye bir sorumuz da var. Bu işin biraz felsefesini yapmadan yazılımcılığı sadece kod yazmak olarak görmek veya yazılımı sadece belli projeleri kodlara dökmek gibi görmek de saçma oluyor.

Bir soruya cevap veremeyen eğitimci direkt olarak kötü eğitimci demek değildir. Yazılım herşeyi bilebileceğimiz bir alan olmadığı için herkesin kendince bazı eksikleri çıkacaktır. Bu durumda kafadan atmak yerine dürüst bir şekilde, "bu saçma bir soru" diye triplere girmeden, "görmemiştim hiç, hadi beraber bakalım" diyebilmek gerekiyor. Hadi beraber bakalım kısmı önemli. Çünkü yerine göre realtime 'da siz de birşey öğrenebilir, araştırabilir veya çıkarımlar yapabilirsiniz. Bunu da beraber yapmanın tecrübesi kalıcı olacaktır.

Yukarıda proje bazlı öğrenmenin yanlış olacağını belirttim ama bu demek değildir ki proje yapılmamalı. Tabi ki eğitim sonunda kapsayıcı ve 2 haftadan az olmayan bir proje yapılmasını anlamlı buluyorum. Bu proje aşamasında öğrencilerin kendi kendine veya 2 'şer çiftler halinde bazı sorunlara çözüm bulabiliyor olmaları gerekiyor. O seviyeye erişemedilerse geçmişte birşeyler eksik kalmıştır. Teknik ve sıkıcı olan kısımlar çok sıkıcı geçmiş ve öğrenciler kopmuş olabilir. Proje aşaması her öğrencinin "acaba ben ne anladım, ne kadar anladım" diye soracağı yerdir.

Son olarak da, yazılım öğrenmek sıkıcı bir süreç olabilir. Bir sürü teknik detay ve sabahtan akşama kadar konuşan bir hoca ile aylar geçirmek bana zor geliyor valla :D Ama 3 ay eğitim vermekten hiç sıkılmıyorum. Zaten sorun öğrencilerin sıkılacak olması. Bu yüzden uzun soluklu ilişkiler kurabilmek ve yerine göre ders dışı motivasyon faaliyetleri de yapabilmekte fayda var.

Kolay mı eğitim vermek ? :)

Bana sorarsanız iyi bir eğitmen, iyi bir yazılım geliştiriciden hatta yazılım mimarından çok daha kapsamlı bir yetenek ve kalifikasyon setine sahip olan kişidir. Eğitmenin en büyük ölçücüsü öğrencileridir. Çok bilip anlatamamak, çok anlatıp aktaramamak, çok aktarmaya çalışırken kırıcı olmak veya ilişki kuramamak gibi türlü türlü sorunlarımız var.

Bir de 6 ayda yazılımcı olma sorunsalımız var. Günümüzde çok kullanılan .Net, Java ve Python yada Javascript + Framework deneyimini ele alırsak, hiç kimse 6 ayda yazılımcı olamaz. Ancak sektör içinde zaten tecrübesi olan birisi ise 6 ayda kendi rayında gidebilecek bir tren kıvamına gelebilir. Onun ön koşulu ise ideallere uygun bir eğitimden geçmek ve bunun 1-2 ay pratiğini yapmış olmaktır. Hiç yazılım bilgisi olmadan temel mühendislik derslerini almadan bir kişinin yazılımcı olabilmesi, çok fazla çaba ve emek göstererek 1 yıl kadardır. Eğer kendi kendinize youtube 'dan bakarak yazılımcı olurum derseniz size en az 2 yıl gerekiyor. Bu sürede de zaten rakipleriniz sizden hızlı ilerleyecektir. Yani yazılım eğitimsiz olmaz, henüz bunun kimse farkında değil.

Son bir kişisel görüşüm daha var. Bir eğitimciyi en çok yoran şey anlattığı şeyin tekrar soruluyor olmasıdır bence :) Yani öğrenme aşamasında saçma soru yoktur evet ama üzerinden geçilen, üzerinde zaman harcanan konunun aynısı sorulmamalı sanki :D Bu pek sık gelmiyor benim başıma ama aynı şeyi tekrar etmek mental olarak yorabiliyor. Eğitmenlik sabır işidir sanırım en çok. Detaylara bakmak, önce kendini eğitmek ve anlatmaya meraklı olup özverili olabilmek diye özetleyebilirim. Bir sonraki yazıda görüşmek üzere :)


Bir yorum yazabilirsiniz