Programlama becerilerinizi geliştirmek için yaptığınız en etkili şey nedir?


876

Bir programcı olarak kariyerime ve yaşamıma baktığımda, programlama becerilerimi geliştirmenin birçok farklı yolu vardı - kod okuma, kod yazma, kitap okuma, podcast dinleme, senaryo izleme ve daha fazlası.

Sorum şu: Programlama becerilerinizi geliştiren en etkili şey nedir? Geliştirmek isteyenlere ne önerirsiniz?

Burada çeşitli cevaplar bekliyorum ve "tek beden herkese uyan tek bir cevap" yok - farklı insanlar için neyin işe yaradığını bilmek istiyorum.


18
Pratik yap, pratik yap, pratik yap. Ve akla gelen ilk şeyden asla tatmin olmayın.
Mark Ransom

2
Mark Ransom için +1 ... Zorluk, aklınıza gelen 100'üncü şeyden hala memnun olmadığınızda ortaya çıkıyor!
Stimul8d

5
Programcı Yığın Değişim sitesinde zamanımın hiçbirini boşa harcamamak bana kodlama becerilerimi geliştirmemde yardımcı oldu.
Meslek

3
@Mark Trapp bu nasıl yapıcı değil?
sağa sola

1
@WTP - Açıklamayı oku. "Bu soru bizim soru-cevap formatımız için uygun değil." - bu soruyu soran biri olarak, katılıyorum. Daha rahat zamanlarda istendi.
Oded

Yanıtlar:


753

Belirli bir düzende değil ...

  • Benden daha zeki insanlarla çalışmak

  • Küçük, orta, üst düzey veya guru olup olmadıklarına bakılmaksızın, başkalarının söyleyeceklerini daima dinleyin. iş unvanı hiçbir şey ifade etmiyor.

  • Başka çerçeveleri / dilleri öğrenmek ve bir şeyleri nasıl yaptıklarını görmek ve bunları zaten bildiğim şeylerle karşılaştırmak

  • Kalıpları okumak, en iyi uygulamaları yapmak ve eski eşyalarımı incelemek ve gerektiğinde bu kalıpları uygulamak

  • Çiftler programı

  • Joel'in söylediği her şeye katılmıyorum. ;)


41
Kimsenin gerçekten dehşet verici ve potansiyel olarak itibarlı göründüğünü biliyorum, ancak bu maddeleri cevap başına bir taneye ayırırsanız, hangi soruya karar verdiklerine karar verebilirler, bu sorunun daha kesin bir son oylamasını mümkün kılarlar.

117
İnsanların hatalarla nasıl başa çıktıklarını izleyin - onlardan en iyi şekilde öğrendiğim zaman

82
bu, belirli bir düzende olmayan bir liste ise, sıralı bir liste yerine sıralanmamış bir liste olmamalı mı? : P
Jon W

3
Mmyers ile aynı fikirdeyim - sadece biriyle aynı fikirde olmamanız, onları görmezden geldiğiniz anlamına gelmez. Aslında, tam tersi - onlarla aynı fikirde olmamak için aslında onlara dikkat ediyorsun.
Cristián Romo

15
Joel'in söylediği her şeye katılmıyorum, çoğu zaman söyleyecek ilginç şeyleri olduğunu düşünüyorum. Benim yorumum yanak dildi. Joel'e geldiğimde anladığım çok şey var ama ayda yaklaşık bir kez kafamı sallamamı ve “Ne? Ciddi misin ?!” diye sormamı istedi. Bu, sevdiğim, zor durumumu ve inancımı kontrol etmek için beni zorlayan şeyleri bulduğum için.

557

Karar İÇİN Bir 'Jack-hepsi-Ticaret' olmak

Kariyerimin oldukça başında, belirli bir veritabanı ve programlama dili olan bir uzmandım. Maalesef, söz konusu veritabanı 'veritabanı savaşlarını' kaybetti ve kariyer seçeneklerimin sınırlı olduğunu keşfettim. Ondan sonra, bilinçli olarak kendimi bir daha asla böyle bir şekilde kutu içine almama izin vermeyeceğime karar verdim. Böylece elimden gelenin en iyisini yaptım: Windows, Unix, C, C ++, Java, C #, Perl, Python, Access, SQL Server, Oracle, Informix, MySQL, vb. 'adama git' oldu - "Sor Craig, eğer bilmiyorsa, öğrenecek." Sonuç olarak, gömülü telemetri sistemlerinden füze savunması için komuta ve kontrol sistemlerine kadar her türlü proje üzerinde çalıştım.

