(Neden) Yeni bir programlama dili öğrenmeli miyim? [kapalı]


97

Java, C / C ++, JavaScript / jQuery konusunda oldukça uzmanım ve Objective-C'de terbiyeli derecede iyiyim. Dilleri ve bunlara karşılık gelen çerçeveleri ile oldukça üretkenim ve kodları 'temiz' ve bakımı kolay tutulurken işletme düzeyinde sistemler (ve ayrıca küçük ölçekli olanlar) üretiyoruz (altıdan sonra kendi kodumu okuyabilirim). aylar :)

Platform (iPhone, iPad, vb.) Veya müşteri / uygulama organizasyonu tarafından zorunlu tutulmadıkça, sadece "neden" yeni bir programlama dili öğrenmeliyim? Sadece eğlence için"? Ve onunla değerli bir şey yapmayacaksam bu eğlenceyle ne yapacaksın?

Akranlarımın birçoğu "yeni şey / dili" öğrenmek için dalmaya hazırlar ve genellikle Python, Ruby veya PHP'dir (sadece birkaç popüler ismi söyler). Şimdi, sadece dili bilmek, boşuna IMHO. Ayrıca çerçeveleri bilmeniz, bunların kullanımını / API'lerini ve ayrıca 'iyi uygulama uygulamaları' vb.

Yani 'ekonomik' bir anlamda, yeni bir programlama dili öğrenmenin bir faydası var mı? Eğer dil hızlı ve kirli bir şekilde öğrenilirse, muhtemelen hızlı ve kirli prototipleme / uygulama için de kullanılacaktır - ama BU'yu zamanın / çabanın haklı bir yatırımı olarak görmüyorum.

Öyleyse neden NEDEN (veya bu konuda birileri olsun) "eğlenceli, o yüzden deneyelim" den başka bir programlama dili öğrenmeliyim - eğer zaman yatırımına uzun vadede değmeyecekse?


6
programmers.stackexchange.com/questions/118338/… Belki de verdiğim cevapla ilgilenirsiniz.
deadalnix

3
Yeni kavramlarla yeni bir dil görebiliyorsanız ve onları anlama arzusu yoksa, birçok yer sizi işe almayacak (aslında, bunun gibi şeyleri özellikle belirlemek için birçok görüşme sorusu yapılıyor)
Bill K

3
Neden yeni bir dil öğrenmemeliyim diye soracağım.
kullanıcı

2
@ ZacharyK, iş bir java geliştiricisi için olsa bile ve aday java'da süper oldu. Kendini ayağından vurmuş gibi görünüyorsun.
NimChimpsky,

2
Dışarıda bir sürü Süper Java oyuncusu var. Şu anda bildiğiniz gibi 6 ay içinde bileceklerinizle ilgileniyorum. (Tabii ki bütün zamanımı Erlang, CoffeeScript ve PHP'de geçiriyorum)
Zachary K

Yanıtlar:


178

Gönderen Pragmatik Programcı , İpucu # 8 "Kişisel Bilgi Portfolio Düzenli Yatırım":

Her yıl en az bir yeni dil öğrenin. Farklı diller aynı sorunları farklı yollarla çözerler. Birkaç farklı yaklaşım öğrenerek, düşüncenizi genişletmeye yardımcı olabilir ve bir telaş içinde sıkışmaktan kaçınabilirsiniz. Ek olarak, internette serbestçe kullanılabilen yazılımların zenginliği sayesinde birçok dili öğrenmek artık çok daha kolay

Bir sonraki "yeni şey" ile ilgili değil. Normal düşünce düzeninizin dışında farklı şekillerde düşünmekle ilgilidir.

"Bir çekiç olduğunda, her şey bir çiviye benziyor" der. Belki başka bir teknolojiyi kullanarak bir sorunu çözmenin daha iyi bir yolu vardır. Keşfetmezseniz, uygun olduğunu bilmiyor olabilirsiniz.


Mükemmel nokta Bu düşünce, beni bir projede RavenDB'yi denememe yöneltti ve yıllarca bir SQL Server telaşına sıkışıp kaldıktan sonra çok şey öğrendim.
Bob Horn,

52
Tüm sahip olduğun bir çekiç olduğunda sanırım her şey baş parmağına benziyor
Zachary K

2
Tamamen katılıyorum. Ayrıca, başka bir dil öğrenmenin, önceden bildiğiniz dillerin özelliklerini daha iyi anlamanıza yardımcı olacağını da eklerdim. Aynı zamanda, "gerçek" programlama temel kavramlarını / kalıplarını / sınırlamalarını ve yalnızca sizin özel araç setinizin ne yapıtları olduğunu ayırt etmeye yardımcı olur. Örneğin, bildiğiniz bütün diller zayıf yazılmışsa, o kadar güçlü yazmanın olduğunu asla bilemezsiniz ve nedenini asla merak etmeyebilirsiniz! Sonuç olarak, ürünleriniz piyasaya sürülme zamanında mükemmel olsalar bile performans veya güvenlikle karşı karşıya kalabilirler ;-).
JJC

