Kodlama becerilerimi nasıl geliştiririm? [kapalı]


76

İşte soru ile başlamadan önce benim hakkımda biraz bilgi.

Ben bir bilgisayar bilimi lisansıyım, Java ana kodlama dilim.

Üniversitemdeki temel problem öğretim standartlarıdır. Kimse sadece teorik bilgi yerine öğrencilere kodlama bilgisi öğretmekten endişe duymaz.

Bunun etkisi, üniversite arkadaşlarımın çoğunun programlamayı hiç anlamıyor.

Ben bile kodlamamı bir ölçüde sınırlayan geleneksel programlama ortamından çıkamadım.

Programlama / kodlama becerilerimi geliştirmenin ve genişletmenin olası yolları nelerdir.

Ayrıca, aynı kaynaklar için önerebilir misiniz?

Düzenlendi : Kodlama becerilerinin geliştirilmesini öneren kaynaklar.


13
Bilginize: Deneyimlerime göre teorik bilgi kesinlikle sonraki bölümlerde size yardımcı olacaktır
Gopi

6
Sadece "X günlerde nasıl yüzüleceğini öğret" kitabını okuyarak yüzebilir misiniz?
pramodc84

9
"Kasıtlı uygulama". Şu anki seviyenden biraz daha zor bir şey yap, çöz, ondan öğren, tekrar et.

7
@ pramodc84 Ama kesinlikle yüzmek ve sonra nehre atlamakla ilgili bir kitap okumak kesinlikle doğrudan nehre atlamak ve yüzmeyi öğrenmeye çalışmak THAN'a yardımcı olacak
Gopi

5
Çoğu üniversitede böyle. Derecesi iyi bir kodlayıcı olmakla ilgili değildir; Bunun arkasındaki teorileri bilmek ve onları nasıl uygulayacağınızla ilgili - iyi bir kodlayıcı olmanın mezunlara alıştırma olarak bırakıldığını söyleyebilirsiniz.
konfigüratör

Yanıtlar:


46

Programlama, tecrübenin önemli olduğu alanlardan biridir. Bu nedenle, daha iyi bir kodlayıcı olmak için daha fazla kod yazmalısınız. Ancak, yazmanız gereken tek şey değil. Ayrıca diğer geliştiricilerin kodlarını da okumalı ve ondan iyi bir kodun ne olduğunu öğrenmelisin. Bununla ilgili SO sorularına bakın .

Ayrıca, özellikle kodlamaya adayan kitaplar da yararlı olabilir; "Kod Tamamlandı" gibi. Temel bilginizle birlikte sizi iyi bir programcı yapan iyi kodun tanımlarını içerir.


8
Kod Tamamlama iyi bir okuma - bu programcı olarak üniversiteden çıktığımda okuduğum en çok dilediğim kitap.
glenatron

2
Şimdi bu kitap listemde must-read. :) Teşekkürler!
ykombinator

2
@ykombinator:(push 'code-complete must-read)
Giorgio

98

Favori teklifim Konfüçyüs'ten:

Duyuyorum biliyorum. Anlıyorum Anladım.

Sahip olduğum tüm bilgiler tek ve tek bir strateji uygulamaktan kaynaklanıyordu:

Her zaman en zorlu yolu kullan.

C # öğrenmek ister misin? Bir C # geliştiricisi olarak bir iş bulun.

İtalyanca öğrenmek ister misin? Oraya bir ingilizce / italyanca gidin ve İtalyanca konuşun

Kodlamayı öğrenmek ister misin? Kod!


19
+1 her zaman en zor yolu seçer. Sonunda kolay bir yol olur! İyi cevap.
Ryan Hayes

3
Kesinlikle bir meydan okuma için kendinizi ayarlamak için yıldırıcı bir görev gibi görünüyor ama başarılı olmak için motivasyon getirdiğini buluyorum. Mükemmel cevap. En iyi bildiğim diller, ilk önce hiçbir ipucu olmadan ve her projede sürekli olarak öğrendiğim dillerdir.
Chris

2
En zorlayıcıyla en çok değiştim. Daha olumlu

2
İyi programlama seyirci sporu değildir.
Gizli

4
@Pierre, öğrenmek istediğiniz 1) Latince ve 2) Perl. Latince Kod Perl: csse.monash.edu.au/~damian/papers/HTML/Perligata.html

