Programlama deneyimi olmayan parlak bir kişiye nasıl programlanabileceğini nasıl öğretebilirim? [kapalı]


100

BT departmanımızda programlama tecrübesi olmayan ancak akıllı ve yetenekli bir kişi almam istendi ve mevcut .Net uygulamalarını destekleyen bir giriş seviyesi geliştiricisi olduğunu söyleyebiliriz. Bu kişinin başarabileceğine kesinlikle inanıyorum ama hızlanmasını sağlayacak en hızlı yolu arıyorum. Bir sürü fikrim var ama başkalarının ne düşündüğünü görmek istedim. Bunun nasıl öğrendiğine de çok bağlı olacağını biliyorum, ama genel olarak konuşuyorum.

Öyleyse şu soru: geliştiriciyi hızlı bir şekilde geliştirmeye hızlandırmak için geliştirici olmayan biri olmanın en iyi yolu nedir?



Ben duydum Python Hard Way bilgi olmayan programcılar yola çıkıp için iyidir.
john2x

Small Basic'e bir göz atın . Çok basit, ama yeni başlayanlar için kullanışlıdır.

3
Programlamanızı, hakkında konuşacağınız hiçbir şeyden zihinsel bir modeli olmayan birine açıklamanın faydasız olduğunu düşünüyorum. Hangi dilde konuşacağınızı öğrenin ve eğiticilere vurmalarını ve ellerini kirletmelerini isteyin. Mücadele edeceklerdir ve siz ikna edip öğrenme sürecini hızlandıracaksınız.
Çörek Adam

1
Ondan Edgser Dijkstra'nın | Bilgisayar bilimini öğretme zulmü | üzerine okumasını rica ediyorum, bu makalenin nedenini öğrenmesini sağlayın, bu nedenle genel olarak kabul görmüş beyin hasarına karşı dikkatli olabilir. programlama öğretmenin yolları
vfclists

Yanıtlar:


125

Programlamayı öğrenmek isteyen herkes için genellikle aynı sırayı yazarım. Çok teorik ama iyi bir temel atıyor. Tam zamanlı çalışma üç veya dört ay sürmelidir, ancak programlama bir gecede öğreneceğiniz bir şey değildir.

Bu diziyi geçemezseniz, programlayamayacaksınız, bu yüzden şimdi vazgeçebilirsiniz.

  1. Charles Petzold'un kodu.
  2. C Programlama Dili, K & R
  3. Bilgisayar Programlarının Yapısı ve Yorumlanması, Abelson ve Sussman.

Benim kuralım: Gerektiğinde, bu üç kitapta saf kuvvetle çalışın. Sorularınız varsa, ancak kendi başınıza çözmek için uğraştıktan sonra sorun. Eğer bu üç kitabı başarabilirseniz, tebrikler, bir programcısınız, şimdi sizi 15 DAKİKA PERL'e atabilirim ya da Java'nın Büyük Kitaplık'ındaki kitapçıda ne olursa olsun çöp ve para cezası. Eğer bu üç kitabı başaramazsan, vazgeç, eve git, asla almayacaksın.

Dürüst olmak gerekirse, C ve Düzeni öğrenmeniz gerektiğini düşünmüyorum. Onlar sadece gelecekteki öğrenmeler için bir temeldir. Bu iki basit kitap hem yüzeyde hem de çok basittir (C ve Scheme süper kolay dillerdir) ancak kafa karıştırıcı sözdizimi için zaman kaybetmeden gerçek programlama sanatında çok derinleşirler, bu nedenle yeniden kablolamaya başlamak için mükemmeldirler. beyninizi iyi bir programcı olmak.