3
Pragmatik Programcı şu ana kadar okuduğum en iyi programlama kitabından biri. Gerçekten iyi!
Soner Gönül

"Normal düşünce kalıplarının dışında farklı şekillerde düşünmek" konusunda gerçekten hemfikirim. Python'u öğrendiğimde, yeni düşünce dünyasına sahip oldum.
Yoo Matsuo

80

İnsanlar neden Mt. Everest? Veya 24 saat içinde 100 km koşmak ? Neden herhangi bir zorluk üstleniyoruz? Çünkü orada. "Ars gratia artis" ile yanlış bir şey görmüyorum. Öğrenme uğruna öğrenmenin kendi ödülü haline geldiği bir nokta var. Ancak, burada yeni bir dil öğrenmek için daha güçlü nedenler istiyorsanız, bazıları:

Problemleri çözmenin yeni yolları Yeni bir dil öğrenmek, gerçekten dalmaya zaman ayırarak, yeni başlayanlar için tekrar program yapma şansı veriyor. Bu yeni bakış açısı size eski bir dile taşıyabilecek teknikleri öğretebilir. Ruby on Rails'in ASP.NET MVC üzerindeki etkisini veya Java Hibernate'in C # 'ya nasıl taşındığını (.NET geliştirmesini etkileyen sayısız diğer çerçeveyle birlikte) düşünün. Farklı dillere maruz kalmak size sorunları çözmenin yeni yollarını öğretebilir.

Doğru iş için doğru alet Bahsettiğiniz dillerin tümü, OO / Prosedür melezleridir (veya sadece C durumunda). Elinizi bir veya iki fonksiyonel dilde deneyin. Özyinelemeyi kullanarak Erlang'da faktoringi uygulamayı deneyin ve 20000'de çenenizi yere vurmasını izleyin! 5 saniye içinde geri döner (sitede yığın taşması olmaz). Ardından, sayıları ezmek ve protokolleri daha az kodla ve daha az zamanda ve RMI veya SOAP üzerinden konuşurken bir JVM örneği almak için gereken süreden daha az zamanda ayrıştırmak için uygulamanızı ölçeklendirme gücüne bakın. Belirli sorunları çözmeyi hedefleyen diğer dilleri / çerçeveleri öğrenmek size daha fazla araç sağlayacaktır.

Yeni insanlarla tanışın / ağınızı genişletin Yeni bir dile dalmak sizi yeni bir topluluğa tanıtır. Yeni insanlarla tanışmak kariyeriniz için ve kişisel olarak iyi bir şeydir.

Yeni fırsatlar Yeni bir dil bilmek, bu işe yeni başladığınızda bu işe girme şansınızı artırabilir. "Adamım bu işi Ruby'yi bilsem mükemmel olurdu." Ayrıca, yolları değiştirmeye karar verdiğiniz dilin tadını çıkarabilirsiniz.

Taze tutun Günün birinde aynı günle çalışmak yorucu olur. Farklı bir dil kullanmak size günlük eziyetten bir mola verebilir ve ertesi gün yenilenmeye gelmenize izin verebilir.

Çünkü orada. İstediğiniz için yeni bir dil öğrenin.


3
+1 Javascript işlevsel olabilir, ancak kesinlikle OP'ye benziyor, belki de araç kutusundan birkaç paradigma eksik. İşlevsel dillerle ilgili daha fazla deneyim, mevcut dilleri hakkında daha ayrıntılı bilgi verecektir, örneğin C ++ şablonlarıyla
jk.

Taze tutmak için +1, gerçekten farklı bir şey üzerinde çalışmak iyi hissettiriyor
Mona

Tail-call optimizasyonlarının bir dilin (saf) işlevsel olup olmadığı ile ilgisi olmadığını, .NET 64-bit çalışma zamanı altında çalıştırılmak üzere derlenmiş zorunlu dillerin ücretsiz olarak kuyruk arama optimizasyonuna sahip olduğunu belirtmek isterim. .
Blindy

1
LOL, evet bu Erlang'ı saf bir işlevsel dil yapan şey değil, bakış açısında tamamen bir değişiklik. Zorunlu dillerde, en önemsiz vakalar hariç herkes için özyinelemeden kaçınmamız teşvik edilir ve İşlevsel diller özyinelemesi bir yaşam tarzıdır. İf / else veya switch / case ifadelerinin aksine desen eşleşmesi de oldukça iyi.
Michael Brown

2
Özyinelemeyi kullanarak Erlang'da faktoringi uygulamayı deneyin ve 20000'de çenenizi yere vurmasını izleyin! 5 saniye içinde geri döner (sitede yığın taşması olmaz). Bu şimdiye kadar gördüğüm fonksiyonel bir dili öğrenmek için en güçlü argümanlardan biri. Bu kadar verimli olabileceğini hiç düşünmedim.
Olegs Jeremejevs

37

