Bir programcı en az kaç dile odaklanmalıdır? [kapalı]


21

Benim için ben C # ve Java kişiyim. Bu 2 dilin oldukça benzer olduğunu düşünüyorum, bu yüzden birbirlerine geçmem daha kolay. Başka dilleri seçmenin iyi bir fikir olup olmadığından emin değilim. Düşüncesi olan var mı?


mı soruyorsun, çünkü işe alım süreçleri özgeçmişlerdeki anahtar kelimeleri mi arıyor?
Brian

@ 0A0D hayır aslında, kişisel çıkarlar içindi. Ben de bir programcı :) :)
Dijital Dostum

Yanıtlar:


43

Bir dil öğrenmek için en az beş neden düşünebiliyorum ve sonuçta bunların her biri için bir tane öğrenmelisiniz.

  1. İlk işinizi alabileceğiniz tek dil - muhtemelen Java / C # / C ++
  2. Bir şeyleri halletmek için bir dil - muhtemelen Bash / Perl / Python / Ruby
  3. Fikrinizi bükecek tek dil - muhtemelen Haskell / Clojure / Scala / F #
  4. Etki alanına özgü nedenlerden dolayı bir dil - muhtemelen JavaScript / Objective C
  5. Ellerinizi kirletecek tek dil - muhtemelen C / Assembly

17
Hangi dil hepsini yönetiyor?
Tester101

4
Meclis hepsini yönetir. Bu yüzden son listeleniyor. Sonuncu için en iyisini kurtardım.
WernerCD

9
Test Cihazı101: İngilizce? o)
John Fisher

6
Tabii ki, ilk işinizi almak için kullandığınız dilin işleri yapmak için kullandığınız dil olmaması şaşırtıcı değildir .

4
... ve karanlıkta onları bağlayın!
tchrist

53

Kaç dil öğrendiğinle ilgili değil. Yeni kavramlar öğrenmekle ilgili. Bazı diller size birçok kavramı öğretebilir, bazıları ise sadece bir tanesini öğretebilir.

C # biliyorsanız, muhtemelen Java'yı öğrenerek çok yeni bir şey öğrenemezsiniz. Ama Haskell'i öğrenseydin yapardın.

Öğrenmek için yeni bir dil seçtiğinizde, bilmediğiniz kavramları size öğretecek bir şey seçin.


23
+1 "Programlama hakkındaki düşüncelerinizi etkilemeyen bir dil bilmeye değer değil" -Alan Perlis
Inaimathi

20
@Inaimathi: Bilmeden faturaları ödemeye yardımcı olmaz.
Kramii, Monica'yı

5
Sadece bir not: Haskell'i C # 'dan tamamen farklı bir sebep olmadan sebepsiz olarak önerdim . İçimdeki asbest takan hileci "Smalltalk'ı öğren, böylece OO öğren" demek istedi!
Frank Shearar

10
@Digital Dude: Çok zor olduğu nokta bu. Alnınızın ardındaki acı kötü bir şey değil - beyninizin büyüdüğünün bir işareti. Aynı şeyi tekrar tekrar öğrenmeye devam etmek istiyorsan, Java'yı öğren, sonra C #, sonra Ruby, sonra C ++ (woooh, çöp toplayıcı yok - korkutucu!), Sonra C (sınıf yok - korkutucu!), Sonra belki Gerçekten çıldırıp Objective-C'yi deneyin! (Ooooh - iki gün önce Mac'i heceleyemedim ve şimdi bir tanesini programlayabilirim!) Demek istediğim - YENİ bir şey öğrenmek istiyorsanız, farklı bir şey yapmak zorundasınız. Aynı yolu takip etmek sizi aynı yere götürür.
Bob Jarvis - Monica'yı

4
@Kramii @Inaimathi Aha, ancak faturaları ödemenize yardımcı olan bir dil, programlama hakkındaki düşüncelerinizi etkiliyor
slf

22

En önemli şeyin hızlı öğrenme yeteneği olduğunu söyleyebilirim. Bu, farklı amaçlar için kullanılan farklı dilleri bilmenin önemli olduğunu söyledi. Örneğin biliyorum:

1) Betik dilleri kategorisi için Python ve Perl

