İş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.
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.
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!
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.
İş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:
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! "
Öğrendiğim her dilde ya bir bahis havuzu ya da bir Bakara oyunu uyguladım.
Bu tür yazılımlar
Ç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ı.
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 :)
Şö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.
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/
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)
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.
Birkaç benzer cevap alıyorsunuz ve benimki de aynı olacak. Kod yazma. Bunu yapmanın iki iyi yolu var.
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.
Benim önerilerim
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.
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.
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.
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.
"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.