[HN Gopher] ASK HN: The Required Fundamentals for Self-Taught Pr...
       ___________________________________________________________________
        
       ASK HN: The Required Fundamentals for Self-Taught Programming
        
       I have been wondering which programming fundamentals are needed for
       using in real projects and the fundamentals in computer science
       needed. I already can read code, but don't know how to apply that
       effectively. Any suggestions? Like books and resources?
        
       Author : LunarVB
       Score  : 24 points
       Date   : 2024-05-30 21:45 UTC (1 hours ago)
        
       | palata wrote:
       | If you can already read code... just start a _small_ project of
       | your own, I would say. Pick the language you are most familiar
       | with and create something. Be patient, learn as you go. Learning
       | to code requires a lot of time and dedication, but it is a good
       | experience!
       | 
       | What is your language? Maybe people here could give you ideas of
       | a good first project to try :-).
        
         | aireo wrote:
         | I hope the OP is okay with me getting in on this.
         | 
         | I just picked up _Learning Go: An Idiomatic Approach to Real-
         | World Programming_, 2nd ed, based on its positive reviews. I'd
         | like to read it and create a small project (for example, a
         | simple backend for a personal website).
         | 
         | Any other suggestions for a good Go project?
        
           | veqq wrote:
           | Alex Edwards' Let's Go and then Let's Go Further are already
           | sufficient, honestly. You'll built a simple backend and go
           | way further quickly with them.
        
           | hluska wrote:
           | When you get started, make sure that the project interests
           | you. The language doesn't matter much because if you keep
           | going, the code will embarrass you in six months anyways. The
           | project itself doesn't even matter much as long as it
           | interests you.
           | 
           | If it interests you, you will want to work on it and the
           | initial (extremely frustrating) steps will be more joyful and
           | fun. You will still get frustrated and likely be embarrassed
           | by the project within six months, but that only means two
           | things:
           | 
           | 1.) You kept going (which is most important).
           | 
           | 2.) You got much better (which is great news).
           | 
           | Otherwise, be gentle on yourself.
        
         | LunarVB wrote:
         | My first language that i was taught is C, i tried once making
         | something with Arduino but i didn't went too far with it.
        
       | astrodust wrote:
       | You need _problems to solve_ , but most importantly, problems
       | that are highly _relevant_ to you and your interests so you won
       | 't give up easily if they become unexpectedly difficult.
       | 
       | You'll be forced to learn new approaches, new tools, perhaps even
       | new languages to solve these problems if they're challenging
       | enough, and don't worry, you'll almost always assume something is
       | easy when it turns out to be a lot harder than you could ever
       | imagine.
       | 
       | Get _exceedingly good_ at breaking down difficult problems into
       | smaller steps you can actually achieve. Try and estimate how much
       | time these steps will take so over time you can get better at
       | estimating how much work is involved in something, which can
       | inform which approach to take or which tool to use.
       | 
       | Above all else, when you learn something and want to know more,
       | learn both in terms of deeper _fundamentals_ , but also in a more
       | strategic sense, like how it is applied, and what are the
       | ramifications of this knowledge, how it fits into the bigger
       | picture.
       | 
       | Remember, it's abstractions _all the way down_ , but also all the
       | way up!
        
         | LunarVB wrote:
         | Got it! Thank you!
        
       | calrain wrote:
       | If you can get access to ChatGPT, use it as a learning resource.
       | 
       | Ask it to act as a mentor that is teaching you how to program,
       | ask it to give you an problem to solve, and give it a shot.
       | 
       | Then paste back your code you wrote (keep it simple) and ask it
       | to explain your approach, provide advice, describe patterns, and
       | explain tradeoffs between different techniques.
       | 
       | Initially, learning how to talk about code is important, then
       | identifying patterns and approaches.
       | 
       | Coding isn't about memorizing things, it's about understanding
       | the advantages and disadvantages of different approaches.
       | 
       | Have fun!
        
         | LunarVB wrote:
         | I see, thanks!
        
       | maxmynter95 wrote:
       | teachyourselfcs.com has a neat collection of textbooks for CS
       | fundamentals.
       | 
       | Though, these fundamentals are more theoretical (though
       | worthwhile). You may want to just build a couple of things first
       | to get some muscle memory.
       | 
       | No need to finish them, as long as you make it over a few hurdles
       | before you move on.
        
         | LunarVB wrote:
         | I will give a try, thanks!
        
       | colechristensen wrote:
       | 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
       | solving problems and learning what you need to know for that
       | problem. You'll build good experience and though that experience
       | you'll learn a lot.
        
         | LunarVB wrote:
         | Interesting, thanks for the tip!
        
         | boogieknite wrote:
         | 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
        
       | vasili111 wrote:
       | If you can read the code next step would be to start writing the
       | code. Write a code of the program that you are interested in and
       | it does not really matter which kind of program you will develop.
       | If you are interested in learning more about fundamentals (which
       | is really good) you can do that in parallel to writing the code.
        
       | veqq wrote:
       | The traditional reply is complete either of these books and
       | you'll be further than even an average Comp Sci BA:
       | - Structure and Interpretation of Computer Programs       - How
       | to Design Programs (easier)
       | 
       | In reality, it strong depends on your specific domain and how old
       | your company is. Doing embedded projects at home vs. quickly
       | prototyping systems in Ruby vs. modifying an API for a large SaaS
       | vs. lowering latency for trading vs. ensuring compliance at a
       | bank... The demands are all very different, yet generally we
       | don't write algorithms or implement data structures too often.
       | Our languages and libraries typically offer optimized versions,
       | we just have to know when and why to use them. And after it's
       | built, adding extra features won't change that model.
       | 
       | The way everyone actually learns is by doing many projects, like
       | an apprentice of old. Such a book could interest you (after)
       | though: https://aosabook.org/en/index.html#500lines
        
         | LunarVB wrote:
         | I will see that book, thank you!
        
       | llmblockchain wrote:
       | To answer your question we would need to know more about what you
       | want to do. What is a real project? A web application? A website?
       | A desktop application? Mobile?
       | 
       | I recommend picking an area of interest and diving in head first.
        
       | optimussupreme wrote:
       | I'll add to the comments: Whatever you decide to do, don't be too
       | picky. Choose something and get started. In the begginig avoid
       | lengthy courses or books; start with something small but read it
       | to the end. Be patient and consistent, and don't rush. Also I
       | would recommend to watch a youtube video: Harvard CS50 (2023) -
       | Full Computer Science University Course
        
       | simonw wrote:
       | Build projects and ship them. There's no better way to learn.
       | 
       | That could mean web applications deployed online, or CLI tools
       | that people can install, or data science projects that result in
       | a report you can show people, or mobile apps shipped to an App
       | Store.
       | 
       | The key thing is to build actual working software, and ideally to
       | get that to a place where other people can try it out. This will
       | help you learn SO much, and will make it a whole lot easier to
       | attract the attention of hiring managers as well.
        
       | rglover wrote:
       | In the words of Chris Coyier of CSS-Tricks fame:
       | 
       | "Just. Build. Websites."
       | 
       | All of the stuff you "need" to learn, you will learn along the
       | way trying to implement your ideas.
        
       | junon wrote:
       | Gang of Four book on code patterns
        
       | throwup238 wrote:
       | 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 you 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.
        
       | varjag wrote:
       | 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 translatable, 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.
        
       | aeonik wrote:
       | 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.
        
       | danielmarkbruce wrote:
       | 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.
        
       ___________________________________________________________________
       (page generated 2024-05-30 23:00 UTC)