@ScienceCat said in How to learn software design:
I actually do like to cook already. You're right, it's somewhat similar to coding, but that's the easy part (for me). My difficulties are more with recipe creation (to stay in your analogy). Which ingredients do I want? How should I combine them? etc.
There's only a few chefs in the world who create brand new recipes. Learning to cook is knowing recipes, and understand what are the key ingredients, which ones are replaceable and by what, etc.. You get that by cooking and eating new things.
Example: A vegetable soup. If you ask me, I would make a Mediterranean-style one with mashed mixture of potatoes, onions and carrots as base, and headed cabbage. My mom, on the other hand, would replace the potatoes with zucchini (courgette) because of the calories. Are they the same soup? No. Do they taste the same? Not quite. But both are vegetable soup and both are acceptable if someone who doesn't care about calories ask for a vegetable soup.
Breaking out of the analogy: you should get familiar with patterns (this can be a good 'index' of vocabulary and a door to start exploring https://en.wikipedia.org/wiki/Software_design_pattern) and anti-patterns (what you shouldn't do or you'll be on the front page).
All that was said by everyone else can be summed up: read other's design and code and try to understand the 'why'. Write your own code and designs and tell to yourself 'why'. Rinse and repeat.
Even if you can make an awesome Beef Wellington, that doesn't mean you're ready to make a complete dinner service for a restaurant.