İyi bir programcı olmak için düşünme becerileri [kapalı]


10

Son 15 yıldır CS olmayan bir dereceyle program yapıyorum. Programlamaya başlamamın temel nedeni, yeni şeyler öğrenmek ve bunları işime uygulamaktan hoşlanmaktı. Programlama hatalarını ve nedenlerini diğerlerinden daha hızlı bulabilir ve düzeltebilirim. Ama kendimi hiçbir zaman bir guru ya da uzman bulamıyorum, belki de CS olmayan binbaşı yüzünden. Harika programcılar gördüğümde, problemleri çözmede çok iyi, benden çok daha iyi olduklarını gördüm.

Kariyerimde iyi bulduğum bir beceri, gereksinimleri ve görevleri ters sırada ve soyut olarak düşünmektir. Bu şekilde, ayrıntısız bir şekilde yapmam için gerçekten neyin gerekli olduğunu görebilirim ve zaten var olan çözüm parçalarını hızlı bir şekilde bulabilirim.

Bu yüzden iyi bir programcı olmak için başka düşünme becerileri olup olmadığını merak ediyorum. Aşağıdaki soru ve cevapları takip ettim ve aslında orada önerilen bazı kitapları okudum. Ama doğrudan programlama çalışmalarım için geçerli olan iyi yöntemleri seçemedim.

Bir programcı, programlama / düşünme becerilerini geliştirmeye yardımcı olmak için hangi programlama dışı kitapları okumalıdır?

/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie

Yanıtlar:


10

Mevcut sorulara işaret ettiğiniz için teşekkür ederiz. Bunların cevapları, istediğini anladığımdan oldukça farklı. Size kendi deneyimlerimden bazı önerilerde bulunacağım. Kendi derecem fizikte, formalite, doğruluk / doğrulama, algoritma analizi, dinamik programlama, veritabanı sistemleri ve başlangıçta büyük ölçüde veri yapıları ve algoritma seçimi ile ilgili boşluklarla mı geldim. En belirgin boşluklar (örneğin veri yapıları ve algoritmalar) Erken kapattım, ancak yine de o bölgedeki kitapları okuyorum, anlayışımı derinleştirmek, alternatif sunumları görmek ve hafızamı yenilemek için. (40 yaşımdayım, bu yüzden kitaplar benim için çalışıyor :)

İşte bir okuma listesi (akıllarına geldikleri sıradan başka bir sırayla).

  1. Programlama İncileri (Jon Bentley)
  2. Daha Programlama İncileri (Jon Bentley)
  3. Bilgisayar Programlama Sanatı (Donald Knuth)
  4. C ++ 'da Algoritmalar (Robert Sedgewick)
  5. Algoritma Tasarım Kılavuzu (Steven Skiena)
  6. Programlama Uygulaması (Kernighan ve Pike)
  7. Programlamanın Öğeleri (Stepanov)
  8. Nasıl Çözülür (Polya)
  9. Bilgisayar Programlarının Yapısı ve Yorumlanması (Abelson ve Sussman)

