Kickstarting your Software Career, Part 1
Your journey to become a scaled producer in the Information Age starts today.
It is time for you to work in one of the highest performing field out there. Your ability to execute and solve problems will give you an income that aggressively scales with the results you create. Combining your knowledge with the greatest human invention ever, the General Purpose Computer, will create incredible value where none existed before. The field has been decades in the works and yet still grows exponentially every year. It is my goal to guide you to tap this market and provide yourself the skillset for either a career or a side hustle and reap the rewards.
At a higher level Software Programming is the ability to record instructions that will be executed by a computer to do something. This something could be a simple calculator, an interactive website, or a program that automatically brews your coffee at a certain time. At a lower level, you are moving memory and data around millions, if not billions of times per second (known as the clock cycle) around the computer and transforming it in this process to accomplish these goals.
Early computer programs in the 60s and 70s were you directly telling the CPU what to do in painstaking detail. Abstraction has allowed the field to transform from resembling electrical engineering and into its own field of Software Programming. No longer is intense knowledge of electrical hardware required to write a program, all you need now is a text editor and built in tools to run them! These abstractions allowed us to stop managing individual bits and bytes of data and moving them around the registers (places where you can perform operations on data) back and forth, and instead write far more complex software (think of this as a force multiplier).
This has gone so well that we can now program almost any language directly in the internet browser for free! Just try opening up https://replit.com/ and create a free account, then select Python as a language, and when you get to the text editor, select an example and click the run button (if you are lost, follow this). You have now just run your first slice of code! The barrier to entry has never been easier, and yet the opportunity has never been higher.
Motivation
So now we understand where the field comes from, you must understand your motivation for why you want to do this. The best trait for success I find in software engineers are a curiosity about how things operate, work, and can be used, combined with the ability to problem solve complex topics. If you have interest in these two things, then you will be rewarded continuously in your journey. Software Programming is primarily an exercise in how well you can use your brain effectively.
If you are in it for just the money, then that is also fine, but beware that burnout can happen over the long term. I personally think it is best to focus on the creative aspects of the job and let the money happen as a result of your work. This isn’t to say you shouldn’t focus on the money, rather satisfaction of work is 1A, while money is 1B, and these two flow hand in hand symbiotically. Effectively, enjoy your success in your job and the money will flow naturally. The value of your results should be self-evident as a producer. You can point to the fruits of your labor easily as justification. This makes your journey much easier, and frankly more rewarding. Saying “I built this and people love it” is an incredible mindset to ensure long term mental wellness throughout a long career.
Areas of study
Before we dive into how to start building your software career, you should be aware of the many specialties are available to you as a career option. Keep these in the back of your mind as you start your journey and use them to plan out your path. There are no irreversible steps, so feel free to experiment and swap around as you grow your skills early on. As long as your maintain a strong grasp of the main contents of your field, you have room to grow.
Programming has branched into so many highly niche fields that one end might have minimal recognition to another end at the furthest depths of knowledge. However, with a solid programming foundation almost any area is available as long as you have the ability to self-study. This will help avoid burnout or allow you to jump into an explosive new field. John Carmack, the famous creator of Doom, took his two decades of programming skills from Video Game development to be the CTO at Oculus doing VR for 6 years, and now is focusing his work on Artificial Intelligence in his 50s.
Since you are just getting started in the field, focus on your core programming skills and let those take you to where your interests are. Programming is entirely knowledge driven, therefore as long as your mind stays sharp you can age like fine wine. It is never too late to shift gears as long as you stay curious. Conversely, it is never too late to get started. Some of the best programmers I know have original backgrounds completely antithetical to programming. Programming is a unique intersection of an art verses a science and that helps keep the mind fresh.
Here are some areas of study to look forward to in your journey:
Front End Development
This work entails development on user interfaces (UI) such as web sites (HTML) or mobile apps (Android, iPhone, Desktop, Tablets).
You like creating interactive programs that create a strong user experience (UX) to accomplish tasks.
Anytime you have a pleasant experience interacting with a computer, you can thank these people.
Back End Development
This work entails programs that are not “seen”, but instead used heavily through interfaces such as Application Programming Interfaces (API).
For most user applications out there, there is a back end that does a bulk of critical business logic processing make the solution work.
Backends also can talk between each other, creating large value from combining systems and data.
Database Engineer
You like creating and designing how data is supposed to be stored and relate to each other.
This involves translating Domain models into relational data that will power any application needed to accomplish business objectives.
You also need to manage and maintain performance levels and storage requirements to keep the database running.
Your ability create complex data queries will result provide value to consumers.
Full Stack Developer
You work on the front end, the backend, and the database layer.
Obviously the more skills you have, the more valuable you are. You can build an entire feature top to bottom by yourself.
Hard role to get initially. It is better to focus on front end or back end and then gradually transition to a full stack role as experience grows if the programming languages are different.
Machine Learning / AI
From Wikipedia, ”Machine learning is the study of computer algorithms that improve automatically through experience and by the use of data.[1] It is seen as a part of artificial intelligence. Machine learning algorithms build a model based on sample data, known as "training data", in order to make predictions or decisions without being explicitly programmed to do so.[2] Machine learning algorithms are used in a wide variety of applications, such as in medicine, email filtering, and computer vision, where it is difficult or unfeasible to develop conventional algorithms to perform the needed tasks.[3]”
Crypto Engineer
Crypto was born out of the ability to use mathematics (called cryptology) to strengthen and obscure information. This allowed information to not be tampered with in the hands of bad actors as long as your maintain your hold of the key. Incidentally, this enabled the creation Cryptocurrencies as it now was possible to send money over the internet, in plain sight, and have multiple people correctly verify that the transaction was valid and not tampered with.
Work either directly on the BlockChain’s code, or in Smart Contracts that live on the chain, or through Decentralized Applications (dApps).
A field with gigantic growth ahead of it, especially in Decentralized Finance and Decentralized Applications.
Data Analyst
You like to look at all the data and transform it into more useful forms to make business decisions with them.
Also involves creating data visualization to see patterns in the information.
Developer Operations (DevOps)
You like to deploy software to customers, troubleshoot environment problems, and automate everything so you can do less work.
Strong growth due to development of SaaS and Cloud Computing.
Virtual Reality
Large growth potential as the hardware technology improves and becomes smaller, faster, and more powerful.
Video Games Developer
A really tough field to work in. You lose the salary, benefits, and work environment of a typical software career to work large amounts of overtime on Salary and sleep under your desk.
Do this on the side for fun if you are really into it, otherwise beware.
Software Test Engineer
Tests the software built by engineers through a variety of different methods to ensure quality is maintained of the released product.
Testing can be done manually and through software. Manual testing is a dying art in an automation world, so ensure you can program tests.
Pays less than a software engineer, but also easier to obtain. Sometimes a good stepping stone in a career depending on your path.
Initial education
To start your education depends on where you are at in your life. If you are a recent high school graduate, then I would recommend going to a college level program. While the field is the most tolerant to people who do not have degrees, you need to have an excellent skill set to prove your worth.
Speaking of high school, if you have the ability to take AP classes, especially in the math and science areas, please do! If you pass tests with high grades then you can opt out of many entry level courses in college. This, along with online summer classes, personally saved me from an extra semester in college and therefore about 8 months of lost wages. Each passed class is thousands of dollars saved on your bill (plus interest) thanks to your local education system.
College
While I have many criticisms of higher education in the United States, their Engineering departments are still the best in the world when it comes to education.
First things first is the cost of education. Be wary of taking on large amount of students loans, especially for private schools, as college has exploded in costs recently and having debt limits your short to medium term upside after you graduate. That said, if you gain solid employment after your degree, then the debt will most likely be worth it. Ensure you run the numbers of expected salary upon graduation verses your student loans interest rates and that you are comfortable with the choice. You just need to make a strongly informed decision based on data to make sure you are doing the best thing for yourself long term.
Assuming that you have to pay for college for yourself, and assuming you live in the United States, I would recommend finding a medium to large state college (for cheaper in state tuition) that has a solid Computer Science/Engineering department. Ideally the school is a Land Grant one, as that means they place a strong focus on Engineering since their was their original mission. Most state colleges have automatic partial scholarships depending on your High School GPA, so make sure you get good grades! If by some means you get a full scholarship to a school then you need to highly consider that, even if the program or school isn’t perfect. Think long and hard about this as debt is a massive weight when you graduate and start the payment timer.
One thing to note, sometimes the Computer Science is not its own department at your local University, but rolled into a focused field of study in the Math department or some other place. Take caution when this happens, as it means that Computer Science is not important enough to have its own department, or be in the College of Engineering. If they don’t have a college or department of engineering, be very wary also. As always, DYOR. Most Colleges have recognized the importance of the field and are building their own new departments and facilities, but if you go to a smaller school then you run this risk.
Additionally, Note how long their expected time to complete their course work is. This might surprise some people, but most engineering programs can run 4.5, or even 5 years depending on if you take summers classes or test out of things. This is an entire year or longer of lost wages and an extra year of tuition! Do not get blindsided by this!
Additionally, take note of how to gain entry to the department and if it seems feasible. Some programs make you apply after a year after taking general engineering pre-course work, some auto enroll you based upon GPA, it really depends on who runs the department. The point I am trying to make here is do not mess this part up. By not gaining entry to your department on time you will take on unneeded debt and waste your time.
Curriculum
If you want a solid reference point for curriculum, then I would check out any large, successful program’s web site. For example, University of Illinois. Notable curriculum you should look for in any program (use this to look up topics covered):
CS 124 Introduction to Computer Science I
CS 128 Introduction to Computer Science II
CS 173 Discrete Structures
CS 210 Ethical and Professional Issues in CS or CS 211 Ethical and Professional Conduct
CS 225 Data Structure and Software Principles
CS 233 Computer Architecture
CS 241 System Programming
CS 421 Programming Languages and Compilers
This wasn’t listed, but some form of computer networking course is useful.
Various interesting technical electives in areas you want to focus on (Ex: Machine Learning, Cloud, Cryptology, etc..)
Capstone/Large Team Project
Feel free to explore and look up teachers, textbooks, topic covered to gain a true understanding. Another example would be from Perdue University.
Self Study
This is not my area of expertise for initial employment, but if you are looking at a part time self study pace, there are plenty of free resources online to consume. Udemy or Pluralsight have tons of videos on multiple topics (just wait for a sale, they are frequent), plus YouTube is packed with free content. Pick some beginner training classes and finish them fully and then let your curiosity guide you based upon what kind of career type you are looking for. I would also suggest trying to code weekly projects and carrying them to completion to get experience “delivering” products and use those as interview topics. A good beginner language set to pick from would be the following: Python, JavaScript, or Java. If you have a strong desire towards an exusting langugate them I recommened also following that to keep the cursiouslty going.One key step in learning programming is getting rid of the initial hesitancy towards starting work and just start hacking and getting comfortable working in a language and a programming environment.
This is a much more hands on approach verse a rigorous theoretical one a university education would need. You probably wont hit it out of the park for your first job, but you will have a job that is probably better than what you had before. The goal is to land that job without going through the collegiate experience. Once you break that barrier down you can now side step that question when you try switching jobs after producing enough to leave and get that promotion or big raise. It is much harder to get a first job without a degree than to switch jobs after working in the industry for a year. I encourage anyone who has gone this path to post in the comments with their hands on experience with this.
Surveying the industry for jobs
Now that you have the basic skills, you can now look around for employment opportunities. A common quote heard is in the industry is, “Tech eats everything”. Tech is the biggest disrupter in the worldwide economy. Anything that is repeatable through some sort of algorithm is in danger of a computer taking over (Yes, that even includes some coding jobs, how meta!). Think about how many corporate drones are just button pushers and realize you can write software to save that business money, and put the difference in your pocket. Note: this sounds cruel, but the former corporate America 30 year pension plan to retirement has been dead for a long time. Performance based results are the key towards financial freedom in the new era.
Industries to focus on
Working for a tech company makes you a tech employee but your actual work will be done in an industry thanks to the cross cutting nature of technology.
In general you want to focus on “hot” industries since the more your companies grows revenue in that area, the higher change you have for raises and bonuses and opportunities (no more BS of “we don’t have the money for you”. They ALWAYS have the money).
For example, Healthcare in the United States will continue to grow at an aggressive rate thanks to the rise in costs associated with it. If your company starts taking part of the growth revenue, you can also reap the rewards. Hospitals have money to spend and that could be yours!
A non-exhaustive list of growth industries:
Crypto
The financial revolution is coming and it will be powered by crypto and DeFi. Take the entire worth of our current traditional financial system and then apply that to DeFi and then scale it out even higher over the internet.
Cloud Computing
B2B based revenue from businesses cutting costs creates a strong growth area.
Security
Stronger and cheaper computing power combined with more internet access correlates positively with companies being attacked, and therefore they will need proper defense mechanism against bad actors. Ransomware attacks are just getting started.
Healthcare
Detailed above.
Automation / Robotic process automation (RPA)
Computers are cheaper cost than humans and make less mistakes. Businesses will pay you to save them money.
Software as a Service (Saas)
Low overheard of deployment + subscription revenue means lots of money to capture against traditional lump sum software buys.
Scales incredibly well for higher demand.
Big Data / Data Analytics
Information is the new oil. It needs to be mined, refined, and then sold. To find the signal in the noise will become incredible important as total data generated per years grows aggressively.
Companies
Generally speaking, if you can land a spot at a FAANG company or large Silicon Valley tech firm, you should most likely take it, even if those companies luster has started wearing due to Silicon Valley’s demise from Remote Employment. Having these large, established company names on your resume will get you far in life as far as corporate America is concerned, since modern hiring practices are lazy. Resumes and traditional employment are on the long term downtrend but they are still important early on for young careers (production is the new resume).
Types of places to avoid
Legacy companies that are not “techy” in atmosphere, or only have a tech department because they are forced to. You will be working a corporate style job, (wear a suit, lunch isn’t paid, no flexible work hours, etc…), when you could have the stereotypical cushy tech job (Watch Silicon Valley if you know what I mean).
Example: Banks, IBM, DOW Jones companies
Consulting tech\business firms
My experience with these companies is that they try to maximize billable hours while also delivering garbage software.
Companies that have frequent layoffs
Cheap new employees are the easiest to layoff. Autist move is to examine their finances relative to their last layoff and see if things improved since it to see if it is safe.
Don’t be afraid to ask your potential employer why they felt layoffs were needed and see their BS.
Terrible C-Suite executives
Emphasis on examining the Chief Technology Officer and seeing if they “get it”, or if they are a cookie cutter out of touch business man (or woman). This person can make or break a tech company, especially startups. Crude comparison: Steve Ballmer vs Satya Nadella
Other considerations
Ownership structure of company
Private Equity (PE), VC funded Startups, S&P 500, etc… all have differing goals for the company. Find out what these are and prioritize them if good, and caution if they do not match your career path. PE may try to cut costs for a sale, VC companies are strapped for cash and demand your time instead of money initially. Publicly traded company care mostly about making money over most things.
Glassdoor reviews
I always use Glassdoor to review companies hiring standards and their workplace life.
Take negative reviews with a grain of salt, but also look for their judgements on management and ensure nothing egregious is happening. Fired employees will almost always say bad things so try to focus on current employees of the company.
Keep in mind these reviews also get astroturfed by the company HR. Avoid anything generic or a review that can’t list any criticism, they’re either a sycophant or a bot.
Now you have an initial idea for what the industry is like and how to develop the skills needed and what to look for in a company, we will continue this topic in Part 2 of this guide. We will go over the various types of employment, how to get hired, and how to navigate your company and get your first promotion and beyond!
I will answer questions in the comments and I am available on Twitter (@bowtiedcrocodile) and through email at bowtiedcrocodile@protonmail.com.
Kickstarting your Software Career, Part 1
This is absolutely top level content. Amazing write up. Extremely concise and actionable. I’ll be looking forward to further posts because this was simply fantastic.
nice work!