Bir programlama dilinde nasıl ustalaşabilirim?


103

Bir dil öğrenmenin bir kitap satın alabildiğini, örnekleri takip edebildiğini ve mümkün olduğunda alıştırmaları deneyebileceğini biliyorum. Ama gerçekte aradığım şey, öğrendikten sonra dilin nasıl ustalaşılacağı.

Şimdi, tecrübenin önemli bir faktör olduğunu biliyorum, ama peki dilin iç kısımlarını öğrenmek, altta yatan yapı nedir, vb.

Bu kitabı okumak, o kitabı okumak, bu oyunu yapmak ve o oyunu yapmak gibi makaleler var. Ama benim için bu, bir dilde ustalaşmak anlamına gelmiyor. Ne kadar zor olursa olsun, başkalarının kodlarını okuyabilmek ve anlayabilmek istiyorum. Bir fonksiyonun ne zaman ve ne zaman diğerinin kullanılacağını vs.

Liste uzayıp gidebilirdi, ancak anladıklarıma inanıyorum. :)

Ve son olarak, gerekirse bir dil olarak bir örnek olarak alın, en iyisi C'nin bir örnek olarak alınmasının mümkün olması.


11
Tecrübe gerçekten kaynadığı şey. Uzman olduğunuz teori, pratik olarak uygulayamadığınız sürece işe yaramaz.
Simon Whitehead

2
Bu dil için bir derleyici uygulayın. Aslında, bu yeni bir dili denemenin en sevdiğim yolu. Biraz kolay ve sıkıcı geliyorsa, K çerçevesini ya da benzeri bir şeyi kullanarak bunun yerine biçimsel dil anlamını tanımlamayı deneyin.
SK-mantığı

6
"Adamım, patates dinozor, araba evreni". Bir dilin ne kadar usta olduğunun önemi yok, eğer kod kötüyse ve bir anlam ifade etmiyorsa hala anlaşılması zor.
Renato Dinhani

2
Noktayı biraz özlüyormuş gibi hissediyorum. Langauges evrim geçirir, bu yüzden bir dilin ustalığı yoktur, onunla büyürsün, ne kadar çok kullanırsan o kadar çok şey öğrenirsin.
nycynik

2
Kodla ve kodu oku. Linux çekirdeğin (C Programlama) rastgele bir parçasını alın ve bir fonksiyonun ne yaptığını anlayın.
Alex Hart

Yanıtlar:


166

"Yukarıdakilerin hepsi" cevabını vermek zorundayım. İnsanlar kodlamanın bir sanat mı, bir zanaat mı, bir mühendislik disiplini mi yoksa bir matematik dalı mı olduğunu tartışıyorlar ve bence her birinin bir kısmı olduğunu söylemek en iyisi. Bu nedenle, dilin ustalığına ne kadar çok teknik kazandırırsanız, o kadar iyidir. Kısmi bir liste:

  • Dili her gün, her gün kullanın. Genellikle bu, dilde tam zamanlı çalışmak anlamına gelir.

  • Dil hakkında elinizden geleni okuyun. Özellikle "en iyi uygulamalar" ve deyimler.

  • Başkalarıyla dil ve onunla ne yaptıkları hakkında konuşmak için bir kullanıcı grubuna katılın.

  • Başkalarının koduyla çalışın! Bir dilde ne yapmamayı öğrenmenin, korkunç bir şey yapan birinden sonra temizlik yapmaktan daha hızlı bir yolu yoktur.

  • Yazdığınız kodu destekleyin - her hata sizin en kötü kararlarınızın bir turu olur!

  • Bilgisayar bilimi ve dilleri genel olarak incelemek

  • Çok farklı bir dil öğrenin. C'ye iltifat, Lisp gibi işlevsel bir dil olacaktır. Bu, prosedür diliniz hakkında düşünme şeklinizi tersine çevirir.

  • Bu dil için mevcut çerçeveleri ve API'leri kullanmayı öğrenin.

  • Dil ile kendi deneylerinizi yapmak için zaman ayırın. SICP, C için geçerli değildir, ancak dillerini sınırlarını sınayarak öğrenme tutumu çok üretkendir.

  • Dilin neden yapıldığını öğrenmek için dilin geçmişini okuyun.

  • Dil yazarlarının konuştuğunu duymak veya endüstri liderlerinin dil ile ne yaptığını duymak için konferanslara katılın.

  • Dilde bir ders alın.

  • Dili başkalarına öğretin ( Bryan Oakley sayesinde )

