8000 Update README.md · combinatorist/free-intro-to-cs@b9654c7 · GitHub
[go: up one dir, main page]

Skip to content

Commit b9654c7

Browse files
Update README.md
1 parent 495d0a5 commit b9654c7

File tree

1 file changed

+91
-2
lines changed

1 file changed

+91
-2
lines changed

README.md

Lines changed: 91 additions & 2 deletions
10000
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,91 @@
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)
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

Comments
 (0)
0