Almost everyone writes code these days, yet we come across job postings that hang unfilled for a while. Why is that? As surprising as it may sound, it is hard to find really good software developers. Getting code to compile is not difficult with all the help from Intelli-Sense in IDE, abundance of documentation and samples. However, building something intuitive that just works, with snappy performance, low memory footprint, portable across platforms, extensible for future needs, engaging user interface and source code worthy of US library of congress – it is a whole different ballgame. We need more top notch engineers in the field. In this article I will try to inspire you to become one.
It is fun to be an engineer
Imagine you are packing for a long trip to an uninhabited island. You will be provided unlimited supply of food and water and you can pick 1 item to take with you. If your immediate thought is a “laptop” – congratulations! You are a total nerd and will do great as a software developer.
I have always been fascinated by computers because they offer ultimate freedom of creativity. You are not bound by laws of gravity or human judgement, you can create and destroy virtual worlds without consequences, you can experiment in a safe environment and you are granted an infinite number of attempts to get it right. There is no other place like this to unleash your imagination.
People get hooked to software development during school years as they learn how the world works. They describe it in mathematical formulas and compute them to verify correctness. It is hard to convey elation an engineer experiences when his or her computer simulation resembles real world behavior.
As folks expand their software development horizons they become curious about client-server interactions. Isn’t it cool to put an application on two computers and make them talk to each other and do stuff? It can be as simple as have server count votes from various clients to build preference distribution histogram. It can draw a map of client movement over time based on GPS coordinates pushed by the client periodically (Uber, anyone?). It can also be a simple peer-to-peer chat application. People are only limited by their imagination and tolerance of their room mates for sleepless nights.
By writing fist client-server application, future Elon Musks dip their toes into distributed systems, which are the foundation of modern world. You throw a stick in the air these days and it will land on one distributed system or another – airline ticket reservation system, Microsoft Azure Cosmos DB service, shopping cart system, Redis cache, Cassandra, cellar network call routing, just to name a few. Idea behind distributed systems is that multiple computers work together to achieve common goal. Any one computer can fail, but the show must go on, transparently for any user of such system. It has been a while since PAXOS was designed, it is time for a better and more efficient consensus algorithm. Will you be the one designing it?
Another area that captivates youngsters and terrifies old timers is security. Natural evolution of curiosity takes people to explore encryption algorithms. I see people trying their luck implementing symmetric encryption algorithms, like AES, or even asymmetric, like RSA. They code SHA256 hash algorithms and implement HMAC. One of my favorite cryptographic functions is PBKDF2. It is quite popular in the industry and is used as an economic deterrent for hackers trying to brute-force their way to your password (how much does it cost to run a single CPU core for 1,000,000 PBKDF2 iterations for every password in the dictionary?).
There are two hot areas for software developers nowadays – Artificial Intelligence and Big Data Analytics. Microsoft, Amazon, Google and a few others are building AI engines that will solve most complex problems humanity faces today. For example – how to smoke experienced StarCraft players. Good news – Skynet is not taking over the world any time soon (judging by AI’s StarCraft performance), so you still have time to get into this field.
You are reading this article on a computer, smart phone or a tablet. Your device runs operating system that controls devices, schedules CPU time for various tasks, manages memory, protects your privacy by blocking untrusted applications and does many more things. Hardware of your device validates boot loader of the operating system and establishes a chain of trust. Your operating system storage device is likely encrypted with one of those symmetric algorithms we talked about, with keys are locked safely in a Trusted Platform Module. Armies of engineers worked tirelessly to invent and build all of these things we take for granted.
The bottom line – there are vast applications of computations today – forecasting (stock price forecasting, for folks who want to get rich fast 😀), high fidelity image rendering, encryption, communication, astronomy, etc. There hasn’t been a single engineer who quit job because he or she reached the limit of computational capabilities of modern hardware. I dare you to be the first!
Software engineering is projected to grow 21% at above average pace in the next 10 yeas (according to Bureau of Labor Statistics). Some of it will be green field projects while some will be dedicated to maintenance and incremental improvements. A fun fact – today a number of industries are still using mainframes (invented in 1951) for day to day operations – banking, health care, insurance and even aviation. As people write more and more code, there is more of it every day to support, integrate and fix. Large enterprises are slow to evolve their technology and prefer to pay way out of doing it in lock step with time. For example, cost of extended support for older Windows versions grows exponentially, doubling for every additional year. Imagine yourself in a situation, when you are the last engineer on Earth that knows how to deal with a specific piece of technology that a particular company uses – you will be priceless.
Technology is like fashion – it changes every season. Since 2000 a whole slew of technologies emerged into hype and disappeared from public radar. There is no reason to believe that this trend will stop in the future. You can bet that every year will bring something new and exciting to the market. Being an engineer enables you to move freely between these technologies while they are in their infancy. Ride the hype wave, so to speak. If you don’t like the tech trending this summer – give it 6 months.
If you haven’t heard of freelance yet – now you have. Gig economy is booming and engineers are reaping the fruits. Companies like UpWork offer opportunities to make a quick buck on the side. In fact, you can work from home, Starbucks or even a hammock in Hawaii. The world is your oyster, because you are an engineer. According to Invoicely, Web Developer and Programmer are top 2 most popular freelance jobs. This is not coincidental – computers are universal no matter which country you live in. Code written in Jamaica will work exactly the same (assuming localization and time zone testing) as in Ukraine. This is not true for a whole slew of industries that are tied to a country or a location – finance, marketing, legal, etc. But it is true for engineers and you should be the one taking advantage of it.
It costs nothing to start
There are jobs that require extensive training by a professional, for example doctors or lawyers. Some jobs have high cost of materials, for example, jeweler or an athlete. Engineers don’t have either of those problems – all you need is a comfy chair, a laptop and a cup of coffee to get started.
Minimum degree required by employers is Bachelor of Science, however it is just a resume filter for applicants. There is virtually nothing they will teach you at school that you can’t learn on your own by reading books, articles and watching YouTube videos. Third normal form you say? Yeah, that is also common knowledge. In fact, if you graduate with a B.S. degree and have absolutely no practical experience you will struggle to land a good job. On the other hand, if you spend 4 years digging deep into a particular technology, you will be able to make money.
Having said that, I do have to point-out that you should get a B.S. degree for other reasons – access to university resources, meet like-minded individuals and build networks of people, bounce ideas off of your engineering friends and just have fun living on campus. It will cost a bit of money, but you’ll cover it quickly on the job. Not to mention, if you intend to immigrate into the US, you will need that degree to satisfy minimum bar required by US government for employment-based immigration.
Everyone know the story of Steve Jobs inventing the first Apple computer in his garage. He didn’t need to ask bank for money. Today, countless entrepreneurs try their luck on Kickstarter or GoFundMe and if business doesn’t pan-out – that’s OK, try again next time.
If you search for “software engineering risk” you’ll get a bunch of web pages talking about risks to software project schedules. It is indeed an area of concern for technical program managers, but has nothing to do with actual risk to engineers themselves. Engineers suffer a few health issues (not necessarily all of them or at the same time):
- Carpal tunnel – it is a wrist strain injury caused by unnatural position of hands held for extended period of time. Mitigate it by getting a good keyboard, adjusting tilt, lifting table or lowering chair and taking periodic breaks.
- Reduced vision – people don’t go blind, but do lose sharpness of vision due to strain of muscles that control your pupils and lens. You can reduce effects of it by lowering monitor brightness, adjusting distance between eyes and screen, moving eyes off of screen regularly and looking into the distance. Have a regular break to socialize with people in your office and you’ll reduce vision problems and maybe even make a few friends.
- Weight gain – sitting motionless and popping Mount Dew will do the trick. Get some workout, it will help clear your mind and alleviate risk of uncontrolled fat accumulation.
- Depression or even panic attacks – usually caused by a rookie program manager or ambitious boss who wants to change the world but has only one employee – you. Occasional death marches are fine, even necessary to harden your will. If you find yourself constantly stressed – perhaps time to move to a different team.
Let’s contrast these issues to top most serious workplace injuries (according to Liberty Mutual Index)
|Overexertion involving outside sources||23.65%|
|Falls on same level||18.72%|
|Struck by object or equipment||9.42%|
|Falls to lower level||8.99%|
|Other exertions or bodily reactions||6.65%|
|Roadway incidents involving motorized vehicle||4.88%|
|Slip or trip without falling||3.93%|
|Caught in or compressed by equipment or objects||3.48%|
|Repetitive motions involving micro-tasks||2.87%|
|Struck against object or equipment||2.07%|
Software development risks are not even in the table, unless you stretch fast typing on the keyboard as “repetitive motions involving micro-tasks”. You might have a point considering pro StarCraft players are cranking up 300 actions per minute (that’s 5 button clicks per second). Software developers are safely within 15-percentile of the injury seriousness. That’s pretty darn safe.
Influence and reputation
Let’s be honest, when you walk into a coffee shop or relax in a chair by departure gate at the airport and pull out your laptop full of Kubernetes stickers, you are immediately awarded +20 IQ and +5 in handsomeness. If you know what a dumbbell looks likes, at least once a week, make that +10 in handsomeness.
Among general population, geeks or nerds have earned certain stereotype. They are awkward introverts that hack financial institutions for fun. Movies like The Big Bang Theory, The Martian, Social Network and Mr. Robot helped shape the image.
Among friends and family, software developers are well respected. If people start arguing with you, take it up a few notches and connect whatever topic at hand to surface integral calculation. People won’t be able to follow you into the weeds and you’ll win the argument. On a serious note, you will always be the one fixing computers, for free. You will do it not because you can’t say no, but because you are curious yourself. If you reject a repair request it will bother you and you won’t sleep well. Every broken piece of equipment will be a learning opportunity for you.
In my career, I have seen a number of developers wielding more power over people than all the managers below them and a few managers above them in organization chart. Just because you are a developer, it doesn’t mean you will report to a front-line manager forever. That is completely not the case. As you progress in your career, your scope of influence will increase from your immediate team, to a few teams, to an organization and a business unit and so on. With your influence will change which organizational leader you dock under. Your goal is to become an industry icon. When that happens, top leadership of any business will listen to you. Want examples? How about Mark Russinovich? Mark is rather influential within cloud computing industry, but he started as a passionate developer of SysInternals.
It pays good, really good
Let’s pull up Levels.fyi and take a look at a few numbers. You are fresh out of college and you can’t code your way out of wet paper bag yet – congratulations, your starting annual compensation is $150,000. Average promotion velocity is about 1 level every 2 years. If you coast for 10 years without breaking a sweat, you will be making about $300,000 in 10 years. However, if you push hard, you are looking at $500,000 a year in compensation in 10 years, when you are in your early 30-ies.
Working for a reputable company usually includes following benefits:
- Restricted stock awards – you get company stock that vests for 4 or 5 years every quarter. If company is doing great, you are doing great.
- Health insurance – your boss pays for your health insurance and covers your family too. This can be pricey if you have to shoulder it yourself, but big tech companies will happily pay your health instance premiums.
- Paid time off – different companies have different policies, but I’d say that you can take 3 weeks off on your first year on the job and about 6 weeks off in 10 years. All paid, of course.
- 401(k) match – Want to save for retirement? Your boss will help you by matching your contributions. If you put $5,000 – so will your boss. Free money.
- Charity work – you are passionate about helping animals, now you can do it and get extra money from your employer for every hour/dollar you donate.
- Travel – in modern world, travel is a necessity, not a luxury. Be a developer and go see the world, company compliments. You will be pulled in a lot of customer meetings and off-sites, so you will travel. It will be up to you to push back.
Here’s the deal – if you made up your mind after the first paragraph – you got what it takes to be great. Truly awesome software developers don’t care about job outlook, pay, influence or any other aspects. They do consider them, but they are secondary. In fact, truly iconic developers would do their job for free, if only someone fed them pizza and Mount Dew.
If you choose to be a developer, don’t do it for the benefits – do it for the fun. It will be hard to sustain excitement under pressure if all you look for is money. You can keep going if you buy into the problem you are solving and it keeps you up at night even though everyone else, including your boss, sleeps like a baby.
Being a developer is no easy task. You will have to deal with other smart people around you, some people will have egos. This is not unique to developers, but this is how humans, and organizations made of humans work. You will have to compromise and let go of your convictions. You will be wrong, very often. Your technology choices will not be correct and design proposals will have superior alternatives. It is all part of growing so you have to learn to not get attached to technology.
There will be process that drives you nuts. Your boss will ask you to send weekly progress update. You will have to get approval to check-in a change from other people, some of them you will deem incompetent. Don’t reject the process outright, but approach it with an open mind. It may be there for a reason – help improve it.
Developers are people leaders too. Despite your primary focus being the source code, you will have to help other people around you grow. It will not be very relevant during early years of your career, but will become inevitable over time. You will manage people without a manager title and you will run projects without being a program manager.
If I haven’t scared you yet, good luck on your journey! When you feel ready for epic challenges – drop me a message on LinkedIn, I am hiring.