21

Kodlama harika bir öneri, ancak orada birileri size geri bildirim verecek, sadece hatalarınızı tekrarlayacaksınız. Bir iş bulun, açık kaynak kodlu bir projede çalışın, bir danışman bulun ve kodunuza bakmalarını sağlayın.


1
Kesinlikle! Bu harika bir nokta. Muhtemelen, henüz bir akıl hocam yok.
ykombinator

4
Bazı kodlar yazıp StackOverflow.com'da belirli bir soru ile gönderdiğinizde çok şey alırsınız.
JeffO 16

2
Bu yüzden projemiz hakkında kod incelemeleri yapmaktan kaçınmaya devam ediyorum, ancak "bunun için zaman yok."
MetalMikester

1
@MetalMikester - ama bunu yapmak için her zaman zaman vardır.
JeffO

1
@JeffO Şu anda olan tam olarak bu. :(
MetalMikester

10

İşte Dan North'un ve QCon'un acemilikten, Sharpening the Tools adlı uzman programcıya nasıl geçileceği üzerine bir sunum . Sunumdan kilit öneriler aşağıdadır:

  1. Temelleri uygulayın: kata, eğlence için kod ...
  2. Diğer insanlardan öğrenin: kitap okumak, bloglar vb. Kod okumak, çiftler halinde program okumak ...
  3. Trendleri anlayın: Şimdi sektörde neler oluyor
  4. Bilgiyi paylaşın: bir şeyi öğrenmenin en iyi yolu onu anlamak ve öğretmektir.
  5. Araç kutunuzu koruyun: "zamansız" ve yeni araçlar kullanın
  6. Öğrenmeyi öğrenin: öğrenmenin nasıl çalıştığını öğrenin

8

Sıfırdan basit bir dil için bir derleyici yazmaya çalışın. Yol boyunca size becerilerinizi geliştireceksiniz (resmi dil teorisinden bonus olarak bazı güzel teorik tekniklerle). Excel'in basit bir versiyonunu yazmaya çalıştım ve bu da çok hoş bir alıştırma.

Diğerlerinin dediği gibi kodlama becerilerinizi geliştirmenin tek yolu gerçekten yapmaktır. Elinizi büyük projelerle kirletin. Ancak daha sonra büyük program için, yazılım tasarım teknikleri konusunda uzman olmanız daha da önemlidir, aksi takdirde programın boyutu yönetilemez görünüyor.

Nate Kirby'den güzel bir alıntı var:

"Kötü programcılar ayrıntıları görmezden geliyor. Kötü tasarımcılar ayrıntılarda kayboluyorlar."

Dolayısıyla bu iki soyutlama seviyesi arasında geçiş yapmak, ustalaşmanız gereken beceridir.

Ayrıca saatte kaç satır kod yazabileceğinizi de hedeflediğiniz şey değil. David Parnas'tan bir alıntı istiyorum :

“Sık sık, büyük bir sistemin nasıl hızlı bir şekilde kurulacağını bilen biri” olarak tanımlanan geliştiriciler duyarım. Hızlı bir şekilde büyük sistemler kurmanın bir hilesi yoktur, ne kadar hızlı yaparsanız, o kadar büyürler! "


5

Öğrendiğim hemen hemen her dilde bir bahis havuzu veya Bakara oyunu uyguladım.

Bu tür yazılımlar kapsar

  • Hesaplamalar ile tarihler ve saatler
  • Para birimi türleri ve para birimine dönüştürülebilen şeyler
  • Test edilmesi kolay olan ayrık bir kurallar kümesi
  • Devletler, devletler arası geçiş ve devlet geçişinden sorumlu olan çok sayıda varlık
  • Aynı modelin farklı görünümlerine sahip birden fazla kullanıcı
  • Birden çok son koşul

Birden fazla oyuncu blackjack ve poker de işe yarayabilir.

Bir uyarı, günümdeki işimde finansal sistemler üzerinde çalışmam ve çok oyunculu bir şans oyunu ve ticaret sistemi yazarken dikkat edilmesi gerekenler arasında büyük bir örtüşme olduğu.


4
  • İyi açık kaynak projeleri seçin ve kodu okuyun.
  • Kendiniz için orta boy bir proje alın ve kodlamaya başlayın
    • Web geliştirme ile ilgileniyorsanız, en sevdiğiniz teknolojiyi kullanarak mevcut bir siteyi sıfırdan oluşturmaya çalışın; django'daki twitter nasıl?
    • Masaüstü uygulama geliştirme sürecindeyseniz, bir not defteri ile başlayın ve gelişmiş özellikleri (başlamak üzere regex tabanlı aramalar) desteklemesi için doğaçlama yapın.

4

Bunun gibi düşünün .... Tiger Woods golf izleyerek ya da okuyarak "en iyi" golfçü olamadı. Diğer sporcuların yaptığı gibi, çalışarak, pratik yaparak, oyununu nerede geliştirebileceğini bularak ve bunun hakkında bir şeyler yaparak, bu şekilde davrandı.

Kodlama aynıdır. Bu konuda daha iyi olmanın en iyi yolu, başkalarının ne yaptığını çalışmak, neden böyle yaptıklarını anlamak ve sonra kendin yapmaktır.


Evet, Tiger Woods çok sevgili tarafından "en iyi" golfçü olur. :-) Yani gerçekten iyi bir örnek değil.
DL