Şimdiye kadar yaşadığım tek sorun, uzmanlığım bir general olduğu zaman, beni uzmanlık alanına sokmak konusunda ısrarcı olan şirketlerle ilgili. [EDIT: Polymath veya Rönesans Adam'ı veya çok uzmanı olarak da bilinir . ]

Akılda tutulması gereken bir şey ... yüksek teknolojide bilginin yarı ömrü nedir? Moore Yasası ile izler: bildiğiniz her şeyin yarısı 18-24 ay içinde eski olacaktır. Yanlış disiplini seçen bir uzman teknoloji basından kolayca zarar görebilir; Bir uzman sadece biraz daha fazla beceri eklemek ve geçmişte bu becerileri uygulamadaki dersleri hatırlamak zorundadır.


224
"Tüm esnaf Jack, hiçbiri ustası, çoğu zaman bir ustadan daha iyi olsa da." -Adam Savage
jms

9
Mükemmel bir tavsiye, oy kullandı. Geçmişimdeki "yetim teknolojisi", C64'te kaybolan 8 bit Atari'mdi. Yine de aynı sonuca vardım - Heinlein'den alıntı yapmak için "uzmanlık böcekler içindir."

17
Her zaman takaslar vardır ve günde yalnızca 86.400 saniye vardır - nasıl harcamak istediğinize karar vermeniz gerekir. Benim durumumda, ilginç olduğunu düşündüğüm ya da gelecekte talep edeceğini düşündüğüm şeyleri öğrenmek için fazladan saatler ('çalışma' saatlerimin üzerinde ve ötesinde) harcamayı seçtim; kendi seçimlerini yapman gerekecek.
Craig Trader

74
"Uzmanlık böcekler içindir." - Heinlein
Kelly S. French,

31
"Generalist" rozeti nerede? ^^
Arnis Lapsa

459

Her zaman kendimi oldukça ateşli bir programcı olarak düşündüm. Sonra yeni bir adam, ona Aaron diyerek ekibimize dahil edildi. Belli ki Aaron çoğu alanda benden çok daha iyiydi. O da benden gençti. Geçtiğimiz yıllarda pek iyileşmediğimi fark etmemi sağladı. Ben geçici bir hacker ve bu konuda vasat biriydim.

Bu beni bilinçli olarak kendimi ve özellikle de yazdığım kod kalitesini geliştirmeye çalışmam konusunda uyardı .

Aaron beni bir çok şey öğrenmeye yönlendirdi. Bana yazdığım kodun çoğunun en az birkaç yıl nasıl korunacağını ve genişletileceğini öğretti, bu yüzden kodu aklımda yazmalıyım. Kodum için otomatik testler yazmalıyım. Aaron her zaman ilk çalışan versiyonda nasıl durmamam gerektiğinden bahsederdi, ancak kod şık olana kadar yeniden düzenleyin ve düzeltin. Kullandığım dillerin ve araçların iyileştirme için çok yer olduğunu keşfettim.

Aaron'dan öğrendiğim en önemli şey öğrenmeyi asla bırakmamaktı.

Birkaç yıl sonra, Aaron şirketten ayrıldı. Boş hissettim. Onunla geçtiğimiz yıllar beni yepyeni bir beceri seviyesine yükseltti ve şimdi takımın geri kalanından çok daha iyi olduğumu fark ettim. Hala kötü kod yazıyorlar ve eskisi gibi aynı hataları yapıyorlardı. Onlara öğretmeye çalıştım ama öğrenmeye ilgileri yoktu. Aslında, birisine, ne tür hatalar yaptıklarını söyleyebilecek kadar kibirli olacağı konusunda sinirlendiler.

Böylece birkaç ay sonra şirketten de ayrıldım. Çok yetenekli bir ekiple daha küçük bir şirkete taşındım. Oradaki herkes daha fazlasını öğrenmek istedi ve ben de onu sevdim.

Aaron ile tanıştığıma memnun oldum. O olmasaydı, muhtemelen eski şirkette eski çeteyle çalışıyor, hiçbir yere gitmiyor ve kendimi çok fazla düşünüyorum.


54
Bu genellikle iki yönlü çalışır. Şimdi bir 'Aaron' olarak birkaç şirkete geldim ve diğer kodlayıcıları bir kez bana para için koşmaya başladıkları ve kendi çabalarımı yeniden artırmam için teşvik ettiklerini belirttiğimi öğrendim. Harika yazı!

28
+1 "Aaron her zaman ilk çalışma sürümünde asla

17
"Asla ilk çalışan sürümde durma" ??? - işinin kalanını ne zaman bitirmen gerekiyor? :)

4
Aaron olmaya çalıştım, bazen işe yarıyor, ama bazen yanılıyorum. "Tarihten öğrenemeyenler bunu tekrarlamaya mahkumdur." Aklımızı yeni fikirlere açık tutmak iyidir, ama zaten sizin için hataları yapmış olanların üzerinden bir müzik dinlemek kötü. Herkesin kendimize ve başkalarına sorular sormaktan öğrendiğimiz gibi biraz şüpheciliğe ihtiyacı var.

27
Sorun çok fazla insanın "Aaron" olduğunu düşünmesidir
cinqoTimo

257

İki şey:

  1. Farklı insanlar tarafından yazılmış kodu okuyun.
  2. Diğer insanlar tarafından yazılmış kod için belgeler yazınız.

