14 ms·
How to Sell Excellence
- ryandvm 12y agoAt the risk of sounding inflammatory... I would be willing to believe that purely functional languages are the "one true way" if there were even the slightest bit of empirical evidence to support it. But where are all the successful large scale projects built with Haskell (or Clojure or whatever)? The biggest FP project I was aware of was Twitter using Scala and they ended up completely backing away from it. Yikes. The only other popular site that springs to mind is Hacker News, and frankly, it sucks. It's practically the Hello World of discussion forums. The truth is, at the end of the day almost everything is being built with Java, Python, Ruby, or JavaScript. Can you really blame the product owners for being wary of writing their whole product in a functional language?
- jonnybgood 12y agoClojure Success Stories http://cognitect.com/clojure#successstories http://cognitect.com/clojure#successstories
- nothrabannosir 12y agoThat may be survivor's bias, though. How many software products end up not making it, at all? If you look at all software projects, everywhere, combined, and split them up: functional vs non-functional. The latter group would several orders of magnitude larger than the former. Now what percentage of the non-functional ones ends up becoming successful enough for you to hear about them and know what they were built with? Apply that percentage to the functional projects, you might just be left with naught. I have a feeling that if there's one thing more rare than functional programs, it's highly successful ones.
- rdtsc 12y ago> But where are all the successful large scale projects built with Haskell (or Clojure or whatever)? How about Erlang. Let's try it, just from the top of my head: * AXD 301 Switch -- Classic. Powers and control phone switch networks of whole countries. Claims 99.9999999% reliability. * Basho Riak -- popular NoSQL database, highly scalable nodes are peers * RabbitMQ -- popular message queue used by enterprises * WhatsApp -- messaging application, processes billions of messages a day. Built and maintained by only a few engineers. Sold for billions of dollars. * Klarna -- European payment processing * Bet365 -- Sports bets * Stock trading -- Allegedly Goldman Sachs uses it. * Erlyvideo.org -- Video streaming service * eNodeB -- Ericsson cell to internet gateway. There is a 50% if you want to look at cat pictures from your smartphone and Erlang breaks, you won't see your cat pictures. * Wings3D -- A subdivision 3D modeler. I guess you can build your 3D cat and then send it over WhatsApp via a eNodeB to your friend. Those are just I know of. So there you go. Maybe you should learn Erlang ;-)
- nilkn 12y agoThrow IRCCloud into that list, my go-to IRC client that I've been using for nearly two years.
- wyclif 12y agoYou don't like irssi?
- nilkn 12y agoThere is what I like to call The IRC Problem, which is that it takes a bit of work to really make IRC into an awesome, persistent chat environment. First, you need to be persistently connected so that you don't miss messages when you're not actually at your computer. Second, you need a decent interface to use when you are actively reading or chatting. Third, it would be great to have the same across all devices (phone, tablet, laptop/desktop), with everything syncing correctly. If you read some scrollback on your phone, you want your laptop to also know that you already read those messages, and vice versa. It's certainly possible to achieve all this with irssi and a combination of other techniques. However, you can also use something like IRCCloud and get every problem solved at a very high level of competence immediately, plus a bunch of other stuff (like push notifications and embedded social media, images, videos, tweets, pastebins, etc.). It's up to you. For me, I really just want everything to work and I don't care at all about doing it myself. It's a means to an end. The $5/month fee is not important to me given the product quality. I sort of liken it to Dropbox -- it's not about doing something that couldn't be done before, it's about just making it streamlined for those who don't care to do it themselves.
- jordigh 12y ago> First, you need to be persistently connected so that you don't miss messages when you're not actually at your computer. I consider that a feature of IRC myself. I don't need to be wired in at all times and read eveerything everyone says. If I'm not there, I'm not there, and if there's something important I really need to hear, I'll hear it when I'm there. If I don't hear it, it never was important. There is memoserv in many IRC networks that does relay messages when you come back online. I have seldom had important messages relayed that way either. Most conversations are not that important. I don't see IRC as something that should follow me everywhere across all devices. It's like radio or TV. Turn it on, turn it off. Not on all the time.
- hibikir 12y agoI'd like to think that the Erlang has proven its value at building reliable, distributed applications. It's a go to language for distributed key value stores (Riak, Couch, et al), and it's in wide use in Motorola and Ericsson to build critical infrastructure. I call that successful. That said, you do have a valid point: The presentation provides justifications for those that want to switch in the first place, but to be compelling, it needs evidence.
- gooseyard 12y agoI work in Erlang and love it, but I would make the friendly argument that Erlang is really distinct (and special) even among the FP languages for a number of reasons. I always had the impression that Erlang was functional to support the guarantees made by the runtime rather than for ideological reasons. Some of the Functionistas I've run into seem to reject it out of hand for not being Haskell, but as a C guy I find it freaking amazing for writing stuff that has to stay running all the time. I guess I use in spite of it being functional rather than because of it, but it feels like I'm getting good value even when I run into things that are a pain in the ass to do functionally (which is not super often).
- whateveracct 12y agoApache Spark is written in Scala. Whitepages is also Scala. That's off the immediate top of my head.
- hayksaakian 12y agoWhatsApp was built on Erlang
- dustingetz 12y ago> Twitter using Scala and they ended up completely backing away from it. Yikes. What are you talking about, I just searched and found zero supporting sources
- whateveracct 12y agoI've seen people say this but never any real source. Maybe they're mixing up Twitter and Linkedin?
- unclesaamm 12y agoCan you people not google? I just typed "twitter scala" and got the following results on the first page: https://www.redfin.com/devblog/2010/05/how_and_why_twitter_uses_scala.html#.VR8aM_kgxP0 https://www.redfin.com/devblog/2010/05/how_and_why_twitter_u... http://readwrite.com/2011/07/06/twitter-java-scala http://readwrite.com/2011/07/06/twitter-java-scala http://www.slideshare.net/al3x/the-how-and-why-of-scala-at-twitter http://www.slideshare.net/al3x/the-how-and-why-of-scala-at-t... https://github.com/twitter/effectivescala https://github.com/twitter/effectivescala
- Elepsis 12y agoNone of the links you just shared have any mention of Twitter moving away from Scala, which is presumably the question.
- wbillingsley 12y agoI suspect he means Yammer, not Twitter, perhaps from this: https://gist.github.com/anonymous/1406238 https://gist.github.com/anonymous/1406238
- coolsunglasses 12y agoScala isn't a good language for FP at all. http://www.quora.com/Reviews-of-Functional-Programming-in-Scala-2014-book?share=1 http://www.quora.com/Reviews-of-Functional-Programming-in-Sc...
- whateveracct 12y agoSure maybe it's not good for FP if you're Edward Kmett. > The reason, I'm hesitant to give it a fifth star is ultimately that I don't believe that Scala is a good language in which to actually do functional programming. Literally the only other mainstream language that he would be able to say is capable of "fp" better than Scala would be Haskell.
- tel 12y agoOCaml, if that passes your "mainstream" test.
- whateveracct 12y agoSince OCaml doesn't have first-class higher-kinded types in the way Scala and Haskell do, I didn't think it would be acceptable by ekmett standards.
- tel 12y agoThat's probably fair.
- frowaway001 12y agoAt least people use it, which is more than what could ever be said about Haskell, so it had a larger impact overall ... while getting things done at the same time. You only need to have one look at it's module system/Cabal/Hackage to see that it was never intended for larger code bases than people's PhD thesis. Yes, it can scale: In the same way PHP and JavaScript does.
- stonemetal 12y agoThe who uses OCaml page is pretty impressive. https://ocaml.org/learn/companies.html https://ocaml.org/learn/companies.html Looks like it is mostly used for compilers, cryptography, and risk assessment.
- amirmc 12y agoBe careful what you mean by 'mostly'. Though there may be many small outfits that use it for this particular features, there are others that use it very differently (and at completely different scales). Examples such as Facebook, Jane Street and Esper come to mind. There are likely many other companies who have less of a web-presence too (cf defence industries, as mentioned in the slide deck).
- pakled_engineer 12y agoLisp, Haskell and other FP are currently killing it in the quiet world of DSLs, especially Mining, Oil & Gas industries which need to parse petaflops of seismic data and reservoir simulations, need rapid prototyping, need formally verified drilling platform components that field engineers can interact with easily, and HPC algorithms for financial trading. As for Hacker News UX I wish every site was this simple instead of popups everywhere to get me to download their phone app, piles of slow loading fonts, trackers, generic stock images of business suits pointing at a screen, information buried underneath annoying popup FAQ screens, ect.
- kevinnk 12y agoDo you have a link for the Oil & Gas DSL? A search for "Haskell oil gas dsl" didn't turn up much.
- pakled_engineer 12y agoI work for a stealth mode startup that writes DSLs in Haskell and Scheme for the O&G industry. We aren't the only outfits doing this https://angel.co/tachyus/jobs/26411-junior-software-engineer https://angel.co/tachyus/jobs/26411-junior-software-engineer
- mbesto 12y ago> Java, Python, Ruby, or JavaScript You mean .NET, PHP, and Java?[0] [0] - http://trends.builtwith.com/framework http://trends.builtwith.com/framework ps - For the record, I'm a rails/js guy
- leoh 12y agoStrange -- django doesn't even register on the list
- jaggederest 12y agoWordpress runs on PHP, therefore a majority of the internet is PHP, that's the whole story right there.
- seanwilson 12y agoI would use strongly typed functional programming languages for everything if I could. However, to be productive, you're usually constrained by what the dominant language is for your domain. For example, Android apps are usually written in Java and web apps are usually written in JavaScript. Each has a huge ecosystem of tools and libraries based around these languages. I'm sure there's some way I could use Haskell or OCaml to write Android and web apps. However, by going against the grain, it's likely to be very time consuming and frustrating to integrate with existing libraries and tools. I'm therefore going to lose any advantage I was hoping to gain from using a functional language.
- mightybyte 12y ago> I'm sure there's some way I could use Haskell or OCaml to write Android and web apps. I don't know about Android, but for Javascript apps the balance tipped for me just last month. I'm probably enough of an insider that it's not quite true yet for the average Haskell developer, but I believe that will change soon.
- seanwilson 12y agoWhat framework are you using? I've investigated Dart, Flow and TypeScript to improve static checking but I'm still having pain points: they work fine when dealing with your own self-contained code but integrating with third party libraries isn't always straightforward.
- mightybyte 12y agoI'm using GHCJS and Reflex. Reflex is a recently released FRP library that makes a huge difference in one's ability to abstract GUI code. I personally feel that this combination of GHCJS + Reflex is the first thing I've used that makes web front end programming tolerable. A week ago there was a presentation about it at the NY Haskell Meetup. Look for videos of it to be posted early next week.
- seanmcdirmid 12y ago
- mightybyte 12y ago> The truth is, at the end of the day almost everything is being built with Java, Python, Ruby, or JavaScript. You need to normalize against the number of programmers writing in Java/Python/... compared to the number of programmers writing Haskell for this assertion to be meaningful. And when you do that, the picture starts to look a lot better. In the past few years I have seen more and more people start writing real projects in Haskell and be successful. There was a presentation a couple years ago at CUFP [1] discussing one company's experience porting a 43k line Groovy app to 8200 lines of Haskell. You don't need someone to build a highly visible multi-million line piece of software in Haskell to be confident that it can benefit your project. I think there's enough evidence out there today to make a very compelling case. [1] https://www.youtube.com/watch?v=BveDrw9CwEg#t=1207 https://www.youtube.com/watch?v=BveDrw9CwEg#t=1207
- michaelochurch 12y agoBut where are all the successful large scale projects built with Haskell (or Clojure or whatever)? Standard Chartered has a huge amount of infrastructure in Haskell. Clojure's too young to have the types of stories you're looking for, but it's had plenty of moderate-sized successes (as has Haskell). The biggest FP project I was aware of was Twitter using Scala and they ended up completely backing away from it. Yikes. Scala is different from Haskell. Scala has a lot of features that don't play well together, it has stability issues, and it has inherited some of the Java culture which means that there's a lot of terrible Scala code out there. I've been working with Spark over the past month and I'm shocked by how bad the JVM/Hadoop legacy is. Spark itself is a neat idea. Getting it to work on an actual production cluster is a huge PITA. I'm tempted to just use Cloud Haskell. I know people who've moved away from Scala (either to Java or Clojure or Haskell). No one who's moved to Haskell has ever regretted it. I know of about 15 companies that use it (not all on million-line projects) and they're all happy with it. I'm only aware of one case, in the past 7 years, where a company moved away from using Haskell: they moved to F# because they picked Microsoft up as a client and MSFT wanted to be able to say that $COMPANY_X was using their products. The only other popular site that springs to mind is Hacker News, and frankly, it sucks. It's practically the Hello World of discussion forums. It's written in Arc, which lost to Clojure. Also, HN is as good as it needs to be. It's successful on its own terms. It doesn't need to be a wonder of software engineering.
- kyllo 12y agoHN is as good as it needs to be It will be once it gets a decent mobile view akin to viewing reddit on /.compact. Anyway, good point--I've heard people complain that Haskell is hard to learn/understand, but I've never heard of anyone actually using it in production and regretting that decision.
- virtualwhys 12y ago> The biggest FP project I was aware of was Twitter using Scala and they ended up completely backing away from it. Yikes. You must be joking, Twitter is far and away the largest Scala shop in the world. Presumably you're mixing up LinkedIn's recent move from Scala to Java. An important caveat is that they're still using the Play framework (Typesafe product), just now in Java instead of Scala. It's unfortunate that Play serves two masters (i.e. Scala and Java), but industry demands it -- the argument that FP is the one true way goes out the window in face of current reality: enterprise by and large will go with mature tooling and cheap developers in a large-team-friendly language like Java over a paradigm shifting FP language like Scala, Clojure, or Haskell.
- gclaramunt 12y agoWell, Twitter didn't backed away from Scala, but it doesn't qualify as purely functional. Turing completeness ensures there's no "true way", but some languages offer better abstractions than others. In my experience, once you learn the abstractions, the functional paradigm has an edge about the ability to reason about the code. Of course, the adoption of new ideas and technologies takes time, they need to be explored and fully developed. But even right now, you see many mainstream languages adopting functional flavors. I believe that eventually, there will be enough successful large scale projects build with pure functional languages to convince skeptics, there's nothing wrong with "playing it safe" and wait. If Scala is good enough as an example, I see an increasing adoption. As an anecdote, one of the biggest and Very Serious(tm) investment bank, is using Scala for most of their new initiatives, with a big team spread across the world. And the language itself was selected by a committee. You can't get more serious than that...
- pgrote 12y agoI still find it odd that Google Docs cannot handle a large number of people looking at a file. "Wow, this file is really popular! Some tools might be unavailable until the crowd clears." Even with the tools turned off there should be a way to simply view.
- revelation 12y agoThat's what it is saying? You can't use the tools, only view right now.
- pgrote 12y agoThere was no information loading at all when the link first appeared .. only the warning.
- nowarninglabel 12y agoGood stuff, but doesn't Hack language also solve this need? I'd guess a more likely route is PHP shops switching to Hack than to Haskell.
- solomatov 12y agoI disagree with the presentation a lot. * There's no widely used successful system written in Haskell. Yes, there's GHC, Agda, Idris and other research tools but they are marginal. * It's untrue that mutable state is the main reason of problems with code. You can manage state in Java and C# in any other language. * Haskell programmers are usually smarter than Java programmers, but they often don't want to work on tasks which they aren't very interested in, which are almost non existent, or have little business meaning. * Haskell, actually has a lot of design flaws. The worst of them is the scope of record fields.
- r0naa 12y ago> You can manage state in Java and C# in any other language. Yes but I think that the "value prop" with Haskell is that it forces everyone to abide to a certain discipline with respect to type safety and immutability. > they are marginal. Relative to what/whom? All the projects you have quoted are really successful and directly or indirectly pushed mainstream software engineering forward (i.e safer style).
- solomatov 12y ago>Yes but I think that the "value prop" with Haskell is that it forces everyone to abide to a certain discipline with respect to type safety and immutability. Thanks, to a large number of extensions with questionable utility, it's very easy to write not only unmaintainable code, but just unreadable code. >Relative to what/whom? All the projects you have quoted are really successful and directly or indirectly pushed mainstream software engineering forward (i.e safer style). They aren't safer style. They are more related to math than to programming. I believe, they could have benefitted from being implemented in more mainstream language than Haskell.
- dragonwriter 12y ago> There's no widely used successful system written in Haskell. Yes, there's GHC, Agda, Idris and other research tools but they are marginal. Google's Ganeti? Microsoft's Bond? > It's untrue that mutable state is the main reason of problems with code. Its certainly one of the biggest, if not the single biggest (the only thing I can think of that gets cited nearly as much is multithreading/parallelism, and the main source of problems in that domain is also managing mutable state in that context.) > You can manage state in Java and C# in any other language. Sure, Turing equivalence means there is very little difference in what languages can do, just in how suitable the abstractions they present are to enabling humans to do it effectively. > Haskell programmers are usually smarter than Java programmers, but they often don't want to work on tasks which they aren't very interested in, which are almost non existent, or have little business meaning. So, take Java programmers (particularly smart ones) and teach them Haskell. Bang, you've got Haskell programmers without worrying about the interest distribution among pre-existing Haskell programmers. Learning PLs, for skilled programmers, isn't a huge deal -- the good Java programmers won't have much problem becoming good Haskell programmers.
- chuckcode 12y agoPersonally I find selling excellence easiest without sweeping negative generalizations like they claim in their summary slides[1]. Presentation feels more like a blame game about how people have done things wrong in the past than highlighting success and features of Haskell. [1] From slide 152: - Old East Coast tech culture valued quality and correctness, weak on practicality and communication. - The new California-centric one emphasizes commercial practicality and communication but doesn’t give a damn about software quality or excellence.
- amazing_jose 12y agoI loved Haskell, seriously! The year was 1997 and my uni professor was contributing to Hugs (do you remember it?). But, while I was working my way through Monads and stuff other people were running circles around me in C or C++. The basics were "simple" (even for basic C++) and they concentrated in getting things done. Years later I launched my first start-up idea on Common Lisp. In both situation I learnt two hard truths: a) libraries and support are very important b) Architecture + basics >>>>> any particular technology Now we are in 2015 (nearly 20 years later) and Haskell has advanced as much as Common Lisp on regards of usefulness for the general business. People still consider them elite (or 1337!) languages for showing off, meanwhile the rest of the world (with its mediocre programmers and tools) are running circles again. Programs now are distributed around dozens, hundreds or thousands of machines. Latency, networks, deployments, services, data communication,... In the end I selected Python as my main programming language, following Norvig's advice that Python made for a good replacement for Lisp. I don't regret my decision not even a bit. Python paid/pays my bills. Yet, from time to time I read this posts and presentations and I feel a bit of envy for not being in a position where I could say «I reject your reality and substitute my own» and use Haskell or Common Lisp for main infrastructure to have the 1337 feeling again... like when I use obscure operative systems and end up in fruitless battles over how they are better even taking into account the lack of mainstream adoption (I'm staring at you Haiku-os!).
- deeviant 12y agoI really could not have said it better. Programmers seem much more likely to feel the need to prove they are smarter than their peers than the average population and functional languages seem to be a very popular I'm-smarter-than-you badge to bandy about. I think the penetration of functional programming speaks for itself. If a tool is clearly superior, you'd expect it to do great things, and to do it often. I hear tons of excuses but not one that has made any sense. To be clear, I'm not say functional languages are worthless, I am succinctly saying that they are not measurably more productive than the usual suspects and I say this after having a rather pleasant experience with erlang working on a rather huge ejabberd plugin.
- amazing_jose 12y ago
- BrandonY 12y agoReading the "How to Sell to Business" section convinced me as an engineer that I should not focus on Haskell. If Haskell programmers are a better deal for businesses because better programmers can be hired for less money, I should logically choose to be a Java programmer for the same reason.
- pestaa 12y agoThe Java expert will be hired to maintain a million LOC legacy shitstorm, whereas in Haskell you'd have at least a few engineering guarantees you won't get a headache on your first day.
- dasil003 12y agoThe paradox is that if you are focused on how to make the most money to the point that you are choosing your programming language based on estimated market value, you are likely not the caliber of developer that the top-tier tech companies are looking for. In other words, you can probably make $150k under an insufferable pointy-hair at any Fortune 500 company, but you won't get to work on cool stuff at Google or Facebook for $250k.
- JamesBarney 12y agoIf great engineers didn't care about money Facebook and Google wouldn't have to pay them 250k :).
- dasil003 12y agoWho said anything about not caring? It's about making technical decisions based on money.
- carterschonwald 12y agoI'm being paid more money at my current haskell job than any engineer I'm friends with who's under 30. And I know quite a few engineers.
- michaelochurch 12y ago
- portlander52232 12y agoMichael, big fan of your work here. Can you talk a bit more about how to avoid subordinating or dominating?
- michaelochurch 12y agoMy main point is to recognize that: (a) there are good business people out there, (b) the fact that they trust idiots on tech is our fault as much as theirs (we get too arrogant or too submissive and fail to convince them), (c) we need to recognize that we and they have orthogonal skill sets and aren't *prima facie* smarter, (d) and this requires understanding certain cultural differences. It's a long road, though. We're not a socially skilled tribe, for one. Secondly, there are a lot of terrible managers and business people in tech (more than in other industries) due to the Damaso Effect.
- solomatov 12y ago>(a) there are good business people out there IMO, good business people are people who are doing good for their business not using technology which their developers want them to use. They should consider things such as: ability to find developers, availability of training and books, availability well supported libraries, maturity of tools, code maintainability, etc. >(b) the fact that they trust idiots on tech is our fault as much as theirs (we get too arrogant or too submissive and fail to convince them) So, you are calling people who recommend to use technologies different from Haskell idiots, right? Or at least you pointing at them in your presentation. IMO, it's not the things which a professional should do. We have a lot of opinions, and it should be ok to have a different opinion. We shouldn't bash people who don't agree with us, otherwise, we will have (and I feel we already have) haskell cult.
- michaelochurch 12y agoIMO, good business people are people who are doing good for their business not using technology which their developers want them to use. I agree. The ethical problem I have is with the short-termism. The next-quarter culture is absolutely horrible and that's what I hate. It's not directly related to choice of language, but often it gets tied up in that. The fact that Haskell requires some investment (and not a lot of it) is a deal-breaker, because so many business leaders are short-sighted. They should consider things such as: ability to find developers Java wins on quantity. It's probably easier to find good developers in Haskell. Even though there are probably more good Java engineers than good Haskell engineers, Java has a much lower percentage so your interviewing costs are a lot higher. availability of training and books Both Haskell and Java have enough. availability well supported libraries, maturity of tools Haskell is getting there, and Java has a lot of "enterprise standard" libraries (e.g. Spring and Hibernate) that will take you in the wrong direction. code maintainability Haskell wins. So, you are calling people who recommend to use technologies different from Haskell idiots, right? No. If, for example, you're doing low-latency trading, you're not going to use Haskell. Sometimes you want to use C or assembly. And while I prefer static typing, I think highly of Clojure and its community. I think that there are a lot of idiotic reasons for using Java that get a lot of play. That doesn't mean that everyone who uses Java is an idiot. When I point out that businesspeople trust idiots when it comes to technology, that's not to single them out. Realistically, I can't always tell a good car mechanic or lawyer from a bad one. You find that out over years, because there are plenty of people who can talk a good game but don't deliver the goods.
- cpeterso 12y agoDoes the name "Brand X" on slide 29 refer to any specific language? Why add a mysterious third line to the graph when the presentation's primary focus is comparing the other two lines, Haskell and Java?
- duncanawoods 12y agoThat chart on slides 29-35 which claims you will be 600% more productive with Haskell than C#/Java after 5 years... Its just made up isn't it? This is part of the problem. If you try to convince someone smart, experienced but skeptical by making things up, you hurt your own case.
- CamperBob2 12y agoYeah, I like how he attacks the "false precision" of stack ranking and similar business practices, in the midst of an entire presentation full of it.
- octatoan 12y ago> KingdomLostException Yeah.