Ekibinizi fonksiyonel kodlama stiline nasıl tanıtırsınız?


10

Grubumdaki çoğu insanın fonksiyonel programlama hakkında çok az bilgisi olan veya hiç olmayan bir nesneye yönelik programlama geçmişinden geldiği bir durumum var. Kapaklar gibi temel bilgiler bile yok.

Onları fonksiyonel kodlama stiline tanıtmanın iyi bir yolu hakkında herhangi bir öneriniz var mı? Özel durumlarımız için fonksiyonel yolu yaparsak yaptığımız birçok kodlama kısaltılabilir.

Fonksiyonel ve kodlama paradigmaları hakkında birkaç sunum yaptım. Ne yazık ki Haskell gibi uygun bir işlevsel programlama dili kullanmıyoruz (temelde eski kod C, C ++, Java'da), bu yüzden bunlarla ne varsa yapmak zorundayız.


11
Nasıl olduğunu sormadan önce, nedenini sorun . Fonksiyonel bir tarzda nesne yönelimli bir tarzdan daha kolay çözülebilecek problemler üzerinde mi çalışıyorsunuz? OO birçok şey için gerçekten iyi çalışıyor (bu yüzden bu kadar başarılı oldu) ve diğerleri için iyi değil. Sorunuzdan, "Kodumuzu fonksiyonel tarzda yapmak istiyorum, çünkü işlevsel programlamanın havalı olduğunu düşünüyorum, bunu destekleyen bir dilimiz olmasa bile ve takım nasıl olduğunu bilmiyor yapmak için!" Bu çok kötü bir fikir. Unutmayın, doğru iş için doğru araç.
Mason Wheeler

2
@MasonWheeler: Neden işlevselliğe ihtiyacımız olduğunu biliyorum. Ayın serin diline değil. Bunun için çok yaşlı.
Fanatik23

1
Birisinin Haskell'i bildiğini varsayalım, sisteminizde çalışmasını sağlayabilir misiniz?
JeffO

4
İşlevsel programlama, ekibinizin sahip olmadığı bir sorunu çözüyor gibi görünüyor. Fonksiyonel programlama için doğal aday olmayan C, C ++ Java'nın nasıl kodlanacağını biliyorlar (kapanışları uygulamak bu dillerde sade korkunçtur).
James Anderson

Yanıtlar:


8

Luca Bolognese , gerçekten harika bir kahve örneği kullanarak fonksiyonel programlama (F # sunmak için) tanıttığı bu harika sunumu yaptı ve bana arkadaşlara ve meslektaşlara Fonksiyonel Programlamayı tanıtmamda çok yardımcı oldu.

Bence işlevsel olarak düşünmeye başlamanın mükemmel bir yolu olan Petricek'in Gerçek Dünya Fonksiyonel Programlamasına bakabilirsiniz .


Bu sunum harika ... özellikle bir vampir tarafından verildiğinden! LOL !! j / k .. çocuklar karizma var ..
hanzolo

7

İş arkadaşlarınız iş dışında kod yazıyor mu?

Şirketinizde herhangi bir FP yapmadığınız göz önüne alındığında, doğrudan iş görevlerinin dışında hiçbir şey yapmadıklarında yeni bir dil / paradigma öğrenecek birini edinmek imkansız olacaktır.

Eğer öyleyse, fonksiyonel programlama ile ilgili hoşuna gidecek ilginç projeler bulun ve gösterin. Bir değişikliği zorunlu kılacak durumda değilsiniz, bu yüzden kişisel bir seviyeye ilgi duyuyorsanız tohumları ekmeniz gerekir. Benimle bu şekilde tanıştım - benimle çalışan en iyi arkadaşım tarafından verildi.

Bunun dışında, çoğu insan küçük işleri kolaylaştırmak için şirket içi araçlar yazar. Bazılarını işlevsel bir dilde yazmaya çalışın. Kodu görmek isteyen herkes, kodun (umarım / muhtemelen) güzelliğine maruz kalacaktır ve muhtemelen bunu yaptıkları zaman size soracaktır. Bu fikri satmak için bir fırsat.

Unutmayın, yığınızda çalışacak işlevsel diller vardır (her ikisi de JVM'de çalışır). Haskell gibi "tamamen işlevsel" değil, ama uzun bir yolculuğa iyi bir başlangıç.

İşe alım üzerinde herhangi bir kontrole sahipseniz, bazı fonksiyonel deneyime sahip (veya en azından fonksiyonel programlama ile ilgilenen) kişileri işe alın.

Son olarak ... işlevsel kod yazma konusunda tutkuluysanız yanlış şirkette olabilirsiniz. Tüm şirketinizin yazılım yazma şeklini değiştirmeyeceksiniz - özellikle de para kazanıyorlarsa ve daha da özellikle kısa bir sürede.

Bu tamamen geliştiricilere satmakla ilgili ... yönetim tamamen başka bir canavar.


2

Zorunludan saf fonksiyonel programlamaya geçiş, dik bir öğrenme eğrisiyle büyük bir değişikliktir. Daha az hızlı bir geçiş denemenizi öneririm ve bu durumda birçok seçeneğiniz var. Örneğin, Python liste kavrayışlarını ve jeneratör ifadelerini destekler, Ruby kod blokları, vb. Aracılığıyla üst düzey işlevleri destekler . Java'dan bahsettiğinizden, hepinizin Java arka planı varsa ve tam işlevsel programlama desteği istiyorsanız, Scala'yı deneyebilirsiniz .


2

İşlevsel bir programcı kiralayın (veya patronu işe alın)

Sonunda, bu takımınızın geri kalanında ovalanacak.

Ayrıca, daha önce de belirtildiği gibi, çalışma saatleri dışında işlevsel bir dilde kod yazmaya teşvik etmek de zarar vermez.


2

İşlevsel programlama gerçekten vakalarınızda hayatı daha kolay hale getirecekse, böyle bir vakayı izole etmenizi ve meslektaşlarınıza hem OO hem de fonksiyonel dillerde eşdeğer uygulamaları göstermenizi öneririm.

Karmaşıklıktaki fark söylediğiniz kadar genişse, bu kendi başına konuşmalıdır.


2

Scala'dan bahsettiği için +1 faif: Bu, bu cevaba bir yorum olarak başladı ancak çok büyüdü ...

Ben işlevsel programlama hakkında bir şeyler öğrenmek istedim (C / C ++, bazı Python & paslı Java geliyor); Ocaml ve sonra Haskell ile derin ucunda dalış denedim ve sadece anlamadım. Daha sonra Scala'yı denedim ve fonksiyonel bir yaklaşım beni atlattığında tanıdık emir tarzına kolayca geri dönebileceğim rahat bir OOP / Java-ey ortamında işlevsel şeyler kullanmaya başlamama izin verdim. Bazıları dilin "çoklu aradım", "melez" doğasından şikayet edebilir, kendinizi "saf işlevselliğe" gitmek için asla uzatmaya zorlanmayacağınız anlamına gelir, ama bunun bir şey hakkında pragmatik olabileceğiniz ve sizin Gereksinim duyduğunuzda bir şekilde gerçek işlerinizi kolayca yapabilirsiniz.

Birkaç yıl (ve daha sonra Scala'da 200'den fazla Project Euler Scala çözümü) fonksiyonel ile karşılaşma Python'umu kesinlikle etkiledi (harita, filtre, azaltma, lambdalar, itertools, liste kavrayışları ve benden daha fazla geçiş fonksiyonu) Daha önce hiç düşünülmedi) ve daha az ölçüde C ++: belki STL'nin fonksiyonel tuzaklarını kullanmak için biraz daha girişimi, ama asıl etkisi TBB'nin harita / azaltma yapılarını kullanmaktan çok daha rahatım ve gerçekten değişmezlikten yararlanmak karmaşıklığı nasıl çözebilir? çok iş parçacıklı kod.

Kişisel olarak, ben olsaydım, Scala'yı Java dünyası gelişiminizin bazılarına tanıtmak için, tercihen bir şeyi muazzam bir şekilde basitleştirerek ve iddia ettiğiniz faydaları üreterek örnek olarak sunacağım. Bundan sonra ne olacağı, yeni fikirlerin "savunulması" ve değişimin yönlendirilmesi işine bağlı ... bu çok daha büyük bir sorun olabilir.


1
@ timeday Çok iyi dedi. Ben bir Java / OO milletiyim. Bir yıl önce Scala'yı aldım. FP'yi öğrenmek benim için oldukça zor oldu. Her seferinde biraz yapıyorum ve onunla oturuyorum. Hepsini bir anda elde etmeye çalışmıyorum.
chaotic3quilibrium

1

Scala'yı kullanarak kademeli bir yaklaşım önermek istiyorum. Ve Scala'nın yaratıcısının "Scala'da Programlama, 2. Baskı" kitabından başlamayı tavsiye ederim . Bu kitap Scala kullanarak yavaşça (FP) Fonksiyonel Programlamaya bir tanesinde FANTASTİKtir. FP'ye geçişi gösterirken OO'yu reddetmez. Aslında, kaldıraç kullanır. Şimdi ikinci geçişimi yapıyorum.

Temel olarak, Scala kişinin "noktalı virgül olmadan" Java / OO yapmasına izin verir. Ve sonra bütün domuz gitmek zorunda kalmadan biraz FP deneyebilirsiniz. Örneğin, FP yapmak için kendimi eğitirken, tipik olarak sınıf yöntemi düzeyinde referans şeffaflığına odaklanacağım, ancak yöntemlerinizin ilk geçişi yapmam için gereken birçok varyasyonu, değişebilirliği ve zorunluluğu olmasına izin ver bir uygulama. Sonra, saf FP'ye doğru ilerlemek için her yöntemi yavaşça yeniden ele almaya odaklanıyorum. Ayrıca zihinsel / düşünme geçişim konusunda yardım almak için kardeş siteyi StackOverflow, CodeReview için kullanıyorum. İşte bu işi yaptığım son bir gönderi örneği .

Her neyse, FP yolculuğunda iyi şanslar. :)

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.