Learning Resources for Software Development
A friend of mine recently asked me how to break into programming, and what resources were available to help get a budding developer up to speed. After some reflection, I began to put this list together for her, and figured that others might find it useful as well.
Keep in mind that this is maybe a day's worth of digging, and is highly biased by my own experiences and leanings. I've been slinging code since 1992, and am also an avid amateur tech historian, so those experiences and leanings are decidedly atypical. Caveat emptor.
And now, without further ado, here's the list.
- MIT Open CourseWare - MIT's complete course materials, available gratis. Start here.
- Structure and Interpretation of Computer Programs - MIT's classic Computer Science textbook. This is the gold standard. (As in, it's a foundational work, just not one in common use. Still, it's a better foundational textbook than most out there these days.)
- SICP Video Lectures - Recordings of lectures by the authors of the above textbook.
- Clojure for the Brave and True - A solid primer on Clojure, a modern LISP on the Java Virtual Machine.
- Modern ClojureScript - A series of tutorials on ClojureScript, the JS-cross-compiled counterpart to Clojure, from the ground up.
- How To Design Programs - Similar to SICP, a free online textbook on how to design software from a theoretical perspective.
- A Road to Common Lisp - One person's advice on learning Common Lisp in the current computing world. As LISP has been around since the '50s, there's a lot of outdated (though still useful) material
- On Lisp - Paul Graham's seminal work on Common Lisp, one of the oldest, most powerful, and underrated languages in existence.
- Let Over Lambda - Warning: advanced material! Read at your own risk. All about macros and meta-programming, using Common Lisp. This will break your brain, but it will make you a much better programmer once you grok it. It might also spoil you for other languages forever.
- Microsoft Learn - Microsoft's learning knowledgebase. Good for primers on specific topics, reference, introductions to new technologies, etc.
- Microsoft Learn TV - Video lectures on how to use MS tech stacks to build solutions.
- Elixir School - Resources for learning Elixir, a scalable functional language on the Erlang VM stack.
- FreeCodeCamp - Online tech stack certification programs and tutorials. They have over 6,000+ tutorials across tons of areas.
- FreeCodeCamp YouTube channel - What it says on the tin.
- Khan Academy - Much like MIT's Open CourseWare, this is a "free university" focused on Kindergarten through Bachelor's-level coursework across many subjects, not just programming.
- Python for Non-Programmers - What it says on the tin.
- PluralSight - Online learning. Very popular.
- LinkedIn Learning - Online learning from LinkedIn.
- Course Report Coding Boot Camps (also Switchup Best Coding Boot Camps 2021) - In-person intensive workshops geared to rapidly train you in a specific technology or tech stack. Pricey, but often worth it not just for the training but for the networking opportunities, too.
- Rosetta Code - A cross-reference resource for seeing how to do a task in many different languages.
- Clojure Cheatsheet - What it says on the tin.
- Clojure Language Reference - Not just what, but how and why too.
- MSDN Docs - Documentation for everything Microsoft.
- Oracle Java Docs - References for the Java platform.
- Python Docs - References for the Python language.
- Android Dev Docs - References for Android development.
- StackExchange - Q&A for all kinds of things, many of which are programming-related.
Tools and Resources
- MS Visual Studio Hub - Visual Studio Community and Visual Studio Code are free. VS Code in particular is fantastic for web and LISP development.
- IntelliJ IDEA IDEA Community Edition is a free IDE for Java and related languages, among others.
- Android Studio - Essential for Android development. Free, and based on IntelliJ. If you've used IDEA, it should feel familiar.
- EMACS - GNU's universal power tool. One of the oldest still-living open-source projects, for better or worse.
- VIM - A different take on power-tool text editors. Primary competitor to EMACS since forever.
- Notepad++ - A light yet exceptionally functional text editor geared for programming. Useful to have in your back pocket.
- Chocolatey - Admin-space package management for Windows. The current de facto standard.
- Scoop - User-space package management for Windows. Not as comprehensive as Chocolatey, but it has a few packages Chocolatey doesn't (particularly some Clojure-related packages).
- Git - Distributed version control system. The current de facto standard for source control.
- GitHub - Cloud-hosted version control using Git. Pretty much everything interoperates with it.
- GitLab - All-in-one cloud-based DevOps using Git. Has a free tier.
- Kotlin - The future of Android development.
- Go - Google's general-purpose language.
- Rust - A modern rethinking of C++-type languages.
- D - A modern take on C-type languages.
- Swift - The language to know for Apple development.
- Lua - An embedded scripting language used almost everywhere, from games to embedded systems to industrial applications.
- Erlang - Designed for high-reliability massively-scaled applications, such as for use in the telecom, banking, and utilities industries.
- Elixir - Functional, scalable, distributed. A staple for Big Data.
- Clojure/ClojureScript - Lisp on the JVM and JSVM.
- Windows - Microsoft's desktop operating system.
- Unix - Includes Linux, BSD, Solaris, AIX, etc. Anything POSIX-compliant, really.
- MacOS - Based on BSD as of OS-X, so it's more-or-less POSIX-compliant. Due to Apple's modifications, though, this is a separate platform from the above.
- iOS - Apple's mobile operating system.
- Android - Google's mobile operating system.
- Java Virtual Machine - Tightly-coupled with the Java programming language, the JVM is also capable of hosting many other languages.
- .Net/CLR - Microsoft's Common Language Runtime. Basically their answer to the JVM, it also includes the surrounding infrastructure.
- Erlang Virtual Machine - Tightly-coupled to the Erlang language, like Java is to the JVM. Designed for concurrency, scalability, and fault-tolerance.
- The Cloud - this is more of a meta-platform; most cloud infrastructure runs on clusters of virtual machines, usually (but not always) running some form of Unix. See below.
- Amazon Web Services - Cloud computing with Amazon.
- Azure - Cloud computing with Microsoft.
- Google Cloud - Cloud computing with Google.
- DigitalOcean - Cloud computing without buy-in to the Big 3.
- DreamHost Cloud - Another cloud host.