Kod yazmak son derece kolaydır; tanıdığım diğer herkes bunu yapabilir. Ama başkasının kodunu okumak ve ne yaptığını bulmak benim için tamamen yeni bir dünyaydı.



9
Bir şeyi nasıl yaptıklarını görebilirsiniz. Belki de senden daha iyi yapıyorlar?

4
Gerçekten eski ve tamamen belgesiz bir projeye dalmak, belgelemek, bazı hataları düzeltmek ve yeni bir sisteme taşımak zorunda kaldım. Çok şey öğrendim ve hepsi ne yapmamaktı. Yine de yorumların değerini öğrendim.

Ve belgeleri yazarken, belki de varsa bazı test test senaryolarını yazabilirsiniz. O zaman kodu nasıl kullanacağınızı da öğreneceksiniz.
yıkanabilir

Çok doğru, uzun zamandır bu işimin en zor kısmıydı.

199

Düzenli olarak spor salonuna gidin.

Cidden, formdayken beynim çok daha iyi çalışıyor. Sorunlar kolaylaşır ve daha az ezici olur, sersemlemenin baştan çıkarması çok azdır ve adım adım işler yapmak çok zor bir iş gibi görünmez.


30
İnsanların çoğunluğunun düzenli olarak egzersiz yapmaması ve hatta gerilmemesi üzücü gerçeği, bugünün dünyasında büyük bir sorundur.
Sinsi

5
Bunu, eğer yapabilirsem, herhangi bir fiziksel gezintiye çıkaracağım. Bazen, bir süre fazla el işi yapmadığım zaman, fiziksel yorgunluğumu arzulamaya başlıyorum. Zihinsel olarak yorulmaya alışkın olduğunuzda bu tür bir roman ve sadece çevrelerinizde dolaşırken düşündüğünüz zaman patlamanıza yardımcı oluyor.
Stimul8d

1
evet bugün bu büyük sorun. özellikle çalışma saatlerinin daha fazla olduğu pakistan'da vaktimiz yok
maz3tt

2
Daha fazla egzersiz yapmak için kendime bir hatırlatma olarak +1 .
SingleNegationElimination

Bir sporun harika bir motivasyon olduğunu anlıyorum - benim için basketbol.
Adel,

181

Programlama. İlginç projeler üzerinde çalışmak. İçeri girip çalışmak gibi bir şey yok. Özellikle baskı altında. Her zaman bana nasıl programlanacağımı soran herkese söylerim - sadece güzel bir proje bulun (telafi etseniz bile) ve üzerinde çalışın.


4
Katılıyorum. Bir projede ellerimi kirletmek muhtemelen gelişimime en büyük katkıyı sağladı. ; )
Mike Grace

1
Kesinlikle. Daha iyi bir kodlayıcı olmanın en iyi yolu kodlamaktır. İstediğiniz her şeyi kitaplardan, podcast'lerden ve iş arkadaşlarından öğrenebilirsiniz, ancak gerçekten anlayabilmeniz için önce uygulamanız gerekir. Daha fazla kod ve daha farklı şeyler kodla. Çünkü aynı eski numarayı tekrar etmekten fazla şey öğrenmiyorsun.

Zorlu ve ilgi çekici projeleri seçmek. Sanırım rahatlık bölgesinin dışında aşma mücadelesi gerçekten yeteneklerini hızlandırıyor. Aya gitmediler çünkü kolaydı.
Kim Jong Woo

172

Üniversitemdeki CS öğrencilerini ders alarak yarı zamanlı bir iş çıkardım. Bir başkasına açıklamanız gerektiğinde, sizi tamamen farklı bir seviyede anlamanıza zorlar.


1
Bunun için kefil olabilirim.

1
Üniversitedeki bir öğretim görevlisi bana hala öğrenciyken açılıştan bahsetti. Mezun olduktan sonra yaklaşık bir yıl (yarı zamanlı) kaldım.
Kertenkele Bill

29
Douglas Adams, “Dirk Gentley'nin Bütünsel Dedektif Ajansı” nda yazarken: “En iyi yol, onu bir başkasına anlatmak ve açıklamaktır. Bu, sizi zihninizde çözmeye zorlar. daha çok şeyleri daha basit fikirlere bölmek zorundasınız. ”

