HACKER Q&A
📣 testtesting123

Learning proper software engineering practices as a student / researcher


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.

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.


  👤 Jakobeha Accepted Answer ✓
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 are working on a real-world large-scale system. So I would recommend, if you have the opportunity, try getting an internship before grad school.

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.

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 https://news.ycombinator.com/item?id=25299547.


👤 bwh2
Read Code Complete and Clean Architecture, then start incorporating those tactics and concepts into your own projects.

👤 mikewarot
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.

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.

https://adventofcode.com/

Also note that these are great for trying out that new programming language you wanted to learn.


👤 dd444fgdfg
there's no one right answer because to some extent it's subjective.

it's also like asking for advice on how to write a book, whilst having never read a book.

read lots of code, write lots of code, listen a lot, and form your own path


👤 austincheney
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.