Kelimelerle düşünüyoruz. Kullandığımız dil, çalışma şeklimizi etkiler. Pirahã dili hakkında ilginç bir durum var - o dili konuşan insanlar, görünüşte "basit" veya "sezgisel" bir şey olarak işleyemezler çünkü getirilen dilin "belirli miktarlar" (hatta "tek değil" için bir sözcüğü yoktur. "ve" birçok ").

Programlama dilleri ile aynı. Yeni bir programlama dili, programlamanın bazı yönlerine ilişkin fikrinizi "açabilir".

Mevcut programlama geçmişinize bakıldığında, Erlang veya Scala gibi bazı fonksiyonel dilleri öğrenmenizi öneriyorum. Son olarak, Clojure de çok sağlam bir dildir.

Önce evde biraz daha fazla hissetmek istiyorsanız, Python veya Ruby gibi güçlü bir betik dili deneyin.


22
+1. “Programlama hakkındaki düşüncelerinizi etkilemeyen bir dil bilmeye değer değil.” - Alan Perlis
ruakh

2
“Kelimelerle düşünüyoruz” sözünü, kelimeler olmadan herhangi birinin (veya herhangi bir şeyin) düşünebilme ihtimalini reddettiği için reddediyorum. Ama sözler vardır kavramları etiketleme (ve bu yüzden onları ayırt yardımcı) için son derece yararlı. Biz çoğunlukla verimli olduğu için bizim daha yüksek düşünme (den çok tutulumu) kelimeleri yok. Bu daha eşit bir ifadedir, ancak gerçeğe daha yakın olduğunu düşünüyorum. Tuhaf, kelimelerin kelimelerini kullanmadan reddedemem…
Donal Fellows

@DonalFellows: Kelimelerle anlaşılamayan bazı "zihinsel süreçlerimiz" olduğunu düşünüyorum. Ama ben bu "düşünceleri" demiyorum, ama "hissetmek", "refleksler", "sezgiler" vb. Bana göre bir dili olmayan bir şey yaşayabilir, işleyebilir, tepki verebilir, hissedebilir ... ama düşünemez. Ancak bu, sezgilere dayanan, gerçek kanıtlara dayanmayan bir inançtır. Ve ayrıca biraz konu dışı, gerçekten :)
egarcia

Kesinlikle katılıyorum, dilleri öğrenmek onlar sadece yeni serin programlama dili oldukları için hiçbir anlam ifade etmiyor. Çok farklı olanlara sadık kalmalı ve çoğunu örtmemeye çalışmalısın. Bir şeyde iyi olmak, çok fazla zaman alacaktır (muhtemelen 10+ yıl), müzik aleti çalması, yemek yapması veya programlaması önemli değildir.
Bay Smith,

2
@evilcandybag: Ne tesadüf ki, ben aslında edebilirsiniz : bir kaynak göstermek sciencemag.org/content/306/5695/496 , sciencemag.org/content/suppl/2004/10/15/1094492.DC1/... (PDF).
Şubat'ta

26

Sadece yeni diller öğrenmek istemezsiniz, zaten bildiklerinizden farklı diller öğrenmek istersiniz. Eğer Java öğrenimini öğreniyorsanız, C # sizi gerçekten zorlamayacak, oldukça benzerdir. İdeal olarak, bildiklerinizden çok farklı bir dil seçmelisiniz. Java, JavaScript ve Objective-C biliyorsanız, çok farklı bir şey istersiniz

Gibi:

Ruby zayıf yazılmış bir OO Dili

Prolog Bir mantık programlama dili çok farklı

Erlang eşzamanlılık ve hata toleransı çok iyi yapıldı

Şema Git SICP'i oku ve aydınlanmaya ulaş

Haskell Eğer derlerse dünyanın en güçlü tip sistemlerinden biri, muhtemelen işe yarayacak, ayrıca sizi her türlü garip hatalardan ve çok daha fazlasını yapmanıza engelleyecektir.

Ya da sadece yedi hafta içinde Seven Languages'ı seçin; bu, başlığın ne yapacağını söyleyecektir.


2
1! Şu anda yaptığım bir alıştırma aynı algoritmayı (birleştirme türünü) farklı dillerde uygulamaktır: bu bana aynı hesaplamayı ifade etmenin kaç yolu olduğu konusunda bir fikir veriyor. Zaten çalışan C, C ++, Pascal, Java, Scala ve Haskell sürümlerine sahibim. Python, Ruby, Modula2, Scheme yolda. Farklı programlama dillerine bakarak çok şey öğrenebileceğinizi biliyorum! Ve bir şeyi bir dilde yaparak başka bir dilde daha iyi bir şekilde nasıl uygulanacağı hakkında birçok fikir edinebilirim.
Giorgio,

3
Haskell'i nasıl tarif ettiğin dışında bunu seviyorum . Derleyen yanlış kod yazabilirsiniz. (Tip-doğruluk, genel doğruluk için yegane gereksinim değildir.) Haskell'i öğrenmenin nedeni, matematiğe noter olarak çok yakın olması ve tembel bir değerlendirme modeline sahip olmasıdır; Bu, çoğu programcının programlamanın neyle ilgili olduğu hakkındaki fikirlerini sarsmalıdır.
Donal Fellows,

