Programlama Dilini Sistematik Olarak Seçme [kapalı]


24

Dil seçimi için bir metodoloji arıyorum. Dillerle ilgili görüş istemiyorum. Mağazamızın şu anki dilini mevcut olanlarla karşılaştırmakla görevlendirildim. Biz bir web geliştirme mağazası btw.

CEO'm mevcut tüm web tabanlı diller hakkında tam bir bildiri olmasını ister, Ne türev oldukları (örneğin, jsp, c / c ++ 'dan olan java'dandır). Belirli bir dilin tüm önemli faktörlerini ve verilen dilin kısa yollarını içeren bir matris yaratmam gerekiyor. Dil, platformla sınırlı mı, işlevsel programlama, yordamsal işlem veya OO için mi tasarlandı veya herhangi bir programlama paradigması ile kullanılabilir mi?

Ayrıca, belirli bir dilin yetenek havuzunun boyutu ve o havuzdaki medyan maaş gibi daha az teknik bilgiye ihtiyacım var. Pazar tercihimizi nasıl görecek?

Tüm bunları anlamamıza yardımcı olacak bir danışman aramaya başladık, ancak çoğu danışmanın bir gelişim geçmişinden geldiğini gördük ve çoğu zaman cevabın " xxx en iyi dil olduğu için görünüyor" Son n yılda en çok kullandım ve beni asla hayal kırıklığına uğratmadı . Ön uç için yyy ile destekleyebilir ve zzz kütüphanesini kullanabilirsiniz "

Bu görevden çok etkilendim ve CEO'mun aradığı şey göz önüne alındığında, akademi dünyasına bakmak ve gerçek bir gelişim deneyimi olmayan bir profesörü işe almak ve bize “öğretmek” için bir eylemi en iyi şekilde hissediyorum. tüm olası diller hakkında.

Bu alıştırmayı yapmak zorunda olan başka biri var mı? Eğer varsa, süreç boyunca kullandığınız adımları ve / veya metodolojiyi paylaşabilir misiniz?


21
CEO aslında bu matrisi “$ $ {nextBigProject}! Bunun için gerçekten faydalı olabilecek bir şey inşa etmek (her ne kadar ciddiye faydalı olacağından emin olmasam da) muhtemelen çok fazla zaman alacaktır ve üzerinde devam eden bakım da olacaktır.
SinirliFormsDesigner'da

3
Bir proje için bir dil / ortam seçmek için genel bir rehberin, ilk önce projenin çözmeye çalıştığı belirli bir sorunu daha derinlemesine anlamaya çalışmak olabilir (bir dil-agnostik yolla), o zaman bu sorunu çözmede en iyi yardım , daha sonra bu araçlarla / kütüphanelerle çalışmak için hangi dilleri bilmeniz gerektiğine bakın. Bu muhtemelen size dillerin kısa bir listesini verecektir ve oradan onlarla tanıdıklarınıza, satıcı desteğine, bütçeye, vb. Dayanarak anlayabilirsiniz ...
FrustratedWithFormsDesigner

9
İlk cevap soru "biz hiç değişim gerekiyor?" Dir Mevcut dil seçiminizle hangi problemler çözülmez?
John Bode

4
Yığın Taşması, geliştiricilerin teknolojileri değerlendirmesine nasıl yardımcı olabilir? "Bu sabah önümde yaklaşık 8 çerçeve vardı, hangisini kullanacağım konusunda karar vermeye çalışıyorum ..."
gnat

7
Uygulamada dart atarsınız. Web arenada (özellikle JavaScript ve diğerleri), çeşitli güçlü yönleri, zayıf yönleri, eğilimleri ve uyumsuzlukları olan düzinelerce (yüzlerce değilse) seçenek vardır. Bunu ölüme göre analiz edebilir ya da sadece bilinçli bir tahminde bulunabilir, ileri gidebilir ve gerekirse ders ortasında bir düzeltme yapabilirsiniz.
Daniel R Hicks,

Yanıtlar:


53

@FrustratedWithFormsDesigner yukarıda belirtilenlere işaret etti, daha kör olacağım: pahalı ama işe yaramaz bir işle suçlanıyorsunuz.

