Bir dilin ayrıntılarını öğrenmek yerine aslında nasıl programlanacağını öğrendiğimden nasıl emin olabilirim? [kapalı]


82

Sık sık gerçek bir programcının bir hafta içinde herhangi bir dili kolayca öğrenebileceğini duyuyorum. Diller sadece işleri halletmek için araçlardır, söylendi. Programlama, öğrenilmesi ve ustalaşması gereken en üst düzey beceridir.

Bir dilin ayrıntılarını öğrenmek yerine aslında nasıl programlanacağını öğrendiğimden nasıl emin olabilirim ? Ve sadece bir dil yerine tüm dillere uygulanabilecek programlama becerilerini nasıl geliştirebilirim?


25
Başka bir dil öğrenmeye çalış. İlk dilinizde nasıl çözeceğinizi bildiğiniz sorunları yeni dilinizde çözmeye çalışın. Başlangıçta kolay olmayacak. Ancak, eski problemleri yeni bir yolla yeniden çözdüğünüzü öğrendikten sonra öğrenmenin farkedilir derecede kolaylaştığını öğreneceksiniz (not: bu biraz zaman alabilir).
Hayal kırıklığına

42
Ayrıca, haftada bir dil öğrenebildiğini iddia eden kişilerin "Öğren" derken ne anlama geldiklerini tanımlamaları gerekir. "What do you mean you're not an expert in LanguageX?!? I can learn a language in a Week!". 1 hafta sonra:"See, I've learnt the language, and here's a Hello World example I copied from Wikipedia to prove it!"
JohnL

9
Bir soru sorulmalı. Mantığınızı sözdiziminde mi oluşturuyorsunuz yoksa daha hızlı ve daha verimli bir zihinsel model kullanıyor musunuz? Acemi programcıların sözdizimi kullanmayı düşünme eğiliminde olduğunu buldum.
ChaosPandion

10
@ Paul: Bisiklete binmeyi öğrenmek beni 10.000 saat sürmedi. Veya bunun için yüzün.
Robert Harvey,

7
@PaulR Söyleyerek, bir ustalık için ustalaşmak 10k saat sürer , sadece “öğrenmek” için değil
Tobias Kienzler

Yanıtlar:


96

Böyle saçma ifadelerde sıkça duyulan saçma bir "beceri" kavramıyla tanışmaktan endişelenmeyin:

  • Tüm programlama dilleri temelde aynıdır.
  • Bir dili iyi aldığınızda, diğer dilleri hızlı ve kolay bir şekilde alabilirsiniz.
  • Diller sadece araçlardır, aslında yazılımı yapan bazı beyin-sihirleri vardır.

Bu ifadelerin tümü kusurlu bir öncül üzerine kuruludur ve daha geniş bir programlama dili yelpazesinde deneyim eksikliğine ihanet eder. Bunlar çok yaygın ifadelerdir ve büyük bir programcılar tarafından güçlü bir şekilde inanılır, buna itiraz etmem, ama onların doğruluğunu tartışacağım.

Bu basitçe kanıtlandı: Haskell , Prolog veya Agda'nın temellerini öğrenmeye çalışarak bir hafta (ya da birkaç günden daha fazla bir zaman harcayarak) geçirin . Kafanızdaki eski Susam Sokağı şarkısını dinlemeye başladıktan kısa bir süre sonra "Bunlardan biri diğerleri gibi değil" diyeceksiniz.

Görünen o ki,% 95'inizin yaptığı veya hiç yapmadığı kadar yabancı olan programlama dilleri, teknikleri ve yaklaşımlarının bir kısmı var. Birçoğu, bu diğer kavramlardan herhangi birinin bile var olduğunun farkında değil, bu gayet iyi ve bu kavramların çalışan ve hatta etkili bir programcı olması gerekmiyor.

Fakat gerçek şu ki: Bu teknikler ve yaklaşımlar var, pek çok farklı şey için iyi ve çok yararlı olabilirler, ama sadece alıştığınız gibi değiller ve insanlar onları basit bir öğleden sonra ile toplayamazlar.

Ayrıca, insanların bir hafta kadar hızlı programlama dilleri gibi karmaşık şeyleri öğrendiklerini ya da öğrenebileceklerini iddia ettikleri vakaların çoğunu, bir miktar Dunning Kruger Etkisi , Wikipedia'dan (benimkinde benimseme) muzdarip olduklarını söyleyebilirim :