2) "++" çerçevesi olarak C ++

3) Mobil uygulama için Java

4) Büyük miktarda eski kod için C

5) Küçükken bildiğim bazı eski diller (Temel, Pascal, Clipper vb.)

En azından bir ana dile ve bir betik yazısına ihtiyacınız olduğunu söyleyebilirim . C # bilmek bir sonraki Python veya Perl veya Ruby öğrenmeniz gerektiğini söyleyebilirim. (Python ile giderdim ama bu sadece bir tercih meselesi).


1
Ben de seninle aynı fikirdeyim. Bir dili bilen bir programcının, en azından onunla çalışmak için bir kodlama dili öğrenmesi gerekir. Bazı testler yapmak istediğinizde bunun çok önemli olduğunu düşünüyorum. özellikle oyun geliştirme ... vb. sanırım python'u ek dilim
Digital Dude

2
hızlı öğrenme yeteneği için karma
Ayush Goyal 28:10

Bir betik dilinin yanı sıra, bazen bir kabuk betik dilini bilmek de büyük bir yardımcı olabilir. Sistemdeki bazı genel işleri, kabuk dilinde Python gibi bir betik dilinde kullanmaktan daha kolaydır.
CodexArcanum

C # bilmek bu dilde uzman olmaktan farklıdır
Brian

1
Pascal pek eski bir dildir; Delphi'de bugünlerde bir sürü şey geliştiriliyor.
Mason Wheeler

8

Her yıl yeni bir programlama dili öğrenmek iyidir. Ancak, zaten bildiklerinize benzer bir şey öğrenmek yerine, Scala veya F # gibi kökten farklı bir şey öğrenmenizi tavsiye edeceğim. Size bir şeyler yapmanın ve sonunda programlama becerilerinizi zenginleştirmenin yeni yollarını gösterecektir.


Teşekkürler! Burada ve oradan biraz biliyorum ama bir dilin tam anlamıyla usta olamayacağımı fark ettim. Her zaman yeni şeyler oluyor ..: /
Digital Dude

2
@Digital Her dilde uzman olmanıza gerek yok. Kavramlara aşina olmalısınız, böylece bir problem ortaya çıkarsa bir dilin en iyi şekilde hizmet edebileceğini düşünürsünüz. Ayrıca ana dillerinde kullanabileceğiniz konseptlere de maruz kalabilir.
KeithB

8

İhtiyacınız olan dillere odaklanmalı ve yaptığınız şey için kullanmalısınız . Gerçekten bir dil öğrenmek pratikten gelir, böylece pratik yaparken o dilin avantajını elde edersiniz. Boş zamanlarınızda yeni bir dil öğrenecekseniz, onu karmaşıklığı arttırma görevlerinde uygulayarak yapın, böylece onu gerçekten ele alabilirsiniz.


7

hiçbirine odaklan. temiz kod öğrenmeye ve yazmaya odaklanın; Açık, anlamlı, basit ve en önemlisi kopyalanmamıştır.

bu programlama tipinin prensiplerini araştırın, temeller (örneğin, OOP için kapsülleme; ne anlama gelir ve ne ifade eder) ve bazı prensipleri öğrenin.

bu şey işinizi kolaylaştıracak. bu, sizinle birlikte veya kendinizden sonra çalışan kişiler için daha kolay hale getirecektir.

ya sentaksıyı da iyi bilmek zorundasın. ama bu senin odağını uzun süre alan bir şey değil

ve ya, kullandığınız teknolojileri de oldukça iyi anlamalısınız. ancak bunlar, işinizin gerektirdiği karmaşıklık seviyesine göre önceliklendirilebilir.

Son ikisi ana odak değil, bazı odak


