[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)