In theory, there is no difference between theory and practice. But, in practice there is!Jan L. A. van de Snepscheut
I am often asked if you need a CS degree to become a software developer. I usually respond “It helps”. But the truth is I don’t have a CS degree and they were a new thing when I got into software development. The first CS courses at universities came into existence in the early 1970s. For 30 years or more, you became a software developer when your employer purchased a new computer, and you were considered smart enough to program it.
Think about this for a moment: In 1938 there was a single programmer. His name: Alan Turing. There was also only one computer in the world: The Bombe. Very quickly there came to be a few more programmers. Perhaps, a dozen or so. The programmers worked out programs on paper with pencils. After toiling for hours over their machine code, they entered the program into the machine by plugging in patch cords (wires). There was no IDE, no video output, and no keyboard. Also, if their programs had even the tiniest bug in it, people could die. There was a war going on after all and their work was to decrypt the German Enigma code used in wireless transmissions. The transmissions were German military reports and orders. This information was of the highest importance to the Allies, and Turing and his crew had the job of decrypting the transmissions and converting the German orders to English. Once computers became common in large corporations, these businesses needed programmers. Machines back then came with a manual and programming guide and not much else. Since there were no CS programs the few educated computer programmers came out of the Mathematics and Physics departments of a few major universities around the world. Businesses that found themselves in need of software developers usually looked to their current employees. If they thought you were bright enough and could handle the job, you were reassigned to the computer room as the new programmer.
According to DAXX.Com In 2019 there were 26.4 million however, some estimates claim as many as 80-100 million developers exist today. The world short on software developer, and we keep adding more every year. In fact we double the number of developers every five years!
This means that software development is a growing field and the number of developers needed will only raise for the foreseeable future. This has a major impact on software however, with half the software developers in the world having less than five years of experience, a much greater focus must be placed on software testing. Many of these developers have university degrees though, not always in CS. Many more developers are self-taught, like me, and most my age.
I recently read a statistic that claimed only one out of every two hundred programmers interviewed could actually write code. Fewer yet could solve the kinds of problems that arise in software development. This statistic is only slightly better for CS grads. So how do you hire programmers if you can expect that many simply can’t program? Most companies resort to whiteboard interviews where they ask a candidate to solve a problem on the board. Some give the candidate a small project to complete in a few days or week. Others, batter the candidate with all sorts of computer science questions. Funny thing is, however, many of the candidates who have CS degrees can answer the CS question better than a self-taught candidate. Yet often, it is the self-taught candidate who performs better on the job!
I believe there are two major reasons for this. First, a self-taught candidate may lack formal training but he is motivated to learn, and being self-taught has demonstrated the ability and desire to learn. Many CS students are simply going to school and taking the courses their parents or advisers tell them too. They may lack a true passion for software development. The self-taught developer has proven his passion but lacks the formalities. All things aside, formalities are indeed important in some development roles. However, there is also an advantage to being self-taught. First and foremost, you have already demonstrated your drive and passion.
“The advantage of some ignorance; it leaves some room for creativity. But sometimes it feels like ignorance is endemic in this industry that people are unaware of things and wheels are constantly being reinvented with pointy corners.”Peter Seibel, Coders at Work
Most Good programmers would program even if they weren’t getting paid for it!
To become a self-taught developer you need to first learn a programming language. Then practice every single day. Even if hangman is all you write some days, write code every day! It is the repetition that will ground your understanding and implant it in your head.
What you should Know
Next, get a good book on algorithms and learn everything you can about software complexity. Practice these algorithms until you can write them from scratch without the need for a book or sample code. Do not just copy from the books. Write it in your own style. Over, and Over again!
Learn some computer history and seek to understand how the languages and machines you use evolved from those that came before it. The benefits of this are often under-estimated. However, as you learn about the technologies that came before those used today, you will gain insight into why certain languages made certain choices. This insight will help you determine if a particular language is right for your current or upcoming projects.
Continually survey other languages and frameworks. Complete a couple of small projects with them.
Create a portfolio online of your work!
Pick one language and technology to learn intimately, then gain a cursory knowledge of a few others. The best developers will know more than one language. While some hiring managers believe that a developer should specialize in a single technology, doing so is like wearing blinders in a road race. You will only see what is in front of you. If you only have a hammer in your toolbox, everything will look like a nail! The more tools you know, the better prepared you will be to choose the right one for your projects.
Once you can write binary search, red-black trees, depth-first, and breath first algorithms, and you have a good understanding of your language of choice, learn as many problem-solving techniques as possible.
Even if it takes you months to find a job, keep programming every day, build your own projects, and keep learning about your chosen craft. Eventually, you’ll find a job!
Also, don’t forget that a software developer needs to know more than just coding. Read a few books on software management, Agile and Scrum processes, and supporting tools such a VCS (Version Control Systems. i.e.: Git/Mercurial, etc.)and CI/CD systems.
Web and mobile development (especially web) are the easiest development fields to break into. You can start by signing up on the various freelance portals on the web.
Programming is fun! Beating your head against the wall in frustration is normal for most of us. However, the longer you program, the less you experience such roadblocks. And, when you do, it is on harder problems. So don’t get discouraged, keep at it! And Keep Learning!
My friends over at www.developersforhire.com have some additional information you may find helpful if you want to become a freelancer. Their information is pretty good and well worth the read. You can find it at https://www.developersforhire.com/freelance-programmer