|
1 |
| -# free-intro-to-cs |
2 |
| -My recommendations for people going into programming. |
| 1 | +# How do I learn to code? |
| 2 | +The short answer is you never learn all of it. |
| 3 | +OTOH, you've probably already done a tiny bit of programming on your thermostat. |
| 4 | +But, if you want to learn more, I'd recommend the following steps to get as deep as you like. |
| 5 | +And remember: |
| 6 | +> It's not as much about knowing the exact specifications of language as how to articulate and solve problems. |
| 7 | +
|
| 8 | +# Learn a Language (Python) |
| 9 | +Python is a very good first language because it's designed to force good, readable code. |
| 10 | +It is also a modern, general purpose language used for literally anything. |
| 11 | +There are other specialty languages better suited for certain purposes, but that comes later. |
| 12 | +- First, for inspiration, read the [Zen of Python][0] |
| 13 | +- Then, do Google's short [tutorial][1]. |
| 14 | + - Or at very least, do their [python setup][2]. |
| 15 | +- If you like book learning, read the one recommended by the inventor of Python: |
| 16 | + - ["Introduction to Computer Science Using Python: A Computational Problem-Solving Focus"][3] |
| 17 | +- Along the way, you'll also start learning the command line. |
| 18 | + - This is particularly useful if you're on Mac or Linux (Windows is a different ballgame). |
| 19 | + |
| 20 | +# Solve Small Puzzles "for Others" |
| 21 | +It's important to work on some small problems to learn what a langauge can do (without drowning in new info). |
| 22 | +It's even better if you can do this in a context of a community where you can get feedback and see alternative solutions. |
| 23 | +- Don't mind the strange title and try [exercism.io][4] for general programming puzzles. |
| 24 | +- In case you like particularly mathy programming puzzles, my personal favorite is [Project Euler][5]. |
| 25 | + |
| 26 | +# Tackle an Open-ended Problem for Yourself |
| 27 | +Find something you want to: |
| 28 | +- automate (time tracker?) |
| 29 | +- share (website?) |
| 30 | +- play (game?) |
| 31 | +- emulate (someone else's project) |
| 32 | + |
| 33 | +You will almost certainly not know enough when you begin. |
| 34 | +You may even need or want to find and use an appropriate framework / library to extend Python. |
| 35 | +Regardless, you will start on a long journey of reading documentation and [Stack Overflow][7]. :) |
| 36 | + |
| 37 | +## Isolate your Project Environments |
| 38 | +If Python alone is not enough and you need to install dependencies, make sure to [setup environments][8]. |
| 39 | +Don't be shy to ask someone to do this for you the first time (like Code for Nasvhille, below). |
| 40 | + |
| 41 | +## Learn Source Control (Git) |
| 42 | +For any project bigger than a language puzzle, you'll want to track changes as you develop. |
| 43 | +If you invest in learning source control, you'll want to use it for everything (how did I survive before?). |
| 44 | +In fact, if you pay close attention, some of the puzzle sites above track your changes in source control. :) |
| 45 | +- "Git" is a distributed source control tool invented so thousands of developers could collaborate to make Linux. :fireworks: |
| 46 | +- [Github][6] is a website for sharing code using git |
| 47 | + - They have a [puzzle series][9] (see a pattern, yet?) to teach git. |
| 48 | +- Atlassian also has good conceptual resources, but skip to these sections: |
| 49 | + - [Begninner](https://www.atlassian.com/git/tutorials/what-is-version-control) |
| 50 | + - [Getting Started](https://www.atlassian.com/git/tutorials/setting-up-a-repository) |
| 51 | + - [Collaborating](https://www.atlassian.com/git/tutorials/syncing) (wait until you're collaborating) |
10000
| 52 | +- There are lots of GUI's for git, but I'd recommend learning on the command line eventually (you'll go further). |
| 53 | + |
| 54 | +This is all a lot easier with people to answer questions. |
| 55 | +So, perhaps this is when you start going to meetups (or ask me). :) |
| 56 | + |
| 57 | +# Solve a Big Problem for Someone Else |
| 58 | +Part of practical programming is figuring out what keeps the customer satisfied. |
| 59 | +You can learn on the job or join an open source project / community and chip in. |
| 60 | +- [Code For Nashville][10] builds apps to help the local community (free, open source, civic hacking!) |
| 61 | + |
| 62 | +# Learn a Second Language |
| 63 | +Pick a practical specialized language to learn about a different problem domain |
| 64 | +- Frontend development (what a non-technical user sees): Javascript |
| 65 | +- Database development (where everything is stored permanently): SQL |
| 66 | + |
| 67 | +Or pick an "academic" general purpose language to learn different styles of programming. |
| 68 | +- Functional Programming: Clojure |
| 69 | +- Strongly Typed Programming: Haskell |
| 70 | + |
| 71 | +# Generalize Your Programming Concepts |
| 72 | +Maybe you've found you're really passionate about programming. |
| 73 | +Then, you should start thinking about problems abstracted from a programming language. |
| 74 | +You should have already been stretched a bit, but now might be a good time to hit it straight on. |
| 75 | +- Blogs are a great way to get exposed to concepts and terminology to learn in depth later. |
| 76 | +- When you want to go deep, my favorite book is the "Wizard Book": [Structure and Interpretation of Computer Programs][11] |
| 77 | + |
| 78 | +# Rinse, Repeat |
| 79 | + |
| 80 | +[0]: https://zen-of-python.info/ |
| 81 | +[1]: https://developers.google.com/edu/python/ |
| 82 | +[2]: https://developers.google.com/edu/python/set-up |
| 83 | +[3]: https://doc.lagout.org/programmation/python/Introduction%20to%20Computer%20Science%20using%20Python_%20A%20Computational%20Problem-Solving%20Focus%20%5BDierbach%202012-12-25%5D.pdf |
| 84 | +[4]: http://exercism.io/ |
| 85 | +[5]: https://projecteuler.net/ |
| 86 | +[6]: https://github.com/ |
| 87 | +[7]: https://stackoverflow.com/ |
| 88 | +[8]: https://docs.python.org/3/tutorial/venv.html |
| 89 | +[9]: https://try.github.io/levels/1/challenges/1 |
| 90 | +[10]: http://www.codefornashville.org/#projects |
| 91 | +[11]: http://web.mit.edu/alexmv/6.037/sicp.pdf |
0 commit comments