Dunning-Kruger etkisi, vasıfsız kişilerin aldatıcı üstünlükten muzdarip olduğu, yanlışlıkla yeteneklerini ortalamadan çok daha yüksek puan alan bilişsel bir önyargıdır. Bu önyargı, vasıfsızların hatalarını tanımalarındaki metabilişsel bir yetersizlikten kaynaklanmaktadır.

İnsanları Peter Norvig tarafından programlanmayı öğrenme kavramıyla ilgili daha deneyimli bir sapıklığa yönlendiririm: On yıl içinde programlamayı öğrenin .

Araştırmacılar (Bloom (1985), Bryan ve Harter (1899), Hayes (1989), Simmon ve Chase (1973)), satranç oynamak, müzik gibi geniş bir alanda uzmanlık geliştirmenin yaklaşık on yıl sürdüğünü göstermiştir. kompozisyon, telgraf çalışması, resim, piyano çalma, yüzme, tenis ve nöropsikoloji ve topoloji araştırmaları. 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.


Elbette, tüm dilleri öğrenmesini kolaylaştıracak bir dizi temel ilke var!

Belki de, ancak bu ilkeler setinin o kadar büyük olduğunu savunuyorum ki, neredeyse her zaman bir haftalık erişiminizin dışında hemen hemen diller olacak. Tanıdık ve rahat olduğunuz listeye yeni kavramlar eklerken, hemen ulaşamayacağınız yerlerin dışındaki bu diller daralabilir, ancak bunun bir an önce biteceğine inanmakta zorlanıyorum. Şeyler kavramsal bilişim yaklaşımları listesi ondan, Şaşırtıcı gelebilir, böylece geniştir birleştirmeli dillere için vektör tabanlı dilde uzmanlaşmış dillere AI veya metaprogramlama ( veya düzenli ifadeleri destekler tamamen mevcut diller ).

On yıl sonra genel olarak programlayabileceksiniz. Bu, bazı dillerde veya dil tarzlarında uygun bir kod yazabileceğiniz anlamına gelir. Yani hayatının geri kalanı için bu sayısız geniş kesişen kavramları mücadele başlatmaya hazır ve olmanın kısadır 10 yıl sonra Edsger Dijkstra , Donald Knuth veya John D. Carmack , tüm almak için gitmiyoruz Bunların


11
Enh. Bir dili "bilmek" ile küçük bir hatayı bulmak ve düzeltmek için yeterli düzeyde olmak arasında bir fark vardır. İyi bir programcı arkaik dillerde bile ikincisini oldukça hızlı bir şekilde yapabilir.
Telastyn

5
@ CharlesE.Grant Ben üniversitede çoğunluğun ne öğrendiğini ve ayrıca Haskell veya Prolog gibi bir dilde yarı uzmanlık kazanmanın ne kadar sürdüğünü abarttığını düşünüyorum. Haskell programındaki ilk hatasını düzeltmek için işlevsel bir programlama deneyimi olmayan yetenekli bir endüstri tecrübeli mühendisinin bir haftadan fazla sürmeyeceğini savunuyorum.
Jimmy Hoffa

11
Yine de, temel kavramların oldukça kompakt olduğunu savunuyorum. Yeniden yazma terimini anladıktan sonra , lambda matematiği, SK matematiği, Turing makinesi, Markov algoritması vb. Tanımlamak için bir araca sahipsiniz. Bilgisayar bilimlerinin çoğunu kapsayabilecek çok az sayıda temel fikir. Ancak, tabii ki, basit kalıpları görünüşte karmaşık şeylerde görebilmek için tecrübe gerekir.
SK-mantığı

4
Dunning-Kruger'ın etkisi olmadığını söyleyebilirim, sadece "programlama dili" = "c tarzı programlama dili" olduğu varsayılıyor. İyi miktarda c ++, iyi miktarda C # ve bazı perl ve python saçmaları olduğunu öğrendikten sonra, bir hafta içinde Java, PHP vb. Mutlaka uzman olmamakla birlikte, en azından akıcı bir biçimde. Ben yaptım bir kaç gün içinde javascript almak. Bu noktada, esas olarak aralarındaki farkları öğrenmekle ilgili. Not: En popüler gerçek dünya dili olan c-benzeri. Aynı şey, Prolog için de geçerli sayılmaz.
neminem

