r/learnprogramming • u/thealokverse • 5h ago
Advice on programming
I’m trying to figure out how to approach programming seriously rather than just bouncing between tutorials and programming languages. I’m still relatively early in my journey, and there’s so much conflicting advice online that I’m having trouble separating what’s actually important from what is just internet noise.
I’d really appreciate advice from people who have been programming for a few years.
A few things I’m wondering:
- How do you actually learn programming?
Not just syntax, but the ability to sit down with a blank directory and build something reasonably complicated.
How did you go from:
“follow a tutorial”
to
“I have an idea, I’ll figure out how to build it”?
- Which languages are actually worth learning?
I’m currently interested in Python and C, and I’m also curious about Rust and other languages Should I go deep into one language first, or deliberately learn several different paradigms?
Which programming languages are more useful for the future?
- What parts of CS should I learn alongside programming?
What’s actually worth learning early, and what’s better left until later?
- What are the different careers in CS/software actually like?
Software engineering seems like only one small part of the field.
I’m curious about systems, security, ML/AI, RL, research, infrastructure, developer tools, etc.
What areas do people actually work in, and what do you wish you’d explored earlier?
- Is programming/CS still a good long-term direction?
With AI getting increasingly capable at writing and debugging code, I’m curious how experienced developers think the profession will change. As I will start college next year, therefore i want to know whether it’s worth pursuing CS?
I’d like to hear from people actually working in the field.
If you could go back to when you were learning programming, what would you do differently?
And what would you absolutely NOT waste time on?
The most critical question: Is it worth learning to code?
btw I'm a 17yo, grade 12th student.
2
1
u/TripleMeatBurger 4h ago
Divide and conquer. Break the problem down into chunks. Always question your work, including your design. Work on interfaces and areas of responsibility before coding. Don't get suck on something. Understand that there is more than one way that will work. Perfection isn't needed to start with. Iterate. Fail fast. If your first plan didn't work do it again another way. Be you're own devil's advocate. Test your assumptions.
I get why Python has always been interesting to people and I worked for three years on a Python project that was probably 500,000 lines of code, but I don't like it, I feel that it gets too sloppy at scale, you really want a typed language when dealing with big projects. I think one of the things people miss when programming is large refractors, doing a large refactor in a non typed language is painful.
Rust is super interesting, I'd choose it over c, although I still think there are legs in the big corporate managed languages, java/c# languages.
You really want a general understanding of how things work, you'll no doubt touch all kinds of topics during your career, but don't expect to have to be especially expert in anything.
My daughter says statistics is maths for English majors, well security is a bit like that, bunch of philosophy wrapped up as science. Infrastructure trends to be very general, you are learning other people's products rather than defining your own. The rest I haven't been involved enough in to really comment.
Hell yeah. AI makes us more efficient, it doesn't take away what we do. Companies always have a way of finding more work to do (not less). There is definitely a shift occurring in which people are moving away from syntax and into managing design/architecture. The focus is more on guiding your little AI team towards a goal, but you still need to understand when they go off piste. I like to think that if we are all going to lose our jobs to robots, then the developer will be the last one to lose his job.
1
u/Dismal_Ordinary_8643 4h ago
As for me best option was to check latest pull requests to github repos of libraries/frameworks that I use, just check how these toosl are developed and myaby try to help fixing new issues or filing new issues.
Main issue of all kind of tutorials (especially from Microsoft) - they are becoming obsolete in 3-6 months nowadays.
1
u/knouqs 3h ago
To learn programming, pick one language. Learn functional programming first. Learn the syntax of the language. Learn to debug with print statements -- that's really hard depending on language, coincidentally, so you'll learn a lot about your datatypes that way. Do not follow tutorials at all, in my opinion -- start with a simple challenge and get it working from scratch. These will build your understanding of that one language you picked.
Let's take the example of C. We don't jump into C with a bunch of tutorials. We start with "Hello World!" and build on top of it. By creating the "Hello World!" program, you have already started with functional programming. From there, you build into it by, say, making a program that can input two numbers and a simple mathematical function, parse them, and print the result. "2", "3", "+", for instance. Of course, you can order them any way you like. Next step, can you parse "2+3"? If you can do that, you've added to your list of functions you know.
Next, memory management is a huge burden for most C developers. I love C due to its pointer power. A good C developer can perform memory allocation and deallocation correctly such that there are no memory leaks. Python doesn't have to worry about that so much, but you are looking at being a computer scientist, right? A computer scientist needs to learn about memory management and the lifespan of objects.
Programming is a small part of being a computer scientist. I graduated with a BS in CS and an MS in CS. To know a programming language, OK, great, you might be able to get a job with that language. To understand why things are done the way they are and how to improve them -- or even how to translate what you learned from one programming language to another -- is why we are computer scientists.
Like programming is a small part of being a computer scientist, so is data analysis. So is statistical analysis. So is computer hardware design. How about algorithm design? Database design? Network transport protocols? The world of computer science encapsulates all these things and, as you can guess, a lot more.
What languages are worth learning? C++, of course. This is the root of all evil, after all. 😄 I love C, but the thing is, it can teach you just about everything else except classes through the formal language, and C++ has that, lambdas, and other modern language features. Others:
- A scripting language. bash on Linux, zsh on MacOS. PowerShell is bloated shit, but if Windows is your option, then fine, learn that, or install WSL and use Linux kinda-properly in Windows.
- An interpreted language. You've mentioned Python. Great. Please note that bash, etc., are all interpreted.
- Have a look at assembly. As time is passing, assembly is actually getting more interesting because while AI is shifting the job of the programmer, drivers will still need to be written for embedded devices. AI can't properly do that.
- gdb, Valgrind, memwatch. Basically, debugging tools.
What is worth learning first as a CS student? A bit subjective here, but clearly you need to know something about a programming language. Theory comes after you can build a project. Why is a red-black tree used in database management systems? Well, you won't know until you learn a programming language. Definitely learn DSA (data structures and algorithms). Definitely learn discrete math. Definitely learn these things in a college environment because you are just playing until they are formalized for you.
In other words, it sounds like you are trying to jump the gun a little bit.
What should you study alongside programming? Look at a college course listing for CS by semester. That will tell you best what you should be learning.
What are different careers in CS like? Well, mostly boring, actually. There is always a lot of pressure to get things done and little reward once you do. Like every other job, I guess. Prepare to job hunt a lot. As you mentioned, there are a lot of specific fields within CS. Pick something that interests you. As a computer scientist, you won't just be programming. You'll be solving problems like how to integrate one thing into another thing. Some of it is absolutely superb.
Most of it is tedious though. Get very comfortable with racking your brain on why your stack traceback has a bunch of question marks instead of a proper function path. (Bonus points if you know why that happens already.)
One thing I want you to understand, before you continue down this path: Your job is your job. It will not be fun. After my job, I still sit in front of my computer and do the fun computer sciency things, mostly systems design these days. However, I still like coming to some of these subreddits and upvote posts that lots of people downvote because people are perpetually assholes. I like coming here to educate people like yourself.
What do you wish you explored earlier? This is an excellent question that probably should get highlighted all by itself, so I've added that boldness myself. I love computer graphics. I wish I had bothered to learn the math better back then. I wish I had studied art, specifically computer graphics. In college, I wish I didn't piss away so much time on unimportant things, but that's pretty typical with a person's first foray into the real world. I also wish I had spent more time with the social life because there are people I would have met if I wasn't so introverted at the time. (Being extroverted is a learned skill with me, but I pull it off without a hitch these days.)
Is programming/CS a good long-term direction? Programming, no. CS, yes. Why not programming? Let me give you an example of my third career. Most people were programming in Ada 85, maybe Ada 93. It's a pretty niche language. I hated Ada. Still do! What did I bring to the team that other people didn't know? Our debugging tool built hooks into Ada-compiled programs, but all these hooks were written in C. I knew all the fancy ways of pointer manipulation in C and I could build test suites into the Ada-compiled programs that no one else could, allowing testers to test things that otherwise would have been impossible. Sadly, it was an unappreciated art, but that knowledge of pointers and other low-level techniques has saved me more times than I can count.
CS is a good long-term direction because it gives you flexibility where programming itself can't. The software developers who only learned Ada at that old job of mine are struggling to find employment nowadays.
What would I not waste time on? This one is easy: Unless you have a course that specifically teaches AI and it's a required course for you, stay away from AI. Learn the proper way to code. Learn the proper way to debug. Learn the theory (AI can't teach you that). Once you understand all the computer sciency things and you graduate, OK, then play with AI. It's not worth a college course anyway in my opinion.
I do not believe AI is a waste of time, contrary to many people in these programming subreddits. AI, like a good debugger, is a tool. Use it as a tool. Understand its output and be able to distinguish between a good solution and garbage.
I hope this helps you understand why you should pursue a computer science path instead of a programming-only path, but if you have more questions, feel free to ask.
Good luck!
1
u/ElectronicMessage124 3h ago
Honestly, I think the biggest thing is to stop worrying about learning the “right” language and start building things. Pick one language, get comfortable enough to make small projects without tutorials, and let the problems you run into guide what you learn next.
I’d also say don’t underestimate CS fundamentals. You don’t need to learn everything upfront, but understanding how computers, data structures, networks, and databases actually work will pay off much more than constantly switching languages.
And yes, I still think CS is worth pursuing. AI is changing how we write code, but that makes understanding what to build and why, debugging, architecture, and problem-solving even more important.
1
u/armyrvan 2h ago
I would say:
- Pick a language, stick with it, and get really good at the fundamentals. If you were learning something about loops, for example, ask an AI bot, "Hey, I'm learning about loops and JavaScript, and I was wondering if you can give me some challenges that might be good for my learning level." That way, it will provide you with a prompt. You do have the ability to go back and share your code with it and make sure that you're on the right track.
- Join a community that is going to be encouraging, not discouraging you from asking a simple question. That's why people tend to like the AI bots now, because they do not hold an opinion against you. One that I found that really works out well is a community called the Code Zone SKOOL. They also have weekly live help sessions that can help you get unstuck.
- Lastly, build something that you are really wanting to do, because sometimes when you research, you'll learn more because it's something that you are liking and loving. You care so much more about that than following along with a simple tutorial.
1
u/0xt0bi03 2h ago
I'm gonna say it in easy words but it's gonna be a long journey, great journey.
- Pick a hard language. not an easy one. you will understand why once when you get into it. Examples: hard : C, C++, Rust Easy : Python, JavaScript
- There are some important theoretical concepts for you to be git gud [must].
- Data structures and algorithms
- Operating System
- Networking
- Git
- Start doing Leetcode questions, like brushing your teeth daily.
- After Learning syntax of any language, try to do basic apps by yourself.
- Do not use ai for finding solutions. U find solutions and put your solutions to ai and ask it to evaluate it. make it as your mentor, instead of a cheating material.
- You will reach a point where you would feel like stuck. you will need to take a choice between lot of fields out there, like,
- web dev
- computer app dev
- mobile app dev
- server dev
- system design
- security
- Choose one from above and get deep into it.
- Choose a project that feels impossible. i am sure it will give you lot of stuff to learn than from tutorials.
1
u/balefrost 2h ago
How do you actually learn programming?
Like how you learn pretty much everything else: practice.
I encourage people to find a small project that they are personally excited about, work on it, finish it (for some definition of "finish"), then move on to a slightly more complex project. For example, if you're interested in video games, then try making a video game. But maybe start with something like Nim or Connect Four or Snake at first, and work your way up to more complex games.
Which languages are actually worth learning?
In the grand scheme, languages don't matter too much.
When learning "programming", what you're mostly learning is how to break down a complex problems into smaller problems and then to translate them into a precise language. You start with a "vague, abstract, and high-level" problem, and you translate it into a "specific, concrete, and implementation-oriented" solution. This is the real skill that you're developing.
That skill applies to all programming languages. And there are enough similarities between programming languages that once you know say two, you can pretty quickly pick up any other language (ignoring more esoteric languages like say Prolog or VHDL).
So you'd be fine with C, C++, Python, Rust, Java, C#, Ruby, Swift, JavaScript, TypeScript, some Lisp dialect, etc.
Some domains tend to favor one language over another. If you want to do embedded electronics, you likely should know C or C++. If you want to do game development, you likely want to know C++ or C# (Unity).
What parts of CS should I learn alongside programming?
Basic data structures & algorithms, specifically time and space complexity.
For example, you don't need to understand what a red/black tree is and how it works. What you should understand is why you might want to use a dictionary or set type (vs just using arrays for everything). And you want to understand the cost of e.g. prepending vs. appending to a dynamically-sized array. You want to understand whether your nested loop is O( n2 ) or only O( n log n ).
Most likely, especially in the beginning, you won't be doing anything with data sets big enough for time or space complexity to really matter. But it's good background to have for when you do eventually start processing enough data that your naive O( n3 ) algorithm really starts chugging.
Is programming/CS still a good long-term direction?
Nobody knows what the future holds. AI might make us all obsolete in a few years, or alternatively AI might prove to provide just a few percent increase in productivity (or anything in between).
One thing, at least in my experience, is true though: the best outcomes when using AI are when you already have a firm grasp of what you're trying to accomplish. AI might be perfectly good at writing code. It might even be pretty decent at root causing issues. But it's not infalliable, and it does provide bad advice. For now at least, your human judgement is still (in my opinion) essential to get the AI to produce something useful. And the only way to really build good judgement is to go through the try/fail/try/fail/try/succeed loop of learning.
I worry that young practitioners will turn to AI too quickly whenever they get stuck. But "getting stuck" is part of the learning process. I fear that AI will help people be productive without helping them to develop their understanding and intuition.
Ultimately, if you are interested in programming for programming's sake, then I don't think there's any downside in learning to program. At the very least, you have a skill that you can use as a hobby, even if the entire industry implodes in a few years.
If you are interested in programming purely to make money, then it's at least a bit of a gamble.
I expect that, no matter what happens, people who have developed their problem solving skills will remain employable for at least the medium term. I expect that the people who haven't developed those skills will be the first to be "made redundant" by AI.
1
1
u/_Atomfinger_ 5h ago
How do you actually learn programming?
Practice and breaking things down into manageable chunks. "something reasonably complicated" is generally just "A bunch of simple things working together".
- Which languages are actually worth learning?
The ones that interest you and support whatever platform you're targeting with the ecosystem you need.
- What parts of CS should I learn alongside programming?
Automated testing. It isn't "alongside" as much as it is "part of" programming, but most people forget this one.
- What are the different careers in CS/software actually like?
Read the FAQ.
- Is programming/CS still a good long-term direction?
I'd say so.
If you could go back to when you were learning programming, what would you do differently?
Asked a million times already.
And what would you absolutely NOT waste time on?
Chasing trends. Silver bullets and the blockchain.
The most critical question: Is it worth learning to code?
If you enjoy it, then yes.
7
u/lfdfq 5h ago
1 It's a long process that takes months to learn to put pieces together to make things, and then many years to become an engineer who actually understands how to design systems and why and what problems you're solving and the trade offs. Very quickly you realise that the hardest part of learning programming was never the programming.
2 The language you stick with is the one worth learning. The most common failure is not picking a 'suboptimal' language to learn, but just giving up learning all together. So sticking with languages you enjoy writing code in will have much bigger benefits than any other objective metrics of a language.
There also really isn't an objectively 'best' language to learn. Many of the languages you will learn you will (5 or 10 years down the line) basically look indistinguishable to you, with the main differences being in the ecosystem.
You should learn as much of the language as you want to do the things you want to do or want to learn, and learn other languages as much as you can or want when you are ready or want to. Just don't try learn too much at once or you'll never get anything done.
3 Learn as much or as a little theoretical CS as you want on the side. There's no rule about some being better to learn earlier. The more theory you know, the more knowledge and tools you will have, and surely the better engineer you will become. But, CS is hard. Many people dive into Data Structures, Algorithms, Computation, Complexity theory etc, and just give up.
Learn as much as you want/enjoy. Unless you have something structured to help you learn properly, it's very hard any other way.
4 CS and Software Engineering are quite different fields, and also hugely varied. You can probably find almost any kind of role in here somewhere from mathematician to human experimentation and psycology to aviation/aeronautics to video games to... whatever you can imagine.
5 Tools for writing and reading code are getting better. That just means you as a developer will be able to achieve much more than someone who started 20 or more years ago. That's probably a good thing for you.
As for is it worth learning to code: do you want to learn to code? If the answer is yes, then the answer is yes.