4

Diğer insan faaliyetlerinde olduğu gibi, iyileştirmenin en iyi yolu bilginizi uygulamaktır, ancak bunun için bazı egzersizlere ihtiyacınız var. Pragmatic Programmer adlı kitabın yazarlarından Dave Thomas , dövüş sanatlarında kata kavramına benzer şekilde Code Katas kavramını tanıttı .

Orada bir göz atabilirsiniz: http://codekata.pragprog.com/


4

Suya atlayın, ilk başta soğuk olabilir ve dışarı çıkmaya istekli olursunuz, ancak yakında vücudunuz buna alışacak ve tekrar ısınacak ve suda rahatladığınızda etrafta yüzebilir ve belki suya girebilirsiniz. derin son.

Birkaç ay önce, Java okuduğum üniversiteyi yeni bitirdim. Aynen, doğru bir şekilde kodlamanın nasıl bir ipucu almadığıyla aynı. Yaklaşık bir ay önce PHP'de bir web uygulaması oluşturmak istedim. Ne yaptığımı bilmiyordum ama bunun için gittim. İlk başta korkutucu ve bunaltıcıydı ama pratik yaparken doğal hale geldi. Uygulamayı birçok kez yazdım, her seferinde daha da basitleştirdim. Şimdi uygulama üzerinde sıfırdan çalışıyorum ama bu sefer nasıl yönlendirilmiş ve PEAR ile başa çıkmam gereken başka bir engel olan modül quickform'unu nasıl kullanacağımı bulmaya çalışıyorum.

Öyleyse pratik yap. Suya atla! İyi şanslar :)


3

En sevdiğiniz dilin tüm sözdizimini öğrenmenizi öneririm. Varsa sanal fonksiyonların, kalıtımın, lambda'nın nasıl kullanılacağını anlamak. Yaptığım bir şey büyük bir korkutucu kütüphane kapmaktı (bunu C ++ için artırma ve STL ile yaptım) ve her satırın ve her anahtar kelimenin anlam ifade edip etmediğine bakın.

Veya, en güncel sürümü kapsayan iyi bir tane varsa, dil sözdizimi referansını okuyabilirsiniz. Buradaki örnek olarak C # referansıdır (En üstteki sürüm değil. Aradığım sözdizimine sahip olmayan daha popüler bir eski sürüme bakarak hata yaptım)


3

