Live data from Hacker News

Ask HN: How to transition from academic programming to software engineering?

news.ycombinator.com

31–40 of 105 posts

Re: Ask HN: How to transition from academic programming to software engineering?

#31

I have hired some PhDs in your situation and worked with others, I personally just went to work after I got my BSEE. My observation is that you're halfway there when you realize that you need to improve, of the folks I saw who did poorly it was because they didn't realize that you could be both the smartest person in the room and the least capable at the same time. Right now, on your first job experience, even a kid…

I would also add that lots of new people waste more time doing TDD wrong than they would save doing TDD right. There are lots of things you only really understand until you've done them wrong.

Re: Ask HN: How to transition from academic programming to software engineering?

#32
Your best bet is to look into a programming boot camp training program. As you have seen Ph.D. academic programming deals more with research while commercial programming deals more with delivering a product as fast as possible. It's two different mindsets.

1st decide on what area you want to specialize in and then look at a reputable boot camp that fits your goals. You can do it on your own but it's going to take you a lot longer and it's hard to focus on what you need to learn. Also, if you could do it, you would have done it already. The advantage is that you're already used to the scholastic environment and you'll be able to do very well and be even well ahead of everyone if you challenge yourself rather than strictly following the curriculum.

Re: Ask HN: How to transition from academic programming to software engineering?

#33
post #23

Be patient with yourself. You have talents that are quite useful, but good code design and architecture are rarely thought about in academics. Realize that while you spent 4-6 years getting your PhD, your coworkers were becoming better engineers. That doesn't mean you can't do good work, but for a while you'll mostly be learning from others.

The exception is if you are in the area of study whose entire existence is to understand what is good code design and architecture.

Re: Ask HN: How to transition from academic programming to software engineering?

#34
Code review, dev/stage/prod workflows all vary on a team-by-team basis. If you already know what they are and why they exist, there isn't a better way to "prepare" for these than to just roll up your sleeves and look at how your current team implements these things.

Good testing practices:

1. Minimize mocking as much as you can -- as a rule of thumb, mocking is inversely proportional to test confidence.

2. Don't test implementation details, test public-facing APIs. This way, your implementation can change. Mocking makes this harder. Don't test how you get things done -- test that they are done.

3. Make sure your API is well defined before you start writing tests, or you will waste time.

You can find loads of Python testing guides on Google on the first two points. There will be times when you have to break some of those rules, but knowing when will come with experience.

Re: Ask HN: How to transition from academic programming to software engineering?

#35

I have hired some PhDs in your situation and worked with others, I personally just went to work after I got my BSEE. My observation is that you're halfway there when you realize that you need to improve, of the folks I saw who did poorly it was because they didn't realize that you could be both the smartest person in the room and the least capable at the same time. Right now, on your first job experience, even a kid…

I would also add that lots of new people waste more time doing TDD wrong than they would save doing TDD right. There are lots of things you only really understand until you've done them wrong.

Yeah, a lot of software engineering schools of thought are just based on superstition, but they're all somewhere in the neighbourhood of "productive practices" regardless of how different they are from each other.

If you do

* 100% pairing,

* buttloads of unit tests,

* lots of microservices,

* use an autoformatter,

* in a Node codebase,

to order-of-magnitude approximations you're probably going to be about as effective a team as if you

* always code alone,

* mostly write integration tests,

* write a big old monolith,

* mostly ignore code style (except for egregious cases),

* in C.

