Ask HN: I've realized I'm a bad software engineer and I'm over 30, what's next?
191–200 of 275 posts
Re: Ask HN: I've realized I'm a bad software engineer and I'm over 30, what's next?
#192I've always maintained that you really learn how to write code for a particular problem when you've done it three times. The first is usually to get working code, the second is to redesign it to improve some aspect (adding features, improving performance, code maintainability, etc.), and the third is when you really get it "right". Using this approach, it takes time and deliberate practice (borrowing the term from Geoff Colvin's "Talent is Overrated").
From my point of view, the core question that you're asking is "How do I get deliberate practice with coding?" There is no easy answer for this, but here are some ways to break things down so that you can come up with a plan for yourself.
1) "Clean Code"
This was brought up in another comment, but the book does an excellent job of covering many of the techniques for keeping a code base in good shape over time.
What can be trickier is 1) there are a lot of techniques, and 2) you may have a hard time taking the techniques from the book and applying them to your situation. While the examples in the book are universal, I think it's easy to get lost applying the technique to a more complex problem.
2) Applying One Technique to a Known Situation
Either start with a smaller piece of code or a medium piece of code that you know really well. Ideally, use some advanced piece of source code control that allows multiple branches. Then, start doing the practices from "Clean Code" one a time with a goal in mind, such as eliminated duplicated code, limiting scope, making functions more configurable via parameters, etc.
The real trick? Just do one of these improvement areas at a time. Do it a few times in different parts of the code. Eventually, the patterns start to emerge as to why it improves and where else it can be applied.
3) Recognizing Patterns
You may or may not have read articles/books about API design, coding style guidelines, etc. While many of those rules may seem arbitrary, as you get more practice, you'll start to see why such guidelines exist.
There will be similar patterns for how your code refactoring can improve modularity, debuggability, development time, testing, error handling, etc. Each code change may not improve all those things simultaneously, but you'll eventually start making improvements that cover more than one area of improvement.
4) Improving Your Learning Acceleration
There's a point you'll reach where you can keep refactoring, but you may not learn much more. At that point, try adding a feature. It can be a minor feature or a major one, but you'll start to see where the new feature forces your code to be refactored again. You can write a bunch of code or you can go through the "what do I need to change in the existing code base to add feature X?" as a mental exercise. In either case, you'll start to see what prior decisions may not have worked since they only considered one aspect of code improvement instead of three or four.
5) Putting All of the Above into Context
Another aspect of being a "Senior" engineer means that you recognize the problems really being solved by your software and what value it has. As you get more senior, you can answer all sorts of questions such as:
- How does the customer use this software? What pieces do they pay for? What features save them the most time/money/suffering? - What should the next features be? - What parts can be improved? Speed? Usability? Data Input? Connectivity/compatibility with other software? - What sort of documentation does the user need? - Is this software getting dated? What parts need replacing? Does there need to be a new solution (rewrite vs. continued refactoring)?
Not all of the above questions are applicable (e.g. tools used inside a company vs. a tool customers buy and use on their own computers), but being able to put the software usage into context (sort of the PM area you were talking about) and breaking down the technical context (the "senior" engineer role) are both useful skills.
You may need to go back and forth a bit between coding and reading books like "Clean Code" before the lessons really get internalized. Using the above guidelines and knowing what sort of learning process works best for yourself, hopefully you can start taking steps to improving in ways that help your career.
Re: Ask HN: I've realized I'm a bad software engineer and I'm over 30, what's next?
#193I'd argue differently. Congrats for having the courage to recognize your problem. The analogy that comes to mind is I've been playing basketball in my local town, and now I've gotten promoted to play in the big city. I now feel like a small fish in a big pond. If you enjoy software engineering, I'd say, double down. Now that you're at the medium software company, seek mentorship and coaching from others. In addition,…
Totally agreed! My first thought on reading this was "this doesn't sound like a bad engineer, this sounds like an engineer with potential who's just been exposed to some good practices they hadn't encountered before." Just set your mind to doing better and in as little as a year it'll be a different story.
About the only
Re: Ask HN: I've realized I'm a bad software engineer and I'm over 30, what's next?
#194Earlier quoted context omitted.
I remember one from Java ~20 years ago: public final static string HTTP = "http"; public final static string COLON = ":"; public final static string SLASH = "/"; public final static string WWW = "www"; with code like string url = HTTP + COLON + SLASH + SLASH + WWW .... Ignore any Java issues - not used it much in ~15 years. Edit: I asked the developer who had written this what it was achieving and he said it was best…
Well, actually... it could be a good practice, if the values are used in multiple places.
Re: Ask HN: I've realized I'm a bad software engineer and I'm over 30, what's next?
#195Stop judging people. 'You' are not a good or bad anything. You do good or bad things.
Some people here talk about knowing a bad programmer or project manager. You will be happier if you change your mindset to understand that the person isn't a bad anything. It's just that you don't like their code and that can change.
Re: Ask HN: I've realized I'm a bad software engineer and I'm over 30, what's next?
#196I read a few years back (long since forgotten where) in an advice thread to new people that you want to be careful that as you spend more time in your career you want ensure your experience levels up too. And there is a difference between 2 years of experience versus 1 year of experience 2 times.
There is already a lot of great advice in other replies. What many of them are getting at is being honest with ourselves what our actual level of experience is, and shaping the environment to best help level up the skills we need to improve. It sounds like you have already done one very difficult thing - moving to a position that forces you to improve and see clearly where to make changes.
Re: Ask HN: I've realized I'm a bad software engineer and I'm over 30, what's next?
#197If you were a bad engineer, you wouldn't care about hardcoded values, wrong structure, difficult to debug bugs etc. I've worked with different types of programmers. Some weren't great a writing solid, well documented, well structuted code. But they were really good at understanding what the customer wanted and hacking together a quick and dirty 'good enough' solution for the customer and then moving on to the next pr…
Re: Ask HN: I've realized I'm a bad software engineer and I'm over 30, what's next?
#198Re: Ask HN: I've realized I'm a bad software engineer and I'm over 30, what's next?
#199Re: Ask HN: I've realized I'm a bad software engineer and I'm over 30, what's next?
#200You pointed out specific issues with your work, so you can go about improving on those thing.
Keep your chin up.