2
Çok doğru. Fotoğraf öğretimi beni daha iyi bir fotoğrafçı yaptı. Bir kodlayıcıdan çok değil tho :(
CAD 6: 41'de

9
mutuo ista fiunt, et homines dum docent sağduyulu - Seneca

135
  1. "Her yıl bir programlama dili öğren" sisteminin büyük bir hayranıyım. Bir yıl size "tamam, sözdizimini biliyorum, bu yüzden şimdi dili biliyorum" önyargısını geçmeniz için yeterli zaman veriyor ve sizi biraz daha uzağa gitmeye zorluyor ve bu dilde neyin yararlı olduğunu anlamaya ve yerel bir stilde programlamaya zorluyor. bu dil (demek istediğim, Ruby sözdizimini kullanarak java uygulamaları yazmaktan vazgeçmiyorsunuz). Her dil, programlama hakkındaki düşüncelerinizi değiştirecektir - özyinelemeyi nasıl kullanacağımı biliyordum, ancak özyinelemede düşünme , prolog üzerine bir derse girinceye kadar gerçekleşmedi (ML gibi işlevsel bir dilin aynı etkiye sahip olacağını hayal ediyorum).

  2. Bir Pet projesi başlat. İyi bir evcil hayvan projesi için kişisel denklemim, deneyimlediğiniz bir şey + bilmediğiniz bir şey = faydalı bulabileceğiniz bir uygulama. Örneğin, Migratr (kendime kafeinli-hafta sonu açık-devam eden bir proje) "c # biliyorum ama asla bir web API'sine kodlamadım. Tüm fotoğraflarımı Zooomr'a taşımak istiyorum" olarak başladı. "Web API'sine daha önce kodladım, ancak C # bilmiyorum" kadar kolay olabilirdi.

Evcil hayvan projenizi yayınlamak başlı başına inanılmaz bir eğitim deneyimidir. Birdenbire, pratikte hiç kimse öğretmediği şeyler var ama herkesin bilmesi gerekiyordu (benim için kendi test sisteminizi kuruyordu, sürüm kontrol sistemlerinden en iyi şekilde yararlanıyordu, başka hiç kimse sizin son tarihlerinizi belirlerken nasıl hızlanacağını, sizinle nasıl etkileşime geçeceğini biliyordu) kullanıcılar ve ne zaman isteklere "hayır" deyince bililmeli), tüm bunlar yüzeye sıçrar ve sizi daha önce yapmadığınız bir seviyede kendi kendine eğitmeye zorlar - en azından, bu konuda şeyler yapmak "foo" vs "bar" şekilde artılarını / eksilerini.

Bu iki şeyi yapmak, spektrumun her iki ucunu da kapsar. Yeni bir dil öğrenmek sizi daha iyi bir kodlayıcı yapar. Evcil hayvan projesi sizi daha iyi bir geliştirici yapacak: P


Sadece katılıyorum; "daha önce bilinmeyen bir dilde evcil hayvan projesi" iyidir, ben teyit edebilir

Bilinen bir şeyi öğrenmek için çok iyi bir öneri.

Büyük öneri "ile + bir şey yaşamadığınız bir deneyim"! Thanks
sica07

Şimdi bir evcil hayvana ihtiyacım var.
Adel

118

Kendime montaj öğretti. 13 yaşımdayken eski bir 6502 yongasında mıydı? 14? Çok uzun zaman önce. Ancak, gelişiminizi bit seviyesine inmekten daha fazla geliştirecek bir şey düşünemiyorum.

Öğrenim düzeneği, bilgisayarların temelde daha düşük bir düzeyde 'düşünme' şeklini ve bu seviyedeki zarafeti şaşırtıcıdır ... boşa harcanan hareket yok, verileri 'atmadan' şaşırtıcı. Bu seviyede geliştirme size verimliliği öğretecek ve eleştirel düşünme ve mantık becerilerinizi geliştirecektir. Aynı zamanda, oldukça hızlı bir şekilde sahip olduğunuz özensiz alışkanlıklardan sizi iyileştirecektir!

65xx çipinde üç yazmaç (akümülatör, X ve Y) vardı ve çarpma ya da bölme için makine seviyesi talimatı yoktu. Savaş hasarı hesaplamak, kitaba bakmak ve aniden kendi matematik kütüphanemi yazmak zorunda olduğumu fark etmek için bir rutinin kodlandığını hatırlıyorum. Birkaç hafta harcadım ve defterimin her yerine 0 ve 0'lar 'böldü' ve 'ondalık basamaklar' ın gerçekten ne anlama geldiğini bulmaya çalışıyordu.

O zamandan beri birçok C ++, pascal, .NET okudum ... ama hiçbiri bana çok fazla şey öğretmedi, ilgimi çekmedi ya da beni eski komodorumda yaptığım 'vay' duygusuyla bırakmadı. .


16
Harika hatıraları geri getirdiğin için sana oy vermeliyim! Belki biraz yırttım :)
Charlie Flowers

3
Hala zihinsel olarak C / C ++ 'ı 68K assembly diline çeviriyorum. Herhangi bir platform için verimli bir kod yazmanıza yardımcı olması şaşırtıcı.
Bob Murphy,

1
Ah, 6502, harika anıları geri getiriyor. Bu çipte assembler ile çok şey öğrendim.

5
HER programlama öğrencisi, eğitmenlerinin başında bir araya gelmeden derine maruz kalmalıdır!

2
Ben de aynı şeyi gençlerle yaptım. Gerçekten bilgisayarların nasıl çalıştığını, üst düzey bir dilden çok daha fazlasını öğretti.
CAD,

110

Yazdığım eski şeylere bakıp ne kadar kötü olduklarını farkettim.


İkincisinde ... Eski eşyalarımı bile okuyamıyorum.
Unkwntech

