Hi, my name is __________ and I'm a mediocre programmer.<p>I've just kicked off the first 2 weeks of a significant project using only Javascript. This was entirely my own choice. I knew I'd have to write a lot of JS in the browser. So it made sense for me to bite the bullet and try to become as good as I could at JS. Equally I had to make a choice that I believed would work for my client in the medium-term, especially if I was not able to continue with the project at a future date.<p>This is my perspective (from the intellectual gutter): Javascript is hard to read and hard to reason about. It's also hard to achieve a style that I am entirely comfortable with. It's changing very fast. You learn things on the backend that are years from being universally useable on the frontend. Also: I seem to write <i>so many lines of code</i>.<p>That said I think I made the right choice. Ultimately the isomorphism argument is correct: at least I'm reasoning about the same kinds of things every day. I just came off 6 months of programming only Elixir and I could have used Phoenix for the backend, but I think I would have found the constant shifts in perspective very disruptive.<p>Which leads me to my main point: It isn't about the language.<p>After all, multi-threaded programs in a more conventional language are also very hard to reason about. Shared data is hard to reason about. Immutable data is also hard to reason about (or rather its consequences are hard to reason about). Message passing can also become hard to reason about. Pointers are hard to reason about. Functional composition starts out simple and then...you guessed it: it gets hard to reason about. Once things get to a certain level of complexity, once you get using anything to its full potential you find the place in which it's going to make your head hurt.<p>And for the plodders among us the answer is: libraries and patterns. Specifically, other people's libraries and other people's patterns.<p>So my recommendation to anyone that doesn't like Javascript: if you don't have to JS, don't. If you do, at least enjoy the good things:<p>* Promises: One of those things you only appreciate by trying to do it <i>the other way</i>: <a href="http://callbackhell.com/" rel="nofollow">http://callbackhell.com/</a>
* ES6: a lot of great features here. Makes an Elixirite feel almost at home: destructuring(pattern matching), arrow functions, generators and iterators
* Libraries: Amazing number of libraries. I have barely had to code one really smart thing myself.
* JSON: Think in JSON all day - now that's nice. Serializing things to Lists, Maps, Tuples and what have you gets old.<p>And also read books:<p>* David Herman: Effective Javascript
* Marijn Haverbeke: Eloquent Javascript
* Daniel Parker: Javascript with Promises
* Douglas Crockford: Javascript, The Good Parts (well actually I found this one hard to reason about :) )...