r/learnprogramming 1d ago

Other than knowledge of the programming language, what other knowledge do you think a person who develops software should have?

Hi all! I am recently trying to develop an app, and Googling around I came across many other concepts to build an app and host it (software architecture, system design, Computer Networks to understand the basics of requests etc., and also patterns like the ECB pattern, and Database Knowledge like SQL and DEVOPS to test and integrate) so before doing the programming I kinda want to learn the other fundamentals, what sources (books, courses, etc) would you suggest me? Me and my friend are the only 2 on developing it, so we kinda need to be a team and be all-rounders

thanks and have a nice day!

49 Upvotes

66 comments sorted by

15

u/pak9rabid 1d ago

The galaxy of libraries & frameworks that surround said language.

3

u/Dry_Childhood_8353 1d ago

The second you think you know a language some new framework drops and suddenly you're a beginner again

1

u/MistakeIndividual690 1d ago

Yes this is way more learning than just learning a language

1

u/obsolescenza 1d ago

I agree!

10

u/tangentstorm 1d ago

Just build your app. And especially if it happens to be a product, just build the simplest version of it that you can, and get it in front of users.

Spend 90% of your time on that, unless you're absolutely stuck. Then figure out what you need to learn to get unstuck.

Spend the other 10% of the time learning about whatever interests you. Unbounded learning like this is of course valuable, but don't let it block you from actually doing what you set out to do.

4

u/TraylaParks 1d ago

This is excellent advice, many times you think you know what your users want only to find out later what they really wanted. As tangentstorm said, get that app in front of real users asap - I've seen much better designed/architected products get shit hammered by quick and dirty ones that responded immediately to customer desires and feedback.

2

u/obsolescenza 1d ago

solid, thanks

2

u/obsolescenza 1d ago

Oh I see, basically You are saying to learn and do the stuff first, then travel around, because otherwise I risk of being stuck in a loop of learning 8923 things without outputting anything, great advice, thanks friend

7

u/Physical_Storage2875 1d ago

network shit. TCP, Subnetting, DNS, proxys, routing

1

u/obsolescenza 1d ago

Yes I agree! what do you reccomend to learn them?

3

u/Bumslaw 1d ago

Get your CCNA. There is a lot of intersection between dev and ops.

Cisco has as good a course as any.

1

u/obsolescenza 1d ago

thanks bro! one thing: the certificate if I am not mistaken expires, is it still worh it?

2

u/Bumslaw 1d ago edited 1d ago

It expires every 3 years unless you update it, yes. It's a money grab (some what) but CCNA covers a lot of foundational networking knowledge, and is 100% worth it. If you're developing anything that is cloud/distributed in nature, you need networking. The cert is nice to have; but even if you let it lapse, the experience is well worth it.

One of my favourite questions for Developers is, "how does end to end communication work, and how does that change in the presence of NAT" for example. Or: "what is a TCP 3-way handshake"? "Why is encapsulation important?"

If you can explain that as a Dev, I like you a lot more as a candidate.

2

u/obsolescenza 1d ago

oh got it, thank you for the nice tip!

5

u/StewedAngelSkins 1d ago

It really depends on what kind of software you're making. It sounds like you're talking about a website/mobile app of some kind... in which case I agree with the guy who said "networking shit". I would especially focus on HTTP. Besides the basics of the protocol itself you'll also want to learn about how it interacts with TLS, how to configure an HTTP proxy, different ways to do authentication/authorization, etc.