CEO’nun dil seçimini destekleyecek reddedilemez, nesnel kanıtlar aradığından şüpheleniyorum. Sorun, dil tercihinin, beyaz kağıdın bile faydalı olmasına rağmen anlamlı olması için çok fazla öznel ve dışsal faktöre sahip olmasıdır.

Başka bir deyişle, eğer ideal bir dil olsaydı, herkes “nesnel” kusurlu diller yerine onu kullanırdı. Ayrıca, çalışması için gereken mühendislerin eyaleti olması gereken bir düzeyde mikro yönetim de veriyor. Erlang "nesnel olarak en iyisi" olabilir, ancak kimse bilmiyorsa, yetkinlik kazanmak için 6 ay / mühendis başlangıç ​​maliyeti ve 6 ay / mühendis daha ekleyin.

İşin olmadığından, kaybetmen konusunda endişelenmiyorum, buna rağmen. CEO’ya Fiziksel Kilise Turing Tezi hakkında bir bildiri verirdim. Daha sonra üst düzey mühendislerle bir araya gelir ve ne kullanılması gerektiğine dair titiz, nesnel olmayan fikirlerini alır ve CEO'ya ne kullanacağınızı söylerdim. Buna karşılık olarak mühendislerin yönetim kurulu toplantılarından, CFO'lardan, Muhasebe Yöntemlerinden, VP seçimlerinden vb. Uzak kalacağına söz vereceksiniz. Uzmanlığımızın bir nedeni var ve mühendislik tercihlerinde sizin alanında olduğundan daha fazla yeri yok.


6
Ha, son paragrafın umarsız coşkusunu seviyorum. CEO’ların etki alanı olduğunu söyleyebilirim, 6 aydır bahsettiğiniz sinir bozucu, bu yüzden ona söylemeniz gereken tek şey bu.
Nathan Cooper

1
“Fiziksel Kilise-Turing Tezi” Oraya gitmeyelim. Çok az sayıda programlama dili, resmi bir anlam ifade etmekte olup, Turing'in eksiksiz olması için bir ön şarttır. (Bir olmadan, bile bir hesaplama modeli değildir.)
Rhymoid

4
Sadece Lisp'i seçin ve bununla bitirin.
Eric,

1
Lisp, tabiki ClojureScript demek istiyorsun. :-)
Brian Knoblauch

1
+1. Bunun neden iyi bir yaklaşım olmadığını bir CEO’ya iletmek bir mühendis olarak sizin işiniz . Bu zor olabilir, çünkü iyi bir yaklaşım gibi görünüyor, ama gerekli.
djechlin

25

Dikkate alınması gereken bazı geniş fırça darbeleri:

Dil popülerliği

Bu gerçekten önemli olmamalı, çünkü popülerlik mutlaka verimlilik, ifade veya daha fazla önem arz eden diğer dil niteliklerinden herhangi biriyle eşit olmak zorunda değildir, ancak bu düşünce çoğu zaman diğer tüm düşünceleri aşmaktadır. Çünkü:

  1. Yazılım geliştiricilerini popüler bir dilde bulmak daha kolaydır.
  2. Popüler dilde araç ve kütüphaneler bulmak daha kolaydır.
  3. Karar vericiler dil değişimlerini anlamıyorlar, bu yüzden güvenli karar verecekler ("birçok şirket bu dili kullanıyor, bu yüzden iyi olmalı").

Problem alanına uygulanabilirlik

Herhangi bir program herhangi bir Turing tamamlanmış programlama dilinde yazılabilir, ancak bazı diller belirli sorun alanları için diğerlerinden daha uygundur. Web uygulamaları yazıyorsanız, muhtemelen buna uygun dilleri ve araçları çekeceksiniz ve büyük olasılıkla nesne yönelimli diller olacaklar.

Öte yandan, öncelikle araştırma veya matematik temelli bir yazılım yazacaksanız, muhtemelen işlevsel paradigmaları kucaklayan dillere yöneleceksiniz .

Ve elbette, aralarında her şey var. Birçok dil çoklu paradigmaları destekler ve bazı yazılım kalıpları yalnızca belirli özelliklerden veya paradigmalardan yoksun olan dillerdeki sınırlamaların üstesinden gelmek için vardır.