2
@WayneWerner Cidden, Haskell veya Prolog ve algol dilleri arasındaki fark sözdiziminden çok daha fazla, sadece efsaneyi sürdürüyorsunuz . Yukarıdaki testime katılın: Haskell'i öğrenmek için bir hafta harcayın ve bunun sizin için nasıl çalıştığını görün. Dürüst olmak gerekirse, sizin için iyi olacak, bunu yapmayı öğrenecek çok şey var.
Jimmy Hoffa

51

... bir dil yerine tüm dillere uygulanabilecek programlama becerilerini nasıl geliştirebilirim?

Bu sorunun anahtarı dili aşmak ve kodladığınız dili değil düşünmektir .

WAT?

Deneyimli çok dilli programcılar , kendi dil modellerinin soyut sözdizimi ağacında (AST) düşünüyorlar . Biri "burada bir döngüye ihtiyacım var" düşünmüyor, bunun yerine "bir şeyin üstünü örmeliyim" demeye başlıyor ve buna o dile uygun, veya sürebilinceye ya da yinelemeli veya yinelemeye çeviriyor.

Bu, konuşulan bir dili öğrenirken gördüklerine benzer. Birçok dili konuşan insanlar akıcı bir şekilde anlamını düşünür ve belirli bir dilde çıkar.

Bu AST'nin bazı ipuçlarını , bir dilenin ve deneyimli bir programcının gözünün hareketlerinin izlendiği bir dizi izleyici video Çifti Kodunda Göz İzleme ve Göz İzleme Kodu Denemesi ile Kodlama (Acemi) görebilirsiniz. Deneyimli programcının kodu zihinsel modelinde 'derlediğini' ve 'başını' çalıştırdığını 'görebiliyorken, başlangıçta anahtar kelime ile kod anahtar kelimesini yinelemek gerekir.

Bu nedenle, tüm dillere uygulanacak programlama becerilerinin geliştirilmesi sorusunun anahtarı, birçok dilin öğrenilmesidir, böylece bir dilin zihinsel modeline sahip olmaktan uzaklaşabilir ve kendi başlarına bir sorun için AST üretme becerisi geliştirilebilir. daha sonra belirli bir dile çevrilmiş olan bir ana dile

Biri AST'yi kafada kullanma yeteneğine sahip olduktan sonra, benzer bir düşünce okulu içinde başka bir dil öğrenmek ( Befunge'ye gitmek Java'dan bir parça atlamaktır , ancak Forth'dan pek değil ) çok daha kolay hale gelir - 'sadece' AST'nin yapıldığı 3., 4. ve 5. (vb.) zamanları çok daha kolay olan yeni bir dile çevirmek.


Klasik bir makale var, Gerçek Programcılar Pascal'ı Kullanma . Bunun bir kısmı okuyor:

... belirlenen Gerçek Programcı Fortran programlarını herhangi bir dilde yazabilir.

Sadece zihinsel AST'yi kullanamayacağınız bitler de var - dilde de düşünmeniz gerekiyor. Bunu başarmak biraz zaman alıyor ( Python'da hala Perl kodu yazmakla suçlanıyorum ve ilk Lisp kodum "Bu çok iyi bir C programı." Diyerek yorumlanmıştı.).

Buna, ACM tarafından yayınlanan ve Fortran'ı Herhangi Bir Dilde Yazmamaya Giden bir makaleye işaret etmeliyim . Makalenin üçüncü paragrafı (baştaki alıntılar değildir) doğrudan eldeki soruyu ele almaktadır:

Tüm genel amaçlı programlama dillerini aşan iyi kodlamanın özellikleri vardır. Kendinizi uygularsanız, iyi tasarım ve saydam stili hemen hemen her kodda uygulayabilirsiniz. Bir programlama dili kötü kod yazmanıza izin verdiğinden, yapmanız gereken anlamına gelmez. Ve eğer kodlayıcı yeterince yaratıcıysa, iyi stil ve tasarımı teşvik etmek için tasarlanmış bir programlama dili hala korkunç kod yazmak için kullanılabilir. İçinde bir inç su bulunan bir küvete boğulabilir ve istisnasız kullanım ve genel türler ve çöp toplama özelliğiyle, tamamen okunamayan ve anlaşılmaz bir dilde, tamamen ya da satır numarası olmayan bir dilde kolayca yazabilirsiniz. Fortran ya da Java, C ++ veya Smalltalk yazıyor olsanız da, kötü kod yerine iyi kod yazmayı seçebilirsiniz (ve gerekir).

