When starting to learn to code, the language is the only thing that matters. You go through tutorials and video courses to learn how to program something using the language you chose. You try to implement the various exercises or replicate the tutorial's goal. It's only much later that you came up the various terms that populate the programming world and never seems to directly relate to anything concrete. The consensus is that it's important to learn them, but it's hard to evaluate their importance when you just start learning to code or even comprehend what they are about.
Architecture
Software architecture refers to the fundamental structures of a software system and the discipline of creating such structures and systems. Each structure comprises software elements, relations among them, and properties of both elements and relations.
Wikipedia
In a nutshell, Software Architecture dictates what's going to be implemented and where it will be put. It's just a guideline for you to follow. But why do you need it?
In the Wikipedia page, you can see that the Software Architecture should display certain characteristics. But the most important concern is that you should be able to easily change anything later. What you decide today could be irrelevant tomorrow and your code should be flexible enough so that it's not too costly to alter.
Design Patterns
In software engineering, a software design pattern is a general, reusable solution to a commonly occurring problem within a given context in software design.
Wikipedia
While the high-level logic of software can be different from each other, you will find similarity when you start thinking about the low-level part. That's why we have frameworks. But design patterns are actually more localized than that.
Design patterns are not ready to be coded solutions, they are more like a description of what the solution should look like. When you take the Facade design pattern, the general description is to reduce the interactions with external dependencies by going through a single and often simplified API. but the actual implementation depends on the programming language and even the person that is doing it.
What you should retain from design patterns is that the problem and the solution to the problem are closely related. They are both equally important to learn. Design patterns can be used to solve architecture problems, but you should remember that the formers are localized to the context while the architecture is more general in its application.
I'm not advocating to learn everything by heart, but you should try to understand as much as you can about these concepts as you will encounter them often in your work. By practicing to implement them, you will understand better their use cases and the reasons behind them.
Top comments (1)
Nicely put, May I borrow some of your lines if you don't mind.