28
Eski eşyalarımı okuduğumda, tüm dosyayı silmek için neredeyse dayanılmaz bir istek duyuyorum. Bazen bütün dizin.
Christopher Mahan

Nesnellik için +1. Eski kodunuzu incelemeniz size nasıl geliştireceğinizi söylemeyecektir, yalnızca geliştirdiyseniz ve nasıl - veya tam tersi şekilde yapmadıysanız.

Bunu yaptım - bu senaryo yazıcısının tamamını VB6'da yazdım, iki yıl boyunca yazdım; pencereleri açabilir, olaylarını idare edebilir, vb. büyür ve kontrolden çıktı, artık her şeyi bozmadan ekleyemeyeceğim. Programlama ile ilgili kitapların programlanmasından vazgeçmeden önce yazdığım son şey buydu. Şimdi daha iyi bir phew değilim . Canavar projesini tekrar okumak, ne kadar ileri geldiğimi fark etmemi sağlıyor
Carson Myers,

3
@Christopher Mahan: Ve gerçekten kötü durumlarda tüm ses seviyesi.
Thanatos

93

okumak

  • kitaplar, sadece web siteleri değil
  • kişisel gelişim için, sadece en son proje için değil
  • Ticaretinizi geliştirmek hakkında, sadece en son teknoloji ile ilgili değil
  • sadece okuma üstünde çalıştığın kodları oku.

Sadece okumak için iştahınızı geliştirin.


2
Artı, kanka ', 1. Bu seçimin nerede olduğunu merak etmeye başlamıştım.
Thanatos

87

Programlama.

Cidden, kitaplar var, kodlama kataları var, bunun gibi siteler var, ama bir geliştirici olarak gelişmenin en iyi yolunun gerçek mühendislik ile gerçek, sürekli değişen gereksinimleri olan gerçek kargaşa müşterileri ile gerçek proje üzerinde çalışmak olduğuna inanıyorum. sorunları. Deneyimin yerini hiçbir şey tutamaz.


8
Bir şeyde daha iyi olmak istiyorsanız, yapmaktan daha iyi bir şey yoktur.
Jeff Siver

4
+1 - Bu Forrester'ı
Bulmamı

2
Başka cevap yok. Önemsiz olmayan bir kod yığını yazana ve iş adamları + müşterileri ile birkaç ürün yinelemesi yapışana kadar ne yaptığınızı gerçekten bilemezsiniz. Yeni gereksinimleri karşılamak için değişiklik yapmanın zamanı gelinceye kadar kodunuzun ne kadar iyi olduğunu bilmiyorsunuz / bilmiyorsunuz.
blucz

1
Kesinlikle programlamamı geliştirmek için yaptığım en iyi şey iş bulmaktı.
Matt Ellen

1
Tahminime göre, soru "programlama dışında" da ima edildi ...
UncleZeiv

81

Bence yapabileceğiniz en önemli şey geliştirmek için bilinçli bir çaba göstermek. Tek bir gümüş kurşun yok, yeni bilgi kaynakları, yeni deneyimler ve daha fazla uygulama aramaya devam etmek zorundasınız.

İkinci en önemli şey, ne yaptığınızı, neden yaptığınızı ve nasıl daha iyi yapabildiğinizi düşünün. Önceki projelerle aynı şey. Yaptıklarına ve şimdi farklı şekilde nasıl yapabildiğine bir bak. Neyin daha iyi yapılabileceğini veya nerede hala geliştirebileceğinizi düşünün.

Her gün işte bunun iki harika örneğini görüyorum. Öğrenmeyi seven ve öğrenebileceği en iyi geliştirici olmak isteyen bir iş arkadaşım var. Blog okumak, kitap okumak, programlama tekniklerini tartışmak ve tonlarca soru sormak için herhangi bir kesinti yapar. Ayrıca sadece son bir yılda gözle görülür derecede gelişmiş. Başka bir iş arkadaşı işini yapıyor ve oldukça iyi yapıyor. Ama tek yaptığı bu. Bildiği şeylere bağlı kalıyor, iyileştirmek için çok çaba harcıyor, mevcut projeleri dışındaki projelerde çalışmıyor ve 4 yıl sonra tanıştığımda sahip olduğu beceri setine ve programlama yeteneğine sahip. onu.


7
Muhtemelen daha az yeteneği var çünkü bazı bilgileri modası geçmiş oldu ..

72

Birçok kişi kod yazmayı önerdi. Başkalarının kodlarını okumanın çok daha faydalı olduğunu söylemek zorundayım.


11
ikisinin bir karışımı aslında benim için en uygun olanı; Başka insanların kod okuma ve buna daha okunabilir hale getirmek için üstlenmeden büyük bir egzersiz

Elbette iyi kod okumak ... ve anlamak. Ve bunu değiştirmek veya bunun için testler yazmak.

4
Kod okuma ilginç, ancak gerçekten yapana kadar derinin altına girmiyor.

Bunu öğrenmek için yapmalısın. Bu ... Bir bisiklete binmeyi

70

