13 ms·
How to Become a Great JavaScript Developer
- kelvin0 11y agoLearn Dart :)
- tempodox 11y agoAs minimalistic as your comment is, I think it points to the single most important truth about JS: It's practically impossible for human beings to write “good” JS code. The only hope you have is using a sane language with sane concepts that can be compiled down to the JavaScript of the week (ES6, ASM.js, the works...). I would argue that JS should be handled analogously to Assembler: Good for you if you understand it, but only highly trained field specialists in protective suits dare to write production code in it. Go and get a decent compiler if you can't avoid using that technology.
- moron4hire 11y ago... I'll never, for the life of me, understand comparing a high-level scripting language to almost the lowest of low-level assembly languages, as if JS doesn't give you abstractions at all. If you can't write good code in JS, it's because you're a bad programmer.
- mitchi 11y agoAs a veteran C++ developer, I actually quite enjoy Javascript. Once I understood that Prototypes are linked lists and that *this is a pointer that changes according to 2 simple rules, Javascript became quite easy. I mean they even give you a GUI debugger. It's hard to get stuck for long, even though it's not not a Visual Studio. Like you said, you have already all the abstractions you need with this language. You can do complex things and for me, if I have composition, I'm pretty much already good to go.
- moron4hire 11y agoComposition is really the key.
- tempodox 11y agoJust as much as you're a bad programmer if you can't write good assembler code. And I don't mean that ironically. But academically being able to write in a certain language is still not the same thing as productivity combined with certain quality guarantees.
- moron4hire 11y agoIDK, I've been writing JS since it was invented, so 20 years now. It was one of the first languages I learned and even then I thought it was easy. Certainly easier than C, which I was also teaching myself because it was clear at the time that nobody took JS seriously. And that was at a time when there were ZERO libraries. It took almost 10 years before anyone started serious work on libraries for JS. Up to that point, you just copy-pasta'd snippets. I remember thinking it was easy like VB but was easier to show to other people. I still think of it in similar terms: easy to write like Python but a hell of a lot easier to deploy and show off.
- aaron-lebo 11y ago> I think it points to the single most important truth about JS: It's practically impossible for human beings to write “good” JS code. I'm sorry, but that's just an absurd statement. JS isn't that bad or confusing.
- kelvin0 11y agoIt's so easy to write code and have something running. It's a whole other affair with regards to a 'structured' project involving a team of devs. If you look at the myriad of libraries and frameworks for JS, just so the dev workflow stays at a sane level without ending up with masses of balls of muds. Including a .js within a .js has to be done outside of the language ... and that is just the tip of the iceberg last time I checked.
- tempodox 11y agoSo, what's the point of WebAssembly? https://brendaneich.com/2015/06/from-asm-js-to-webassembly/ https://brendaneich.com/2015/06/from-asm-js-to-webassembly/ Do you write that manually, too?
- aaron-lebo 11y agoI think the point of it is that so people have choice on the client side. That doesn't make JS impossible to write or a bad language.
- mightybyte 11y agoLol, nice. I was going to say "Learn Haskell", but I figured I'd be downvoted into oblivion. In all seriousness I am actually using that strategy and so far it seems to be working well.
- kelvin0 11y agoWell I mentionned Dart because it is a very small step up to learn when you know Javascript. Not sure the same can be said of JS -> Haskell ... don't get me wrong I started looking into Haskell and I find it fascinating!
- codygman 11y agoInstead of JS -> Haskell I think I'd recommend JS -> Purescript[0][1] 0: http://www.purescript.org/ http://www.purescript.org/ 1: https://leanpub.com/purescript/read https://leanpub.com/purescript/read
- mightybyte 11y agoAhh yes, PureScript is definitely a good suggestion.
- sailfast 11y agoThis is a good collection of resources that I have found are very educational and useful. That said, for me personally it was extremely important to dig into some problems concretely rather than by reading. "OK I've read about how I should do this in the ideal - now go actually set up an Angular app with a full test suite pointing at a REST API." Or perhaps - "I've got a great idea for some code art - let's try it out." Without the follow-through I found that I could keep up in a conversation but still had doubts and issues when it came to implementation. Doing it in anger, delivering a product, as many times as possible helps a good deal in moving toward greatness.
- landmark2 11y agotl;dr - to become a great javascript developer...learn javascript
- rilita 11y agotldr: ( my own, not the authors in the article itself ) - Read books - Learn libraries ( author seems to like node.js and recommends libraries associated with that ) - Do exercises - Learn how classes work in JS ( Note this is amusing to me since JS does not have classes in the typical sense [ they are implemented via libraries with prototypes and closures ] ) - Learn what Es5, Es6, ES7 are ( There are good things here, but be aware that most of these features are not implemented in most browsers and will requires shims and/or translators to even function. Be careful as they may work in your browser but not others. Test! ) - Read JS blogs and watch JS educational videos - Practice It's an okay article. If you are clueless how to start learning seriously this should help. Some decent books and websites are mentioned by name. I think the "every JS developer needs to learn XYZ" is a bit off though. This is one man's perspective.
- LukeB_UK 11y ago- Learn how classes work in JS ( Note this is amusing to me since JS does not have classes and everything about the way they are done is just craziness compared to a real OO language ) ES6 brings classes: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe... - Learn what Es5, Es6, ES7 are ( good for confusing yourself and writing code that won't work cross-browser... ) Babel means you can write ES6 and ES7 code and make it cross browser: https://babeljs.io/ https://babeljs.io/
- rilita 11y agoAre you kidding here? In ES6 classes provide nothing more additional than the closures already in use via a bit of extra utility code. Doubters should click the link here provided by Luke. It is filled with "To Be Determined" for all details of anything useful. Do you know what classes actually do in a real OO language, or are you just a fanboy of JS? Also, using shims or translators proves nothing. I can write in C++ and use translators to convert that to JS. What is the point here exactly? Adding extra confusing junk onto a weak language does not make the language "better", especially when the standards you are recommending people to learn aren't even finalized. Where is the Acid test for ES5, ES6, and ES7 features? Hell where is the Acid test for HTML5? Oh that's right; all of this is just a pile of nonstandard junk that people are begging for and isn't really implemented.
- fridek 11y agoThe best thing that happened to me as a JavaScript developer was being exposed to other languages. Especially the not-so-fancy Java and C++, really opened my mind about structuring code and planning for a long-term project. Knowing JavaScript and JavaScript frameworks is surprisingly useless for the type of work JS devs usually handle. The documentation often consists of TodoMVC type of examples and approaches. Hardly anyone explains how patterns like DDD, SOLID, advanced REST, etc. fit into this. The highly appraised Flux is in reality just a pub/sub system like many on backend (and still it's a huge step forward - it admits JS systems are large and complex). I'm just looking at a system design graph, preparing for a new job. There are about 30 nodes representing multiple services, databases, load balancers and processes on the backend. There are two for frontend - one says "JS" and the other "JSON". This is how most people think about frontend and to be a great JavaScript developer just don't be one of them.
- jakub_g 11y agoI agree a lot with it. I also think it's useful to work with at least one statically-typed language (like Java for example) because it teaches some good maintainability practices. In JS world, I've seen far too often creating objects in random places, as a map of parameters, passing them around, and injecting new keys to the object in other random places, and when such an object goes around too much and is augmented randomly in a myriad of ways, it's really hard to reason about it. In Java, you'd typically create a separate class for such an object, create fields, assign types to them and document them, and have a constructor which populates the fields with sensible defaults if not provided. Sometimes it's an overkill to do it this way, but often it pays off with a better understanding of the data model. In JS you have a lot of freedom, but too much freedom leads often to a mess when enough people are working on the code.
- Roboprog 11y agoI enjoy the freedom to use a map/object/parameter object as named parameters, speaking as somebody who has suffered through much Java ceremony. That said, JSDoc helps a lot: make a @typedef comment for parameter objects at the top of a file, then use the type in the @param annotations of the relevant functions. Makes understanding the JS code in an IDE much easer, as well as having something worth generating HTML documentation from.
- moron4hire 11y agoBooks are a waste of time. Most of them are garbage to begin with, and most of them are practically obsolete by the time they are published. Few have any lasting staying power. Besides, nobody ordained the author to be an authority on the subject. He was just a guy who wrote a book. It's zero indication of the quality of the content. Just write code. Practice, practice, practice.
- jackweirdy 11y agoYou say "Books are a waste of time" but all your explanation says is "Books can be bad". That's not the same thing.
- moron4hire 11y ago:| Because there is no objective way to evaluate the quality of a book before reading it, and because any useful information in most of the few good technical books is of limited lifespan, books are a waste of time. It's not just that books can be bad. It's that most books are bad, and having to wade through them is what makes them a waste of time.
- mightybyte 11y agoSo don't wade through random books. Get recommendations from other people and read only the ones that are highly recommended. Here are a few books that I see at the top of the lists almost every time this topic comes up: The Mythical Man-Month The Pragmatic Programmer: From Journeyman to Master Code Complete
- akilism 11y ago100% agree with practicing 100% disagree with "Books are a waste of time"
- steego 11y ago> Just write code. Practice, practice, practice. Writing code without guidance is probably the slowest way you can learn something. A good book or class will save you countless hours living with the consequences of your naive mistakes. Good writers and trainers forewarn people about pitfalls by providing fair warning about common mistakes. Better writers and trainers instill good mental models that timeless help the reader solve problems. I'll agree that there are plenty of bad books that give bad advice. The solution isn't to say books are a waste of time. The solution is to recommend better books.
- donatj 11y agoI 100% indorse "read libraries". There really is a lot of wisdom buried in them. I read through MooTools back in the day and I would go as far as to call the experience formative. Read frameworks you don't like and consider WHY they work like they do.
- murbard2 11y agoMissing advice: learn to program well in a few well designed programming language. JavaScript was designed in 10 days and the main reason it still exists today is incredibly strong path dependence. There's nothing wrong with wanting to become a great JavaScript developer, but one needs to become a great developer first, and JavaScript just isn't conducive to that.
- 91bananas 11y agoI personally am so over this argument. Sure, that is roughly a fact about the time in which it was designed... but that was 20 years ago. Since then there has been a team of some of the best programmers in the world maintaining and advancing the language.
- murbard2 11y agoThat's irrelevant; advancing the language isn't an exercise in programming language design, it's an exercise in getting everyone to support the extension and in avoiding breaking legacy code. It has almost nothing to do with the maintainer's talent as programmers or PL experts. If you doubt this argument, consider the fact that the horrible scoping, the weak typing, the insane casting rules are still here to this day; empirically you're wrong.
- aaron-lebo 11y agoWell, a lot of the little issues are being slowly fixed (see let and scoping in ES6). This goes back to the point of the person you are responding to. This is a thought more than a full-fledged argument, but perhaps little issues with the language actually can and do make people better developers when they are aware of them. My friend started driving a scooter. Dallas isn't particularly conducive to that. My friend says he has since become a better driver because he knows one little screw up by him or someone else can end his life. Similarly, you'd better be aware of weak typing and casting and code accordingly or you might get hurt. Of course, you shouldn't have to...but that doesn't make people worse developers. But the truth is, JS has a lot of features which make it great for becoming a good developer. It's less class-based than Ruby and has better lambdas than Python which I would argue make it better for functional programming than either.
- interdrift 11y agoThe 'great' developer has nothing to do with this description. It's not only about knowing/learning stuff,it's about coming up with smart stuff.
- adam12 11y agoI think he/she should have suggested that you actually work on some javascript projects that you are passionate about. Also, it seems like a big jump to go from doing exercises to giving lectures.
- clavalle 11y agoThis is all solid advice. Is there a 'Genius' (nee 'Rap.Genius') type resource that annotates well known open source code?
- kilian 11y agoYes, Genius: http://genius.it/5088474/ejohn.org/files/jquery-original.html http://genius.it/5088474/ejohn.org/files/jquery-original.htm...
- gluelogic 11y agoThanks for this link. I will be reading it for sure. I also stumbled on the annotated source of Underscore.js a few days ago (http://underscorejs.org/docs/underscore.html http://underscorejs.org/docs/underscore.html). Would love any more stuff like this that anyone knows of.
- anc84 11y agoWhy oh why are those not comments within the source file? It would help me so much to have comments like those in software... Generally I think that a linear step-by-step description is often not the best way though, often you would have to explain concepts or the bigger picture first.
- jashkenas 11y agoIf you liked that, here are some links to sister projects: Docco Source: http://jashkenas.github.io/docco/ http://jashkenas.github.io/docco/ Backbone Source: http://backbonejs.org/docs/backbone.html http://backbonejs.org/docs/backbone.html CoffeeScript Source: http://coffeescript.org/documentation/docs/grammar.html http://coffeescript.org/documentation/docs/grammar.html
- rrss1122 11y agoWhat prompted me to develop as a JavaScript developer was being put in charge of a major project that was mostly JS code. Up till then, I had done some JS work, using jQuery to add animations and interactions to a UI and some ajax. Doing this JS project exposed me to pretty much everything you can do with JS, and I learned it all pretty quickly so I could start contributing to the project. I only got this project too because the dev previously in charge of the project left the company and I asked about it. It's another lesson to new developers: never let an opportunity pass you by.
- humbleMouse 11y agoI think it totally depends on the problem domain you are working with. There are so many different ways to use javascript it is overwhelming. There are also lots of ways to structure it. I feel like a very good understanding of a widely used OOP language such as Java is a good place to start before jumping into the wild west of javascript programming.
- mhd 11y agoIf you're already a decent enough developer and just need to get your grips on JavaScript, I'd say that most books listed aren't that useful. A decent enough online reference will get you going and after that you'll have to consider that JS is a pretty large dung heap by now where you probably won't get a lot of mileage out of inhaling dust from the crusty parts. Unless you're an enterprise developer tasked with maintaining your company's Dojo application. If you're a new developer coming into JS from a more tabula rasa situation (possibly these days), I'd still say that most of those books are wasted, and you'd probably get a better mileage out ouf SICP or the GoF book than most Ninja/21days/Dummies tomes. The core of JS is small enough, and the rest is highly dependent on your task, scope and framework. No jQuery book will help you with your intranet extjs app or your state of the art fluxified React SPA. You'll have to wade through code to get there, preferably as much of your own as possible. And the most important thing: Pick something and stick with it. No mid-project framework/build tool/library changes. Even "obsolete" tech still works better than falling into the Duke Nukem hole. So don't get nervous about still using "grunt" when all the cool kids are using "gapoodle".
- wlesieutre 11y agoFor the decent developers picking up Javascript, http://learnxinyminutes.com/docs/javascript/ http://learnxinyminutes.com/docs/javascript/ is hard to beat. All the basic syntax and language features in one page without trying to explain to you what a while loop does.
- a3n 11y agoThis made me gag, years ago: // Statements can be terminated by ; doStuff(); // ... but they don't have to be, as semicolons are automatically inserted // wherever there's a newline, except in certain cases. doStuff() // Because those cases can cause unexpected results, we'll keep on using // semicolons in this guide.
- wlesieutre 11y agoI haven't gotten much into Javascript yet, but is there any reason I would not terminate with semicolons? Without understanding which "certain cases" won't have them inserted automatically, relying on that feels like asking for trouble.
- srpablo 11y agoTastes in books varies wildly between developers: there are many on there that I wouldn't say helped me as much as others, but to each their own! With that in mind, I'd put a plug in for David Herman's _Effective JavaScript_. It goes beyond simply stating the mechanics of JavaScript into what pitfalls can be had, and uncommon but critical factors to consider when writing your code. The point about UTF-16 code points in strings alone makes it a valuable resource. [1]: http://effectivejs.com/
- davidjnelson 11y agoBest JavaScript book I've read. Advanced topics!
- darby2000 11y agoJust adding my two cents. Wanna be a good JS dev? Go play around with a lisp. Like Clojure for a month or two. Get comfortable with functional programming. Then come back to JS. So many people come from a OOP to JS and they have a bad time with it. JS is more like a lisp with C syntax than it is a traditional OO language. Learning Clojure, not only improved my JS abilities, but just my over all programming maturity. IMO. Additionally, I agree with the author about reading books, and libraries. It's always good advice for any language.
- vinay427 11y agoInteresting, thanks for this perspective. As someone who started with C/C++ (and a hint of Python) but has recently started working in Clojure, I'm now very encouraged to re-try JS.
- mdup 11y agoIndeed. Personally I'm used to think in functional ways: map, fold, function composition, immutability... I'd like to be good at Haskell but I'm always having lots of pain dealing with it, because I never see the end of the learning curve. I've found JS to be a nice middle land where I can get productive functionally without too much hassle. It's like a good friend who understands my way of thinking without being in the way too much. Underscore.js hits the sweet spot for me: _.chain(...).map(...).filter(...).value() is verbose but surprinsingly readable. I'm not a fan of Python map() syntactically, and I absolutely hate C++11's std::transform.
- notduncansmith 11y agoIf you want to make that even less verbose, try myArray.map(...).filter(...) (those methods don't have to come from underscore, they exist on the Array prototype as of ES5).
- cle 11y agoI totally agree. If you've only been exposed to OOP, and you don't have the bandwidth for learning an unrelated language, then start using a functional library like Underscore. Just use it everywhere, even if you think it's ridiculous. Don't use for-loops, use _.each. Try to think of every problem in terms of chaining map, reduce, zip, pluck, groupBy, etc. Do whatever you can to avoid side-effects. Once you're comfortable with it, try reading "Functional JavaScript". You'll quickly develop a taste for when OOP or functional is appropriate, but I think the best way to get to that point is to immerse yourself in functional programming first, which might mean writing some ridiculous functional stuff, but the long-term payoff will be worth it.
- z3t4 11y agoTo be good at something, you do not need to know things outside of the area. It might however be helpful if you need to go "outside the box". But to be an expert at the things in the box, you only have to know about the box ... That said, before I started with Node.JS and understood it's "patterns" JavaScript was just some evil necessary to get things to work. But after learning the module patterns of Node.JS, JavaScript started to get fun!! And the more ppl that understands "modules", the more fun it gets! So go learn about modules and even try making your own! I guess Node.JS is now part of the JavaScript box.
- petercooper 11y agoFancy linking up http://javascriptweekly.com/ http://javascriptweekly.com/ where it's mentioned? :-) Not everyone knows where it is. Thanks!
- deleted 11y ago[deleted]
- ludwigvan 11y agoJust did. Thanks for the weekly btw :)
- petercooper 11y agoNo worries, thanks! We'll hopefully be linking this up on Friday too!
- beat 11y ago"A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects." — Robert Heinlein, Time Enough for Love I have a hard time thinking of "web programmer" as "polymath" and worrying that it's not specialized enough.
- stared 11y agoMaybe it's person-dependent, but I've learn most JS from MDN (https://developer.mozilla.org/en-US/docs/Web/JavaScript https://developer.mozilla.org/en-US/docs/Web/JavaScript) _and_ collaborating with others (plus a lot of blog posts, code snippents, and in general: reading code by good developers (side note: it's why I hate minification - I habitually read code on webpages)). For books the main problem is that they are getting obsolete quickly (JS is a rapidly-changing technology) and, except for very basics, somewhat opinionated and task-dependent.
- lgsilver 11y agoForce yourself to lint your code. Having clean code is like having good handwriting, it makes content of your projects easier to understand and drastically improves how you think about what you're building.
- hockeybias 11y agoI'd say for a lot of people, especially those with an OO background, the best way would be to start using TypeScript. Am I over-simplifying? Thanks.
- ExpiredLink 11y agoCan you become a great developer in a crap language?
- swsieber 11y agoYes. It's possible to draw a straight line with a crooked stick.
- kelvin0 11y agoCan I make a t-shirt with your quote? It's awesome!
- swsieber 11y agoBy all means - it's not actually mine though. It's a derivative of "God can draw a straight line with a crooked stick." It's generally attributed to Martin Luther, though I didn't really know until I looked it up just now :)
- HaseebR7 11y agoI've never learned JS completely, just dangerous half knowledge from stackoverflow answers or blogs. Should I jump into ES6 directly or learn ES5 and learn ES6 when it is implemented across all browsers ?
- acconrad 11y agoThis is sort of like asking should you learn Swift or Objective-C, albeit much less difference between syntaxes. You can certainly get the job done on ES6, and the future is certainly in that direction, but all browsers still run ES5, so if you want to get paid for your work, you'd need to still know that syntax. Babel is a great tool to let you use some of ES6's features now, but it will still help in debugging to know ES5 syntax since Babel transforms it at runtime.
- jhildings 11y agoIf you been doing a lot of JS for web stuff, and used SO etc to check things but don't have a thorough understanding of the language I would recommend the book "JavaScript the good parts"
- edwinnathaniel 11y agoJavaScript the Good Parts shouldn't be the recommended book anymore (and I think even Crockford himself said something along that line in one of his newer videos, couldn't find it though... it's been a while)
- jhildings 11y agoWhy not? I found it more useful than Eloquent Javascript at least
- aaron-lebo 11y agoJust learn ES5 and then take the 10 minutes it takes to learn ES6's features. It doesn't add that much.
- synthmeat 11y agoI definitely do not consider myself great JavaScript developer. Not even mediocre. Code by some people that now do JavaScript lectures, I've refactored and made at least order of magnitude faster, so there's that. There's one important thing I've already learned though and I'll do you a solid - be a total nazi to your code.[1] At the start, it's easy to get impression that it's all loosey-goosey-everything-works kinda thing, and it actually is...at small scale! When you get to medium-sized thing, all hell starts to break loose, and I'm not talking just callback hell. You can avoid all that with modest amount of discipline. I'm aware many people have qualms with JSLint, some even with JSHint. But it doesn't matter what you use as long as you keep consistency. Those two tools help you with that. If you can be disciplined without it, sure, go for it. Just reading on possible configuration options for JSHint already made me consider many potential pitfalls I wouldn't have even thought of otherwise.. As far as learning goes, I'm definitely recommending learning as-you-go. To hell with academics - this is JavaScript, language made in few weeks[2]. You can develop amazingly accurate feel for the language in spite of not knowing rigorous abstracts. You're not sure what new actually does, and you're on deadline? Make a note - "figure out new" - and move along. When you manage to scrounge few hours of your busy week, run through those questions of yours across plethora of amazing resources online, head over to #Node.js or ##javascript on freenode, ask and ye shall receive. In JavaScript, there's about a million ways one can make something work, an immense solution space. Are you sure your attack vector is good enough? Refactor aggresively! [1] I wanted to go with "anal" instead of "nazi". But you get the idea. [2] ...by some amazing dude though.
- kriro 11y agoI think that setting up a test environment is one of the bigger hurdles (it seemd more confusing for JS than for most other languages I used before). Starting with installing node and "node myfile.js" is pretty good to get going (writing hellow world, fizzbuzz etc.). I struggled quite a bit sifting through all the options after that (e.g. npm+Grunt+Browserify to be able to require stuff etc.). Maybe I'm imagining things but the simple "getting started" was quite complex for JS. Or in other words...the first steps are pretty hard imo. The inclusion of Backbone seems a bit odd. Isn't that also frontend-ish (like the pick one of Ember,React,Angular). I'd rather substitute it for Express.
- isisanchalee 11y agoI wish this post was for Ruby! I've already done most of these things for JS -_-
- Roboprog 11y agoI mentioned this elsewhere, but I thought it would make a nice "top level" comment: Learn to use (and use) JSDoc in your JS code. Having comments that generate a standardized index of your code, as well as being used by an IDE, greatly helps the comprehension of the code when you come back to it a day or two later.
- sjcrank 11y agoIn addition to these great points, I find it extremely helpful to spend some time reviewing the source of various open source JS frameworks. You can learn so much from patterns and techniques others are using, but that may have not been documented in the other listed resources.
- gauravgupta 11y agoI personally like to follow the best (and frequently updated) tutorials on crowdsourced tutorial websites like Hackr.io for example. Just my 2 cents.
- smlacy 11y agoNo. Not this. Net even close to this. Let me illustrate: How to become great at Sports: - Read books about sports. - Watch other people play sports. - Read in-depth analysis of past sports games. How to become great at Playing Violin: - Read books about playing violin. - Real sheet music by the great masters. - Listen to many concerts. It's inherently obvious that the above approaches are totally and completely wrong. How do you become good at anything? You practice it. You do it. You have a coach or teacher or mentor who can give you pointers, but lets you make mistakes. You have someone who lets you get things wrong the first time, so that you can see the consequences. There is a time and place for theory, for reading, for analysis, and this is too part of the learning process, but this is not at all the most important tool for becoming great at something. Theory, analysis, critique, history, and context all matter when learning any skill, but first, you must build the fundamentals. First, you must do the thing and once you reach a level where you really understand the thing, then and only then can you begin the more introspective task of theory and analysis. Even without these steps, the best way of becoming great is to DO.
- deleted 11y ago[deleted]
- o_____________o 11y agoKnowledge work is different. How to become great at Chess: - Read books about chess. - Watch other people play chess. - Read in-depth analysis of past chess games. How to become great at Math: - Read books about math. - Watch other people perform math. - Read in-depth analysis of math. You also skipped a key assertion from the author: "Do exercises and try to explain common JavaScript concepts such as inheritance in your own words." But you're right, nothing beats digging in and creating something.
- jtchang 11y agoNot really. The practice in knowledge work is to read and watch. That is in itself the practicing. You must work and do to become great at something.
- 11y ago
- ahallock 11y ago> Reading and understanding underscore will improve your functional programming skills. No. underscore does it wrong (check https://www.youtube.com/watch?v=m3svKOdZijA https://www.youtube.com/watch?v=m3svKOdZijA) Check some of the real functional libs like Ramda and Pointfree Fantasy
- deleted 11y ago[deleted]
- javabank 11y agoThey straight up stole the Aphex Twin logo: https://twitter.com/ustunozgur https://twitter.com/ustunozgur
- dj_doh 11y agoRead a book or six top to bottom, mix it with video and blog posts focusing on concepts that are deemed complex or critical in that subject. Build general purpose libraries, plugins, micro-framework or personal projects. Follow-up by validating your work with your community or sample audience. I have been taking the later route. When it's done. Read some more and build some more. Put it on a repeat loop. Look for some variation as it brings different perspectives.
- danbruc 11y agoBecome great in language X seems the wrong goal to me. An enormous amount of things and at the same time the most important things that make you a great software developer are completely language agnostic. And I would argue they are harder to learn through the lens of a single language and software stack. You then still have to become a productive software developer knowing your libraries and tools and their quirks but this seems secondary to me and easily compensated by your favorite search engine. Or by example - knowing when to use a set as opposed to a list is more important than knowing in which namespace you can find the implementations for language X.
- fapjacks 11y agoThis is awful and wrong. Always Be Coding. That's how you become a great JS developer. Or great anything. Practice makes perfect. It's said for a reason.
- alkonaut 11y agoI'd like to know how to learn to "accept" JS, coming from other languages. No really. How do I become a JS developer that doesn't whine all day long about all the little idiosyncracies of the language, or the tediousness of writing tests for things my compiler should work out? Obviously people enjoy writing JavaScript, and at least some fraction of these have to have been the kind of person that whined about the type systems in Java or C# being too weak. If you were one of those developers, how did you let that go (did you?) when becoming a javascript developer?
- mattdesl 11y agoIt took me a while. My background was Java, Python, ActionScript and a few other languages sprinkled in. After about a year working JS, its now my preferred dev environment. The turning points for me: - modularity - npm has really changed the way I program, for the better - Node.js tooling (including a Browserify, Babel, Webpack) will greatly improve your experience with the language - live reloading, zero compile time, instant visual feedback - the breadth of Browser/Node/npm APIs can make it a ridiculously productive language to work in - IDE plugins and linters can catch a lot of errors as you type - above all else; it has an amazing community of enthusiastic developers, tinkerers, scientists, artists, etc.
- notNow 11y agoHow many books did this guy plug in his piece? I really lost count at 10 or so ...
- pmalynin 11y ago1. Stop. 2. Switch to TypeScript 3. ??? 4. Profit!!!
- M8 11y agoWebAssembly will make both irrelevant in a few years.
- serve_yay 11y agoI don't think there's any other way than working with talented people. It shows you what they're better at than you are, and (maybe) what you're better at than they are. I did all this stuff and I thought I was pretty hot shit, until I joined the team I'm on now. You have to find out what you don't know that you don't know, and it's really hard to do that on your own.
- scelerat 11y agoMy breakthrough moment with JavaScript was reading Mark Jason Dominus' ''Higher Order Perl'', and realizing everything described there could be applied to JavaScript. That and just building a lot of things with it.
- malandrew 11y agoRead code. Write code. Repeat. Once you have developed an eye for good code, find better code to read, write better code. Repeat. This is the key. You need to move from "practice makes perfect" to "perfect practice makes perfect."
- pixel67 11y agoI just want to point out that 'JavaScript the Good Parts' is not a good first book for beginners. David Flanagan's book is a much better book to start off with or Zakas book `Professional JavaScript for Web Developers` is the one I would suggest, then Crockford's book. Nothing trumps practice though,just keep coding and breaking things just to fix them, that, imo is the way to learn anything.