My friend and I are building an app and want to become capable all-around developers rather than focusing only on writing code. We've started looking into software architecture, system design, networking and HTTP, databases and SQL, testing, deployment, DevOps, design patterns, and version control. What fundamentals should we prioritize, and which books, courses, or learning resources would you recommend? We also want to avoid spending months studying everything before actually building something.
4 Answers
The most important skill is learning how to solve problems with programs, not just memorizing a language’s syntax. You’ll also benefit from algorithms and data structures, understanding how computers work underneath, basic software architecture, validation, debugging, and writing code that other people can understand and maintain.
Don’t try to master every pattern, framework, and architecture style before writing the app. Build the simplest useful version, get it in front of real users, and learn whatever is needed when you encounter a real problem. Patterns such as entity-control-boundary can be useful, but applying them prematurely often adds complexity and slows a small project down.
So the idea is to build first, then study the concepts that help solve the problems I actually encounter, instead of getting stuck in endless preparation.
Exactly. A quick, simple product that gets feedback is often more valuable than a beautifully designed system built around assumptions about what users want.
Technical knowledge isn’t the whole job. Collaboration, communication, documentation, listening, planning, and keeping track of work matter a lot when two people share a codebase. At the lower level, it’s also useful to gradually learn how operating systems work: processes, threads, system calls, asynchronous I/O, resource usage, and basic troubleshooting from a terminal. You don’t need all of that on day one, but it becomes extremely valuable when something fails outside your development environment.
For a web or mobile app, learn the practical networking basics: HTTP, DNS, TCP, routing, proxies, TLS, and authentication versus authorization. You’ll also want Git for collaboration, Linux and the terminal, and enough Docker knowledge to run your services consistently. Cloud and production DevOps can wait until the project actually needs them; Docker Compose is usually enough while developing.

That makes sense. Thinking in terms of problems and solutions instead of syntax seems like a much better foundation.