İyi bir geliştirici olmayı öğrenmek: Hangi bölümleri atlayabilirsiniz? [kapalı]


31

Gelecek sene bu zamana kadar iyi bir geliştirici olma hedefini kendim belirledim. Bununla, 'yaşam döngüsü', kemerimin altında birkaç iyi uygulama / site / webapps geliştirme ve en önemlisi, saatlerce bu kadarını bilmesi gereken bir kişi tarafından sideline uğramadan sabit bir hızda çalışabilme becerisi kazanmanın tam deneyimini kastediyorum. tekniği.

Sıfırdan başlamıyorum. Çok fazla html / css, SQL, javascript, python ve VB.net yazdım ve C ve Java gibi diğer dilleri de okudum. OOP, tasarım kalıpları, TDD, karmaşıklık, hesaplamalı dilbilim, işaretçiler / referanslar, fonksiyonel programlama ve diğer akademik / teorik konular hakkında bilgiler biliyorum . Sadece henüz bu şeyleri gerçekten yaptığımı söyleyemem .

Bu yüzden hızlanmak için kalkmak istiyorum ve sonraki bir tarihe kadar hangi şeyleri bırakabileceğimi bilmek istiyorum. Örneğin, algoritmaları ve onların arkasındaki matematiği incelemek ilginç ve hepsidir, ama şu ana kadar en basit iç içe döngülerden başka bir şey yazmaya ihtiyacım olmadı. Düşük seviye operasyonların daha net bir resmini görmek için Meclis’i araştırmak iyi olurdu ... ama günlük işlerde nadiren ihlal edildiğini hayal ediyorum. Öte yandan, işlevsel bir programlama diline bakmak, daha anlaşılır ve gizli hatalara daha az eğilimli programlar yazmama yardımcı olabilir (şu anda en büyük zorluğu buluyorum, uygulamanın karmaşıklığı onu anlama kapasitemi aştığında - Mesela etrafta veri iletmek gayet güzeldi ... ağrılı bir adım olan AJAX ile yapmaya başladım.

Temel yetenekleri olan bir programcıyım - geliştirmeye odaklanmam gereken beceriler nelerdir?

(ayrıca Unix yeteneklerim çok zayıf ve ayrıca Windows konfigürasyon bilgisi de ... bunun için ne kadar zaman harcamam gerektiğinden emin değilim)


41
Uyuduğunuz kısmı atlayabilirsiniz :-)
Jesse McCulloch 17

17
Garip bir soru. Öğrenme atlanıyor mu? Hesaplama yapmaz. Bana bir alıntı hatırlatıyor: “Hedefe değil yolculuğa odaklan. Sevinç bir aktiviteyi bitirmek değil, onu yapmakta bulunur. ”
Maglob

5
Atla dedim ve sonra geri dön ('daha sonraki bir tarihe bırak'). Tüm bu şeylerin satır boyunca daha da önemli olacağını inkar etmiyorum.
Andrew M

13
Bir geliştirici olarak hatırlamanız gereken bir şey: "atla ve sonra geri dön" öğelerini koyduğun listeler her zaman kaybolmuş gibi görünüyor ...
Wonko The Sane

8
Tembel olmayı atla. Öğrenme uğruna her şeyi öğrenin.
DexterW

Yanıtlar:


12

Bunlar, yaptığım şeye değil, görüşte yapmam gerektiğini düşündüğüm şeylere dayanan önerilerdir:

  1. Yeni hiper teknolojiler atlayın çünkü çoğu başarısız olur. Risk veya iş planınız olanlar için istisnalar oluşturun, ancak her zaman bir vazgeçme (değiştirme teknolojisi) stratejisine sahip olun.
  2. Her programlama dili ve kütüphanesinde uzmanlaşmayı atlayın. Yapmayı sevdiğiniz için ödediğiniz nispeten az sayıda (yedi) programlama dili ve kütüphanesinde uzman olmaya çalışın. Bununla birlikte, farklı bir programlama dilinin nüanslarını anlamaya çalışma fırsatını kaçırmayın. Yeni bir dilde yetkin olmak ve standart kütüphaneleri yaklaşık iki ay sürüyor.
  3. Bir geçici çözüm olduğunda, tek platform teknolojilerini atlayın.
  4. MS Windows atla. Çok fazla yardımcısı var.
  5. Uzman olmayı atlayın, ancak seçici olarak başkalarının sizin olduğunuzu düşünmesine izin verin.
  6. Yapabiliyorsanız kurumsal voodoo'yu ("kullanıcı odaklı, kurumsal bileşen mimarisi") atlayın. Hiçbir yere götürmez.
  7. C ++ 'ı (başkalarının bununla ilgilenmesine izin ver) atlayın ve Python bağlarını bekleyin.

Aslında, öğrenme yeteneğinize güveniyorsanız, herhangi bir şeyi atlayabilirsiniz. Bence bilmek istediklerinin şunun gibi bir soruyla daha iyi hizmet edileceğini düşünüyorum:

  • Biliyorum bu , ben eksik ediyorum o . Bundan bir yıl sonra ne öğrenmeliyim?
  • İyi para ödeyen projelerim olması hoşuma gidiyor, ancak gerçekten sevdiğim şey bu . Bir yıl içinde buna girmeyi ne öğrenmeliyim?