Çok çeşitli ve düşünülmüş insanlarla çift programlanmış


Çift programlama ile sahip olduğum tek "deneyim", meslektaşlarım için yardım etmem gereken zamanlar. Karşılaştığım sorunları ve bunları nasıl çözeceğimi tartışmak için yanımda başka bir kişi varken daha mutlu programlarım.
mhitza

67

Programcı olarak bana yardımcı olan temel şeyler:

  • Öğrenilmiş Dokunma Yazma.
  • Utangaçlığın üstesinden gelmeyi ve soru sormayı öğrendim.

Bir programcı için yazmak esastır. Herkesin tam olarak iki parmağınızı kullanarak yazdığı ve her şey için klavyeye bakması gereken bir "programcı" iş arkadaşı vardı. Eğlenceli değil. Dokunma tipini öğrenmek, programcı olarak verimliliğinizi büyük ölçüde artırır.

Ve eğer sormazsan, sana kimse söylemeyecek.


15
Dokunma Yazma en önemli beceridir. Programlamadaki en büyük suçlar birkaç tuşa basmaya çalışanlar tarafından işlendi.

5
Bu bence, diğer tüm cevapları atıyor. Yazma zaman kazandırır, bu da kodu girmek ve denemek için daha fazla zaman harcayabileceğiniz anlamına gelir. Bu, kafanızı sallamak, devam etmek ve unutmak yerine, örnekleri bir kitapta yazabileceğiniz anlamına gelir. Avlanıp gagalamayı bir programcı olmaya çalışmak, fildişlerini ayaklarınızla gıdıklayarak konser piyanisti olmaya çalışmak gibidir.
Kyralessa

2
İnsanların 2 karakterlik bir komutu geri almak için 15 yukarı ok çarptığını gördüm. Oldukça üzgün. IDE'siz bazı çocuklar gibi ... tamamen beceriksiz.

7
Burada aykırı olmak için, asla dokunma türünü öğrenmedim. Bir kez öğrenmeye çalıştım, ama derhal elimden acı çekmeye başladım, uygun el pozisyonlarının önemli karpal tüneli üzerinde baskı oluşturduğunu varsaymak için onları masaya yatırdım. Bu yüzden benim seçim yazımın en azından bazı ergonomik avantajları olduğunu düşünüyorum. Ve bunu çok uzun zamandır yapıyorum, sadece klavyeye zaman zaman göz atıyorum, bu yüzden gerçek verimlilik kaybı yok. Zamanımın çoğu zaten karakter girmeye harcanmıyor, kod okuyarak ve sorunları en iyi şekilde nasıl çözeceklerini bulmak için harcanıyor.
Eloff

2
El pozisyonları önemli değil - önemli olan şey bakmak zorunda kalmadan yazabileceğinizdir. Dizüstü bilgisayarımda bileklerimi dinlendirmiyorum.

56

Açık kaynaklı projelere katkıda bulunmak / katılmak, benim için en büyük şeydi.


53

İstediğiniz tüm kitapları, kodları ve açık kaynaklı projeleri okuyabilirsiniz, ancak yazılım geliştirmenin son kullanıcı yönünü anlamanız gerekir. Yankı odasından çıkmanız gerekir. Bu yüzden teknik kariyerinize yardımcı olacak teknik olmayan birkaç noktaya değineceğim.

  1. Klavyeden uzaklaşın ve son kullanıcıyla etkileşime geçin ve gözlerinin içinden yazılımı nasıl kullandıklarını görün. Son kullanıcılar genellikle teknik değildir, bu yüzden yazılımı mantıklı bir adım olarak görürken, yazılımı sihirli bir iş parçası olarak görürler. İki dünya tamamen farklı. Bu yüzden size kolay ve mantıklı görünen şey, şifreli ve korkutucu görünebilir.

  2. Test et, test et, test et. Büyük şirketlerde gördüğüm yazılımların çoğu test durumlarını kullanıyor. Cehennem, JUnit, xUnit ve diğer tüm test dillerini orada kullanıyorlar. Ancak gördüğüm sorun, programcıların çoğunun yazılımlarının Üretim'de nasıl göründüğünü asla görmemesidir. Kullanıcılara (veya bunlar toplu iş ise sistemler) uygulamanıza, kitaplığınıza veya arayüzünüzle nasıl etkileşime girdiklerini öğrenmek için ne tür çirkin bilgiler olduğunu öğrenin. Bu, iyi test senaryoları oluşturmanıza ve programınızın her zaman doğru veri setine besleneceğini varsaymanızı sağlar.


Doğru. Teknik olmayan olduğunu bildiğiniz bir grup insanın deneyip deneyerek test etmelerini ve yorumlarını duymalarını isteyerek ("Bu iyi!" Demediğinden emin olmalısınız, çünkü) bu açıkça size en ufak bir şekilde yardımcı olmuyor.)

48

Öğrenilmiş Şema


Evet, benim için de büyük olan oydu. Ayrıca önemli olanları dokunmatik yazarak ve çift programlama idi.

46