These variables do make a difference, but those differences are context-dependent and can be swamped by other factors. Use version control. Do at least some testing and some code review. Make sure engineers can actually run their code before submitting it (on their laptops or in special staging environments or whatever, it doesn't matter much.) Help coworkers when they're stuck, and ask for help when you're stuck. And try to hire Harrison Bergeron onto your team :-).

Re: Ask HN: How to transition from academic programming to software engineering?

#36
I made a very similar transition four years ago. Finished a Ph.D. Started a job in a related field writing lots of Python. My advice is to take advantage of your analytical and abstract reasoning skills. Your peers may have more concrete experience writing software, but you did a Ph.D., which means you have the patience and tenacity to follow all the threads until you figure out where they go. That means that where other people might give up, you can actually figure out how the system works and where a new feature fits in it. Or why it doesn't work the way anybody thinks it does. Think of reading other people's code like doing a lit review -- multiple authors, different schools of thought, arguments about how to do things right -- these have all played out in the code base and they're there for you to read. As a Ph.D., you have the ability to pull this all together into something that makes sense.

Re: Ask HN: How to transition from academic programming to software engineering?

#37

I have hired some PhDs in your situation and worked with others, I personally just went to work after I got my BSEE. My observation is that you're halfway there when you realize that you need to improve, of the folks I saw who did poorly it was because they didn't realize that you could be both the smartest person in the room and the least capable at the same time. Right now, on your first job experience, even a kid…

This is pretty good advice overall. One small change I suggest is to take it easy on Design Patterns and the like. I’ve seen people in OPs position (general smarts but limited production experience) turn into architecture astronauts and start overengineering everything. It can be useful if you’re working on a legacy codebase and need to understand the jargon that can appear in [possibly overengineered] existing codeb…

as a middle ground: my advice would be to learn and internalize design patterns. and then “forget them.” let experience show you when to break the rules. keep things simple.

this level of the craft is subtle, intuitive, and often inaccessible to the conscious intellect.

Re: Ask HN: How to transition from academic programming to software engineering?

#38
Thanks everyone, the comments are much appreciated. Here's a list of books and other media resources recommended so far in the thread:

Robert C. Martin, Clean code: https://www.amazon.com/Clean-Code-Handbook-Software-Craftsma...

Vaughn Vernon, various: https://vaughnvernon.co/?page_id=168

Steve McConnell, Code Complete: https://www.amazon.com/Code-Complete-Practical-Handbook-Cons... 2

Clean coder: https://cleancoders.com/ videos

Hunt and Thomas, The Pragmatic Programmer: https://www.amazon.com/Pragmatic-Programmer-Journeyman-Maste...

Hitchhiker's Guide to Python: https://docs.python-guide.org/

Dustin Boswell The Art of Readable Code: https://www.amazon.com/Art-Readable-Code-Practical-Technique...

John Ousterhout, A Philosophy of Software Design: https://www.amazon.com/Philosophy-Software-Design-John-Ouste... This one looks particularly interesting, thanks AlexCoventry!

Kent Beck, Test Driven Development: https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/...

Dan Bader, Python Tricks: The Book: https://dbader.org/

Ian Sommerville, Software Engineering: https://www.amazon.com/Software-Engineering-10th-Ian-Sommerv...

Svilen Dobrev, various: http://www.svilendobrev.com/rabota/

Re: Ask HN: How to transition from academic programming to software engineering?

#39
post #7

I have made the jump from writing academic code to working on a product where actual software engineering was encouraged. Although I did jump back to academia pretty quickly. Hitchhiker's Guide to Python is a very good book (freely available online, or get a copy from O'Reilly); some of it may be obvious but some might not be. It is true IMO that making your code testable will also make it better designed. It might e…

Oh and I don't think you'll be as hopeless a coder as some other posters might think, because you did your PhD in a computational discipline and know Python and have heard of unit testing.

There are, say, physics PhDs who only write numerical Fortran or C++ routines (in one big file, sometimes even in one big function), who really might want to attend a boot camp or something but it doesn't sound like you're in that boat.

Re: Ask HN: How to transition from academic programming to software engineering?

#40

I have hired some PhDs in your situation and worked with others, I personally just went to work after I got my BSEE. My observation is that you're halfway there when you realize that you need to improve, of the folks I saw who did poorly it was because they didn't realize that you could be both the smartest person in the room and the least capable at the same time. Right now, on your first job experience, even a kid…

This is pretty good advice overall. One small change I suggest is to take it easy on Design Patterns and the like. I’ve seen people in OPs position (general smarts but limited production experience) turn into architecture astronauts and start overengineering everything. It can be useful if you’re working on a legacy codebase and need to understand the jargon that can appear in [possibly overengineered] existing codeb…

I agree. I would like to add, doing something like The Rails Tutorial from Michael Hartl would be a great place to start. It takes you through a reasonably real world application including testing and how to think about the constituent parts. A PhD is like being an expert in materials science while lacking in craft-level skills such as running a vertical mill.
Post reply on HN