AST'ye sahip olmak için yeterli değil - AST'nin başka dillere çevirebilmesi için gerekli. Kafanda bir Fortran AST bulundurmak ve Java'da Fortran kodu yazmak iyi bir şey değil. Kişi, dilin üzerinde düşünebilmesi için dilin ve deyimlerin yeterince aşina olması gerekir (en başta söylediklerime rağmen).

Java kodunu, C kodunu yazmayı bırakmamış bir kişi tarafından yazılmış gördüm. Ana yöntemle bir nesne vardı. Bu nesnede denilen bir sürü statik yöntem mainve kamusal alanlara sahip özel iç sınıflar vardı (ve böylece çok sayıda dikmelere benziyordu). Java ile yazılmış C koduydu. Bütün bunlar bir dilin sözdizimini diğerine çevirmekti .

Bu noktada geçmiş olsun için, bir çok dilde kod yazmak, devam etmek gerekiyor değil kod tasarlarken bu dillerde düşünüyorum, ama doğru dil deyimler ile çalışma koduna tasarım çeviri sırasında onları düşünüyorum.

Oraya ulaşmanın tek yolu - tüm dillere uygulanabilecek programlama becerilerini geliştirmek - dilleri öğrenmeye devam etmek ve o zihinsel programlama dilini tek bir dille değil esnek kılmaktır.