Bence Prolog bir deneyelim. İlk öğrendiğimde şaşırdım. Sadece birkaç karakter yazarak işleri nasıl yapabilirsiniz?
kullanıcı

3
@DonalFellows benim deneyimlerime göre eğer Haskell'de doğru türleri alırsanız, programın geri kalanı kendini yazma eğilimindedir.
Şubat'ta tobodavies

1
"Ruby zayıf yazılmış bir OO Dili": Ruby gerçekten zayıf yazılmış mı yoksa dinamik olarak yazılmış mı?
Giorgio

15

Sorunuz öyle bir sorudur ki, şu soruyu sormam için bana yalvarır:

Mesleğe göre programcıysanız, neden dünyada mesleki deneyiminize eklemek için yeni bir şeyler öğrenmek istemezsiniz?

Sorunuz bana bir zamanlar sahip olduğum bir öğrencinin tutumu gibi geliyor. Y2K'dan bir veya iki yıl önce, o sırada ders verdiğim üniversitedeki Kariyer Hizmetleri Müdürü'nün isteği üzerine bir Cobol dersi veriyordum (seçmeli olarak). Cobol programcıları için iş fırsatlarına yaklaşan pek çok firması vardı ki, öğrencilere becerilerini öğrenme ve beceri setlerine ekleme fırsatı vermeyerek öğrencilerimize bir kötülük yapacağımızı düşünüyordu.

Mezun olmak için sınıfı son seçmeli ders olarak alan bir öğrencim vardı . Aynı zamanda bir C Programcısı olarak çalışıyordu. Cobol dersini aldı çünkü başka seçeneği yoktu ve derecesi istedi. Böylece omzunda bir çip ile sınıfa geldi.

Ben zaten C'yi tanıyorum ve profesyonel olarak kullanıyorum, bu yüzden neden dünyada neden birisinin Cobol'u öğrenmek isteyeceğini ve hatta öğrenmek isteyeceğini bilmiyorum.

Bu yüzden ona, her girdi kaydı için belirli bir formatı olan bir dosyadan veri okumak için bir program yazma göreviyle meydan okudum (yani, her alanın bir satırda kaç karakter kullandığı, hangi alanın birinci, ikinci, üçüncü, vb. .)

Programını yaptığı C'ye yazacak ve programını bana gösterdi. Aynı zamanda ona programın Cobol versiyonunu gösterdim.

Sonra ona bir eğri topu fırlattım:

Son kullanıcının başka bir yerden veri aldığını varsayalım. Her kayıttaki aynı alanlardır, ancak alan başına sıra ve karakter sayısı farklıdır. Programında, yeni veri biçimiyle çalışmasını sağlamak için neleri değiştirmeniz gerektiğini bana gösterin.

Yeni veri formatıyla çalışan programın yeni bir versiyonunu yapmak bir gün sürdü. En az 20 veya 30 satır kod değiştirmeyi ve çeşitli işlev ve modülleri değiştirmeyi içeriyordu.

Sonra ona Cobol programımda yapmam gereken değişiklikleri gösterdim. Resim maddesini yeni veri formatını yansıtacak şekilde değiştirdim.

Bu alıştırmanın dersini tamamen anladığından emin değilim, ama en azından dönemin geri kalanından şikayet etmeyi bıraktı.

Öyleyse - sorunuzun cevabında: Yeni diller öğrenmelisiniz, çünkü ÖĞRENMEK istersiniz. Ve öğrenmek istemiyorsan - sana daha fazla güç ... (Seni bu tavırla işe alacağımdan emin değilim)


6
Niyetleriniz iyi olsa da, eğer o öğrenciysem, uygulamanızın kolayca değiştirilmesinin tek sebebinin, nihai ihtiyaçların değiştiğini bildiğinizden kaynaklandığını düşünürdüm. Program aynı bilgiyle C dilinde yazılmışsa, burada da minimum değişiklik yapılması gerekecektir.
hspain,

Benzer bir tutuma sahip bir iş arkadaşım vardı: "C ve PHP bana para kazandırıyor. Neden başka bir dil öğrenmek için zamanımı harcayayım?" Artık orada çalışmıyor.
greyfade,

3
tüm gereksinimler er ya da geç değişir! Bu tür bir nokta.
Zachary K,

@hspain - Aslında alıştırmanın asıl amacı, Cobol'un G / Ç spesifikasyonlarını, sizin yazdığınız ve sipariş ettiğiniz şekilde temel alarak gerçekleşen bir şey yerine programın birinci dereceden bir parçası olarak görmesidir. C'deki G / Ç ifadeleri Ve Zachary K'nin yorumunu tekrarlamak için gerçek şu ki şartlar değişiyor. - Evet, C'deki bir programı G / Ç gereklilikleri değiştiğinde daha az kırılgan olacak şekilde yapılandırabilirsiniz, ancak bu program hakkında bir C programı yazarken yaptığınızdan tamamen farklı bir şekilde düşünmeyi içerir.
Zeke Hansell

Aslında Cobol hakkında bunu bilmiyordum. Bir gün gidip bir göz
atmam