Evet, geçenlerde C # 'yi alıyorum, bu kitaptan tam olarak nasıl yararlanacağımı hiç bilmediğim birçok şeyi okumak ve öğrenmek için çok iyi bir kitap. Duyduğum diğer derinlikteki C # kitabı da tavsiye edilir. Öğrenecek çok fazla şey var ... bu yüzden bu yazıya bazı dillere konsantre olmak zorunda kaldım.
Dijital Arkadaş

amacınıza göre öncelik verin. işinizi kolaylaştırmak ister misiniz? nerede olduğun ve ne yaptığın konusunda mutlu musun? temiz kod için gidin. Başka bir teknolojiyi kullanan başka bir şirkette çalışmak istiyorsanız, bunu öğrenin. sadece çeşitlilik için teknolojiyi değiştirmek istiyorsanız, bunun için gidin. hedefinizi seçip buna göre hareket edin
Belun

6

Bir programcının , belirli bir dilde / dillerde değil, programlama üzerine yoğunlaşması gerekir .


6

İşinizi yapmak için gereken kadar.

Ancak C # ve Java, İngiltere İngilizcesi ve ABD İngilizcesi kadar yakındır. Fince veya Navajo'ya giderek yeni bir şeyler öğrenebilirsiniz .


1
veya! Xóõ: en.wikipedia.org/wiki/Taa_language (Afrika "klik" dili).
Jared Updike

Fince ya da Navajo'dan bahsettikten sonra hehe. Sanırım dördüncü için Japoncaya gideceğim ... yeterince programlama ...
Digital Dude

1
@Jared, sadece adını söylemek için kes-yapıştır GEREKTİREN bir dilin, başından itibaren istenmeyen alışkanlıkları teşvik edebileceğini düşünüyorum ...

5

Başka bir dili bu dili "dışarıdan" olduğu gibi görmek için yeterli derecede anlamadan bir diline hakim olabileceğinizi sanmıyorum. Her farklı dil masaya başka bir şey getirir ve getirdikleri kavramlar birlikte çalıştığınız ana dillere geri dönebileceğiniz şeylerdir.

Bu yüzden, başka dilleri kullanmayı öğrenmek için harcanan zaman, onları ticari olarak kullanmayı düşünmüyorsanız bile asla boşa harcanmaz.

Eski atasözü her yıl bir dil öğrenmek ve kesinlikle ilk on yıl için şunu söylemeliyim ki bunu yapmanız gerekiyor. Belki de bunun ötesinde, daha önceden bildiklerinizin bazılarını daha derinlemesine keşfetmek (belki birkaç yıl önce öğrendiklerinizin bilgilerinizi güncellemek) veya sadece yeni diller biriktirmek yerine belirli kütüphanelerle çalışmak arasında seçim yapabilirsiniz farklı dillerle çalışarak programlama pratiğini araştırmak, bir programcı olarak gelişiminize kesinlikle yardımcı olacaktır.


Bir noktadan sonra, bir dilde öğrenilen kavramları başka bir dilde kullanarak da biraz zaman geçirebilirsiniz. Örneğin, Haskell kullanarak fonksiyonel programlama öğrendikten sonra, C # ile hangi fonksiyonel programlama kavramlarını kullanabileceğinizi görmeyi deneyebilirsiniz. Tüm bir fonksiyon programını C # dilinde yazmak istemezsiniz, ancak bunun bölümleri bu şekilde daha anlamlı olabilir.
KeithB

3

C # ve Java gibi popüler programlama dilleri çoğu yerde kazançlı çalışmanızı sağlar, ancak problem çözmenin yeni yollarını öğrenmek için birbirinizden yeterince farklı değildir. Bence yediğiniz bazı dilleri (işinizi yapmak için kullandıklarınızı) ve birlikte oynadıklarını düşünüyorum. Her ikisinin de amaçları var.

Yeni programlama dilleri öğrenerek, sorunları çözmenin yeni ve daha zarif yollarını da öğrendim. Bu, dillerin sayısı ya da ne sıklıkta aldığınızla ilgili değil. Öğrenmeye değer her bir programlama dili, sizi sorunlarınıza yeni bir zihniyetle yaklaşmaya zorlayan benzersiz bir bakış açısına sahiptir. Çoğu zaman bu değer zihniyeti öğrenmekten gelir.

