Live data from Hacker News

Ask HN: The Required Fundamentals for Self-Taught Programming

news.ycombinator.com

51–57 of 57 posts

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

#51

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…

An entire CS curriculum from the beginning starting with fundamentals is particularly hard to follow by yourself and not particularly rewarding. Some people could do that but most would lose interest in the theory and never end up anywhere. It's the kind of thing that needs structure which not many people are going to create for themselves.

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

#52
post #24

Gang of Four book on code patterns

I hope that you forgot the /s on that line.

Learning Patterns is one of the worst things to do without the experience in the problems that they solve since it results in coders who think that you write programs by hooking up some objects built with a Factory via xml (well, that was the thing when I wrote the post... its yaml now) and you've got a program - and that every program should be built of Factories and Observers and Facades and such and the dev goes about and builds the Patterns without actually solving the problem.

I have ranted on this before and that rant is at http://the-whiteboard.github.io/2016/09/02/patterns.html

I would also encourage reading https://www.artima.com/articles/how-to-use-design-patterns

> Bill Venners: Is the value of patterns, then, that in the real world when I feel a particular kind of pain I'll be able to reach for a known solution?

> Erich Gamma: This is definitely the way I'd recommend that people use patterns. Do not start immediately throwing patterns into a design, but use them as you go and understand more of the problem. Because of this I really like to use patterns after the fact, refactoring to patterns. One comment I saw in a news group just after patterns started to become more popular was someone claiming that in a particular program they tried to use all 23 GoF patterns. They said they had failed, because they were only able to use 20. They hoped the client would call them again to come back again so maybe they could squeeze in the other 3.

> Trying to use all the patterns is a bad thing, because you will end up with synthetic designs—speculative designs that have flexibility that no one needs. These days software is too complex. We can't afford to speculate what else it should do. We need to really focus on what it needs. That's why I like refactoring to patterns. People should learn that when they have a particular kind of problem or code smell, as people call it these days, they can go to their patterns toolbox to find a solution.

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

#53
post #52
post #24

Gang of Four book on code patterns

I hope that you forgot the /s on that line. Learning Patterns is one of the worst things to do without the experience in the problems that they solve since it results in coders who think that you write programs by hooking up some objects built with a Factory via xml (well, that was the thing when I wrote the post... its yaml now) and you've got a program - and that every program should be built of Factories and Obser…

> Trying to use all the patterns is a bad thing, because you will end up with synthetic designs

That's how you learn. We don't become seniors overnight.

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

#54
Start by just learning Python. It's how I started 15 years ago. It's how my wife started, with https://programming-24.mooc.fi/ , and how she got into computer science as her current college major. It's still the best general purpose thing out there.

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

#55
post #53
post #52

Earlier quoted context omitted.

I hope that you forgot the /s on that line. Learning Patterns is one of the worst things to do without the experience in the problems that they solve since it results in coders who think that you write programs by hooking up some objects built with a Factory via xml (well, that was the thing when I wrote the post... its yaml now) and you've got a program - and that every program should be built of Factories and Obser…

> Trying to use all the patterns is a bad thing, because you will end up with synthetic designs That's how you learn. We don't become seniors overnight.

One certainly doesn't become a senior overnight. However, the GoF book is not a book for fundamentals for a self taught developer.

I will also point out that the quote that I have and that you've quoted again is from Erich Gamma... of Design Patterns: Elements of Reusable Object-Oriented Software by by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides.

The GoF book on design patterns is a book for how to solve a common set of problems using these common solutions. What it is not is a "use these solutions in every well designed program".

My read on the OP's question is one of "how to become a junior programmer" - they can read code but don't write it well. The GoF is not the next book on that path. It is a book to read after you've been designing and understand the pains of writing and designing larger pieces of software... but if you're still working on "write something that solves a problem in 200 lines" the GoF will not provide any solutions for those problems. ... And if you do try to apply the GoF to the 200 line long problems you'll have contrived solutions that are a synthetic design that, in the words of Erich Gamma "speculative designs that have flexibility that no one needs. These days software is too complex."

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

#56
How to be a Programmer by Robert L. Read (and expanded by the community) https://github.com/braydie/HowToBeAProgrammer

It is a collection of short essays on particular skills that are applicable to programmers of different levels.

The introduction starts with:

> To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom he or she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one.

I will also point out that "How to debug" is the first thing in the list. It starts out with:

> Debugging is the cornerstone of being a programmer. The first meaning of the verb "debug" is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind.

> Idealists, those who think design, analysis, complexity theory, and the like are more fundamental than debugging, are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging.

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

#57

Earlier quoted context omitted.

+1 for learning datastructures + algorithms in a structured way. Other posters are saying "just build stuff and you will learn", which isn't wrong, but there's a reason every CS student learns data structures and algorithms first. They are literally the building blocks for everything else. Then, once you've got that foundation, the "just build stuff" advice is sound but if you skip that step you will always be at a d…

Do you know of a more beginner friendly book?

For algorithms, I would recommend "Grokking Algorithms" by Aditya Y. Bhargava. The reason is that the book contains hand drawn visualization. I believe this will make the beginner easier to learn the concept.

One more thing, if you learn programming. Don't forget to practice, practice, and practice. The book has exercise sections. Please, don't skip it.

https://www.manning.com/books/grokking-algorithms-second-edi...

Post reply on HN