├── CONTRIBUTING.md ├── LICENSE.md ├── README.md └── resources.md /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Due to lack of time on my part, I tend to be very conservative about accepting 4 | requests or new resources. 5 | 6 | I prefer to personally vet all resources before I feel comfortable enough to 7 | accept them, and so it might take a few weeks to a few months for me to fully 8 | evaluate the resource, depending on how much spare time I have. 9 | 10 | That said, if you have a resource recommendation or any suggestions for improvement, 11 | feel free to file them in the issue tracker or submit a pull request. 12 | 13 | Please keep in mind that at present time that I will generally NOT accept: 14 | 15 | 1. Resources specific to a particular library or framework. 16 | 17 | Currently, this resource is more oriented towards collecting resources for 18 | learning programming languages. I unfortunately don't have the time to do a 19 | thorough evaluation of all the different popular frameworks currently in use. 20 | 21 | 2. Content which can only be accessed through payment. 22 | 23 | I _will_ make multiple exceptions to this rule, especially for books or 24 | for paid content which has a good number of positive critical reviews. 25 | Basically, I need some way of verifying that a given resource is 26 | high-quality, either by reading it myself or by relying on reviews by 27 | others. 28 | 29 | Please note that the goal of this collection is to create an annotated list of 30 | high-quality resources suitable for beginners or people wanting to improve their 31 | skill in an existing category. This collection is **not** meant to be an exhaustive 32 | list of every single possible resource, since that might be overwhelming for 33 | beginners. 34 | 35 | In addition, if you feel that two existing resources are very similar and that 36 | having both of them adds no value, or if one resource is too low-quality, please 37 | open a discussion on the issue tracker. 38 | 39 | [is]: https://github.com/Michael0x2a/curated-programming-resources/issues 40 | 41 | 42 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Michael0x2a/curated-programming-resources/31ee1a69939fbdd9bb7de0d9b4d2e98ca54c4456/LICENSE.md -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Curated Programming Resources 2 | 3 | A [curated and annotated list of resources][resources] for learning 4 | programming and computer science. 5 | 6 | [resources]: https://github.com/Michael0x2a/curated-programming-resources/blob/master/resources.md 7 | 8 | ## Motivation and goals 9 | 10 | Currently, we're living in a sort of "programming renaissance". Programming 11 | and computer science is become more popular then ever -- major initiatives 12 | like the Hour of Code is popularizing learning programming across the world, 13 | and the number of people interested in majoring in computer science is growing 14 | exponentially. 15 | 16 | As a consequence, there is an increasingly huge number of resources and tutorials 17 | being produced for beginners who want to learn to code, ranging from books to 18 | online tutorials to interactive websites to massive open online courses (MOOCS) 19 | like Codecademy and Coursera. 20 | 21 | While this is great, it can also be overwhelming for beginners -- there are almost 22 | too many resources available, and it's difficult to figure out where to start. 23 | 24 | This page is meant to help solve that problem -- to present a curated list of 25 | resources for people who are either new to programming, new to a particular topic, 26 | or want to advance their skills past the beginner stage. This page doesn't try and 27 | list every single resource available, but instead links to resources that are 28 | guaranteed to be high-quality. 29 | 30 | ## Contributing 31 | 32 | Any contributions, feedback, or suggestions are welcome, so long as they meet the 33 | guidelines described in [CONTRIBUTING.md][contribute]. 34 | 35 | To make a contribution, either open a pull request or file an issue towards the right. 36 | 37 | [contribute]: https://github.com/Michael0x2a/curated-programming-resources/blob/master/CONTRIBUTING.md 38 | -------------------------------------------------------------------------------- /resources.md: -------------------------------------------------------------------------------- 1 | # Curated Programming Resources 2 | 3 | ## Table of contents 4 | 5 | - [Introduction](#introduction) 6 | - [Motivation and Goals](#motivation-and-goals) 7 | - [Where do I start?](#where-do-i-start) 8 | - [How this page is organized](#how-this-page-is-organized) 9 | - [Which resource should I pick?](#which-resource-should-i-pick) 10 | - [Warning](#warning) 11 | - [General resources](#general-resources) 12 | - [Links to other big lists](#links-to-other-big-lists) 13 | - [Online courses](#online-courses) 14 | - [Programming Languages](#programming-languages) 15 | - [C](#c) 16 | - [C++](#c-1) 17 | - [C#](#c-sharp) 18 | - [Haskell](#haskell) 19 | - [HTML, CSS, and JavaScript](#html-css-and-javascript) 20 | - [Lisp (Scheme, Common Lisp, Clojure, etc)](#lisp-scheme-common-lisp-clojure-etc) 21 | - [Java](#java) 22 | - [Perl](#perl) 23 | - [PHP](#php) 24 | - [Python](#python) 25 | - [Ruby](#ruby) 26 | - [Scratch](#scratch) 27 | - [Other topics](#other-topics) 28 | - [Developing on specific platforms](#developing-on-specific-platforms) 29 | - [Android](#android) 30 | - [Mac and iOS](#mac-and-ios) 31 | - [Windows and Windows Phones](#windows-and-windows-phones) 32 | - [Data structures and algorithms](#data-structures-and-algorithms) 33 | - [Tools](#tools) 34 | - [Version control](#version-control) 35 | - [Git](#git) 36 | - [Mercurial](#mercurial) 37 | 38 | ## Introduction 39 | 40 | ### Motivation and goals 41 | 42 | Currently, we're living in a sort of "programming renaissance". Programming and computer science is become more popular then ever -- major initiatives like the [Hour of Code](http://hourofcode.com/us) is popularizing learning programming across the world, and the number of people interested in majoring in computer science is [growing](http://www.princeton.edu/engineering/news/archive/index.xml?id=10983) [exponentially](http://www.geekwire.com/2014/uw-computer-science-majors/). 43 | 44 | As a consequence, there is an increasingly huge number of resources and tutorials being produced for beginners who want to learn to code, ranging from books to online tutorials to interactive websites to massive open online courses (MOOCS) like Codecademy and Coursera. 45 | 46 | While this is great, it can also be overwhelming for beginners -- there are almost too _many_ resources available, and it's difficult to figure out where to start. 47 | 48 | This page is meant to help solve that problem -- to present a **curated** list of resources for people who are either new to programming, new to a particular topic, or want to advance their skills past the beginner stage. This page doesn't try and list every single resource available, but instead links to resources that are guaranteed to be high-quality. 49 | 50 | ### Where do I start? 51 | 52 | If you know what you want to learn about, great! Jump to that section, start browsing the links, and find something which works for you. 53 | 54 | If you're not sure where to start and which language to learn, some good beginner languages are: 55 | 56 | - [Python](#python) (general-purpose; scientific and mathematical computing) 57 | - [Java](#java) (general-purpose; Android development) 58 | - [HTML/CSS/JavaScript](#html-css-and-javascript) (websites and webapps) 59 | - [Scratch](#scratch) (for younger children) 60 | 61 | Python and Java are both languages that are [commonly used to teach programming](http://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-us-universities/fulltext) to beginners in schools and universities, and so will have a wide variety of resources available to help you learn. They're also both widely used in the industry and so are useful languages to have in your toolbelt. 62 | 63 | Web development has been very popular lately, so there are many resources for learning HTML, CSS, and JavaScript, also making it suitable for learning. It also requires little to no installation and configuration on your computer. All you need is a text editor to write code -- the code will run on your web browser. 64 | 65 | Scratch is a little different from other languages. It was designed from the ground up to be easy to use and learn -- instead of typing text, you drag and connect together "blocks" to form programs, making it a very visual language. As a result, Scratch is a good language especially for younger children (elementary schoolers, middle schoolers) or for people who dislike typing. 66 | 67 | ### How this page is organized 68 | 69 | This page is subdivided into three parts -- first, a "General resources" section that links to sites that tend to deliver high-quality content about a variety of topics, and a "Specific resources" section that provides resources on specific programming languages or topics. 70 | 71 | In general, most resources available will fall between two categories -- online courses, and books + tutorials. Online courses tend to teach using video lectures, try and be more interactive, and try and emulate the structure of a course similar to ones you might take in college. In contrast, books and tutorials teach via written text and allow you to set your own pace. 72 | 73 | ### Which resource should I pick? 74 | 75 | Whether you prefer learning by watching a video or reading text is really a matter of personal preference. _I_ personally prefer reading, but your learning style might be completely different. You may need to explore and browse several different resources before you discover how you best learn. 76 | 77 | When possible, I'll try and leave a description for each resource describing what their goal is, and what audience they're suitable for. Some resources focus on trying to give a comprehensive introduction for beginners, other resources are more suitable for people who are already somewhat experienced in a language and want to learn more. 78 | 79 | ### Warning 80 | 81 | This page is still a work-in-progress, and will be updated slowly, time permitting. Some sections may currently be incomplete, and some links may not yet be fully vetted. 82 | 83 | If you would like to contribute, please see [CONTRIBUTING.md][contrib] for details. 84 | 85 | [contrib]: https://github.com/Michael0x2a/curated-programming-resources/blob/master/CONTRIBUTING.md 86 | 87 | ## General resources 88 | 89 | ### Links to other big lists 90 | 91 | You can find a large [list of free programming books and resources on GitHub](https://ebookfoundation.github.io/free-programming-books). (It used to be hosted on StackOverflow, but was moved over to GitHub on October 2013). 92 | 93 | 94 | ### Online courses 95 | 96 | Online courses are an increasingly popular way for universities and professionals to teach programming and computer science in a structured format. As a result, new online courses will pop up all the time, so it's worth checking these resources periodically to see what's new. 97 | 98 | - [Codecademy](http://www.codecademy.com) - offers free online courses in several different languages. However, Codecademy does have a tendency to teach only basic syntax, so you must work through more tutorials after finishing Codecademy. Focuses mainly on web development, Ruby, and Python. 99 | - [Coursera](https://www.coursera.org) - offers free online courses in many different fields from several different well-known universities. New courses are added every quarter, and content from old courses is typically archived. Because many courses appear to be new/may be a one-time thing, this page will not link to courses on Coursera unless it appears to be stable. 100 | - [Udacity](http://www.udacity.com) - offers free computer science courses taught by industry experts. Udacity offers two kinds of courses -- regular courses and nanodegrees. Regular courses are free. Regular courses with one-on-one tutoring/code review requires a monthly fee. Nanodegrees are typically for people with some prior coding experience, and cost more money. 101 | - [edX](https://www.edx.org) - a joint effort between MIT, Harvard, and Berkeley to provide free online versions of some of their courses. 102 | - [OpenCulture](http://www.openculture.com/computer_science_free_courses) - similar to all of the above. Video lectures are typically available on iTunes or Youtube. Typically does **not** require you to complete assignments, unlike many other online courses. 103 | - [MIT OpenCourseWare](http://ocw.mit.edu/index.htm) - static course materials taught at MIT. Unless otherwise noted, most content from this website tends to be very rigorous and fast-paced. 104 | - [Khan Academy](https://www.khanacademy.org/) - contains a few courses on programming and computer science; does contain many more courses on all kinds of topics (especially math). 105 | - [Stanford Engineering Everywhere](https://see.stanford.edu/Course) - static course materials taught at Stanford. 106 | 107 | The following websites also contain a wide variety of tutorials for many different topics, but require payment and registration before you can access their courses. 108 | 109 | - [Team Treehouse](http://teamtreehouse.com) - focuses on web and iOS development. 110 | - [Lynda](http://www.lynda.com) - also includes courses on design, animation, video, business, and more. 111 | - [PluralSight](http://www.pluralsight.com) - similar to Lynda, but with a focus on developer and IT courses. 112 | 113 | In general, edX, OpenCulture, MIT OpenCourseware, and Stanford Engineering Everywhere tend to contain more rigorous, thorough, and demanding courses, whereas Codecademy and Khan Academy tend to focus on giving a more gentle introduction to programming. Coursera and Udacity tend to vary between these two extremes. 114 | 115 | 116 | ## Programming Languages 117 | 118 | ### C 119 | 120 | Note: C can be a finicky and difficult-to-teach language. Although the online courses and books are a good starting point and can take you a long way, the general consensus is that the best way to learn is through reading an actual book. 121 | 122 | In particular, I would strongly recommend that you follow the recommendations on [StackOverflow's C Book Guide and List][c-so-definitive], and use only the resources listed here if you're unable to obtain the books in the link. 123 | 124 | - Online courses: 125 | - MIT Open Courseware has a few: 126 | - [Practical Programming in C][c-mit-practical] 127 | For beginners. 128 | - [Introduction to C Memory Management and C++ Object-Oriented Programming][c-mit-intro] 129 | Geared towards people with prior experience in a programming language that is not C or C++. 130 | - [Effective Programming in C and C++][c-mit-effective] 131 | Similar to the above. 132 | - Video tutorials: N/A 133 | - Interactive tutorials: 134 | - [Learn-C][c-learn-c] 135 | An interactive online guide that teaches you basic C step-by-step. 136 | - Books and tutorials (online): 137 | - [C Programming][c-c-programming] 138 | One of Wikibooks' featured books. Tends to focus on teaching mainly syntax. A good starting point and reference. 139 | - [Build Your Own Lisp][c-lisp] 140 | Walks you through how to write a Lisp interpreter in C, teaching both languages simultaneously. 141 | - [More free books][c-more] 142 | - Books (paper): 143 | - [The C Programming Language][c-c-lang] 144 | The definitive guide to C. Also known as K&R, after the authors. 145 | - [The Definitive C Book Guide and List][c-so-definitive] 146 | A very well-maintained list of recommended books and resources on StackOverflow. Every book listed on this page is highly-recommended. 147 | - Exercises: N/A 148 | 149 | [c-mit-practical]: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-087-practical-programming-in-c-january-iap-2010/ 150 | [c-mit-intro]: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-088-introduction-to-c-memory-management-and-c-object-oriented-programming-january-iap-2010/ 151 | [c-mit-effective]: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-s096-effective-programming-in-c-and-c-january-iap-2014/ 152 | 153 | [c-learn-c]: http://learn-c.org 154 | [c-lcthw]: http://c.learncodethehardway.org/book/ 155 | [c-lisp]: http://www.buildyourownlisp.com/ 156 | [c-c-programming]: http://en.wikibooks.org/wiki/C_Programming 157 | [c-more]: https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#c 158 | 159 | [c-c-lang]: http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628/ 160 | [c-so-definitive]: http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list 161 | 162 | ### C++ 163 | 164 | Note: Similar to C, C++ can be a finicky and difficult-to-teach language. Although the online courses and books are a good starting point and can take you a long way, the general consensus is that the best way to learn is through reading an actual book. 165 | 166 | As with C, I would strongly recommend picking a book on [StackOverflow's C++ Book Guide and List][cpp-so-definitive]. 167 | 168 | - Online courses: 169 | - MIT Open Courseware has a few: 170 | - [Introduction to C++][cpp-mit-intro] 171 | For beginners. Fast-paced. 172 | - [Introduction to C Memory Management and C++ Object-Oriented Programming][cpp-mit-intro-2] 173 | Geared towards people with prior experience in a programming language that is not C or C++. 174 | - [Effective Programming in C and C++][cpp-mit-effective] 175 | Similar to the above. 176 | - Stanford's 3-part "Introduction to Computer Science" series for beginners. The first course teaches Java, the latter two teach C and C++. 177 | - [Programming Methodology][cpp-stan-methodology] 178 | - [Programming Abstractions][cpp-stan-abstractions] 179 | - [Programming Paradigms][cpp-stan-paradigms] 180 | - Coursera's [C++ for C Programmers][cpp-coursera-c-for-cpp] 181 | May also be helpful for programmers with prior experience in another language besides C or C++. 182 | - Interactive tutorials: 183 | - [C++ Interactive Exercises][cpp-interactive] 184 | An introduction to basic C++. Is a cross between an interactive tutorial and an online book. 185 | - Video tutorials: N/A 186 | - Books and tutorials (online): 187 | - [How to Think Like a Computer Scientist][cpp-think-cs] 188 | A good introduction to basic C++. 189 | - [Learncpp.com][cpp-learn] 190 | Tends to focus more on syntax, and less on programming. Might be useful for beginners, but as a reference, not a tutorial. 191 | - [More free books][cpp-more] 192 | - Books (paper): 193 | - [The Definitive C++ Book Guide and List][cpp-so-definitive] 194 | A very well-maintained list of recommended books and resources on StackOverflow. Every book listed on this page is highly-recommended. 195 | - Exercises: N/A 196 | 197 | [cpp-google-class]: https://developers.google.com/edu/c++/ 198 | [cpp-coursera-c-for-cpp]: https://www.coursera.org/course/cplusplus4c 199 | [cpp-mit-intro]: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-096-introduction-to-c-january-iap-2011/ 200 | [cpp-mit-intro-2]: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-088-introduction-to-c-memory-management-and-c-object-oriented-programming-january-iap-2010/ 201 | [cpp-mit-effective]: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-s096-effective-programming-in-c-and-c-january-iap-2014/ 202 | [cpp-stan-methodology]: https://see.stanford.edu/Course/CS106A 203 | [cpp-stan-abstractions]: https://see.stanford.edu/Course/CS106B 204 | [cpp-stan-paradigms]: https://see.stanford.edu/Course/CS107 205 | 206 | [cpp-interactive]: http://nova.umuc.edu/~jarc/sdsd/ 207 | 208 | [cpp-think-cs]: http://greenteapress.com/thinkcpp/index.html 209 | [cpp-learn]: http://www.learncpp.com 210 | [cpp-more]: https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#cpp 211 | 212 | [cpp-so-definitive]: http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list 213 | 214 | ### C-Sharp 215 | 216 | - Online courses: 217 | - Microsoft Virtual Academy has a few free courses: 218 | - [C# Fundamentals for Absolute Beginners][csharp-fundamentals] 219 | A series of videos produced by Microsoft on learning C#. For beginners. 220 | - [Programming in C# Jump Start][csharp-jump-start] 221 | Another series of videos produced by Microsoft. Assumes some prior knowledge of C#. 222 | - Interactive tutorials: N/A 223 | - Video tutorials: N/A 224 | - Books and tutorials (online): 225 | - [C# Programming][csharp-programming] 226 | One of Wikibook's featured books. For beginners. Tends to focus on syntax, and would also make a good reference. 227 | - [The C# Yellow Book][csharp-yellow] 228 | The introductory text used by the University of Hull. 229 | - [C# Essentials][csharp-essentials] 230 | An introductory text on C#. Also includes information on Windows Forms, Visual Studios, and making GUIs. 231 | - [Visual C# resources][csharp-visual] 232 | Microsoft's official series of tutorials and guides on C# and .NET. 233 | - [More free books][csharp-more] 234 | - Books (paper): 235 | - [Sam's Teach Yourself C# 5.0 in 24 Hours]() by Scott Dorman 236 | A good introduction for beginners. 237 | - [Essential C# 5.0][csharp-essential-book] 238 | Very comprehensive, and intended more for intermediate programmers/programmings coming from another language. 239 | - [C# in Depth, 3rd Edition][csharp-in-depth] 240 | Also very comprehensive, and covers how to write idiomatic and clean C# code. Assumes the reader already knows some C#. 241 | - [Effective C#][csharp-effective] and [More Effective C#][csharp-more-effective] 242 | A collection of tips and tricks to improve your C# code. Not for beginners. 243 | - Exercises: N/A 244 | 245 | [csharp-fundamentals]: https://mva.microsoft.com/en-US/training-courses/c-fundamentals-for-absolute-beginners-16169 246 | [csharp-jump-start]: http://www.microsoftvirtualacademy.com/training-courses/developer-training-with-programming-in-c 247 | 248 | [csharp-programming]: http://en.wikibooks.org/wiki/C_Sharp_Programming 249 | [csharp-yellow]: http://www.csharpcourse.com/ 250 | [csharp-essentials]: http://www.techotopia.com/index.php/C_Sharp_Essentials 251 | [csharp-visual]: http://msdn.microsoft.com/en-us/vstudio/hh341490 252 | [csharp-more]: https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#csharp 253 | 254 | [csharp-sam]: http://www.amazon.com/Sams-Teach-Yourself-5-0-Hours/dp/0672336847 255 | [csharp-essential-book]: http://www.amazon.com/Essential-Edition-Microsoft-Windows-Development/dp/0321877586 256 | [csharp-in-depth]: http://www.amazon.com/gp/product/161729134X 257 | [csharp-effective]: http://www.amazon.com/Effective-Specific-Ways-Improve-Your/dp/0321245660 258 | [csharp-more-effective]: http://www.amazon.com/More-Effective-Specific-Ways-Improve/dp/0321485890 259 | 260 | ### Haskell 261 | 262 | - Online courses: 263 | - edX's [Introduction to Functional Programming][haskell-intro-func] 264 | Assumes familiarity with a non-functional programming language (Java, Python, C#, C++, etc). 265 | - Interactive tutorials: 266 | - [Try Haskell][haskell-try] 267 | An interactive guide that teaches basic Haskell. 268 | - Video tutorials: N/A 269 | - Books and tutorials (online): 270 | - [Getting started with Haskell][haskell-getting-started] 271 | A comprehensive meta-guide that suggests the recommended order for following Haskell tutorials from beginning to advanced. 272 | - [Haskell Programming from first principles][haskell-first-principles] 273 | An extremely detailed and comprehensive guide to Haskell, suitable both for complete beginners to programming and more experienced programmers who want to learn Haskell. This is probably one of the best resources on learning Haskell to date -- the only downside is that it isn't free. 274 | - [Learn You a Haskell for Great Good][haskell-great-good] 275 | A beginner's introduction to Haskell. Tends to focus on syntax. 276 | - [Haskell][haskell-wikibooks] 277 | One of Wikibook's featured books. Covers basic to advanced Haskell. Very comprehensive. 278 | - [Real World Haskell][haskell-real-world]: 279 | Covers how to use Haskell for practical applications. This is a good second book to read, after completing one of the above tutorials. 280 | - [State of the Haskell Ecosystem][haskell-ecosystem]: 281 | An overview of popular 3rd party libraries for accomplishing various tasks in Haskell.Not for absolute beginners, but more people interested in using Haskell to write practical and non-trivial applications. 282 | - [More free books][haskell-more] 283 | - Books (paper): N/A 284 | - Exercises: 285 | - [H-99][haskell-h-99] 286 | A collection of 99 problems designed to increase your proficiency in Haskell. 287 | 288 | [haskell-intro-func]: https://www.edx.org/course/introduction-functional-programming-delftx-fp101x#.VJw54f-kAA 289 | 290 | [haskell-try]: http://tryhaskell.org/ 291 | 292 | [haskell-getting-started]: http://stackoverflow.com/a/1016986/646543 293 | [haskell-first-principles]: http://haskellbook.com/ 294 | [haskell-great-good]: http://learnyouahaskell.com/ 295 | [haskell-wikibooks]: http://en.wikibooks.org/wiki/Haskell 296 | [haskell-real-world]: http://book.realworldhaskell.org/ 297 | [haskell-ecosystem]: https://github.com/Gabriel439/post-rfc/blob/master/sotu.md 298 | [haskell-more]: https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#haskell 299 | 300 | [haskell-h-99]: http://haskell.org/haskellwiki/H-99:_Ninety-Nine_Haskell_Problems 301 | 302 | ### HTML, CSS, and JavaScript 303 | 304 | Note: HTML, CSS, and JavaScript are the three core technologies that runs on every web browser and makes up every webpage. 305 | 306 | HTML is a language used to describe the _structure_ and _content_ of a webpage. CSS is used to describe the _style_ and _appearance_. JavaScript is used to add _behavior_ and _interactivity_. 307 | 308 | The recommended learning order is typically to start with HTML and CSS, then move on to learning JavaScript once you feel you've acquired a basic understanding of the previous two. 309 | 310 | Also note that HTML and CSS are examples of "markup languages", not "programming languages" and so will feel fairly different from JavaScript. If your goal is to learn just programming, you might want to jump straight ahead to JavaScript (or pick a different programming language!). However, since the main way to actually use JavaScript is through the web browser, you _do_ need to learn HTML and CSS at one point or another. 311 | 312 | - Online courses: 313 | - Codecademy has several courses related to web development. 314 | - [Make a website][webdev-cc-make-website] 315 | - [Make an interactive website][webdev-cc-make-interactive] 316 | - [HTML & CSS][webdev-cc-html-css] 317 | - [JavaScript][webdev-cc-js] 318 | - [jQuery][webdev-cc-jquery] 319 | Please note that Codecademy focuses only on _introducing_ programming languages. It is strongly recommended that you work through a more comprehensive beginner's tutorial after finishing Codecademy. 320 | - So does Udacity: 321 | - [Intro to HTML and CSS][webdev-uda-html-css] 322 | - [JavaScript Basics][webdev-uda-js] 323 | Does require some prior programming experience. 324 | - Open Culture's [Building Dynamic Websites][webdev-open-dynamic] 325 | Hosted by Harvard, and covers a wide variety of topics. 326 | - Khan Academy has a series of [three courses][webdev-khan] on introductory Javascript that focuses on drawing graphics and animations, and making games. 327 | - Team Treehouse has a series of courses on [HTML][webdev-treehouse-js], [CSS][webdev-treehouse-css], and [Javascript][webdev-treehouse-js] 328 | Allows a free 14-day trial, but later requires payment. 329 | - Interactive tutorials: 330 | - [Free Code Camp][webdev-freecodecamp] 331 | A beginner's introduction to HTML, CSS, JavaScript, and other web technologies. Contains a large amount of exercises. 332 | - [The Odin Project][webdev-odinproject] 333 | A beginner's full stack course. Contains a large amount of exercises. 334 | - [CSS3, please!][webdev-please] 335 | An interactive website that lets you dynamically change CSS rules to style an element on-screen. Not for beginners, but is a good way to discover advanced applications of CSS. 336 | - Video tutorials: N/A 337 | - Books and tutorials (online): 338 | - [Mozilla Developer Network][webdev-mdn] (MDN) 339 | A series of tutorials covering HTML, CSS, JavaScript, and more. Some tutorials are appropriate for beginners while other tutorials will be more advanced. 340 | - [HtmlDog][webdev-htmldog] 341 | Similar to the above, but targeted more specifically to beginners. 342 | - [Eloquent JavaScript][webdev-eloquent] 343 | A book that teaches you how to write idiomatic and clean JavaScript. Assumes prior experience with JavaScript/another programming language. 344 | - [A Re-introduction to JavaScript][webdev-js-reintroduction] 345 | A guide which gives a thorough and detailed overview of JavaScript. 346 | - More free books: 347 | - [HTML and CSS][webdev-more-html-css] 348 | - [JavaScript][webdev-more-js] 349 | - Books (paper): 350 | - [JavaScript: The Good Parts][webdev-the-good-parts] 351 | A short book that covers the core aspects of JavaScript as well as info on writing idiomatic and clean JavaScript. 352 | - Exercises: 353 | - [CSS Diner][webdev-css-diner] 354 | A series of exercises on using CSS selectors effectively. 355 | 356 | [webdev-cc-make-website]: http://www.codecademy.com/skills/make-a-website 357 | [webdev-cc-make-interactive]: http://www.codecademy.com/skills/make-an-interactive-website 358 | [webdev-cc-html-css]: http://www.codecademy.com/tracks/web 359 | [webdev-cc-js]: http://www.codecademy.com/tracks/javascript 360 | [webdev-cc-jquery]: http://www.codecademy.com/tracks/jquery 361 | [webdev-uda-html-css]: https://www.udacity.com/course/ud304 362 | [webdev-uda-js]: https://www.udacity.com/course/ud804 363 | [webdev-open-dynamic]: http://cs75.tv/2010/fall/ 364 | [webdev-khan]: https://www.khanacademy.org/computing/computer-programming 365 | [webdev-treehouse-html]: http://teamtreehouse.com/features/html 366 | [webdev-treehouse-css]: http://teamtreehouse.com/features/css 367 | [webdev-treehouse-js]: http://teamtreehouse.com/features/javascript 368 | [webdev-freecodecamp]: https://www.freecodecamp.com/ 369 | [webdev-odinproject]: https://theodinproject.com 370 | 371 | [webdev-please]: http://css3please.com 372 | 373 | [webdev-mdn]: https://developer.mozilla.org/en-US/docs/Web 374 | [webdev-htmldog]: http://www.htmldog.com 375 | [webdev-eloquent]: http://eloquentjavascript.net 376 | [webdev-js-reintroduction]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript 377 | [webdev-more-html-css]: https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#html-and-css 378 | [webdev-more-js]: https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#javascript 379 | 380 | [webdev-the-good-parts]: http://www.amazon.com/gp/product/0596517742 381 | 382 | [webdev-css-diner]: http://flukeout.github.io 383 | 384 | ### Lisp (Scheme, Common Lisp, Clojure, etc) 385 | 386 | - Online courses: N/A 387 | - Interactive tutorials: 388 | - [Try Clojure][lisp-try-clojure] 389 | An interactive tutorial for basic Clojure. 390 | - Video tutorials: N/A 391 | - Books and tutorials (online): 392 | - [The Nature of Lisp][lisp-nature] 393 | Not really a tutorial on Lisp, but is instead an article on why so many people advocate Lisp and claim it will fundamentally change how you view code. Very good at explaining the philosophy of Lisp. 394 | - [Structure and Interpretation of Computer Programs][lisp-sicp] 395 | SICP is the canonical introduction to Lisp, and used to be part of MIT's introduction to CS course (before they switched to Python). 396 | - [SICP in Clojure][lisp-sicp-clojure] 397 | An amended version of SICP which uses Clojure instead of Scheme. 398 | - [How to Design Programs][lisp-htdp] 399 | A competing book and philosophy of teaching to SICP. SICP tends to focus more on CS theory whereas HTDP tends to focus more on writing how to go about writing programs/analyzing problems. 400 | - [Build Your Own Lisp][lisp-build] 401 | Walks you through how to write a Lisp interpreter in C, teaching both languages simultaneously. 402 | - [Practical Common Lisp][lisp-learn-practical] 403 | An introductory book on Common Lisp. Covers practical and real-world applications of Common Lisp. 404 | - [Where to learn how to practically use Common Lisp][lisp-learn-practical] 405 | An aggregation of books and resources on effectively using Common Lisp for programmers coming from an imperative world. 406 | - [Learn Clojure][lisp-learn-clojure] 407 | A website collecting many links related to learning Lisp. 408 | - More free books: 409 | - [Clojure][lisp-more-clojure] 410 | - [Lisp][lisp-more-lisp] in general 411 | - [Scheme][lisp-more-scheme] 412 | - Books (paper): 413 | - [Land of Lisp][lisp-land] 414 | A book that teaches Lisp (specifically Common Lisp) via making games. For beginners. 415 | - Exercises: 416 | - [L-99][lisp-l99] 417 | A series of 99 problems designed to increase your proficiency in Lisp. 418 | - [4Clojure][lisp-4clojure] 419 | A series of exercises geared around learning Clojure. 420 | 421 | [lisp-try-clojure]: http://www.tryclj.com 422 | 423 | [lisp-nature]: http://www.defmacro.org/ramblings/lisp.html 424 | [lisp-sicp]: http://mitpress.mit.edu/sicp/ 425 | [lisp-sicp-clojure]: http://sicpinclojure.com 426 | [lisp-htdp]: http://htdp.org/) 427 | [lisp-build]: http://www.buildyourownlisp.com 428 | [lisp-practical]: http://www.gigamonkeys.com/book/ 429 | [lisp-learn-practical]: http://stackoverflow.com/q/7224823/646543 430 | [lisp-learn-clojure]: http://learn-clojure.com 431 | [lisp-more-clojure]: https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#clojure 432 | [lisp-more-lisp]: https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#lisp 433 | [lisp-more-scheme]: https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#scheme 434 | 435 | [lisp-land]: http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812 436 | 437 | [lisp-l99]: http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html 438 | [lisp-4clojure]: http://4clojure.com 439 | 440 | ### Java 441 | 442 | - Online courses: 443 | - The University of Helsinki's "[Java Programming][java-helsinki]" series for beginners. 444 | - Udacity's [Intro to Java Programming][java-uda-intro] 445 | An objects-first introduction to Java. 446 | - MIT Open Courseware: 447 | - [Introduction to Programming in Java][java-mit-intro-to-prog] 448 | - [Introduction to Computers and Engineering Problem Solving][java-mit-intro-to-computers] 449 | For beginners, emphasizes practical application of Java. 450 | - Stanford's 3-part "Introduction to Computer Science" series for beginners. The first course teaches Java, the latter two teaches C and C++. 451 | - [Programming Methodology][java-methodology] 452 | - [Programming Abstractions][java-abstractions] 453 | - [Programming Paradigms][java-paradigms] 454 | - Interactive tutorials: 455 | - [Learn Java][java-learn-online] 456 | An interactive tutorial that teaches basic Java. 457 | - Video tutorials: N/A 458 | - Books and tutorials (online): 459 | - [Introduction to Computer Science using Java][java-intro-cs] 460 | An introductory text on Java. Moves a bit slowly, but covers everything in great detail (including setup). 461 | - [Learn by Doing][java-doing] 462 | An introductory text on Java. The tutorial is exercise-driven. 463 | - [Think Java][java-think] 464 | Another introductory text on Java. The content is based on the "How to think like a Computer Scientist" series. 465 | - [Thinking in Java, 3rd edition][java-thinking] 466 | Note: the fourth edition is the latest one, but currently is not free. The website can also be a little hard to navigate -- the direct download link is [here][java-thinking-direct]. Assumes some basic prior programming experience. 467 | - [TutorialsPoint's Java Tutorial][java-tutorialspoint] 468 | An introduction to Java. Tends to focus mainly on syntax. May also make a good reference. 469 | - [The Java Tutorial][java-oracle] 470 | The official Java tutorial, produced by Oracle. Tends to focus on language features and syntax. 471 | - [More free books][java-more] 472 | - Books (paper): 473 | - [Head First Java][java-head] 474 | A beginner's introduction to Java. 475 | - Exercises: 476 | - [Practice-it][java-practice-it] 477 | A series of exercises hosted by the University of Washington, starting with basic Java and finishing with data structures and algorithms. Requires (free) registration first before you can view or work on the exercises. 478 | 479 | [java-uda-intro]: https://www.udacity.com/course/cs046 480 | [java-mit-intro-to-prog]: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-092-introduction-to-programming-in-java-january-iap-2010/index.htm 481 | [java-mit-intro-to-computers]: http://ocw.mit.edu/courses/civil-and-environmental-engineering/1-00-introduction-to-computers-and-engineering-problem-solving-spring-2012/ 482 | [java-methodology]: https://see.stanford.edu/Course/CS106A 483 | [java-abstractions]: https://see.stanford.edu/Course/CS106B 484 | [java-paradigms]: https://see.stanford.edu/Course/CS107 485 | [java-helsinki]: https://java-programming.mooc.fi/ 486 | 487 | [java-learn-online]: http://www.learnjavaonline.org 488 | 489 | [java-doing]: http://programmingbydoing.com 490 | [java-think]: http://greenteapress.com/thinkapjava/ 491 | [java-thinking]: http://www.mindview.net/Books/TIJ/ 492 | [java-thinking-direct]: http://www.mindviewinc.com/downloads/TIJ-3rd-edition4.0.zip 493 | [java-tutorialspoint]: http://www.tutorialspoint.com/java/index.htm 494 | [java-intro-cs]: http://chortle.ccsu.edu/java5/index.html 495 | [java-oracle]: http://docs.oracle.com/javase/tutorial/ 496 | [java-more]: https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#java 497 | 498 | [java-head]: http://www.amazon.com/Head-First-Java-2nd-Edition/dp/0596009208/ 499 | 500 | [java-practice-it]: http://practiceit.cs.washington.edu/ 501 | 502 | ### Perl 503 | 504 | - Online courses: N/A 505 | - Interactive tutorials: N/A 506 | - Video tutorials: N/A 507 | - Books and tutorials (online): 508 | - [Beginning Perl][perl-beginning] 509 | A comprehensive and thorough introduction to Perl. 510 | - [Modern Perl][perl-modern] 511 | A guide on writing clean and idiomatic Perl code. Very good for teaching the philosophy and fundamentals of Perl. Comprehensive and thorough. 512 | - [Impatient Perl][perl-impatient] 513 | An accelerated guide for impatient people or people with prior programming experience. 514 | - [Learn Perl in about 2 hours 30 minutes][perl-230] 515 | Another accelerated guide for the impatient. Geared towards people who have prior experience in another programming language. 516 | - [More free books][perl-more] 517 | - Perl.org also hosts a [list of recommended books][perl-books], many of which are available online for free. 518 | - Books (paper): 519 | - [Learning Perl][perl-learning] 520 | An introductory text on Perl. Teaches on focusing syntax/the details of Perl, and not so much on how to program. Pragmatic and practical. 521 | - Exercises: 522 | - [Perl Quiz of the Week][perl-qotw] 523 | A mailing list which sends out a new quiz/prompt once a week. Archives of past prompts are also available. 524 | 525 | [perl-beginning]: http://www.perl.org/books/beginning-perl/ 526 | [perl-modern]: http://modernperlbooks.com/books/modern_perl_2014/ 527 | [perl-impatient]: http://www.perl.org/books/impatient-perl/ 528 | [perl-230]: http://qntm.org/perl 529 | [perl-more]: https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#perl 530 | [perl-books]: http://www.perl.org/books/library.html 531 | 532 | [perl-learning]: http://www.amazon.com/Learning-Perl-Randal-L-Schwartz/dp/1449303587 533 | 534 | [perl-qotw]: http://perl.plover.com/qotw/ 535 | 536 | ### PHP 537 | 538 | Note: while PHP can be very convenient, quick, and easy to use, it's also a language viewed negatively by many programmers. (See [PHP: a fractal of bad design][php-fractal]). If you do decide to learn PHP and adopt it as your language of choice, just be aware of the fact that people will probably make fun of you at one point or another. 539 | 540 | Also, it's important to first learn [HTML and CSS](#html-css-and-javascript) before attempting to learn PHP. PHP is a language which attempts to "extend" and work with HTML, so may not fully make sense if you try and learn it before picking up basic web development. 541 | 542 | - Online courses: 543 | - Team Treehouse's [PHP course](http://teamtreehouse.com/features/php) - allows a free 14-day trial, but later requires payment. 544 | - Interactive resources: 545 | - [Learn PHP][php-learn] 546 | An interactive guide that teaches basic PHP. 547 | - Exercises: 548 | - Video tutorials: N/A 549 | - Books and tutorials (online): 550 | - [PHP Manual][php-manual] 551 | The official tutorial on PHP. Tends to focus on language features and syntax. 552 | - [TutorialPoint's PHP Tutorial][php-tutorialspoint] 553 | An introduction to PHP. Tends to focus on syntax. May make a good reference. 554 | - [PHP The Right Way][php-right-way] 555 | A comprehensive guide that covers modern best practices in PHP and attempts to address common flaws, misconceptions, and errors that many beginners (and many tutorials) seem to possess. Assumes some prior knowledge of PHP. 556 | - Books (paper): 557 | - [PHP for Absolute Beginners][php-absolute] 558 | An introductory text on PHP. 559 | - [PHP Solutions: Dynamic Web Design Made Easy, 2nd edition][php-solutions] 560 | An example-driven introduction to PHP. 561 | 562 | [php-learn]: http://www.learn-php.org/ 563 | 564 | [php-fractal]: http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/ 565 | 566 | [php-manual]: http://php.net/manual/en/index.php 567 | [php-tutorialspoint]: http://www.tutorialspoint.com/php/ 568 | [php-right-way]: http://www.phptherightway.com/ 569 | 570 | [php-absolute]: http://www.amazon.com/PHP-Absolute-Beginners-Jason-Lengstorf/dp/1430268158/ref=dp_ob_title_bk 571 | [php-solutions]: http://www.amazon.com/PHP-Solutions-Dynamic-Design-Made/dp/1430232498/ref=dp_ob_title_bk 572 | 573 | 574 | ### Python 575 | 576 | Note: there are currently two versions of Python that are commonly taught and used -- Python 2, and Python 3. Python 3 is the most recent version, but for a variety of reasons Python 2 still is fairly popular among many developers. 577 | 578 | If you're not sure which version to pick, my recommendation would be to pick the resource which looks like the best fit for you, and just use whatever version they're recommending. Luckily, the differences between the two are very minor (at least from the perspective of the beginner), so there's really no difference if you learn using Python 2 vs Python 3. 579 | 580 | That said, when working on your own programs, I would always pick Python 3 unless you have good reason to otherwise. The Python community, with the exception of a few holdouts, is moving towards Python 3 and abandoning Python 2. 581 | 582 | - Online courses: 583 | - University of Helsinki [MOOC Python Programming 2025][python-mooc-helsinki] 584 | - edx's [Introduction to Computer Science and Programming Using Python][python-mit-intro] 585 | The companion book can be [found here][python-mit-intro-book]. The course is designed for beginners, part of a 2-part series, is self-paced, and has an emphasis on computation and data science. 586 | - MIT Open Courseware also offers a gentler "lead-in" course designed for those with no programming background that you can take before taking the above: [Building Programming Experience: A Lead-In to 6.001][python-mit-lead-in]. 587 | - MIT Open Courseware's [A Gentle Introduction to Programming Using Python][python-mit-gentle] 588 | A gentler version of the above. 589 | - Coursera's [Programming for Everybody (Python)][python-coursera] 590 | For beginners; requires registration. 591 | - Udacity's [Programming Foundations with Python][python-udacity] 592 | Requires some prior programming experience; focuses on object-oriented programming. 593 | - Team Treehouse's [Python course][python-treehouse] 594 | Allows a free 14-day trial, but later requires payment. 595 | - Interactive resources: 596 | - [LearnPython][python-learn] 597 | An interactive online guide that teaches basic Python. 598 | - [Try Python][python-try] 599 | Another interactive online guide. 600 | - Video tutorials: N/A 601 | - Books and tutorials (online): 602 | - [Automate the Boring Stuff with Python][python-automate] 603 | A book for complete beginners. It is aimed at office workers, students, administrators, and hobbyists who want to learn how to write practical programs rather than necessarily become software engineers. From the [Invent with Python][python-invent] author. 604 | - How to Think Like a Computer Scientist ([Python 2 version][python-think-cs-2] and [Python 3 version][python-think-cs-3]) 605 | A comprehensive introductory text on Python, focusing on teaching computer science fundamentals and problem-solving skills through Python. Suitable for beginners. 606 | - [Think Python][python-think] 607 | Another comprehensive introductory text on Python, with a similar focus as the previous resource. Also suitable for beginners. 608 | - The official Python tutorial (for [Python 2][python-official-2] and [Python 3][python-official-3]). Moves a little quickly, but is very comprehensive and thorough. This is probably the best resource for experienced programmers who want to learn Python, since it doesn't linger for too long on basic material. 609 | - [Problem Solving with Algorithms and Data Structures][python-problem] 610 | A fantastic introduction to data structures and algorithms and other traditional 611 | computer science concepts using Python. While it does briefly cover Python syntax, 612 | it assumes that you already have some basic prior experience. 613 | - [Dive into Python 3][python-dive] 614 | An accelerated introduction to Python. Warning: do NOT use "Dive into Python 2". It's very outdated. 615 | - [Program Arcade Games With Python And Pygame][python-arcade] 616 | A fantastic and thorough introduction to Python via making games. For beginners. 617 | - [Invent with Python][python-invent] 618 | Teaches programming through the creation of computer games with Python and Pygame. For beginners. 619 | - [The Hitchhiker's Guide to Python][python-hitchhiker] 620 | A comprehensive introduction to the Python ecosystem. Covers how to properly configure and set up a development environment in Python, best practices, writing idiomatic code, what the best 3rd party libraries are for different tasks, and shipping your code. Useful for both beginners and experts (however, the guide does not actually teach Python itself). 621 | - [pycrumbs][python-pycrumbs] 622 | A huge list of many useful articles, tutorials, and snippits on Python, ranging from basic to advanced. 623 | - [More free books][python-more] 624 | - [PyMOTW][pymotw] 625 | A tour of the Python standard library through short examples. 626 | - Books (paper): 627 | - [Import Python][python-import] 628 | A catalog of Python books (some are free). 629 | - Exercises: 630 | - [Pyschools][python-pyschools] 631 | Exercises and challenges in Python. Challenges require (free) registration. 632 | 633 | [python-mooc-helsinki]: https://programming-25.mooc.fi/ 634 | [python-udacity]: https://www.udacity.com/course/ud036 635 | [python-coursera]: https://www.coursera.org/course/pythonlearn 636 | [python-mit-intro]: https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-0#.VJw5pv-kAA 637 | [python-mit-intro-book]:http://mitpress.mit.edu/books/introduction-computation-and-programming-using-python-0 638 | [python-mit-lead-in]: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-090-building-programming-experience-a-lead-in-to-6-001-january-iap-2005/ 639 | [python-mit-gentle]: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-189-a-gentle-introduction-to-programming-using-python-january-iap-2011/ 640 | [python-treehouse]: http://teamtreehouse.com/features/python 641 | 642 | [python-learn]: http://learnpython.org 643 | [python-try]: http://www.trypython.org 644 | 645 | [python-automate]: http://automatetheboringstuff.com 646 | [python-lpthw]: http://learnpythonthehardway.org/book/ 647 | [python-think-cs-2]: http://www.openbookproject.net/thinkcs/python/english2e/ 648 | [python-think-cs-3]: http://www.openbookproject.net/thinkcs/python/english3e/ 649 | [python-think]: http://www.greenteapress.com/thinkpython/ 650 | [python-official-2]: https://docs.python.org/2/tutorial/ 651 | [python-official-3]: https://docs.python.org/3/tutorial/ 652 | [python-problem]: http://interactivepython.org/runestone/static/pythonds/index.html 653 | [python-dive]: http://www.diveintopython3.net/ 654 | [python-invent]: http://inventwithpython.com/ 655 | [python-arcade]: http://ProgramArcadeGames.com 656 | [python-hitchhiker]: https://python-guide.readthedocs.org/en/latest/ 657 | [python-pycrumbs]: http://resrc.io/list/4/pycrumbs/ 658 | [python-more]: https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#python 659 | 660 | [python-import]: http://importpython.com/books 661 | 662 | [python-pyschools]: http://www.pyschools.com 663 | [pymotw]: http://pymotw.com 664 | 665 | ### Ruby 666 | 667 | - Online courses: 668 | - Team Treehouse's [Ruby course][ruby-treehouse] 669 | Allows a free 14-day trial, but later requires payment. 670 | - Interactive tutorials: 671 | - [RubyMonk][ruby-rubymonk] 672 | A collection of interactive tutorials to help you learn basic and advanced Ruby. 673 | - [TryRuby][ruby-try] 674 | An interactive online guide that teaches you basic Ruby step-by-step. 675 | - [Learn Ruby][ruby-learn] 676 | A downloadable set of interactive tutorials. 677 | - Video tutorials: N/A 678 | - Books and tutorials (online): 679 | - [Why's (Poignant) Guide to Ruby][ruby-poignant] 680 | A little quirky, but still very good. 681 | - [Learn Ruby The Hard Way][ruby-lrthw] 682 | Part of the "Learn X The Hard Way" series. Focuses on teaching Ruby through a series of self-guided exercises. 683 | - [More free books][ruby-more] 684 | - Books (paper): 685 | - [The Well-Grounded Rubyist][ruby-grounded] 686 | A comprehensive and thorough introduction to Ruby. For beginners. 687 | - [Eloquent Ruby][ruby-eloquent] 688 | A guide on how to write Ruby idiomatically and cleanly. This book assumes that you already know Ruby or some other programming language. 689 | - Exercises: 690 | - [Ruby Quiz][ruby-quiz] 691 | A series of exercises on writing programs in Ruby. New exercises are no longer being written, but the existing exercises are still very good. 692 | 693 | [ruby-treehouse]: http://teamtreehouse.com/features/ruby 694 | 695 | [ruby-rubymonk]: http://rubymonk.com 696 | [ruby-try]: http://tryruby.org 697 | [ruby-learn]: http://rubykoans.com 698 | 699 | [ruby-lrthw]: http://learncodethehardway.org/ruby/ 700 | [ruby-poignant]: http://mislav.uniqpath.com/poignant-guide/ 701 | [ruby-more]: https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#ruby 702 | 703 | [ruby-grounded]: http://www.amazon.com/The-Well-Grounded-Rubyist-David-Black/dp/1933988657 704 | [ruby-eloquent]: http://www.amazon.com/Eloquent-Ruby-Addison-Wesley-Professional-Series/dp/0321584104 705 | 706 | [ruby-quiz]: http://rubyquiz.com 707 | 708 | ### Scratch 709 | 710 | Scratch is a language wherein you create programs by dragging together and connecting "blocks". Unlike other programming languages, Scratch is very visual, making it a very good first programming language, especially for children and younger teens. 711 | 712 | Because not many people may be familiar with Scratch, this section will contain resources that are helpful both for _learning_ Scratch, and _teaching_ Scratch. 713 | 714 | There are two 715 | 716 | - Online courses: 717 | - edX's [Programming in Scratch](https://www.edx.org/course/programming-scratch-harveymuddx-cs002x#.VJw5t_-kAA) - for beginners. 718 | - edX's [Middle-Years Computer Science](https://www.edx.org/course/middle-years-computer-science-harveymuddx-cs001x#.VJw5rP-kAA) - a course designed to help teachers design an engaging computer science curriculum for middle-schoolers using Scratch. 719 | - Interactive tutorials: N/A 720 | - Video tutorials: 721 | - [Video tutorials][scratch-official] from Scratch's website 722 | A collection of video tutorials on Scratch for absolute beginners. Very comprehensive. 723 | - Books and tutorials (online): 724 | - [Invent with Scratch!][scratch-invent] 725 | An introductory text on Scratch. For beginners. 726 | - [Scratch for Budding Computer Scientists][scratch-budding] 727 | A short tutorial that takes a more formalized approach to teaching Scratch. Best suited for those with some prior experience. 728 | - [Computer Science Concepts in Scratch][scratch-cs-concepts] 729 | A thorough introduction to Scratch. For beginners. 730 | - [Scratch Advanced Topics][scratch-advanced] 731 | A collection of resources and guides on advanced usage of Scratch. Not for beginners. 732 | - Reference guides: for [Scratch][scratch-reference] and [Snap/Build Your Own Blocks][scratch-snap-reference] (a variant of Scratch) 733 | Contains comprehensive descriptions of all language features. The Scratch reference will be useful for all levels, and the Snap reference will be particularly useful for those who are already proficient at programming in another language. 734 | - [Scratch for Educators][scratch-educators] 735 | Scratch's official portal and collection of resources for teaching using Scratch. 736 | - [More free books][scratch-more] 737 | - Books (paper): N/A 738 | - Exercises: N/A 739 | 740 | [scratch-official]: http://scratch.mit.edu/help/videos/ 741 | 742 | [scratch-invent]: http://inventwithscratch.com/about/ 743 | [scratch-budding]: http://cs.harvard.edu/malan/scratch/index.php 744 | [scratch-cs-concepts]: http://stwww.weizmann.ac.il/g-cs/scratch/scratch_en.html 745 | [scratch-advanced]: http://wiki.scratch.mit.edu/wiki/Advanced_Topics_%28forum%29 746 | [scratch-reference]: http://download.scratch.mit.edu/ScratchReferenceGuide14.pdf 747 | [scratch-snap-reference]: http://snap.berkeley.edu/SnapManual.pdf 748 | [scratch-educators]: http://scratch.mit.edu/educators/ 749 | [scratch-more]: https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#scratch 750 | 751 | --- 752 | 753 | ## Other topics 754 | 755 | Note: this section of the guide is very much a work-in-progress. 756 | 757 | ### Developing on specific platforms 758 | 759 | ### Mobile apps (Android, Mac and iOS, Windows) 760 | 761 | Due to my lack of experience working with mobile apps, I don't feel particularly comfortable recommending any particular resources regarding mobile development. This section of the guide might be expanded in the future, but for now, I would recommend following the recommendations listed here: 762 | 763 | - [Android](https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#android) 764 | - [iOS](https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#ios) 765 | - [Windows](https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#windows-phone) 766 | 767 | ### Data structures and algorithms 768 | 769 | Unless otherwise noted, all of the resources in this category assume prior programming experience. 770 | 771 | - Online courses: 772 | - Udacity's [Intro to Algorithms](https://www.udacity.com/course/cs215) - assumes proficiency in math up to the Algebra 2 level. 773 | - Coursera's [Algorithms: Design and Analysis, Part 1](https://www.coursera.org/course/algo) - lectures are archived. Assumes some familarity with proofs. 774 | - Open Culture has several good video playlists (mostly on YouTube) 775 | - [Algorithm Design and Analysis](https://www.youtube.com/playlist?list=PL6EF0274BD849A7D5) - hosted by UCDavis (University of California, Davis) 776 | - [Computer Science 61B (Data structures)](https://www.youtube.com/playlist?list=PL-XXv-cvA_iDXrTvCvDgIkeCWeSIDr4Yh) - hosted by UCBerkeley (University of California, Berkeley). 777 | - [CS2: Data Structures and Algorithms](https://www.youtube.com/course?feature=edu&list=ECE621E25B3BF8B9D1&category=University%2FScience) - Hosted by the University of New South Wales 778 | - MIT Open Courseware's [Introduction to Algorithms](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/) and [Design and Analysis of Algorithms](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/) 779 | - Khan Academy's [Algorithms](https://www.khanacademy.org/computing/computer-science/algorithms) 780 | - Interactive tutorials: N/A 781 | - Exercises: 782 | - [Codingbat][algo-codingbat] 783 | Contains Java and Python exercises. For beginners and intermediate-level programmers. 784 | - [CodeAbbey][algo-codeabbey] 785 | Similar to Codingbat. 786 | - [HackerRank][algo-hackerrank] 787 | Contains a large collection of exercises, from basic up to the competitive 788 | level. Good for both beginners and advanced programmers. Also holds their own 789 | online competition. 790 | - [TopCoder][algo-topcoder] 791 | Similar to HackerRank. 792 | - [UVa Online Judge][algo-uva] 793 | A collection of programming problems and solutions from multiple programming 794 | competitions. 795 | - [Project Euler][algo-euler] 796 | A collection of programming exercises. The exercises are more math-oriented, 797 | and are not always CS-oriented. 798 | - Video tutorials: N/A 799 | - Books and tutorials (online): 800 | - [Problem Solving with Algorithms and Data Structures][algo-problem] 801 | A very thorough introduction to data structures and algorithms. Although it uses 802 | Python, the main concepts taught should be applicable to every language. Starts with 803 | a quick overview of Python for those unfamiliar to the language. 804 | - [Algorithms by Robert Sedgewick](http://algs4.cs.princeton.edu/home/) which is in Java and accompanies [these lectures](https://www.coursera.org/course/algs4partI) on Coursera. 805 | - [The Stony Brook Algorithm Repository](http://www3.cs.stonybrook.edu/~algorith/) - a comprehensive reference of many different data structures and algorithms. 806 | - [The Big-O Cheat Sheet](http://bigocheatsheet.com/) - a cheat sheet containing links and condensed information about the top most commonly-used/commonly-taught data structures and algorithms. 807 | - Books (paper): 808 | - [Introduction to Algorithms](http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844) - the canonical guide to algorithms and is very comprehensive. The book is language agnostic, moves at an accelerated pace, and is accompanied by lectures [here](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/index.htm). 809 | - [The Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steve-Skiena/dp/0387948600) - the first half of the book emphasizes the design and analysis of algorithms, and the second half is a catalog of the 75 most important algorithmic problems for reference. 810 | - [How can I rebuild my base of algorithms/data structures knowledge?](http://stackoverflow.com/q/1697572/646543) - contains links to various recommended books and suggestions for improvement. 811 | 812 | [algo-problem]: http://interactivepython.org/runestone/static/pythonds/index.html 813 | [algo-codingbat]: http://codingbat.com 814 | [algo-codeabbey]: http://www.codeabbey.com 815 | [algo-hackerrank]: https://www.hackerrank.com 816 | [algo-topcoder]: http://www.topcoder.com 817 | [algo-uva]: http://uva.onlinejudge.org 818 | [algo-euler]: https://projecteuler.net 819 | 820 | 821 | --- 822 | 823 | ## Tools 824 | 825 | ### Version control 826 | 827 | #### Git 828 | 829 | - Online courses: 830 | - [How to Use Git and GitHub](https://www.udacity.com/course/ud775) - via Udacity. 831 | - Interactive tutorials: 832 | - [Learn Git Branching](http://pcottle.github.io/learnGitBranching/) - a very visual interactive tutorial starting from the absolute basics with a high emphasis on understanding the internals/what each git command really means. 833 | - [Try Git](https://try.github.io/levels/1/challenges/1) - an interactive tutorial that teaches basic Git. 834 | - Exercises: N/A 835 | - Video tutorials: N/A 836 | - Books and tutorials (online): 837 | - [Learn Version Control with Git](http://www.git-tower.com/learn/ebook/command-line/introduction) - an introduction to Git for the absolute beginner (via git-tower). 838 | - Git has an [official reference and book](http://git-scm.com/documentation) 839 | - [More free books](https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#git) 840 | - Books (paper): N/A 841 | 842 | #### Mercurial 843 | 844 | - Online courses: N/A 845 | - Interactive tutorials: N/A 846 | - Exercises: N/A 847 | - Video tutorials: N/A 848 | - Books and tutorials (online): 849 | - [HgInit](http://hginit.com/01.html) - a basic introduction to Mercurial. 850 | - [Mercurial: The Definitive Guide](http://hgbook.red-bean.com) 851 | - [More free books](https://ebookfoundation.github.io/free-programming-books-search/?§=books&file=free-programming-books-langs.md#mercurial) 852 | - Books (paper): N/A 853 | 854 | TODO: Expand, add info on Subversion 855 | --------------------------------------------------------------------------------