10 Tips for becoming a better software engineer
By: Felipe Ramos
Tags: Computer Science, Clean Code, Tips, Software Engineering, Software Development

When you hear the word pragmatism in software engineering it is usually in reference to the great book by Andrew Hunt and David Thomas — Pragmatic Programmer (highly recommended), but we let’s take a shortcuts for the sake of brevity, and use the philosophical meaning in the context of engineering: a pattern is only useful after it has proven utility in a measurable form.

Tip 1: Pragmatism == utility. For example; The S.O.L.I.D principles provide proven techniques for achieving a decouple and scalable systems. And because they are proven by we start to see frameworks adoption it. Now we don’t have to think about Dependency Inversion. Do not write, design, or create unless there is measurable utility.

Tip 2: Software engineering is a craft. As a point of comparison consider the effort it takes to make a car by hand. Now consider how many of those cars have the potential to be recalled? Now consider the alternative — an automated plant cranking hundreds of cars a day. Good software requires knowledge, skill, and experience.

Tip 3: Ownership is everything. In my first job as a developer fourteen plus years ago, I accidentally truncated a production table. I rush to the managers office with the database administrator, and got it all sorted out. In order to be great, it is important to own our mistakes; even the ownership is shouldered by the team (in a team setting we all sink or swim together!).

Tip 4: Growth happens after ego is gone. If you are like me and many other engineers, most likely you hone your skills to be the best and your opinion is everything. In a field where frameworks, languages, tools, and devops are always changing there will always be someone that knows more and if we are open to it — we can learn a great deal.

Tip 5: Optimism and estimates do not mix. When delivering a product for a business it is important to pad estimates for any unforeseeable delays. For example, a component may be behind, team member is running into complications and now a story is block. The reason doesn’t matter — it is easier to have padded timeframe than it is to set business expectations.

Tip 6: You only want to code! No problem, but learn about management. Learning effective communication strategies, estimating, budgets, etc. can help you understand and negotiate with the higher ups.

Tip 7: Mentoring is often equally beneficial. When you mentor your team mates by creating exercises, knowledge sharing, or good old pull request review— you’ll have a better idea of the thinking process your team member follows and in some cases they might even adjust your world view on certain practices, standards, language feature.

Tip 8: Have a hobby! Depending on the industry you are working on games or business, startup or fortune 500 — odds are you’ll work in places with crazy deadlines and overtime. Don’t burn out, go fishing, paint, or code but something completely different than your daily job. For example, I like making games in MonoGame and Unity.

Tip 9: Remember or learn the basics. Don’t neglect a solid grasp on the foundations: data structures and algorithms. This helps to not fall in the reinventing the wheel cycle more often than not.

Tip 10: [Cliche] With great power…what I really mean is understand your domain. If you are working on a banking app — make sure your work is covered and risks are minimized by good practices, error handling, privacy, and testing. This will become increasingly important with software controlling critical systems in self driving cards, and planes to name a few.

Leave me a comment if you have questions or feedback!

Take a look at:

The Clean Coder by Robert C. Martin

Code Complete by Steve McConnell

Design It! by Michael Keeling