Hi HN,
During my undergrad, I spent time working with programming tasks mainly related to research and I often felt like a lot of it was super messy due to fast research deadlines and most/all others working on the project not worry about the coding.<p>Before I start to do my research as a grad. student, I would like to learn how to construct applications with proper structure. I have looked around the internet and either examples are too simple and contrived or are complex open source projects which make it hard to understand why they do things a specfic way. I have never had to time or intership to work and discuss large projects and how they engineer certain things. I feel like I have learnt a lot of concepts in school in a sandbox and I'm ignoring so many concepts I learned about design patterns and software.
I heard (from a research professor!) that the best way to learn real-world large-scale design patterns is to work in industry. Because at a big company, you <i>are</i> working on a real-world large-scale system. So I would recommend, if you have the opportunity, try getting an internship before grad school.<p>Of course not all companies have the best practices, but in my experience most do. If you decide to find an internship, ask about design patterns / code reviews in your interviews.<p>Alternatively, you could read up on good design patterns and practice. I've heard people recommend Uncle Bob's "Clean Code" and "How to Design Programs". Also see <a href="https://news.ycombinator.com/item?id=25299547" rel="nofollow">https://news.ycombinator.com/item?id=25299547</a>.
One of the many skills you need to learn is to be able to repurpose your code to do new tasks. The Advent of Code is a set of programming puzzles in 2 parts that happen December 1-25. The challenges ramp up in difficulty.<p>The first part is usually something that you can solve with the most obvious algorithm... the second part requires a far more optimum solution. These exercises are fun, challenging, and online, you can do them any time.<p><a href="https://adventofcode.com/" rel="nofollow">https://adventofcode.com/</a><p>Also note that these are great for trying out that new programming language you wanted to learn.
there's no one right answer because to some extent it's subjective.<p>it's also like asking for advice on how to write a book, whilst having never read a book.<p>read lots of code, write lots of code, listen a lot, and form your own path
As an army guy that deploys a lot what has helped me is portability, slim code with minimal dependencies that can be easily repurposed. Don’t make any promises or assumptions about your network connectivity or executing environment.