Kod yazma ve bir sürü.


Hepimiz berbat kod yazmaya başlıyoruz. Yeterince yazarsanız ve üzerinde çalışırsanız daha iyi olursunuz. Kod incelemeleri yardım, ancak en iyi yol kendi kodunuzu incelemektir.

Kod ve çok okunuyor.
Stefan

3
); Okuma ve kod birçok yazma ... Açık kaynak bize böyle bir nimet
Oded

45

Düzenli ifadeleri öğrenmek.


Bunu dört ay önce kendime perl öğretmeye başladığımda yaptım! Genel gökyüzü vim ve unix kullanma yeteneğim roket! İnanılmaz.
altmış ayak basması

Düzenli ifadeler sadece yararlı değildir, aynı zamanda farklı bir şekilde düşünmenizi sağlar.
Tikhon Jelvis

+1. Kesinlikle katılmak. İnsanları vi, sed veya grep'te oldukça temel şeyler yaparken oldukça şaşırttığına şaşırdım.

39

14
TopCoder'ı biraz problemli buluyorum. Tamam, algoritmalar hakkında düşünmenizi daha iyi hale getirir, ancak kötü stille çalışmak zorundasınız (bir sınıftaki tüm kodlar) ve zaman baskısı altındasınız, bu nedenle muhtemelen yorum yapıp test etmeyeceksiniz. Belki Proje Euler daha iyi bir seçimdir.

3
Kötü bir stille çalışmak zorunda değilsin; İstediğin kadar ders alabilirsin. Ayrıca, tutarlı bir şekilde geçmek istiyorsanız daha iyi bir test yaptınız, çünkü tek kenarlı bir kasayı kaldıran bir çözüm sıfır puan alıyor.

2
@hstoerr - Rakiplerin kodlarını okumayı zorlaştırdıkları için ödüllendirildiklerinden bahsetmiyorum bile (çözümleri zorlaşıyor)
Shane Fulmer

7
(bu rahatsız edici seslerse özür dilerim) Topcoder'dan (veya diğer benzer yarışmalardan) hoşlanmayan insanları, onları yapmanın sizi neden kötü bir programcı yapacağı konusunda icat etmeye çalıştığını düşünüyorum. Onları sevmiyorsan sorun değil. Ancak sahte sebepler oluşturmak IMHO'nun faydası yok. TC'de hiçbir ciddi yarışmacı kasıtlı olarak yasaları engellemez (eğer yakalanırsa diskalifiye için temel teşkil eder). Rekabet etmeyen birçok insanın her zaman kötü kod yazdığını görüyorum. Algoritma yarışmaları iyi kodlama alışkanlıklarını öğretmeyi (başka bir yerden öğrenmeyi) amaçlamaz, daha çok daha derin bir şey öğretmeyi / geliştirmeyi amaçlar.
MAK,

2
TopCoder, kendinize ne kadar iyi olabileceğinizi göstermenin bir yoludur.

38

Hepsini dışarı atın: kendi projenizi, dönüm noktalarınızı, kaynaklarınızı, bağımlılıklarınızı, gereksinimlerinizi ve test planınızı oluşturun. Programlama becerilerinizi yalnızca belirli parametreler dahilinde çalışmak üzere geliştirmeye zorlamakla kalmayacak, aynı zamanda tam olarak geliştirmeniz gereken yeri vurgulamaya da yardımcı olacaktır. Nerede olduğunuzu ve nereye gitmek istediğinizi tam olarak görebilmeniz için, blog veya daha resmi proje güncellemeleri yoluyla, ilerlemeniz hakkında düzenli güncellemeler yapın.


36

Son işimden ayrıldım.


2
ben de! (biraz daha fazla karaktere ihtiyacım var ...)

6
Bize nedenini söylerseniz, bu bir cevap bile olabilir. ;-)

