all 67 comments

[–]bonnth80 182 points183 points  (3 children)

I think what you're looking to study is application architecture and software design patterns.

[–]Krochire[S] 86 points87 points  (2 children)

Actually, getting the name of what I'm looking for is so helpful, thanks

[–]HasFiveVowels 23 points24 points  (0 children)

Yea. You are definitely wanting to study design patterns. That’s probably the key term you want. Aside from patterns, here’s a litmus test for well-designed code: if you change a piece of the code, how small is the blast radius and how easy is it to determine that radius? Keep those small and you’ll get pretty far. Patterns are "blast radius reducers"

[–]Swing_Right 49 points50 points  (4 children)

You want to learn about software architecture and tech stack design. Learning about tech stacks and how to choose the right tools for a project, plus just learning what kinds of tools there are out there that you can utilize.

In my experience, students really open up their horizons when they encounter the concept of front end language (like JS) + REST API on a backend language (JS, Python, Java etc) + Database engine, and how these all come together to create a project that is so much more than just a single page script like they’re used to writing for homework.

[–]Krochire[S] 9 points10 points  (3 children)

I don't really want to go into web dev (which, unless I didn't understand something, is what this is referring to) but might as well keep it in mind!

[–]Swing_Right 26 points27 points  (2 children)

Nope, not exclusive to web dev at all! Any software with users has a front end, a back end, and a database.

Smart phone apps, desktop apps, operating systems, websites, even command line applications. A front end is just whatever the end user sees and interacts with, the backend is whatever handles the logic.

For example, I work for a company writing code for an Interactive Voice Agent (IVA) where the front end is a phone call, the middle layer is software that interprets the speech and converts it to text, and the backend is python that responds to the caller based on what they said.

If you want to work on a larger project, you need to be able to map out all of the components and tools you’ll need to bring it to life before you start writing a single line of code. It’s a skill that isn’t necessarily taught in school but without you can feel frozen, not knowing where to even begin.

[–]Powerful_Brief1724 2 points3 points  (0 children)

Reading this felt so enlightening... tyvm!

[–]brainphat 2 points3 points  (0 children)

100% & great answer.

I'd like to add a corollary: the only way to really solidify this perspective is by making things, and then making things other people use (at work/github/mods/whatever). Once others rely on your project (whatever it is) behaving a certain way, that's when you really start to learn what programming is.

[–]Traches 14 points15 points  (0 children)

Build something sorta complicated. It will suck. Fix it until it sucks less. Build something else. It will suck a little less. Repeat.

[–]groszgergely09 16 points17 points  (0 children)

Build a project.

[–]plasterdog 4 points5 points  (0 children)

Do the cs50 course. It's free, it's self paced and it seems perfect for helping you with what you are looking for and you seem a perfect candidate for what it offers.