Smalltalk ile oynadım ve çok hoşuma gitti. Dil, birlikte geliştirmek için bir zevkti. Deyimlerinize alışınca, kodunuzla daha anlamlı olmanıza yardımcı oldular. Java / C ++ / C # ile yazdığınız statik yazmayı hiç özlemedim. Statik olarak yazılan dillerimizde yaşadığımız jenerikler, statik yazım kurallarının sınırlamaları etrafında çalışmak için gerçekten inşa edilmiştir.

Şu anda işleri yapmak için olmasa da, Ruby ve Ruby on Rails'i düzenli kullanıyorum. Ruby'nin tasarım ilkesi “programcı mutluluğunu arttırmaktı”. Bu duyguyu sevmek zorundasın ve bunun çoğunlukla sağladığını düşünüyorum.

Sonunda Java lisp ve Smalltalk yollarına gidecektir ve C # davanın izini sürecektir. Onların yerini almak için orada olacaklar görülmeye devam ediyor. Günün sonunda, eğer problemleri nasıl çözeceğinizi biliyorsanız ve problemi dilimlemek ve kesmek için birkaç yolunuz varsa, bir iş bulabilir ve ihtiyaç duyduğunuz dili ne olursa olsun seçebileceksiniz.


2

Becerileri güncel ve esnek tutmaya gelince, en az bir tane tamamen yeni bir programlama dili öğrenmeye çalışmanız gerektiğini düşünüyorum. Ve ben çok, çok farklı bir dil demek istiyorum.

Bu nedenle, C # veya Java çerçevelerini kullanırken .net çerçevesi hakkında daha fazla bilgi edinirken esnek olmanıza yardımcı olur, Haskell, Smalltalk, Scala, Clojure veya Ruby öğrenmek tekniğinizi genişletecek ve bazılarını faydalı bir şekilde alabileceğiniz farklı şekillerde düşünmenize yardımcı olacaktır. ana dilinize geri dönün ve Java tepenin kralı olmaktan çıkarsa, bazıları devam etmenize yardımcı olabilir.

C'yi hiç öğrenmediyseniz, sözdizimi Java'ya getirilmiş olmasına rağmen, zihniyet oldukça farklı olabilir. OO kodunun sadece usule uygun görünen bu dilde nasıl yazılabileceğini anlamak, onu derinlemesine ve hatta daha iyi bir şekilde bilmeye değer.

Bruce Tate'nin C ++ 'ın yükselişini ve düşüşünü dikkate alarak yalnızca bir dilde olmanın tehlikelerini vurgulayan "Beyond Java" kitabını okumanızı öneririm. Her ne kadar C ++ ölü olmaktan çok uzakta olsa ve onlarca yıl kalmış olsa da, yalnızca diğer dillerdeki verimlilik artışlarından yararlanamayan durumlarda kullanımı giderek daha da kısıtlanıyor. Buna karşılık, yakut bir çerçeve olan Sinatra, yaklaşık 6/7 kod satırında basit bir web hizmeti oluşturmanıza izin verir, C ++ eşdeğeri bundan daha büyük bir sipariş olabilir.


1

Anadili İngilizce olmadığınızda, en azından İngilizcenizi geliştirmek için konsantre olmalısınız . Bunu tecrübelerime dayanarak söylüyorum. Bu dili anlamak bana çok yardımcı oldu.

Programlama dillerini, teknolojileri ve yeni kavramları öğrenmek için tüm iyi malzemeler (kitap, makale, kod vb.) İngilizce olarak yazılmıştır.


1

Diller işi bitirmenin bir aracıdır. Bazı diller bazı problemler için iyidir, diğerleri genellikle her türlü problem çözmede iyidir. Yeni dilleri ortaya çıktıkça öğrenmenizi öneririm. Bu ay moda olanlara kafayı takma ama ne yapabileceklerini, neyin iyi olduğunu öğren. Tavsiyem yılda 1 yeni dil. Bundan daha hızlı ortaya çıkıyorlar, ancak araç kutunuza yeni araçlar koymak istiyorsunuz, bloktaki şık yeni çocuk değilsiniz.

