it-swarm.dev

Kodlama becerilerimi nasıl geliştirebilirim?

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

Ben Bilgisayar Bilimi Lisansıyım, Java birincil kodlama dilim.

Üniversitemdeki temel sorun öğretim standartlarıdır. Hiç kimse sadece teorik bilgiden ziyade öğrencilere kodlama bilgisini öğretmekten endişe etmiyor.

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

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

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

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

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

76
ykombinator

Programlama, deneyimin ö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 yazmak değildir. Ayrıca diğer geliştiricilerin kodlarını okumalı ve iyi bir kodun ne olduğunu öğrenmelisiniz. Bakınız SO bu konuda sorular .

Ayrıca özellikle kodlamaya ayrılan kitapları yararlı bulabilirsiniz; "Kod Tamamlandı" gibi. Temel bilginizle birlikte sizi iyi bir programcı haline getirebilecek iyi kodun ne olduğunu açıklarlar.

46
P Shved

En sevdiğim teklif Konfüçyüs'ten:

Duyuyorum, biliyorum. Anlıyorum. Anlıyorum.

Sahip olduğum tüm bilgiler tek bir stratejiyi uygulamaktan geliyordu:

Her zaman en zorlu yolu seç.

C # öğrenmek istiyor musunuz? C # geliştiricisi olarak iş bul.

İtalyanca öğrenmek ister misin? Bir sözlük İngilizce/İtalyanca ile oraya gidin ve İtalyanca konuşun

Kodlamayı öğrenmek ister misiniz? Kod!

98
user2567

Kodlama harika bir tavsiye, ancak orada size geri bildirimde bulunacak biri olmadan, hatalarınızı tekrar edeceksiniz. Bir iş bulun, açık kaynak kodlu bir proje üzerinde çalışın, bir danışman bulun ve kodunuza bakmalarını sağlayın.

21
JeffO

İşte bir sunum Dan North ve Acemi'den Araçları Bileme adlı uzman programcıya nasıl geçileceği konusunda QCon verdi. Sunumdan temel öneriler aşağıdadır:

  1. Temelleri pratik yapın: kata, eğlence için kod ...
  2. Diğer insanlardan öğrenin: kitap, blog vb. Okuyun, kodu okuyun, ikili program ...
  3. Trendleri anlayın: şu anda 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ı anlayın
10
ysolik

Sıfırdan basit bir dil için bir derleyici yazmaya çalışın. Yol boyunca becerilerinizi çok geliştireceksiniz (resmi dil teorisinden bazı güzel teorik teknikler ile bonus olarak). Excel'in basit bir sürümünü yazmaya çalıştım ve aynı zamanda çok güzel bir egzersiz.

Diğerleri gibi, kodlama becerilerinizi geliştirmenin tek yolu aslında bunu yapmaktır. Bazı büyük projelerle elinizi kirletin. Ancak daha sonra büyük program için, yazılım tasarım tekniklerinde ustalaşmanız daha da önemlidir, aksi takdirde programın boyutu yönetilemez görünmektedir.

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

"Kötü programcılar ayrıntıları görmezden gelir. Kötü tasarımcıların ayrıntıları kaybolur."

Bu iki soyutlama seviyesi arasında geçiş yapmak, ustalaşmanız gereken beceridir.

Ayrıca saatte kaç satır kod yazabileceğinizin hızı hedeflemeniz değildir. David Parnas :

"Sıklıkla geliştiricilerin` `hızlı bir şekilde büyük bir sistemin nasıl kurulacağını bilen biri '' olarak tanımlandığını duyuyorum. Büyük sistemleri hızlı bir şekilde kurmanın hilesi yok; onları ne kadar hızlı inşa ederseniz, o kadar büyürler! "

8
D. L.

Öğrendiğim her dilde ya bir bahis havuzu ya da bir Bakara oyunu uyguladım.

Bu tür yazılımlar

  • Tarihler ve saatler, hesaplamalar ile
  • Para birimi türleri ve para birimine veya para biriminden dönüştürülebilen şeyler
  • Test edilmesi kolay ayrı bir kurallar dizisi
  • Devletler, eyaletler arasındaki geçiş ve eyalet geçişinden sorumlu birden çok varlık
  • Aynı modelin farklı görünümlerine sahip birden çok kullanıcı
  • Çoklu uç koşulları

Çoklu oyuncu blackjack ve poker de işe yarayacaktır.

Bir uyarı, günlük işimde finansal sistemler üzerinde çalıştığım ve çok oyunculu bir şans oyunu ve bir ticaret sistemi yazarken dikkate alınması gereken şeyler arasında büyük bir çakışma olması.

