Hangi noktada bir dil “öğrendiğimi” söyleyebilirim?


67

Birkaç yıllık programlamamda Ruby'den C ++ 'a kadar herşeyle oyun oynamıştım. Sadece temel sözdizimini (Ruby) öğrenmekten, dil becerilerimi geliştiren birkaç büyük (benim için) projeyi tamamlamaya kadar her şeyi yaptım. Bu çeşitlilik göz önüne alındığında (ve gerçekten bir dili öğrenmek hiç durmazsa), bir dili ne zaman bildiğimi (veya öğrendiğimi) söyleyebilirim?


12
Bence aradığınız kelime bir dilde "ustalaşmak", bu bağlamda "öğrenilmiş" biraz garip.
Pieter B

7
"Kelimeler anlam içindir: anlamı elde ettiğinde, kelimeleri unutabilirsin." - Zhuangzi
jfrankcarr

9
Bu soruyu sormanız gerekmediğinde, bilmeniz gerekenleri öğrenmiş olacaksınız ...

1
@ JarrodRoberson Bu Zhuangzi de bunu söyledi mi?
jadkik94

2
LinkedIn'e göre, özgeçmişinize bir programlama dili koymak için çok düşük bir bar var ... LinkedIn kodlarına göre, Java kodunu daha önce görmüş olan kişilerime göre, kendi becerileri bölümünde rahatça listelemeyi rahat hissediyor.
Chris Dale,

Yanıtlar:


70

Hangi noktada İngilizce veya Fransızca gibi bir dil "öğrendiğinizi" söyleyebilirsiniz? Bence çoğu insan iletişim kurmak için kullanabildiğiniz zaman bir dil öğrendiğinizi kabul eder. Her kelimeyi bilmek ya da her deyimi anlamak zorunda değilsiniz, ancak insanların günlük konuşmada kullandıkları dilin (oldukça küçük) alt kümesinin çoğunu bilmelisiniz. Bir dili “bu ölçüde” öğrendikten sonra, dili günlük olarak kullandıkça daha fazla öğrenmeye devam edebilir ve kendinizi daha da fazla kullanmaya devam edebilirsiniz. Öldüğünüz zaman, dil hakkında bilmeniz gereken her şeyi hala bilemezsiniz, ancak kimse dili asla "öğrendiğinizi" söyleyemez.

Yani bence, bilgisayar dilleriyle. Yararlı programlar yazarken C ++ veya Ruby gibi bir dili "bildiğinizi" söyleyebilirsiniz. Dili bildiğiniz dereceyi ölçmeniz gerekirse, bir insan dili için kullandığınız terimleri kullanın. "Biliyorum ki biraz ++ C" veya "Biliyorum konuşma C ++" ya da "Ben akıcı sadece yeterli tarafından kazımak için biliyorum C ++", yeterli demek, yararlı şeyler yapılması veya bir uzman olduğunuzu almak sırasıyla.


15
Konuşma ve akıcı terimler oldukça özneldir ve doğal dile uygun olsalar da, bir bilgisayar diline uygulandığında ne anlama geldiklerini görmek zordur. Her ne kadar subjektif olsa da, fonksiyonel ve idomatik daha iyi çalışabilir. Fonksiyonel bir yerken, kullanışlı yapıları yazmak için yeterince iyi sözdizimi bilirler deyimsel bilgiyi size sadece dilde yazma bilen anlamına gelir aynı zamanda yeterince iyi kullanmayı bilmek deyimleri kullanmak gibi dilin, usingC # veya b, a = a, bve python içindeki jeneratörler. Aksi takdirde, +1.
Mark Booth

13
@MarkBooth Bir sınavda bir puan kısa herhangi bir açıklama biraz öznel olacaktır. Mesele şu ki, çoğu insanın halihazırda bir insan dili bilgisine sahip bir aşinalık seviyesini bilgisayar dili bilgisi için kaba bir rehber olarak kullanmak ve daha ileri araştırmaları davet eden dostane bir şekilde yapmak. Conversational C ++ , "Temel konulara aşinayım, ancak gelişmiş, belirsiz veya zor kodlarla ilgili bana yardımcı olmanız gerekebilir."
Caleb

