Popüler olmayan dillerle gelişimdeki sorunlar (bakım gibi)


31

Ekibimde sadece clojure (lisp) ile bir uygulama geliştiriyorum. Küçük uygulama olarak başlar. Sorun değil. Ancak özelliklere sahip olması ve alanı genişletmesi nedeniyle önemli bir program haline geliyor.

Bakım ya da bir şey hakkında endişelendim. Takımımdaki hiç kimse clojure veya lisp'i bilmiyor, onlar gibi dillerle de ilgilenmiyor.

Yani popüler olmayan dillerde programlama yapmak yanlış değil mi? (kendi eğlencem için?) Daha popüler diller kullanmalı mıyım? (en azından python gibi)

Eminim takımdan ayrılırsam, - ayrılacağımı söylemiyorum. :) - kimse onu koruyamazdı. Bu program imha edilecek ve bazıları diğer dillerle birlikte geliştirilecektir.

Yine de clojure ile gelişmekten zevk alıyorum, bunun takımım için olmayabilir olabileceğini gördüm.

Bunun hakkında ne düşünüyorsun? Popüler olmayan dilleri seven birçok programcının da benzer bir konu ile ilgili olduğunu düşünüyorum.


2
Yerel olarak kalkınma için dillerin kullanımıyla ilgili yerel programlama standartlarınız yok mu?
temptar

Hayır, böyle standartlar yok. Patronuma az önce söyledim ve yorum yapılmadan kabul edildi. Patronum kararıma saygı duyup saygı duyduğunu düşünüyorum.
Hibrit

12
"Sevilmeyen" büyük sorun değil. "Desteklenmeyen" çok daha kötü. Örneğin, Lisp, VB 6.0'ın ellerini alt eder.
MSalters

1
Uygulama çok önemliyse, sizi ne yaptıklarını bilen biriyle değiştirir. Sadece şu anki takımın sınırlı olması, bu dili bilen birini bulamadıkları anlamına gelmez.
JeffO

Yanıtlar:


22

Acınızı hissediyorum, işlevsel programlamada daha fazla kodlama yapmak isterdim (Haskell çok eğlenceli görünüyor!). Sadece yüzeyi çizdiğimi hissediyorum, çünkü henüz iş bağlamında kullanmamıştım.

Yine de yapmamayı şiddetle tavsiye ediyorum . Sadece bir dilde programladığınız takdirde bunu yalnızca siz destekleyebilirsiniz. Her destek sorunuyla uğraşmak zorunda kalmazsanız (Diğer son tarihler / öncelikleriniz olsa bile) ekibinizin bildiği ve destekleyebileceği bir dilde kodlayın. Siz tatildeyken bir şeyler kırıldığında ne olur? Terfi etmek istersen ne olur?

Yanınıza en az bir ekip üyesi daha almanızı tavsiye ederim. Onlara bazı harika dil özelliklerini gösterin. Gemideki iki kişiyle çalışılabilir hale gelir ve tüm desteğe sahip olmayacaksınız.


8
Katılmıyorum Farklı bir dil, iş için doğru araçsa, onu kullanın. Modern yazılım geliştirmedeki rastlantısal karmaşıklığın çoğu, programcıların tüm uygulamalarını bir dile sığdırmaya zorlamalarından gelir. Diliniz zayıf eşzamanlılık yapıyorsa, örneğin, iletiyi iletmek için başka bir dil kullanmak oldukça uygun olabilir.
19

@quanticle OP “Popüler olmayan dillerde programlama yapmak yanlış değil mi? (kendi eğlencem için mi?”). Eşzamanlılık gibi başka bir dili kullanmak için güçlü bir durum varsa, o zaman destek sorunlarına değeceğine katılıyorum.
Tom Squires

1
@quanticle: Bunun tersi doğrudur: Çok fazla dil (yani birden fazla) yedeklilik, yinelenen çabalar ve tekerleği yeniden icat etmeye gerek yok.
ThomasX

Doğru, destek kesinlikle önemlidir. Başka bir ekip üyesine binmek için önerinizi çok seviyorum. Böyle bir şeyi derinden düşüneceğim.
Hybrid

17

Eminim takımdan ayrılırsam, - ayrılacağımı söylemiyorum. :) - kimse onu koruyamazdı.

Muhtemelen Yanlış.

Programın değeri varsa ve yönetim değeri görürse, Clojure öğrenen ve sürdüren birini görevlendirir.

Her zaman olur.

Bu program imha edilecek ve bazıları diğer dillerle birlikte geliştirilecektir.

Herzaman doğru. Peki neden endişeleniyorsun?

Tüm programlar sonunda değiştirilmelidir.


