621+ Programming Resources
Origins from Jon Schoning, Sam Liao, Faraz Fallahi, Kevin Whinnery, Eric Elliot
Share it on Stumbleupon, Tumblr, Reddit
Hosting Credit
- Digital Ocean: $10 Credit by using this link — — Digital Ocean: $10 Credit by using this link
Getting Started with JavaScript and Web Technologies
Today, we’ll be working to understand how to create a web page using the technologies of the web browser, namely HTML, CSS, and (mostly) JavaScript.
Reference Resources
Arguably the best resource for documentation on the “web platform” (HTML, CSS, and JavaScript) is found on the Mozilla Developer Network. Here are the technologies we will be using:
Hypertext Markup Language (HTML)
HTML defines the structure and contents of a web page. Use HTML tags to display content on a web page.
Overview | Beginner’s Guide | Full Reference Documentation
Cascading Style Sheets (CSS)
CSS defines the style and presentation of a web page. Use CSS to define how HTML elements look.
Overview | Beginner’s Guide | Full Reference Documentation
JavaScript
JavaScript defines the behavior of a web page. Use JavaScript to react to mouse clicks and other user interactions.
Overview | Beginner’s Guide | Full Reference Documentation
Further Reading and Resources
Books
Websites
- Codecademy: Accessible tutorials for JavaScript, HTML, CSS and many programming languages
- Code Combat: Learn JavaScript by playing a game
Tools and Technologies
Programming Text Editors
- CodePen: Web page to play around with HTML, CSS, and JavaScript
- JSFiddle: Web page to play around with HTML, CSS, and JavaScript
- Sublime Text: Cross-platform text editor
- Notepad++: Windows-only free text editor
- TextMate 2: Mac-only text editor
Hosting
- Site44: Host static web pages on Dropbox
- Heroku: Hosting for full web apps (advanced, but arguably the easiest way to deploy dynamic web apps)
Advanced Tools and Debuggers
- Chrome Developer Tools: Debug and inspect the contents of your web page in the Google Chrome browser.
- Firefox Developer Tools:Debug and inspect the contents of your web page in the Firefox browser.
Meta-Lists
- 25 Free Computer Science Ebooks
- Cheat Sheets (Free)
- Free Tech Books
- Microsoft Press: Free E-Books
- MindView Inc
- O’Reilly’s Open Books Project
- TechBooksForFree.com
- Theassayer.org
- Wikibooks: Programming
Graphics Programming
- DirectX manual (draft)
- Learning Modern 3D Graphics Programming (draft)
- GPU Gems
- GPU Gems 2 — ch 8,14,18,29,30 as pdf
- GPU Gems 3
- Graphics Programming Black Book
- ShaderX series
Language Agnostic
- 97 Things Every Programmer Should Know
- 97 Things Every Programmer Should Know — Extended
- Algorithms and Data-Structures (PDF)
- Algorithms (draft)
- The Architecture of Open Source Applications
- The Art of Unix Programming
- Best Kept Secrets of Peer Code Review
- Binary Trees
- Category Theory for Computing Science
- The Cathedral and the Bazaar
- Clever Algorithms
- Communicating Sequential Processes (PDF) — Tony Hoare
- Compiler Construction (PDF)
- Computer Musings (lectures by Donald Knuth)
- Data Structures and Algorithms: Annotated Reference with Examples
- Database Fundamentals (PDF)
- Data-Intensive Text Processing with MapReduce (PDF)
- The Definitive Guide to Building Code Quality
- Designing Interfaces by Jennifer Tidwell
- Digital Signal Processing For Engineers and Scientists
- Distributed systems for fun and profit
- Domain Driven Design Quickly
- Don’t Just Roll the Dice
- Essentials of Metaheuristics by Sean Luke
- Essential Skills for Agile Development
- A Field Guide To Genetic Programming
- Flow based Programming
- Foundations of Computer Science — Al Aho and Jeff Ullman
- Foundations of Programming
- Getting Real
- Getting started with Open source development (PDF)
- The Great Tree List Recursion Problem
- Guide to the Software Engineering Body of Knowledge
- How Computers Work
- How to Design Programs
- How to Think Like a Computer Scientist
- How to Write Parallel Programs
- How to write Unmaintainable Code
- I Am a Bug
- An Introduction to the Theory of Computation
- Introduction to Functional Programming (class lectures and slides)
- Introduction to Information Retrieval
- Is Parallel Programming Hard, And, If So, What Can You Do About It?
- Learn to Program
- Let’s Build a Compiler
- Linkers and loaders
- Linked List Basics
- Linked List Problems
- Mathematical Logic — an Introduction (PDF)
- Matters Computational
- Mining of Massive Datasets
- NASA Manager Handbook for Software Development (PDF)
- NASA Software Measurement Handbook
- Object-Oriented Reengineering Patterns
- Online Course Materials
- OO Design
- Operating Systems and Middleware (PDF and LaTeX)
- Patterns and Practices: Application Architecture Guide 2.0
- Patterns of Software: Tales from the Software Community (PDF)
- Planning Algorithms
- PNG: The Definitive Guide
- Pointers And Memory
- Producing Open Source Software
- Programming Languages: Application and Interpretation
- Programming Methodology
- Programming Pearls
- Project Oberon (PDF)
- Seamless Object-Oriented Software Architecture
- Security Engineering
- Structure and Interpretation of Computer Programs
- Summary of the GoF Design Patterns
- The Little Book of Semaphores — Allen B. Downey
- The TCP/IP Guide
- Think Bayes: Bayesian Statistics Made Simple — Allen B. Downey
- Think Stats: Probability and Statistics for Programmers (PDF, code written in Python) — Allen B. Downey
- Think Complexity — Allen B. Downey
- Type Theory and Functional Programming
- Understanding IP Addressing: Everything you ever wanted to know (PDF)
Android
Autotools
ASP.NET MVC
Assembly Language
- Programming from the Ground Up (PDF)
- Paul Carter’s Tutorial on x86 Assembly
- Software optimization resources by Agner Fog
Bash
- Advanced Bash-Scripting Guide
- Bash Guide for Beginners by Machtelt Garrels
- Lhunath’s Bash Guide
- The Command Line Crash Course (also a Powershell reference)
C / C++
- Beej’s Guide to Network Programming
- Beej’s Guide to C Programming
- The C book
- C++ Annotations
- C++ GUI Programming With Qt 3
- CS106X Programming Abstractions in C++
- Essential C
- Introduction to Design Patterns in C++ with Qt 4 (PDF)
- Learn C the hard way
- Matters Computational: Ideas, Algorithms, Source Code, by Jorg Arndt
- The new C standard — an annotated reference
- Object Oriented Programming in C (PDF)
- Software optimization resources by Agner Fog
- Thinking in C++, Second Edition
- Also see: The Definitive C++ Book Guide and List
Clojure
CoffeeScript
ColdFusion
D / DTrace
DB2
- Getting started with DB2 Express-C (PDF)
- Getting started with IBM Data Studio for DB2 (PDF)
- Getting started with IBM DB2 development (PDF)
Delphi / Pascal
Django
Emacs
Erlang
Flex
F Sharp
- The F# Survival Guide
- F Sharp Programming in Wikibooks
- Real World Functional Programming (MSDN Chapters)
Forth
Git
Go
Grails
Haskell
HTML / CSS
Java
- Java Application Development on Linux by Carl Albing and Michael Schwarz(PDF)
- How to Think Like a Computer Scientist
- The Java EE6 Tutorial (PDF)
- Java Thin-Client Programming
- Sun’s Java Tutorials
- Thinking in Java
- OSGi in Practice (PDF)
- Category wise tutorials — J2EE
- Introduction to Programming Using Java — David J. Eck
- Effective Java
- Introduction to Programming Using Java
JavaScript
- Crockford’s JavaScript
- Eloquent JavaScript
- Essential Javascript & jQuery Design Patterns for Beginners
- JavaScript Essentials
- jQuery Fundamentals (starts with JavaScript basics)
- Mozilla Developer Network’s JavaScript Guide
- JavaScript Allongé
- Learning JavaScript Design Patterns
- O’Reilly Programming JavaScript Applications — Early Release
JavaScript (Node.js specific)
LaTeX
Linux
- Advanced Linux Programming
- GNU Autoconf, Automake and Libtool
- GTK+/Gnome Application Development
- The Linux Development Platform (PDF)
- Linux Device Drivers by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman
- The Linux Kernel Module Programming Guide
- Secure Programming for Linux and Unix
Lisp
- Common Lisp the Language, 2nd Edition
- Common Lisp: A Gentle Introduction to Symbolic Computation — David S. Touretzky
- Common Lisp Quick Reference
- Let Over Lambda — 50 Years of Lisp
- Natural Language Processing in Lisp
- On Lisp
- Practical Common Lisp
- Successful Lisp: How to Understand and Use Common Lisp — David Lamkins
- Sketchy LISP — Nils Holm
Lua
- Programming In Lua (for version 5)
Mathematica
Maven
- Better Builds with Maven
- Maven by Example
- Maven: The Complete Reference
- Repository Management with Nexus
- Developing with Eclipse and Maven
Mercurial
.NET (C# / VB / Nemerle / Visual Studio)
- C# Essentials
- C# Programming — Wikibook
- C# Yellow Book (intro to programming)
- Charles Petzold’s .NET Book Zero
- Data Structures and Algorithms with Object-Oriented Design Patterns in C#
- Entity Framework
- Moving to Microsoft Visual Studio 2010
- Nemerle
- Programmer’s Heaven C# School Book (covers C# 1.0 and 2.0)
- Threading in C#
- Visual Basic Essentials
- Visual Studio Tips and Tricks (VS 2003–2005 only)
NoSQL
- CouchDB: The Definitive Guide
- The Little MongoDB Book
- The Little Redis Book
- The Little Riak Book
- Graph Databases
Oberon
- Programming in Oberon (PDF)
Objective-C
OCaml
- Introduction to Objective Caml (PDF)
- Objective Caml for Scientists (first chapter only)
- Unix System Programming in OCaml
- Developing Applications With Objective Caml
Oracle Server
- Oracle’s Guides and Manuals
Oracle PL/SQL
- PL/SQL Language Reference
- PL/SQL Packages and Types Reference
- Steven Feuerstein’s PL/SQL Obsession — Videos and Presentations
Parrot / Perl 6
- Using Perl 6 (work in progress)
Perl
- Beginning Perl
- Embedding Perl in HTML with Mason
- Essential Perl
- Extreme Perl
- Higher-Order Perl
- The Mason Book
- Modern Perl 5
- Perl & LWP
- Perl for the Web
- Perl Free Online EBooks (meta-list)
- Perl The Hard Way
- Practical mod_perl
- Web Client Programming with Perl
PHP
- PHP Essentials
- Practical PHP Programming (wiki containing O’Reilly’s PHP In a Nutshell)
- Symfony2
- Zend Framework: Survive the Deep End
PowerShell
Prolog
- Adventure in Prolog
- Applications of Prolog
- Building Expert Systems in Prolog
- Introduction to Prolog for Mathematicians
- Learn Prolog Now!
- Logic, Programming and Prolog (2ed)
- Natural Language Processing in Prolog
- Natural Language Processing Techniques in Prolog
- Prolog Programming A First Course
- Prolog Techniques
- Simply Logical
- Visual Prolog 7.2 for Tyros
PostgreSQL
Python
- Byte of Python
- Data Structures and Algorithms in Python
- Dive into Python
- Dive into Python 3
- Hacking Secret Cyphers with Python — Al Sweigart
- How to Think Like a Computer Scientist: Learning with Python
- Invent Your Own Computer Games With Python — Al Sweigart
- Learn Python The Hard Way
- Natural Language Processing with Python
- Python Bibliotheca
- Python for Fun
- Python for Informatics: Exploring Information
- Python for you and me
- Snake Wrangling For Kids
- Think Python (PDF) — Allen B. Downey
R
Ruby
- Learn Ruby the hard way
- MacRuby: The Definitive Guide
- Mr. Neighborly’s Humble Little Ruby Book
- Programming Ruby
- Ruby Best Practices
- Why’s (Poignant) Guide to Ruby (mirror)
Ruby on Rails
Rust
Scala
- Exploring Lift (published earlier as “The Definitive Guide to Lift”, PDF)
- Lift
- Pro Scala: Monadic Design Patterns for the Web
- Programming in Scala, First Edition
- Programming Scala
- Scala By Example (PDF)
- A Scala Tutorial for Java programmers (PDF)
- Xtrace
- Another tour of Scala
Scheme
- Concrete Abstractions: An Introduction to Computer Science Using Scheme
- The Scheme Programming Language Edition 3, Edition 4
- Simply Scheme: Introducing Computer Science
Sed
Smalltalk
- Dynamic Web Development with Seaside
- Free Online Smalltalk Books (meta-list)
- Squeak By Example (Smalltalk IDE)
Subversion
SQL (implementation agnostic)
- Developing Time-Oriented Database Applications in SQL
- Use The Index, Luke!: A Guide To SQL Database Performance
- Learn SQL The Hard Way
Teradata
Vim
- A Byte of Vim
- Vim Recipes
- Vi Improved — Vim by Steve Oualline
- Learn Vimscript the Hard Way
Websphere
Windows Phone
- Programming Windows Phone 7
- Reproducible Research
- Makefiles
- Make for Reproducibility
- Why use Make
- O’Reilly Make Book
- Minimal Make, A Quick Tour
- Make for R and LaTeX
- Software Carpentry Make Lessons
- Misc
- Best Practices for Software and Reproducible Research
- Reproducible Research is Still a Challenge
- How to (not) collaborate
- Research Paper on Pull-Request Workflow
- 10 Things every grad student should do
- R package for Reproducible Workflows
- Research Practice
- The Researchers Bible
- How to do research at MIT AI Lab
- Bioinformatics
- Genomics Papers from Leek Group
- Testing
- Python
- Getting Started with Automatic Testing
- Getting Started Testing
- Perl
- Unit Testing in Perl
- Meta Resources
- Coding
- Code Essentials
- Google’s Technical Development Guide
- Code Review
- Software Carpentry Code Review
- GitHub Flow and Code Review
- Fernando Perez Code Review
- 11 Best Practices
- Machine Learning
- Misc.
- The Zen of Gradient Descent
- 14 Data Mining Books
- Basics of Machine Learning
- Social Media Mining
- Introductory Primar to Machine Learning
- Introductory to Statistical Learning
- Elements of Statistical Learning
- Neural Nets/Deep Learning
- Deep Learning Book
- Deep Learning Annotated Bibliography
- Universite de Sherbrooke Neural Networks Class
- Deep Learning Book
- Deep Learning with JS
- Intro to Deep Learning with Python and Theano
- Parallel Processing
- Parallel Processing in multiple languages
- Coding Guidelines
- Example of Good Code Guidelines
- Good Coding Guidelines
- Linear Algebra
- First Course in Linear Algebra
- Linear Algebra in Four Pages
- MIT OCW Linear Algebra
- Statistics
- Probability Cheat Sheet
- Steins Paradox
- Warning Signs in Experimental Design
- Causal Inference Book
- Statistical Inference for Everyone
- Probabalistic Programming and Bayesian Methods for Hackers
- Discrete Math
- Notes on Discrete Math
- Python
- Python for Big Data
- Python Patterns
- Python Argparse Cookbook
- Learn Python the Hard Way
- Perl
- Data Munging with Perl
- Perl in 2 hours 30 minutes
- Higher Order Perl
- Algorithms
- Learn Algorithms
- Khan Academy Algorithms
- MIT OCW Intro to Algorithms
- Data Science/Big Data
- R and Pandas compared
- Mathematical Theory of Data Science
- Data Science Masters
- Python for Data Science
- Common Excel Tasks using Pandas
- Data Visualization
- Data Visualization with JS
- Command Line Tools for Data Science
- Small Datasets
- Graphs from SQL
- Learn SQL the Hard Way
- R
- R Cookbook
- R Packages
- Things I Wish I Knew When Starting R
- Matlab
- Matlab Cookbook
- Vim
- Vim Tutorial and Introduction
- Learn to Speak Vim
- Series of Articles on Learning Vim
- Git/GitHub
- A Practical Introduction to Git
- Git — The Simple Guide
- Git Cheat Sheet
- Git Cheat Sheet from GitHub
- Pro Git
- Software Carpentry Git & GitHub Lesson
- Collaboration on GitHub
- GitHub Flow
- GitHub Guides
- Misc.
- Twitter NLP Library
- LaTex
- Not So Short Introduction to LaTex
- LaTex Wikibook
- Introduction to Tex and Friends
- Short Guide for LaTex Math
- WriteLaTex Introductino to LaTex
- Learn LaTex by Doing
- Tex Introduction
Required Reading (Online resources)
- Learn JavaScript Essentials (for all skill levels) One clear path to JavaScript mastery #article
- The Two Pillars of JavaScript Part 1: Prototypal OO #article
- The Two Pillars of JavaScript Part 2: Functional Programming #article
- JavaScript Objects An excellent explanation of inheritance in JavaScript by Kyle Simpson #article
- How to Use ES6 for Universal JavaScript Apps A Babel config walkthrough #article
- Unapply attack Make your JS apps more secure by freezing builtins. #article
- JavaScript Application Architecture on the Road to 2015 Addy Osmani #article
- Modularity A pragmatic take on the tiny modules vs batteries included approach
- Computer Science in JavaScript by Nicholas C. Zakas #article
- The Dao of Immutability The Way of the Functional Programmer #article
- Reactive MVC and the Virtual DOM Great read, even if you’re not a React user. #article
- Introduction to Reactive Programming #article
- The General Theory of Reactivity What is all this talk about reactive? Functional? Promises? This is the beginning of a reactive programming bible. #article
- Why Functional Programming Matters by John Hughes, 1984 #paper #pdf
- ES6 Generators A series of blog posts by Kyle Simpson #article
- Typed JavaScript Excellent post about the state of typed JavaScript by Axel Rauschmayer #article
- ES6 Modules: The Final Syntax by @rauschma #article
- javascript-sdk-design A guide for people building JavaScript client SDKs #article
- Advanced Performance Audits with DevTools In-depth perf case studies with Paul Irish #article
Required Viewing
- Classical Inheritance is Obsolete: How to Think in Prototypal OO by Eric Elliott #talk
- Composition Over Inheritance by Mattias Petter Johansson #video
- Everything You Never Wanted to Know About JavaScript Numbers by Bartek Szopka #talk
- Asynchronous Programming at Netflix Jafar Husain #talk
- What is Reactive Programming? Jafar Husain explains reactive programming #talk
- Introduction to Reactive Programming by André Staltz #video #course
- Immutability: Putting The Dream Machine To Work by David Nolen #talk
- The Essence of FRP by Conal Elliott #talk
- JavaScript API Design Principles by Ariya Hidayat #talk
- Delivering the Goods Paul Irish on one of the most important but overlooked topics in the development world today — page load times. #talk
- Supercharging Page Load by Jake Archibald #video
- Slay’n the Waste Monster by Colt McAnlis #talk
- Simplicity Matters A later version of the influential talk, “Simple Made Easy” by Rich Hickey #talk
- Making WebGL Dance by Steven Wittens #talk
- The Pixel Factory by Steven Wittens #talk
Exercises
- FreeCodeCamp Learn to build apps & work on not-for-profit projects. #exercises
- LearnRx #exercises
Spec
- ES5 Spec An annotated, hyperlinked version of the ES5 spec
- ES6 Spec ECMAScript® 2015 Language Specification
Books
- JavaScript for Kids by Nick Morgan
- Eloquent JavaScript by Marijn Haverbeke
- JavaScript: The Good Parts by Douglas Crockford
- Effective JavaScript by David Herman
- Learn JavaScript Universal App Development with Node, ES6, & React by Eric Elliott
- Programming JavaScript Applications by Eric Elliott
- JavaScript: The Definitive Guide by David Flanagan
- You Don’t Know JS by Kyle Simpson
- Understanding ECMAScript 6 by Nicholas C. Zakas
- JavaScript Allongé by Reginald Braithwaite
- Node.js in Action by Mike Cantelon, Marc Harter, T.J. Holowaychuk and Nathan Rajlich
- High Performance Browser Networking by Ilya Grigorik #book
- “Seven Languages in Seven Weeks” Learn different ways of solving problems and you’ll deepen your understanding of JavaScript. #book
- The Dream Machine: J.C.R. Licklider and the Revolution That Made Computing Personal by M. Mitchell Waldrop
- WebGL Fundamentals by Greggman — An interactive online book about graphics programming.
Dev tools & collaboration
- nvm First install this…
- Node Then install Node (with nvm). You’ll need this even if you’re a front-end dev.
- npm Install lots of other things with npm. The package manager for JavaScript. Comes with Node.
- Atom Nice, hackable editor by GitHub.
- Node Inspector Debug Node code with the Chrome debug tools — save-live-edit true
- TraceGL Powerful runtime analysis of live JavaScript code
- Tern Static analysis in JavaScript
- JSDoc Pair with Tern for static analysis
- Slate Generate beautiful API docs for your apps
- Slack Chat for teams, with GitHub and Google hangouts integration
- Gitter Like Slack, but better for OSS projects and free chat.
- Airety Better developer interviews via pair programming.
- PrettyDiff
- Babel Repl The Babel REPL with compiled output
- Nitrous.IO Online IDE in the cloud with collaboration & Docker containers
- Koding Online cloud development platform with video & audio collaboration
Building
- Browserify Bundle modules for the browser.
- Webpack Similar to Browserify, with more batteries included and a config file. Supports live patching rebuilds.
- How to use NPM as a Build Tool
- pre-commit Easily configure pre-commit hooks for your package
Testing / Lint / Quality checkers
- ESLint The pluggable linting utility for JavaScript and JSX.
- JSCS Linter with a focus on automatic fixes and built-in style guide presets.
- babel-eslint Allow ES6 features to pass ESLint.
- eslint-plugin-no-class Forbid the ES6 class keyword. Why?
- ESLint no-inferred-methodname A custom rule for a common problem. #code
- Istanbul Code coverage reporting
- tape Dead simple unit testing #code
- faucet Prettify unit testing output (like what comes from tape).
- Supertest The best way to test HTTP endpoints.
Transpilers
- Babel Transpile ES2015 (ES6), ES7 to ES5, JSX to React.
- TypeScript TypeScript’s structural types are worth a look, but I don’t use it.
- Emscripten Frequently used for C/C++ JavaScript ports.
- ES6 tools Addy Osmani’s ES6 Tools list.
JavaScript environments
- Node.js Server side JavaScript and more
News
- JavaScript Scene
- JavaScript Weekly
- Node Weekly
- HTML5 Weekly
- EchoJS
- JavaScript Live
- JavaScript.com News
- Node Module Of The Week
- JavascriptKicks
- 5 Minutes of Javascript
Contests
- DemoJS The JavaScript demoscene party
- JS1k JavaScript demos in 1k of memory
- JS13k Games JavaScript games in 13k of memory
- FightCode game program virtual battle bots and climb the leaderboard
- Node Knockout The legendary Node competition
List by Jon Schoning, Sam Liao, Faraz Fallahi, Kevin Whinnery, Eric Elliot
The MIT License (MIT) Copyright (c) 2015 Eric Elliott Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the “Software”), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whom the Software isfurnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software. THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THEAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHERLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THESOFTWARE.