Dillerdeki farklılıklardan bahseden bir makale Paul Graham'ın "Ortalamaları Dövüşmek" dir. Okumayı öneriyorum, ancak önemli bir bölüm burada ("Blub" ı varsayımsal bir dil olarak kullanıyor, böylece en sevdiğiniz kordonun neler yapabileceğini tartışmamanız için):

Ya da Perl 4? Perl 4 ve Perl 5 arasında, dilsel sözcük kapanışları eklendi. Perl bilgisayar korsanlarının çoğu Perl 5'in Perl 4'ten daha güçlü olduğu konusunda hemfikirdir. Ancak bir kez yüksek seviyeli bir dilin diğerinden daha güçlü olabileceğini kabul ettiniz. Ve kaçınılmaz olarak, özel durumlar dışında, alabileceğiniz en güçlüleri kullanmanız gerektiğini takip eder.

Ancak bu fikir nadiren sonuçlandırılmaktadır. Belli bir yaştan sonra, programcılar nadiren gönüllü olarak dil değiştirirler. İnsanların alıştığı dil ne olursa olsun, yeterince iyi düşünmeye meyillidirler.

{Kesik}

Varsayımsal Blub programcımız güç devamlılığına baktığı sürece, aşağı baktığını bilir. Blub'dan daha az güçlü olan diller açıkça daha az güçlü, çünkü alıştığı bazı özellikleri kaçırıyorlar. Fakat varsayımsal Blub programcımız diğer yöne baktığında, güç devamlılığı ardına bakmaya başladığını anlamıyor. Gördüğü şey sadece tuhaf diller. Muhtemelen onları Blub'a eşdeğer güç olarak görüyor, ama bütün diğer tüylü şeyler de fırlatılıyor. Blub onun için yeterince iyidir, çünkü Blub'da olduğunu düşünüyor.

Güç sürekliliğini artıran dillerden herhangi birini kullanan bir programcının bakış açısına geçtiğimizde, sırayla Blub'a baktığını görüyoruz. Blub'da bir şey nasıl yapılır? Y bile yok.

İndüksiyonla, çeşitli diller arasındaki iktidardaki tüm farklılıkları görebilecek konumda olan tek programcılar en güçlü olanı anlayanlardır. (Muhtemelen Eric Raymond'ın Lisp'i daha iyi bir programcı yapması için kastettiği şey buydu.) Blub paradoksu nedeniyle diğerlerinin görüşlerine güvenemezsiniz: kullandıkları dilden memnunlar, çünkü kullandıkları dilin programlar hakkında düşünmenin yolu.

http://www.paulgraham.com/avg.html

Gönderdiğimiz uygulamaların çoğu C # veya VB ile yazılmıştır. Bir uygulamaya komut dosyası eklememiz gerektiğinde, Python'u seçtik (Lua ikinci seçenekti). F # öğreniyoruz, çünkü herkesin C # / Java / VB olup olmadığını açıklamak ve anlamak zor yeni tüylü şeyler yapabilir.


0

Her şeyden önce, çoğu programcı için kaçınılması gereken çok sayıda dil vardır: javascript, sql, c, vb.

ördek tipinde bir betik dili bilmek de iyi bir fikirdir. Örneğin perl, python, ruby, lua vs.

daha iyisi ya da daha kötüsü için, muhtemelen bir noktada c # ve / veya java ile de karşılaşacaksınız, bunlar oldukça yaygın.

Her durumda, yapay olarak kendinizi sınırlamayın. Açıkça ilginç araçlar bulmaktan kaçınan kişilerin tanıdığı kodlayıcılar dünya görüşlerini ve sınırlı etkiye sahip görünüyor.


0