Clojure, çalışma arkadaşlarından hiçbiri ana dilde kaynağın (muhtemelen çirkin) çevirisini almak istese bile Clojure herhangi bir JVM, CLR veya javascript üzerinde çalıştığından beri. Eski durumlarda bytecode / msil'e yansıtarak, ikincisinde doğrudan yayılan jleri yakalayarak.
Dan Neely

2
@DanNeely - Geçerli bir bakım yolunun Clojure'i IL (IL) 'de (çok havalı) bir homebrew projesiyle derleyip bu kodu C #' ya dönüştürdüğünü mü düşünüyorsunuz? Bunun birinden dili öğrenmesini istemekten daha kolay olduğuna ikna olmadım.

@ TheMouthofaCow Özellikle daha büyük bir uygulama için Clojure öğrenmenin daha kolay olacağını düşünüyorum; ancak büyük çekiç yaklaşımı inatçı tek dilli programcıların tam bir yeniden yazma gerektirmeden değişiklik yapmalarına izin verecektir. Sonunda yansıma kırıntısını gidermek için yeniden yapılanma muhtemelen bir fiili yeniden yazma ile sonuçlanacaktır; ancak ilk yeni özelliği eklemeden önce hepsinin yapılmasını istemek yerine maliyeti bir takım değişiklikler üzerine dağıtın.
Dan Neely,

Teşekkür ederim. Aklımda çok destekleyici. Bu durumdan bir şekilde kurtulduğumda, böyle iyimser düşünceleri de aklımda tutabiliyordum.
Hybrid

1
Tüm programlar sonunda değiştirilmelidir. ” Oh, bu doğru mu? Disk depolaması çok pahalı olduğu zaman geri yazılan ve Y2K'yı (Y2K'yı hatırla) hatırlamak için yaması devam eden bir sürü COBOL kodu var ve hala çalışıyor). Aslında, çoğu program ya kullanımdan genç ölür ya da sonsuza dek yaşar. Bu yüzden teknoloji seçimi aslında çok önemlidir. Çünkü çocuğunuz bu programları koruyor olabilir.
Ross Patterson

10

Tam olarak halefinizin içinde bulunduğunu düşündüğünüz yerdeyim. Asenkron arama yapmak ve onu asenkron arama yapan bir programa dönüştürmek için Clojure ve Erlang'ı kullanan eski bir programa özellikler eklemekle görevliyim. Bu işe girdiğimde bildiğim tek şey Python ve Java idi.

Sana tavsiyem: iş için en iyi aracı kullan . Bu araç Clojure ise, o zaman öyle olsun. Programlama dilleri öğrenmesi zor değil. Eldeki göreve uygun bir dilde iyi yazılmış bir kod okumak her zaman dilin yapmak için tasarlanmadığı bir şeyi yapmaya çalışan koddan daha kolaydır. Halefiniz için temiz Clojure okumak, karışık Java'dan daha kolay olacaktır.


5

Yeni görevler veya bazı görevlerde “ tek başına ” bir dil benimsemek bir projede yüksek risklidir.

Eğer sistemin bu kısmı bir problem yaşarsa ya da o kısım çıkarılmalı, bunun yerine o dille ilgili becerileri öğrenmesi gereken bir programcı bulmalısınız. Her iki durumda da çok zaman kaybettiniz.

Bazı durumlarda, bu problem gelecekteki görevlerle bir ekibin becerilerini geliştirmek ve çeşitlendirmek için kullanılabilir.


Katılıyorum, klojürde gelişen avantajlardan biri ekibimi bir şekilde etkilemek olsa da. Ayrıca bunun yüksek bir risk olduğuna katılıyorum. Dikkatli olmalıyım. Teşekkür ederim.
Hibrit

4

Clojure'un şu anda küçük bir kurulu tabanı olabilir (2007'de ortaya çıktı), ancak pek popüler değil - aslında etrafta "en sıcak" yeni dil. Öğrenmekle ilgilenen başka insanlar bulamazsanız şaşırırım.

Her neyse, yeni bir dil benimsemeyi, her zaman iş için değere dayalı bir karar olmalıdır . Yöneticinizle aşağıdaki satırlar boyunca görüşebilirsiniz:

Clojure kullanmanın avantajları:

  • Kullanılan diğer dillerden daha üretken - az miktarda ve az kod satırıyla sağladığınız kullanışlı işlevsellik miktarının gösterdiği gibi
  • Halen Clojure'da yazılmış bir önemli uygulamamız (sizinki) var, bu yüzden (pahalı bir yeniden yazma yapmak yerine) sürdürmek için Clojure becerilerini geliştirmeye değer
  • Clojure kullanımı yenilikçi olarak görülecektir ve yetenekli geliştiricileri şirkete katılmak / kalmak için motive etmek için iyi bir yol olabilir.

