├── .gitignore ├── .jshintignore ├── .jshintrc ├── README.md ├── STATUS.md ├── backers.md ├── examples ├── node_modules │ └── sum.js └── software-testing │ ├── section-0 │ └── example-1.js │ └── section-5 │ ├── example-1.js │ ├── example-2.js │ └── example-3.js ├── for-kids.md ├── getting-started └── index.md ├── important-links └── index.md ├── package.json ├── refund-policy.md └── test └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | npm-debug.log 2 | node_modules 3 | !examples/node_modules 4 | -------------------------------------------------------------------------------- /.jshintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | !examples/node_modules 3 | app/node_modules/public/js/vendor/html5shiv.js 4 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "maxerr": 10, 3 | "node": true, 4 | "browser": true, 5 | "typed": true, 6 | "worker": true, 7 | "browserify": true, 8 | "predef": ["define", "require"], 9 | "camelcase": false, 10 | "curly": true, 11 | "eqeqeq": true, 12 | "eqnull": true, 13 | "forin": true, 14 | "freeze": true, 15 | "immed": true, 16 | "indent": 4, 17 | "latedef": true, 18 | "newcap": true, 19 | "noarg": true, 20 | "noempty": false, 21 | "nonbsp": false, 22 | "nonew": true, 23 | "plusplus": false, 24 | "quotmark": false, 25 | "undef": true, 26 | "unused": true, 27 | "strict": true, 28 | "maxparams": 5, 29 | "maxdepth": 5, 30 | "maxstatements": false, 31 | "maxcomplexity": 5, 32 | "validthis": true, 33 | "maxlen": 160 34 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | eejs-screenshot 2 | 3 | 4 | Learn JavaScript with Eric Elliott 5 | ================================== 6 | 7 | An online course series for future application builders. Ready to jump in? [Learn more](https://ericelliottjs.com/). 8 | 9 | ## Status 10 | 11 | **We release content on a regular basis, and there is a lot of training available right now.** For details on materials that are currently available, [check out the shop page](https://ericelliottjs.com/shop/). 12 | 13 | We believe in **frequent updates** instead of hard deadlines. This allows for the flexibility of real life. For example, it allowed us to react to the ES6 & React takeover that happened in 2015. ES6 took over a lot faster than anybody predicted it would. At the same time, React took off like a rocket ship. Providing a constant stream of new lessons and training rather than a rigid plan with hard dates allows us to stay nimble and deliver training material that's relevant to you today. 14 | 15 | **We also believe in providing constant, ongoing value to our customers.** As I type this, in the past week and a half, we've created 5 new videos, including the first 3 episodes of [the new Shotgun video series](https://medium.com/javascript-scene/shotgun-javascript-video-experience-c8b6a7771d49), a screencast that lets you ride shotgun while I build real apps, explaining and teaching every step of the way. 16 | 17 | We also released a free sample lesson you can watch right now: ["What is a Pure Function?"](https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-pure-function-d1c076bec976) 18 | 19 | 20 | ## About Eric Elliott 21 | 22 | I’m **Eric Elliott**, author of [“Programming JavaScript Applications”](http://pjabook.com) (O’Reilly). 23 | 24 | I have contributed to software experiences for **Adobe Systems**, **Zumba Fitness**, **The Wall Street Journal**, **ESPN**, **BBC**, and top recording artists including **Usher**, **Frank Ocean**, **Metallica**, and many more. 25 | 26 | 27 | ## About @JS_Cheerleader *(Producer/Director)* 28 | 29 | [@JS_Cheerleader](https://twitter.com/js_cheerleader) has interviewed the brightest stars at Sundance, worked on national television shows & film, and recently won the hearts of tech scene insiders as a JavaScript evangelist, connector, and opportunity creator. Yay! 30 | 31 | 32 | ## Don't Learn JavaScript - Learn How to Build Amazing Things 33 | 34 | It's easy to find people with JavaScript experience. It's extremely hard to find JavaScript developers who really understand the craft of building great applications. 35 | 36 | *99 out of 100 candidates I've interviewed lack the qualifications to hit the ground running.* The fact is, [JavaScript Training Sucks](https://medium.com/javascript-scene/javascript-training-sucks-284b53666245). That's the problem we're solving with these courses. 37 | 38 | To fix that, I wrote a book called [“Programming JavaScript Applications”](http://pjabook.com) (O’Reilly). It's finished and shipping, and it's already helping a great deal... but it's not approachable for novice JavaScript developers-in-training. 39 | 40 | What we need is a solution that can guide programmers of any skill level from the first steps to completion of a world-class JavaScript application, front-to-back. That's where these courses come in. 41 | 42 | 43 | ## About the Courses 44 | 45 | ["Learn JavaScript with Eric Elliott"](https://ericelliottjs.com) engages students on many levels: 46 | 47 | * **Audio / video:** 7-10 minute video instruction 48 | * **Hands-on practice:** Online Workbook text to introduce concepts and interactive, self-grading exercises 49 | * **Textbooks** "Programming JavaScript Applications" is included with all course bundles, and a new book is in progress that will use ES6+ examples throughout. 50 | * **Collaboration** Create an agile study group to share encouragement and tutoring as you progress. 51 | 52 | 53 | ## Bundles 54 | 55 | The courses are currently being offered in a [Lifetime Access Pass](https://ericelliottjs.com/product/lifetime-access-pass/) only available for early supporters. Here's what it includes: 56 | 57 | * Lifetime membership 58 | * In Depth Video + Text + Interactive Exercises 59 | * All courses + “Programming JavaScript Applications” book 60 | * Live webcasts 61 | * Shotgun with Eric Elliott: A show that lets you ride shotgun while I build real apps. 62 | * Full video archive (courses, video blog updates, webcast recordings, etc…) 63 | 64 | 65 | **Course topics** 66 | 67 | * JavaScript Software Testing with Sauce Labs 68 | * The Two Pillars of JavaScript: Prototypal Inheritance 69 | * The Two Pillars of JavaScript: Functional Programming 70 | * Server Side Programming with Node and Express 71 | * More courses to come: Asynchronous Programming, JavaScript Fundamentals, etc... 72 | 73 | 74 | ### JavaScript Software Testing with Sauce Labs 75 | 76 | ***The only thing that matters in development is that users love the product.*** 77 | 78 | This course is **a step-by-step guide to building a product that users will love.** These lessons are hard won over a long career, and borrow heavily from many other software development teams who have contributed to the emergence of **lean startup culture** that has transformed Silicon Valley, and **transformed the way large enterprise organizations produce great products, too.**. 79 | 80 | I have worked at **organizations that failed to test products well.** The common result is that *products took weeks, months, or years to ship software and updates.* I consulted for one firm that shipped a new release about once every two years, and even with all that time to prepare, **integrating code** from several teams into one product without breaking the build **was a nightmare.** 81 | 82 | Every time we would try to get the build ready somebody would submit a bug fix or a new feature that conflicted with code that somebody else had changed. We had dedicated release engineers on the case to help resolve conflicts and get the build passing QA again. **Broken processes made us miss target date after target date.** I wanted to do something about it, but the root of the problem ran deep, from inward thinking product management to deeply ingrained developer habits. Every process change we managed to implement was a hard battle against the dysfunctional corporate culture. 83 | 84 | A few years later, I worked at another company — **a five year old startup** at the time that had taken a whole industry by storm and become a global leader. We were growing the business at a very fast clip, hiring as fast as we could get qualified candidates in the door — but we had missed several release date targets already, and **we struggled to implement new processes while we were trying to onboard new recruits.** 85 | 86 | By way of contrast, I have also worked with **large enterprise organizations who have taken lessons from the lean startup movement** and somehow managed to escape the old corporate culture and embrace working in small, agile teams with tools automating the process of testing and product integration. 87 | 88 | **We shipped code to production on a daily basis,** and even at a big company with tens of thousands of employees, we were nimble enough to respond quickly to customer needs, ship bug fixes quickly, and integrate important new features dreamed up by the product teams. 89 | 90 | Good agile teams are effective because they know how to fail fast on a strict budget, and learn lessons quickly. From the customer's perspective they appear responsive to the costomer's needs. A high quality testing process is the cornerstone of good agile developement. 91 | 92 | In this course, you'll be guided through a product development process that works -- one that I've adapted from my experiences working with companies of all kinds, from tiny startups to market leading enterprise businesses. I've taken the best ideas from each, and distilled that hard won wisdom into ten minute video chunks interspersed with text, exercises, and real-world examples. The course is specifically targeted to JavaScript developers, so all the examples and exercises will be relevant to the things you want to learn how to do. 93 | 94 | The value of these lessons can't be overstated. The ideas, tools, and techniques in this course will inform your career and help you make confident, data-driven decisions with a real potential to make a strong impact on the bottom line. There is nothing else like this on the market at any price. 95 | 96 | 97 | ## Supporting a Good Cause 98 | 99 | We're on a mission to end homelessness. There is a global movement to end homelessness by providing the homeless with free housing. Intake tracking studies show that housing the homeless is less expensive than letting them live on the street. Once they're in a stable home environment, they are much more likely to escape the grip of poverty and become productive, self-reliant citizens. That's where you come in: Your support allows us to help housing-first programs implement effective job-training programs for the homeless. We're teaching the homeless how to code, and helping them into rewarding careers. 100 | 101 | *Together we can change the world.* 102 | 103 | *[~ee](http://twitter.com/_ericelliott)* 104 | -------------------------------------------------------------------------------- /STATUS.md: -------------------------------------------------------------------------------- 1 | Status: Learn JavaScript with Eric Elliott 2 | ========================================== 3 | 4 | **We release content on a regular basis, and there is a lot of training available right now.** For details on materials that are currently available, [check out the shop page](https://ericelliottjs.com/shop/). 5 | 6 | We believe in **frequent updates** instead of hard deadlines. This allows for the flexibility of real life. For example, it allowed us to react to the ES6 & React takeover that happened in 2015. ES6 took over a lot faster than anybody predicted it would. At the same time, React took off like a rocket ship. Providing a constant stream of new lessons and training rather than a rigid plan with hard dates allows us to stay nimble and deliver training material that's relevant to you today. 7 | 8 | **We also believe in providing constant, ongoing value to our customers.** As I type this, in the past week and a half, we've created 5 new videos, including the first 3 episodes of [the new Shotgun video series](https://medium.com/javascript-scene/shotgun-javascript-video-experience-c8b6a7771d49), a screencast that lets you ride shotgun while I build real apps, explaining and teaching every step of the way. 9 | 10 | We also released a free sample lesson you can watch right now: ["What is a Pure Function?"](https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-pure-function-d1c076bec976) 11 | -------------------------------------------------------------------------------- /backers.md: -------------------------------------------------------------------------------- 1 | Meet the Backers 2 | ================ 3 | 4 | This project was [funded on Kickstarter](https://www.kickstarter.com/projects/ericelliott/learn-javascript). We raised 250% of our goal. These courses would not exist without the support of the following backers: 5 | 6 | 7 | ## Sauce Bundle 8 | 9 | * dantavious 10 | 11 | 12 | ## 3-Course Bundle + Character in a text adventure game 13 | 14 | * Ides 15 | 16 | 17 | ## 3-Course Bundle 18 | 19 | * workFunc 20 | * William Griffiths 21 | * Bob Milani 22 | * manoj 23 | * Aviv Avital 24 | * Matthew Riley 25 | * jeremiahkonrad 26 | * Dave Hylands 27 | * Wayne Brissette 28 | * Roger Perrett 29 | * David McLaughlin 30 | * ebsoft 31 | 32 | 33 | ## 1-Course Bundle Backers 34 | 35 | * Christopher Walker 36 | * His Majesty King Andrew Foster 37 | * James Meehan 38 | * Price Murry 39 | * Alan Musselman 40 | * Matt Lindsey 41 | * GumGumKing 42 | 43 | 44 | ## Primer Course Video Backers 45 | 46 | * Rafał Pocztarski 47 | * Dave Nugent 48 | 49 | 50 | ## Adventure Game Backers 51 | 52 | * Erik Erwitt 53 | * Rudy Jahchan 54 | 55 | 56 | ## Additional Backers 57 | 58 | * imma 59 | -------------------------------------------------------------------------------- /examples/node_modules/sum.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function sum() { 4 | var 5 | args = [].slice.call(arguments), 6 | result = 0; 7 | 8 | while (args.length) { 9 | result += args.shift(); 10 | } 11 | 12 | return result; 13 | }; 14 | -------------------------------------------------------------------------------- /examples/software-testing/section-0/example-1.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var test = require('tape'); 4 | 5 | test('This is a test.', function (assert) { 6 | 7 | assert.pass('Watch the example tests run!'); 8 | 9 | assert.end(); 10 | }); 11 | -------------------------------------------------------------------------------- /examples/software-testing/section-5/example-1.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var test = require('tape'); 4 | 5 | test('Async testing: `.plan()`', function (assert) { 6 | assert.plan(2); 7 | 8 | assert.equal(typeof Date.now, 'function', 9 | 'Date.now should be a function'); 10 | 11 | var start = Date.now(); 12 | 13 | setTimeout(function () { 14 | assert.ok(Date.now() - start >= 100, 15 | 'Should wait at least 100ms'); 16 | }, 100); 17 | }); 18 | -------------------------------------------------------------------------------- /examples/software-testing/section-5/example-2.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var 4 | test = require('tape'), 5 | sum = require('sum'); 6 | 7 | test('`sum()`', function (assert) { 8 | 9 | // Poor description: 10 | assert.equal(sum(3,5), 8, 11 | '3 + 5 should be 8.'); 12 | 13 | // Better: 14 | assert.equal(sum(3,5), 8, 15 | '`sum()` should return the sum of two numbers.'); 16 | 17 | assert.end(); 18 | }); 19 | -------------------------------------------------------------------------------- /examples/software-testing/section-5/example-3.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var test = require('tape'); 4 | 5 | test('Demonstrate `console.error()` for debugging', function (assert) { 6 | 7 | console.log('This may not be seen.'); 8 | 9 | console.error('But this will! =)'); 10 | 11 | assert.ok('Yay!', 12 | 'It is possible to debug tests using `console.error()`.'); 13 | 14 | assert.end(); 15 | 16 | }); 17 | -------------------------------------------------------------------------------- /for-kids.md: -------------------------------------------------------------------------------- 1 | Programming Resources for Kids 2 | ============================== 3 | 4 | * [BBC Dr Who Game](http://www.bbc.com/news/uk-wales-29685258) 5 | * [BBC CS Resources for Kids](http://www.bbc.co.uk/schools/0/computing/) 6 | * [Scratch JR](http://www.scratchjr.org/) 7 | -------------------------------------------------------------------------------- /getting-started/index.md: -------------------------------------------------------------------------------- 1 | # Getting Started With the Terminal, Git, and Node 2 | 3 | Most JavaScript developers make heavy use of the bash terminal, git, and Node. Chances are, you won't get far on your JavaScript journey without them. 4 | 5 | Node will be used for both server-side and client-side programming in JavaScript, and npm, which comes with Node, is the standard package manager for Node, meaning that it's how you'll access all the open source libraries available for use in your projects. 6 | 7 | Git keeps track of changes to source code over time, and helps you share those changes and collaborate with other developers. As I write this, GitHub is the website most JavaScript developers use to coordinate work on Git repositories using the integrated issue tracker, and peer code reviews with pull requests. 8 | 9 | The bash terminal is the standard way for interacting with both Node and the command-line Git tools. The following are a few resources you might find useful while you're starting to learn these tools. 10 | 11 | 12 | ## Learning Git and the Terminal 13 | 14 | If you need help learning Git and the Terminal, check out these free resources: 15 | 16 | ### Terminal 17 | 18 | * [An Introduction to the Linux Terminal](https://www.digitalocean.com/community/tutorials/an-introduction-to-the-linux-terminal) 19 | * [The Bash Guide](http://guide.bash.academy/) by [Maarten Billemont](http://lhunath.com/). #tutorial 20 | 21 | ### Git 22 | 23 | * [Try Git](https://try.github.io/levels/1/challenges/1) 24 | * [Git: The Simple Guide](http://rogerdudler.github.io/git-guide/) 25 | * [Learn Git Branching](https://pcottle.github.io/learnGitBranching/) 26 | * [Learn Enough Git to Be Dangerous](https://www.learnenough.com/git-tutorial) 27 | 28 | ## Installing Node 29 | 30 | If you want to install Node, there are two ways I recommend: 31 | 32 | * For OS X and Linux, [use nvm](https://github.com/creationix/nvm) 33 | * For Windows, use [the official installer](https://nodejs.org/) 34 | 35 | For OS X and Linux, nvm solves permissions issues that you'd normally encounter with the default installer, and it also allows you to easily manage multiple versions of Node, so you can test your code using different versions of the Node engine. Very handy! 36 | -------------------------------------------------------------------------------- /important-links/index.md: -------------------------------------------------------------------------------- 1 | # Important Links for Students 2 | 3 | * [Support form](https://paralleldrive.zendesk.com/hc/en-us/requests/new) for help with your account 4 | * [JavaScript Questions chat](https://gitter.im/learn-javascript-courses/javascript-questions) for advice from fellow students 5 | * [Premium Content page](ericelliottjs.com/premium-content/) for links to all the paid content 6 | * [Welcome Email](http://us4.campaign-archive2.com/?u=55017107e27ee36d150a02c0d&id=264ec6aefd) for more information 7 | * [Lifetime Access Pass order page](https://ericelliottjs.com/product/lifetime-access-pass/) to purchase your Lifetime Access Pass 8 | 9 | 10 | ## Beginners 11 | 12 | * [Learn JavaScript Track for beginners](https://medium.com/javascript-scene/learn-javascript-b631a4af11f2) 13 | 14 | ## GitHub 15 | 16 | * [View All Issues Assigned to You](https://github.com/issues/assigned) 17 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "learn-javascript", 3 | "version": "1.0.1", 4 | "description": "Learn JavaScript with Eric Elliott - Course Examples", 5 | "main": "index.js", 6 | "directories": { 7 | "example": "examples" 8 | }, 9 | "scripts": { 10 | "lint": "jshint .", 11 | "test": "tape test/index.js | tap-bail | tap-difflet", 12 | "c1:section-0:example-1": "tape examples/software-testing/section-0/example-1.js | tap-bail | tap-difflet", 13 | "c1:section-5:example-1": "tape examples/software-testing/section-5/example-1.js | tap-bail | tap-difflet", 14 | "c1:section-5:example-2": "tape examples/software-testing/section-5/example-1.js | tap-bail | tap-difflet", 15 | "c1:section-5:example-3": "tape examples/software-testing/section-5/example-1.js | tap-bail | tap-difflet", 16 | "dev": "watch --wait=5 'npm run lint && npm run test' ." 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "https://github.com/learn-javascript-courses/learn-javascript.git" 21 | }, 22 | "keywords": [ 23 | "Learn", 24 | "JavaScript", 25 | "Courses", 26 | "Education", 27 | "Educational" 28 | ], 29 | "author": "Eric Elliott", 30 | "license": "MIT", 31 | "bugs": { 32 | "url": "https://github.com/learn-javascript-courses/learn-javascript/issues" 33 | }, 34 | "homepage": "https://github.com/learn-javascript-courses/learn-javascript", 35 | "devDependencies": { 36 | "jshint": "^2.6.0", 37 | "tap-bail": "0.0.0", 38 | "tap-difflet": "^0.3.0", 39 | "tape": "^3.5.0", 40 | "watch": "^0.13.0" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /refund-policy.md: -------------------------------------------------------------------------------- 1 | *Refund Policy* 2 | 3 | *Refunds available upon request. Your access to course materials will be immediately terminated. Please note that purchases made during preorder period are highly discounted, and packages will not be available to purchase again at the same price.* 4 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | 2 | require('../examples/software-testing/section-0/example-1.js'); 3 | require('../examples/software-testing/section-5/example-1.js'); 4 | require('../examples/software-testing/section-5/example-2.js'); 5 | --------------------------------------------------------------------------------