Özet olarak, aklınıza gelebilecek her şeyi yapın. Çoğu dil hakkında her şeyi bilmenin bir yolu yoktur. Kullandığınız her öğrenme tekniği anlayışınıza ek bir bakış açısı getiriyor.


76
Yazma kodunu destekle +5 - Her hata senin en kötü kararların bir tur olur!
Jennifer S

8
Sadece son cümle için +1:Every technique you use to learn brings and additional perspective to your understanding.
Izkata 19.01.2012

1
@ İzkata: OMG, bunu yazdım mı? Aslında ben anadili İngilizce bir konuşmacıyım! Düzeltdim. Teşekkürler!
GlenPeterson 19:12

2
@GlenPeterson ... Aslında, sadece "kapalı" cümleye çok fazla dikkat etmeden yapıştırdım kopyaladım. +1 aslında bunun arkasındaki niyet içindi. = P
Izkata

13
+1 "Çok farklı bir dil öğren. C'ye mükemmel bir iltifat Lisp gibi işlevsel bir dil olabilir. - Bu muhtemelen en önemlisidir. Programlama hakkında nasıl bilgi edinebileceğinizi öğrenmenize yardımcı olur (yani, hangi durumda ne arayacağınız).
naught101

53

10.000 saatlik pratik budur.

Oku "On Yılda Kendini Programla"

Yukarıdaki kilit noktalar:

  • Get ilgilenen programlamada ve eğlenceli olduğu için bazı yapmak. On yıl / 10.000 saatinizi koymak için istekli olacağınız için yeterince eğlenceli olduğundan emin olun.
  • Programı. En iyi öğrenme türü yaparak öğrenmektir.
  • Diğer programcılar ile konuşun ; diğer programları oku.

1
Ben de bunu gönderecektim! Belli ki P.SE’de yeterince saat geçirmedim.
Martijn Pieters

@MartijnPieters: :-D
vartec 19:12

8
Bir kitap için harika bir başlık! "20 Yılda Kendini Programla Kendine Öğret!"
GlenPeterson 19:12

16
Ancak, aynı 10 saatte 1000 kez tekrar etmediğinizden emin olmalısınız ...
Izkata

Hiçbir teknik uzmanlık bilgisi birisinin neyi otomatikleştireceğini veya program yaratacağını bilmesine yardımcı olmaz. Bu bir şeye benziyor - spor salonuna gidin ve basketbolda her temel egzersizi on yıl boyunca her gün 1 saat yapın. Puf! Sen bir basketbol süperstarısın (usta) ... hayır, bu sadece teknik bir yetenek değil. Dolayısıyla bunu bir sorunun cevabı olarak görmüyorum, yani nasıl usta olunur? Bu çözümün bir parçası olabilir, ancak ustalık için sihirli iksir değildir. Biliyorum - ben usta değilim!
oemb1905

36

Bundan daha iyi bir dil uygulayana kadar ASLA kendinizi tüm dilin efendisi olarak düşünmeyin. Bu, belirli bir dilin alttan nasıl çalıştığını öğrenmek için, dilin derleyici / tercüman kavramlarını öğreten bir kitap edinin. Örneğin:

  • C: LCC Derleyici kitabı

  • C ++: C ++ 'ın Dizaynı ve Evrimi (Ve sonra kendi C ++ derleyicinizi ya da en azından bir tane daha GNU C ++ Derleyici kodunu kullanarak uygulamanın ne olduğunu anlayın)

  • Java: "Inside JVM" yi alın ve javac kaynak kodunu alın. "java" nın .C kodu da faydalıdır.

  • Python: CPython uygulaması.

  • ObjectiveC: Apple’dan ObjC runtime env ve derleyici kaynak kodlarının içindekiler hakkında neredeyse tüm materyaller size yardımcı olacaktır.

  • Lisp: SICP Kitabı (size Şema'yı ve lisp benzeri bir dil için temel bir tercüman-derleyiciyi öğretir): Küçük Parçalı Lisp (başka bir güzel kitap).


1
Şimdi buna cevap dediğim bu. Zaten bir tane kabul ettim ama bu biraz daha erken olsaydı "en iyi cevabı" hakediyor
cprogcr

2
Cevabın ne kadar yardımcı oldu hiç bir fikrin yok. Bahsettiğiniz kitapları okuyorum ve onlar ihtiyacım olan şeyler.
cprogcr 19:12

Onlardan öğrendim. :-)
Aniket Inge, 19:12