12

Yeni bir dil öğrenmenin zaman içinde bir yatırıma değmesinin birkaç nedeni olabilir:

  1. Birinin araç kutusunun boyutunu arttırın - yeni bir dil öğrenmek teknik sorunların çözümü için ek yollar sağlayabilir. Yeni araçların olasılığı, belirli problemleri çözmek için daha önce bilinen araçlardan / dillerden daha iyi bir dil / platform seçimi sağlayabilir. Basit bir örnek, sadece C'yi bilen bir programcının örneği olabilir. Bir betik dilini öğrenmek, konuşlandırma, çevre kurma, vb. Anlamında kendisi için başka olasılıklar açar.
  2. Yeni bir platforma erişmek - mükemmel bir örnek Amaç C olabilir - eğer biri iOS için geliştirmek isterse, bu dili öğrenmek neredeyse zorunludur.
  3. Yeni paradigmalar öğrenin - bazı dillerin daha yeni paradigmalara daha iyi erişimi olabilir. Örnek olarak C kullanarak, standart ANSI C'de web servisleri geliştirmek zor olabilir. Ancak, .NET, Java, PHP veya diğer yeni dillerde geliştirmeyi öğrenmek web servislerinin geliştirilmesini hızlandırabilir.

Yeni dilleri öğrenmek, daha önce de belirtildiği gibi "hızlı ve kirli" çözümlerde anında fayda sağlayabilir. Bununla birlikte, bu acil çözümler, bir programcının araştırıp yeni dille ilgili mimariyi daha iyi öğrenmesi için daha derine inmesine neden olabilir. Biri bu hızlı öğrenme alıştırmalarını, yeni bir dilin ek eğitim zamanına değip değmeyeceğini araştırmaya yatırım olarak görebilir.


11

Bir kelime: Pazarlanabilirlik .

İstihdam potansiyelinizi, yeni şeyler adapte etme ve öğrenme yeteneğine sahip olduğunuzu gösterince açarsınız. Elbette, uzmanlaştığınız bir dili kullanarak uygulamalar yazmaya devam edebilirsiniz, ancak en çok tercih ettiğiniz dilin çalışmakta olduğunuz endüstri için alakasız hale geldiğini öğrendiğinizde ne olur. Kendi web hizmetlerimizi C veya C ++ dilinde sıfırdan yazmak için, günümüzde bizim için tüm temel "webbiness" 'i yapan araçları kullanıyoruz (Think Rails, vb.).

Mesele şu ki, bir TV dizisi yapan aktörler gibi bitiyorsunuz ve daha sonra başka bir şeye kolayca gidemiyorsunuz çünkü sonsuza dek orijinal karakterleri olarak görülüyorlar. “Yeryüzünde kim Kaptan Kirk'ün Indiana Jones olmasını ister? !!”. Aynı şey sadece bir ürünü kullanan programcılar için de geçerlidir. Elbette, başka hiç kimsenin bilmediği bir şey bileceksiniz ama bu size C # ile çalışmaya devam edemeyen bir Fortran olarak kutlanmış gibi davrandığınızda size yardımcı olmayacak.

İşleri kolayca taşıyabilmek ve seçeneklerinizi açık tutmak istiyorsanız, deneyiminizi genişletmeniz gerekir. Birçok farklı projede birçok farklı dilde ve tercihen en az 2 veya daha fazla platformda çalışın ve bugün olduğunuzdan daha fazlası için pazarlanmaya devam edin.

Tabii ki, yeni bir dil öğrenmek için bazen bunun cehennemi için bile birçok neden var. Zihninizi diğer olasılıklara açar, böylece patronunuz size gelip "bir şey yapabilir miyiz" dediğinde, size uygun araç seçenekleriyle Evet diyebilirsiniz.


8

Kariyerinizin bu noktasında, sizi daha iyi bir programcı yapacaklarını düşünüyorsanız yeni diller öğrenmelisiniz.

Listelenen dillerin çoğu (Java / C / C ++ / Javascript / Objective-C) geleneksel OO / zorunludur. Başka bir OO / zorunlu dil öğrenmek, muhtemelen bu tür bir programlama hakkında size daha fazla bilgi vermeyecektir. Belirli bir ilginiz yoksa, spec'ta ayın lezzetini öğrenmenin bir anlamı yok.

Ayrıca, büyüklük sırasındaki verimlilik artışlarına dair talepler konusunda şüpheci olmaya meyilliyim. Ancak, zaman zaman tanınmış yüksek verimlilikli dili kontrol etmek isteyip istemediğinizi görmek faydalı olabilir.