Genel fikir birliği, kabul ettiğim "daha fazla kod yaz" dır, ancak bu tavsiyeye, birçok farklı türde kod yazmanız gerektiğini ekleyeceğim. Java, dillere gelince gayet iyi, ancak kesinlikle güç spektrumunda hem aşağı hem de yukarı kod yazmalısınız. Java'ya ek olarak, birkaç küçük projeyi daha düşük bir dilde (C bunun için iyi bir seçimdir), bir betik dili (perl'i tercih ederim, ancak python da iyi bir seçimdir), işlevsel bir dilde yapmayı öneririm. lisp buradaki genel öneridir, ancak OCaml ve Haskell de iyi seçimlerdir) ve en azından bir meclis dili okumakta rahatlarlar.

Ayrıca, uyguladığınız program türlerinde biraz çeşitlilik seçin. En azından bir Masaüstü GUI'si, zengin bir web uygulaması, bir ağ istemcisi ve sunucusu, bir sürücü, bir veri munging yardımcı programı, bir ışın izleme ve bir fizik simülasyonu uygulamaya bakın.

Projelerin tamamı kapsam bakımından nispeten küçük olmalıdır, amaç özellikli bir programa sahip olmak değildir, ancak karşılaşabileceğiniz farklı alanlarda geniş bir tecrübe edinmek, her biri için gereken farklı düşünce türlerini öğrenmek, ve çıkarların nerede olduğunu bulmak için.

Bunu yaptıktan sonra, en çok hangi programla ilgilendiğinize dair iyi bir fikre sahip olacaksınız ve uzun kodlarla başa çıkarak büyük kod tabanlı çalışmalarda deneyim sahibi olmak için açık kaynaklı bir proje bulabilir veya başlatabilirsiniz. projeler geliştirmek ve diğer geliştiricilerle çalışmak.


2

Birkaç benzer cevap alıyorsun ve benimki de aynı olacak. Kod yaz Bunu yapmanın iki iyi yolu var.

  1. Gerçekten size hitap eden veya sizi ilgilendiren bir şey seçin ve uygulamaya devam edin. Oyun oynuyorsan, bir oyun yaz. Web ile ilgileniyorsanız ilginç ve orijinal bir web sitesi bir araya getirmek. Bunu bitirmeyi bile başaramayabilirsin, ama deneyim sana çok şey öğretecek.
  2. İlgi çekici bulduğunuz ve buna dahil olabileceğiniz açık kaynaklı bir proje seçin. Mevcut koddan öğrenin ve hataları düzeltmek, birim testleri oluşturmak ve yeni özellikler uygulamak için kullanın.

Bunlardan biri size ihtiyacınız olan doğrudan programlama deneyimini ve öğrendiğiniz gibi programlama topluluklarına katılımı ve bundan daha fazla yararlanabilmek için sorular sormanız gerekecek. Birçok hata yapacaksın. Bu iyidir - eğer hata yapmayı bırakırsanız öğrenmeyi bıraktınız ve kendinize meydan okumak için yeni bir yol bulmanız gerekiyor.


2