İyi geliştiricilerin her şeyi bildiklerini unutmayın, çünkü hesaplama nadiren kendisini hesaplamakla ilgilidir, ancak daha çok insani uğraşın herhangi bir alanına uygulamakla ilgilidir, teorik fizik, ekosistemin korunması veya Matrix'teki fotoğrafik etkiler olabilir .

Son olarak, lütfen tasarım, soyutlama, algoritmalar ve karmaşıklık hakkında bilgi edinin. Ben, bana öğreten programcılar ve saygı duyduğum programcılar size teşekkür edecek ve bunun için teşekkür edeceklerdir. Çalışmaya zamanınız varsa, Code Complete'in ilk basımını okumanızı tavsiye ederim .


Teşekkürler. Bu muhtemelen şu ana kadarki en sevdiğim cevap ya da en azından sorduğum şeye en yakın olanı. Code Complete'i zaten okudum, gerçekten, harika kitap, onlara gelmeden önce bir çok engelden kurtulmamda bana yardımcı oldu.
Andrew M,

@Andrew W. Yaptığım pintlerin bir kısmının "yanak dili" olduğuna dikkat edin . Bu sitenin kardeşi stackoverflow.com , yeni şeyleri esnek ve yapılandırılmamış bir şekilde öğrenmek için harika bir yerdir. Ayrıca, geliştiricilerin gerçekte ne üzerinde çalıştıkları hakkında iyi bir fikir sağlar.
Apalala

"6. Kurumsal voodoo'yu atla (" kullanıcı odaklı, kurumsal bileşen mimarisi ") nasıl yapılacağını nasıl tanımlarsınız? Kullanıcı odaklı, kurumsal bileşen mimarisi nedir? N katmanlı gelişme? Tasarım desenleri, başka bir şey?
Bob

@Bob Temel şirket fadesi, onlarca yıldır yeni bir teknolojinin veya metodolojinin programcı olmayanların çalışma programları yazmasına izin vereceği olmuştur. CASE, UML-kod ve Kurumsal Mimari Çerçeveleri. Tekrarlayan: MDA'lar oturup bilgisayarları, bir süreç şeması ve yazılım oluşturuyorlar.
Apalala

+1. "Kurumsal vudu atla" yı ve "aşırı teknoloji atlamayı" seviyorum. Süper harika şeyler bile (Python gibi) hala C & C ++ dilinde yazılmıştır. Hmmm ... Bunun neden olduğunu merak ediyorum ...
riwalk

35

Bir evcil hayvan uygulaması seçin. Bu çok basit bir şekilde başlayabilen fakat daha derin kazdıkça biraz karmaşıklığa sahip bir şey olmalıdır. Aynı zamanda sizi ilgilendiren bir şey olmalı çünkü onunla çok zaman geçireceksiniz. Ayrıca bir şeyler yaptığından emin ol. Şu anda bir çerçeve veya web servisi yazmayı denemeyin. Sadece düzenli bir kullanıcı odaklı uygulama.

Git, mercurial veya market'i indirin ve onlarla bir depo oluşturmayı öğrenin (bu çok basit).

Şimdi, evcil hayvan projenizi, yeteneklerinizden en iyi şekilde kullanmak istediğiniz teknolojiyi kullanarak gerçekleştirin. Kendine son teslim tarihi verin, böylece yapıldığından emin olmak için. Değişiklikleri izlemek için yaptığınız kaynak kontrol havuzunu kullanın. Dallar ve benzerleri hakkında endişelenmeyin, hatalardan vazgeçebildiğinizden emin olun.

Uygulamanızı yazmayı tamamladığınızda, etiketleyin. Bu senin V1'in. Michael Tüylerin Eski Kodla Etkili Çalışmalarını , Bob Martin'in Çevik Yazılım Geliştirme İlkelerini, Modellerini ve Uygulamalarını ve Temiz Kodlarını ve Andrew Hunt ve David Thomas'ın Pragmatik Programcısı'nı edinin . Herhangi bir sırayla okumaktan çekinmeyin, aralarında atlamak bile. Fikirlerin birçoğu tekrarlanıyor, ancak aynı zamanda farklı açılardan sunuldukları için anlayışınızı da güçlendirecekler. (Muhtemelen referans için GoF Tasarım Desenleri kitabını almak isteyeceksiniz )

Kitapları okurken, projenizi geliştirmek için öğrendiklerinizi uygulamaya çalışın. Kaynak kontrolünüzü yaptığınız değişikliklerin bir günlüğü olarak kullandığınızdan emin olun.

Doğru şekilde yapılırsa, yeniden düzenleme, teste dayalı tasarım, mevcut kodu geliştirme ve tasarım desenlerinin (diğer becerilerin yanı sıra) nasıl uygulanacağı (ve ne zaman) gibi iyi beceriler öğrenmiş olmalısınız.