Yeni bir dil öğrenmenin en iyi nedeni, genel uygulanabilirlik becerilerini öğrenmektir. Bunun için, bir yandan derin bir dalışa, bir yandan da işlevsel bir dile (Haskell veya Lisps'tan biri), diğer yandan da montaj kodu ve sistem mimarisi (x86 veya ARM) öneririm.

İşlevsel programlama beyninizi kırar ve zihninizi geliştirir, makine mimarisini öğrenmek hata ayıklama ve optimizasyon yeteneklerinizi geliştirir, hatta başka bir montaj satırı yazmasanız bile.


6

Her birimiz ne üzerinde çalışmak istediğimize karar verir ...

  1. öğreniyorsun çünkü istiyorsun
  2. öğreniyorsun çünkü istediğin iş için ihtiyacın var

Eğer PHP'yi öğrenmek istemiyorsanız, kimse sizi yapmaz ve PHP'yi nasıl heceleyeceğinizi bile bilmeden programlayabileceğiniz bir sürü alan vardır.

Sıcak alanların nerede bulunduğunu ve bu teknolojilere nasıl atladığını görmek için birçok insan iş piyasasına bakıyor. Pek çok insan bir dili öğrenip buna bağlı kalıyor ve 20 yıl sonra eski bakım mühendisleri oluyorlar. Ve sonra bu iki aşırı uç arasında bir yerde olan birçok insan var.

Sonunda, her şey ne olmak istediğinle ilgili.


Açıklamanızda, biraz fazla siyah beyaz geliyor. "Teknoloji hazneleri" ve eski bakım mühendisleri, çoğu arasında aralarında oturan iki aşırı IMHO'dur. Ayrıca, bazı "teknoloji hazneleri" aslında herhangi bir teknolojiyi düzgün bir şekilde öğrenmek için (bu, herhangi bir tek teknolojiye yatırım yapmak istediklerinden daha fazla zaman alabilecekler) en son parlak şeyler için çok çılgıncadır, bu nedenle asla sağlam, uzun vadeli çözümler üretmeyebilirler. sorunlara.
Péter Török,

1
@ PéterTörök: Cevabımı düzenledi. Ölçeğe işaret ediyordum ama hecelemem için çok tembeldi. Haklısın, bu sürekli bir spektrumdur.
DXM

5

Bildiğim en iyi argüman, bir sorunun kaç farklı yolla çözülebileceği veya bir mantığın ifade edilebileceği konusundaki bakış açınızı genişlettiğidir. Java'yı ve C ++ 'ı iyi bilmek, hem yerel hem de VM alemlerine iyi bir bakış açısı sağlar, ancak keşfedilecek çok daha fazla "serbestlik derecesi" vardır.

C ++ 'ta, Java'da 5 yıllık bir deneyimim var. Öğrendiğim ve geride bıraktığım birçok dil var (PHP, Pascal, diğerleri arasında birçok farklı işlemci için derleme) ve kesinlikle kullanmadığım bile bir problem hakkında ne düşündüğümde önemli bir iz bıraktığını söyleyebilirim. . Ayrıca: Java'ya bağlı kalmak isteseniz bile, belirli bir proje için, destekçilerine iyi karşılamalar sunmanın alternatifini bilmek zorundasınız.

Yine de, Python'u bu yıl öğrendim ve bazı şeylerin ne kadar zarif bir şekilde yapılabileceğinden memnun oldum. O kadar ki yazdığım bir avuç REST sunucusunu Java'dan Python'a dönüştürmeye karar verdim. Kodların korunmasındaki avantajlar oldukça önemliydi. Tabii ki, bazı şeyleri yapmak için Python'u seçeceğim için değil, aynı zamanda C ++ & Java'da kodlama yaparken benzer tasarım ilkelerini benimseyebileceğim için de bir şeyler yapma yolunda bir iz bıraktı.

Bu, sadece onun uğruna, her zaman birçok farklı dil öğrenmek gerektiğini düşünmüyorum. Çok fazla zaman harcar ve bildiğiniz diğer insanlarla bir arada yaşamaları için aklınızda bulundurmanız gereken "binalar" da zaman ve emek harcar. Bir dili yalnızca yeterli olgunluğa, iyi bir geliştirici tabanına sahip olduğunda ve öğrendiğim veya öğrenmeyi planladığım diğerlerinden önemli ölçüde farklı sonuçlar çıkardığında öğrenmeye karar veririm. Örneğin Python'u öğrenmeye karar verdiğimde, Ruby ve Perl'i de göz önünde bulundurdum ve daha sonra onları atmıştım - en azından yakın gelecekte.


5

İnsanlar yeni diller öğreniyor ...

  • bilgilerini genişletmek. Eğer daha fazlasını biliyorsan, kendini daha iyi hissediyorsun ve kendine daha çok güveniyorsun.
    Güven = Harika Kod!
  • daha büyük bir araç kutusu var. Diyelim ki bir uygulama yapmak zorundasın. Yalnızca Java'yı biliyorsanız, programı Java'da yapacaksınız. Fakat Java, Python, Scheme ve Lisp'i biliyorsanız, iş için en iyi aracı seçme şansınız.
  • bir meslek edin. Yüzleş. Daha fazla dil biliyorsanız, daha fazla iş fırsatına sahipsiniz. Bu oldukça kendini açıklayıcı.
  • daha iyi bir çok yönlü programcı olmak. Perl'in sözdizimini biliyorsanız, biraz çılgına dönebileceğini bilirsiniz. Perl'de uzun programlar yazarken, temel olarak en iyi uygulamaları takip etmek zorundasınız, yoksa mutlu bir kampçı olmayacaksınız. Perl'in en iyi uygulamalarını bildiğinizden, bu daha iyi PHP kodu yazmanıza yardımcı olabilir (bir şekilde veya başka bir şekilde).

Gördüğünüz gibi yeni bir dil öğrenmek için birçok neden var. Sana tavsiyem (ve bence iyi olduğunu düşündüğüm tek alıntı):

Sık sık kod yazın; Kodu iyi yaz; Kod yaz, PHP, Java, Python, Lisp, Perl, C, C ++, C #, Visual Basic, Ruby ...


1
@Nupul: Ya da en azından teklifin böyle gittiğini düşünüyorum ...
Dinamik

5

Yayınlanan cevapların çoğuna katılıyorum. Bunları eklemek için, 2011 Yığın Taşması Kullanıcı Anketi tarafından alınan istatistikleri inceleyin. Bilinen dil sayısı ile kazanılan para arasında çok yüksek bir korelasyon vardı. Doğrudan birbirlerine bağlı olmayabilirler, ancak düşünülmesi gereken bir şeydir.

Daha fazla dil öğrenmek isteyen insanlar daha fazla para kazanma eğilimindedir.

http://blog.stackoverflow.com/2012/02/survey-results/


4

Alfred North Whitehead "denilen büyük bir deneme yazan İyi Notasyon Önemi "

Bilimin gelişimi için mütevazı görünümlü bir sembolün ne kadar önemli olabileceğini not etmek ilginçtir. Bir fikrin, genellikle çok ince bir fikrin empatik sunumuna dayanabilir ve varlığı, bu fikrin, içinde bulunduğu tüm karmaşık fikir trenleriyle ilişkisini göstermeyi kolaylaştırabilir.

Bir programlama dili, bir gösterim şeklidir. C'yi OO kodlayabilirim; Aslında Stroustrup, C ++ ile başladı - bir dizi C ön derleyici makrosu olarak. Ancak, OO kodunu Java, C ++ veya C # dilinde yazmak çok daha kolaydır ve daha hızlıdır, çünkü OO'yu daha kolay destekleyen dil ilkelerine sahiptirler.

Şimdiye kadar verilen yeni dilleri öğrenmenin tüm nedenleri geçerli ama yeni bir dil öğrenmenin en iyi nedeni, yeni bir yazının, yeni problemleri çözmenize yardımcı olabilecek yeni bir şekilde düşünmenizi sağlayabileceğidir.


2

Yukarıdaki cevapların çoğu veya tamamı mesleğe aittir. Programlama. Programlayıcı olmadan önce biz insan olduğumuzu hatırlatmak istiyorum.

İyi bir sebep değil yeni bir programlama dili öğrenme, senin durumunda, kendi kendine dinlensin veya programlama yanında başka şeyler yapmaktır.

Tecrübelerime göre, tarımda çalışmak ve ağaçla çalışmak, programlama konusunda çok düşündüm - daha sonra yeni bir dil öğrenmek. yani iyi bir programcı olmak için önce iyi bir insan olmalısınız. Hayatta fazla bir deneyime sahip değilseniz, programlama dışında, programlama konusundaki fikriniz tamamen yanlış olabilir - bir uzman olsanız bile.

Programlamadaki birçok kavram doğrudan günlük yaşamdan gelmektedir: basitlik, bakım kolaylığı, pratik, kullanışlı, hızlı - ve bazen yavaş , modülerlik; örneğin, bir marangoz tarafından kullanılan kavramlardır.

İster inanın ister inanmayın: şahsen portakal toplama için uzun bir tatil yaparak kavramları programlama hakkında çok şey öğrendim. Ondan öğrendiğim ana kavram basitlikti. Bir inşaatçı olarak çalışmaktan başka bir kavram öğrendim: üssü mümkün olduğu kadar iyi yapın - duvarların dik durmasını istiyorsanız.

Son olarak, sorunuzun cevabı şöyle olabilir: tatile çıkmak, tekvando sınıfına katılmak veya bahçeye bakmak - o zaman sorunuz artık sizi rahatsız etmiyor olabilir.


Sizinle hemfikir olmama rağmen, programlama ile ilgili tüm bu iyi fikirleri diğer aktiviteler yaparken yaptıktan sonra, bu fikirlerin uygulandığı bir programlama dili öğrenmek istediğimi de ekleyeceğim. Bu yüzden IMO iki yönden (programlama ve yeni programlama dillerini öğrenmekten bir mola alarak) birbirini dışlamaz (içermemelidir).
Giorgio

Programlama ve yeni programlama dillerinin öğrenilmesinden bir mola vermenin birbirlerini dışlamaması (dışlamaması) doğrudur. Ancak içinde yaşadığımız çok hızlı dünyada, dinlenmenin hareketten sonra daha üretken olabileceğini hatırlamak önemlidir. Bir kahve molası - hatta 1 yıl sonu olabilir.
Shian

-2

Yeni bir programlama dili öğrenmenin değeri, kabaca, zaten bildiğiniz programlama dili sayısının karşılığıdır.

Çünkü sınırlı sayıda paradigma vardır ve yeni bir dil öğrenmek sizi en az bir ya da iki kişiyle tanıştırarak sizi daha deneyimli ve programcı kılabilir. Bazıları programlama dünyanızı alt üst edebilir. Ancak, zaten bildiğiniz paradigmaların bulunduğu yeni bir dil öğrendiğinizde, onları zaten tanıyorsunuz ve onlara alışıyorsunuz.


-3

Birçoğunun zaten yazdığı gibi, C hakkında iyi bir çalışma bilgim var. Son zamanlarda, sonuçları kontrol etmem gereken bazı problemler üzerinde çalışıyordum; matematikseldi. Peki cevabı bulmanın en hızlı yolu nedir, öğrenilecek hızlı programlama dilini kontrol etmem için bana tekme attı.

Ve rastgele bir hassas hesap makinesi dili olan bc'nin , neredeyse tüm Unix platformlarında kullanılabilen bir yardımcı program olduğunu öğrendim .

Python, Perl veya başka bir şey düşünmedim, ama bunun sorunumu bir an önce çözdüğünü öğrendim. Faktöre (20000) arkadaşımdan birinin önerdiğini kontrol ettim ve herhangi bir çarpışma olmadan kısa sürede sonuç verdi.

Şu anda işinizi / probleminizi kolaylaştıracak yeni bir dil bilmeniz gereken belirli bir nokta için önemlidir.

Kesinlikle, eğer özgeçmişime bunu yazarsam kimsenin umurunda değil, ancak benim bakış açıma göre en sevdiğim dil olan 'C' saldırmadan önce sorunumu çözer.

Ayrıca yeni bir dil öğrenmeye ihtiyaç duyulursa, farklı problemler ve sayısız çözümle fırsat elde edersiniz.


-8

Herkes yeni bir dil oluşturabilir; fakat hiç kimse “daha ​​iyi” nin nadiren “evlat edinme maliyetinin aslında haklı olduğu kadar” daha iyi olduğunu anlamıyor gibi görünmektedir. Sonuç, yüzlerce farklı dildir; burada herkesin tüm kaynak kodunu anlamalarının imkansız olduğu ve programcıların dil / çerçeve / kütüphane farklılıkları nedeniyle verimsiz oldukları zamanlarının yaklaşık dörtte birini boşa harcaması gereken yerlerdir.

İdeal bir dünyada, bir düşük seviye programlama dili (örn. C), bir yüksek seviye "güvenli" programlama dili (örn. Java) ve bir komut dosyası dili olacaktır. Ayrıca, standardizasyonun erdemlerini ve "karmaşasının" maliyetini anlamayan ve bir bütün olarak bilişim sektörünü sürekli yeniden eğiten insanlar tarafından yaratılan "Babil'in Programlama Dili Kulesini" yok etmek için büyük bir kızak çekiç olacaktır.

'Makro ekonomik' bir anlamda, yeni bir programlama dilini hobi olarak öğrenmede yanlış bir şey yoktur, ancak bu yeni programlama dilini bir şey için kullanmak sizi sorununun bir parçası yapar.


4
Oldukça pratik bir ideal gibi geliyor. Bu standart dillere kim karar verir ve yeni bir dilin değişmeye değer olduğuna nasıl karar verirsiniz? Kimse yeni bir şeyler denemeye istekli olmadığı için berbat bir dilde kalma riskine ne demeli? Bunu 10 yıl önce yaptığımızı düşünün - Herkes C ++ ve Java (veya belki VB) kullanıyor!
Brendan Long,

3
"İdeal dünya" konseptiniz şüpheli bir şekilde On Dokuz Yüz Seksen Dört'e benzer . Newspeak'inizde, "işlevsel programlama" ve "türden çıkarım" ve "birinci sınıf polimorfizm" ve "multimetodlar" gibi devrimci fikirler bile düşünülemezdi, çünkü onları ifade etmenin bir yolu yoktu. Kuşkusuz, Orwell balyozla ilgili fikrinizi hiç düşünmemiş gibi görünüyor, fakat eğer öyleyse, onun yolunu bulacağına eminim.
ruakh

2
Yukarıdaki noktalara ek olarak, “cevabınızın” çok az kısmı asıl soru ile ilgilidir. Downvote.
user16764

3
İdeal bir dünyada, Nupal'ın sorusuna sadece bir cevap olurdu. Tüm bu ek cevapların, standardizasyonun erdemlerini anlamayan kişilerce birincisinden sonra olması karışıklığa neden olur. Cevabınıza kendi zihninizde katılmakta yanlış bir şey yoktur, ancak ek bir cevap göndermek sizi sorunun bir parçası yapar.
benzado

1
Bu dillerle kısıtlamak, bahsettiğiniz sorunların hiçbirini engellemez. Değişen diller yerine değişen çerçeveler nedeniyle uygulamayı tekrar yazmak zorunda kaldım.
Fabio Ceconello
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.