- Resmî eğitim, beceriyi verimli biçimde aktarmakta yararlı olsa da beklenmedik problemleri çözmek için gereken sezgiyi geliştirmede sınırlı kalır
- Amaçlı, tekrarlı deneme-yanılma (algoritma), gerçek dünyadaki başarısızlık ve düzeltme süreçleri üzerinden ustalığı en çok artıran etkendir
- Gerçek örneklerde Linus Torvalds, Margaret Hamilton ve daha birçok kişi başarısızlık yaşayıp bunları aşarak üstün yetkinlikler geliştirmiştir
- Mentorluk önemli bir hızlandırıcıdır, ancak öz yönelimli deneyler ve doğrudan deneyim nihai gelişimin merkezindedir
- Çarpıp kırılarak sorunları bizzat çözmeye dayanan hedef odaklı deneyler, gerçek yetkinlik artışının temelidir
En İyi Yazılım Mühendislerini Yetiştiren Güç: Amaçlı Deneme-Yanılma
Sınıf Efsanesi
- Resmî eğitim, değerli bilgiyi aktarmada avantajlıdır ancak ölçeğe göre optimize edilmiş bir süreçtir
- Karmaşık pratik iş deneyimlerini iyi rafine edilmiş prosedürlere dökerek bir dönem içinde tamamlanabilecek biçimde sunar
- Bu süreçte iş hayatı için gerekli temel beceriler edinilebilir, ancak beklenmedik krizlerde problemi sezgisel olarak çözme kapasitesini inşa etmede sınırlar vardır
- Özellikle gece 3'te gerçek bir servis problemi çıktığında, sınıfta öğrenilen reçeteler tek başına çözüm için yetersiz kalır
Bizzat Çarpışarak Öğrenilen Gerçek Gelişim
Örnek Vakalar
- Linus Torvalds, MINIX'i yeniden yazarak Linux'u yarattı
- Margaret Hamilton, Apollo projesinde kod sorunlarını doğrudan gerçek zamanlı düzelterek modern güvenilirlik anlayışının temelini attı
- Sayısız açık kaynak maintainer da kendi dizüstü bilgisayarlarını bozup yeniden düzelterek gelişti
- Bu kişiler önce adım adım dersler dinlemedi; derin yetkinliklerini, başarısızlık ve bunun gerçek etkileri sayesinde kazandılar
Deneme-Yanılma Neden Reçeteleri Geride Bırakır
- Geri bildirim döngüsü anlıktır. Log'lardaki crash'leri analiz etmek, quiz'lerden çok daha hızlı öğrenme sağlar
- Edge case'ler gerçek ortamda doğal biçimde ortaya çıkar ve ders materyallerinin hayal bile edemeyeceği kullanım senaryolarıyla karşılaşılır
- Zor çözülmüş problemler hafızaya derin biçimde kazınır. Kas hafızasına dönüşür
- Var olan bir kılavuz olmadığında yaratıcılık patlayıcı biçimde devreye girer
Mentorluğa Yeniden Bakış: Tamamlayıcıdır, İkame Değil
- İyi bir mentor, hızlı geri bildirim verir ve bakış açısını genişletir; ancak deney ve tecrübenin asıl öznesi nihayetinde kişinin kendisidir
- Code review, deney sonuçlarını paylaşma imkânı sunduğu için değerlidir ama doğrudan deneyimin yerine geçmez
Öz Yönelimli Deney Alışkanlığı Geliştirmek
- İnsanı biraz tedirgin eden bir yan proje denemek
- Her şeyi ölçümleyerek, başarısızlık durumunda analiz edilebilir veri elde etmek
- Framework kısıtı ya da 48 saatte tamamlama gibi kısıtlar koyarak yaratıcı çözüm üretme becerisini geliştirmek
- Kodu herkese açıp dış doğrulama almak
- Haftalık olarak retrospektifler hazırlayıp başarısızlığın nedenlerini ve öğrenilenleri kaydetmek
Özet
- Mentorluk, kurslar, bloglar ve benzerleri birer hızlandırıcıdır; ancak gerçek yetkinlik, sahada yoğun biçimde mücadele edilen süreçte birikir
- En iyi mühendisler, özgür ve amaçlı deneme-yanılmayı tekrar ederek gerçek problem çözme ve gelişim sağlar
- Bu süreçte kazanılan deneyim, gelecekteki kişinin kendisi için en büyük varlığa dönüşür
1 yorum
Hacker News görüşü
Ben de kendi kendini yetiştirmiş bir geliştirici olarak kariyerimin büyük kısmını büyük şirketlerde CS mezunu meslektaşlarla geçirdim
Benim deneyimime göre, kendi kendini yetiştirmiş geliştiriciler yeterince zekiyse sonunda verilen problemi çözüyor
CS mezunları ise tamamen yabancı bir alanda çoğu zaman denemeye bile yanaşmıyor (tabii kişilik farkları var, bence yaklaşık %85’i böyle)
Yüksek belirsizlik karşısında ilerleyemiyorlar
Sonuçta CS mezunları büyük şirket ortamına daha uygun; değiştirilebilir dişliler gibi kalıplara göre çalışıyorlar
Kendi kendini yetiştirmiş geliştiriciler ise hep yenilik yapıyor, verimsiz tekrarları azaltacak şekilde çalışıyor ve bu özgün tavır çevredekileri tedirgin ediyor
Ama böyle kendi kendini yetiştirmiş insanlar çok daha üstün sonuçlar üretiyor
Geliştiricilerin çoğu mükemmel kodun kendisinden çok işini korumayı ve kaygıyı azaltmayı önemsiyor gibi görünüyor
Resmî eğitim almış birçok mühendis de yeni problemleri hevesle çözmeye çalışır
Bu, kendi kendine öğrenme / resmî eğitim meselesinden çok merak, çalışkanlık, yaratıcılık, zeka gibi kişilik özellikleriyle ilgili
Kendi kendini yetiştirenlerin başarılı olabilmesi için bu özelliklere zaten sahip olması gerekir; bu yüzden o grupta daha belirgin görünüyor olabilir
Resmî eğitim almış bir mühendis bu özelliklere de sahipse, iki grubun da önüne geçen kişi çoğu zaman o oluyor
Sanırım en büyük fark kişilik farkı
Benim gibi kendi kendini yetiştirmiş bir geliştirici, çalışkanlığını öne çıkarıyordu
Büyük resmi teknik olarak çok iyi görmüyordum ama bunun yerine ekipte en çok çıktı üretmeye çalışıyordum
Birkaç gün içinde üç ayrı prototip yapıp sahada test ediyordum
CS mezunu meslektaşlarım ise whiteboard üzerinde tasarımı bir kez yapıp gerçek kodu da bir kez yazıyordu
Aynı işe iki yaklaşımın da uygulandığı bir durum olmadı, o yüzden hangisinin daha iyi sonuç verdiğini söylemek zor
Benim kafamda benim yöntemim “sahada test edilmiş” yöntem gibi geliyordu
CS yaklaşımının daha ideal kabul edildiği de doğru
Ama CS mezunu mühendislerin mentorlukları sayesinde çok şey öğrendiğimi düşünüyorum
Sektörde yaklaşık 10 yıl deneyim kazanınca, başlangıç noktan ne olursa olsun sonunda benzeşiyorsun ve “doğru cevap” konusunda benzer sezgiler gelişiyor
Belki biraz romantikleştirmiş ya da genellemiş olabilirim; başkaları yanıtlarla bunu tamamlar diye umuyorum
Katılıyorum
CS müfredatlarının çoğu gerçek işten epey kopuk, bu yüzden diploma tek başına yetkinliğin anlık göstergesi değil
Ama CS mezunlarının %85’inin yabancı problemleri çözemediği iddiasına kesinlikle katılamıyorum
Eğer bir CS derecesinin bir meziyeti varsa, mühendislik hattının çok yüksek zihinsel kapasite gerektiren son derece ağır dersler içermesi
Bu kadar dersi geçebilecek insanların asıl iş geliştirmede yetersiz kalacağını düşünmek zor
Gerçekten zor geliştirme alanlarına bakarsan, önemli bir kısmında ileri CS derecelerine sahip insanlar olduğunu görürsün
Yazılıma derin ilgi duyanlarda bu özellikler ortaya çıkıyor gibi ve bunların arasında çok sayıda CS mezunu da var
Benim deneyimime göre kendi kendini yetiştirenler doğal biçimde eleniyor
Yani yabancı problemleri de çözemeyen biri zaten işe alınmıyor
Formal eğitimden gelenler ortalama ya da ortalamanın üstünde oluyor ama ezici değiller
Her şeyi kendi başına çözmeyi öğrenmiş ve bunu üniversite eğitimiyle de doğrulamış biri gerçekten çok güçlü bir pratik güç gösteriyor
Bence mesele öğrenme biçimi değil, “tutku”
Motivasyon zayıfsa öğrenme biçimi ne olursa olsun sınırlar açıkça ortaya çıkıyor
Bu konunun sayısal olarak tartışılması da zor
Resmî eğitim temel kavramları (matematik, donanım, OS, compiler vb.) sağlam biçimde oturtabilir
Kendi kendine öğrenme ise hedef odaklıdır; bu yüzden temeller gözden kaçabilir
İnsan neyi bilmediğini bile bilmiyorsa, iyi bir mentorun (profesör, iyi bir kitap) varlığı büyük zaman kazandırır
Ben dahil birçok mühendis hem resmî hem gayriresmî öğrenme yollarından geçti
Tutku varsa insan kendi başına bir şeyler üretmeye devam ediyor ve resmî öğrenmenin dışında da çeşitli deneyler yapıyor
Gerçekten üstün mühendisleri ayıran şey eğitim biçimi değil, açık ve güçlü bir tutkudur
Linus ve Margaret gibi örnekler de sonuçta olağanüstü öğrenme iştahına sahip insanlardı
Ben de kendi kendini yetiştirmiş bir programcı olarak kesinlikle katılıyorum
80’lerde 8-bit bilgisayarlar döneminden beri kendi başıma öğrendim, üniversiteye de gitmedim
19 yaşımda ilk tam zamanlı programlama işimi aldığımda zaten 9 yıldır programlama yapıyordum
Çoğu insan üniversiteden mezun olurken ben neredeyse 15 yıldır kod yazıyordum
Böyle bir tutku ve itici gücü görmezden gelmek zor
Şimdi bile yaklaşık 40 yıldır aynı hisle yazılımdan keyif alıyorum
Bir şeyler üretmek eğlenceli geliyor; hâlâ makaleler okuyorum, sektörü takip ediyorum ve hâlâ çok fazla kod yazıyorum
Yalnız, kendi kendini yetiştirenlerin temellerden yoksun olduğu varsayımı biraz üzücü
Aslında pek çok kendi kendini yetiştirmiş kişi akademik tarafı da gayet ilgiyle derinlemesine inceliyor — sanırım bu, alana bağlı
Derin çalışmaya ayrılacak zaman daha az olabilir ama onlarca yıllık deneyim biriktiğinde, yalnızca okula gitmiş kişilerden daha sağlam temellere sahip olanlar da çok oluyor
İşe alım ve işten çıkarma tarafında da çok deneyimim oldu; kendi kendini yetiştirenler çoğu zaman daha iyi sonuç veriyordu
Sonuçta çok daha fazla “yapmış olma” zamanı var — tutku sonunda öğrenme hacmini ileri itiyor
“İnsan neyi bilmediğini bilmezken, birinin onu verimli biçimde yönlendirmesi çok yardımcı olur” kısmına gerçekten katılıyorum
Ben resmî ve gayriresmî eğitimin ortasında bir yerdeyim
İleri düzey discrete math ve linear algebra almadım, bu yüzden arka plan bilgimde büyük boşluklar var
Hangi anahtar kelimeyi aratmam gerektiğini bile bilmiyorum
Bazı alanlarda gerçekten birinin rehberliği şart
30’larımın sonlarında vector math programımı doğrulayacak bir tutor bulmak gerçekten çok zordu
Tutku kendi kendine öğrenmeyi ileri taşır, ama sınıf ortamında birileri zaten sürekli rotayı tuttuğu için buna görece daha az ihtiyaç duyulabilir
Bir de sadece “amaç odaklı” kendi kendine öğrenme yok; sistemin kendi mantığını anlamayı hedefleyen kendi kendini yetiştirenler de var
Birini zorla su kenarına götürsen bile, onun kendi başına su kenarına gitmiş olma deneyimi olmaz
Bence tutarlı fark şu: kendi kendini yetiştiren herkes en az bir kez oraya kendi gücüyle gitmiştir
Ben karma bir vakayım: hem resmî eğitim hem kendi kendine öğrenme
Üniversitede çok ders aldım ama sınavları yeterince iyi verip diploma almadım
Kalanını kendi başıma öğrenebilmem, derslerin bana bir temel sağlamış olmasındandı
Üniversite derslerinin gerçekten harika olduğunu düşünüyorum
Hiçbir şey bilmezken C’nin socket API’si, bash projeleri, distributed systems, data structures, algorithms gibi konulara tek başıma asla dalmazdım
Gerçekten de birçok kendi kendini yetiştirmiş kişiyi ya da bootcamp mezununu mülakata aldım; bunlar genelde yalnızca aşina oldukları alanları kazıyor ya da akademik sorularda kolayca dağılıyor
Buna karşılık üniversitede düzgün kod yazmamış biri de çok zayıf oluyor ve üniversiteye gidiyor olsa bile daha önce öğrendiklerini unutuyor
Üniversiteye gitmeden önce bir miktar kod yazmış olmak en iyi kombinasyon gibi geliyor
İnsan kendi başına çarpıp zorlandığı şeyleri yaşamalı ki üniversite derslerinde sunulan teorik ve zarif çözümleri gerçekten içselleştirebilsin
RAII gibi kavramlara, bellek yönetimi hataları yüzünden ne kadar çok canın yandıysa o kadar derinden bağ kurabiliyorsun
Bootcamp mezunlarıyla kendi kendini yetiştirenleri ayırmak gerekir
Bootcamp’lerden de yetenekli insanlar çıkabilir ama benim tanıdıklarımın çoğu kendi başına öğrenemediği için üniversiteye ya da başka alanlara yönelmeye çalışırken, daha ucuz bir alternatif olduğu için bootcamp seçmişti
Eskiden bootcamp diye bir şey de yoktu ve ben online kurslardan ya da geleneksel öğrenme yollarından da uzak duruyordum
Ben havalı bir şeyler yapmak istiyordum; ders kitabını takip edip tekrar denemektense problemleri bağımsız biçimde çözmek daha heyecan vericiydi
Çocukken C’yi kendi başıma öğrenmemin sebebi de, mevcut kaynaklar ya da kodlarla yapılamayan şeyler olması ve o etkileyici sonucu çok istememdi; bu yüzden forumları kazıdım, doküman okudum ve deneme-yanılmayla sonuca ulaşmak zorunda kaldım
Bence öğrenme yönteminden çok öğrenme isteğinin gücü daha önemli
Üniversiteye gitmeden önce zaten C ve socket API konusunda oldukça rahattım, hatta yazılım teslim etmişliğim de vardı
Lisedeyken C64 için oyun satıp para kazanan bir arkadaşım da vardı
İkimiz de yeni mezun birinden çok daha ileride pratik kod yazma becerisine sahiptik
Benim eksiğim calculus, linear algebra, discrete math gibi teorik taraftı; data structures ve algorithms tarafında da bilmediğim boşluklar vardı
CS programı bu boşlukları doldurdu ama kod yazma becerimi artırmadı
Programlamayla ilgili dersler hiç zor değildi; beni asıl zorlayan matematik ve teori dersleriydi
CS programı beni daha dengeli bir mühendis yaptı ama daha iyi bir geliştirici yapmadı
Eskiden üniversitedeyken, CS bölümünün atmosferi bugün üniversitenin artısı diye anlatılan şeylerin tam tersiydi
Ben de bu nedenle üniversitede CS bölümünü seçmedim (şu an ABD’de bir teknoloji şirketinde senior developer’ım) ve o dönemde CS, en yüksek notlu öğrencileri alan seçkin bir bölüm olmasına rağmen başarısızlık oranı, işsizlik oranı ve hoca atmosferi bakımından en kötü durumdaydı
Elbette üniversiteden çok şey kazananlar oldu ama gerçeklik her yerde böyle değil
İş hayatında karşılaştığım birçok CS mezunu iletişim, iş anlayışı ve iş önceliklendirmesi konularında ciddi zorluk yaşıyordu
Sadece kod yazabilen çok kişi vardı (onda bile zayıf olanlar dahil) ve yalnızca üniversite CS eğitimiyle iş hayatına tam hazır hâle gelmek aslında nadir bir durum
Hatta bence üniversite tarzı eğitim, “comfort zone” içinde kalmanın en tipik örneği
Üniversite derslerine erişimin ve öğrenim ücretinin kendisinin de sosyal ve ekonomik sınıf meselesi olduğunu kabul etmek gerekir
Ayrıca socket API, bash projeleri gibi şeyleri kendi başına yeterince öğrenmiş insanlar da var
Bu arada kendi kendini yetiştirenlerle bootcamp çıkışlılar tamamen farklı tipler
Bana verilen türden koşullarda (örneğin seçme usulü mülakatlarda) tökezleyebilirim ama tek başımayken gerçek problemleri gayet iyi çözüyorum
Biraz yaşlı işi gibi gelebilir ama ben de üniversitenin gerçekten çok iyi olduğu kuşaktanım
Compiler, toy OS, GPS interface gibi şeyler yapmıştık
Birkaç yıl önce başka bir okulda davetli öğretim görevlisi olarak ders verince büyük hayal kırıklığı yaşadım
Müfredat, bugünkü bootcamp’lerin birkaç yıla yayılmış ve üzerine alakasız dersler eklenmiş hâli gibiydi
Temeller neredeyse yoktu; algoritmalar dersi dışında her şey React ve yerel startup’larda popüler framework’ler etrafında dönüyordu
(Düzeltme: Müfredata bakınca gerçekten business, management, humanities, chemistry, environment, entrepreneurship, e-sports dersleri de vardı)
İnsanlar sanki kendi eğitim eksikliklerini kabullenme sürecine fazla emek harcıyor gibi geliyor
Çok iyi kendi kendini yetiştirmiş insanlar da var, çok zeki olmayan diploma sahipleri de; ama kendi deneyimime göre bir CS derecesi benim yoluma daha çok yardımcı olurdu
CS özünde yalnızca kod yazmak değildir; tıpkı ME’de olduğu gibi beklentiler ve roller mesleğe göre değişir
Makine mühendisleri de arabadaki yağ kaçağı ya da patlak lastik gibi küçük sorunlarda tamirciden daha iyi olmayabilir
Ama bu yüzden mühendislik diplomasını değersiz saymayız
Ben de başlangıçta üretim sahasında bizzat ellerimi kirletip teknisyenlerin çözemediği şeyleri çözüyordum ama bu daha çok kişisel eğilimim ve merakımdandı
Kendi kendini yetiştirenlerin iyi performans göstermesinin nedeni, tam da bu kadar güçlü motivasyon, tutku ve öz-yönelim taşıyan insanlar olmaları
Sonuçta merak, odak ve disiplin varsa, resmî ya da gayriresmî yol fark etmeksizin ortalamanın üstüne çıkılıyor
Bir de sağ kalım yanlılığı var — gerçekten sahada ayakta kalabilmiş kendi kendini yetiştiren örnekleri görüyoruz
Buna karşılık başarısız olmuş kendi kendini yetiştirenler, belki iyi bir eğitim alsalardı daha iyi durumda olabilirdi
Ben CS ve matematik eğitimini de sevdim ama çerçeve olarak bakınca kendi kendine öğrenmenin bana daha uygun olduğunu hissettim
“Sıklıkla” kelimesi sadece muğlaklığı paketleyip sunan bir ifade
Ben hem yazılım geliştiricisiyim hem de üniversitede CS dersi veriyorum
Gerçekten başarılı mühendislerin ortak noktası sonuçta “ilgi” ve “tutku”
Kendi kendini yetiştirenler doğal olarak ilgili alana güçlü ilgi duyduğu için, motivasyonları baştan doğrulanmış bir grup oluyor
Diploma sahipleri ise daha karışık bir grup — sadece diploma peşinde olanlar da var, böyle olunca teorik terimleri bilmekle gerçek beceriyi ayırt etmek zorlaşıyor
Kendi kendini yetiştirenler özünde mevcut sistemin dışına çıkıp kendi kendine öğrenmeye yetecek kadar güçlü motivasyon ve ilgi taşıyan insanlar
Bilgiyi bir tahtanın üzerindeki daire gibi düşünebilirsin
https://matt.might.net/articles/phd-school-in-pictures/
Üniversitede öğrenilen daire şaşırtıcı derecede dar ve çoğunlukla aynı müfredattan oluşuyor
Örneğin dmc algoritması gibi şeyleri öğretmeye zaman yok (en güçlü sıkıştırma algoritmalarında kullanılıyor)
Onun yerine herkes sadece genel amaçlı müfredatı tekrar ediyor
Ama bu dairenin dışına çıkan insanlar da var
Sektördeki en iyi programcılar da onlar — makalelerde rastlanan nadir algoritmaları bile bildikleri için fark yaratıyorlar
Kendi kendini yetiştirenler için de aynı şey geçerli; herkesin öğrendiği ortak dairedeki bilgi boşluklarına sahip olabilirler, bu yüzden çoğu zaman kendi motivasyonları ve alçakgönüllülükleriyle yola çıkıyorlar
Ama sahip oldukları bilgi dairesi tutkuyla organik biçimde inşa edilmiş oluyor
Bence mühendislik performansının en güçlü işareti de tam bu tutku
Başka bir deyişle, “Bağımsız biçimde ne öğrenmesi gerektiğine karar verip bunu gerçekten öğrenebildiğini zaten göstermiş bir kişi, bu tür yetenek gerektiren işlerde de üstün olur.”
Torvalds, 1991’de Linux’un ilk sürümünü yayımladığında neredeyse hiç ayrı bir CS eğitimi almamıştı
Ben de buna katılıyorum
Biz de lisans eğitiminde 68K assembly ile çok süreçli bir OS yazma ödevi yapmıştık
Bu tür deneyimler sayesinde Linux kernel yapısına ve çalışma mantığına çok daha kolay yaklaşabildim
Kernel’in ne olduğunu bile bilmeseydim başlayamazdım
Son zamanlarda deneyimim olmayan bir sayısal analiz problemini (sparse LU solver yazmak) kendi kendime öğrenmeye çalışıyorum
En yararlı kaynak, doğrudan uygulama yapmak ya da mevcut solver kodlarını sökmek değil, ilgili konuları işleyen lecture notes oldu
Dersi bütün olarak izleyince bilmediğim ilişkili kavramları da öğreniyorum
Diğer alanlarda da benzer şekilde, üniversite ders materyalleri çoğu zaman en yüksek kaliteli kaynaklar oldu
Eğer iddia üniversite eğitiminin gereksiz olduğuysa, en iyi kaynakların neden üniversite kaynakları olduğunu açıklamak zor
Bir şeyleri doğrudan yapmak en iyi öğrenme yolu deniyor ama üniversite projeleri de zaten değerlendirmede her zaman gerçek “inşa etme” kısmını güçlü biçimde içeriyor
Buna tamamen katılıyorum
Derin teknik kitaplar da harika ama onlara nasıl yaklaştığın, ne elde edeceğini tamamen değiştiriyor
Sadece teori öğrenip hiç uygulamaya dökmezsen ilgi hızla kayboluyor ve kısa sürede her şey unutuluyor
Ama teoriyi gerçek bir ihtiyaçla ya da ilgili bir işle bağlantılı şekilde öğrenirsen, bir anda doğrudan gerekli pratik bilgiye dönüşüyor
Erken dönemde kendi kendine yeterince deneyim kazanmış biri üniversiteye girip tutkusunu korursa, kısa sürede inanılmaz şeyler yapabilir
Sonuç olarak teori elbette önemli
Ama önce bir şeyler inşa edip sonra teoriyi çalışırsan, gerçek içgörünün ne olduğunu çok daha net görüyorsun