From Bits to Gigs - the Penny Pincher's Guide to a Software Development Career
Why Get Into the Computer thing
Do you remember Betamax? Chances are that you've never even heard of it, but it was the largest competitor to VHS prior to - according to one of the greatest urban legends of our time - the adoption of VHS by the porn industry. Betamax was a tech marvel in the 70's and 80's - the ability to watch any recording at any time instead of having to wait for TV to air it. It promised a world of possibility for independent film creators and brought self-expression to the masses.
And yet, today, Beta is little more than the distant great-uncle of Blue-Ray, which is possibly the last physical media storage medium we will know. The median age of people on Earth is 30.9, meaning that most of us were not even in first grade when the first successful laser media disc was released (the DVD in 1996). We might have memories of film reels and magnetic tapes from our childhood, but more than half of humanity entered the workforce in a world where digital video was the norm.
Social Media and the Internet have fully transformed the world, and that is only likely to accelerate with the development of artificial intelligence, machine learning, robotic process automation and more. Our dreams, both personal and professional have become ever more intertwined with computers - and by joining a computer science career, you stand only to gain an edge in accomplishing your dreams.
Why Software Development is Unique
Software Development gives you the opportunity to gain a high-earning job in any industry. Whether you enjoy stock trading, social work, teaching, art, music, engineering - all these fields have a strong need for effective and useful software. A career in Software Engineering or Computer Science gives you an easy and well-paid doorway into your field. As long as you also enjoy software engineering, you will always be able to enter your desired field.
And although there is plenty of room for criticism in tech and software, including the underrepresentation of women and minorities, ageism, long work hours, and demanding deadlines, there are many amazing advantages to beginning a career in software.
Unlike the majority of highly-skilled positions, software is remarkably egalitarian. You may have an easier time entering your desired company with a prestigious degree, but being self-taught or having an alternate education path is by no means an impediment to entering the field. Interior design, architecture, science and engineering usually require advanced degrees, prohibitive certifications, or expensive equipment to even gain a toe in the door. Software engineering, by contrast, generally looks at what you've built; interviews stringently analyze what you know, not what papers you walk into the room with.
This egalitarianism translates into the workplace, with generally flatter structures and frequent communication with managers and superiors. The chain of command is much shorter. This allows people to rise higher based on performance and ability.
Software development is also quite lucrative. With an average income of 90K USD/year, salaried software developers have some of the highest starting salaries which grow throughout the course of your career. This early high earning potential translates easily to high savings and high investments for many, setting up an early start to a stable financial life - while enjoying flexibility in industry, employment, and safe working conditions.
No computer? No problem.
While having a computer that is capable of development, not everyone has access to one or the ability to acquire one. A good bet would be to talk to any local businesses or schools that might be getting rid of old equipment. People often upgrade their computer systems while they are still perfectly capable of running development software. Craigslist, Facebook Marketplace, pawn shops, eBay - the list is endless. You can follow simple online tutorials to boot Ubuntu for free on the computer and get it set up for development.
If instead you really don't have the ability to get your own computer - due to lack of space, lack of affordable options, or simply the inability to commute to where you can get the computer, you can use online IDEs to get the job done. Services like codeanywhere.com allow you to run a development environment through your browser for as little as $2.50/month, giving you the ability to learn coding on shared computers, even if you can't set up your own computer.
With all these options, the physical limitations of learning how to code are easy to handle. The next step is: where can you learn how to code?
What to learn?
It's easy to get lost in the weeds when starting out. The most important thing to keep in mind is that you want to learn concepts, not just a language. To this end, while it is important to start with a well-supported language, the reason to start with a well-supported language is to have ease of access to learning materials. There will be no long-term effect to your employability if you choose to learn any of the most popular languages.
General Programming Knowledge
What about HTML/CSS? That's what websites are made of.
1. HTML are the words you use to build a sentence;
2. CSS is the grammar that gives the sentence meaning and makes words readable;
Where to learn?
There is a romanticized view of the self-taught developer. They were taking apart calculators in elementary school, had developed their first game by the age of 8 and founded seven successful startups in high school. While these people do exist - and most people in the software industry know at least one or two people who could match that description - the days where you software was literally child's play are long gone. Landing a software development job nowadays usually requires at least some knowledge of algorithms, proper coding conventions, and knowledge of development outside of simply coding. Even self-taught software developers must gain exposure to all of these concepts through self-study. I do not recommend that you just go at it alone.
Luckily, there is an abundance of free resources online geared directly to serve people who don't have the resources to take a course, or who simply need to learn without necessarily earning a qualification. The quality of these materials is quite high. Some free resources include:
I have not included things like CodeAcademy, because they are not focused on teaching fundamentals. In order to truly gain mastery in the craft, and not the tool, the courses I linked use the programming language to teach you the concepts of software development, NOT simply how use a programming language. As you advance in your career, these early bases will become more advantageous, as it is nearly impossible to have a long-lived career without the ability to learn other languages quickly.
A good way to understand this is that you are learning to add, not to input numbers into a calculator to get the answer.
Pick a project
If you don't have a computer science degree, companies will want to see the work you have done when applying for a job. While you can likely use the projects you developed in the courses linked above, you can put yourself at an exceptional advantage by developing your own project from scratch. One of the biggest hurdles to clear when applying for jobs is to show your capacity for self-management and drive. Completing a course on its own does show these, but as a self-improvement drive. Developing your own software project shows that you can deliver results, which is the single most important element in a software development career.
The best projects are the result of passion. The specifics of the project don't matter as much; a project that you yourself will find useful or fun will be a much better portfolio piece than a boilerplate project. Do you surf several different sites to find new music? Maybe a website that collects your favorite artists. Do you like to do photography? You could develop a website to sell your photography.
This should be a project that can be continuously developed so you can always keep improving your portfolio piece.
Apply to your first job - or don't.
Now that you have the knowledge you need and a portfolio piece to prove it, it's time to start finding your jobs. For people new to Software development, I highly recommend going through a recruiter; you can find them easily on LinkedIn. They will be able to help you prepare for your interview by letting you know what to expect going in. Another good resource is the book "Cracking the Coding Interview."
One piece of advice I would offer is to not go for your dream job as your first interview. Get one or two under your belt, so when you do show up for that interview, you are mentally prepared and have gathered some experience applying. I do have another post on where to find remote work, but if possible I would advise your first role be in person if it is possible. This will allow you to have easier access to other people so that you learn workplace dynamics more quickly and with a social support network, even if it is only a work network.
First computer setup
Now we get into the tools. If you are working as a freelancer, you will need to have all your own equipment. Your workplace may also not provide everything you need. Here is my list if essentials to set up as a freelancer
WebCam - Having a face sets you up to be taken more seriously on remote meetings. Regardless of whether you are doing remote work or not, zoom meetings are unavoidable in the software world, and a good camera will ensure you are putting your best face forward.
Headset - Again, a quality headset will improve your calls immeasurably. There is nothing worse than having to repeat yourself or shout into a crappy laptop computer microphone.
Keyboard - Laptop keyboards are not meant for high use. An external keyboard will simplify your life by providing a more comfortable typing experience, reduced shoulder strain, and fewer errors when typing.
Mouse - Trackpads work for some people, but again, laptop trackpads are not meant for the type of use a software engineer might do. An external mouse will save your life.
Computer - Eventually, you will need your own computer for work. Whatever you do, do NOT use your work comptuer for personal items. If or when your workplace and you part ways, your employer owns all the data on that computer. You risk losing important documents if you have to hand over your equipment on the spot.
Screens - A second monitor is a minimum additional item that will save your sanity. Having to switch back and forth to read over documentation and type is enough to make anyone go bonkers - especially new software engineers.
Ethernet - While wireless internet is incredibly convenient, the ubiquity of remote meetings means that more often than not, one person will encounter connectivity issues. The easiest way to fix this is to use an ethernet connection.
Send me money.
You kind of owe me now.