it-swarm-eu.dev

Proč není funkční programování v oboru populárnější? Už to chytí?

Během mých čtyř let na univerzitě jsme používali mnoho funkčního programování v několika funkčních programovacích jazycích. Ale také jsem použil mnoho objektově orientovaného programování a ve skutečnosti používám více objektově orientované jazyky, když dělám svůj malý malý projekt, abych se připravil na své první zaměstnání. Ale často si přeji, abych při těchto projektech kódoval ve funkčním programovacím jazyce.

Při hledání zaměstnání je však velmi vzácné vidět práci, kde je vyžadována znalost funkčního programovacího jazyka.

Proč se v oboru nepoužívají funkční programovací jazyky více? O funkčních programovacích jazycích v těchto dnech je spousta novinek, takže se zajímám, zda funkční programování nyní v tomto odvětví dohání?

61
Jonas

Řekl bych, že jedním z důvodů, proč funkční programování není častější, je nedostatek znalostní základny. Moje zkušenost je taková, že korporace jsou velmi riskantní, pokud jde o implementaci technologií, které nejsou hlavním proudem, a raději investují do vyzkoušených a skutečných rámců (Java, c ++, c #). Nové paradigmy jsou zvažovány pouze v případě, že existuje potřeba podnikání (jako v Ericsson). Ale i v případě společnosti Ericsson jsem slyšel, že management požadoval použití c ++ a Joe Armstrong byl nucen kódovat erlang volání v c ++ !! To by mělo ukázat, jak neochotné společnosti mají zavádět nové technologie!

38
ennuikiller

Byl jsem profesorem a stejně jako programátoři i profesoři vždy hledají Next Big Thing. Když si myslí, že ho našli, dělají z něj rozjetý vůz a všichni se hromadí. Protože kážou studentům, kteří si myslí, že profesoři musí být opravdu chytří, jinak proč by to byli profesoři, nedostávají se žádného odporu.

Funkční programování je takový rozjetý vůz. Jistě, je tu spousta pěkných zajímavých otázek, které je třeba prozkoumat, a spousta zajímavých konferenčních článků. Nejedná se o zvlášť nový nápad a můžete to udělat v téměř jakémkoli moderním jazyce a nápady nemusí být nové, aby byly zajímavé. Je to také dobrá dovednost.

Vzhledem k tomu, že funkční programování je ve vaší toulečce pouze jedna šipka, ne pouze jedna, stejně jako OOP není jediný).

Mým hovězím masem s akademií informatiky je nedostatek praktického souhry s průmyslem, který by určoval, co ve skutečnosti dává smysl skutečnému světu, tj. Kontrolu kvality. Pokud by tato kontrola kvality existovala, mohl by existovat odlišný důraz na klasifikaci problémů a rozsah jejich řešení, s kompromisy, než jen s nejnovějšími rozjetými vozy.

67
Mike Dunlavey

Protože největším problémem ve vývoji softwaru v těchto dnech je schopnost řídit složitost. Nejde o zaměření většiny funkčních programovacích jazyků. Proto jazyky, které do dělají z této priority (konkrétně více populární OOP jazyky), mají tendenci ukrást některé z chladnějších funkcí, které vycházejí z akademičtějších funkční jazyky, a tak zůstaňte na vrcholu.

25
Fishtoaster

Funkční programování se určitě začíná dobírat - pomalu, ale jistě.

Například spouštěcí budova, kterou buduji, používá funkční jazyk (Clojure) jako primární vývojový jazyk z následujících důvodů:

  • Produktivita - učení FP je těžké, ale jakmile se dostanete na kloub, je velmi těžké porazit, pokud jde o síly a expresivity. Asi píšu asi 1/10 deset řádků pro implementaci dané funkce ve srovnání s tím, co bych potřeboval v C # nebo Java

  • Spolehlivost - čisté funkce jsou mnohem jednodušší důvody a testovat než stavové objekty. Proto můžete psát lepší testy a mnohem snadněji ověřovat správnost kódu.

  • Concurrency - funkční jazyky zdůrazňují neměnitelnost, což má obrovské výhody pro současné aplikace, než je potřeba efektivně běžet na více jádrech. A ať se vám to líbí nebo ne, běh na několika jádrech je budoucnost. Viz http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey , kde najdete brilantní vysvětlení, proč je to tak důležité

  • Skladatelnost/modularita - Zdá se, že funkční jazyky se hodí k snadnějšímu propojení součástí než u komplexních OO systémů). Stále nezjistili všechny důvody pro to, ale část z toho pramení ze skutečnosti, že nemáte všechny „náhodné složitosti“, které s nimi OO táhnout s nimi. on Radical Simplicity by Stuart Halloway zkoumá tyto myšlenky mnohem hlouběji.