Kısayol almaya ve doğrudan şimdi öğrenmek istediğiniz şeyi (C # ve ASP.NET ile başlayan gibi) öğrenmeye doğrudan gitmeye çalışır.


25
C # yetenekleri için şiddetle tavsiye edilen, ancak çok iyi belgelenmiş bir temel sınıf uygulamak gibi basit şeyleri yapamayan, masasında, C # c ++ c. veya sadece bir problemi kendi başınıza çözebilir ya da ılımlı bir hızda bile yeni bir fikir öğrenebilir, katılıyorum. Bu elitizm değildir; sağduyu. İşaretçiler ve özyineleme konusunda ustalaşamıyorsanız, sorunları kendi başlarına çözebilecek geliştiricilere ihtiyaç duyan hiç kimse için çok kullanışlı olmayacaksınız.
Jonathan Henson

53
Hayır, iyi bir programcı olmanın tek yolu bu değil. Fakat eğer üç kitap, "göz korkutucu bir liste" ise, programcıların ne yaptığını hafife alıyor olabilirsiniz.
Joel Spolsky

32
Bazen temassızsın, Joel.
Robert S.,

46
Üzgünüm, gazetelerin özel kulübüme gelmesi birkaç gün sürüyor, çünkü görmeden önce bir uşak tarafından ütülenmeleri gerekiyor.
Joel Spolsky

19
Ne yazık ki, bu cevap başarısız up to speed quicklyparçasını.
rlb.usa

30

Bir geliştirici olmayan kişiyi hızla hızlandırmanın en iyi yolu onlara ilham vermektir !

Herhangi bir başarı elde etmek için, adayın en azından tutkulu olmasa da programlama konusunda meraklı olması gerekir (platformdan bağımsız olarak).

İdeal aday olması durumunda Joel ile aynı fikirdeyken, çok fazla teoriyi zayıf bir akla sıkıştırmamaya dikkat ederim - bu sadece onları mahveder. Eğer ilham alırlarsa, meraklılarsa ve umarım tutkularlarsa, büyüyü gördükten sonra teorisini anlamak isteyeceklerdir.

@Karudzo'ya tamamen katılıyorum - kendini gerçekleştirme ve yapıcı bir inceleme çok ilham verici olabilir.


29
“Bir gemi inşa etmek istiyorsanız, insanları odun toplamak için batırmayın, onlara görevler vermeyin ve çalışmayın, ama onlara denizin sonsuz yoğunluğu için özlemlerini öğretin.” - Antoine de Saint-Exupery
Julien Chastang

Julien - güzel! Kesinlikle!
jkoreska

Bu konuda sana tamamen katılıyorum! Hiç tecrübesi olmayan ve zaman zaman programcıları sonlandıracağı hakkında hiçbir fikri olmayan birçok geliştiriciye danışmanlık yaptım. Bunu basitçe onlara rehberlik ederek yaptım ... kendi merakları ve tutkuları onları sonuca götürdü. Bu iki özelliğin hiçbirine sahip olmasalar da, başardıklarını başarmanın mümkün olacağına inanmıyorum. Bu özelliklerden birine veya ikisine birden sahip olmayan ve içinde çok fazla program olduğu için var olan çok fazla programcı ile çalışıyorum.
Jeach

Katılıyorum. Öğrenme programlaması sorununun kelimenin tam anlamıyla cevaplandığını hissediyorum. İnsanlar bir sebeple bir şeyler öğrenir. İnsanlar sorunları çözmek için programlamayı, insanlara yardım etmeyi ve fikirleri gerçek bir şeye dönüştürmeyi öğrenirler. Yol boyunca bunu unutan insanlarla tanıştım ve yeniden keşfettiklerinde programlama sevgilerini yeniden keşfettiler. Öğreneceğiniz bir şeyden gerçekten zevk aldığınızda, öğrenmenin yollarını bulacaksınız ve daha iyi olursunuz.
Luis Perez

12

Hızlanmasını sağlamak için en hızlı yolu arıyorum.

En hızlı yol , bir ya da iki yıl olmasına rağmen, ona gereken zamanı vermek olabilir.

Elbette, ona basit bir dil öğretmek kolay görünüyor (.NET # yaparsa C #), ancak bir dil öğrenmek program yapmayı öğrenmek değildir.

Eğer hiç programlamamışsa, o zaman, 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, kalıplar, Big- O gösterimde ... - bütün enchilada. Bu, sürülmesi gereken pek çok şey ve çoğumuzun sadece bu temelleri öğrenmek ve daha da gerçek bir profesyonel programcı olmak için birkaç yılını aldık.

Bunların çoğunu kapsayan materyal var ( Stroustrup'un C ++ dilini öğretmeyi değil, C ++ kullanarak programlamayı öğreten en yeni kitabı gibi ), ama çok fazla bir şey yok ve hepsini kapsayan hiçbir şey yok. Bu yüzden adam öğrenmeye ve pek çok kitap ve makale okumaya istekli olmalı.

Bunun nasıl yapılacağıyla ilgili: Buraya yapıştırmak için elimde tam bir müfredat yok. (Üzgünüm.)
Yine de önereceğim, ona bir programlama dili öğretmekle başlamaktır, böylece hızlı bir başlangıç ​​ilerleme kaydetme ve cesaret verici sonuçlar alma şansı elde eder. Dışarıda böyle dilleri öğretmek, aşina olduğunuz birini seçmek için birkaç kitap var. Kitabın birçok alıştırması varsa ve bunları yapmaya istekliyse, ona yardım etmek için çok zaman harcamak için hazırlıklı olun. Kitabın hiçbirinde (m) yoksa, ileride kendi düşüncelerinizi düşünmeye başlayın, ancak onları kendi seviyesine / anlama hızına uyarlamaya hazır olun.
Eğer bu ilk dil C ya da C ++ değilse, IMO bundan bir tane daha öğrenmeli. K & R, Stroustrup'un TCPL'sinde olduğu gibi veya (sizin yardımınızla birlikte) dik bir öğrenme eğrisi olan Koenig / Moo ile başa çıkabiliyorsa iyidir. Bunu tavsiye etmemin nedeni, C veya (IMO'yu tercihen) C ++ 'ı öğrendikten sonra, C #, Java, ObjC gibi C türevlerinden herhangi birini almak nispeten kolay.

Gerisi için, ona sürekli iyi kitap ve makale akışı sağlayın. Bunlardan birçoğunu önermemizin çok yararlı olacağını sanmıyorum, çünkü 1) şirketinizin kültürüne uyması gerekiyor ve 2) bu şeyleri öğrenmesini ona söylerken rahat hissetmek zorundasınız.


1
"mevcut .Net uygulamalarını destekleyen giriş seviyesi geliştiricisi" ... "diziler, bağlantılı listeler, öğrendiği dilin derleme modeli, modülerleştirme, kaynak yönetimi, paradigmalar, kalıplar, bit-no-notasyonu hakkında bilgi edinmesi gerekecek" hepsinin 'iyi olması güzel', ama bahse girerim ki kodu yazan geliştiricilerin iyi bir bölümü bu becerilere sahip değil.
Kirk Broadhurst

1
@KirkBroadhurst: Öyleyse, şirketinizde bir sorun var demektir.
sbi

@sbi Birçok şirkette yanlış bir şey bulacağınızı düşünüyorum. OP firması, programcı olmayan bir kişinin (ama 'akıllı bir adam'!) Uygulama desteği yapan bir role taşınmasını öneriyor. Nerede bilmiyorum sen işe ... ama 'gerçek dünya' benim durumumda olduğunu. Gerçekten iyi, yetkin programcılar istisnadır - çoğu sektörde olduğu gibi çoğu insan geçecek kadar iyidir.
Kirk Broadhurst

1
@KirkBroadhurst: Çalıştığım yer benim kararım. Beceriksiz olduğum için şirketlerden kaçtım ve geliştiricilerin hiçbiri en azından bu şeyleri bilmiyorsa kaçardım.
sbi

7

Onları .NET'te başlatmam. Bu hatayı çok defa yaptım. Bir işverenin size zaman içinde yetersiz bir programcı yaratması için baskı yapmasına izin vermeyin. .NET hızlı bir geliştirme platformu olabilir, ancak geliştiricileri programlamayı öğrenmeye zorlamaz. Sadece C # 'da, referans tiplerine, nesne ömrüne takılan bir geliştiriciyi bulacaksınız, büyük bellek sızıntıları bırakacaklar (evet, .NET'te mümkün) ve tasarımları zayıf olacak. Onları C veya C ++ 'da başlatmak (muhtemelen c ++, OOP kavramlarını kullanmaları gerekeceği için muhtemelen) daha iyi olurdu ve sonra şöyle bir şey söyleyin: "Eğer hafızanız sizin için yönetilseydi, şimdi her şey güzeldi yetenekli ve tüm bu iğrenç işaretçilerle uğraşmak zorunda kalmadın mı? " İşte C # ve JAVA. Eğer c ++ konusunda uzmanlaşırlarsa, her ikisini de bir veya iki haftada bir fethedecektir. Joel'in alayını öneririm. CS 101 öğretmenimin bana verdiği liste buydu ve bu yüzden sayısal analize geldiğimde çok daha iyiydim. Bu aynı zamanda adayın hardalı kesip kesmeyeceğini daha erken öğrenmenizi sağlayacaktır. Ayrıca, c ve c ++ 'ı aldıktan sonra, kitapların tanıtımını okuduktan sonra otomatik olarak c # ve java'yı anlayacaksınız. Sadece onları anlamakla kalmaz, aynı zamanda onları c ve c ++ bilmeyen birinden daha iyi anlarsınız.


4
“" Hafızanız sizin için yönetildiyse, her şey nesne yönelimli olsaydı ve tüm bu iğrenç işaretçilerle uğraşmak zorunda kalmazsanız, hiç hoş olmaz mıydı? " Neden baştan beri C ++ 'ta STL kullanmayı öğretmediniz ?!
Raynos

STL tatlıdır. Daha fazla Windows programlama kadar Windows API atıfta bulunuyorum. Windows API, OOP düşünülerek tasarlanmamıştır. Bazı kötü adamların c ++ 'da API kullanarak bir uygulama yazmasını sağlamak için harika bir alıştırma yapıyorum. Daha sonra ona bir Window sınıfı yazmasını ve olay döngüsünü enkapsüle etmesini sağladım ... bilirsin, nesne yönelimli yap. Sonra nihayet çalıştıktan sonra onlara Windows Forms göstereceğim. Gerçekten de bazı temel kavramlarla - yani bir Windows uygulamasının nasıl çalıştığını - birisinin .NET'e atlarsa asla elde edemeyeceği - başa çıkmaya zorlar.
Jonathan Henson

4
Neden birileri Windows API'sine bir sopayla dokunur? Demek istediğim hWND, 80'li yıllardan itibaren? Açıkça onun yerine hoş bir soyutlama kullanıyorsunuz (Bu soyutlama tamamen farklı bir tartışma). Başlık altında nasıl çalıştığını bildiğinizden emin olabilirsiniz ama soyutlama için C # .NET'e ihtiyacınız yok
Raynos

2
Windows API şaşırtıcı. Her neyse, onu sadece bir öğretim aracı olarak kullanıyorum. Örneğin, insanlar genellikle Windows programlarında olayların nasıl sihirli bir şekilde kovulduğunu anlamıyor. Olay döngüsü ile dalga geçmeleri onların için yararlıdır. Ayrıca, programcıların en azından hWND'ye aşina olmaları gerekir, özellikle de grafiklerle dalga geçebilecek herhangi bir apis ile uğraşacaklarsa - tıpkı bir XID'nin nasıl kullanılacağını bilmeden Unix'te bir şey yapmakta zorlanacağınız gibi. Neyse, bir windows programının nasıl çalıştığını öğrenmeye zorlar. Ayrıca, bitirdikten sonra Windows.Forms'ın nasıl çalıştığını bilirler.
Jonathan Henson,

Genel olarak yalnızca .NET'e C # btw'ye geçiş olması gerekmez. Sanırım @Joel, bir çerçeveyi kullanmadan önce programcıların kaputun altına bakmasının genellikle iyi olmasının nedenleri hakkında Sızdırmaz Soyutlama Yasası hakkında iyi bir makale içeriyor.
Jonathan Henson

6

Onlara basit bir şey verin ama çözmek için faydalıdır. Onları biraz karıştırırlar ve cilalamalarına yardımcı olun. Onları teşvik etmek için küçük bir başarı gibi bir şey yoktur (biri programlama ile ilgilenmiyor olsa da


6

Çiftler programı. Kendi kodunuzu yazarken sizi gölgelendirmelerine izin verin - herhangi bir kod. Birkaç saat içinde, kodunuzu girmelerini isteyin, ne yapmaları gerektiğini söylerken, gerekirse tuşa basarak da tuşa basabilirsiniz. Sorularından birkaçına cevap verin, ancak çok fazla yavaşlamanız için çok fazla değil - sadece hepsini içeriye sokmalarına izin verin. Ayrıca yazımlarınızı ve böceklerinizi düşündüğünüzden daha fazla bulacaklar. Birkaç gün içinde, daha önce gördüklerine benzer görevler için hangi kodu gireceğinizi söyleyerek 'gezinmeye' başlayabilirler.

Bir ay içerisinde bu şekilde geliştirici olarak bildiklerimin çoğunu öğrendim ve birkaç ay sonra bir başlangıçta benim için öncü geliştirici olarak benim için üstlenilen birkaç yeni geliştiriciyi bu şekilde öğrendim. Birlikte çalışmaya başladığımızda, hiçbir zaman tek bir kod satırı yazmamıştı.


1
Çift programlamanın acemi programcılara öğretmek için gerçekten harika bir yol olduğunu düşünüyorum, ancak çift programlamanın her zaman sorunlu olabileceğini düşünüyorum. Acemi programcıların sorunları nasıl çözeceklerini öğrenmek ve yeteneklerine güvenlerini geliştirmek için yalnız çalışmak için biraz zamana ihtiyacı olduğunu düşünüyorum.
Helephant

Evet, çift programlamasına devam etmelerini sağlayın ve basit görevler verin - gerçek görevler, üzerinde çalıştıkları yazılım üzerinde, çalışmak istedikleri dilde, gerçek başarı ile. Tüm çalışmalarını gözden geçirin ve akıl hocası olunca ilerler.
Thomas W,

2

Ona iyi bir kimlik verin (görsel stüdyolar, ekspres hala iyidir). Ona ortak sözdiziminin% 60'ını öğretin (verimden, linq'den, enumlardan, özniteliklerden, vb. Sınıftan çıkar, sanal ve geçersiz kıl). Hata ayıklayıcısına zaman ayırın (özellikle telefon görüşmesi). O zaman yardıma ihtiyacı olduğunda ve bu onu hızlı bir şekilde başlatması gerektiğini söylediğinde "msdn functionanme" kelimesini kullanmasını söyleyin.

Ayrıca ona asla bir istisna yakalamamayı ve yutmamasını öğret. Ona tekrar atması veya kaydetmesi gerektiğini söyle!

Bonus: Ona json verilerinin nasıl seri hale getirileceğini öğretin böylece kolayca bir dosyayı okuyabilir / yazabilir. Bir db overkill ve öğrenmek için çok fazla ve bir satır dizisi başına bir giriş kabul edilebilir bir dize dizisi kaydetmek / yüklemek için geçmesine izin verebilir, ancak özel dosya biçimleri yazma istemiyorum.


1

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. Birincisi ve her şeyden önce, kişi sorunun ne olduğu hakkında bir kağıt parçası üzerinde algo ile ilgili düşünebilmeli ve ortaya çıkabilmelidir. Doğru düşünce tekniklerini edinmeleri için onlara rehberlik etmelisiniz.

Sonra dilin temelleri geliyor. Onları tercih ettiğiniz dilde başlatın. Programa bir sorun ver.

Bu ilk kesim bittikten sonra onların CS temellerini ve Tasarım Desenlerini yapmalarını sağlayın.

Şimdi bu yeni kavramlarla daha önceki problemi yeniden programlamalarını sağlayın.


1

Onu temellerle başlatın: değişkenler, döngüler, döngüler, döngüler için, diziler, ona temelleri öğretir, ekrana basar, basit bir matematik yapar. Yöntemlere ve temel OOP'a geçin, burada nasıl bir sınıf oluşturulacağını, neden sadece nasıl yapıldığını göstermeyiniz.

Dil önemli değil, ama bildiğiniz bir şey seçin ve bu oldukça soyut (java, python vb.) Hafıza yönetimi, işaretçiler vb. Gibi şeyler hakkında endişelenmenize gerek yok. özyineleme, hanio kuleleri veya özyinelemeli arama dizinleri.

Programlamayı öğrenmek, Ruby programlama konusunda iyi bir kaynaktır. Eğlenceli, kolay ve eğlenceli hale getirin.


1

Ona bazı zorluklar yaşayın ve sorunu kendisi çözmek için kaynakları nasıl bulacağını öğrenmesini sağlayın.

Ona nasıl cevap bulacağını ve kendine yeterli olacağını öğretebilirsen, doğal olarak nasıl iyi programlanacağını öğrenecektir. Eleştirel düşünme ve beceriklilik, bir programcı için iki kilit beceridir.

Günün sonunda, tutku / ilgi kesinlikle onu çabucak öğrenmede ne kadar başarılı olacaklarını belirleyen önemli bir faktör olacak. Eğer "böceği" yakalamazsa veya yakalamazsa, yavaş ve / veya acı verici bir süreç olabilir. Eğer hatayı yakalarsa, geç saatlere kadar kodlayacak, mesai saatleri dışında, yaşamının zamanını alacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.