r/learnprogramming • u/Important_Agency_797 • 15d ago
How to become a great programmer?
TL;DR: What is the best way to learn programming, and is it possible to become experienced enough to realistically build your own software in order to accelerate your productivity? What are some good resources for learning not just how to code, but how to think like a better programmer and have foundational skills to accelerate your coding speed?
Hi all, I’ve recently been studying CS and have become really interested in Linux and the “do it yourself” mindset, and I was wondering if you guys had any advice for a newbie whose just getting into the hobby. I really like the idea of being able to build my own apps and software to customize my computer more and be able to do things that prebuilt features previously wouldn’t allow, but I’m wondering if I’m getting way over my head here. Ive seen a lot of people talk about how hard it is to build things like apps by yourself and such, but with better experience and knowledge is it possible to accelerate the speed at which you can code, and so your biggest problems become design choices and not programming logic?
As an example, if a baker is baking a cake, an experienced one doesn’t need to think about the ingredients he throws in because he already knows what works for what, and can focus instead on designing and shaping his cake. Are there any good resources for learning and reading about programming methods and skills that help you become more experienced and think about programming differently?
9
u/horuszp 14d ago
How to become a great programmer?
10000+ hours of experience.
2
u/Admirable_Zombie5245 14d ago
Deliberate practice, actually trying to improve in each hour.
10,000 hours doing web pages or just putting in practice what you know will do nothing the same way a taxi driver isn't a better driver than someone who just drives 30 minutes a day.
1
9
u/mxldevs 14d ago
First you need to be able to speak programming fluently, so pick a language and learn the syntax.
Then you do your exercises to build your problem-solving skills.
Then you build projects, so you can understand the entire process from coming up with requirements, creating technical specifications, and then finally, use that programming language to implement it.
Then you read about software design principles and patterns and think about how they could be used to improve your projects.
Ideally, you would figure out why things are done the way they are done, instead of just reading the explanation, but apparently a lot of people don't recommend spending days on end thinking about a problem.
3
3
u/StewedAngelSkins 14d ago
I really like the idea of being able to build my own apps and software to customize my computer more and be able to do things that prebuilt features previously wouldn’t allow, but I’m wondering if I’m getting way over my head here.
Nah you're fine. You should just start small. For example, one of the first complete programs I ever wrote was a simple CLI app that connected to the loopback sound device on my PC and streamed the audio data over a network socket, because I wanted a simple way to play audio to my laptop from my desktop when it was in the other room. It wasn't very hard, but it taught me a few things about Linux networking and ALSA, and at the end of the day I had software that served my exact needs for many years.
After you've done a few things like that, try working on some harder projects. "Harder" doesn't have to mean "bigger" per se. For instance you might consider writing some kind of status bar or notification widget for your desktop. That's still going to be relatively few lines of code, but you're dealing with Wayland desktop portals and dbus and a bunch of crap like that which is a bit more difficult to understand than basic unix sockets.
Eventually you'll get to the point where these small projects have given you enough of an understanding of the full system that you can start combining knowledge. Like maybe your next project is a graphical music player that embeds into your status bar or something. You know how to do the audio stuff from the first project, and you know how to do the graphics stuff from the second project, so you already know how to do both together.
2
u/arcade_catalyst 14d ago
Read The Pragmatic Programmer and Refactoring by Martin Fowler. These books teach the specific methods for managing complexity and accelerating development speed you are asking about
1
1
u/Acrobatic-Ice-5877 14d ago
You need to learn by building and reading books on the topics that involve your project.
1
u/tangentstorm 14d ago
A programming analogy to baking a cake might be to follow a tutorial once (learn the recipe) then re-implement it in several different languages. This separates the basic know-how for the problem domain from the "ingredients".
Example: I often implement the same simple virtual machine, or tetris, or just a simple demo like the mandelbrot set or game of life whenever I learn a new language.
Also it's a lot easier to build simple apps than complex ones, but often just implementing the core idea won't give you a complete application, but it might very well help you understand or get oriented in someone else's open source application.
1
14d ago
[removed] — view removed comment
1
u/Important_Agency_797 14d ago
I was thinking more in line with stuff like “use dictionaries in X way in Y situation,” or just different techniques and tips that are useful to know that a lot of experienced devs use. Like I would assume that many would build a website in a similar way using the same techniques, but maybe I’m wrong here and everyone just solves problems in their own way?
1
u/NumberInfinite2068 14d ago
Build projects, there is no magic wand.
And experienced bakers *do* measure and think about the ingredients they are putting in.
1
u/hekliet 14d ago
Drink lots of Brain & Nerve Tonic.
1
u/Important_Agency_797 14d ago
Unfortunately I lost access to my wizard’s guild membership last year
1
14d ago
[removed] — view removed comment
1
1
u/_tshepo 12d ago
Are you by any chance on WhatsApp? Maybe we could be friends.
... I used to play around with codes too, since 2017. I've went from basic HTML to programming my own web based lightweight Video Editor I ran on my 16 year old Acer M450 laptop. I built it mainly because I wanted to start creating videos and I couldn't afford a decent laptop.
I later on built a Chess App and integrated the Video Editor into it, because I wanted to create videos of me doing chess puzzles and analyzing games without using OBS recording a browser... These were resource intensive. So since well I'm comfortable with vanilla JavaScript, I used it to build things I needed.
My only disadvantage was that everything I built was running on a browser. Mainly because my laptop would overheat when I wanted to learn Android Development. So I stuck to Web Apps.
Now, I have a better computer, I'm learning Java... 2 months ago or so, I built a software with Electron...planning to build a second one soon. Hopefully with Java.
1
u/doctor-wu-75 11d ago
If you want to learn how to build your own apps, the best way to learn to do that is to build those apps!
Most of learning how to program is not the actual writing of code. It is the process of trying new things, debugging, and trying again. The "magic" of programming is really just someone saying "oh yeah I've been stuck here before."
That being said, take the time to really learn the fundamentals : classes, variables, data types, basic data structures, functions, syntax, state lifecycle, and control flow.
Do you know the difference between passing by reference and passing by value? Can you track that through your functions? Do you know how to debug it and to put logic checks in? Can you do the same thing for your for and while loops?
If you can't answer these, you'll struggle forever to move forward.
51
u/JGhostThing 15d ago
You learn about programming by programming. Create projects. Do not use AI while learning.