İdeal olarak, ilerlemenizi ölçmenize yardımcı olacak bir danışmanınız olacaktır. İlgileniyorsanız, benimle iletişime geçebilirsiniz (kharasoft dot net'de firstinitiallastname) ve bir planla size yardımcı olacağım ve inceleme sağlayacağım.

Kariyerinizi ilerletmek için inisiyatif aldığınız için tebrikler! Ondan birçok ödül gelecek.


Teşekkürler Mike Şu anda (önümüzdeki birkaç ay), MSc yazılım projemi bitirdim, ancak bundan sonra boş zamanlarımda üzerinde çalışmak istediğim birkaç şey var. Birincisi, sınıflarımdan biri için kısmen geliştirdiğim işletmeler için basit bir ekip motivasyon uygulaması. Bu benim evcil hayvan projem olarak seçebileceğim bir şey, kullanıcı arayüzünü parlatıyor, yeni özellikler ekliyor, eşzamanlılık / çoklu durumlar, web'e bağlantı noktası gibi şeylere zamanla giriyorlar. Belki zamanı geldiğinde seni teklifine götürürüm. Ve bu kitaplar şimdi okuma listemde.
Andrew M

1
Martin Fowler & Kent Beck tarafından "Yenileme: Mevcut Kod Tasarımını İyileştirme" de öneriyorum.
Oscar Mederos

1
Ben zaten bir tane var aslında, ama yine de hepsini okumam. 'Klasikleri' almak için Glasgow Üniversitesi (Haskell'in evi ...) yanındaki yerel yardım kitapçığına sıkça rastladım. Şimdiye kadar Kod Tamamlandı 2, Yeniden Yönlendirme, Transsending CSS, CSS Tasarımından Zen, Javascript Tanımlayıcı Rehber, K&R C, GOF ve ASP.NET Web Sitesi Programlama, Java Koleksiyonları, Veri Tabanı Sistemleri (Connelly / Begg), Unix, Programlama Ruby, Func Prog'a Giriş, Haskell, UML Demystified, Java 2 Kullanarak Öğrencilerin Kılavuzu, Java 2. Başlarken, hepsini bir gün okumaya başlayacağım ... mümkün olduğunda ucuz satın alabilirim.
Andrew M,

28

İyi bir geliştiricinin sırrını biliyor musun?

Her şeyi bilmiyorsunuz ama ne bilmediğinizi ve ihtiyaç duyduğunuzda bilmediğiniz şeyler hakkında daha fazla bilgiyi nerede bulacağınızı biliyorsunuz.

  • Bahsettiğiniz her şeyi ayrıntılarıyla bilmek mümkün değil - bir beyin için çok fazla.
  • Hepsini hatırlamak mümkün değildir - kullanılmayan bilgi hafızadan silinir
  • Pratik uygulamaların çoğunda zaten buna ihtiyacın yok.

İmkansızı elde etmeye çalışmak, yalnızca endişe, uykusuzluk ve kendine güven kaybına yol açacaktır.


'Her şeyi bilmek' niyetinde değilim ama şu anda bir yazılım ekibinin beni istihdam etmesini istiyor gibi hissediyorum. Belki devam ederken her şeyi toparlayabilirim ve yakında verimli bir ekip üyesi olabilirim, ama belki de öğrenme miktarı benim için çok fazla olurdu. İnsanlardan kumar oynamalarını istemekten hoşlanmıyorum. Profesyonel geliştiricilerin ulaşabilecekleri bir konfor bölgesi olmalı, tamam, hala bir şeyler aramaya ve yeni numaralar öğrenmeye ihtiyaç duyuyorlar, ama büyük ölçüde işleri halletmeleri gerekiyor. Çekirdek beceri ile (ki artık bilinçli olarak farkında olmayabilirler). Olmaya çalıştığım yer burası.
Andrew M

1
@Ayrıca, küçük programcıların rehberlik talep etmesi bekleniyor. Öğrenme, uygulamalı deneyim gerektirir ...

Evet, muhtemelen haklısın, ama iş ilanlarında bunu asla söyleme. Umarım onları dolaştırabilir ve doğrudan ekip yöneticileri ile iletişim kurabilir / iletişim kurabilirim. Ama şu anda ne var becerileri ile bir iş olamayacağını kapalı şans, sadece olmak istiyorum lanet emin ben bugünden itibaren bir yıl aynı sorun var olmaz.
Andrew M

10

Sanırım cevabı her geliştirici için, uzmanlık yapmak istediği şeye bağlı olarak farklı olacağını düşünüyorum. Kendiniz için iyi bir cevap belirlemek için aşağıdaki algoritmayı öneriyorum:

  1. Öğrenmek istediğiniz bir beceri kullanan basit bir proje seçin.

  2. Bu beceriye odaklanarak uygulayın.

  3. Bu projenin nasıl ortaya çıktığı ve neleri sevmediğiniz hakkında sevdiğinize dikkat edin.

  4. Projenin nasıl gerçekleştiğiyle ilgili hoşunuza giden şeyler için kendinize sorun: "Bu, zevk alacağım konusunda uzmanlaşabileceğimi düşündüğüm bir şey mi yoksa uzmanlaşabileceğim ve zevk alacağım bir şeyle mi ilgili?"
    a. Eğer öyleyse, bu uzmanlık ile ilgili diğer becerileri düşünün ve bunları yazın.
    b. Değilse, kendinizi arkaya yaslayın, iyi olduğunuz bir şey olarak not edin ve devam edin.

  5. Projenin nasıl sonuçlandığını sevmediğiniz şeyler için kendinize sorun, "Bu nasıl yapmam gerektiğini bilmem gereken bir şey mi (ya da nasıl yapılacağını bilmek istiyorum), ya da bu benim yapabileceğim ve isteyeceğim bir gelişme yönü mü? Genel olarak başkalarına bırakmak için? "
    a. Nasıl yapmak istediğinizi veya bilmeniz gerektiğini düşünüyorsanız, adım 4a'da başlayan listeye ekleyin. b. Bu yönü başkalarına bırakabileceğinizi düşünüyorsanız, bir insan olarak sınırlarınız üzerinde melankolik bir şekilde iç içe çekin, bir zayıflık olarak not edin ve devam edin.

  6. Uzman olabileceğiniz ve 4a ve 5a'dan bilmeniz gerekenler listesinden bir beceri seçin. Programlamanızın olmasını istediğinize daha yakın olması için geliştirilebilecek en önemli şeyin ne olduğunu seçin.

  7. Beyin fırtınası yapabileceğiniz basit projeler bu beceriyi kullanabilir. Birini seçin, muhtemelen listede yüksek olan başka bir beceriyi uygulayabilmenizi sağlayacak bir proje seçin, böylece 2 kuşu bir taşla öldürebilirsiniz (n / 2, n ile aynı karmaşıklık olmasına rağmen, bu şekilde daha hızlı olacaktır).

  8. Bu projeyi kullanarak 2. adıma dönün.

Hayatınızın geri kalanında bu döngüyü tekrarlayın, ya da artık iyi bir programcı olmayı istemediğinize kadar (hey, aç yetimleri beslemek için kodlamayı bırakmak istiyorsanız, sizi durduramayacağım!).

Test ve çok katmanlı web uygulamalarında uzmanım. Bir sonraki projem TDD'yi ve belki de ASP .NET MVC 2'yi uygulayacak. TDD testlerimdeki gücümü arttırıyor (SDET'im, bu yüzden TDD bana genel olarak dışlamadığım birimin test edilmesine dair bir fikir verdi.) test araçlarımda) ve iyi tasarımdaki bir zayıflığa da yardımcı olmak (umarım) ve MVC ön uç tasarımdaki zayıflığımla ilgili olarak yardımcı olmaktadır. Listem performans testi, web güvenliği ve iyi (ve iyi görünümlü) bir web sitesi oluşturmak için bir web tasarımcısıyla çalışmak gibi şeyleri içerir.

Erken aldığım ve çok yararlı bulduğum bir başka tavsiye: Uzmanlıklar geniş ya da derin olabilir. Başka bir deyişle, her şeyin bir kısmını daarlamak bir tür uzmanlıktır. Uzmanlığınızın ne olmasını istediğinizi çözmeye çalışırken bunu aklınızda bulundurun.

Kesilmiş ve kurutulmuş bir şey istersen özür dilerim. Sorunun böyle bir cevabı olduğunu sanmıyorum.


6

Yıllardır programlama yapıyorum (7 yaşımdan beri - 30'larımın sonlarındayım).

Eğer sizin yerinizde olsaydım, kesinlikle önereceğim bir şey vardı - ama diğer cevapların çoğunda göremediğim şey, belirli bir projede birlikte çalışacak en az bir tane programcı bulmak.

Bunu yapmak gibi çevik programlama hakkında okumak - SCRUM vb ve çevik ve test odaklı bir şekilde çalışır. Birlikte çalışın - ancak kodun çoğunu yazmanıza izin vermeyin - gerçekten bir çift geliştirici olarak üzerinde çalışın.

Ve herşeyin kendi versiyonunu yazarken bilgi verici olabilir - tanıdığım en iyi geliştiriciler, kesinlikle kendileri yapmak zorunda oldukları şeyler için EXCEPT kodunu kullanmaktan kaçınmakta ustalar - yani projeleri için benzersiz olanın özü.

Zamanın geri kalan kısmı kodu tekrar kullanacaklar - API'leri çağırın, açık kaynaklı projeler kullanın (uygunsa) ve kısacası, sadece bunu yapmak için tekerleği (veya veri erişim katmanlarını vb.) Yeniden icat etmekten kaçının.

Ve sonra bunu yaparken - özellikle açık kaynaklı projelerle de bu projelere geri dönecekler - kodu okuyacaklar, temizleyecekler, hataları düzeltecekler, uzantılara katkıda bulunacaklar vs.

Gerçek dünya gelişimi genellikle bir ekibin parçası olarak çalışmakla ilgilidir - bu yüzden bunu yapmanızı şiddetle tavsiye ediyorum. Sizinle belirli bir proje üzerinde çalışmak isteyen diğer programcıları tanımıyorsanız, 1000'in üzerinde açık kaynaklı projeye bakmanızı ve aktif olarak dahil olmak üzere bir veya daha fazlasını seçmenizi öneririm - büyük olasılıkla bir veya daha fazla proje bulabilirsiniz. kişisel bir "kaşıntı" tırmalayın - büyük olasılıkla katkıda bulunabileceğiniz ve üzerinde çalışabileceğiniz diğer geliştiricileri bulabileceğiniz bir proje bulacaksınız.

Ve şahsen, "elimden geleni atla" tavrınızın kötü olduğuna ilişkin tavsiyeyi indirgeyeceğim - geliştiricileri işe alırken, her şeyi kendileri yapmaya çalışmayan geliştiriciler istiyorum. İlk içgüdüsü kendileri yazmak değil, ilk içgüdüsü iş gereksinimlerini ve gereksinimlerini kod yazmadan (ve ardından gereken minimum kodu yazarak) nasıl elde edebileceklerini görmek isteyen geliştiricileri şiddetle tercih ederim.

Bunların hepsi aynı zamanda iş gerekliliklerini kesinlikle göz önünde bulundurarak test etmeyi ve korumayı sürdürürken ve evet, zaman zaman yapılan testler aslında bazı kodları yeniden yazmanız veya kendiniz yazmanız gerektiğini gösterir (zaman zaman bunu bir projeyi geliştirmek için buna katkıda bulunabilirsiniz).


+1 İyi fikir - diğer insanlarla çalışma deneyimi çok önemlidir.
Michael K,

+1 Bir geliştiricinin sözlerini duymak için, aşılması zor sebeplerden dolayı çok nadir, iyi bir ekip çalıştırmalısınız - önce kodun gerekli olup olmadığına bakın. Ayrıca takım programlaması için de önemlidir.
Orbling

Teşekkür ederim Shannon. Bazı insanların gereksiz bazı şeyleri atlama fikrine katılmamış olmalarına biraz şaşırdım. Aslında şu an çok saf / mükemmeliyetçiyim, her zaman her şeyi “en iyi yol” olarak öğrenmeye çalışıyorum - bazen bir takılmaya kapılan ve bir düzine kadar en iyilerini yok etmeleri umrunda olmayan insanları kıskanıyorum. uygulamalarını yapar veya sistemlerini neyin işe yaradığını sadece kısmen anlar. Ve tabii ki, yapabildiğim zaman açık kaynaklı kütüphanelerden yararlanmayı tercih ediyorum.
Andrew M

5

Bu sadece ihtiyaç duyduğunuzda bir şeyler okumak ve bir şeyler öğrenmek meselesi.

Eğer bir yerinize sıkışıp kalıyorsanız ya da "çözümümün bir şeyi eksik olduğunu" hissediyorsanız - bu konuda daha fazla bilgi edinmek için biraz zaman harcamanız gerekiyor!


Ben her zaman bu hissi alıyorum. İyi cevap.
JeffO,

5

Atlamak için bit bulmaya çalışmak, sahip olmak için en iyi tutum değildir.

Söylendiği gibi, hangi bir dev olmanın hangi kısımlarını tercih ettiğin hakkında bir fikir edindikten sonra belirli alanlara yoğunlaşmayı hedefleyebilirsin.

Belki web geliştirme, örneğin windows dev zararına sadık.

Beni daha faydalı hale getirdiği için tüm esnafların bir parçası olmayı seviyorum.


3

Bir yılda, özellikle dik bir öğrenme eğrisinde, "birkaç iyi uygulama / site / webapps" tamamlamış olmanız pek mümkün değildir. Öğreneceğin tek şey tükenmişlik.

Bunun yerine, ilgilendiğiniz birine odaklanın ve bunu öğrenme aracı olarak kullanın. Üretim kalitesi olduğu için endişelenmeyin (olmayacak), ancak geri gelmeye devam edebileceğiniz bir sandbox olarak kullanın.

Mesela ben fantezi beyzbolu ile ilgileniyorum. Yıllar boyunca, ekran kazıma stat toplama robot şeyden, yalnızca HTML web sitesine, ölçeklenebilir bir SQL Server veritabanını besleyen tam bir web uygulamasına, ... Bir sonraki evcil hayvan projem, çocukların taslak yapmak için sanal bir masa etrafında oturmasına izin veren gerçek zamanlı bir Silverlight uygulaması olabilir.

Bunların hiçbiri dünyam dışında bu kadar faydalı değil. Ancak, her biri daha iyi bir programcı olmama ve konfor alanım dışındaki teknolojileri öğrenmeme yardımcı oldu.


3

Programlamaya başlamak için hangi dili kullanacağınız konusunda endişelenmekle bit yapın.
Sadece bir tanesini seçin ve devam edin.
API'nin giriş ve çıkışlarını öğrenmek için zamanınızı harcayın.

İşte nedeni:

Hangisi daha iyi, XUL, Eclipse'in SWT'si veya wxWindows? Bilmiyorum. Hepsi o kadar büyük dünyalar ki onları gerçekten değerlendirip söyleyemem. Dersleri okumak için yeterli değil. Gerçekten yeterince iyi olduğunu bilmeden önce bir veya iki yıl boyunca bu şeyle ter atmanız ve kanamanız gerekir.

Joel Spolsky, "Programlama Üzerine Lord Palmerston" http://www.joelonsoftware.com/articles/LordPalmerston.html


3

"Bunu zaten bilmeli" sendromu hakkında çok fazla endişelenmem. Bu iş kolunda daima yeni bir şeyler öğreniyorsunuz. Yılda bir ya da iki kez, patronum bana bir iletişim protokolü ya da entegre devre ya da başka bir şey için 200-300 sayfalık bir belgeye bağlantı gönderir ve bana içeriği konusunda uzman olarak görev yapmamı rica eder. Kimse sizden öğrenmenin "bitmiş" olduğu bir noktaya gelmenizi beklemiyor.

Geliştirme süreci ilerledikçe, sadece olduğu gibi kabul edin. Bir ya da iki kez yanlış olana kadar gerçekten en yararlı olanı bilemezsiniz. Performansınızı değerlendirin ve bir dahaki sefere iyileştirmeler yapın.

Mesela, geçen yıl inşa dengesizliği ile ilgili birçok problemim vardı. Kaynak kontrolünden güncelleme yapmaktan korkuyordum, çünkü yaptığım diğer zamanlar gibi görünüyordu, her şeyi tekrar derlemek için yarım gün harcadım. Ancak, güncellemeler arasında çok uzun süre beklersem, sonunda birleşme korkunç olurdu. Ayrıca zaman zaman güncellemeyi ertelemediğim ve yeni özellikler için zaten yaptığım kısmi değişiklikleri izlemeyi zorlaştıran acil hatalar da yaşıyorum.

Şey, şirketim bunu genel olarak düzeltmek için çalışıyor, ama bu arada kendim için kullanabileceğim bir şeye ihtiyacım vardı. Yapı stabilitesi üzerine araştırma yaptım, dağıtılmış sürüm kontrolü keşfettim, bazı dallanma modelleriyle denedim ve şimdi yerel olarak birkaç pazar şubesi kullanan ve paylaşmam gerektiğinde şirketimin merkezi kaynak kontrolünü kullanan çok uygulanabilir bir hibrit sisteme sahip oldum.

Demek istediğim, iki yıl önce bana yazılım araçları ve süreçleri hakkında ne öğrenmem gerektiğini sormuş olsaydım, size söyleyemezdim. Madene benzeyen bir çalışma ortamınız yoksa, hibrit bir kaynak kontrolü, marjinal fayda sağlamak için sadece fazladan bir karmaşıklıktır, ancak kişisel verimliliğime ve aklıma inanılmaz bir şekilde yardımcı oldu.

Bir sonraki adım benim tahmin becerilerim üzerinde çalışıyor, ama bundan sonra ne geleceği hakkında hiçbir fikrim yok ve kesinlikle internette hangi yabancının bir yıl sonra en faydalı olacağını kesinlikle bilmiyorum. Bunu sadece sen cevaplayabilirsin.


2

Burada iki noktayı paylaşmak istiyorum:

  1. Algoritma açısından düşünmek her zaman yardımcı olacaktır. Başlarken, her zaman gerçek hayat senaryoları ve bunların arkasındaki güncel algoritmalar hakkında düşünürüm ve daima onları optimize etmeye çalışırım.
  2. Asla her şeyden vazgeçme Öğrenme ve Anlama Yeni şeyleri / Teknolojileri, bilgisayarlarda hiçbir şey yoktur GURU, her zaman öğrenmeye devam etmeniz gerekir ve bu gerçeği önceden kabul etmeniz ve öğrenmeye devam etmeniz gerekecektir.

2

Yaptığın ve iyi yapmayı öğrendiğin sürece ne yaptığın önemli değil .

Gönderdiğiniz tüm fikirler bilmek ve size yardımcı olacak iyi şeylerdir. Hangisi seni en çok ilgilendirir? Unix yeteneklerinin zayıf olduğunu söylemiştin. Linux'u bilgisayarınıza yerleştirmeyi düşündünüz mü? C'yi bilmek, Unix sistemlerini programlamada yeni bir dil öğrenme sıkıntısı yaşamadan ayaklarınızı ıslatabildiğiniz için yardımcı olurdu. Bu sizi ilgilendirirse, aygıt sürücüleri hakkında bilgi edinme fırsatı da olabilir.

Geliştirici eğitiminizde bir noktada öğrenme meclisini ve fonksiyonel ilkeleri tavsiye ederim. Her ikisi de, bir Java programcısı olarak "normal" rolümde bana çok yardımcı oldu. Lisp ve Prolog'u öğrendim. Şahsen ben Lisp'i tercih ederim, ama bu bir fikir meselesi. Meclis, bilgisayarın programınızı nasıl gördüğünü düşünmenizi öğretir ve bunun her programcının öğrenmesi için önemli olduğunu düşünüyorum. İşlevsel programlama size daha belirleyici düşünmeyi öğretir; bu benim durumumda daha fazla test edilebilir kod yazmamda bana yardımcı oldu ve bu da güvenli bir konu.

Yani, hoşunuza giden bir şey seçin ve onunla birkaç ay geçirin. Bunun için daha iyi olacaksınız ve bu kendi eğitiminizde bir sonraki projeye adım attığını kanıtlayabilir. Oh evet ve ne yaparsan yap, do not öğrenme durdurun. İkincisi, durgunlaşmaya başlarsın.


Aslında sadece bazı Unix / Linux denemek amacıyla eski bir bilgisayar var. Ubuntu'nun zaten üzerinde çalıştığı ortaya çıktı, fakat bir xorg.conf dosyasını ya da grafik kartının çalışmasını sağlamak için bir şeyler düzenlerken ... ... iyi bir eğlendim. Kendim dedim, sadece böyle şeyler yapmak bilginizi genişletir. Ama aynı zamanda zaman alıcı ve gerçekten istediğim gelecek yıl için genel yazılım / web geliştirme için uygun bir iş adayı olmak. Google’da bir iş bulmaya çalışmıyorum, sadece işverenler için “güvenli bir bahis” olmak için. Ve artık 17 değilim, 25 yaşındayım ... Gerçekten kariyerime en kısa sürede öncelik vermek ve kariyerimi yürütmek istiyorum.
Andrew M,

Tavsiyen için teşekkürler. Beni en çok neyin ilgilendirdiğini sordun - iyi, muhtemelen web uygulamaları ve web tasarımı. Kendi yeteneklerime göre, nişim muhtemelen estetiğin önemli olduğu ve teknik yönlerin fazla zor olmadığı bir şey yapıyor . WYSIWYG araçlarını kullanan web tasarımcıları, programlamam onlar için rekabet avantajı sağlayabilir, ancak uzman programcılar bazen çok da kötü olmadığım bir tasarım anlayışı / stil dokunuşundan yoksundur.
Andrew M

0

Bir yılda iyi bir geliştirici olmayı öğrenmeyi bırak. 10 yıl içinde iyi bir geliştirici olmayı öğrenin.

Bağlantılı makaleden:

Anahtar müzakere edici bir uygulamadır: sadece tekrar tekrar yapmak değil, mevcut yeteneğinizin hemen ötesinde bir görevle kendinize meydan okumak, denemek, yaparken ve sonrasında performansınızı analiz etmek ve hataları düzeltmek. Ardından tekrarlayın. Ve tekrarla. Gerçek bir kısayol yok gibi görünüyor: 4 yaşında müzikal bir dahisi olan Mozart bile, dünya standartlarında müzik yapmaya başlamadan 13 yıl önce aldı.

Bir yıl içinde hala bir kumar olacaksın. Bununla ilgili yapabileceğin hiçbir şey yok. İyi şirketler gençlere yatırım olarak bakar. Aradıkları şey iyi bir mevcut beceri değil, potansiyel beceri, temel bilgileri ve coşkuyu iyi bir şekilde kavramaktır. Giriş seviyesi bir iş bulmak için bu nitelikleri bir röportajda görmeniz gerekir.

Kendi zamanında ne kadar programlama yapıyorsun? Muhtemelen hızlı bir gelişme göstereceğiniz potansiyel bir işvereni ikna etmenin temel faktörü olacaktır. Hangi projeleri tamamladınız ? Tamamlanan projeler özveri göstermektedir.

Sadece 2 farklı şirkette çalıştım, ancak her biri üretken olmadan önce öğrenmem gereken kendi iç teknolojisine sahipti. Bu ilk yumru, ne kadar deneyime sahip olduğunla fazla azalmaz. İyi işverenler ilk öğrenme dönemini bekler.

Endişelenmeyi bırak ve programa git. : D


1
Norvig, seçkin bir programcı olmakla birlikte “mükemmellik” hakkında konuşuyordu. Ben sadece yeterlilikten bahsediyorum ve işverenlerin çok fazla umursayamayacağı şeylere (bu yıl) zaman harcamıyorum. Yine de tavsiyen için teşekkürler, ne yaparsam yapayım, daha fazla proje tamamlamaya çalışacağım. Bundan bahsetmişken ... Yazacak bazı GAE işleyicileri var.
Andrew M

@Ve M, 'Birçoğumuz için en büyük tehlike, hedefimizi çok yükseğe koymakta ve kısa kalmamakta yatar; ama hedefimizi çok düşük belirleme ve izimize ulaşma. 'Michelangelo. Tamamen değil, seçkin bir programcı olmayı hedefleyin.
Dominique McDonnell

0

Size ilham verici okuma adımlarını ve şimdiye kadarki en dönüm anlarımı vermek istiyorum.

Yazılım kariyerimde birkaç "WOW" anı oldu. Aşağıdaki gibi gittiler:

Birinci Tasarım Desenlerini Yönetin - Bu, OOP / OOD dünyasını benim için mutlak bir temel olarak açtı.

Robert C. Martin - Temiz Kod - Bundan heyecanla günlerce uyumadım! Ne kadar basit olursa, çocuk temiz kodlu olmanın ne demek olduğunu unutmuştu ve bu da beni tekrar yoluna soktu.

Robert C. Martin - Çevik Kalıplar ve Uygulamalar - Şimdi kodlama kariyerimi bu ilkelere dayanarak yaşıyorum. SOLID kelimesi yazdığım her kod parçası için aklımdan geçiyor. Bu, Temiz Kod ile birlikte, onlar tarafından o kadar etkilenmiştim ki, işverenimi o zaman yaklaşık 15 geliştiricinin tüm şirketine öğretmeme izin verdiğine ikna ettim. Ben bile bir kıdemli değildim, sunumlarda iyiydim, ama coşkum oldu.

Son "WOW" anım TDD'nin keşfi idi. Farkındalığımı, aynı "WOW" etkisine sahip olan 2 yakın arkadaşla paylaştım. Hepimiz birbirimize bağlıydık ve şimdi Yazılım Geliştirme Yaşam Döngüsü'nde test etmenin önemini tartışabileceğimiz ve her zaman tartışacağımız kadar pratik yapıyoruz - kendini doğrulayan kodlara sahip olmak, sizin için testi yapan daha yavaş insanlardan oluşan bir ekipten daha iyidir;).

Kalbime çok yakın olduğumu düşündüğüm son bir nokta, bir senaryo ayrıştırıcısı, bir REST kütüphanesi, bir test çerçevesi vb. Sadece eğlence için! Sadece bundan hoşlanmayacaksınız, ama henüz tam olarak anlamadığım şeyleri yazmaya çalışmanın bana daha fazla saygı gösterdiğini ve çok daha derinlemesine anladığımı ve beni daha iyi anlamaya zorladığını buldum.

Üzgünüm, sorudan ne kadar daldığımı fark ettim. Yukarıda bahsettiğim şey benim mutlak özümdü. Yukarıdaki malzemelerin hiçbiri beni terk etmedi ve bana öğrenmenin gerçekten daha geniş ve kolay hale geldiği kadar büyük soyut bir düşünce vermedi. Bu nedenle, sorunuza cevaben, kod yazmanın ve yazılım tasarımının temel ilkelerini atlamamaya çalışın. Belirli problemleri çözmek için diğer özel araçlar çok önemli değildir.


0

Öğrenme ve bilgi birikimi bir bina inşa etmek gibidir, her tuğla bir başkasına oturur, temellerine güvenirler.

Bir şeyleri atlamaya başlarsanız, acele ederek, havada desteklenen cılız gerçeklerle karşılaşırsınız. Onları, düşecekleri korku için kullanmaya cesaret edemezsiniz ve alacaklardır. Sınırları bilmeniz gerektiğinden, mantıklı olmanız gerekmiyorsa, gerçekler yanlış olabilir.

Temelleri, matematiği, algoritmaları ve akrabalarını atlamak istediğiniz için özellikle endişeliyim. Burada kesin bir kavrama olmadan, asla "en basit iç içe döngülerden başka bir şey" yapamazsınız .

Aceleci olmayın, iş sonsuza kadar orada, kesintisiz öğrenme için zaman yok. İhtiyacınız olduğunu düşündüğünüz sırada, fişe takılı olmadığından asla boşluk bırakmayın.


0

Jeff O'nun önerdiği gibi, iyi bir programcı olmak istiyorsanız, öğrenmekten asla vazgeçmeyeceksiniz.

Potansiyel olarak öğrenmenin o kadar çok şey olduğunu farketmelisiniz ki, bunun sadece programlanması ile ilgili olduğunu, eğer hepsini bilmek ve iyi olmak istiyorsanız, milyonlarca yıl boyunca orada olacağınızı anlamalısınız. Bu yüzden sadece hayatınızı iyileştirecek şeylere odaklanın. Bunun saf zevk, para, bilimsel çaba veya sebeplerin hangi karışımı olduğu olsun, bu sizin için zaman ayırıp uyumaya karar vermeniz gereken şeydir.

Kendinize iyi bir geliştirici ne olduğunu tam olarak sorun ve kendinize sorun: sanatınızı, sizi saatin kaç olduğunu unutmaya itecek gerçek hayattaki projeler üzerinde uygulayın.

İyi bir geliştirici olmak benim için iyi şartların nasıl elde edilip yazılacağına, projenin nasıl yönetileceğine, nasıl test edileceğine, sonuçların nasıl sunulacağına, nasıl yardım edebileceğine ve kimin (işe yaramayacağı) nasıl karar vereceğine karar vermeyi içerir. başkalarıyla bir araya gelerek, patronu ve müşteriyi nasıl memnun edeceğimizi.

Teknik olarak, benim için iyi bir geliştirici olmak; faydalı kullanıcı el kitapları, tasarım, inceleme, kodlama, hata ayıklama, test etme, faydalı kullanım kılavuzları yazma, diğer kullanıcılara yönelik kodları anlamlı bir şekilde yorumlama, sürümleri yönetme, benzetme ve her zaman bulma Üretkenliği günlük bazda artırmak, görevleri otomatikleştirmek (bu testler, hata ayıklama, yük tahminleri için veri analizi veya her neyse). Gerektiğinde veya garanti edildiğinde hızlı ve kirli kodlar yapabilmek, aynı zamanda kodla temiz ve iyi düşünülmüş olmak da mümkün.

Tüm bunlar onun uğruna öğrenme yoluyla değil, bir amaç için öğrenme yoluyla orada ve sonra sahip olduğunuz bir ihtiyacı çözmek için elde edilir. Bunun uğruna öğrenmek size sağlam bir temel vermek için iyidir, ancak bir amaç için öğrenmek onu gerçek yapmak için iyidir.

Sonunda iyi bir geliştirici, eldeki görev için neyin gerekli olduğunu tespit edebilen kişidir.


0

Her yerdesin gibi görünüyor. İnsanların belirli bir alana odaklandıklarında en çok öğrendiklerini ve gerçekten kazı yaptıklarını düşünüyorum, çünkü bunu yaptığınızda her zaman başka bir araç öğrenmeyi gerektiren bazı konulara gireceksiniz. Bu şekilde, becerilerinizi organik olarak ve son derece bağlantılı bir şekilde geliştirebilirsiniz, böylece kazandığınız bilgiyi kaybetmezsiniz, çünkü zihinsel araç kutunuza eklenen her yeni fikir veya araç, diğerlerini daha kolay öğrenmenize olanak sağlar.


-1

Sizi ilgilendiren iyi bir Açık Kaynak projesi seçin ve kodunu öğrenmeye başlayın ve hata düzeltmelerine ve yeni özelliklere katkıda bulunun. Bu her programcının yapması gereken bir şey.

Ayrıca, şu anda bir proje başlatmak, öğrenmenin tek yolu gerçek bir sorun için çözümler bulmaya çalışıyor. Eğer bir şey inşa etmiyorsanız, çözecek bir probleminiz yok demektir.

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.