[~ # ~] editovat [~ # ~] : V reakci na Despertarův komentář, příklad „náhodné složitosti“ OOP systémy, které omezují modularitu, jsou problémy s hlubokým klonováním vs. mělkým klonováním: nemůžete komponovat objekty a předávat je jako složené struktury bez velmi pečlivé analýzy sémantiky klonování a mutace. je zvládnutelný, ale ve složitých systémech se rychle stává závažným problémem. Tento problém v první řadě neexistuje, pokud se spoléháte na čistě funkční datové struktury.

24
mikera

Nedostatek zabijáckých aplikací

Hej, tohle tady vypadá svěží. (Dig Dig Dig)

Myslím, že většině programovacích jazyků se daří mít „zabijáckou aplikaci“ - něco přesvědčivého, které bylo výlučně pro daný jazyk (nebo tak vidělo). Tím nechceme říci, že veškerá vychytávka byla tou aplikací , ale že vedla jazyk k většímu přijetí.

Zde je můj nepříliš přesný pohled na to, co nika vedlo k přijetí některých jazyků, které dnes máme:

  • C: Funguje všude (to bylo na konci 70. a 80. let)
  • C++: GUI frameworks (brzy 90s)
  • Java: applety a servlety (na konci 90. let)
  • Objective-C: aplikace pro iOS (dříve, aplikace pro OS X)
  • Ruby: Rails
  • C #: ASP.NET, WinForms
  • PHP: Wordpress atd.
  • Javascript: AJAX, zejména prostřednictvím frameworků
  • lua: skriptování her, zejména WoW

Kromě toho se mnoho proprietárních jazyků dostalo do dveří prostřednictvím silných prodejních organizací (Oracle a v menší míře i jazyků společnosti Microsoft), které účinně vytvářely své vlastní místo.

Jedna velmi důležitá poznámka o tomto seznamu: „Výklenek“ jazyka, jak je uvedeno v aplikaci zabijáka, se v průběhu desítek let stává specifičtější. Všimněte si posledního seznamu: konkrétně skriptování her . Pro jazyky je stále těžší a těžší získat pozornost kvůli seznamu věcí, které již v jiném jazyce dokážou dost dobře.

To, co jakýkoli funkční jazyk potřebuje, je opravdu výklenek. Ve skutečnosti zatím neexistují žádné obrovské funkční jazyky, ale v menších výklencích je jich hodně:

  • Emacs LISP: Neustálé používání od 80. let v Emacsu vývojáři. ( téměř nikdy používá kdekoli jinde.)
  • Erlang: Kamkoli chceš spoustu souběžných agentů.
  • Schéma: Vzdělávání
  • APL/J/K: Finance (Nazvěme je funkční kvůli zájmu)
  • Obyčejný LISP: „AI“ - To je to, co lidé říkají, že je to zvyklé, což je požehnání a kletba.

Nyní, jediný hlavní jazyk, který podle mě opustil tuto diskusi, je Python. Python udělal něco velmi zajímavého; uspěl, aniž by se zdálo, že je vítězem v nějakém velkém výklenku. To by mohlo znamená, že se mýlím při sledování jazykové popularity tímto způsobem. Může to také znamenat, že dostatečně dobrý jazyk se může stát populárním bez aplikace zabijáka. řídit přijetí a přijetí, ale je to velmi obtížné a může to trvat velmi dlouho. (Perl má podobný příběh, ale přišel o několik let dříve a nyní má méně vychytávání.)

Z toho mohu říci, které funkční jazyky, které si myslím jsou na vzestupu:

  • Clojure: Web programování, esp. přes Heroku
  • Scala: Lift (nebo možná Play, v těchto dnech) - JVM bez Java

Pokud byste se mě zeptali, kde hledat další populární funkční jazyky, řekl bych, že budu hledat funkční jazyk s vývojem cloudových řešení na klíč (a la Heroku nebo GAE) nebo vývojem mobilních aplikací na klíč.

12
Jesse Millikan

Ze stejného důvodu, na který se LISP nikdy nedotklo (ať začnou plamenáři!). Funkční programování je ve srovnání s imperativním a objektově orientovaným programováním velmi cizí paradigma. Pokud jste, stejně jako velká většina studentů CS, začali s C a postupovali do C++/Java, nemáte tendenci se učit myslet způsobem, který je zcela ortogonální k tomu, jak si normálně myslíte.

9
Chinmay Kanchi

Podívejme se na podniky a programování.

Existují podniky, které používají svůj software jako strategické aktivum. To není typické. Pro většinu podniků je IT něco, co podporuje skutečné podnikání společnosti. Je to nezbytný náklad. Jsou konzervativní, protože vědí, že za $ X dokážou získat IT, které potřebují, zatímco když přepnou na něco jiného, ​​ušetří méně než $ X, pokud všechno půjde dobře, a ztratí skutečný velký, pokud všechno půjde špatně.

Navíc v podnicích je nejlevnější věcí, co dělat obvykle, co dělali včera. Změna je však žádoucí, je nákladná. Pokud by se společnost změnila z, řekněme, na C # /. NET řešení, dokonce na F #, měli by problémy. Jejich programátoři (kteří pravděpodobně nejsou nejostřejšími programátory venku) by se museli učit nový jazyk, být obeznámeni s oběma a používat oba často. V obou by byly psány rutiny na dlouhou dobu. Kdyby se přestěhovali k něčemu, jako je Haskell, nebo kdyby používali nejprve C++/MFC, změnili by se mnohem víc a to by bylo mnohem dražší.

Na dlouhou dobu bude také dodávka programátorů C # a podpora společnosti Microsoft. Na současné IT postupy lze spolehnout. Neexistuje stejná úroveň institucionální podpory nebo záruky trvalé dostupnosti programátorů.

Proto by pro většinu podniků bylo provedení funkčního programování předem nákladné a vyplatí se to pouze tehdy, pokud je snížení nákladů na IT v dlouhodobém horizontu dostatečné, s výjimkou toho, že je dlouhodobě potenciálně fiktivní.

6
David Thornley

Kód již píšete ve funkčním stylu, ale nevíte to.

Když jste povinni provést jednotkové testy pro váš kód, máte tendenci psát testovatelné funkce, které nevytvářejí nebo nezávisí na vedlejších účincích a vždy vrací stejný výsledek na stejné argumenty (tzv. Čisté funkce). To je hlavní výhoda funkčních programů.

Myslím, že funkční jazyky jsou příliš omezující. Takže namísto nahrazení imperativních jazyků funkčními, získají imperativní jazyky funkční funkce. V dnešní době má téměř každý programovací jazyk uzávěry a jehňata.

2
Calmarius

Věřím, že na vaši otázku existuje pouze jedna skutečná odpověď. Můžete se dostat do mnoha souvisejících důvodů, proč tomu tak je, ale jsou to různé otázky.

Tady to je:

  • Softwaroví architekti poskytují řešení, o kterých věří, že budou fungovat.
  • Většina architektů nefunguje ve funkčních jazycích.
  • Jakmile jsou technologie a jazyky vybrány, podniky najdou lidi, kteří s nimi mohou pracovat.

Dohání to? To vše záleží na tom, zda lidé, kteří věří v používání funkčních jazyků, se stávají architekty a rozhodují se je používat pro projekty, na nichž pracují.

1
John Fisher

Skutečným problémem je stav.

Funkční jazyky nemají globální stav. Většina průmyslových problémů vyžaduje stav ve velkém měřítku (jak reprezentujete účetní knihu nebo soubor transakcí), i když to některé funkce v malém měřítku ve skutečnosti nevyžadují (zpracování účetní knihy).

Používáme však kód na Von-Neumanových architektonických strojích, které jsou ze své podstaty plně stavové. Takže jsme se vlastně nezbavili státu, funkční jazyky jen skrývají složitost státu před vývojářem. To znamená, že jazyk/kompilátor se musí vypořádat se stavem v zákulisí a spravovat ho.

Ačkoli funkční jazyky nemají globální stav, jejich informace o stavu jsou předávány jako parametry a výsledek.

Otázkou tedy je, zda jazyk dokáže stát efektivně za smyslem? Zejména pokud velikost dat daleko přesahuje velikost architektury.

Při pohledu na to z Hardware Side

OS v posledních několika letech hodně pomohl ve vizualizaci adresového prostoru, takže se o něj aplikace nemusí oficiálně starat. Ale aplikace, které se nebojí, upadnou do pasti zničení hardwaru, když se tlak v paměti zvýší (thrashing hardware zpomalí vaše procesy k procházení).

Protože programátor nemá přímou kontrolu nad stavem ve funkčním jazyce, musí se na to spolehnout kompilátor a já jsem neviděl funkční jazyky, které to zvládnou dobře.

Na obrácené straně mince má stavový programátor přímou kontrolu nad stavem a může tak kompenzovat podmínky nízké paměti. I když jsem neviděl mnoho programátorů, kteří jsou ve skutečnosti dost chytří, aby to dokázali.

Při pohledu z průmyslového hlediska:

Průmysl má mnoho neefektivních státem plných programátorů.

Je však snadné měřit vylepšení těchto programů v průběhu času. Hodíte tým vývojářů na problém, který mohou vylepšit kód zlepšením toho, jak program zpracovává stav.

U funkčních programů jsou vylepšení více obtížně měřitelná, protože potřebujete vylepšit nástroje, které zlepší programy (právě se díváme na to, jak aplikace zde účinně zpracovávají základní stav, nikoli na celkové vylepšení programu). ).

Takže pro průmysl si myslím, že jde o schopnost měřit vylepšení kódu.

Z pohledu najímání

Existuje mnoho stat-full programátorů k dispozici k pronájmu. Funkční programátoři je těžké najít. Váš základní model nabídky a poptávky by tedy nastoupil, kdyby se průmysl přepnul na programování funkčních stylů a to není něco, čeho se chtějí stát (programátoři jsou dostatečně drahá, jak to je).

0
Martin York