“Truth can only be found in one place: the code.” ― Robert C. Martin
Please stop reading this article if you are not a software engineer. It will be a boring read for you.
New York Times’ Indonesia’s Dire Need for Engineers Is Going Unmet article points out:
“…producing more skilled workers, including engineers and technicians, should be one of the key strategic priorities for the Indonesian government over the next decade[…] more than half of the engineering graduates produced by Indonesia go on to careers in other fields, like banking, Why? Because those jobs provide better incomes.”
The above article is consistent with my own findings in Indonesia over the past six years. In fact, this phenomenon is more apparent with software engineers, as they feel that companies undervalue their software engineering skills and frequently pursue opportunities in other industries instead.
Note: I use the term Software Engineer loosely, referring to Software Development Engineer, System Engineer, Data Scientist, Machine Learning Engineer, Mobile Software Engineer, Security System Engineer, Software Developer, Web Developer, etc.
However, these skills are a blessing that not everyone is capable of learning! In many countries, a software engineering job is one of the most rewarding and most sought after jobs today. We need to show that the Digital Revolution could impact the world even more than the Industrial Revolution.
5 out of the top 10 largest publicly traded companies by market capitalization in 2017 are high-tech companies: Apple Inc, Alphabet Inc. (Google), Microsoft, Amazon, and Facebook; they employ hundreds of thousands of software engineers. Many of their founders and C-Level executives are software engineers. Even over 120-year-old companies like General Electric and Goldman Sachs are hiring tens of thousands of software engineers. Software engineers are the catalyst in running and transforming companies in this digital revolution!
There is a global shortage of software engineering talent. This means that great talents can easily find many interviews and job offers with higher salaries than many other fields.
This article shows how to nurture natural, raw programming talent to its fullest potential by planning ahead carefully.
Both of my sons started learning computer programming when they were in elementary school. Nowadays, many high schools are offering computer and programming classes. This is possible due to affordable computer hardware, developer-friendly computer languages, easy-to-use integrated development environments, widely available books, community support, and mentors.
Youngsters should view programming as a fundamental skill like mathematics. You should start learning to code as early as possible because there is so much to learn. Additionally, there are regular programming competitions at state, national and international levels. You should participate in these competitions to sharpen your skills by learning from your coaches and peers. Practice makes perfect. And, it’s fun!
Universities are great in teaching the fundamentals of computer science: algorithms, data structures, compilers, operating systems, functional and object-oriented computer languages, machine learning, security, networking, etc. Majors in computer science and mathematics are most conducive to building your foundation. However, it is most important that you learn how to learn quickly.
The computer industry has been innovating at an extremely fast pace over the past 50 years. It has been reinventing itself constantly: Mainframe, Minicomputer, Workstation, PC, the Internet, Cloud Computing, Mobile Computing, IoT, VR/AR, and Machine Learning. Each of these requires learning a new set of tools, technologies, and theories. Upon graduating, the industry will continue to evolve and you must keep up-to-date. You should take internships in order to apply the theories you have learned at school and explore the state-of-the-art tools with its best practices in a real-world environment.
At GDP Labs and KASKUS, we provide mentorship that matches your interest. You will learn various things which are completely different from your typical school projects; for example, engineers on my team learn about scalability, availability, performance, production code quality, processes, work ethic, professionalism, and teamwork.
The above will prepare you well with an unfair advantage when entering the workforce.
Software Engineer as a Career
The general curriculum, expectations, and progression through kindergarten, elementary, junior high, high school, and college are well-defined and understood. However, few people understand the software engineer career path. I wish someone would have explained this to me when I was first starting out.
This section outlines a potential career path based on my experience in the US, Indonesia, China & India after working with some of the best software engineers in the world first hand.
From a simplified high-level overview, you can view your career as nested circles in a bullseye as shown below.
- Software Engineer — The first circle is the smallest. This innermost circle represents an entry-level software engineer who has just graduated from a university. A mentor will be assigned to you. They will give you an overview of the overall system and the team structure. Then, they will help train you with the necessary skills and tools so that you could contribute to a single part of the system. Your contributions will impact a small group.
- Senior Software Engineer — Joining the second circle typically means that you are self-sufficient and have become an expert in one area — iOS, Android, front-end, back-end, etc. Your responsibilities encompass those of an entry level software engineer and more. Your contributions will impact a larger audience.
- Principal Software Engineer — In the third circle, you will likely have multiple areas of expertise. You might dive even deeper into your areas of expertise and interests, and your knowledge will have greater breadth as well. Your contributions will impact multiple groups. Also, you will start learning about leadership and management by mentoring a couple of individuals.
- Senior Principal Software Engineer — Although the fourth circle still involves technical-related skills, you will also be involved with the business aspects of a company. Additionally, you will start dealing with corporate budgets, your company’s executives, partners, and customers. In a startup environment, your contributions will have a company-wide impact.
- Architect — The fifth circle will make you the “go-to” person for all technical questions. You need to understand the entire system: application, middleware, infrastructure, security, deployment, performance, scalability, availability, monitoring, etc. Also, you will start recommending best practices, leading edge technologies and keeping an eye on bleeding-edge technologies.
- Distinguished Engineer & Fellow — This is the outermost circle. It belongs to a small group of elite and accomplished super software engineers. These are very creative, resourceful, forceful, assertive and well-known individuals. They are usually both thinkers and doers. Many people, including their competitors, listen when they speak. Their contributions may impact their company and industry at a global scale for decades even long after they left their company to pursue other interest or passed away.
It’s a given that you will deepen your skills continuously in order to keep up with the fast paced technology changes. But, that is not enough as you gain more experience and responsibilities. You need to learn non-technical skills which include, but are not limited to the following.
- People Skills — This is a key skill in any occupation whether you are a Software Engineer, Product Manager, Lawyer, HR, Accountant, etc. in order to reach your fullest potential. There is a strong correlation between a person’s success with their domain expertise combined with people skills: building a team, connecting, inspiring, motivating, managing, retaining, listening, resolving conflicts, etc. Things are increasingly more complex and require a team of people to succeed. This is one of the most challenging skills for software engineers because this is something that has not come easily to most of them. It is more of an art than science. People need people. There is no substitute for human interaction, especially in the technology age!
- Communication — Warren Buffett likes to remind people that U.S. President Gerald Ford said: “If I went back to college again, I’d concentrate on two areas – learning to write and to speak before an audience. Nothing in life is more important than the ability to communicate effectively.” Communicating on a regular basis becomes part of your job on various occasions: daily emails, reports, tech talks, company meetings, etc. You need to be able to articulate to a diverse audience, ranging from a highly technical audience like engineers to non-computer people like executives and customers so they understand your point of view.
- Mentoring — You owe many people, including your own mentors when you get to this point. You can pay them back by paying it forward. Mentoring is a gift that keeps on giving. Mentor the promising young women and men who are eager to learn. You can learn as much from them as they will learn from you. Today’s world belongs to the young people. Groom them to be the future leaders!
Software engineers are in high demand during the digital revolution. Programming skill is only one of the essential building blocks because the software is the heart and soul of a computer system. You should use your computer programming gift wisely to improve yourself, your company, your community, your industry and the world. We are fortunate to be born with skills when they are required the most!
It’s initially published at LinkedIn Pulse and has been republished with permission.