90'lı yılların ortalarında okuduğumda Katı Kod Yazma'dan da çok şey aldım . Ancak listede böyle olmadığından, düşünme becerileriyle güçlü bir şekilde ilgili olmadığı için (yanlışlıkla yanlış kullanım olasılığını en aza indirmek için API'lerin tasarlanmasıyla daha fazla ilgilenir - veya en azından benim ondan uzaklaştım).

Ayrıca genç olarak Gödel, Escher, Bach (Hofstadter) 'dan çok şey aldım , ancak daha önce işaret ettiğiniz soruların cevaplarında zaten bahsedildi. Doğrudan bilgisayar bilimi becerilerini geliştirmek yerine okumak için bir kitap.

Oldukça fazla sayıda yetenekli programcıyla çalışıyorum ve neredeyse evrensel olarak Programlama İncilerinin hayranları . Kesinlikle röportaj yaptığım adayların daha fazlasının bu kitabın 4. bölümünü okumasını diliyorum.


4

İlk; herhangi bir disiplin için, her zaman bir şekilde daha iyi biri olacak. Bu kısım için endişelenme.

Sonra; Bir CS derecesi güzel ve tüm bunlar ve size verdiği teorik bilgi kesinlikle yararlıdır, ancak hiçbir şekilde birisinin iyi bir programcı olduğunun bir göstergesi değildir. En iyi programcılardan bazıları kendi kendini eğitiyor ve bana inan, dünya ıslak bir kağıt torbadan çıkamayan CS mezunlarıyla doludur. Yani o kısım için de endişelenme.

İyi bir programcı olmak için gerekenlere gelince: Bence iki şey önemlidir. Birincisi, sorunlara kesin bir şekilde yaklaşabilmeniz ve belirli bir soyutlama düzeyinde düşünebilmeniz gerektiğidir. İşaretçileri ve özyinelemeyi anlarsanız, büyük olasılıkla bu cephede iyisinizdir. Diğeri özveri ve sebattır. Diğer tüm zanaatlarda olduğu gibi, programlama da ustalaşmak için on binlerce saatlik özel, odaklanmış uygulama gerektirir, gece boyunca gerçekleşmez. Şu ya da bu şekilde ustalık kazanmak en az on yıl alır. Eğer tutkuluysanız, saatleri koymak, odaklanmak ve yeni zorluklar bulmak kolay olacaktır; eğer değilsen, sanırım hala mümkün, ama hoş bir yolculuk olmayacak.


2

Programlama dilini öğrenmeye başladığınızda hatırlayın İlk önce Kavramı öğrenin ve bir kerede test edin, bu egzersizi yaptıktan sonra pratik olarak yapmak anlamına gelir, kavramları ve kullanımını unutmazsınız.

Sonra tanınmış "uygulama mükemmel yapmak" ve burada programlama için de geçerlidir. Kodla ne kadar çok oynarsanız, kodu çalıştırın, düzeltmek için mevcut kodu okuyun, iyi olmazsınız ama gr8 programcısı.


0

Çok önemli olduğunu düşündüğüm iki program dışı kitap var.

Birincisi, Raymond Smullyan tarafından yazılan "Leydi veya Kaplan" dır. Bu, sinsice bir tür otomata turu turu içeren harika bir mantık bulmacaları setidir. Şık şeyler.

İkincisi, Douglas Hofstadter tarafından “Godel, Escher, Bach: Ebedi Altın Örgü” dir ve sizi tekrarlama ve dil teorisi hakkında düşünmeye sevk eder.

Bir acemi için iyi alışkanlıklar istiyorsanız, Hoover'ın "Çıraklık Desenleri" ve Carter'ın "Yeni Programcılar Hayatta Kalma Kılavuzu" nu okuyun. Bu kitapların her ikisi de becerilerinizi nasıl genişleteceğiniz ve kariyerinizi nasıl genişleteceğiniz hakkında konuşuyor. Farklı yaklaşımlar benimserler, ancak birlikte iyi çalışırlar.


0

Diğer programcıların becerilerini nasıl değerlendirdiğinizle ilgileniyorum.

Özel ve uygulanabilir bilginin genel becerilerden çok daha etkileyici sonuçlar verdiğini düşünüyorum. Zaten çok fazla içeriğiniz varsa ve daha önce benzer sorunlar görmüşseniz, sorunun nedenini çok hızlı bir şekilde bulabilirsiniz. Bir dizi uygulanabilir aracın nasıl kullanılacağını zaten biliyorsanız, çok hızlı bir şekilde çözüm üretebilirsiniz. Bu bilgiye sahip değilseniz, ancak gerekli becerilere sahipseniz, ihtiyacınız olan bilgiyi edinmeniz daha fazla zaman alacaktır. Eğer durum buysa, daha fazla mesafeyi katlamak için daha uzun sürdüğünüz anlamına gelir;

Tabii ki, bilgi biriktirebilir ve daha sonra size yardımcı olacak araçları kullanmayı öğrenirseniz, bu size bir avantaj sağlayacaktır. Çok çeşitli konular hakkında biraz öğrenmenin burada yardımcı olacağını düşünüyorum, çünkü beklediğimden daha fazla örtüşüyorlar ve sadece ihtiyacınız olan bilgiyi nerede arayacağınızı bilmek çok zaman kazandırabilir. Ama belki bu sadece benim.


0

Yeni şeyler öğrenmeyi seviyorsunuz ve hataları hızla düzeltebilirsiniz. Guru olmak için iki önemli öğeye sahip olduğunuz anlamına gelir: coşku ve yetenek. Ama kendinizi asla bir uzman bulamayacağınızı düşünüyorsunuz, belki iki şeye daha ihtiyacınız var: odaklanma ve zaman. Örneğin, Linus Torvalds 1991'de Linux'u ilk kez piyasaya sürdüğünde, kimse onu bir guru olarak görmedi. Hala her gün Linux üzerinde çalışıyor ve bugünlerde Linux çekirdeği Git deposundan birleştirme günlüğünü görebilirsiniz. Odak noktası onu Linux alanındaki en ünlü guru yapar. Zaman soyut bir kavramdır, kendinizi güncel tutmak, sürekli pratik yaparak deneyim kazanmak, bilginizi diğer insanlarla paylaşmak ve geçmişe dönük olarak gelişmek anlamına gelir.

Seninle aynı durum var. 15 yıldır CS olmayan derece (EE derecesi) ile program yapıyorum ve her zaman alanımdaki guru ile olan büyük boşluğumla kafam karıştı. Ama guru olma hayalim var ve açık kaynak kodlu bir projeye katılmaya başladım. Düşünme becerileri uygulama ve deneyimlerden gelir. Bazı kitaplar yardımcı olabilir, ancak bunların önemi esas olarak öğreticidir. Kendinize ait düşünme becerileri kendi deneyiminizden. Şimdi başlayalım!

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.