3
Çoğunlukla haklı olduğunuzu düşünürken, birçok insanın hala sefil bir seviyeye sahip olduklarında doğal bir dil öğrendiklerini yanlış olarak düşündüğünü düşünüyorum. Ayrıca programlama dilleri öğrendiklerini söyleyenlere de uygulanır.
haylem

Cevabın mükemmel olduğunu düşünüyorum, hatta dil bilgisini ölçmenin ne kadar imkansız olduğunu gösteriyor. Gerçekten de, akıcı bir şey hakkında konuşabildiğiniz anlamına gelirken, bir anadili konuşmacının ihtiyaç duyduğu kadar fazla açıklama ile, bu çoğu anadili konuşmacıların iyi eski yazarların sahip olduğu dil bilgisinin onda birine sahip olmadığı gerçeğini ele almaz (hayır , harry potter veya dan brown değil, gerçek eski stil şeyler okumak zor). Aslında hiç kimse diller için konuşmayı zorlamadığında, bunu nasıl ele alırsınız? ve gerçekte ne zaman programlamada verimliliği etkiliyor?
Morg.

1
@Morg. Ne saçma sapan. Programlama, gelecekteki programcılarla (kendiniz de dahil olmak üzere), bilgisayara ne yapılacağını söylemekle iletişim kurmak kadar önemlidir. Elbette, basit bir kod yazmanın iyi bir şekilde iletilmesi gerekmeyebilir, ancak gerçek dünyada, niyetlerinizi gelecekteki kod koruyucularına açık bir şekilde belirtmek , bilgisayarı doğru olanı yapmaktan çok daha önemlidir. Her neyse, bu yorumlar artık bu cevabı iyileştirmeye yardımcı olmuyor, bu yüzden daha fazla tartışmak istiyorsanız bunu Yazılım Mühendisliği Sohbetine götürmemizi öneriyorum .
Mark Booth,

25

Kimin sorduğuna bağlı

“Bir dil öğrendiğini” söyleyen birinden ne kadar beceri seviyesi beklendiği konusunda kesin bir fikrinde bulunabileceği kesin olarak bellidir.

Temel olarak, “X öğrendiniz mi?” Sorusunun cevabını değerlendiren iki arketip teraziyle karşılaştım.

Çoğu inekler için, afişleri ayıklamak için bir hileli bir soru. Bu zaten sorunuzun diğer cevapları tarafından gösterilmiştir;). Bunu öğrendiğinizi söylerseniz, görevin kapsamını görmekte başarısız olursunuz, bu tam olarak "mükemmellik" dir ve daha da kötüsü: alçakgönüllülükle başarısız olursunuz.

Çoğu patron için, "öğrenmiş oldunuz", sorunlarını çözebiliyorsanız , kodunuz derlenirse, çoğu zaman bir ölçüt zaten karşılandı. Sorusunu mütevazi bir şekilde cevaplamak, görevi akraba olabilecek bir poz verene atamasına yol açacaktır.

Peki izleyiciniz nedir?


4
Röportajlarda, eğer biliyorsan biliyorsun. İşyerinde, Google biliyorsa bunu biliyorsunuzdur.
asfallows

3
Görüşmelerde, görüşmeci bir kravat takıyorsa "onu biliyorum" ve yapmazsa "bilmek" lütfen tanımlayın;). Adil olmak gerekirse, anketörlerin çoğu, "evet" ile daha kolay cevap vermeye meyilli olduğum "deneyime sahip" olup olmadığını soruyor
keppla

18

Bence insanlar, "öğrenilen" sözcüğünün kesinliğine odaklanıyor, mükemmel bir zaman geçiriyorlar, öğrenmeyi tamamladığınız anlamına geliyor. Ve herkesin belirttiği gibi, programlama dilleri konuşulan diller gibi yaşayan varlıklardır. Örneğin, C # 2 uzmanlığına sahip olan biri LINQ, Lambdas, varanahtar kelime, nesne / koleksiyon başlatıcıları ve genişletme yöntemleriyle C # 3'e bakar ve önceki sürüm için öğrendiklerinden çok şey değiştiğini görür . Aynı şey C # 4 ile await, asyncanahtar kelimeler ve diğer yeni dil yapıları ile oluyor.

