Live data from Hacker News

Ask HN: The Required Fundamentals for Self-Taught Programming

news.ycombinator.com

21–30 of 57 posts

Re: Ask HN: The Required Fundamentals for Self-Taught Programming

#23

Looking for fundamentals to get you ready as a self taught programmer is going about it in the wrong direction. Pick something you want to do and go do it. When you run into roadblocks try to figure out how to solve them and when you get too stuck then ask the question "what are the required fundamentals I'm missing in order to solve this problem". You'll find you will rarely need to ask that question, just keep solv…

Im self taught and worked with CS majors as well as other self taught ppl. Maybe stating the obvious but its interesting that CS majors begin with fundamentals and work up to abstractions while self-taught people begin with beginner-friendly tools like nodejs then spend the next decade peeling back layers to learn all the inner workings of tools they used since day 1. Lots of prototypes kept me interested and built a habit of working on personal projects daily.

SICP was helpful in peeling back abstraction layers but I lost interest a quarter of the way through. I found The Rust Programming Book[0] really approachable coming from a nodejs background. Rust's compiler is so helpful I learned more about CS just working through the exercises and making mistakes. Rust really holds your hand but the book describes all of the "why" behind Rust's memory safety. Completely changed how I structure programs. After the Rust book I dove right into personal projects in Swift and fundamentals I learned in Rust translated very well.

[0] https://nostarch.com/rust-programming-language-2nd-edition

Re: Ask HN: The Required Fundamentals for Self-Taught Programming

#25
Data structures and algorithms. I don't have a formal education either but after 25 years of programming, IMO everything boils down to data structures and algorithms - the former more so than the latter. I think everything else comes from experience gained from on the job training because you need to train the pattern matching part of your brain. A good foundation in data structures and algorithms simplifies that process a lot.

Data structures are how programmers describe reality in the Wittgenstein/Sapir-Whorf sense and they shape our understanding as much as we use them to encode it. The right data structures drastically simplify problems and the wrong data structures turn them into nightmares of bugs and spaghetti code. Database schemas are the natural extension of this at the application, rather than module, level.

I don't have a specific recommendation because data structures is such a broad field, but an MIT OCW data structures and algorithms course is a good place to start. Oh and the book Designing Data Intensive Applications for a higher level overview of how data structures and algorithms are used in the field.

Re: Ask HN: The Required Fundamentals for Self-Taught Programming

#26
I would describe the minimal stack for self learning programming as the following:

1. Genuine interest

2. Ability to focus/concentrate and overcome frustration (there will be plenty)

3. Understanding of the basics: conditionals, iteration, functions and function calls, variables, basic input/output in any form. I would add on memory/pointers here, as understanding it will greatly improve your comprehension of what's going on even if you use a language that attempts to abstract that away.

It's worth finding a tutorial on these and do as many exercises as necessary. I'm not going to recommend any specific language as I think they all are bad for beginners in their own ways. You need not concern yourself with practicality or popularity of the language you pick though as your focus is on the basics. These skills are transferable, important and yet a tiny kernel of all your future progression. Then you'll be able to combine these basics to build some simple programs. Print a string backwards, guess the number, guide a cursor on a canvas by keyboard or similar.

From that point you can branch out to explore and comprehend actual CS concepts, and start with writing small practical applications.

Re: Ask HN: The Required Fundamentals for Self-Taught Programming

#27
If you really want to learn programming.

1. Buy SICP and put it on your book shelf.

2. Don't read it, instead read random StackOverflow posts talking about the content.

3. Spend the next 10-50 years trying to understand what people are talking about on various related forums.

4. Add more legendary books to your shelf over these 10 years, like The Art of Computer Programming. Fawn over their greatness. DON'T READ THEM.

5. Go on long walks, take spirit journeys to harsh natural locations, put your life in danger while you meditate on the concepts.

6. Blog profusely about your experiences.

7. Optional: actually write code.

Re: Ask HN: The Required Fundamentals for Self-Taught Programming

#28
Use python to build things. Make sure you can deploy them to AWS and actually use them.

Use c to build some very minor things, so you can get a better feel for how memory works.

Don't build any mobile apps, you'll go down a rabbit hole. Don't worry about algorithms or any theoretical books for at least a year.

Re: Ask HN: The Required Fundamentals for Self-Taught Programming

#29
The absolutely most fundamental thing to master is to read books about the concepts, practices, histories and philosophies of the craft.

It's become very popular to learn how to assemble code by following step-by-step tutorials and watching YouTube demonstrations. It does get the job done for a lot of people, but it usually doesn't develop very strong or deep foundational knowledge. As a result, people who don't make a point to leave that world generally end up stuck under a low skill ceiling.

So whatever suggestions you find in other replies here, favor books (and perhaps deep courses) over anything more shallow. And among those books, favor those that are heavy on prose and explain things over those that just guide you through doing things. And then when you get the books, sit down with them and really work through them.

Re: Ask HN: The Required Fundamentals for Self-Taught Programming

#30
I echo others: follow your nose. Build things. Find an open source project that interests you, pick a low hanging bug, fix it. Do it again. Work on harder issues. Try implementing a requested feature.

Start a greenfield project. Something that isn’t huge in scope. A basic text editor, a mini redis clone, an asteroids game. Try something harder for your next project.

Theory-wise I think type theory is a good start. Along with with Software Abstractions; a great book on the design of software systems using formal methods. And a book or two on data structures and algorithms. Discrete maths essentially and combinatorics. That will get you far.

Post reply on HN