2
Kurum içi çerçeveyle yapılan projeyi desteklemek (EJB2'ye dayanarak) benim eğlence fikrim değildi. Yeni bir şey yok, sadece eski saçmalık. Ve yeni işe bakış açısı daha iyi değil. :(
mihn 28:10

Orada bulundum, yaptım.
Allbite

+1 Çıkmaz bir işe girme şansınız iyi.
Tomek Szpakowicz

29

Bence sürekli yaptığın şeyi sorgulamak en büyük şey. Kodunuzun mükemmel olduğunu asla düşünmeyin, daima geliştirmek için çaba gösterin.

Kodumun mükemmel olduğunu düşündüğümde 2 ya da 3 kez yaşadım, daha sonra gidecek çok yolum olduğunu farkettim.

Sanırım en büyük şey, kodumun kendisini bir makine değil diğer programcılar tarafından tüketildiği gibi görmeye başladığım zamandı. Makinenizin işleyebileceği bir kod yazmak kolaydır, ancak kuru, anlaşılabilir bir kod yazmak zordur.

Ve ben sadece "Bu çizginin ne işe yaradığını" anlamak demek istemiyorum, yani sınıf arayüzünü neredeyse imkansız hale getirecek kadar iyi biçimlendirilmiş hale getirirken "Bu sınıfın diğer tüm sınıflara nasıl uyduğunu" anlamayı önemsiz kılmak demek istiyorum. kötüye kullanmak için.


29

İyi kodun% 70'inin hata kontrolü ve kullanımı olduğunu söylüyorlar. Bu şekilde programlamaya başladığımda kodum çok daha iyi hale geldi. Neyin yanlış gidebileceğini düşünmek ve sonra hemen ele almak çok büyük bir fark yarattı. O hissediyor bütün bu denetimi sadece kod kalkarak ve kendisinin önüne oluyor yapıyor gibi ama 2 ila 4 kat baştan sona süresini kısaltır.

Sadece bu insanlar kim "onlar" ve "onlar" nerede yaşıyorlar?


28

Kodlama becerim, bir şeyi uygulamadan önce merak ettim, bu şeyi nasıl belgeleyeceğim .

Buradaki "şey" tüm olası ayrıntılara sahip olmalıdır. Metottan bütün ürüne. Örneğin, yöntem düzeyinde, aslında yazmadan önce API'ye sığmayan veya belirsiz bir yöntem eklemeyi önler. Ve eğer gerçekten kolay bir şekilde belgeleyemediğim bir yöntemi uygulamaya ihtiyacım olursa, bu bir yerde bir tasarım probleminin işareti ...

Otomatik olarak, " açıklayamazsam, yazamam " tutumu kötü kodu siler ve bir şeyi doğru şekilde nasıl belgeleyeceğimi öğrendiğimde, uygulamanın uygulanması daha kolay ve daha temiz hale gelir.


28

Öğrendiklerinizi sürekli olarak öğrenin ve uygulayın.

Şununla:

  1. Kişisel Projeler: Programlamaya başladığımdan beri kişisel projeler yapıyorum. Küçük oyunlardan, görüntü işlemeden, steganografiden, dosya türü şartnamelerinin uygulanmasından, sıfırdan çeşitli protokollerin uygulanması veya zaman içinde çeşitli programların uygulanması.

  2. Kitap okumak : Boş zamanlarımda çeşitli kitapları okumaya ve takip etmeye karar verdim. Etrafta oturup okumayı bekleyen uzmanlar tarafından yazılmış çok sayıda iyi kitap var. Bir kitaptan alabileceğiniz derinlik, örneğin çeşitli forum yayınlarını okumakla eşleşmez.


10
Kitaplardan bahsetmek için +1. Her şeyi yanlış yapmak için harcanmışsa, çok fazla deneyim buna değmez.
mbillard

27

Bu genellikle herhangi bir yeni teknolojiyi öğrenmenin kronolojik sıralamasıdır:

  1. Düzenli olarak iyi blogları okuyun (Atwood, Martin Fowler, vb.), Teknoloji haberlerini takip edin, İlginç yeni teknolojiyle ilgili bilgileri izleyin. Bu adımlar, daha fazla keşfetmek için ilginç bir şey bulabilir miyim karar vermeme izin verecek.

  2. Seviyeniz için öğrenmek üzere doğru kitabı veya diğer kaynakları okuyun (örneğin, tasarım kalıplarını öğrenmek istiyorsanız yeni başlayanlar için 'İlk Tasarım Kalıplarının Başını' öneririm). Ayrıca kitaplar için özel tercihlerim var .

  3. Bir dışarı yuvarlayın oyuncak projesi öğrendiğim şeyi kullanarak veya iki. Projenin faydası hakkında endişelenmiyorum. Niyetim sadece öğrenmemi kullanmaktır. (örn. OOP için bir hesap makinesi projesi iyi olabilir)

  4. İş yerinde kullanıp kullanamayacağımı görecektim . (örneğin işte subversion kullanmamıza rağmen, onu yerel havuzum olarak kullanıyorum, Ruby'yi aksi halde çok monoton ve zaman alan bir iş için kullandım)

  5. Bu, çoğu insanın kaçırdığını düşündüğüm en iyi bölüm. Bilgi paylaşım oturumları . Örneğin, diğer takım üyelerine bir ya da iki oturum verin. Öğretimin teknolojiyi gerçekten öğrenmenin en iyi yollarından biri olduğuna inanıyorum. İzleyiciyi alıp almasanız da, teknolojiyi anlama düzeyinizin çok katlı olacağını garanti ediyorum. :-)


24

Birkaç ay boyunca açık kaynaklı bir projeyi kesmek; daha büyük daha iyi. Bazı yüksek görüşlü, coğrafi olarak sizi tanımayan, sizi tanımayan insanlarla etkileşime girdiğiniz zaman, yardım edemezsiniz, ancak hatalarınızdan çok daha hızlı bir şekilde öğrenirsiniz - bence bu kesin bir utanç faktörü. Ayrıca, bir veya iki gerçekten zeki insanı tanımlarsanız, o zaman saf bilgiden değil, onlardan değerli içgörüyü toplayabilirsiniz.

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.