A long introduction
This is the first "opinion blog post" on my page. I made up this self reflection after a string of interviews for some senior positions, and also after reading this awesome blog Advice From a Software Engineer With 8 Years of Experience | by Benoit Ruiz | Better Programming
I think software engineers in Vietnam have a unique challenge with salary, which demands some dramatic career paths. Now if you disagree on how expensive cost of living in Vietnam is, I provide some evidences to give some insight into this issue:
- House prices average nearly 24 times annual household income - VnExpress International
- The Consumer Price Index in Việt Nam, within the last 12 months rises to 4.13% according to the Department of Statistics, Vietnamese government. For the same period, it is 2.9% in the States.
- Current average monthly salary of a C++ developer in Vietnam stands at around $1400 by this report, while Numbeo reports cost of livings in Vietnam as per month is 41 mil VND, or $1600. Crazy isn't it?
Of course, there are other aspects of achieving career goals one should not forgo such as time with family, work environment, social contributions, character growth, benefit packages etc. But let just say my career path goal is only about getting the highest income as pass as possible. And I think many of my colleagues share the same rush with me as well - it is a race to get into competitive career and get enough salary before things could get too expensive.
This blog is my reflection on the choices, and whether I could have done something better to achieve the financial target. There is one spoiler ahead: The reward only comes after genuine effort.
Rapid switching companies is ok, but only after learning rapidly...
Bosses definitely want commitments. Company wants to have people commit 3 more years, and they often say the first 6 months is just for training. It is so commonly accepted that a person takes time to learn on the job. "Taking time" is the problem.
Nevertheless, there were quite a few strings of unfortunate events on my careers that stop my learning shorts. My first company stopped their 5G project after 1 year since I joined. I had some unhappy events and laid back time in the second company, which I decided to leave after nearly 2 years.
Here is the take home lesson for me: even if one decides to stay long for a company, and enjoys some slow pace learning the job, the unexpected still happens. Whether you decide to jump job to get a x2 boost on you salary or just have to for whatever reasons, learn and earn experience as if tomorrow is your next interview.
Know your core...
There are basically 2 types of questions in an interview: "What did you do in the last job?", and "Can you code this problem?". The first one asks about experience, and the second deals with some core knowledge. I talk about core knowledge in this section.
Median salary for for a 4 years exp C++ developer is around $1400/month. For that salary range for C++ position in Vietnam, interviewers asked a number of questions on memory alignment, memory leak issues, some left value concept, rules of five and threading. I answered them quite decently but stop short giving satisfactory answers about thread.
They asked very basic questions first, and progressively asked some more advance only after I have answered the basic succinctly. Obviously, they were very nice and did not try to make it a battle, or some hill marathon to prevent me to get higher pay rank.
That being said, I also failed other interview miserably, for the very similar questions. Interviewers could expect the topic to be so critical that having superficial knowledge is like having nothing at all.
My lessons: never forget the core, learn lean code before trying on anything fancier like complex algorithm, some other tech stacks. There is a certain expectation of core knowledge level for every salary rank. But there is also deal breakers: knowing little is same as knowing nothing.
Experience is no substitute for extra learning
I must admit, I didn't have more than a few tasks with muti-threading programming, has never done any troubleshooting any multi-process issues. The products that I worked on are well-designed that they barely have any race condition. New features could be implemented base on well-structured system without requiring developers like me to understand all aspects. Being confidence over 4 year experience without extra learning hits hard at the interview for the above reasons.
Thus reading a few books is critical for the career. They supplement the knowledge gap in the work. I have the followings favorites for my C++ developing career.
- C++ Concurrency In Actions Practical Multithreading by Anthony Williams
- Effective Modern C++ by Scott Meyers
- The Linux Programming Interface by Micheal Kerrisk.
From the last interview experience, I think some solid knowledge earned from the book could possibly break salary above $1600. Again, this is Vietnam, 2024.
Choosing C++ for a start
I couldn't express how lucky I am to start my career as a C++ developer first. Having some knowledge of C++ really helped me when diving into other programming languages. C++ seems cumbersome, requiring developers to manage memory and do all kinds of things, while other programming languages integrate the steps into some simple syntax. But the convenience comes with trade off. One seems to loose good foundation of programming.
Choosing suitable techs to learn
There is a fine line between what is core knowledge and what is advanced knowledge.
For some employers, familiarity of framework XYZ, version n is a must. For others, they barely ask. I have been to an interview for automotive project, and they didn't ask a single question of AutoStar, or Android Framework. But there was an interview that they only asked me about 3GPP specifications in 5G when I applied to be a 5G developer in their team.
Whether choosing to learn AutoStar, or 5G, or security, or framework XYZ is a huge decision. It could be your destiny. It could be your selling point or it could be just a simple ticket to get interviewed.
Now, for everything you learn, there is a syllabus - except that in this case, it is you to design the syllabus. Stay focus on the assigned task and figure out the required knowledge needed to get the work done. Or you can talk to your team lead and colleagues for ideas.
Algorithm should be a favorite snack
Very few companies in Vietnam asked about algorithms, or they just ask easy questions. But those that ask medium or hard questions pay handsomely. Most of those companies that I know develop trading tools.
Practicing algorithms is like doing physical exercise. There is no bootcamp that can help you beat it. It requires perseverance. Start early, and stay faithful to the goals. There is definitely an esteem reward after 300 problems solved, or 1000, or more. It is only definitely suck to know that one needs 2x income now but have to wait another 4 years learning algorithm.
Start early, talk often.
Talk often
I ended the last section with a phrase "talk often", and I use it as the conclusion for this blog.
The career is challenging. The money is hard earned. The journey is tedious. But you have friends.
I don't know about you, but I don't think I could do all the above suggestions in the next 4 years, even though I wrote them. I think connections are important. They could become your mentor, your learning companions, or your future boss. They could be your stress reliever, for example telling not to bother with a certain book.
One thing is sure: others have learned some knowledge, you can just get it from others.