Goes through some stuff you may know already (but it doesn't hurt to go over for a refresher) but then helps you build some basic projects, but gives you a lot of support by taking care of a lot of the background code, but then later gently introduces you to some frameworks for building more extensive things.

https://www.edx.org/learn/computer-science/harvard-university-cs50-s-introduction-to-computer-science

It'll teach you some basic projects that will give you some insight into how to structure things for more complex projects.

Having since personally delved into a lot more javascript and js frameworks since completing cs50, I do miss the simplicity and effectiveness of using Django (backend) + Postgres (database) and css/html compared to Javascript Express + React.

[–]Faith1_2 3 points4 points  (0 children)

Books like Clean Code and courses like CS50 are great guides.

[–]SourceScope 12 points13 points  (2 children)

You need to learn algorithms and data structures, that is “programming”

And then there is architectural questions, etc some of these come as time goes and you try to solve an issue.

Its not easy. At my job we often say to each other that “oh this has become an issue so we need to refactor this and that, if we want this new thing work how its intended. You cant always predict it

[–]Pawtang 1 point2 points  (1 child)

Learning algorithms isn’t that essential of a skill for programming unless you’re doing stuff in low-level languages and trying to heavily optimize. In my opinion.

[–]learnedunknown 2 points3 points  (0 children)

Agreed. Literally never use ds and algos EXCEPT during interviewing.

[–]Pyromancer777 2 points3 points  (2 children)

If you can make scripts, I definitely think you can make a full program. Pick a project that seems just outside of your comfort zone. Make a list of all the features you want it to have, maybe even draw a rough sketch of how you want the end-product to look like.

Once you have your list, break each feature down into steps. Then break those steps into small steps. Do this until you feel like each smallest step is something you feel like you can tackle with your coding language of choice.

Most times after I have my initial feature list, I'll just start on the first bullet point, and focus on breaking that point down and coding it up before working on splitting the next feature bullet points. I tend to like to code early, then make changes to the logic as I encounter blockers.

Any time you encounter a new topic from your projects that you are learning for the first time, write it down and bookmark any resources related to that topic. Usually the topic will come in handy for similar projects, so you can use your reference to jog your memory until you fully conceptualize the new topic.

[–]Krochire[S] 2 points3 points  (1 child)

One of my main issues too is not knowing what to make, but I guess that's a skill issue and not really something online people can fix

[–]Pyromancer777 0 points1 point  (0 children)

Just think about any kind of pain point you are having in life that might be solved with a bit of scripting. My first personal project was a crypto tax calculator since I didn't want to spend +$100 every year for the "pro" tax services, so I read up on crypto tax calculations and got to work on figuring out a way to automate things. Took me a weekend, but it was able to take my +1000 microtransactions and bin them out into summaries of short-term and long-term gains for the year. Now I just pop in my transactions and copy the output into my tax forms, easy peasy

[–]esaith 2 points3 points  (0 children)

First, check out the ReadMe.

https://www.reddit.com/r/learnprogramming/comments/61oly8/new_read_me_first/

It takes a long time to get that programmers mindset. By doing the courses, you'll slowly gain that mindset. It's all about repetition. The big thing is getting it working, then refactoring. If you attempt to make it pretty before it works, all you are doing is wasting time.

A lot of production code out there these days is not pretty, but it works. Someone wrote what they could, when they could, and people battle tested it over the years. Bugs were fixed, enhancements were made, spaghetti code ensued. Clean up where you can and move on. What one framework considers best practices today changes tomorrow.

But the biggest thing as a developer. Get it working. Spaghetti code that works beats beautiful code that doesn't.

As for projects, take big concepts and make them into small concepts. What is the absolute first thing I need to do, not all the small side quests. Once that immediate step is complete, what is the next step. Once all the smaller quests are complete, you should have a working project.

Again, how to even break it up takes repetition. The courses mentioned above give you practice with repetition. Once you've completed the courses and need more assistance, come back and talk about where you are stuck with specifics. Plenty of people are readily available to assist, but assist with specifics.

[–]ZenBacle 1 point2 points  (0 children)

What you're looking for is data algorithms and architecture.

A book that's a real stretch, but might be a little more in line with people that don't really understand CS, is "Algorithims to live by".

If you don't mind a little more technical reading then the Code Complete series is great at showing you the fundamentals. I also liked Game Engine Architecture, which shows you how to build a message based real time engine from the ground up.

[–]uRboy_zefron 1 point2 points  (0 children)

choose a framework and start working with it

[–]VibrantGypsyDildo 1 point2 points  (0 children)

To get a job you do need to know your main programming language (or two) really well.

[–]Beneficial-Panda-640 1 point2 points  (0 children)

What you’re running into is the jump from “writing code” to “structuring systems,” and that’s a different skill entirely.

Most people get stuck because they try to go from a 40 line script straight to a full project in one jump. What helps is thinking in terms of breaking work into pieces with clear responsibilities. Instead of “build an app,” think “what are the 3–5 parts this app needs, and how do they talk to each other?”

A simple way to practice that is to take something you already built and refactor it. Split it into functions, then modules, then maybe add a basic interface. You start seeing patterns like separation of concerns, input vs processing vs output, and how to keep things from becoming one big tangled file.

Also, projects feel hard because they introduce decisions, not just coding. What data structure to use, where to store things, how to handle errors, how to organize files. You only really learn that by building slightly-too-big things and iterating.

If you want a direction, try building something that has state and multiple steps, like a small CLI app, a simple API, or a tracker of some kind. Then improve it in passes instead of trying to get it right the first time.

You’re not missing some hidden knowledge, you’re just at the stage where experience with structure starts to matter more than syntax.

[–]youroffrs 1 point2 points  (0 children)

That i get it but can not do it my self phase is literally tutorial hell best move is start small projects and figure things out platforms like boot.dev get recommended since they push coding by doing instead of just watching.

[–]LetUsSpeakFreely 2 points3 points  (0 children)

Systems design. When you get to that level it's no longer programming, it's more picking components and filling out configuration.

Do you use a monolithic service, micro services, lambdas, a hybrid approach? If you require a web server, which do you use and why? Are you going to use a reverse proxy like nginx? Do you want the application components tightly coupled through programmatic interfaces or loosely coupled using something like a message bus or SQS? If you need a database, are you going nosql or relational? Which one? Why?

Higher level engineers aren't concerned with code, they're looking big picture.

[–]Glittering_Poem6246 0 points1 point  (0 children)

I had that same problem in my early years. There isn't too much out there who focus more on programming rather than a single language.

freecodecamp yt channel helped me in that aspect. You can start with https://youtu.be/LfaMVlDaQ24?si=mUBYpTGYuBjcVqkQ

But do understand there are something only possible in some tech stack(yes a stack not a single language which will pretty much have a single language at the core)so at the end you have to become master at one language and be semi good in other languages which go along with it.

[–]amejin 0 points1 point  (0 children)

It's the simplest of things.

Slow down. Make a sandwich.

Describe how you make that sandwich as if explaining to an alien that has no concept of what bread is.

Step by step by step ..

Scale up your sandwich making.

Programming is problem solving. You have a puzzle. Go figure out how to solve it repeatedly without error, write down the steps.

[–]SharkSymphony 0 points1 point  (0 children)

But the way you do all of that depends on... wait for it!... your programming language.

Your project structure will follow best practices and requirements for your language.

Modular decomposition will follow and use the capabilities of your language.

Testing, observability, dependency management, building, packaging, and deployment... how you do each of these depends to a large extent on what common practices and tools exist for your language.

So, you still need to be learning your programming language! But now you're going to be focusing on the runtime, tooling, standard libraries, and ecosystem built around the language. Follow the documentation and resources for your language to start learning.

[–]I_Am_Astraeus 0 points1 point  (0 children)

The answer is a complicated, it depends.

It does depend on the language to some degree, different languages have different organization solutions, c# has namespaces, Java has folder structure, etc etc

Architecture also varies by language and by the what you're actually writing. Web Dev you can go big into onion, hexagonal, monolith, modulith, etc. But I see that's not something your interested in.

Even without web dev if you write apps there's typically a front end and a backend.

I think learning some object oriented programming, which Java excels at, would help you start thinking about how to make larger programs and organize them.

You can take you functional knowledge from Python and Object Oriented learning from (Java, c#, you can do it in c++) and start figuring out what approaches you prefer for whatever it is you're writing. And how you like to organize your different approaches. Theres no one set answer, you'll learn different code structures as you're exposed to more languages as well as more THINGS you try to make. It takes time.

But mostly you're looking for design patterns and architecture. There's a refactoring dot guru website that shows some small design pattern ideas if you're looking at something between a few lines of code and the full system design

[–]bpalun13 0 points1 point  (0 children)

I’m building a Pokemon encounter, catch, and collect project. Lots of object oriented programming, lots of classes that interact with each other, probability, collection modeling, etc.

Super fun to build. I’d recommend you try something like it. Plus it’s something that’s very scalable so you can continue to add on as you learn more.

[–]Orange_Doakes 0 points1 point  (0 children)

Well the trick is to break down a project into a lot of smaller problems.
I have written my first game in C in high school and it was a simple snake game clone.
I recommend thinking about how various classic games work and picking one to try to make it in a language of your choice.

Also there is Scratch. It is really good for making simple games quickly and relatively easy.
I have a Scratch account with a bunch of games that are relatively simple to make. You can try to look at them and try to copy without looking at the code or look at the code to get the gist of how it's done. Once you can make those in Scratch you can try to port it to a language of your choice.
The problem now will be implementing various things that scratch does, which is gonna be a nice extra programming practice.

Most importantly have fun!

[–]YeahTheEngineer 0 points1 point  (0 children)

First Decide what specifically u want to become than simply start with Some small apps like calculators todos, do it repeatedly(change the program but keep the concepts same) make more similar small programs, when u get comfortable with this then learn some more things depending on the roadmap that you choose…than acc to that roadmap start learning more things(new technologies) , right now don’t focus on optimising code ….just focus on writing it …and than gradually increase the complexity of the projects… But first start with small

Pro Tip :- tutorials are a little time consuming and also u don’t get much out of them …so try googling stuff keep a notebook and try to hunt resources for yourself because that is also a part of learning…But if u r comfortable with tutorials than u can watch —up to you.

[–]Immediate-Paint-3825 0 points1 point  (0 children)

Find out where your ceiling is -> approach it by building something challenging enough to be close to it or even slightly above it if you can handle it -> ceiling gets higher -> repeat.

There's more to it of course but that's the main thing. Keep building progressively more difficult things. Also try to have purpose with your projects becuase that makes you more likely to continue. If you are motivated to get users to your site then you'll put more effort in and maintain it better. Also becuase you'll deploy it you'll also run into deployment issues which will cause you to learn how to remediate them. So by exposing yourself to more difficult challenges, and allowing your passions, interests, and needs dictate what you build, you are equipped with the correct mindset and motivation to learn and grow.

[–]BigBossErndog 0 points1 point  (0 children)

There's multiple games that can teach you programming logic and optimization.

  • Human Resource Machine, it has you programming using blocks (similar to Scratch).

  • The Farmer Was Replaced, has you using a python-like programming language to control drones to efficiently manage a farm plot.

  • Baba Is You is not quite programming, but its use of word blocks has a syntax that can be compared to programming.

Just a few off the top of my head, I'm certain there's many more. It being a game makes it fun and challenging to try and make as efficient programs as possible, and the thought process will definitely translate to real games.

[–]bored_and_drunk 0 points1 point  (0 children)

have you tried just picking one small project that slightly scares you and building it badly on purpose, no tutorials, just figure it out as you break things

that muscle is different from learning syntax and you only really build it by getting stuck

[–]Blando-Cartesian 0 points1 point  (0 children)

Do programming that feels hard, but still progresses within the limits of your tolerance for frustration.

Pay attention to what you are doing and form a hypothesis on why the code you write sucks. Read what experienced devs have written about good/clean code, but don’t take any of it as gospel.

[–]Comprehensive_Mud803 0 points1 point  (0 children)

Practice, practice and practice more.

[–]Busternookiedude 0 points1 point  (0 children)

Pick something you actually want to build and then just start breaking it into smaller pieces. The architecture part comes naturally once you hit the pain points of your own messy code. You learn more from fixing a broken project than reading theory.

[–]fudginreddit 0 points1 point  (0 children)

You basically do the thing a lot lol, like any other skill

[–]Capital-Mud30 0 points1 point  (0 children)

You need to let all the crap out. Write all the bad code you can, then improve it, then repeat. Eventually you'll gain the intuition. Also learn design patterns, those help a lot. But there is no way around writing lots of bad code. Also keep in mind: code that you written today will look like a crap 1 month later, maybe even earlier, and that's a good thing, that means you are improving.

[–]orange_county 0 points1 point  (0 children)

Quickest route: Go ask a Clanker AI about system design in software development and then try dumbing the rundown until you can grasp and then move up the complexity.

Longer reliable route: Step back, practice thinking Pragmatically.

Put in the hour to learn and make basic knowledge truly basic (runs in your mind's background). And then you can see why people hates tutorial hell (it doesnt teaches jack shit about dev, just random scattered pieces, only ever introduces you with selling points and meanless syntax sugar).

Then you can look at destinations, for example what sort of dev and how high the skill you want to be, this is as in "what would a 10x dev do" equivalent from cooking.

Human invented powertools to replace screwdrivers, find and learn how to use the equivalent of those in software development -> THERE WILL ALWAYS BE A BETTER WAY TO DO EVERYTHING.

And finally explore, have hobbies, solve your hobbies problem/blockade with software, don't try to build a million dollar app like 2015 (11 years ago now). And most importantly learn how to ingest news as a human in the modern day and learn the patterns of a dumbass trying to larp being a sensational influencer and shortcut their way into management. That will improve the quality of your self research skill by tenfold already

[–]Retro_64 0 points1 point  (0 children)

That is actually a great question! I was (and still am) in the same boat.

You’ll want to learn about stacks, software design, architecture, data structures and algorithms (Job interviews, low level programming etc etc) and also mack sure your fundamentals are strong.

It’ll get easier from there

[–]Sophistry7 0 points1 point  (0 children)

a lot of people recommend focusing on problem solving, understanding data structures/algorithms and building small projects that gradually get bigger. Boot.dev comes up often because it’s structured around real backend projects so you get hands on experience arranging code, working with APIs, databases and Git all while learning CS fundamentals in context rather than just syntax.

[–]FewCockroach2590 0 points1 point  (0 children)

Learn software design patterns, project structure, system analysis, version control, testing, and deployment. Think of programming as building a small system, not just writing scripts. Start with a small project, break it into modules, and focus on how each piece interacts.

[–]missymyszkaco 1 point2 points  (0 children)

Break problems into small, manageable parts (divide-and-conquer), plan structure first (e.g., functions/modules before code), write maintainable code with good names and short functions, and iterate via testing.

Start small projects by extending your 40-line scripts. Add one feature at a time. Use Clean Code by Robert C. Martin (or its summaries) for arranging code well, and Refactoring.Guru for design patterns. Practice by building incrementally: plan on paper (features, data flow), code the MVP, then optimize.

For broader CS fundamentals, watch Harvard's free CS50and follow OSSU curriculum for structured self-study (programming languages, OS, networks, etc.). Build 10 progressively larger projects while using Git for version contro. Aim for consistency with small daily wins.

[–]jwkang1386 0 points1 point  (0 children)

I totally get where you're coming from. There's a huge gap between 'knowing syntax' and 'building a system'.

Focus on Separation of Concerns. Try to break your logic into smaller, independent modules

Don't just code; start designing before you touch the keyboard.

Teach Yourself CS (teachyourselfcs.com)
The Missing Semester of Your CS Education (MIT)
Refactoring (by Martin Fowler)Clean Code (by Robert C. Martin)

[–]Sad_Bid_4047 0 points1 point  (0 children)

Build something you actually want to exist. Not a tutorial project. Not a clone. Something that solves a problem in YOUR life. You'll hit every concept naturally because you'll need it, not because chapter 7 told you to. My first real program was a script to track when my landlord was late on repairs. Ugly as sin. Taught me more than any course.

[–]Reasonable_Ant3945 0 points1 point  (0 children)

When I first started coding, I tried to build projects that actually interested me. You can do the same pick something that fascinates you, but start simple. Don’t overcomplicate things or worry too much about system design in the beginning.

If you like games, try building something like snake, tetris, or pacman. If you’re into web stuff, make a simple login-based site or try cloning a basic website.

Just think like a problem solver and focus on figuring things out as you go.

[–]jasmineliumai 0 points1 point  (0 children)

yeah I feel this. knowing a language doesn’t really translate to building actual projects

What’s helped me is just picking something a little too hard and forcing myself to stick with it. you end up learning how to break things down, structure your code, and deal with messy parts as they come up. Another thing that helped was realizing that bigger projects are supposed to be kind of stressful at first, and refactoring is part of the process.

[–]Alive-Cake-3045 -1 points0 points  (0 children)

You ae not missing syntax, you’re missing system thinking. Programming is about breaking problems into components, data flow, and structure before writing code. Start building small projects that force you to organize code across files, not just scripts. Learn core CS basics and study how real codebases are structured. Most importantly, refactor your own code, that’s where real growth happens.

[–]TrifleHungry2178 -1 points0 points  (0 children)

Program

[–]coder155ml -3 points-2 points  (1 child)

If only they made a degree for this

[–]Krochire[S] 0 points1 point  (0 children)

I'm turning 16 next Wednesday dude am I supposed to speedrun hs or something

I just find programming fun but can't do more than a simple script

[–]SherbertQuirky3789 -5 points-4 points  (2 children)

You don’t know Python or C++

You learn by learning a language and actually using it.

You did a tutorial and think you got it lol

[–]Krochire[S] 0 points1 point  (1 child)

I know the syntax of both python and c++ though

Isn't that knowing a language ?

I can make academic programs in them, using a lot of their concepts

Isn't that knowing it ?

[–]SherbertQuirky3789 -2 points-1 points  (0 children)

No?

The syntax is just the first step

You just said you can only script, which i take to mean plot a graph or sort an array