Etkileyicilik ve üretkenlik

Bazı diller diğerlerinden daha anlamlı. Bin satır kod kullanılarak bir dilde yazılabilecekler, yüz satır kod kullanılarak daha anlamlı bir dilde yazılabilir. Tradeoff, yüzlerce kod satırının muhtemelen daha az popüler bir dilde, daha fazla uzmanlığa sahip kişilerce yazılmış olması.

İş kolu uygulamaları yazmak için kullanılan nesne yönelimli dillerde bulunan kod satırlarının çoğu törendir. Bu tören, geliştirme zamanına ve çabalarına mal olurken, daha açık bir dilde kolayca anlaşılamayacak görünür bir yapı sağlar. Aksi takdirde, daha az uzmanlığa sahip kişilerin, kod üzerinde daha az riskle çalışmak zorunda kalacaklarından daha az uzmanlığa sahip olmasını sağlar.

Çoklu dil dönemi

Tek bir dile karar verme arzusunun yanlış bir ikilem olabileceğini iddia ederek bitireceğim. Günümüzde başvurular genellikle tek dilde değil, birçok dilde yazılmaktadır. Her dilin kendi güçlü yanları vardır ve (teoride) kullanılan görev için özel olarak tasarlanmıştır. Bazı sorun alanları (web tarayıcısı mantığı veya veritabanı erişimi gibi) belirli dilleri gerektirir.


7
Son noktaya, eğer birden fazla dil kullanmak istiyorsanız, aralarında kolay bir birlikte çalışmayı destekleyen bir platform (.Net CLR veya JVM) düşünmenin yararlı olabileceğini de ekleyeceğim.
svick

9
@ NathanCooper: Hiç bir web uygulaması yazmadığınız anlamına mı geliyorsunuz? Küçük bir tane bile mi? Veya bir mobil uygulamayı birden fazla platforma taşımak zorunda mıydınız? Veya gömülü çalıştı? Veya bir SQL veritabanından alınan veriler?
Robert Harvey

10
@ NPSF3000: Doğal olarak, büyücülük yönteminizi açıklamak için uğraşmadınız. Ben Şenanyalıları çağırırım.
Robert Harvey

9
@ NPSF3000 C #, yaptıklarınız için iyi bir seçim olsa da (Unity'yi kullanmak kesinlikle biraz gergin olsa da, sizin için çok dilli ağır kaldırma yapmak için özel olarak tasarlandığından), bir anekdotunuz bu konuyu çürütmez. Kuşkusuz, çoğu önemsiz proje, SQL ve başka bir teknolojiyi kullandıkları için çok dillidir, ancak bunun ötesinde, pek çokları farklı programlama dillerini paralel olarak kullanır veya uygulamalarını bir dile, araçlarını başka bir yere yazar. iddiayı hiç çekişmeli bulmuyorum.
Chris Hayes,

7
@ NPSF3000 Bununla ilgili sorununuz varsa, bunu söyleyin . Bizi, ne demek istediğinizi anlamaya çalışmanın bu zorluğundan geçirmeyin. Eminim Robert, "Bazı sorun alanlarının belirli dilleri gerektirdiğini kabul etmiyorum" demiştiyseniz, düzenleme yapmaktan memnuniyet duyacağından eminim. Bununla birlikte, burada birçok dilde çalışmanın "varsayılan olarak yararlı" olduğu konusunda hiçbir fikrim yok.
Chris Hayes,

5

Dil seçimi için ticari nedenler var ve bir dil seçmek için mühendislik nedenleri var ve twain her zaman uyuşmuyor. Akademik nedenlerle atmak işleri daha da kötüleştirecektir. Bir profesörün size ihtiyacınız olan şekilde yardımcı olabileceğinden şüpheliyim.

Bir dilin soyları ve özellikleri hakkındaki gerçekleri bulmak oldukça kolaydır. Muhtemelen çoğunu doldurmak için wikipedia'da bir gün geçirebilirsin. Yetenek havuzu büyüklüğü ve maaş daha zordur, çünkü çoğu insan kendini tek dilli programcılar olarak görmez. Scala gibi daha az popüler olan dilleri kullanan şirketler, dile özgü bir deneyimi olmayan iyi genel programcıları işe almayı beklemektedir. Gördüğüm bazı sunumlara bakılırsa, bu stratejinin iyi işlediği görülüyor.