Benim önerilerim

  • Bir evcil hayvan projesi bulun ve tanıdığınıza farklı bir dilde (lyke python / c #) yazın. Bu size hayal edebileceğinizden daha fazlasını öğretecek. Benzer olan diğer projelere bakın ve onlarla özellik paritesi elde etmeye çalışın. Bununla yavaş gidebilir ve mütevazı hedeflere sahip olabilir, yeni özelliklerle zorluk seviyenizi sabit bir şekilde artırabilirsiniz. Bu aynı zamanda bir iş görüşmesi için gittiğiniz şovun parçası olur.
  • Projenizde web servisleri, javascript, ajax, coğrafi kodlama ve temel olarak yazılım dünyasında ilerleme kaydeden her şey gibi ilgili teknolojiler için kullanımlar bulun.
  • Linux / freebsd gibi diğer işletim sistemleri ile oynayın. Farklı sistemlere ne kadar çok maruz kalırsanız, onlar hakkındaki düşünceleri ve neden yaptıklarını neden yaptıklarını anlayacaksınız.
  • Kodunuzun bölümleriyle yaptığınız zaman geri dönün ve sürekli olarak geliştirmeyi deneyin. Verimsizliği bulun, gerektiğinde daha fazla yorum ekleyin, mükemmelleştirmeyi deneyin.
  • C2.com'da dolaş. Çok sayıda kodlama uygulaması var. Bunları öğrenin ve kendi projenizde uygulamaya çalışın.
  • Pragmatik programcı ve kod tamamlandı gibi kitapları okuyun, size savaşta sertleşmiş programlama bilgisi verecektir.
  • Bu ilgisiz gelebilir, ancak eğer zaten RC araba yarışmak, müzik aleti çalmak veya yabancı dil öğrenmek gibi bir şeye sahip değilseniz başka bir teknik hobi bulabilirsiniz. Beyniniz ne kadar çok parça kullanılırsa o kadar iyidir ve zaman zaman gevşemeniz gerekir çünkü programlama çok fazla şey yapabilir.

2

Hakem incelemeleri kodunuzun kalitesini yükseltmeye gerçekten yardımcı olur. Eğer gerçek bir mentorunuz yoksa, kodunuzu [gerekli minimum seviyeye indirdikten sonra] StackOverflow veya RefactorMyCode veya posta listelerine gönderebilirsiniz;


1

"Uygulama!" Bu bir klişe.

Matematik derslerinde öğrendiklerinizi gözden geçirmeli ve problemlerle ilgilenen programlar yapmalısınız. Ayrıca, mantık becerilerinizi geliştirmek için bir otomat makinesi (madeni paradaki değişiklikleri hesaplayan) bir asansör programı uygulayın. Günlük yaşamdaki her şeyi düşünün ve uygulayın.


1

Evet, programlama becerilerini geliştirmek ve onları keskin tutmak için pratik yapmak son derece önemlidir. Bununla birlikte, tek başına pratik yapmak yalnızca şimdiye kadar götürür. Ayrıca sizden daha çok şey bilen insanlardan da öğrenmelisiniz. Hiç duymadığınız teknikler, faydaları hemen belli olmayan uygulamalar ve kendinizi asla icat edemeyeceğiniz püf noktaları var.

Yeni teknikleri öğrenmenin yolu, düzgün numaralar ve faydalı uygulamalar çoktur. Kitapları oku. İş arkadaşlarınızla konuşun. Sorular sor. Diğer kişilerin kodlarını inceleyin ve sizinkileri incelemelerini isteyin. Bu site de dahil olmak üzere programlama ile ilgili blogları ve makaleleri okuyun. Kısacası, bir vakumda çalışmayın.

Oh, ve NP-tamamlamanın ne anlama geldiğinden emin değilseniz veya büyük O gösterimi sizi korkutuyorsa, muhtemelen bazı hesaplama ve algoritma dersleri teorisini almalısınız.


1

Builder, Factory, Composite ve en sonunda Observer, Mediator ve Flyweight gibi tasarım kalıplarını okumalısınız derim. Tasarım kalıpları, kodlama çözümleri için her şeyden önce gelmez, ancak nesne yönelimli programlama teorik kavramlarının nasıl uygulanacağını gösterir.


1

Sadece benim için çalıştığı şeyi önerebilirim. Programlama dilini öğrenmek ve onunla satranç motoru oluşturmak için rüya gördüm. Kitaplara, makalelere ve küçük örneklemlere zaman ayırdım. Bu yüzden geliştirici için daha iyi belgeleri olan gerçek projeleri kontrol etmeye karar verdim. Bir tane seçtim ve projeyi günden güne okumaya başladım. Okurken geçen günlerin zaman kaybını düşünmeyin. Makaleleri ve kitapları okumak için zaman harcamaktan çok daha iyidir. İlk bakışta net olmayan pek çok şeyle karşılaşacaksınız, ancak sabırla araştırma yaparsanız gün geçtikçe bu değişecek. Bir haftanın içindeki her şeyi anlamayı beklemeyin. Bazı şeyleri anlamadığınızda düşük Benlik Saygınızı korumanız gerekir.

Tutkusu olan mevcut bir projeyi seçin. Kodları okumaya başlayın, hata ayıklayın ve her gün işlerin nasıl yürüdüğünü anlamaya çalışın. Ayrıca projeyi kendiniz için kullanın. Ardından istediğiniz bazı özellikleri eklemeye başlayın. Hatta aynı veya benzer bir uygulama yazmaya çalışın.

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.