BT departmanımızda programlama tecrübesi olmayan ancak akıllı ve yetenekli bir kişi almam ve programa girmesine yardımcı olması için mevcut .Net uygulamalarını destekleyen bir giriş seviyesi geliştirici diyelim. Kesinlikle bu kişinin yapabileceğine inanıyorum ama onu hızlandırmanın en hızlı yolunu arıyorum. Bir sürü fikrim var ama başkalarının ne düşündüğünü görmek istedim. Bunun da nasıl öğrendiğine çok bağlı olacağını biliyorum, ama genel olarak konuşuyorum.
Öyleyse soru: Sizce bir geliştiriciyi geliştirmede hızlı bir şekilde hızlandırmanın en iyi yolları nelerdir (bu durumda .Net)?
Programlamayı öğrenmek isteyen herkes için genellikle aynı sırayı yazarım. Çok teorik, ama iyi bir temel oluşturuyor. Üç veya dört aylık tam zamanlı eğitim almalıdır, ancak programlama bir gecede öğrendiğiniz bir şey değildir.
Bu diziyi geçemezseniz, programlayamazsınız, bu yüzden şimdi de vazgeçebilirsiniz.
Benim kuralım: gerekirse bu üç kitaptan geçerek zorla çalışın. Herhangi bir sorunuz varsa, ancak bunu kendi başınıza anlamaya çalıştıktan sonra sorun. Eğer bu üç kitaptan başarabilirseniz, tebrikler, bir programcısınız, şimdi size 15 DAKİKA İÇİNDE Perl'i atabilirim ya da Java Eğer bu üç kitaptan geçemezsen, vazgeç, eve git, asla alamayacaksın.
Dürüst olmak gerekirse, C ve Şemayı öğrenmen gerektiğini sanmıyorum. Onlar sadece gelecekteki öğrenme için bir temeldir. Bu iki oldukça basit kitap yüzeyde çok basit (C ve Şema süper kolay dillerdir), ancak sözdizimini karıştırmak için zaman kaybetmeden gerçek programlama sanatının derinliklerine inerler, bu yüzden yeniden kablolamaya başlamak için mükemmeldirler. iyi bir programcı olmak için.
Bir kısayol alıp doğrudan öğrenmek istediğiniz şeyi (C # ve ASP.NET ile başlamak gibi) doğrudan öğrenmeye gitmeye çalışır.
Bir geliştiriciyi hızlı bir şekilde hızlandırmanın en iyi yolu onlara ilham vermek!
Herhangi bir başarı elde etmek için adayın tutkulu olmasa bile en azından meraklı olması gerekir, programlama hakkında (platformdan bağımsız olarak).
İdeal aday durumunda Joel ile aynı fikirdeyken, çok fazla teoriyi zayıf bir zihne sıkıştırmamaya dikkat ediyorum - sadece onları erteleyeceğim. İlham, meraklı ve umarım tutkulu olsalar, sihri gördükten sonra teoriyi anlamak isteyeceklerdir.
@Karudzo'ya tamamen katılıyorum - kendini başarma ve yapıcı bir inceleme çok ilham verici olabilir.
Onu hızlandırmanın en hızlı yolunu arıyorum.
En hızlı yol ona gereken zamanı vermektir , ancak bu kolayca bir veya iki yıl olabilir.
Elbette, ona basit bir dil öğretmek kolay görünüyor (C #, .NET şeyler yapacaksa), ancak bir dil öğrenmek programlamayı öğrenmek değildir.
Daha önce hiç programlamamışsa, en az bir dilin sözdizimi ve kütüphanesinin yanı sıra, diziler, bağlantılı listeler, öğrendiği dilin derleme modeli, modülerleştirme, kaynak yönetimi, paradigmalar, desenler, Büyük- O gösterimi ... - bütün enchilada. Sürmek için çok şey var ve çoğumuz sadece bu temel bilgileri öğrenmek için birkaç yıl sürdü ve daha da fazlası gerçek bir profesyonel programcı olmak için aldı.
Orada bunun birçoğunu kapsayan materyaller var ( Stroustrup'un C++ dilini öğretmektense C++ kullanarak öğreten programlama öğreten en yeni kitabı , ama orada çok fazla değil ve hepsini kapsayan bir şey değil. Bu yüzden adam öğrenmeye ve çok sayıda kitap ve makale okumaya istekli olmalıdır.
Bunu nasıl yapacağım: Buraya yapıştırmak için tam gelişmiş bir müfredatım yok. (Afedersiniz.)
Bununla birlikte, önerebileceğim, ona bir programlama dili öğretmekle başlamak, böylece hızlı bir ilk ilerleme kaydetme ve cesaret verici sonuçlar alma şansı var. Bu tür dilleri öğretmek, aşina olduğunuz birini seçmek için birkaç kitap var. Kitabın çok alıştırmaları varsa ve bunları yapmaya istekliyse, bunlara yardım etmek için çok zaman harcamak için hazırlıklı olun. Kitabın hiç biri yoksa (m), kendinizinkini önceden düşünmeye başlayın, ancak onları seviyesine/anlama hızına uyarlamaya hazır olun.
Eğer bu ilk dil ya C ya da C++, IMO değilse, bir sonraki dili öğrenmelidir. K&R, Stroustrup'un TCPL'si gibi ya da (sizin yardımınızla) dik bir öğrenme eğrisi Koenig/Moo ile başa çıkabiliyorsa bunun için iyidir. Bunu tavsiye etmemin nedeni, C veya (tercihen IMO) C++ 'ı öğrendikten sonra, C #, Java, ObjC gibi C türevlerinden herhangi birini almak nispeten kolaydır ...
Geri kalanı için ona sürekli iyi kitaplar ve makaleler akışı sağlayın. Bunların çoğunu önermemiz çok yararlı olduğunu düşünmüyorum, çünkü 1) şirketinizin kültürüne uyması gerekiyor ve 2) ona bu şeyleri öğrenmesini söylemekten çekinmeyin.
Onları .NET ile başlatmazdım. Bu hatayı çok defa yaptım. Bir işverenin zaman nedeniyle yetersiz bir programcı oluşturmanıza baskı yapmasına izin vermeyin. .NET hızlı bir geliştirme platformu olabilir, ancak geliştiricileri programlamayı öğrenmeye zorlamaz. Yalnızca C # 'da, bir geliştiricinin referans türlerine, nesne ömrüne yapıştığını, büyük bellek sızıntıları bırakacağını (evet .NET'te mümkündür) ve kötü tasarımlara sahip olduğunu göreceksiniz. Onları C veya C++ ile başlatmak çok daha iyi olurdu (muhtemelen c ++ OOP kavramlar) kullanmaları ve sonra şöyle bir şey söylemeleri gerekir: "Şimdi hafızanız güzel olmaz sizin için yönetildi, her şey nesne yönelimli idi ve tüm bu kötü işaretçilerle uğraşmak zorunda kalmadınız mı? Joel'in alayını öneriyorum CS 101 öğretmenimin bana verdiği liste buydu ve bu nedenle sayısal analizlere çarptığımda çok daha iyiydim.Bu da adayın hardal kesip kesmeyeceğini daha önce öğrenmenizi sağlayacaktır. Ayrıca, c ve c ++ 'ı aldıktan sonra, c # ve Java kitaplara giriş okuduktan sonra) otomatik olarak anlayacaksınız. Onları sadece anlamakla kalmaz, aynı zamanda c ve c ++ bilmiyordu.
Çiftler programı. Kendi kodunuzu (herhangi bir kodu) yazarken sizi gölgelemelerine izin verin. Birkaç saat içinde, kodunuzu sizin için girmelerini sağlayın, onlara ne yapmaları gerektiğini söylerken, gerekirse bile tuşa basarak tuş vuruşu yapın. Birkaç soruya cevap verin, ancak o kadar çok değil, çok yavaşladınız - sadece hepsini emmelerine izin verin. Ayrıca yazım hatalarınızı ve daha fazla hatalarınızı düşündüğünüzden daha fazla bulacaklar. Birkaç gün içinde, daha önce gördüklerine benzer görevler için hangi kodun girileceğini söyleyerek 'gezinmeye' başlayabilirler.
Bir ay içinde geliştirici olarak bildiklerimin çoğunu bu şekilde öğrendim ve birkaç yeni geliştiriciyi bu şekilde öğrettim, bunlardan biri birkaç ay sonra bir başlangıçta baş geliştirici olarak benim için devralmayı başardı. Birlikte çalışmaya başladığımızda, tek bir kod satırı yazmamıştı.
Onlara basit ama çözülmesi yararlı bir şey verin. Biraz pişirmelerine izin verin ve cilalamalarına yardımcı olun. Onları teşvik etmeye yardımcı olmak için küçük bir başarı gibi bir şey yoktur (biri programlama ile ilgilenmiyor olsa da
Ona iyi bir fikir verin (görsel stüdyolar, ekspres hala iyidir). Ona sözdiziminin ortak% 60'ını öğretin (verim, linq, numaralar, nitelikler vb. Hata ayıklayıcıda zaman geçirin (özellikle çağrı işareti). O zaman yardıma ihtiyacı olduğunda ona "msdn functionanme" google söyle ve bu onu hızlı bir başlangıç yapmak gerekir.
Ayrıca ona bir istisnayı asla yakalayıp yutmamasını da öğretin. Ona yeniden düşünmesi ya da kaydetmesi gerektiğini söyle!
Bonus: ona json verilerinin nasıl serileştirileceğini öğretin, böylece bir dosyayı kolayca okuyabilir/yazabilir. Bir db overkill ve öğrenmek için çok fazla ve onu özel dosya formatları yazma istemiyorum, ancak kabul edilebilir olarak bir dize dizisi kaydetmek/yüklemek için dosya geçişi satır türü başına bir giriş izin verebilirsiniz.
Birçok insanın bu diller için diller ve kitaplar hakkında konuştuğunu biliyorum. Ben farklıyım.
Programlama, analitik düşünmeyi öğrenmekle ilgilidir. Her şeyden önce, kişi problemin ne olduğuna dair düşünmek ve bir kağıt parçası üzerinde algo ile gelebilmelidir. Doğru düşünme tekniğini elde edebilmeleri için onlara rehberlik etmelisiniz.
Sonra dilin temelleri geliyor. Onları tercih ettiğiniz dilde başlatın. Programlamak için bir sorun verin.
Bu ilk kesim bittikten sonra, CS'nin temellerini ve Tasarım Desenlerini yapmalarını sağlayın.
Şimdi bu yeni kavramlarla önceki sorunu yeniden programlamalarını sağlayın.
Temel olarak başlayın: değişkenler, döngüler, döngüler, döngüler, diziler için, ona temel bilgileri öğretin, ekrana yazdırın, basit bir matematik yapın. Yöntemlere ve temel OOP'a geçin, bir sınıfın nasıl oluşturulacağı gibi şeyler, ona neden sadece nasıl olduğunu değil.
Dil önemli değil, bildiğiniz bir şeyi seçin ve bu oldukça soyut (Java, python vb ...) bellek yönetimi gibi şeyler için endişelenmesine gerek yok, işaretçiler vb ... Özyineleme, hanio kuleleri veya özyinelemeli arama dizinlerinin temellerini öğretin.
Programlamayı öğrenin Ruby programlama iyi ve ücretsiz bir kaynaktır. Eğlenceli, kolay ve eğlenceli hale getirin.
Ona bazı zorluklar verin ve sorunu kendi başına çözmek için nasıl kaynak bulabileceğini öğrenin.
Ona cevapları nasıl bulacağını ve kendi kendine yeterli olacağını öğretebilirsen, doğal olarak iyi programlamayı öğrenir. Eleştirel düşünme ve beceriklilik bir programcı için iki anahtar beceridir.
Günün sonunda, tutku/ilgi kesinlikle hızlı bir şekilde öğrenmede ne kadar başarılı olacakları konusunda kilit bir faktör olacaktır. Eğer "böceğe" sahip değilse veya onu yakalamıyorsa, bu yavaş ve/veya acı verici bir süreç olabilir. Böceği yakalarsa, geç saatlere kadar, çalışma saatleri dışında, hayatının zamanını geçirir.