The short answer is you never learn all of it. OTOH, you've probably already done a tiny bit of programming on your thermostat. But, if you want to learn more, I'd recommend the following steps to get as deep as you like. And remember:
It's not as much about knowing the exact specifications of language as how to articulate, research, and solve problems.
Python is a very good first language because it's designed to force good, readable code. It is also a modern, general purpose language used for literally anything. There are other specialty languages better suited for certain purposes, but that comes later.
- First, for inspiration, read the Zen of Python.
- Then, do Google's short tutorial.
- Or at very least, do their python setup.
- If you like book learning, read the one recommended by the inventor of Python:
- "Introduction to Computer Science Using Python: A Computational Problem-Solving Focus"
- In case it's your birthday, I may have already bought you a hard copy. 😉
- Along the way, you'll also start learning the command line.
- This is particularly useful if you're on Mac or Linux (can't speak for Windows).
It's important to work on some small problems to learn what a langauge can do (without drowning in new info). It's even better if you can do this in a context of a community where you can get feedback and see alternative solutions.
- Don't mind the strange title and try exercism.io for general programming puzzles.
- In case you like particularly mathy programming puzzles, my personal favorite is Project Euler.
Find something you want to:
- automate (time tracker?)
- share (website?)
- play (game?)
- emulate (someone else's project?)
You will almost certainly not know enough when you begin. You may even need or want to find and use an appropriate framework / library to extend Python. Regardless, you will start on a long journey of reading documentation and Stack Overflow. :)
If Python alone is not enough and you need to install dependencies, make sure to setup environments. Don't be shy to ask someone to do this for you the first time (like Code for Nasvhille, below).
For any project bigger than a language puzzle, you'll want to track changes as you develop. If you invest in learning source control, you'll want to use it for everything (how did I survive before?). In fact, if you pay close attention, some of the puzzle sites above track your changes in source control. :)
- "Git" is a distributed source control tool invented so thousands of developers could collaborate to make Linux. 🎆
- Github is a website for sharing code using git
- They have a puzzle series (see a pattern, yet?) to teach git.
- Atlassian also has good conceptual resources, but skip to these sections:
- Begninner
- Getting Started
- Collaborating (wait until you're collaborating)
- There are lots of GUI's for git, but I'd recommend learning on the command line eventually (you'll go further).
This is all a lot easier with people to answer questions. So, perhaps this is when you start going to meetups (or ask me). :)
Part of practical programming is figuring out what keeps the customer satisfied. You can learn on the job or join an open source project / community and chip in.
- Code For Nashville builds apps to help the local community (free, open source, civic hacking!)
Pick a practical specialized language to learn about a different problem domain
- Frontend development (what a non-technical user sees): Javascript
- Database development (where everything is stored permanently): SQL
Or pick an "academic" general purpose language to learn different styles of programming.
- Functional Programming: Clojure
- Strongly Typed Programming: Haskell
Maybe you've found you're really passionate about programming. Then, you should start thinking about problems abstracted from a programming language. You should have already been stretched a bit, but now might be a good time to hit it straight on.
- Blogs are a great way to get exposed to concepts and terminology to learn in depth later.
- When you want to go deep, my favorite book is the "Wizard Book": Structure and Interpretation of Computer Programs