Clojure kullanmanın dezavantajları

  • Desteklenecek bir ilave dil
  • Geliştiriciler, hızlanmak için daha fazla eğitime ve zamana ihtiyaç duyabilir

Bu kararı değerlendiren bir yöneticiysem, muhtemelen sınırlı bir deneye izin verecek kadar Clojure'den daha yüksek üretkenlik fikrini istiyorum ve kararı ekibin ne kadar iyi alacağı belli olana kadar ertelerdim. Bu durumda, muhtemelen bir avukat olmanız, iyi bir öğretmen gibi davranmanız ve diğerlerini de bu gemiye getirmenize yardımcı olmanız gerekir.


3

Endişelenme, mutlu ol.

Açıkça programın değeri var, yoksa genişletmiyorsunuzdur. Başarılı bir proje için tebrikler. Muhtemelen Clojure'u seçtiniz, çünkü bunu yapmanız zaman kazandı ve dolayısıyla işvereninize para kazandırdı. Java ile yazmış olsaydınız, programın bakımı daha da zor olurdu. Meslektaşlarınız programı satır satır daha kolay anlayabilseler bile, onu devam ettirip genişletebilecekler mi?


2

Sana daha fazla güç söyleyebilirim! Lisp, bilgisayar dillerinin büyükbabasıdır ve günümüzde hala geçerlidir; Sanırım bu kadar popüler olmadığı gerçeği, C # ve Java'nın sıcak kabarık IDE'lerine sahip olmaması ve Windows'daki ana derleyici uygulamasının sadece Cygwin (yuk!) altında çalışmasından kaynaklanıyor. Geliştirme Emacs'ta gerçekleşiyor gibi görünüyor ve sanırım Linux veya Mac ile daha iyi oynuyor.

Bu kodlama yarışması 2010 yılında bir Lisp programı tarafından kazanıldı: http://planetwars.aichallenge.org/

Günün geri kalanında, yaklaşık 100 milyon milden beri canlı olarak hata ayıklayabildiler: http://www.flownet.com/gat/jpl-lisp.html

Bakım kırmızı bayraktan kesinlikle vazgeçiyorsunuz, ancak bunu başkası için bir öğrenme fırsatı sağlayın. Biraz kabus dili (MUMPS gibi) veya biraz sıkıcı dil (TCL gibi) kullanıyorsanız, o zaman soru sorulması gerektiğini düşünüyorum. Ama bence eski gelenekleri en iyi şekilde sürdürmeye çalışan bir adam olarak düşünülmeli :)


Tcl güzel bir dil, ben sıkıcı demezdim. Tkinter'a (Python'da) bakın, bunu bilmek güzel bir araçtır.
Francesco

@Francesco - Tcl / Tk değil. Grafik araç takımı harika olabilir. Tcl'nin sıkıcı olduğunu söyledim, çünkü birkaç yıl önce sadece Tcl kullanan bir yerde bir iş görüşmesine gittim (genç programcıları alıp daha sonra bırakmalarını zorlaştırmak için onlara pazarlanamaz bir dil öğretiyorlardı) ve işi geri çeviriyorlardı. Tcl sıkıcı görünüyordu. İşlevsel olmadığını söylemiyorum (olabilir) Sadece birkaç günden fazla Tcl yazmak zorunda kalırsam kollarımı çiğneyeceğimi düşündüm. Yanındayım.

2

Çok iyi cevap var ama bir nokta eklemek istiyorum.

Benzer durumdaydım fakat farklı bir dilde. Her şeyi zor yoldan öğrenmek zorunda kaldım - rehberlik eksikliğinden dolayı deneme yanılma yöntemiyle. Bakımdan / genişletilebilirliğin rehberlik eksikliğinden dolayı etkili yaklaşımlar bilmediğinden, benim sorunum olacağına inanıyorum.

Gelecekte oluşabilecek sorunları önlemek için yöneticinizle yeterli yardım için konuşmanızı öneririm.

İyi şanslar!


2

Bazı durumlarda, Lisp gibi bir dil, farklı bir dilde çok zor olacak bir işlevi uygulamayı daha hızlı veya daha kolay hale getirebilir. Ayrıca, sorunlara bakış şeklinizi etkileyerek size ekibinizde başkalarının sahip olamayacağı bir bakış açısı sunar. Daha geniş bir yetenek yelpazesine ve neyin mümkün olduğuna dair daha geniş bir görüşe sahip olmak, onları anlayabilen ve kullanabilen bir şirket için çok değerli olabilir. Bu yetenekler için fiyat olsa da, bir standardizasyon eksikliğidir.