Bu, bir anlamda genelci tartışmalara karşı başka bir uzman haline gelebilir. Bazı insanlar bir dili, kendileri için iyi olan büyük derinliklerde tanıyarak uzun zaman geçirebilirler. Diğer insanlar, kendileri için uygun olan birçok farklı dil hakkında bir şeyler bilmek isteyebilirler. Çoğu insan bu iki uç arasında.

Burada keşfedilecek dil önerileri istiyorsanız birkaç fikir:

  1. İşlevsel programlama - Haskell veya Lisp burada örnek olur ve paradigma kayması bir dereceye kadar baş döndürücü olabilir.

  2. Veritabanına özel - PL / SQL veya T-SQL, bazı işlevleri için veri tabanı gerektiren sistemler ile daha fazla arka uç çalışması yapmakta kullanabileceğiniz faydalı olabilir.

  3. UI web dilleri - ActionScript veya Javascript, burada Zengin İnternet Uygulamalarında kullanılan dillere örnek olabilir, ancak AIR, bazı masaüstü uygulamalarının Twitter API'sini kullanarak Twhirl gibi bazı durumlarda web çağrılarını kullanmasını sağlayabilir.

Bunlar sadece fikirlerdir ve bunlar olmak istediğiniz yere bağlı olarak sizin için yararlı veya yararsız olabilir. Yaptığın seçimlerde başarılar.


0

Bir programcının üç dil bilmesi gerekir: C, İngilizce ve Başka Bir Şey.

C, çekirdek bir dildir, makineye yakındır ve birkaç üst seviye dilde ortak olan sözdizimi kurallarına sahiptir. C sizi veri yapıları gibi şeyleri Java'dan çok farklı bir şekilde düşünmeye zorlar. Ayrıca, Python ve Ruby vms'leri C'de yerleşiktir ve hızınızı artırmak istediğinizde C'yi her iki dile sıralayabilirsiniz.

İngilizce, ortak programlama dilidir. Çoğu kitap, teknik rapor, teknik web sitesi ve dergi makalesi önce İngilizce, bazen de İngilizce çıkar. Ayrıca, eğer İngilizce ilk diliniz değilse, İngilizce öğrenmek, araçlarınızı kavramların manipüle edilmesi için genişletecektir (bu, elbette diğer dilleri de öğrenen İngilizce konuşanlar için geçerlidir).

Başka Bir Şey, prosedürel olmayan, statik olarak yazılmayan veya güçlü bir şekilde nesne yönelimli bir dil olmalıdır veya bir şekilde temelde C. Haskell, Scala, Python, Ruby, bazı Lisp lehçelerinden farklıdır. .

Bundan sonra, özel durumunuzun neye benzediğini, muhtemelen C # veya Java'yı öğrenebilirsiniz.


Anonim eleştirmen, bu cevabı neden oyladığınıza dair bir yorumunuz için teşekkür ederim.
philosodad

ingilizce size fikri öğretmiyor, sadece fikri ifade etmenin bir yolu.
sagarmatha

@sagarmatha: Bu doğru olsa bile, ki olmasa da , alanın varsayılan iletişim dilinde kendinizi ifade edebilmek için 'sadece' hiçbir şey yoktur. İngilizcenizi geliştirdiyseniz, kendinizi İngilizce konuşanlar için açıkça ifade edebilir ve daha da önemlisi, İngilizceyi çok daha hızlı okuyup anlayabilirsiniz. Matias'ın işaret ettiği gibi, programlama kitapları ve teknik makaleler ilk önce İngilizce , bazen sadece İngilizce olarak ortaya çıkmaktadır .
philosodad

Neden reddedildiğini anlamıyorum, ama İngilizce bilmenin bir ana programlama dilini bilmek kadar önemli olduğu konusunda seninle aynı fikirdeyim. @sagarmatha: Kendinle çelişiyorsun. Fikirler İngilizce olarak ifade ediliyorsa, kesinlikle İngilizce dilini bilmek, bu yeni fikirleri öğrenmenizi sağlayacaktır. Ne kadar iyi öğrenir ve uygularsanız, İngilizce artı programlama becerilerini anlama yeteneğinize bağlı olacaktır.
chiurox
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.