5
sal
  • İyi açık kaynaklı projeler seçin ve kodu okuyun.
  • Kendiniz için orta büyüklükte bir proje alın ve kodlamaya başlayın
    • Web geliştirmeyle ilgileniyorsanız, en sevdiğiniz teknolojiyi kullanarak mevcut bir siteyi sıfırdan oluşturmaya çalışın; django'da Twitter'a ne dersin?
    • Masaüstü uygulama geliştirmeye giriyorsanız, bir not defteri ile başlayın ve gelişmiş özellikleri (başlangıçta regex tabanlı aramalar) desteklemek için doğaçlama yapın.
4
Amarghosh

Suya atlayın, ilk başta soğuk olabilir ve dışarı çıkmaya cazip olacaksınız, ancak yakında vücudunuz buna alışacak ve tekrar ısınacak ve suda rahatlaştıkça yüzebilir, belki de derin sonu.

Birkaç ay önce Java çalıştığım üniversiteyi bitirdim. Seninle aynı düzgün kodlama hakkında bir ipucu yoktu. 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 ezici bir şeydi ama pratik yaparken doğal hale geliyor. Uygulamayı birçok kez yazdım, her seferinde daha da basitleştirdim. Şimdi im sıfırdan app üzerinde çalışıyorum ama bu sefer nasıl odaklı ve PEAR ve modül çabuk ben almak zorunda ama kararlı ve heyecanlı olan modül hızlı formu kullanarak itiraz nasıl anlamaya im im Her şeye rağmen.

Yani pratik yapın. Suya atla! İyi şanslar :)

4
Jonathan

Şöyle düşünün ... Tiger Woods golf izleyerek ya da okuyarak "en iyi" golfçü olamadı. Diğer atletlerin yaptığı gibi, çalışarak, pratik yaparak, oyununu nerede geliştirebileceğini ve bu konuda bir şeyler yaparak bu yolu yakaladı.

Kodlama aynıdır. Daha iyi olmanın en iyi yolu, başkalarının ne yaptığını incelemek, NEDEN bu şekilde yaptıklarını anlamak ve sonra kendiniz yapmaktır.

4
Muad'Dib

Diğer insan faaliyetlerinde olduğu gibi, iyileştirmenin en iyi yolu bilginizi uygulamaktır, ancak bunun için bazı alıştırmalara ihtiyacınız vardır. Pragmatik Programcı kitabının yazarlarından Dave Thomas , dövüş sanatlarındaki kata kavramına benzer şekilde Code Katas kavramını tanıttı.

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

4
jmservera

En sevdiğiniz dilin tüm sözdizimini öğrenmenizi öneririm. Varsa sanal işlevlerin, kalıtımın, lambda'nın nasıl kullanılacağını anlayın. vb Yaptığım bir şey (i boost ve STL C++ ile yaptım) büyük bir korkutucu kütüphane kapmak ve her satır ve her anahtar kelime mantıklı olup olmadığını görmek oldu.

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

3
user2528

Genel fikir birliği, kabul ettiğim "daha fazla kod yazın" dır, ancak bu tavsiyeye birçok farklı kod türü yazmanız gerektiğini ekleyeceğim. Java diller gittikçe iyi, ama kesinlikle güç spektrumunda yukarı ve aşağı kod yazmalısınız. Java'ya ek olarak, daha düşük bir seviyede birkaç küçük proje yapmayı öneririm dil (C bunun için iyi bir dildir), bir betik dili (Perl'i tercih ederim, ancak python da iyi bir seçimdir), fonksiyonel bir dil (LISP burada genel öneri, ancak OCaml ve Haskell de iyi seçimlerdir) ve en azından bir Montaj dilini okumakla rahat olsun.

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

Tüm projelerin kapsamı nispeten küçük olmalı, amaç tam bir programa sahip olmak değil, karşılaşabileceğiniz farklı alanlarda geniş bir deneyim elde etmek, her biri için gerekli farklı düşünme türlerini öğrenmek, ve ilgi alanlarınızın nerede olduğunu bulmak için.

Bunu yaptıktan sonra, en çok hangi tür programlama ile ilgilendiğiniz konusunda iyi bir fikriniz olacak ve büyük kod tabanlarında çalışma deneyimi elde etmek için açık kaynaklı bir proje bulabilir veya başlatabilirsiniz. dönem projeleri ve diğer geliştiricilerle çalışma.

3
Cercerilla

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

  1. Size gerçekten hitap eden veya ilginizi çeken bir şey seçin ve sadece uygulamaya devam edin. Oyunlara giriyorsanız, bir oyun yazın. Web ile ilgileniyorsanız ilginç ve özgün bir web sitesi bir araya getirin. Hatta bitirmeyi başaramayabilirsiniz, ancak deneyim size çok şey öğretecek.
  2. İlginç bulduğunuz ve buna dahil olduğunuz açık kaynaklı bir proje seçin. Mevcut koddan bilgi edinin ve hataları düzeltmek, birim testleri oluşturmak ve yeni özellikler uygulamak için kullanın.

