6 ms·
My apprehension comes from lack of seeing it in the wild (i.e. scaled businesses). Google primarily uses C++/Java. Facebook: Hack. Twitter tried Scala and as f
by zinxq 9y ago
My apprehension comes from lack of seeing it in the wild (i.e. scaled businesses).
Google primarily uses C++/Java. Facebook: Hack. Twitter tried Scala and as far as I know, abandon it and went to Java. LinkedIn definitely tried Scala, failed, and went to Java. Square is Ruby/Java.
I'd like to have something to point to as a success story of a company at scale with functional programming. Anyone know of one?
- andrzejsz 9y agoWhat is wrong with Scala that some companies seem to abandon it in favour of Java?
- hvs 9y agoCompilation in slow. It's also a complex language that can be hard to wrap your head around. That makes it hard to spin up new developers on it.
- problems 9y agoThat's an excellent question - especially given that you can essentially use it as a "functionally enhanced java" as it's not a hard-FP language like Haskell. I'd love to know - maybe it's a question of staffing? More skilled Java programmers around than Scala programmers probably. Also might be easier to work with lower level DB libraries and such, but I don't see why a company that large couldn't develop and maintain their own abstractions.
- jerf 9y ago"especially given that you can essentially use it as a "functionally enhanced java" as it's not a hard-FP language like Haskell" I'm not sure if I can call this "the Haskell community consensus", but a lot of the Haskell community finds Scala too complex to be worthwhile. They find it introduces a lot of complexity above and beyond Haskell, but at the same time, fails to take proper advantage of it and the result is quite dirty, full of special cases, and consequently hard to reason about. So you get a lot of the costs, perhaps even more costs for compliance than a Haskell code base, but you get fewer benefits.
- lostcolony 9y agoFinding Scala developers vs Java developers. That's really the main issue per the original question. It's not that functional somehow fails on its merits to deliver, it's just that "at scale" means having enough developers who know it. The reality is that imperative/OO languages have the greatest mindshare, and thus it's far easier to find developers, and far less wind-up time, if you're using such a language.
- moomin 9y agoAlso, there's enough different about Scala that can't be expressed on a simple OO vs FP axis that it's hard to learn that much from Scala vs Java. (On this axis)
- random314 9y agoSo far the only real instance of a big company abandoning Scala has been Yammer, so this is a mistaken impression. LinkedIn and Twitter are heavily invested in Scala.
- hota_mazi 9y agoIt's basically the C++ of the 21st century. Designed to replace and address flaws of an older language but ends up being huge and unmaintainable, with very questionable design decisions and a tool chain that's simply not up to standards in the 21st century (slow compiler, poor IDE integration that keeps breaking version after version, etc...). In C++, some of these design decisions were driven by legacy pressure but in Scala, a lot of design decisions were driven by the pressure on the team to write research papers. Either way, both languages end up being monsters that implement all known programming language features known on Earth.
- pkolaczk 9y agoQuite the opposite. Scala is a language designed around a very small core of very powerful, and sometimes hard-to-grasp features like implicits or higher-kinded types. It is a different language than Java and was not designed to replace Java or to be a better-Java. Your C++ to C analogy doesn't hold, because C++ is an (almost) superset of C, while Scala is not a superset of Java at all. Modern C++ compiler can compile most of C code with at most minor, cosmetic changes. As for the toolchain - I'm working in it daily and so far it has been great. Ok, compiler is not as fast as Java (point taken), but this doesn't matter as long as I can compile my code fast enough. IDE support is stellar compared to most other popular languages, particularly dynamic ones like Python or PHP.
- haskellandchill 9y agoAs someone who loves typed functional programming and has used both Scala and Java, I oddly prefer Java; it's much easier to reason about. I find Scala almost impossible to make sense of due to the language's complexity.
- sly010 9y agoScala is very powerful. Too powerful. There are too many ways to do the same thing and no idiomatic way. Some people also abuse Scala to create DSLs with horrific syntax that is very hard to comprehend. I love and use Scala, but I can totally see why it can be a hard language to use for collaboration.
- sandGorgon 9y agoITA Software - lisp. Acquired by Google for 700 million.
- plinkplonk 9y agojet.com https://tech.jet.com/blog/2016/02-05-jet-engine-built-2015/ https://tech.jet.com/blog/2016/02-05-jet-engine-built-2015/ . F# on Azure. Acquired by Walmart for 3 billion in cash. From the article "in this case for massive distributed systems Functional Languages are the right tool ... Immutability at scale is really important because it allows you to go from 30k members to a staggering 2.5 Million+ and not even feel blip within 3 months, like we did here at Jet from the end of July to October. That’s powerful!"
- Slackwise 9y agoDo you guys do anything with the Clojure devs at Walmart Labs?
- plinkplonk 9y agoWho is 'you guys'? :-) I personally know some of the Clojure devs at WL who came in via the Runa acquisition from my ThoughtWorks days.
- rhaps0dy 9y agoJane Street use OCaml https://www.janestreet.com/technology/ https://www.janestreet.com/technology/ Erlang was developed for Ericsson phone switches with a large proportion of uptime. Whatsapp also use Erlang.
- mpweiher 9y agoOf course Erlang is functional in the small and OO in the large..
- hota_mazi 9y agoErlang has pretty much zero features usually associated with OO, which is not surprising since Erlang's creator once wrote "Why OO sucks"[1]. [1] http://harmful.cat-v.org/software/OO_programming/why_oo_sucks http://harmful.cat-v.org/software/OO_programming/why_oo_suck...
- maze-le 9y agoI once heared a speech from Joe Armstrong, where he considered erlang the only true object oriented language... This was of course a little quip to the OOP community, but it has a certain truth in it. He argued, that the actor model is basically object orientation like it should have been done.
- Jtsummers 9y agoIf you look at early concepts for OO where objects were simulations of things (Smalltalk, Simula) and communicated via message passing, erlang's process and message passing model actually fits well within the OO-framework of thought at least with regards to application design. What it's missing are syntax/semantics based on class hierarchies and such from OO languages like Java and C++, which isn't a bad thing.
- mpweiher 9y ago"Joe Armstrong: Smalltalk got a lot of the things right. So if your question is about what I think about object oriented programming, I sort of changed my mind over that. I wrote a an article, a blog thing, years ago - Why object oriented programming is silly. I mainly wanted to provoke people with it. They had a quite interesting response to that and I managed to annoy a lot of people, which was part of the intention actually. I started wondering about what object oriented programming was and I thought Erlang wasn't object oriented, it was a functional programming language. Then, my thesis supervisor said "But you're wrong, Erlang is extremely object oriented". He said object oriented languages aren't object oriented. I might think, though I'm not quite sure if I believe this or not, but Erlang might be the only object oriented language because the 3 tenets of object oriented programming are that it's based on message passing, that you have isolation between objects and have polymorphism. ..." Read the rest. It's good. https://www.infoq.com/interviews/johnson-armstrong-oop/ https://www.infoq.com/interviews/johnson-armstrong-oop/
- divs1210 9y agoHelpshift (http://www.helpshift.com http://www.helpshift.com) is fairly large scale and is written primarily in Clojure.
- illuminati1911 9y agoYou can do functional programming in many languages. Using functional programming or having a "success story" with it doesn't mean you need to use "functional only" -language or Scala. For example: I've been developing for the last 3 years for the iOS and we been using FP and FRP almost everywhere with different teams and companies. Compared to the standard OO or Apple -way of doing things we have been able to make much better tests, stability/maintainability of the apps has increased etc.
- matwood 9y agoI think the end result is going to be companies adopting functional concepts. I can't find the article right now, but Carmack wrote about how even though he was not sure if he would write a whole game engine in something like Haskell, just learning to think functionally improved his C coding. Java has had lambdas and streams for awhile now. A pretty common design pattern has also become anemic domain models operated on by groups of functions, which fits in the spirit of functional programming. Modern java can, and is used in a functional style. On the JS side, functional concepts are everywhere. Given how heavily FB and Twitter are invested in JS, I don't think they have abandoned functional programming at all. Finally, IMO Scala is actually a pretty poor example of a language that can be used at scale. Without a highly enforced set of rules it can quickly become a write once/read never language. I'm sure there are exceptions, but given the choice between scala and java 8+, I would go with java. Clojure may be an option though.
- tjalfi 9y agoWere you thinking of http://www.gamasutra.com/view/news/169296/Indepth_Functional_programming_in_C.php http://www.gamasutra.com/view/news/169296/Indepth_Functional...?
- matwood 9y agoYes, thanks!
- 0x445442 9y agoYeah, my Java code pretty consists of two categories of class types now days. Pojo's which are just data structures or a glorified HashMaps for holding data. And, if allowed, using Lombok to get rid of all the getter/setter cruft. The second category of class types are just Service classes. These classes hold no state and are a logical grouping of methods that typically operate on a given data type. However, the class is based more on a specific role it performs than the type(s) it operates on. Also, there's considerable thought given to reuse of the Service classes outside the given context at hand.
- Insanity 9y agoWhatsapp is using Erlang on the backend afaik. I'd say Whatsapp was/is quite a successfull app.
- jorgeleo 9y agoThe reason why you see this pattern is not because in functional programming vs. OOP, functional losses. The reason for this pattern is because companies look for easily replaceable developers. To get into functional you need to be good at abstracting the business domain, this requires seniority which is hard to find. Most of the time, when you are working using functional programming you are implementing the business vocabulary. Entry level developers are not good/interested in this. Their worries are in how they can use Angular 2 in this project, or why we need to still use SQL Server instead of converting to {insert the newest database technology}. It is easy to find (and replace) junior developers that are happy because they created something with the latest technology and it provides the immediate value intended. It sounds good, but it misses the point. Software development in a company happens to support/enhance the business. This means that it has to stand the test of time, not only in reliability but also in adaptability. The only constant in software is that it will change. Here is where building a vocabulary that represents the business subjects pays off. Change now is a definition-change and, unless the business is pivoting, definitions rarely change; instead, they have constant adjustments. Functional shines in creating a vocabulary and having this adaptability. Of course, you can adapt using OOP, but the question is not if adaptability is possible, it is instead how to make changes at the lowest risk.
- BeetleB 9y ago>The reason for this pattern is because companies look for easily replaceable developers. Which is definitely part of the "company at scale" equation the GP referred to.
- r2dnb 9y ago>Most of the time, when you are working using functional programming you are implementing the business vocabulary. >Here is where building a vocabulary that represents the business subjects pays off. Change now is a definition-change and, unless the business is pivoting, definitions rarely change; instead, they have constant adjustments. Functional shines in creating a vocabulary and having this adaptability. I tend to use the same arguments to make the case against FP for business modelling. I tend to say that FP is good at adding new operations to existing things, while OOP is good at adding new things to existing operations. However when Software Development is used to model a business - as it should be for reasons you accurately explained - the reality it meets is the one of the business world in which business needs evolve and requirements get added. You start by supporting local groceries and then you grow to support global supermarket chains. OOP is more suited to model business because you can naturally extend existing types and apply existing operations to them (ie. pass a supermarket everywhere a shop was expected + things such as polymorphism). In FP, every time you add a type, you need to add switch cases to your existing operations (at best), or redefine them create / new ones (at worse), since the ubiquitous assumption of FP development is immutability and known types. I'd be curious to know how you approach this conflict in a way that makes FP work in real world business modelling which needs to be extension-oriented. It seems to me that the more operations using a type you have, the more you will be screwed when you want to extend this type. The only reason I can see this wouldn't be the case would be to say that I approach FP with the wrong philosophy and that there is no such things as extending types in FP. But in this case I'd question if FP modelling really is the best tool to model real world business for which it is natural to define things as extensions of other things.
- neukoelln 9y agoTwitter have not abandoned Scala.
- random314 9y ago> Twitter tried Scala and as far as I know, abandon it and went to Java. This is incorrect. One of the former VPs said he would not use Scala. Twitter uses Scala massively and has published and continues to maintain several open source Scala projects. > LinkedIn definitely tried Scala, failed, and went to Java This is incorrect. A newly hired VP insisted on moving the front end from Scala to Java. In the offline backend stack Scala is used extensively. Check Kafka, Samza from LinkedIn or better yet ask current LinkedIn employees. Apart from these Spotify, Foursquare, ebay, several banks use Scala. FP is huge in financial institutions, check K/KDB+. Jane Street etc. Thats where most FP programmers work. Also verizon, jet.com and walmart.com. There are several dozen large companies using FP. FP is mainstream now. Traditionally, it was financial institutions using some flavor of ML/Haskell. With Scala/Clojure on the JVM, Si Valley has moved into FP in a big way.
- TSiege 9y agoNot sure what you mean by LinkedIn's front end, but they are 100% an ember app on the front end. At most they're using typescript for it.
- singlow 9y agoSince I don't think he means Scala transpiled to javascript, I assume he means the services/apis that are used by the front end. This is distinguished from applications which do not talk directly to the browser. Front end and back end have different meanings depending on perspective.
- philpee2 9y agoAirbnb also uses Scala for financial reporting https://medium.com/airbnb-engineering/tracking-the-money-scaling-financial-reporting-at-airbnb-6d742b80f040 https://medium.com/airbnb-engineering/tracking-the-money-sca...
- noelwelsh 9y agoTwitter use Scala. They have a representative on the Scala Centre board (Stu Hood. See https://scala.epfl.ch/minutes/2017/02/28/february-28-2017.html https://scala.epfl.ch/minutes/2017/02/28/february-28-2017.ht...) which indicates they are strongly invested in the language.
- haskellandchill 9y agoFunny you mention Hack! It is written in OCaml ;)
- maze-le 9y agoFacebook/WhatsApp is using erlang for their messaging backend. Erlang itself was invented at ericsson labs, they are one of the biggest suppliers of telco backend equipment.
- mattferderer 9y agoFacebook does a lot of OCaml & variations of it.
- patrickmn 9y agoThey also use Haskell (and the Haxl library) for their anti-spam engine.
- joneholland 9y agoExpedia uses scala massively on the backend.
- hacker_9 9y agoWings3d.com is written in Erlang, a functional programming language. Additionally any business that scales will be using functional constructs, because they parallelise trivially. Google uses MapReduce for instance. Visual Studio rewrote their compiler to use immutable constructs, and so on.
- dentemple 9y agoFunctional Programming, as the article points out, can be universal to many languages. You don't have to use an "FP" language to enjoy "FP" benefits. JavaScript, for example, is ubiquitous in the industry, and, especially with the advent of ES6, can be written quite functionally. ReactJS is also widespread and can also enjoy an FP approach.
- tombert 9y agoJet.com is almost exclusively F# at this point, at least for any of the backend systems.
- peterkelly 9y agoMapReduce, which Google built for indexing the entire web, along with many other big data tasks, is an example of something that could only have been invented by someone familiar with the principles of functional programming: https://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf https://static.googleusercontent.com/media/research.google.c... Imperative/object oriented languages are often more practical for real-world use (MapReduce itself I believe is written in C++), however it's the ideas of functional programming that matter most. Those with experience working in functional languages are at an advantage over developers who've never had that exposure, because they have a wider range of mental tools at hand with which to solve problems.
- jackmott 9y agoPlenty of people use functional languages in the wild, though sometimes, like Jane Street, they don't do it for the same reasons that are normally stated as being the reasons functional programming is better. This is a good video, from Jane Street, on why they use OCaml: https://www.youtube.com/watch?v=kZ1P8cHN3pY&t=109s https://www.youtube.com/watch?v=kZ1P8cHN3pY&t=109s
- 0xdeadbeefbabe 9y agoHN uses it https://en.wikipedia.org/wiki/Arc_(programming_language) https://en.wikipedia.org/wiki/Arc_(programming_language)
- BaronSamedi 9y agoOr even better, how about empirical research to back up the claim that functional programming is "better"? Does the use of functional language result in fewer bugs at less cost? Compared to what (C, Java, Ada, Lisp)? I don't have an opinion on it but I would like to see the bold claims backed up by actual evidence instead of assertions.
- jaredklewis 9y agoIt would be nice, but is a rather tall order. Total cost of maintenance and development of software is not usually public, often unknown even to the developing company, and not actually a very useful metric without context of how much value was generated by that cost. And again that generated value is generally not public and usually unknown even to the companies themselves. Another approach is to run experiments but they are universally terrible. Their methods have so little relation to the way real software is developed, that it is hard to take any conclusions seriously. I would also like some hard data, but don't hold your breath. Technology decisions will probably need to made based on other factors for the foreseeable future.
- BaronSamedi 9y agoI agree that hard data is difficult to come by. Without it though, people should not be claiming that X style of programming is better than Y. As much as I like the functional style, it could be that Pascal-style structured programming is actually the best. Who knows? There was a recent post here on HN about empirical language design and I thought that was a refreshing change. I'd like to see a change in software culture towards an evidence based approach. It's long overdue. Alan Kay called the software world "pop culture" and I think he is right. Software is more fashion driven than Vogue magazine. Academic research could be a vehicle for a more empirical approach. Research in the hard sciences embraces empiricism. Sadly, the academic research in software doesn't, generally, adhere to the same level of rigor.
- rdtsc 9y agoErlang is used at WhatsApp. One of the interesting things there is that for the amount of users and messages handled they had a very small backend team. They have credited Erlang and its features as one of the keys to their success. It means less code (mostly related to minimal impedance mismatch from language to problem domain), debug-ability, reliability, fault tolerance, less ops overload and so on. I personally find it much easier to navigate and fix bugs in an Erlang code base than in the equivalent C++/Java/C# one. It mainly boils down to how state is updated. When I see NewState = update(Value, State) it is clear what is happening. In OO code, I usually need to remember what object inherits from, what are is the instance state so far (what other members have been called) and how it got there. I find that much harder to handle, for example.
- pmarreck 9y agoBleacher Report went from 150 servers to just five (yes, that is not a typo, that is a 1/30 reduction) moving from Ruby on Rails to Phoenix on Elixir (née Erlang, but we should just call it "BEAM" at this point): http://www.techworld.com/apps/how-elixir-helped-bleacher-report-handle-8x-more-traffic-3653957/ http://www.techworld.com/apps/how-elixir-helped-bleacher-rep... They also handle 8x as much traffic. With 1/30 the number of servers. Ruby is OOP. Elixir/Erlang is purely functional (although dynamically-typed... some will prefer typed... but the results speak for themselves). If you are a long-time developer like me and are just coming across this, this news should strike you somewhere between "astonishing" and "pure fucking magic." Here's the deal- Paradigm shifts, most people only see them AFTER they've finished. If you want to be ahead of the curve on this one and you want to reap the benefits, go functional (Haskell, Clojure, OCaml, F#, Elm, Erlang/Elixir). Today. That is my #1 piece of advice right now. (Well, that, and to avoid Scala and Go. Scala is just too overly complicated to keep your cognitive load down as a developer, and Go... Well, the name even says it: "Go!" As in, "don't stay!" ;) Go will suffer the same long term problems that all OOP/procedural langs share, compounded by its idiotic take on error handling /opinion) Elixir: http://elixir-lang.org/ http://elixir-lang.org/ Phoenix: http://www.phoenixframework.org/ http://www.phoenixframework.org/
- pkroll 9y agoIf you're a long-time developer and just coming across this, it should be... old news. The Techempower benchmarks [1] have consistently shown Ruby on Rails results can be in the range of 1/30 to 1/40th speed of C, C++, Scala, Java and Go, depending on the kind of task. The first thing I thought of actually was an article from 2013, on replacing Ruby with Go [2]. I'm surprised there aren't more of these sort of articles, really: Replacing Ruby on Rails with Rust|Scala|Java|Insert Here. There are a lot of interesting aspects of functional programming, but there's no particular miracle here: Ruby, particular Ruby on Rails, is slow. [1] https://www.techempower.com/benchmarks/#section=data-r13&hw=cl&test=json https://www.techempower.com/benchmarks/#section=data-r13&hw=... [2] https://www.iron.io/how-we-went-from-30-servers-to-2-go/ https://www.iron.io/how-we-went-from-30-servers-to-2-go/
- marnett 9y agoThe Quant firm Jane Street uses Ocaml and built Core [1], an alternative to the Ocaml standard lib. I wouldn't be surprised if their business domain benefits from FP. Also demonware [2], which is owned by Acitivision/Blizzard and manages online game lobbies for all their titles (ie Call of Duty series across all platforms), uses Erlang. They switched from C++ to Erlang before Call of Duty Black Ops was released. They said if they hadn't decided to switch before the release the company would have never been able to handle the 5 months of user growth the game brought to their platform [3]. [1] https://github.com/janestreet/core https://github.com/janestreet/core [2] https://www.demonware.net/ https://www.demonware.net/ [3] https://news.ycombinator.com/item?id=14120506 https://news.ycombinator.com/item?id=14120506