If you're smart enough to do a PhD, you're smart enough to figure out all of the scaling and operational bits. It's not rocket science. It's just operations. Simply by asking relevant questions, practicing some things a bit, you'll get used to it. And consider that it's different in every organization, and nobody does it really well frankly. Given the pace of change, the varying technologies and flavour-of-the-month…
Ask HN: How to transition from academic programming to software engineering?
21–30 of 105 posts
Re: Ask HN: How to transition from academic programming to software engineering?
#22If you're smart enough to do a PhD, you're smart enough to figure out all of the scaling and operational bits. It's not rocket science. It's just operations. Simply by asking relevant questions, practicing some things a bit, you'll get used to it. And consider that it's different in every organization, and nobody does it really well frankly. Given the pace of change, the varying technologies and flavour-of-the-month…
This. I transitioned from a (non-STEM) PhD and am now working as a "real" engineer. It is called a "practice" for a reason, you will get better with time as long as you are self-reflective about it. One practical tip - take a look at Dan Bader's book if you are deep in Python, it has a lot of good stuff. One philosophical tip - depending on your organization, remember that slow is fast in engineering. This is somewha…
Coming from an academic field myself... be careful with this one. Depending on your personal habits in academia, you might have to learn the opposite - your code doesn't have to be perfect, it has to work.
Be careful not to end up overthinking the code/design and under-delivering on the timeline. Missing time estimate once in a while is usually OK, missing it consistently and by a lot might become a problem.
Re: Ask HN: How to transition from academic programming to software engineering?
#23Re: Ask HN: How to transition from academic programming to software engineering?
#24Re: Ask HN: How to transition from academic programming to software engineering?
#25- Go to hackathons to learn to ship code fast and get used to building "skateboards". Learn how to make tradeoffs that optimize for development speed. It's not about writing crappy code, it's about optimizing for the right variables at the right time. There are now a lot of real world variables to consider.
- Practice Kanban. Divide and conquer your projects. Make small and focused pull requests. You will naturally start strategizing on how to do things right while you're doing things quickly.
- Using category theory and functional programming in your code, but being practical about it so others can read it, will really help when it comes to writing unit tests. Unguided polymorphism is from the devil.
Re: Ask HN: How to transition from academic programming to software engineering?
#26As a PhD student, my code and habits do not meet the standard of industry. This is because I'm constantly changing the whole architecture to try new ideas, so I I optimize for small and simple code at the expense of testability, modularization, robustness, etc.
It's important to recognize this. You will need to change your style.
I can't recommend any one book. I feel like I mostly learned these lessons through random articles, lecture videos, conversations, and personal experience.
IMO, some of the most important principles:
* Implement as much as possible with pure functions (but don't contort the code to achieve this).
* Make your commits as small as possible. Well structured version control history is valuable.
* Spend lots of time time thinking about how data flows through your program, more than how the code is organized.
* Strongly prefer DAG dependency structure. Write a set of libraries and then a top level program that uses them.
Re: Ask HN: How to transition from academic programming to software engineering?
#27You won't be alone. In any real organization, you'll be part of an experienced team that's working towards the same goal as you, and if you're curious, open and appropriately humble, they'll teach you everything you need to know.
Re: Ask HN: How to transition from academic programming to software engineering?
#28* Follow whatever formatting and style rules your workplace uses. It's religion and not worth getting into, as long as everyone uses the same style its a win.
* Dev/stage/prod is also workplace specific. Just go with the flow and avoid time wasting arguments on these topics, it's not usually worth it.
* Try to break your work into small commits. This is both easier to review and easier to estimate time on.
* Architect your code so that you can add unit tests. Make sure all your commits have this.
* Prefer longer simpler code to clever code, you're optimizing for newcomers to your code reading it.
* When a one line comment explains it to you, you'll probably need a paragraph at least for someone outside the field to get started understanding it.
* Think about how you'll respond to someone coming to you and saying "something something prod something something your code is buggy." How will you get enough information to determine if this is true, and to debug it when it is? Logging is one good tool here, so consider what you log carefully.
Finally, don't be too surprised if you find people talk down to you. Unless you are in a FAANG company, which it sounds like you are not, developers can be very condescending towards academics (and people from other fields).
Re: Ask HN: How to transition from academic programming to software engineering?
#29In my experience, it's easy to just learn on the job. Some basic points though: * Follow whatever formatting and style rules your workplace uses. It's religion and not worth getting into, as long as everyone uses the same style its a win. * Dev/stage/prod is also workplace specific. Just go with the flow and avoid time wasting arguments on these topics, it's not usually worth it. * Try to break your work into small c…
Re: Ask HN: How to transition from academic programming to software engineering?
#30First of all, SW engineering is a practice with a lot of responsibility. The main responsibility lays in writing code, that is easy to understand. For example, if you think you write well written code, then try reading code that you have written a couple of months ago. Usually, a very painful experience :D So try to write code for an audience. This has been the trigger for me. Also I encourage code reviews and TDD. T…
We don't always hold ourselves to it, sometimes 5-6 line functions make sense, but we strive toward 4. Sometimes it's as easy as breaking code out into a new function, but sometimes you just simply have to create a class for it. That way a lot of complicated code suddenly becomes very easy without much effort.