Örnek olarak C'den bahsettiğinizden beri, size iki kitabın ismini vereyim, hediye olarak C'ye elimde olduğu gibi ustalık ettim: 1. OOC.PDF (çevrimiçi olarak ücretsiz) ve 2. Minix Kitabı (bir işletim sistemi uygulayıcılarının kitabı olmasına rağmen, bu Linus Torvalds'ın Linux'u uygulamadan önce okudukları
şeydi

1
evet, Andrew Tenenbaum, işte o kitap. Herhangi bir baskı okumak için iyi. Size "C" nin nasıl çalıştığını söylemez, fakat C kütüphanesinin SİZİN kurduğunuz bir işletim sistemiyle çalışmak üzere nasıl uygulandığını gördüğünüzde, C'yi daha iyi anlamaya başlarsınız! Belki de değiştirmenize izin verecek kadar. (Ve OOC girdiği yer)
Aniket Inge 19:12

12

Kullanılmadığı bir şey için dili kullanmayı deneyin. Python'a bir aygıt sürücüsü veya COBOL'da bir matris işleme kütüphanesi yazın. Bence bir dili ustalaştırmanın en iyi yollarından birinin gerçekten onu zorlamak, güçlü yönlerini zayıf yönlerinin üstesinden gelmeye çalışmaktır.


1
Üniversitedeyken içinde Pong yazdığımda bir dili "ustalaştığım" konusunda karar verirdim. MIPS öğrenene kadar bu oldukça iyi çalıştı. Hala kabuslarım var.
Dondurulmuş Bezelye Roddy

C web sitesi yapılabilir?
BigSack

10

Seni kolaylaştıracağım. Asla bir dilde ustalaşamazsın. Dönemi. Eğer olduğunu düşünüyorsanız, o zaman çok açık ki yok. Birdenbire ulaşamadığınız dağ tepesi yok ve "Eh, şimdi, o dile tam olarak hakim oldum. Şimdi ne olacak?" Onlarca yıldır aynı dilde çalışan tecrübeli programcılar bile, bazen yeni fikirlere, süreçlere, uygulamalara vb. Rastladıklarını söyleyecektir. Yeni kavramlar ve dilde yeni veya değiştirilmiş özellikleri benimseme hızını öğrenme yeteneği, her anahtar kelime ve sözdizimi bilgisinden çok daha önemlidir. Bir dilin "ustalaşması" konusunda endişelenmeyi bırakın ve kodunuzun kalitesini ve verimliliğini sürekli olarak iyileştirme ve iyileştirme konusunda endişelenin.


2
The true goal is to master your conceptual understanding of a language or languages.Kesinlikle. Gerçekten demek istediğim buydu.
cprogcr 19:12

Herhangi bir programlama dili sonludur. Sınırlı sayıda kavramdan oluşur, sınırlı sayıda deyimsel hile gerektirir. Bu nedenle, herhangi bir dilde ustalaşmak kolaydır. Elbette, kişi genel olarak programlamada ustalaşamaz, her zaman daha ileri düzeyde bir gelişme potansiyeli vardır, ancak soru özellikle belirli bir dille ilgilidir .
SK-mantığı

SK-mantık: programlama dilleri değişir, kütüphaneleri ve ortamları da değişir. Sonuç olarak, dil ile çalışma şekliniz de değişiyor. Örneğin, jQuery, Javascript ile çalışma biçimimizi değiştirdi.
orlp

Hiç kimse gerçekten C ++ gibi bir dil ana olabilir muhtemelen doğru, ancak Scheme gibi biraz minimalist olanlar için oldukça mümkün olmalıdır - SK-mantık diyor @ gibi, gerçekten var programlama hakim olamaz ne olursa olsun dil, çünkü uygulama alanı sonsuzdur.
leftaroundabout

1
@ nightcracker, diller "gelişmez". C99 her zaman C99 olacak ve hiç değişmeyecek. C ++ 11, yeni nesil bir dilin yerine geçtikten sonra bile daima C ++ 11 olarak kalacaktır. Ortamlar “evrimleşiyor”, evet, ancak jQuery diğer dil topluluklarına daha önce bilinmeyen herhangi bir yeni teknik getirmedi . Yalnızca dar Javascript topluluğu için yeniydiler.
SK-mantığı

5

Bunun cevabını zaten biliyorsun

  • Dili kullanmalısın. Çok. Mümkün olduğunca çeşitli problemleri çözmek
  • Diğer halkların kodunu, tercihen bir ustalık derecesine sahip olanları (yani dilin en azından bir yönünü derinlemesine anlayan) okumak zorundasınız (ve ideal olarak çalışmalısınız). Ek olarak, insanlarla dille ilgili problem çözme hakkında konuşabiliyorsanız, o zaman çok daha iyi.

Zor iş ve kararlılık, oraya asla varamayacağınız şeyler için.

Terimi nereden aldığımızı bir düşünün - bir Usta Zanaatkar olmak için bir çırak ve sonra bir seyahatçi olmanız gerekiyordu ve sadece onlar bir usta olma şansına sahip olabilirdi. Yol boyunca size öğretilecek ve pratik yapacak ve başkalarını onların mesleğinde gözlemleyip sorgulayacak ve (umarım) onlardan öğreneceksiniz.

Sihirli mermi yok ...


2

SDLC'nin ne olduğunu okuyarak ve anlayarak başlayın (aka, Yazılım geliştirme yaşam döngüsü). Kendini geliştirmeyi, öğrenmeyi içeren yinelemeli bir süreçtir,**practicing, practicing...**

görüntü tanımını buraya girin

Bu, hangi alanlarda öğrenmeniz veya iyileştirmeniz gerektiğine ilişkin ufkunuzu açacaktır. Kendi kendinize birkaç uygulama oluşturduktan sonra okumak için çok yararlı olacak birkaç temel yazılım mühendisliği kitabı var.

Ek olarak, bir OOP dili konusunda kendinizden emin hissettiğinizde , tasarım modellerini öğrenmeye başlayabilirsiniz ve Head First Tasarım modellerini düşünmek gerçekten iyi bir kitaptır. Bu kitabı seviyorum.


1
Teşekkürler. Bunu okuduğumda cevabı çoktan seçmiştim, ancak kesinlikle tavsiyenizi alacak.
cprogcr 19:12

neden aşağı oy kullandığından emin değilim, lütfen neyin iyileştirilmesi gerektiğini bana bildirin.
EL Yusubov

2

deneyim yerini hiçbir şey tutamaz. Bir şeye hakim olmak için, bunu birçok farklı şey için kullanmak zorundasınız.

Öyleyse devam edin ve bu dili alıştırmalar ( Project Euler gibi ) ve kişisel projeler, gerçekten ihtiyacınız olan şeyler veya ilginç olduğunu düşündüğünüz şeyler için kullanın. Bir oyun yaz, webapp yaz, ayrıştırıcı yaz, ne istersen. Her adımda, sadece kodu yapıştırmak veya talimatları takip etmek yerine ne yaptığınızı anlamaya çalışın.

Ne kadar zor olursa olsun, başkalarının kodlarını okuyabilmek ve anlayabilmek istiyorum.

Temel sözdizimini anladıktan hemen sonra yapabileceğiniz bir şey bu. Sadece biraz kod alın ve ayrıntılı olarak anlamak için zaman ayırın. Anlamadığınız şeylere bakın veya Yığın Taşması gibi yerlere özel sorular sorun .


2

Sorunun üst kısmında mimarlık hakkında bilgi edinin: projelerinizi nasıl düzenleyeceğiniz, yapısı nedir. Sadece rastgele büyümelerine izin verme.

Orta seviyede, farklı teknikleri ve paradigmaları öğren. Repertuarınızda ne kadar çeşitli araçlar varsa, sizin için o kadar fazla güç demektir. Java, python ve ruby'yi sadece okuduysanız, programlama alanının çok az bir bölümüne maruz kaldınız. Zorunlu ve işlevsel programlamayı öğrenin, prolog ve J'yi öğrenin. Fikir, yüz dili "ustalaştırmak" değil, aynı problemleri çözmenin farklı yollarını öğrenmek.

Sorunun düşük seviyesinde, daha iyi bir programcı olmanıza yardımcı olabilecek bir şey (aslında ne yaparsanız yapın) platformun iyi bir zihinsel modeline sahip olmaktır. Örneğin, C kontrol yapılarının nasıl çalıştığını ve en yaygın kütüphaneleri bildiğini öğrenebilirsiniz, ancak işaretçilerin ve hafızanın nasıl çalıştığına dair zihinsel bir modeliniz yoksa, orta derecede karmaşık ifadelerle ilgili sorunlarınız olacaktır.


1

Birkaç öneride bulunabilir miyim?

Öncelikle dili kullanım şeklinizi tartışmak, en iyi ipuçlarını ve püf noktalarını almak ve bir tekniğin diğerinden daha iyi olduğu durumlarda cevap vermek için bir danışman bulabilirsiniz.

İkincisi, mümkün olduğunca pratik yapın ve dili en fazla deneyin! Her gün el kitabından bir fiil veya programlama dilinin bir fiilini seçecek olan (eğlenceli bir konu olarak) bir takımda çalışırdım. O gün kodlamada kullanabilseydin, bu bir onur işareti oldu. Bu, tüm programlama ekibinin etkili bir şekilde anlamak ve kullanmak için (bazen) belirsiz terimi incelemesi ve anlaması gerektiği anlamına geliyordu. Bazı günler başarısızlığa uğradık, ancak bu ekip çalışmak için eğlenceliydi ve gerçekten teknik olarak açık !!


0

Programlama dilleri, genel amaçlı yazılım geliştirmeyi hedefleyen veya özel amaçlı yazılım geliştirmek için geliştirilen programlama paradigmalarının ardındaki fikirleri yansıtır. Örneğin, Java gibi bir program dili, nesne yönelimli program paradigmasını temsil eder, ancak AspectJ (en boyuna bir uzantı), en boy yönelimli programlamaya göre programlamak için kullanılır.

Bu kısa tanıtımdan sonra, bir dilin ustası olmak için, bir kitabı tek başına satın almak ve okumak pek yardımcı olmaz. İstediğiniz dili kullanarak programlayabileceğiniz ortamı anlamanız, paradigma hakkında bilgi edinmeniz ve dili kullanarak anlamlı bir uygulama oluşturmanız gerekir. Size dilin sağladığı çeşitli araçların tadını çıkarabilecek küçük bir uygulama oluşturmak gerçekten yararlı bir öğrenme yaklaşımıdır.

Nesne yönelimi hakkında hiçbir şey öğrenmeden saf Java topluluğundan gelen insanları ve Java ya da amaç c'yi öğrenme mücadelesini gördüm. Ayrıca, kullanıcı arayüzlerini, olay odaklı programlamayı, vb. Gerçekten anlamadıklarında, kullanıcı arayüzlerini programlamada zorluk çeken insanlar gördüm.

Umarım bu yardımcı olur!


0

Glen'in listesine iki öğe eklerdim

  • Başkalarının sahip olduğu zor problemleri çözmeye çalışın, örneğin SO ile
  • Dil tasarımcılarının bloglarını / kitaplarını okuyun. Derin bilginin en iyi kaynağı budur. X'in arkasındaki tasarım kararının ne olduğunu biliyorsun.

0

@TMN'nin söylediklerini temel almak için. Aynı programı farklı bir dilde yazarak dil öğrenmede büyük başarı elde ettim.

Örneğin, bir CSV dosyasında okuyan bir program yazmak, metni ayrıştırır ve ardından sütunları ters sırayla ikinci bir CSV'ye geri yazar.

Bunun gibi, böyle,

Column1, Sütun2, Sütun3

için

Sütun3, Sütun2, Sütun1

Bu size temel bir anlayış ya da dil sağlayacaktır. O zaman başka ne yapabilirsin bak. Belki değer değiştirme veya komut satırından yeniden sıralama veya okuma için izin ver. İstediğiniz kadar karmaşık yapın.

Ayrıca @GlenPeterson'ın hakkında söylediklerini düşünüyorum.

Çok farklı bir dil öğrenin. C'ye iltifat, Lisp gibi işlevsel bir dil olacaktır. Bu, prosedür diliniz hakkında düşünme şeklinizi tersine çevirir.

Harika bir fikir. Haskell gibi bir dil öneriyorum çünkü en son sürümlerinde dört OO programlama paradigmasını kullanarak, prosedürel, mantıksal ya da işlevsel bir program yapabilirsiniz. Aslında işlevsel bir dil olmasına rağmen, iyi bir öğrenme deneyimi olabilecek diğer paradigmaları biraz çaba ile uygulayabilirsiniz.

Oynamak için harika bir dil.


0

Kitaptan bir dil öğrenemezsiniz. Tek ihtiyacınız olan pratik ve pratik. Belirli bir kitaptan veya belirli bir kaynaktan bir dil öğrenebileceğinizi düşünmeyin. Programlama dilinin insan dili ile aynı olduğunu düşünün. Belirli bir kitabı okuyarak İngilizce veya Fransızca öğrenemezsiniz. İhtiyacınız olan tüm gün kullanmak günlük hayat. Sıfırdan kodlayın, işlevselliğini genişletin, sizi biraz tatmin edecek bir şeyler oluşturmaya çalışın. Ve eğer bir dili tüm dili tanımak ve programlama dilinin her bir öğesini pratik kodlamada kullanmak olarak kullanmayı düşünüyorsanız…. Veya yapabilseniz bile 10-15 yıl sürebilir.

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.