
Annotation This text identifies key problem areas you might face when working with the language, and provides coding and design patterns as solutions. JavaScript expert Stoyan Stefanov includes several examples for each pattern as well as practical advice for implementing it.
My anecdote, since I already had projects in mind and just wanted to synthesize how things were glued together A to Z: I went to SourceForge/GitHub/BitBucket and cloned repos for projects for the language of choice, build them, run the tests.
Also, https://github.com/search and lookup stuff of similar topic / using the same libraries (words like MIT, ISC, Apache 2, BSD are a good sign). Then check if it's permissively licensed. Also, in the end, you likely won't ever end up forking or copying. You're just getting the knowledge of how it's glued, and probably will wire stuff in uniquely for your case.
Building these projects in itself teaches the ropes of getting an environment setup (googling build errors, checking issue tracker), dependencies, test suites, and building a production-ready package.
I kept the best projects I found at https://github.com/tony/.dot-config/blob/master/.vcspull.yam.... Purely for studying the source of.
Python : Flask, Werkzeug, Django, SQLAlchemy
JS : Express, Backbone, blog posts by Addy Osmani and JS enterprise architecture and Derick Bailey on Marionette (but i don't think the backbone would be as relevant today, it def paved the way to modern frontend we see today)
C++ : OpenTTD
In the end, there weren't many books I found espoused building projects. I already had an idea of what to build - I just needed enough to "ramp up", but if you want books:
JavaScript Patterns: Build Better Applications with Coding and Design Patterns
Examples applied directly to the task at hand. All about scoping.
A python book, that hits different areas than this JS book would be The Hitchhiker's Guide to Python: https://docs.python-guide.org/
C++: Scott Meyer books are great
General programming: Code Complete
- Javascript Patterns https://shichuan.github.io/javascript-patterns/: Good for wrapping your brain around scoping and how things flow in JS. It's a very nimble language. While you won't use every single one, internalizing their concepts are central to be efficient in wrangling JS and reading other's.
- Patterns For Large-Scale JavaScript Application Architecture https://addyosmani.com/largescalejavascript/
Docs / Articles:
- Callback functions: https://developer.mozilla.org/en-US/docs/Glossary/Callback_f... Absolutely mandatory.
- Currying: https://www.sitepoint.com/currying-in-functional-javascript/
- 'return this' for method chaining: https://schier.co/blog/2013/11/14/method-chaining-in-javascr...
Annotated Source:
(soak these in 10-20 minutes every day over a month or two)
- http://backbonejs.org/docs/backbone.html
- http://underscorejs.org/docs/underscore.html
Frameworks:
- None. Webpack 3 + jQuery + babel + pjax
Tips:
- The longer you hold off on a framework, the better. Focus on getting your stuff out the door, test coverage + CI feedback loop, core business data schemas, and trimming off technical debt. After a couple of iterations and months of stability, consider a/b testing a framework.
- Most libraries are still in ES5. Wrap your brain around ES5 is a sure thing. Not everyone is using newer JS features.
- In many programming languages in your webstack, you're likely going to be dealing with node for build utilities and compilation.
- Webpack, while it seems unintuitive at first, can be pretty nice once you get over the hump. It's like a miss of the old r.js configs and the declartive-ness of grunt.
- As a parting note, don't feel a necessity to buy into single page application and frameworks. They're a tremendous time sink and the ROI just isn't there.
JavaScript Patterns / Build Better Applications with Coding and Design Patterns / By Stoyan Stefanov
Start networking. You never know who you might meet. You have a better chance at landing your first job through an acquaintance as opposed to answering a help wanted ad.
Start attending meetups, now. My top recommendation would be OpenHack http://openhack.github.io/new_york/ While you don't have a portfolio of projects on a website, you most likely still have them on your computer. OpenHack may be good place to showcase what you're working on if someone shows interest. Those projects also come in handy for when you start landing interviews. I always took a computer to job interviews to showcase what I was working on and even did some live coding. There's also another advantage to doing it this way: You are in control of the interview and I feel it's a much better approach than sitting through a Q & A with a hiring team. It says, "I came prepared."
For your first job, don't undercut yourself on salary. At least make enough to live. Even if you find a company is horrible, you can still leave yourself open to other options. You might even land your next job, doubling your salary, through someone you worked with and recently left said horrible company. It may take your 2-3 employers to get to your desired salary.
I landed my first job through a random conversation with a neighbor (before that I was college dropout and an office temp for two months trying to land said job). It paid $28k and half of my month's pay went to cover rent for a studio apartment. I ate PB&J and an apple every day for lunch. The job was copying text from Word documents and PDFs, marking them up with HTML. At the time, the company was building a hosting subsidiary. 2-3 nights a week, I spent 3-4 hours volunteering my time with that effort, through which I picked up Linux. I landed my second job through a previous co-worker. Every job offer I've ever taken started with an acquaintance.
My recommendation is to pick an area/skill set and focus on building that out. Looking at what you listed, I'd most likely recommend JavaScript for you. Take a look at a front end JS framework like Angular, Backbone, Knockout, or React. Maybe even try all of them out. Eventually, you might have questions. As you do, Open Hack might be a great place to get help and pick up a few pointers. As you become familiar with JavaScript, look to expand your horizons with a JS backend technology like NodeJS and look at exploring frameworks/platforms like Meteor, DerbyJS, or Express.
If you do decide to go the JavaScript route, here are some resources to get you started.
http://eloquentjavascript.net/1st_edition/contents.html
http://bonsaiden.github.io/JavaScript-Garden/
http://www.addyosmani.com/resources/essentialjsdesignpattern...
JavaScript: The Good Parts by Douglas Crockford
Secrets of the JavaScript Ninga by John Resig
JavaScript Patterns by Stoyan Stefanov
As a side note, some of the most brilliant people I've worked with didn't have CS degrees (Music, History, English, etc). Their key strength was that they were passionate about what they were doing and were constantly learning.
“Education is the kindling of a flame, not the filling of a vessel.” ― Socrates
Useful books. The first is online and free (the other two are as well, somewhere): http://eloquentjavascript.net/
http://www.amazon.com/Professional-JavaScript-Developers-Nic...
http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp...
Solve toy problems to solidify knowledge of methods and syntax: http://coderbyte.com/CodingArea/Challenges/
Good material- lots of video and problems. Not free but worth it: https://www.codeschool.com/ (makers of the jQuery videos below)
Bootstrap - popular front-end framework: http://getbootstrap.com/
Actually build something! A To Do List, a website, a game.
See some different frameworks do the same things: http://todomvc.com/
jQuery: http://try.jquery.com/
Here is a good free node tutorial: http://nodeschool.io/
Some tracks to learn, and get connected with non-profits to make useful things: http://www.freecodecamp.com/
Contributing to open source projects is another route.
Learning more about the language is always going to help, though. I would suggest doing the CodeCademy track a second time to see if you've improved. Focus on writing efficient solutions that are better than what you would have done your first time around. Once that is done, give these resources a go:
- http://codeschool.com - http://lynda.com - http://teamtreehouse.com
I would also suggest purchasing these books, as they are somewhat the standard learning and reference resources:
- JavaScript: The Good Parts - JavaScript: The Definitive Guide
There are other books that will help tremendously, and a list of free ones can be found at http://jsbooks.revolunet.com
Other books I recommend:
- Eloquent JavaScript - Effective JavaScript - High Performance JavaScript - Maintainable JavaScript - Principles of Object-Oriented Programming in JavaScript - JavaScript Patterns - The Past, Present and Future of JavaScript - JavaScript Enlightenment - Secrets of the JavaScript Ninja