Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm an 'okay' Javascript developer working on browser javascript and node.js. However because I'm self taught, starting from copying and pasting jquery, there are a lot of holes in my programming/CS education.

I don't really have the time to devote myself to fully learning all the CS concepts that might be taught in a real college program, and learning C or Scala or whatnot, I'm just too addicted to hacking and making things that work. On some level studying CS seems to be 'premature scaling' in Hacker News parlance.

But every so often I get struck by the thought that maybe there is something that I should really really learn to take my skills and productivity to the next level.

Is there a book, a list of concepts or things that I can study and learn in my 'down time' that would see reasonable returns on my productivity and ability in 1 - 2 months?

Thanks!

And yes, the only language I know and use is Javascript, though I have tinkered with Python (High School), Ruby (RoR), PHP (Drupal), and Assembly (Making Diablo 2 Mods) in the past.

Please note that a book like O'Reilly's JavaScript Web Applications is too easy for me and not really what I'm talking about.

share|improve this question
4  
As the almost always most important thing for any program is a good structure, I'd advice to read Clean Code by Robert C. Martin. Please note that book questions are generally discouraged according to the FAQ, although your question is very specific and could be considered ok. –  Falcon Sep 12 '11 at 8:56
    
I don't think you want to achieve a Computer Science-grade code quality standard but a Software Engineering one. Happy coding! –  vemv Sep 14 '11 at 10:17
1  
SICP && CLR. –  Keith Layne Sep 14 '11 at 10:54
    
As mentioned in several answers below - language is less important than logic. The part that I consider most important is understanding the difference between an if statement that acts as a rule, and an if statement that acts as an exception. Create more rules and less exceptions -- that will lessen the amount of work you do in the future –  Mikhail Sep 15 '11 at 13:05
    
Ask questions. Goto the JS chat room, and keep asking questions about things you don't know. –  Incognito Sep 16 '11 at 18:44
add comment

7 Answers

I would start with "Javascript: The Good Parts" by Doug Crockford. Also read his web site carefully.

If really want to understand computation check "Structure and Interpretation of Computer Programs" by Abeleson and Sussman. You can get it free online, or buy a hard cover. Its written using Scheme, but scheme is a pretty simple language and you will have no problem picking it up.

The other thing I would recommend is venturing out past JavaScript. Check out "Seven Languages in Seven Weeks".

O'Relly also has a page on path to Javascript Mastery:

http://oreilly.com/javascript/index.html

share|improve this answer
1  
+1 for SICP, it's a tour de force for important CS concepts and will expand your gas tank and even put more fuel in it. –  Macneil Sep 14 '11 at 11:07
    
Seven Languages in Seven Weeks doesn't seem that appealing but SICP seems like a must read. –  Mark Sep 14 '11 at 11:16
    
I loved 7L7W, but I love programming languages. That's just my prefrence –  Zachary K Sep 14 '11 at 13:56
    
+1 - there's also a great presentation that Doug Crockford did (paraphrasing his book really) available here: code.google.com/edu/languages/#_js_goodparts –  Demian Brecht Sep 15 '11 at 3:07
add comment

To master JavaScript I think you need to put as much effort as any other language, which I think Douglas Crockford explains well in The Good Parts. I haven't read the book and would instead recommend watching his presentation, which is both educational and entertaining, and I personally think it has made me a better JavaScript programmer.

Douglas Crockfords presentation of The Good Parts is freely available here: http://www.youtube.com/watch?v=hQVTIJBZook

share|improve this answer
add comment

Good programming practices transcend languages, and you would probably be better off looking to expand your knowledge without tying it strictly to JavaScript. Many concepts will be applicable once you understand them, but filtering the list of books you are willing to read to only JavaScript ones cause you to miss many of the best ones.