Birçok şirket bir ya da iki dilde standardize etmeye çalışıyor çünkü onlara daha fazla kurumsal esneklik sağlıyor: geliştiricileri bir projeden diğerine yeniden eğitmek zorunda kalmadan hareket ettirebilirler, kullandıkları diller hakkında yerleşik bir bilgi birikimine sahipler, ve yöneticiler, belirli bir proje için bir dili veya diğerini kullanmanın güçlü ve zayıf yönlerini dikkate almak zorunda değildir. Sahip olduğun tek şey bir çekiç olduğunda, her şey bir çiviye benziyor.

Belirttiğim gibi, her iki yaklaşımın da belirli yararları ve sakıncaları vardır. Sık sık olduğu gibi, doğru ya da yanlış bir yaklaşım yok. Sadece bir takım avantajlar ve dezavantajlar diğeri için alım satım yapıyorsunuz. Bir şirketin tamamen ya bir yöne ya da diğerine gitmesi gerekmez. Çoğu C ++ veya Java'da çalışmak tamamen mantıklı, ancak zaman zaman bunları denemek ve neyin işe yaradığını görmek için zaman zaman Lisp veya Python'a ayak parmağınızı sokun. Şirketinizin yaptığı gibi olabilir.

Öyleyse devam edin (ama Forth değil), mümkün olduğunca çok şey öğrenin ve yöneticilerinizin meslektaşlarınızın sahip olamayacağı anlayışına güvenebileceği Clojure uzmanı olun. Ve üzülmeyin ... örgütsel konular hakkında endişelenmek yöneticilerinizin işidir.


1

Bakımın baskın olma konusunda yüksek şansa sahip olduğunu hissetmeye başladığınızda, programınızı farklı (daha uygun) bir dilde yeniden yazmaya başlamanızı tavsiye ederim.

Kapatmayı yazmayı başardıysanız (ki, uygulamanızı oluşturduğumda ne zaman anladığımı bilmiyordunuz), o zaman daha tanıdık / uygun bir dil kullanarak yeniden yazmak sorun olmayacak. Kapatma tamamen farklı konseptler kullanır ve bu nedenle uygulamanın başka bir dile aktarılması zor olabilir. Fakat mesele şu ki, kapanışta yeni bir uygulama yazmakla eğlendiyseniz, o zaman kullandığınız kavram ve fikirleri başka bir uygun dile aktarmayı ilginç bulabilirsiniz. Farklı dilleri ve yeteneklerini karşılaştırmak eğlenceli olabilir. Bence durumunuz böyle deneyler için mükemmel.


Bunu biraz yapıyorum. Perl veya Erlang'da tek seferlik bir yardımcı program gibi görünen şeyleri yazacağım, daha sonra bir yardımcı program haline gelmesi için yeterince kullanılır, bu yüzden projenin ana dili ne olursa olsun onu yeniden yazarım (Java veya C #).
TMN

1

"Popüler olmayan" dillerde programlama yapmak kesinlikle yanlış değildir. Popüler olup olmadıklarını neden umursuyorsun? Bu konuda @quanticle ile tamamen katılıyorum. Clojure veya başka bir ana dilde olmayan sorun, çözmekte olduğunuz problem için en iyi araçsa, onu seçmelisiniz.

Bakımın neden bir sorun olacağını anlamıyorum. Birim, Entegrasyon, vb. Uygularsanız Kodunuzu test etmek ve belgelemek, işlevsel programlamaya ilgi duyan herhangi bir programcının programınızı sürdürebilmesini sağlar. IMHO, meslektaşlarınızın Clojure'i umursamadığı gerçeği, saygı duymanız gereken bir şirketin politikası dışında, onu kullanmamak için iyi bir argüman değildir.


0

Programın ayrılışınızdan sonra da devam edip etmediği benim görüşüme göre sizi ilgilendirmiyor. Patronunuzun sevdiği, benim için oldukça iyi bir şey yapmak için programlama dilini kullanabilirsiniz. Devam etmekten endişelenmek patronunun yapması gereken bir şey.


3
Devam etmesi için endişelenmek patronun işi. Ancak patronun endişelenmesi gereken sorunların farkında olduğundan emin olmak sizin işiniz. Patronla konuşmalısın.
MarkJ

Patron hiçbir şey yapmamaya karar verirse OP'nin endişelenmemesine rağmen katılıyorum.
Paul Hiemstra

0

Bir eğitim veya eğitim oturumu düzenleyin. Eğer ekip üyeleriniz profesyonel gibi davranmak istemiyorlarsa ve özellikle program daha önemli hale geliyorsa, sizin elinizde olduğundan daha fazla bilgi almak istemiyorlarsa. En kötü durumda, yönetimle konuşabilir ve bu tür bir eğitim oturumunu zorunlu kılabilirler. Bir pislik gibi görünebilirsin, ama en azından programı sürdüren tek kişi sen değilsin. Diğer seçenek ise clojure'yi bilen 2. programcının takıma eklenmesini önermektir.

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.