The other major thing you'll need to learn for anything web-related is how to use Docker (which in turn practically requires some Linux knowledge as well). There's also the whole cloud/devops skillset, but honestly I'd put that off until you actually need it. You'll be able to get pretty far with just docker compose (just understand that this isn't how anyone deploys stuff into production).

I guess you'll want git as well, if you haven't figured it out already. It's super important, especially since you're working together with another person.

1

u/obsolescenza 1d ago

yes absolutely! Thanks for the feedback! one quick question tho, what about patterns? and software architecture like ECB pattern? where can I learn more about these concepts? books courses etc?

2

u/StewedAngelSkins 1d ago edited 1d ago

Honestly I'm not sure I'd bother with that. At least not in the early stages. This is just my opinion, but the point of learning named patterns isn't to help you be a better software designer. It's really just to help you communicate your designs to other people.

For example, I can either be like "the class is responsible for resources which are global to the entire process, so I have written it to internally allocate a single internal instance which is referred to by all external constructors", or I can be like "the class is a singleton" and everyone will know what I mean. But the fact that "the singleton pattern" has a name wouldn't really factor in to my decision to use it. It's just that this happens to be how you usually solve this particular problem... and this particular problem happens to come up often enough that people who write code all day eventually decided to gave its solution a name so they could stop explaining it to each other.

I guess they can also be nice to refer to as a source of inspiration, but I feel like as a beginner you lack the context needed to be able to form your own opinions about how or when they should be used.

As for how you learn them, I have no idea because I never deliberately studied them. I feel like most of the ones I know came from reading blog posts or wikipedia article that tangentially mention them and I'll be like "I wonder what that is" and look it up. Or since I got a job as a programmer sometimes my coworkers will bring it up to describe one of their designs. I guess my answer would be to talk to programmers and/or read things written by programmers? It's like any other jargon.

1

u/obsolescenza 1d ago

got it, very useful, thanks!

4

u/v_e_x 1d ago

Soft skills. Collaboration. Time tracking. Software Architecture. Technical documentation and communication, reading, writing, speaking, and especially listening.

1

u/obsolescenza 1d ago

agreed, any tips for software architecture? like books etc?

3

u/ExtraTNT 1d ago

Algorithms, the user (needs of them), how things work underneath (why some code needs to be ugly to be fast af and other code is optimised anywise -> vectors are fun) how to validate things (grammar -> mathematical) architecture…

1

u/obsolescenza 1d ago

thank you friend

3

u/fasta_guy88 1d ago

You need to know how to solve problems with programs, which is completely different from knowing a language. Think about the difference between understanding a foreign language, and writing an essay in the language.

1

u/obsolescenza 1d ago

yes absolutely, thinking in terms of problems and solutions rather than syntax is a huge game changer

3

u/GlassLost 1d ago

So as the guy who typically needs to pick up this slack, how operating systems work. How Linux syscalls work. How to use a terminal and interact with the subsystems that your company needs (for example, list open ports, track CPU/memory usage, check which processes are doing what, etc). How processes, threads, and futices work. How async io works.

These are not beginner's tasks (mostly) but you'd be amazed at how often people can't access the information they need

1

u/obsolescenza 1d ago

very true, thanks for the info!

3

u/ffrkAnonymous 1d ago

You and your friend need to learn YAGNI

1

u/obsolescenza 1d ago

thanks, gonna write it somewhere to remember it everytime

2

u/ShangBrol 9h ago

"Besides a mathematical inclination, an exceptionally good mastery of one's own native tongue is the most vital asset of a competent programmer."

E. W. Dijkstra

2

u/vipin-bhatt-3034 8h ago

This is a never ending loop man, I would suggest focus on building the product, understand your end users instead of covering up all the fundamentals rn, understand from a business perspective what value does your app adds to a person's life.

While building the app you will come across bunch of things, Just note them down and read about them and try to understand them as much as you can, when you face some technical challenge you any way will have to go deeper into something specific.

That's what really software developers do, they learn some basics initially in the start of there career and then when they work on things they go deeper on specifics over the years.

1

u/[deleted] 1d ago

[removed] — view removed comment

1

u/obsolescenza 1d ago

yeah that's what I will do, thanks! But quick question, if I start programming a project but without some solid pattern (like ECB pattern etc) wouldn't it slow down a lot?

1

u/Jim-Jones 1d ago

Confident Coding by Rob Percival is a comprehensive guide designed to help readers master the fundamentals of coding. The book covers essential topics such as HTML, CSS, JavaScript, Python, and debugging, providing a step-by-step learning approach to enhance your coding skills and career prospects.

It is suitable for both recent graduates and professionals looking to improve their technical knowledge. 

The book emphasizes the importance of coding in the job market and offers practical exercises to practice coding skills. 

Rob Percival, a web developer and entrepreneur, has taught over 500,000 students through his online courses on Udemy. 

It covers even more than stated here, like iPhone and Android coding. See if your library has it or can get it. Or look on auction sites. 

Also: 

https://exercism.org/ Exercism is an independent, community funded, not-for-profit organisation.

https://roadmap.sh/ roadmap.sh is a community effort to create roadmaps, guides and other educational content to help guide developers in picking up a path and guide their learnings.

https://youtu.be/ZYJvmpiWnDQ  7 Free IBM Courses That Get You Hired Without a Degree

1

u/OldMarzipan9773 1d ago

Marketing

2

u/obsolescenza 1d ago

what do you mean? being able to sell myself and/or my products?

1

u/OldMarzipan9773 1d ago

SEO, copywriting and technical writing, skills to sell the products and services or increasing market presence.

2

u/obsolescenza 1d ago

oh got it. thanks!

1

u/PoeT8r 1d ago

Knowing SQL is not enough. Need to understand data modeling, which applies to XML as well. Data relationships and access methods matter.

Way too many "simpler" data tools were built by people who did not know what they did not know and then found out the hard way. Looking at you, MongoDB.

1

u/obsolescenza 1d ago

I completely agree! thank you for the tip and the precious time

1

u/Biliunas 1d ago

Soft skills, soft skills, soft skills!

1

u/obsolescenza 1d ago

which ones?

1

u/PeterPook 1d ago

Software Development Life Cycle. Waterfall, Agile, Sprint and most importantly, effective Documentation.

1

u/obsolescenza 1d ago

can you recommend me some sources to learn these?

1

u/PeterPook 1d ago

As mentioned in other articles, Google them.

1

u/obsolescenza 1d ago

alright! thought you would mention books that's why I asked. thanks!

1

u/[deleted] 1d ago

[removed] — view removed comment

1

u/obsolescenza 1d ago

really? which apps are you talking about?

1

u/[deleted] 1d ago

[removed] — view removed comment

1

u/obsolescenza 1d ago

that's so cool man, nice work!

1

u/Br3ttl3y 1d ago

If you are working on a team you need to learn git.

If you are working on a web app you need to learn how to deploy it reliably with confidence that it won't regress.

u/obsolescenza 12m ago

okok thanks

1

u/Grumpy_Monk_28 18h ago

Honestly bro, you're overthinking the prep phase way too much. With just two of you, the real risk isn't missing out on system design or DevOps knowledge before you start, it's burning months reading theory and then realizing your actual app doesn't even need half of it.

Just pick the simplest architecture that works, monolith, one database, don't overcomplicate it, and actually build the thing. Deploy it somewhere easy like Railway or Render. Learn system design, patterns, DevOps etc only when you actually hit a wall that needs it, not before.

Honestly the only two things worth properly learning before you even touch the project are Git and basic SQL, mate. Everything else you'll pick up way faster on the job than from a book or course beforehand. Trust me, shipping something small beats knowing everything and shipping nothing.

1

u/David_D_Jack_Builds 17h ago

The skills you listed (architecture, system design, networking, patterns) are all real — but trying to learn them all in parallel is a trap. Most junior devs burn 6-12 months on "fundamentals" before building anything.

Here's the order I'd actually learn them in, based on what gets you hired vs. what makes you look smart on Twitter:

Tier 1 — Learn first (blocks you from getting hired)

  • Git (branching, PRs, merge conflicts) — non-negotiable, takes 1 weekend
  • Reading other people's code without panic — pick 3 open-source projects, read their READMEs, read 1 file per day
  • One debugging technique (print debugging, then Chrome DevTools, then a real debugger)
  • Basic SQL (you'll use it every day)

Tier 2 — Learn when you have a real project

  • System design basics (caching, load balancing, CDNs) — learn when you deploy your first app
  • Networking (HTTP, DNS, what a request actually does) — learn when your first API call breaks
  • Architecture patterns (MVC, REST) — learn when your first codebase gets messy

Tier 3 — Learn when you're applying to mid-level roles

  • Design patterns (most are overkill for junior work)
  • Distributed systems (you'll learn on the job)
  • Advanced networking (you'll learn on the job)

The mistake I see: people spend 6 months reading "Clean Code" before shipping anything. Ship a small project first, then read about the patterns you actually needed.

What kind of app are you building? The "extra knowledge" you need depends entirely on that.

0

u/Euphoric_North_745 1d ago

it is almost 2027, knowledge of programing language is now bad, not a good thing, ai model are programmed with billions of patterns, a developer who thing he or she knows how to write code just messes the ai work at this point

1

u/obsolescenza 1d ago

don't agree, if you don't know what the program is doing and how you will pretty soon hit either diminushing returns or worse when there is a bug you will pray the LLM will fix that.

0

u/Unclerojelio 1d ago

Knowledge of a particular programming language is the least important aspect of programming.

1

u/obsolescenza 1d ago

what would you also reccomend?

0

u/Unclerojelio 1d ago

Go to a school and major in Computer Science.

1

u/obsolescenza 1d ago

I am already doing it!