There are tons of excellent books out there which deal with this topic (let's call it software engineering), such as Refactoring: Improving the Design of Existing Code (halfway down the page), The Pragmatic Programmer: From Journeyman to Master, or on a management side Object Solutions: Managing the Object-Oriented Project to name just a few. Most of these books contain concepts which will change the way you think about development, regardless of what language you end up using, although admittedly the ones I've mentioned have an OO angle to them.

share|improve this answer
add comment

I'm a self-taught too and I started with Basic on a C64 in the 80es. Today, I am as well paid as any M.S. and I did not attend any CS classes apart from a single C++ course for electrical-engineers (while studying civil engineering that I soon gave up for programming).

I can't recommend a quick fix for your problem because I believe there isn't any. Build on what you already have - if you really understand assembly, you are more than ready for C. Teach yourself how to do pointer arithmetic, kill some time debugging memory allocation problems and reference counting before you move on to higher level (especially garbage collected) programming languages. The skills and discipline that you collect during hacking C/C++ will serve you exceptionally well no matter what fancy new languages may come into demand or in what industry you will be working in the decades ahead.

I appreciated that you didn't ask on how to become a better JavaScript hacker, and just want to encourage you to look even further - let JavaScript be to you what the 10 GOTO 20 stuff was for us old farts - a door opener to a wider sky.

share|improve this answer
add comment

I did go through the hoops of learning in the official channels and at first it did make me jump a bit when you brushed aside this education as superfluous. However I do also agree with you that over design is just as bad as under design, worst in a sense as it may convince people that designing may not be so good after-all.

Programming is not about languages or principles, it`s about structuring an idea, yours, or even harder, someone else's into a formal executable form. The methods that will most help you do this are not found in APIs or libraries though if you scratch the surface and see beyond the methods and objects you will recognize some of these methodologies. It is what makes the difference between an API that is easy to learn, obvious to use and hard to get wrong. After a short while you should be able to just guess without looking at the proper syntax and if the API is well designed you should be pretty close to what is actually needed.

That said, if I were to give you simple advices to make you a better Javascript programmer it would be this :

  • Get Crockford`s (+1 for Zachary) material about the language. It is by far the best I have found and the only one that guides you towards doing it right. Most likely the inspiration of all the good Javascript that appeared in the past years. Look around the website, there is plenty of video material as well which fits pretty good for a educational transit if you have the privilege to travel by bus or metro to work. This point alone will give you the significant returns you seek.

  • Read about SOLID. Then get back to Crockford's material, you will recognize a lot of that in his speech and in his comments about the language. You are a pragmatic guy so at first this stuff will seem a bit alien and too abstract for you, still, your perseverance will be richly rewarded as the principles sink in over time. I am still learning a lot around this (15 yr since graduation) and every time a new principle sinks in my code makes a big leap in quality making me overall more productive. Don't expect it to all come to you like an epiphany so do come back to it every few months as your understanding grows.

  • learn another language. it will help you career wise but also will be a source of teachings. Just to see how a different language implements the same ideas will give you a better grasp on these ideas. that said, for your profile I'm not sure that gearing yourself towards the Java or C# would be advisable. When used to the freedom of a language like Javascript, even after following Crockford's castrations, Java or C# will feel like a prison to you. I see that you have had some contact with Python, you can dig further in the subject or you can pick up on another language. Scala, F# are a bit harder but will give you more insight in some of the capabilities of javascript. Groovy, Ruby should also fit your profile fairly well and give you a good return on investment. I must say however that Python is and remains one of my favourite languages (I am fairly proficient on a bout 12-15 languages).

Hope that helped, best of luck in your learnings.

share|improve this answer
add comment

Regarding the CS stuff, these are in my opinion the most important basic concepts:

  • Chained lists
  • Hash-Tables
  • Binary Trees, AVL Trees
  • Queues
  • Stacks

Regarding data structures, this is stuff you should really know. It helps you to write much more efficient code afterwards.

Regarding algorithms you should at least heard of this stuff:

  • Complexity, O(n²), O(n), O(n log n)
  • Sort algorithms like Quick Sort, Merge Sort, Insert sort, ...
  • Tree traversing... In Order, Post order, ...
  • Recursive vs. iterative algorithms

That's stuff I heard in university in my minor "Algorithms and data structures". (That's how this lecture is called in germany.)

Regarding Javascript I recommend you to play around stuff like prototypes, it's quite interesting. Though you should wait to use them productively unless you did some private project with them. I find it really strange that only very few ressources (including "The Good Parts" as far as I can see) don't deal with them in thourough detail. But you rarely see large-scale Javascript apps anyway (yet).

Things that helped me in the past to increase productivity very quickly was reading blogs from people that use my favorite programming language. In particular check out reddit...

http://www.reddit.com/r/javascript/ http://www.reddit.com/r/python/ ...

Watch out for blog articles covering optimization and software design! That's stuff that matters ;)

Oh and regarding Javascript: Be sure to check out https://developer.mozilla.org/en/javascript In my opinion the best Javascript resource on the web...

share|improve this answer
    
"Knowing them prevents you from writing inefficient code." I would propose what you mean is "Knowing these makes you more aware that what you're writing could be inefficient" –  AndyBursh Sep 16 '11 at 15:47
    
@AndyBursh: Thanks, yeah I changed that sentence. What I mean to say is basically: They are the elementary school of efficient code. –  Philip Sep 19 '11 at 20:12
add comment

Yeah you can read books on algorithms or how to write more "effective and clean" code but I think it will be much easier (and cheaper) for you just to fork respectable github projects and look at the code. Then just follow up with Wikipedia or Stackoverflow on what you don't understand.

Since you are a Javascript programmer it might be good idea to understand how the Javascript parser and runtime (V8) works or how nodejs works. Those technologies use many of things @Philip mentions. Nodejs and V8 are also written in C/C++ which is always good to know a little of.

Unless you have incredible discipline I find studying something for the sake of knowing not as effective as picking a project or problem and learning on the way.

I think you will learn more (not just programming) by picking something challenging to tackle and then do research on how to solve that problem.

share|improve this answer
    
BTW how Crockford learned the "good stuff" of Javascript was trying to solve a problem: Children's Chat website he was building. –  Adam Gent Sep 16 '11 at 12:18
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.