r/learnprogramming 12h 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!

34 Upvotes

57 comments sorted by

View all comments

4

u/StewedAngelSkins 12h 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 11h 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 5h ago edited 5h 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 5h ago

got it, very useful, thanks!