Bunlardan her ikisi de size ihtiyacınız olan programlama konusunda doğrudan deneyim sunmanın yanı sıra öğrenirken ve topluluktan daha fazla yararlanabilmek için sorular sormanız gerektiğinde programlama topluluklarına dahil olacaksınız. Birçok hata yapacaksınız. Bu iyidir - hata yapmayı bırakırsanız öğrenmeyi bırakmışsınızdır ve kendinize meydan okumanın yeni bir yolunu bulmanız gerekir.

2
glenatron

Benim önerilerim

  • Bir evcil hayvan projesi bulun ve bildiğinizden farklı bir dilde (lyke python/c #) yazın. Bu size hayal edebileceğinizden daha fazlasını öğretecektir. Benzer diğer projelere bakın ve onlarla özellik paritesi elde etmeye çalışın. Bununla yavaşlayabilir ve mütevazı hedeflere sahip olabilir, yeni özelliklerle zorluk derecenizi sürekli artırabilirsiniz. Bu aynı zamanda bir iş görüşmesine gittiğinizde gösteri parçanız olur.
  • Projenizde web hizmetleri, javascript, ajax, geocoding ve temel olarak yazılım dünyasında ilerleme kaydeden her şey için ilgili teknolojileri kullanın.
  • Linux/freebsd gibi diğer işletim sistemleriyle oynayın. Farklı sistemlere ne kadar çok maruz kalırsanız, onları geride bırakan düşünceyi o kadar çok anlayacaksınız ve neden işleri yaptıkları şekilde yaptıklarını anlayacaksınız.
  • Kodunuzun bazı bölümleriyle işiniz bittiğinde, ona geri dönün ve sürekli olarak geliştirmeye çalışın. Verimsizlikleri bulun, gerektiğinde daha fazla yorum ekleyin, mükemmelleştirmeye çalışın.
  • C2.com adresinde dolaşın. Birçok iyi kodlama uygulaması vardır. Bunları öğrenin ve kendi projenize uygulamaya çalışın.
  • Pragmatik programcı ve kod tamamlandı gibi kitapları okuyun, size savaşla sertleştirilmiş programlama hakkında bilgi verecektir.
  • Bu ilgisiz gelebilir, ancak RC arabaları yarışmak, müzik aleti çalmak veya yabancı bir dil öğrenmek gibi bir tane yoksa başka bir teknik hobi bulun. Beyninizin daha fazla parçası ne kadar iyi kullanılırsa ve zaman zaman gevşemeniz gerekir çünkü programlama çok fazla olabilir.
2
Tjaart

Akran değerlendirmeleri gerçekten kodunuzun kalitesini artırmaya yardımcı olur. Gerçek bir mentorunuz yoksa, kodunuzu [gerekli minimum seviyeye indirdikten sonra] StackOverflow veya RefactorMyCode'a veya posta listelerine gönderebilirsiniz; insanlar kodunuzun kalitesini artırmanıza yardımcı olur.

2
missingfaktor

Evet, uygulama programlama becerilerini geliştirmek ve onları keskin tutmak için son derece önemlidir. Ancak tek başınıza pratik yapmak sizi şimdiye kadar götürecektir. Sizden daha fazlasını bilen insanlardan da öğrenmek zorundasınız. Daha önce hiç duymadığınız teknikler, faydaları hemen belli olmayan uygulamalar ve kendinizi asla icat edemeyeceğiniz hileler vardır.

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

Oh, ve eğer NP-complete'nin ne anlama geldiğinden emin değilseniz veya big-O notasyonu sizi korkutuyorsa, muhtemelen bazı hesaplama ve algoritma sınıfları teorisi almalısınız.

1
Dima

Builder, Factory, Composite ve sonunda Observer, Mediator ve Flyweight gibi tasarım desenlerini okumalısınız. Tasarım kalıpları, kodlama çözümleri için her şeyin sonu değil, ancak nesne yönelimli programlamanın teorik kavramlarının nasıl uygulanacağını gösteriyor.

1
Tim Claason

Sadece benim için işe yarayan şeyi önerebilirim. Programlama dilini öğrenmeyi ve onunla satranç motoru yaratmayı hayal etmiştim. Kitaplara, makalelere ve küçük örneklere zaman ayırdım. Bu yüzden geliştirici için daha iyi belgelere sahip gerçek projeleri kontrol etmeye karar verdim. Bir tane seçtim ve projeyi her gün okumaya başladım. Okurken geçen günlerin zaman kaybı olduğunu düşünmeyin. Makaleleri ve kitapları okumak için zaman harcamaktan çok daha iyidir. İlk bakışta net olmayan bir çok şeyle karşılaşacaksınız, ancak araştırmayı sabırla denerseniz bu her gün değişecektir. Bazı şeyleri anlamadığınızda düşük benlik saygınızı korumalısınız.

Tutku duyduğunuz mevcut bir projeyi seçin.Kodları okumaya başlayın, hata ayıklayın ve her gün nasıl çalıştığı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.

1
Freshblood

"Uygulama!" Bu bir klişe.

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

1
Ming-Tang