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.
Ask HN: Learning proper software engineering practices as a student / researcher
1–10 of 11 posts
Re: Ask HN: Learning proper software engineering practices as a student / researcher
#2Re: Ask HN: Learning proper software engineering practices as a student / researcher
#3The 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.
Also note that these are great for trying out that new programming language you wanted to learn.
Re: Ask HN: Learning proper software engineering practices as a student / researcher
#4it'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
Re: Ask HN: Learning proper software engineering practices as a student / researcher
#5Of 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.
Re: Ask HN: Learning proper software engineering practices as a student / researcher
#6One 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…
Working on a real, larger-scale code base, in a context where good SWEng practices are required is probably a better learning path. An internship, as suggested by Jakobeha above is probably the best way.
If an internship is not feasible, and existing projects seem too daunting, it might be easier to start one (or rather several) of your own. As with most things, practicing helps.
Re: Ask HN: Learning proper software engineering practices as a student / researcher
#7I 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…
You won't have a mentor but you can still learn something.
What I suggest is to start with projects you are already familiar with. For example, I work with machine learning and python. I've been learning a lot by studying the code from pytorch, fastapi and other libraries used in this field.
Another great way to learn is to implement new features for projects you use. You can start by replicating existing ones. For example, you can find a PR that added a new feature, then try yourself implementing it and use the actual PR as a guide when you get stuck.
Re: Ask HN: Learning proper software engineering practices as a student / researcher
#8One 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…
AoC is amazing, but I don't think it's a good fit for what the OP needs. The solutions tend to be algorithmically hard, but for the most part quite short, and don't really require SW Engineering chops (as opposed to "programming" chops). Working on a real, larger-scale code base, in a context where good SWEng practices are required is probably a better learning path. An internship, as suggested by Jakobeha above is p…
It's not as though I haven't programmed at all since I build out and maintain expriments for research. It's just that I feel that I am just programming to get things done and have no clear structure to my code.