(ChaosPandion'dan sunduğum fikirden ağır borç aldığım için özür dilerim .)


3
Özre gerek yok. Bence etkileyici bir cevap yazdın.
ChaosPandion

Cevabı yazmak için beni düşünmeye iten kişiyi bu yönde itibar etmek istedim.

3
Bu çok iyi bir cevap. Keşke iki kez oy verebilseydim.
Wayne Werner

2
Aslında bu, öncelikle OO'yu öğrenmemelisiniz, çünkü beyninizi akla gelebilecek en kötü AST'lardan biriyle biçimlendirir.
Morg.

1
@JimmyHoffa - Haklı olabilirsin. Her zaman başlangıçta bir dil kullanmayı ve yavaşça daha fazlasını tanıtabilmeyi öğrettim. Yine de, her zaman frene basabildiğim ve bir dile odaklanabildiğim için keşfetmeye değer olduğunu düşünüyorum. (SML aslında oldukça iyi bir seçim gibi görünüyor.)
ChaosPandion

12

Bir dil seçin ve kodlamaya başlayın. Python yeni başlayanlar için iyi bir seçimdir ve çevrimiçi olarak mevcut dersler vardır , böylece nasıl düzgün şekilde yapılacağını öğrenebilirsiniz.

Her şey ondan takip ediyor. İlgi alanlarınız sizi programlarınıza karmaşıklık katacak çerçevelere ve tasarım konseptlerine yönlendirecektir. Sizi temel ve teoriye dayandıracak çevrimiçi kurslar olduğunu ve keşfedebileceğiniz farklı programlama paradigmaları olduğunu keşfedeceksiniz.

Ve evet, Haskell gibi dilleri keşfedeceksiniz, temelde sağlam bir temele sahip olduğunuzda size yeni bir şey öğretecek.

Bazı programcılar muhtemelen tüm dillerin aynı olduğunu düşünür, çünkü farklı düşünmelerini sağlayan hiçbir şeye maruz kalmazlar. En yaygın kullanılan dillerin tümü Algol'den türetilmiştir (esasen prosedürel dillerdir) ve bunlardan çoğu, C'ye benzer kaşlı dillerdir.


2
Bu olsa gerçekten doğru değil mi? Bazı programlama dili her şeyi saf fonksiyonlar olarak kodlar (kararlar + döngüler dahil). Diğerleri kümelerden vb. Nesnelerin itilmesi ve açılmasıyla modellenebilir
jozefg

1
Doğru olmayan ne? Yürümeden veya koşmadan önce sürünmeyi öğrenmelisin.
Robert Harvey,

1
Ah, belirtmeliyim ki, son paragrafı kastediyorum, cevabın geri kalanına katılıyorum
jozefg

1
Son paragrafı, duygularımı daha iyi yansıtan biriyle değiştirdim.
Robert Harvey,

5

Programlama, çözümün bir programlama diliyle uygulanabilecek şekilde sınırlı bir gramerde ifade edilebileceği şekilde çözülmesiyle ilgilidir. Bu nedenle programlama sanatı, problem çözme sanatıdır.

Bazı diller, nesne yönelimi, olaya dayalı, çok iş parçacıklı ve MVC çerçevesi tabanlı diğer programlama paradigmalarını davet eder. Bunların hepsi sadece model ve kalıplardır ve uygulama ile gerçekten ilgisi yoktur.

Bir problemi kağıt üzerinde kolayca koda çevrilebilecek ve platformunuz için uygun bir model ile ilişkili olacak şekilde oturabilir ve çözebilirseniz, o zaman bir programcısınız. Yapabildiğiniz her şey bu çözümleri alıp bizim seçtiğimiz dilde uygularsa, bu başka bir konudur.

30 yıldır programlama yapıyorum (OMFG!) Ve hala php.netPHP'deki komutları aramak için kullanıyorum çünkü bu benim ilk dilim değil.

Dillerdeki uzmanlığın, kılavuza veya yığın akışına ne sıklıkta baktığınızla ters orantılı olduğunu söyleyebilirim. Programlamadaki uzmanlık, bilgisayar programlama dilleriyle uyumlu bir şekilde sorunları nasıl kolayca çözebildiğinizdir.

İlgili bir haberde, Ruby'yi geçen hafta öğrendim. "Uzman" olmasam da, size Perl'de yazabileceğim bir sorunu çözebilirim, söylerim ve daha sonra biraz daha öğrenirken Ruby'ye çevirmek için bir yaş harcayabilirim.


Yorumunuz modeller ve modeller hakkında ilk okudum! Yorumunuzla% 100'üm, bir şey bir dil edinmek ve bir program yapmaya başlamak. Bir diğeri problemi düşünmek ve çözmek için uygun araçları bulmak, sonra bir dil aramaya ve programlamaya başlarsınız.

3

Bence her şeyde olduğu gibi pratik yapmak da mükemmel. Sadece her zaman aynı şeyi yaparak veya her zaman aynı dili kullanarak kendinize bir güvercin sokmayın ve her projede bir şeyler öğrenmeye devam edin.

Bence gitar çalmayı öğrenmek gibi bir şeye kolayca paralellik çekebilirsiniz. İyi bir müzisyen çok kısa bir sürede yeni bir şarkı çalmayı öğrenebilir, çünkü zaten tüm akorları ve akorların neden oldukları gibi çalındıklarının arkasındaki tüm teorileri biliyorlar. Bunu nasıl iyi yaparlar? Sadece tüm kalıpların bir araya geldiği çok fazla şarkı çaldılar, aynı zamanda bu kalıpların da abone olduğu belgelenmiş teori ile bilgilerini pekiştirdiler.

Belki birkaç şarkıyı çok iyi çalabilirsiniz, ancak hızlı bir şekilde yeni şarkıları sapamaz ya da alamazsınız. Bu muhtemelen aynı CRUD uygulamasını tekrar tekrar yapmaya devam eden bir .NET programlayıcısının eşdeğeridir, bir noktada yeni bir şeyler dener, bazı web servis çağrıları veya gelişmiş bir kullanıcı arayüzü ekler veya tamamen yeni bir dilde yazar. Bir engelle karşılaştığınızda, işlerin neden bu şekilde gerçekleştiğine, Yığın Değişim Borsa'sı, vb. İle ilgili sorular sorun. Sonunda, sürekli ortaya çıkan tüm kalıpları göreceksiniz ve temel teorinin bazılarını tanıyıp yeni bir dil öğrenmek neredeyse göz korkutucu gibi görünüyor.


1

Bir dili öğrenmenin ne kadar sürdüğünü veya bir dili öğrenmenin ne anlama geldiğini açıklamayacağım, bunun yerine asıl sorununuzu çözeceğim: programlamayı öğrenip öğrenemediğinizi veya bir programlama dili öğrenip öğrenmediğinizi belirleme .

Bir problemi ayrık süreçlere bölmeyi öğrendiyseniz ve daha sonra probleminizi çözmek için bu süreçleri kullanmayı öğrendiyseniz, programlamayı öğrendiniz. Bir dilin sözdizimini öğrendiyseniz ve bir dilde uygulandığında bir sürecin nasıl çalışacağını ayarlamayı biliyorsanız, bir program dili öğrendiniz.

Bu, Lisp kullanırken Fortan'da program yapmanız veya bir imleç kullanarak db'deki bir tablodaki bir sütunun değerlerini eklemeniz gerektiği anlamına gelmez. Sadece dilin bir uygulama detayı olduğunu. Hangi süreçlerin gerekli olduğunu değiştirebilen, ancak süreçleri belirleme ve oluşturma ihtiyacını değiştirmeyen bir tanesi - sonuçta girdi / çıktı ve istenen sonuçlarla gerçek bir dünya uygulaması var.


1

Stratejim her zaman belirli becerilerden ziyade saf becerilere odaklanmak olmuştur.

Python'un (veya herhangi bir dilin) ​​ne yapmak istediğinize yönelik özel bir sözdizimini öğrenmek yerine, beyin döngülerinizi, o kategorideki her problemi en iyi nasıl çözeceğinizi öğrenmek için soyut problemleri çözmek için harcarsınız.

Bu şekilde, dil ne olursa olsun ne yapacağınızı bileceksiniz ve çoğunlukla herhangi bir dilde programlama için kullanılabilecek zamansız becerilere sahip olacaksınız.

Özellikle, MySQL, ya da Java gibi düşünülmüş diller gibi gotchas dolu araçlardan kaçının çünkü bu araçları kullanarak ne öğrenirseniz kullanın, oldukça işe yaramaz hale gelmesi gereken araçlara özel bilgilerin büyük bir kısmı olacaktır.

Pek çok cevapta söylenenlerin aksine, diğer programcıları dinlemeyin, Asılsızsın ve gerçek anlaşmadan sahte söyleyemezsin, bu yüzden her şeyi bir kaşık tuzla almaktan daha iyi olursun.

Her zaman sorgulamak ve yalnızca çözümün hızlı, şık ve güvenilir olması durumunda kabul etmek istiyorsunuz.


1
"diğer programcıları dinlemeyin" - evet, elbette. "- Okunabilir ve kolayca bakımı yapılabilir bir kod yazıp yazmadığınızı nasıl anlarsınız? - Arkadaşınız kodu inceledikten sonra size söyler. Gerekçe: Bunu kendiniz belirleyemezsiniz, çünkü kodun kendisinin yazdığından daha fazla biliyorsunuzdur. Bir bilgisayar size söyleyemem, aynı nedenlerden dolayı bir resmin sanat olup olmadığını söyleyemez. Bu nedenle, yazdıklarına bakmak ve onun fikrini vermek için başka bir insana - yazılımı sürdürme yeteneğine - ihtiyacın var ... " ( kaynak alıntı )
gnat

@gnat ne istersen onu yap. Size söylüyorum, çoğu programcı bir şeyi kodlayamadığından, geri bildirimlerinin potansiyel olarak zararlı olduğunu ve bununla başa çıkmak için tuz ve torbalar getirmeniz gerektiğini söylüyorum. Ayrıca "düzenlenebilir ve moronlar tarafından okunabilir" in bir kalite işareti olmadığına inanıyorum. İstediklerinize inanın ancak -1 etrafında dolaşmayın, çünkü insanlar sizin vizyoninize katılmıyor.
Morg.

oyum, kabul etmem veya katılmamamı değil ( kalite anlaşması yerine, burada bir noktaya sahip olduğunuzu düşünüyorum) , post kalitesi değerlendirmesini belirtir . Karşıt olmadığı için değil, sağlam bir açıklaması olduğu için başka bir fikre alıntı yaptım (bkz. "RATIONALE"). Fikrinizi yedeklemek için benzer şekilde sağlam bir açıklama yapmayı düşünüyorsanız, eklemek için yayını düzenlemeyi düşünün
gnat

her neyse. içerik> form. formunu koru, ben içeriğimi korurum.
Morg.

0

Teorik yaklaşım var. Bilgisayarların gerçekten kapak altında nasıl çalıştığını öğrenmek. Temel işlemci talimatlarının, üst düzey programlama alanında aldığımız daha karmaşık işlemleri ve yapıları yapmak için nasıl bir araya getirildiğini.

Sonra daha pratik programlama yaklaşımı var. İnsanları vebalığın genellikle "iyi olmayan programcılar" olarak etiketlendiği ana yapışma noktası, yalnızca bir dili gerçekten bilmeleridir . Başkalarını tanıyor olsalar bile, kendi dillerinde yaptıkları gibi programlanırlar . Bu, nasıl programlanacağını gerçekten öğrenmek istiyorsa, birinin kırması gereken bir döngü. Bunun varsayılan cevabı, her programlama paradigmasından en az bir dil öğrenmek. Öyleyse bir OOP dili, işlevsel bir dil, bir betik dili ... vb. Öğrenin. Ve öğrenerek sözdizimini öğrenmek istemiyorum . Bir dili, aslında bir şeyler yaratmak için kullanarak öğrenirsiniz.

Şahsen, yeni bir dil öğrenmek istediğimde Project Euler bilinmezlerini kullanıyorum. OOP dilinde zaten çözdüğüm bir bilmeceye (örnek olarak) gidiyorum ve yeni dilin en iyi uygulamalarını takip etmeye çalışırken işlevsel bir dil kullanarak çözmeye çalışıyorum. Aynı problemi temelde iki farklı yaklaşım kullanarak çözdüğünüzde sadece gerçek farklılıkların ne olduğunu görmezsiniz, aynı zamanda ortak alanların nerede olduğunu da gösterirler. Tüm diller tarafından paylaşılan bu ortak alanlar gerçek programlamadır , farklılıklar sadece bunu başarmanın farklı yollarıdır.


4
Bir bilgisayarın fiziksel davranışı hakkında "teorik bir yaklaşım", "teorik bir yaklaşım", "teorik bir yaklaşım", kilisenin durma tezini okumak ve köri sosisi izomorfizmi hakkında bilgi edinmek, lambda hesabını ve sayı teorisinin temelleri, bunlar teorik temellerdir. Cevabınızın doğru ya da yanlış olduğunu söylememek, sadece teoriye sahip olmadığı için teorik olmayan somut yaklaşım olarak bahsedeceğim.
Jimmy Hoffa

@JimmyHoffa - İyi puanlar!
Sistem

1
“Temel işlemci talimatlarının nasıl bir araya getirildiğini (...)” yeni başlayanlar için korkunç bir fikir gibi görünüyor (OP bir tane olduğunu söylemedi ancak tartışma uğruna varsayım yapmayı kabul etti. optimize etmek için (3-5 aşamalı mimari biraz modası geçmiş sayılabilir ...). Beni yanlış anlama - CA'nın büyüleyici - ama 'doğru' takdir 'sıra dışı' ve 'multiskalar' gibi kelimeler gerektirdiğini, ve muhtemelen bazı temel programlama deneyimlerinden sonra gelebilir
Maciej Piechotka 10:13

0

Söylemek istediğim şeylerin çoğu zaten söylendi. Eklemek istediğim şey çok basit bir benzetme.

Programlama dilleri yalnızca araçlar olarak kabul edilirse, o zaman bile bir tanesinde iyi olmanın, diğerinde bir iyi çömlek yapmanın iyi bir mantığı yoktur.

Sadece bir sürü tanınmış usta kılıç ustasını düşünün, aniden kılıçlarını yere koyun ve 7 günlük antrenmandan sonra mızraklarla savaşmaya başlayın. Ne olacaktı Katledilirlerdi.

Dillerin öğrenilmesi çoğu zaman zor değildir, ancak bu konuda iyi olmak için sabır ve egzersiz gerekir. Ek olarak, programlamayı öğrenmenin doğru bir yolu yoktur .

Bir programlama öğrenmek bir RPG oyunu oynamak gibidir. Bazen kılıçlar kullanırsın, bazen mızraklar, bazen de bir kalkan. Her öldürdüğün düşman, tecrübe puanı alırsın. Yeterince tecrübe puanın olduğunda, seviye atla. Şimdi bir kılıçta ustalaşmak seni yay ve oklarla mükemmel yapmaz. Ancak, daha önce edindiğiniz deneyimin bir kısmı dayanıklılığınızı ve hızınızı artıracaktır.

Dil öğrenirken yapmak isteyebileceğiniz birkaç şey.

  • Dil hakkında bilgi edinin. ilginç geliyorsa merhaba dünya uygulamasını kendiniz deneyin.
  • Bazı dersleri, püf noktaları, blogları okuyun.
  • Sadece eğlence için basit uygulamalar yapın.
  • Farklı özellikleri test edin.
  • Gerçekten beğenirseniz, bazı kitaplar ve / veya video dersleri alın.
  • İyi kütüphaneler arayın.
  • Cevapları arayın, yalnızca cevapları bulamıyorsanız sorun.
  • Başkalarına cevap sormalarına yardımcı olun (buradakilerden daha iyi?)
  • Yararlı bir şey yap. Bir hesap makinesi uygulaması yapmak iyi bir egzersiz olabilir, ancak bir yapılacaklar listesi uygulaması yaparsanız ve aslında PC / Telefonunuzda kullanırsanız, duygu 100 kat tatmin edicidir.

Yeni dilleri deneyimleyin, yeni kütüphaneleri keşfedin, boş zamanlarınızda yeni püf noktaları öğrenin. Bunu bilmeden önce, kendi yeteneğinle kendini şaşırtacaksın.


0

Benim durumumda, aslında aşağıdakileri nasıl programlayacağımı öğrendim:

  1. Ustalardan öğrenin. Programlama podcast'lerini dinleyin, tercih ettiğiniz programlama konusundaki profesyonel blogları okuyun, guruların web üzerinden dağılmış ve son olarak da Pragmatik Programcı gibi epik kitapları okuyan harika dersleri okuyun / izleyin . Bu kitap, yazarların kariyeri boyunca biriktirilmiş birçok programlama hazinesine sahiptir. Gerçekten nasıl kodlanacağını öğrenmenin kesin bir yolu, diğer başarılı programcıların bunu nasıl yaptığını bilmektir.
  2. Yaparak tecrübe edin. Onu okumak ve bilmek bir şeydir, aslında onu uygulamaya koymak ve işe almak başka bir şeydir. Deneyimden daha iyi bir öğretmen yok, kodlama kodunuzu takın ve başlayın.
  3. Bilen birine sor. Tıpkı şu an yaptığınız gibi, takımınızdaki yaşlılardan yapılacak şeyler için en iyi uygulamalar veya daha iyi yöntemler hakkında ya da söz konusu yaşlılara ya da mentorlara ya da gurulara erişemeyecek kadar talihsizseniz, korkmayın. Sonra hala istif borsa ve internet sormak için geri kalanı var.

Ayrıca, yorumcularınızın da belirttiği gibi, araçlarınızda ustalaşmayı da unutmayın. Tüm en iyi uygulamaları ve en iyi teorileri öğrenmek tamamen boşunadır veya eğer aletiniz hakkında yeterince bilginiz yoksa, bu durumda bir programlama dili kullanıyorsanız, kötü bir şekilde uygulanır.


0

Bence analitik düşünebilirseniz, iyi bir başlangıç ​​yapabilirsiniz.

İstediğiniz dili öğrenin ve programlamayı öğreten neredeyse hiç kitapta sunulduğu gibi bir dizi örnekle kendiniz çalışın.

Daha sonra kendi problemlerinizi çözmeye çalışın. Farklı çözümler bulmaya çalış ve karşılaştır. Hız ve bellek kullanımı önemli olan faktörlerdir. Çözümlerinizi diğer programcılar ile tartışın.

Diğer programcıların kodlarını okuyun ve sorunu neden bu şekilde çözdüklerini anlamaya çalışın.

Standart yaklaşımlar üzerine genel bir bakış elde etmek için algoritmalar hakkında bazı kitaplar da okumalısınız. Yeni problemler genellikle eski problemlerin modifikasyonlarıdır.

Ekipler içerisinde ayrıca birçok uygulama ve kodla çalışmak, adım adım becerilerinizi geliştirmenize yardımcı olacaktır.

Umarım bence en azından kısmi soruyu yanıtlar.

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.