Gerçekleri bilmek bile, sizi oldukça öznel bir seçenek haline getiriyor. CEO'nuz özellik başına dolar gibi bir şey gibi kaba bir metriğe kaynamasını isteyecek. Doğru bir resim elde etmek için, bazı prototipler yapmanız gerekecek, daha sonra öğrenmenin ne kadar kolay olduğu, temelleri öğrendikten sonra prototip yazmanın ne kadar hızlı olduğu, ne kadar kolay olacağını düşündüğünüz hakkında konuşacaksınız. ve bunun ne kadar geniş ölçüde uygulanabilir olduğunu, genellikle yaptığınız işe uygun olacağını düşünüyorsunuz.

Tüm dilleri kapsamaya çalışmak yerine, farklı programlama paradigmalarından ve çerçeve türlerinden temsilciler almaya ve her birine bir prototip uygulamaya koymaya çalışıyorum.

İşte arka uç kategorilerinin kaba bir listesi:

  • Microsoft. (Alt kategoriler olabilir. Onlar hakkında hiçbir şey bilmiyorum.)
  • Drupal gibi ağır OOP.
  • Python şişesi gibi hafif OOP.
  • Scala'yı kullanarak oynat / kaldır / scalatra.
  • Java kullanarak oynatın / kaldırın.
  • Yaya benzer.
  • Struts benzeri.
  • Raylar benzeri.
  • Haskell tabanlı.
  • node.js

Ön tarafta:

  • OOP tarzı JavaScript
  • İşlevsel tarzı JavaScript, Underscore ile olduğu gibi
  • Reaktif tarzı JavaScript, Bacon ile olduğu gibi
  • Google Web Araç Seti
  • Karaağaç

Her kategoriye bir veya iki gün harcamak, basit bir prototip uygulamak, sizi birkaç ay sürebilir, bundan sonra her birinin güçlü ve zayıf yönleri hakkında daha iyi bir fikriniz olur. Belki de şirketinizin kültürüne veya deneyimine dayanarak bazılarını daha hızlı bir şekilde ekarte edebilirsiniz.

Bu bir iş raporu olduğu için, hayran kaldığınız çeşitli firmaların yerine "Hangi dili kullanıyor? Birçoğu, neden sizin için mükemmel referanslar oluşturacak, belirli dil seçimleri yaptıklarına dair kendi beyaz yazılarını yazdılar.


4

Mevcut geliştirme sürecinize özgü eksiklikleri A $ olarak belirleyin ve maliyetlendirin. Başka bir geliştirme sürecine geçmenin maliyetini B $ olarak tanımlayın.

Eğer $ A, B $ 'dan az ise, durun.

Bilinen eksiklikleriniz değişim maliyetinden ağır basarsa (ve eğer büyükse!) O zaman eksiklikleri ayrıntılı olarak inceleyin ve diğerlerini daha pahalı sorunlara sokmayan dil / gelişim ortamı / gelişim süreci değişikliklerini aramaya başlayın.

Dürüst olmak gerekirse, şu anda Fortran'da web uygulamaları geliştirmeyi denemiyorsanız, kullandığınız dilin sahip olacağı tek etki boşlukları doldurmak için kullandığınız müteahhitlerin maliyetidir. Ana akış ve olgun dilimler / araçlar / geliştirme süreçleri, en sıcak, en yeni ve en seksi araçların en pahalı eğitmenler ve müteahhitlerle, ancak en az olgun çözümlerle birlikte gelmesi muhtemel sorunların çoğunu çözmüştür. Ve eğer böyle bir değişikliği garanti eden eksiklikleriniz varsa, dil seçiminizin onları tam olarak ele alması muhtemel değildir.

Bununla birlikte, kârlılık buradaki temel amaç değilse, o zaman son moda olan övgülere karşı eski moda kabul edilme biçimini hesaba katmanız gerekir. Patronunuzdan denklemin bu kısmı için kullanılacak dolar değerlerini isteyin.

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.