Getting to the Practical Side

What triggered me to write this post is a question I participated at long time ago:

What do software developers of age 30 and over know now that wish they had known in their 20s?

30th Birthday Cake

I was just turning 30 when I saw this question, and believe me, life was quite intense at the time. Within a few minutes, I wrote my response on Quora. And to my surprise, it becomes one of my most viewed answers there. Feel great, absolutely.

After years, I think it’s time to review and write a few suggestions to new grad engineers, hoping that whoever reads this, especially those who’re interested in the software engineering/developer career, will find some value:

Always search online before you dive into a problem. You can be smarter if you stand upon smart peoples’ solutions.

One of the things I experienced when I started as a professional is — every problems look quite interesting and I want to be the creative one to invent my solution. Indeed that is great in school, but not usually your best choices at work. The school project/coursework allows you to produce software with acceptable bugs (you may call it features though). But at work, a bug costs the business, and damages the utility it could provide to the customers. Not acceptable.

Most but not all problems are NOT new. First, truly understand the problem, and then extract it into a form that is generalized. Usually it can lead you to a sufficient & proved solution by searching online. Understanding is required. Copy & Paste is no-no.

Just write enough code. Less is more.

Don’t develop for non-existing features, or use cases. One example is blindly creating setter/getter without knowing whether it will ever been called. Another one is creating abstractions that making easy things difficult to (re)use. The key is writing just enough. Every line you write is purposely needed.

Software development is a way. The goal is the goal. Don’t mix them.

Software is about efficiency — productivity boost of 10x, 100x, or even higher. When working on a solution, think about why we need to do it in the first place. Answer to the “why” question is worth millions.

Understand your goal, stick with it, and make every sec count when developing solution. At the end know when to stop. Over-engineering not just create unnecessarily complicated software, but likely the source of defects and instability.

Being good is not enough. Challenge yourself.

Well, this is really a career advice. Don’t feel that you’re the best on the team is “good enough”. Look outside and forward, especially look at and participate in anything that you have enthusiasm. For me, I’m more and more interested in blockchain and it’s possibilities. I have a background in telecommunications so that is why I also pay attention to what’s going on with the 5G technologies.

Design makes a difference, typing speed doesn’t.

I type fast. It only helps me when I get the good design in place. Design happens at all levels. From the top, design matters when we are working on finding a solution to a specific business need. It then goes down to the system design phase. When it passes that, it goes to the line-by-line detail, and here we will need another discipline to help producing the best outcome possible e.g., design patterns, algorithm design.

I hope you enjoyed this post and have a good time in Q4. Stay tuned and let me know if you have any feedback.

Winter is Coming

In gyms, no one wants to hear you scream.