12 ms·
"I couldn't really learn Erlang, 'cos it didn't exist, so I invented it"
- hellerbarde 14y agoThis is very well written. A very interesting and verbose (not in a bad way) way of answering the everpresent question "What language should I learn?" PS: Yes, I know that not the whole discussion was about this question. Still.
- minikomi 14y agoI'm pretty blown away by how well written and civil a lot of posts are on this thread.
- rdtsc 14y agoErlang mailing is a pleasure to read. Even as mix of different ages and experience levels (heck, Joe is a regular poster), the conversation is always civil. I read it every day along with hn and a few other blogs. http://erlang.org/pipermail/erlang-questions/ http://erlang.org/pipermail/erlang-questions/
- minikomi 14y agoHmm... hn has been doing a very good job at convincing me to get my feet wet with erlang lately :)
- rdtsc 14y agoI certainly love it. If anything it helps think differently when facing problems. It makes you think about reliability, fault tolerance and concurrency in a new way. It is just as much a language as it is a new paradigm. There some languages and toolkits started to copy some features from Erlang (Rust, Go, Scala's Akka, ...) they are all still pretty far from it in terms of providing the whole ecosystem (the full package). Also Erlang has a great VM behind it (BEAM). It has a completely concurrent garbage collector and other nice things. That's why I am also excited about Elixir (I think there was a post here about that as well).
- S4M 14y ago>> Notice there is no quick fix here - if you want a quick fix go buy "learn PHP in ten minutes" and spend the next twenty years googling for "how do I compute the length of a string" I couldn't agree more on that one.
- rtpg 14y agoIf he were talking about actually thinking about programming techniques I'd agree but here he's talking about languages, and while the languages he lists are sufficiently different, saying it'd take years to master lisp after working in ML, or learning Javascript after knowing C. After the first couple of languages learning new abstractions shouldn't really take that long. In an ideal world easy programming solutions can be easily explained in the right language. We're not quite there yet but doing quicksort in ML doesn't require 5 years experience.
- johnpowell 14y agoI mostly use PHP. I googled that once. Should I feel shame for not writing my own function when it has already been done?
- lucian1900 14y agoProper schemas (based on an algebraic type system) with a simple serialisation would indeed go a long way. Sadly, there's still too much choice there as well. Even worse, many would reject the very idea.
- h2s 14y agoFor when the moderators inevitably change this post to reflect the page's actual title, here's the title under which it was originally submitted: I couldn't really learn Erlang, 'cos it didn't exist, so I invented it
- robgough 14y agoI thought that statement taken out of context sounded a bit arrogant (though perhaps well deserved!). However, when read in context it really didn't come across like that at all. Perhaps a title change in this case wouldn't be all that bad.
- DigitalJack 14y agoSurely it's a piece of Arc doing that. I can't imagine time and time again somebody is wasting their time changing titles. Perhaps the delay is from the software waiting for a good (low load) time to fetch the page.
- MiguelHudnandez 14y agoThe perfect low-load time to do something like that would be upon submission, before the link is shown to anyone. Also it's a good time to make sure it's not a 404 or 500. I think the titles are manually changed, because plenty of times descriptive titles are left intact.
- sgt 14y ago>> Things improved - I went to CERN and used the CRAY1 this could compile 100K lines of FORTRAN in 1 picosecond (ie about a zillion times slower than my mobile phone today) Sarcasm doesn't translate well in a thread like this, so just in case someone really thought it could compile 100K lines in a picosecond, dream on. :-)
- Ecio78 14y agoand what about here: "IDE's and revision control systems have just made matters worse - now you have all the old versions of the mess as well as the mess itself, and the IDE means you can't even see the mess." :-)
- venus 14y agoI don't think it's sarcasm so much as exaggeration; compared to the hours, days or even weeks he had to wait in the past, it sure seemed like a picosecond. Sarcasm would imply he was somehow denigrating or mocking CERN and/or the CRAY1 and I didn't get that vibe at all.
- gordonguthrie 14y agoI shifted to a Cray1 in 87 and I had a whole 25 minutes of CPU a year...
- gobengo 14y agoWhat a great writeup by an experience programmer.
- peteretep 14y ago"Hello, Joe?" http://www.youtube.com/watch?v=xrIjfIjssLE http://www.youtube.com/watch?v=xrIjfIjssLE
- laumars 14y agoJoe Armstrong did help create Erlang with Bjarne Dacker: Erlang was created at the CSLab by an initial team of Joe Armstrong, Mike Williams and Robert Virding. http://www.erlang-factory.com/conference/SFBay2010/speakers/BjarneDacker http://www.erlang-factory.com/conference/SFBay2010/speakers/...
- dexcs 14y agoI wish i had the time to learn that much languages and spend couple of years per language... I think the problem today is that we try to learn 3 or more at the same time what often results in bad code....
- 3pt14159 14y agoTo me, this list is great except for one small thing. - C - Prolog - Erlang - Smalltalk - Javascript - Hakell / ML /OCaml - LISP/Scheme/Clojure Javascript?! Over Ruby or Python or Lua? What is it with people liking Javascript. I really don't get it. What can I do that is so beautiful or mindbending that I can't do in python? From my experience there is only two reasons to learn Javascript: to be able to build web applications, or to write document store queries (MongoDB or Riak, although in Riak you can also use Erlang). Otherwise I just don't see what the big deal is.
- yvdriess 14y agoThe core Javascript design is a mix of Scheme and Self, which is interesting in its own right. Most people will recommend: http://shop.oreilly.com/product/9780596517748.do http://shop.oreilly.com/product/9780596517748.do
- justincormack 14y agoSo is Lua, just done more consistently...
- pekk 14y agoJavascript is a very different language from Python. It is in some ways more flexible and less prescriptive. You point out one of the non-overlapping use cases. Javascript performance has seen really intensive efforts. Javascript has grown a rather nice async ecosystem that Python just doesn't have. It's also exciting for people from the standpoint that everything feels newer and more up for grabs. Python is a rather old language. Any language is Turing complete so the big deal is a matter of style and tools and libraries and ultimately it's who you are working with and what you want to do.
- xradionut 14y ago"Javascript has grown a rather nice async ecosystem that Python just doesn't have. It's also exciting for people from the standpoint that everything feels newer and more up for grabs. Python is a rather old language." Python old? Not to be snarky, but I've got programs for the PDP-11 that dated Python's great-grandmother. Excitement in a language doesn't cut it, I respect productivity, environment and progress. For automation, data munging and analysis, Python is my secret weapon in a shop of MS SQL Server DBA's and C# ditto heads. Would have be nice if MS would have adapted IronPython instead of creating PowerShell... Yes, there are oodles of crappy Turning complete programming languages, but there's definative advantages to a much smaller sub-set of decent langauges and environments.
- ghc 14y agoJust for a moment, consider who this man is and what he has done. We would all do well to take a step back and consider his manner of response. Notice that he continued learning new languages after creating Erlang (instead of just evangelizing it at the one true language). He did not immediately say "choose these three languages" as if they were the only ones you could possibly learn. Does it really help our profession/hobby at all if we engage in language-elitism and snark? Even on Hacker News I've seen vitriol directed at Ruby, Python, Javascript, Haskell, to name a few recent targets. All languages have their place, even if that place is only as a lesson for future language designers. Encouraging people to build stuff, whatever the language, whatever the library, whatever the framework; that is what we should be doing. IF someone wants suggestions, or help deciding what to use, that is fine, but criticizing someone for the language or framework they use has become all too common and a stain on the character of our community. That's not to say honest criticism is unwelcome: All languages/libraries/frameworks/software can improve. But to belittle people for the choices they make, or to segregate ourselves into voluntary language-ghettos we are compelled to stay in by the force of public opinion...that goes against the spirit of what people like Armstrong worked hard to build. Maybe it started with "Worse is Better", maybe it started with alt.religion.emacs being taken a little too seriously, but it has been perpetuated by all of us, even Paul Graham (in Beating the Averages). At some point, this has to stop. We, as a community, must grow to support the betterment of hacking by creating and encouraging creation; not by petty vitriol and conformism based on fashion. Now, I've strayed pretty far from the point of the post itself, but Armstrong closed with such a salient point: If we stopped bickering so much about what is the "right language", "right framework", "right library" and instead encouraged particular protocols and documentation standards we'd all be better off for it.
- davidw 14y ago> If we stopped bickering so much about what is the "right language", "right framework", "right library" Programmers are sometimes maximizers rather than satisficers for this kind of thing. We don't want to know if something is ok and will get the job done, we want the best one. I think people argue for their language out of some sense of the network effects involved: if I can get more people using my language, there will be more libraries, more people to ask about problems, more people to hire/to hire me, more books, and so on and so forth. So I think there is some economic rationality to it.
- s_husso 14y ago>> The crazy think is we still are extremely bad at fitting things together - still the best way of fitting things together is the unix pipe Is that sad or pure genius?
- laumars 14y agoI struggled with that point of his. From a coding speed perspective, he's right. But from an efficiency perspective, even some of the slowest interpreted languages will run circles around a shell script. However it's still an interesting and thought provoking point. It makes you wonder about other ways of plugging different objects / modules together.
- bo1024 14y agoHe doesn't mean literally the "|" in bash, he means the general concept.
- laumars 14y agoIn a sense, it's the same thing. He's talking about the concept of fitting things together and refers to Unix pipes (in fact the example he gave was literally a string of piped POSIX commands ready for dumping into $SHELL). My point was that this concept doesn't scale well. As a productivity tool, pipes are invaluable. But you wouldn't want to write a performance critical routine using them. At the end of the day (and as Joe said himself), it's about picking the right tool for the job.
- disgruntledphd2 14y agoWhat's the difference between pipes and chaining functions? I can't really see much difference between grep | sed |awk somestuff.txt and (awk(sed(grep(somestuff.txt))). Or are you suggesting that function composition is not the right approach? In which case, I disagree, but I would like some more insight into your thought process on this.
- JBiserkov 14y ago> A couple of years should be enough (PER LANGUAGE). Reminded me of http://norvig.com/21-days.html http://norvig.com/21-days.html
- sambeau 14y agoI spat my coffee out at this bit: if you want a quick fix go buy "learn PHP in ten minutes" and spend the next twenty years googling for "how do I compute the length of a string"
- Joeri 14y agoHe's right though, PHP has no reliable way to obtain the length of a string in characters, unless you keep track of which character set a string is in and carefully manipulate the mbstring functions. Doing multibyte string handling properly in PHP is way harder than it should have been.
- sambeau 14y agoI spat my coffee out laughing. Because he is so right.
- guard-of-terra 14y ago"Things improved - I went to CERN and used the CRAY1 this could compile 100K lines of FORTRAN in 1 picosecond (ie about a zillion times slower than my mobile phone today)" I don't like how he mixes together some precise numbers (, RAM size) with completely unrealistic (you can't do anyting in a picosecond, you can't compile 100k likes of code without noticing the time it takes the even today on any hardware.
- huherto 14y agoyeah, yeah, I was also confused. But see the comment of sgt below(or above). It is sarcasm.
- _nato_ 14y agoJoe is fearless and an inspiration. For those with 25~ dollars to spare, pick up Joe's 'Programming Erlang' and never regret it. I _think_ differently after reading that book. I am mainly a musician, but what he uncovered for me regarding our brains and how we think blew me away.
- jasonlotito 14y agoJust going to second this comment. First, for reference, here is the book mentioned: http://pragprog.com/book/jaerlang/programming-erlang http://pragprog.com/book/jaerlang/programming-erlang But yes, I agree, the book is an excellent, enjoyable read. I wish I had more opportunities to use erlang in my day job.
- krenoten 14y agoHere's an interesting lecture (sorry, I couldn't find a non-split version) he gave at a university in Sweden (where Erlang has a much greater influence, ahhh the sanity of Northern Europe ;P) note - the sound is dim for the first few moments http://www.youtube.com/watch?v=9uIhawQ1G0I http://www.youtube.com/watch?v=9uIhawQ1G0I He goes into some of the choices that went into Erlang, and some interesting experiences he had as the project went forward. He gives a different list that he feels the students in attendance should learn: C, JS, LLVM Assembler, one of ruby or python, and one of Erlang or Haskell.
- ricardobeat 14y agoif you want a quick fix go buy "learn PHP in ten minutes" and spend the next twenty years googling for "how do I compute the length of a string" pretty much summed up the PHP experience :) If ALL applications in the world were interfaced by (say) sockets + lisp S expressions and had the semantics of the protocol written down in a formal notation - then we could reuse things (more) easily. nodejs apps are usually very close to that: small modular services interacting via sockets + events using json, protocol buffers, etc. Much like the unix pipe philosophy applied to servers. If you didn't study CS and want to improve your knowledge of algorithms, I found Coursera classes to be very good.
- politician 14y agoNavel-gazing aside, Armstrong suggested that a good language would consist of closed forms interacting over formal protocols. What languages fit that description?
- codewright 14y agoEiffel?
- teamonkey 14y agoCORBA springs to mind.
- politician 14y agoTerrifying.
- dysoco 14y agoI'm interested in Erlang, have read a lot of good things about it lately. However I've not tried it yet because I don't see how it is going to help me... I already know some functional programming (Scala, Haskell) and I don't work with large, distributed software or databases. I'm afraid I'm going to learn it, not finding something useful to do with it, and then "forget" it.
- danieldk 14y ago> I'm afraid I'm going to learn it, not finding something useful to do with it, and then "forget" it. I am more or less in the same boat. I picked up 'Learn You Some Erlang for Great Good'. Fun book, fun language, what other motivation does one need? ;)
- jeffdavis 14y agoIn many ways, SQL is the protocol by which we combine programs together.
- dragonwriter 14y agoSQL is not a protocol in the sense that Armstrong is using, which is (approximately, at least) a specification for the acceptable messages (including state transitions that change the acceptable messages) over a communications channel between two processes.
- jeffdavis 14y agoWell, it's not thought of as a "channel between two processes". Maybe more like a hub, except it actually stores data (which is similar to an async protocol that buffers/queues messages). But that's all kind of irrelevant. The purpose that a database serves is a good replacement for other kinds of IPC. It imparts meaning to data and allows applications to communicate in a common way. Think about it this way: every language has a different way of representing some missing value -- null, nil, undef, Nothing, None -- and all are slightly different. But the application is probably influenced by SQL NULL semantics more than any of those. (EDIT: reworded this paragraph) Databases pretty much own everything, which is something I think that language people should spend more time focusing on. Maybe the reason that cool new language isn't 2X as productive as python is because you are still using the same database. Language designers need to focus on informed innovation in the database space if they really want to make an impact. "including state transitions that change the acceptable messages" That sounds an awful lot like DDL to me.
- cturner 14y agoIt's true that it happens, but it's the antipattern of our age. When you have seven applications written against a single database (plus a load of complex SQL that operators use for support), it becomes impractical to refactor the schema. Now your business is evolving around rotting data structures. Companies like Oracle make their money by convincing people that they should adopt this misdesign, and then licensing expensive training, staff and technology to help manage it. Even putting aside the management issues, databases+SQL is a synchronous communications model, so you can't stream data effectively.
- DigitalJack 14y agoI have to say this made me feel better that I'm not a wizard in Clojure. If one could be said to be "in love" with a programming language, that would be where I am at with clojure in terms of feelings. But I've only scratched the surface. I sometimes sit and watch the #clojure channel on freenode, and I find it inspiring, interesting, entertaining, and disheartening all at once. Inspiring because I get to see the people who write the awesome software and write the terrific books interacting, and I'll be danged, they are kind and good people! Interesting because of the problems they are working on and discuss, asking each other for advice or just plain help. Entertaining because they aren't just kind and good, they are also lighthearted sometimes very funny. Disheartening because sometimes I look at the pastebin code, or the code they message to the clojurebots, and I am left scratching my head. However, having read this "oldtimer's" post, I'm inspired to know that it's OK to not become a master in programming in 24 hours.
- programminggeek 14y agoWhat is most interesting here is the ideas about protocols and communication. To me, that's what much of software development is getting wrong both on the small and on the big. In a single app, objects should talk to each other and databases and queues and junk via protocols, not by being glued to an ORM or a particular implementation of a queue or whatever. Most devs don't do this because it's more work, but you end up with a much cleaner/more testable structure to work with. On a higher level, many/most programs aren't made to communicate with each other at all. Look at web software, it's all about communicating with a browser and that's it. The API driven movement is helping things along, but it's still a HTTP Browser driven mindset complete with holy wars about REST/Hypermedia. Unix pipes are a great example of what is possible with standard communication protocols, but it seems like it could be taken further. What if you could pipe a stream of API's together? Yahoo's YQL and Pipes plays in this realm, but you still have to kind of glue pieces together yourself. Imagine if you could say... fb search --name 'John Doe' --location 'Chicago, IL' | linkedin --filter 'Ruby Programmer' | twitter tweet 'Hey check out our ruby meetup next week' That's a somewhat contrived example, but it would be great if we could do something that simple and not just via a command line, but from any language in a similar amount of code. That would be a step forward I think.
- nanoscopic 14y agoThis person may be "important", but a lot of the comments about languages seem to be borderline flamebait. Also, the mention of -many- languages, but the deliberate lack of any mention of Perl seems odd to me. I really dislike PHP myself, but there is no need to bash it.
- Irregardless 14y agoWhat would I recommend learning? - C - Prolog - Erlang (I'm biased) - Smalltalk - Javascript - Hakell / ML /OCaml - LISP/Scheme/Clojure A couple of years should be enough (PER LANGUAGE). A 'beginner' should start by spending 14 years (minimum) learning 7 languages? I was starting to agree with him when he mentioned the paradox of choice that programming beginners face today, but that recommendation is beyond ignorant. Becoming a veteran polyglot is not the only way to break into the programming field. This is exactly the type of elitist BS that we don't need -- scaring beginners away by giving the impression that they face an insurmountable cliff from the start. Should we also mention that they need a minimum of 3 master's and 2 doctorate degrees? I don't think I've heard of a single successful programmer with anything less. Surely no one has ever dropped out of college and acquired vast amounts of wealth at an early age by programming.
- stiff 14y agoThis is a general problem with asking masters in some discipline about the best way to learn - they almost always tend to recommend simply doing what they did, but they do not say "I did x, y and z", but "x, y and z are the best way to learn" and what is worse some people actually take those recommendations seriously. The problem with this is twofold: first, the times are always changing and yesterdays path is seldom adequate today anymore and second, progress is made by the younger generations not having to repeat the mistakes of the older ones. So, if you want good recommendations for learning, ask the people who actually teach others on a daily basis. I think 2-3 good courses in programming languages can compress a lot of the knowledge you would gain following this recommendation in a much shorter period - "Structure and Interpretation of Computer Programs", "Concepts, Techniques and Models of Computer Programming" and "Programming Language Pragmatics" are three excellent textbooks that go in this direction. But then, if you strive for mastery, and I think that's what Dr. Joe Armstrong is interested in, it is nothing exceptional to spent 15 years learning.
- lucian303 14y agoThese are opinions to be taken with a grain of salt. Especially IDE bashing. A good IDE is more than just a "clicky thing" and you know what, it helps delve into the hundreds of thousands of shitty lines of code that this author or others have written over the years. As far as a universal language for communication? How many have tried and failed? XML, JSON, YML, WTF? No one is immune from bad code. As far as teaching technique, that's debatable. I think JS is a great starting place as its build/runtime is already (I would hope) familiar to the learner. Then from there, go up, down, and in the middle. C for low-level. Python might be a decent choice. You don't have to spend a couple of years in each. In fact, since the field is so big, it really is impossible to catch up to 20 years of experience with 7 languages in 2 years. Focus on something you LOVE and go into that domain. If it's web, do PHP/JS (or whatever stack), for iOS/OSX do Objective C. For performant native apps, probably C, Python, or C++. Kernel, C. Etc. Or perhaps, a functional language like Erlang might be more suitable to your field. It is possible to get 20 years of experience in about 5-7 nowadays with the tools available if one focuses and spends time developing one's career and isn't afraid to read code with or without help from IDEs (because most code is shitty). This post is total bullshit.
- melvinmt 14y agoI'm curious to see what Joe thinks about Go.
- jlgreco 14y agoGo has always struck me as a "worse is better" take on Erlang, so that would definitely be an interesting opinion to hear.
- codexon 14y agoI was evaluating both languages recently, and the biggest distinction is that Erlang does context switching per "reduction" or function call while Go does context switches only when a go-routine explicitly yields or a message is sent/received. This means that Erlang can get finer time shared concurrency at the expense of speed. Anything other differences such as syntax is relatively trivial.
- AlexDanger 14y agoThe crazy think is we still are extremely bad at fitting things together - still the best way of fitting things together is the unix pipe This is something that resonates with me. I'm never been a 'nix person but this is a very attractive pitch for getting stuff done. It is, after all, how we build things with LEGO. I went to a Java school so my OO indoctrination was strong by the time I graduated. Now I'm really starting to crave a development paradigm by composition rather than inheritance. My job title is no longer that of a programmer but I write utilities and library daily to help me with my 'real' job. It helps me get stuff done. So my question - since I primarily work in the MS world, does PowerShell offer the same flexibility and utility of the Unix pipe? I'd never thought of taking the time to learn it until reading this post.
- blumentopf 14y ago"In the beginning I looked around and couldn't find the car I dreamed of. So I decided to build it myself." ("Am Anfang schaute ich mich um, konnte den Wagen von dem ich träumte, nicht finden. Also beschloss ich ihn mir selbst zu bauen.") -- Ferdinand "Ferry" Porsche on inventing the 356
- ericbb 14y agoI'm not big on IDEs either but how can you dislike revision control?