Ve biz burada sadece sözdizimi konuşuyoruz. Çoğu dilin bir çerçeveyle eşleştirildiğini unutuyoruz . C #, .NET çerçevesine sahiptir, Java, Ruby, C ++, PHP ve PERL gibi kendi çerçevelerine sahiptir. Bir dilin çerçevesini kelime haznesi olarak düşünün ve dilin kendisi sadece sözdizimidir. Dili bilmek, dilde nasıl bir cümle kurulacağını bilmek anlamına gelir. Çerçeveyi bilmek, kendinizi iyi ifade edebileceğiniz anlamına gelir. Son olarak, sözdizimi ve kelime bilgisini öğrendikten sonra, deyimleri öğrenmeniz gerekir, böylece kodu "anadili" olarak yazarsınız.

Birkaç öğrenme düzeyi olduğunu söyleyebilirim.

  1. Merhaba Dünya (en basit programları yazabilirsiniz.)
  2. Uzman (temel programları yazabilir ancak düzenli olarak çevrimiçi yardıma başvurmanız gerekir)
  3. Akıcı (gerekli bazı referanslarla önceden program yazabilirsiniz).
  4. Anadili (en az çevrimiçi yardımla gelişmiş programlar yazabilirsiniz, kodunuz başka bir yerel konuşanın kodundan ayırt edilemez).

3
Nitpick: awaitC # 5'ten, C # 4'teki yeni ana şeydi dynamic.
svick

Haklısın ... Hangi C # sürümünün hangi .NET sürümüyle gittiğini izliyorum
Michael Brown

7

Bir dil öğrendiğinizi nadiren söyleyebilirsiniz. Bu, öğrenmeyi tamamladığın anlamına geliyor, ki bu ... aptalca.

Bir dilin bildiğini söylemek, dilde aptalca dilleri (belki de bilginin paslanmasından bir hafta sonra) sözdizimi referansına atıfta bulunmadan açıkça söyleyemeyen bir kod yazabildiğiniz zaman iyidir.


2
Deyimler değişir, stiller bir yerden diğerine değişir ve gerçekten dillerin zaman içinde değişmesi. C ++ gibi bir dili "bildiğini" veya "öğrendiğini" söyleyemiyorsanız, öğrenmeyi bitirene kadar, C ++ öğrendiğini iddia edebilecek çok az insan var.
Caleb

1
@Caleb tam olarak.
Michael Brown,

3
Eğer böyle öğrenirseniz, o zaman (en azından çoğu kişi için de) aptal olan kendi ana dilinizi bile bilmiyorsunuzdur
superM

@Caleb, bundan daha kötüsü, Carmack ve Torvalds'ın da işaret ettiği gibi, c ++ 'ın birçok kısmı göz ardı edildiğinde daha iyidir.
Morg.

3

Bu daha çok fikir temelli bir faktördür. Tüm teknik terimlerle "Öğrenilmiş", sizin gibi dilin HER ŞEYİNİ bilmeniz beklendiği gibi tam bir bilgiye sahip olmak anlamına gelir.

Ancak programlama dünyasında, bir amacı / görevi tamamlamak için akıcı bir şekilde programlanabilir olup olmadığına daha çok inanıyorum. Ayrıca, muhtemelen dili rahat edeceğiniz anlamına gelir. Dışarı çıkıp kolej yıllarından ve yıllardan sonra bir derece alabildiğinizden emin olun, ama bu sadece fark edilmek mi? Ne zaman bir dil öğrendiğinizi söyleyebileceğinizi belirlersiniz.


2

