Live data from Hacker News

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

news.ycombinator.com

51–60 of 105 posts

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

#51
Agree with a lot of the comments here. I went through this very issue a couple of years back and I did end up reading a few of the books suggested in that thread and while they were good reads, I think I learned the most from my colleagues’ harsh code reviews and developing a slightly thicker skin to those review comments, and not getting triggered at every single slight disagreement. I used to write a lot of grad student code at my current work and got rightly flamed for it (when appropriate)…

These days, I do try and think about the software engineering side of things first just so that I get quicker +1s from my team, and honestly, all the _quick and dirty prototypes_ I used to write (I still do, but a lot less) ended up requiring me to do a lot more debugging/redo-ing/thinking about scaling up etc later on anyway.

Books can get you a decent idea of what to do, but I think I found reading code (and especially code reviews of my colleagues for other people’s code) much more useful. I think reading a few 800 paged books to improve your software engineering skills is a very grad student thing to do. :p. I admit I did that way too much.

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

#52
It is critical for a company to have a concrete on-boarding process. If your present company doesn't have a good one take this as an opportunity to design one. You will learn a lot and also help others in the process.

Here are some of the guidelines:

  # Code style/guidelines
  # Git/version control workflow
  # Testing methodologies & tools used
  # Agile/project management tools used and best practices
  # Read the wiki about infra/services used in production/dev/staging and its workflow
  # Release guidelines & workflow
  # Mentoring process
  # Engineering style/culture

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

#53
I personally came from the other side of the table: I got a German "Ausbildung" as a sysadmin, started developing software as a hobby, and have now made the switch to professional software engineer. While I feel I'm pretty good at what I do, I'm lacking the algorithm education, the basic concepts and especially team related skills. Always something new to learn, I guess.

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

#54

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've written software over a decade and I loath the design patterns book.

I would not give it to a beginner as it would corrupt their mind with useless drivel .

It's authors exhibit themselves as morons who celebrate renaming existing computer science concepts while occasionally mixing and matching them.

I would not be this uncharitable towards it if it was not such a famous (and hence harmfull) book.

It's harmfull because software engineering is really hard, and they just add up to the load by trying to have the reader memoize their junk instead of doing something that would actually make them a better programmer. And, if you try to use their concepts while programming - shudders, oh god help you.

I'm not going to iterate over every pattern. Here's an example:

Flywheight? You assholes, just tell memoization for what it is. Why don't you rename existing data structures as well? Good thing those come out of the box, otherwise you would have began the book by renaming array, linked list and dictionary. Maybe you would have called linked list "the chaingang" or something.

You don't simplify things by giving things cuddlier names. You stunt peoples growth that way.

Gang of four book is a malignant offshoot of the practice of attempting to make software engineering better by legalizing and dogmatizing it by decomposition into trivial details that hurt your brain. It's a branch of 'consultancy driven software development' where people attempt to aquire a halo of professionalism by calling things by fancy names and over-complex descriptions (while skipping the practical things with equally complex names but at least those weren't made up by a bunch of idiots).

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

#55

Some general advice I've given multiple junior developers over the years, you probably aren't a junior but most likely applicable to the advice you are seeking. These were passed down to me by other developers. Other HN folk will have links to literature but hopefully my advice will give you a precursor. * testing - write your functions small enough to be readable, but not so small their abstractions are meaningless…

> testing - don't reach into your code's modules and mock. Instead use dependency injection with non-testing defaults

Could you please go into more depth with this?

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

#56

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…

There are a lot of good recommendations here, and I certainly relate to the instinct to go to books when you're looking to level up a skill set, but I really think what you need is not a bunch of books to read, but a few people to watch do the work. The only real way to do that is to get a job alongside them. You can read the books at the same time; you can ask your new coworkers which recommendations they agree with…

Yeah, software engineering is a craft, and generally the only way to learn those fast is to learn from others.

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

#57
If your code is reviewed by colleagues and if you review code of your colleagues, if you do some occasional pair programming you probably don't need to read books about programming. Concentrate on books that help you with things like estimations and communication, e.g. "The Clean Coder".

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

#58
I read systems science at university. While we did some technical stuff like basic Java programming and database design, we mostly focused on WHAT a system is and how to design one from certain requirements. So when I got my first job, as a web developer, I hit the ground quite hard. I hadn't really programmed in my spare time either so I didn't have that backbone experience. (You might wonder why I got hired in the first place, in hindsight, I also do).

Nowadays, some X years later, I identify myself as a backend developer and I tend to stay out of those "up in the cloud" discussions about what a system should look like. So how did I get here? First of all, I think I was pretty lucky having a boss at my first job who wasn't interested in me being really productive during my first time there, but rather wanted me to learn and grow with the company. I also had great colleagues, especially my then team lead, who really took the time and showed me the ropes so to speak. I bought one book, which I didn't really read. I did some online classes, but I mostly learned programming, problem solving, TDD, etc. by working.

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

#59
post #54

Earlier quoted context omitted.

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've written software over a decade and I loath the design patterns book. I would not give it to a beginner as it would corrupt their mind with useless drivel . It's authors exhibit themselves as morons who celebrate renaming existing computer science concepts while occasionally mixing and matching them. I would not be this uncharitable towards it if it was not such a famous (and hence harmfull) book. It's harmfull b…

Your comment is very interesting. I recently took a course on Design Patterns. I sat squirming during the lectures because I didn't like what was being said, but couldn't put my finger on what exactly I disliked.

What I understand from your comment is that you dislike the Gang of four book because it renames concepts that don't need the cutesy names that they give them. Do you have a problem with the _concept_ of design patterns? Or just the names they are given? Are the concepts themselves sound and worth paying attention to?

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

#60
I've worked in a variety of companies as employee and consultant and I have some counterintuitive advice that applies to building things on the web: In almost all cases, things like code maintainability, coding "standards", and TDD, go out the window during actual development. I'm not saying this is good, just that it happens (this is more a management problem than a software development one). There are deadlines to meet, changes to make, surprise features to add, etc. And usually you're just throwing things away and building new things before any of this comes back to bite you. Being able to go with the flow and handle chaos --flexibility-- is probably the most important skill to have. The job ends up being a lot of communication. If you're lucky, you'll get to code some cool stuff. But you'll also have to hardcode something clunky and ugly because there was no time to do it right. Be OK with that.
Post reply on HN