Onun kusurlarını fark etmeye başladığınızda. Bir dili öğrenmeye başladığınızda, genellikle hala bir şeyler yapmayı öğrenmekle meşgul olursunuz veya nerede başarısız olduğunu farketmek için çok meşgul olursunuz (tabii ki, bu, ne kadar daha kötü olduğunu görmek için olumsuz bir bakış açısıyla öğrenmeye başlamadığınız sürece) şimdiye kadar favori dilinizle karşılaştırılır). Başarısız olduğu alanların tam olarak farkında olana kadar bir dil bilmediğinizi söyleyebilirim.


Buna katılıyorum. Öğreneceğiniz ilk dil veya iki dil için doğru olabilir - ne arayacağınızı bilemeyebilirsiniz, bu yüzden en çirkin tasarım hataları bile doğru olanı yapmadan ayırt edilemez. Birkaç dil öğrendikten sonra, yeni bir dil öğrenmeye başladıktan kısa bir süre sonra dil kusurlarını görmeye başlamalısınız. Fakat o zaman gelişiminiz boyunca bir süre “farklı” yı yanlış bir şekilde “farklı” olarak eşitleyeceksiniz. Her büyük türden birkaç dil öğrenene kadar (usule dayalı, OO, işlevsel, bildirimsel…) acil kararlarınız şüpheli olacaktır.
Warren Young,

2

Bunun için kişisel cevabım,

  1. Basit bir üretim seviyesi program yazmanın temellerini biliyorum.
  2. En az 3 saatimi basit görünen ama olmayan bir problemi çözmek için harcadım.

O andan itibaren buna öğrenme demezdim ama ustalık.


1

Başvurunuzun veya bileşeninizin ne zaman posta okuyabileceği, yani Zawinski yasası ,

“Her program posta okuyana kadar genişletmeye çalışıyor. Bu kadar genişleyemeyen programlar yerine geçebilecek olanların yerine geçiyor. ”Gerçekten yararlı olan tüm programların araç takımlarına ve uygulama platformlarına (uygulama platformlarına dönüşmeye baskı uyguladığı) inancını ifade etmek için Jamie Zawinski (“ Yazılım Zarflama Yasası ”olarak adlandırılan) tarafından icat edildi. mailler olayı diyor, bunun sadece bir yan etkisi var.

Bu, RSS'in "... RSS yayınlarını okuyabilir" ve popüler olduğu günlerde "... Twitter yayınlarını okuyabilir" olarak güncellendiğinde güncellenmiştir. ;-)


0

Bence onu göremediğinizde bir dil öğrendiniz. For döngülerini ve veri erişimlerini görmezsiniz, ancak algoritmanın iş akışını görürsünüz.

Parametre geçişi ve dizi işlemesi, sihirli makrolar ile oyun oynamazsınız. Kodunuzu, arkadaşlarınıza ve öğretmenlerinize göstermek için kendi kendine pazarlama materyali olarak düşünmüyorsunuz, ancak bir sorun hakkındaki anlayışınızı ve bilgisayara iradesinizi en okunaklı şekilde ifade ediyorsunuz.

Sadece onları izleyerek birçok hatadan kaçınmanıza yardımcı olacak alışkanlıklarınız var: Mesela: "} Sadece bir satır olacak" veya "Aptal değilim ve bildiğimden kesinlikle emin olsanız bile, ifadelerde {} kod blokları ve () kullanın. operatör öncelik sırası ".

Kaç tane sınıf, kalıp ve çerçeve API'si bildiğinizi saymayı bıraktınız. İstihbarat, referanslar ve öğreticiler ve Google bunun içindir. Ancak bir soruna baktığınızda, hangi parçalara bölünebileceğini ve bunları hangi araçlar ve algoritmalarla çözeceğinizi hemen bilirsiniz.

Sen ne yaparsan işleri vardır zarif ve küçük . Kodlamayı seviyorsunuz ve kolayca hatalarınızı buluyorsunuz. Evet, üstatlar aynı zamanda insanlar oldukları için de hata yaparlar - fakat kod yapıları onları doğru yere götürdüğü için onları çabucak bulurlar.

Ve nihayetinde fark et: problemleri düşünmeyi, analiz etmeyi ve çözmeyi öğrendin; onlarla karşılaştırıldığında, asıl dil ikincildir, yalnızca geçerli kurallar ve araçlar kutusudur.

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.