The path from no background to working in software development.
The target audience for this are people in the military that are interested in working in tech, but don't know how to program. I made these guides during my transition from the Army to Software Development. The more I learn, the more I'll update. I embedded links, documents, and videos. I encourage you to click on those to ensure that you understand the topic in its breadth and depth. This is a work in progress so feel free to make send me questions, comments, and recommendations. Everything I learned transitioning from the Army to Software Development
There are so many incredible resources out there to help transition people into tech. But, the enormity of resources can give people "paralysis by analysis" as they try to decide which option to pick. This document below is meant to answer questions like:
Here is a good intro video from Andy Sterkowitz on some of the topics I will cover below.
There's really no wrong way to learn the fundamentals of programming. Just pick one and stick with it. However, I recommend that you focus on doing and ensure that you don't get stuck in "tutorial hell." Tutorial Hell is what happens when you passively watch tutorials and don't learn much, most likely because you aren't learning by doing, and will iteratively start and stop tutorials in perpetuity.
There are many exceptional intro programming courses for sale on Udemy such as Beginning C++ Programming - From Beginner to Beyond or Mastering 4 Critical SKILLS using C++ 17 by Dr. Moustafa Saad Ibrahim.
The first course focuses on long instruction and limited practice, while the second is short on instruction and focused on practice and problem solving. I like Dr. Moustafa's course the most out of all intro courses since it provides the best problem solving foundation. He also provides follow-up courses on data structures, algorithms, coding interviews, and runs competitive programming instruction.
I recommend Codewars to all beginners for daily practice. HackerRank is a good option if you're still trying to learn the syntax of a language. Codewars is a free website that will give you problems to solve based on your skill level and the language you want to get better at. They also have solutions posted and a forum to discuss stuff. It’s also fun for kids because you get a “rank” and it’s fun to level up.
Practicing a little bit every day is better than practicing a lot not very often.
I recommend setting aside 5x60 minutes sessions a week. This is my methodology for training:
You need to use sites to train your problem-solving and programming language-specific skills:
If you can afford it, Abdul Bari's Mastering Data Structures & Algorithms using C and C++ is an incredible combo with Dr Moustafa Saad Ibrahim's data structures, algorithms part 1 and part 2, and course for technical interview problems. Abdul Bari's course provides in-depth instruction with little problem solving, while Dr Moustafa's has concise instruction and lots of problem solving.
Another option is getting Grokking Algorithms by Aditya Bhargava and pairing that with Structy. The book is illustrated, programmed in Python, and intuitive. Structy provides video instruction and an environment to code DSA in Python, JavaScript, and C++. Structy is a paid subscription by my favorite programming instructor. The website has videos, guides, lets you practice DSA problems, and has solutions all in one place. I found it very worth it. However, there is only one problem per topic so it lacks the depth of some of the other options.
There are plenty of free resources online to learn DSA. You can get a free account on Structy and then just YouTube/Google the section title for free resources. I needed the easy access, accountability, and structure of the book and course to learn.
I think DSAs should be taught in a separate course from intro to programming. I think people should be comfortable with the fundamentals of programming in one language before they give bandwidth to DSA.
If you want a follow-up DSA text, or just want a more robust reference, then I recommend the Algorithms textbook.
Thinking like a programmer is the most important part of learning to program. That’s why no matter what route you take in programming, you’ll learn the skills of a programmer. That's because memorizing programming language syntax does not make you a programmer; applying the problem-solving mindset is what makes you a programmer.
I like Hack Reactor's problem solving methodology. I've added my own additions in parentheses:
I also add the following portions when I'm studying:
Andy Harris has a long, but thorough, video on this topic. You can also search for other videos on the topic. Don't feel compelled to watch the video; you can always come back to it.
I had never read this website, until I made this document, but they say the same thing I just did.
You need to learn how to effectively search for the answer to your questions. The sum of human knowledge is at your fingertips, via a phone or computer; you just need to know how to sort and analyze relevant information. Being good at googling is a skill you should develop. You should always see what the best or most recommended way to do something is. Whether you’re buying a car, looking at how to learn a programming language, or solving a coding problem at an interview, it’s all the same problem-solving skill.
There are different ways of using Google search to its full potential. I like to use Google to search Reddit and Quora for the answers I'm looking for. Adding "Reddit" or "Quora" to your search terms, and looking for the most recent posts with the most discussion, will usually filter out the spam. The most upvoted answers are usually the best. The dissenting opinions are also important to understand.
Most of my search results on any given day are probably "best ______ Reddit" or "best ______ Quora."
Continue to develop your problem-solving skills, and study follow-on topics that interest you or that you want to work in.
I recommend using Teach Yourself CS if you are a self-taught programmer.
Programming is just like any other skill. You're only good at what you repeatedly do. Find what works best for you to understand a topic. You should use as many resources as it takes to find the best way to make a topic click for you. You can register for online courses, watch YouTube videos, get textbooks, read forums, etc.
You can get ideas on what to study from roadmaps like roadmap.sh until you know what you're doing. I also like the Open Source Computer Science Bachelors for ideas on what I should study. I disagree with how OSCS requires discrete math BEFORE data structures and algorithms. Math like discrete math and linear algebra are great to study once you're ready to do more than CRUD operations.
AVOID PASSIVE "LEARNING" - This is one of the most common mistakes people make when they try to learn to program. You should spend more time "doing" than passively learning how to do something. Usually spending ≤30% of your time reading/watching and ≥70% coding.
Here are two videos on mistakes beginners make. The first is from Aaron Jack and the second is a video from William Lin on competitive programming, but the principles still apply.
Here are some of my favorite content producers:
Once you learn your first programming language, you’ll find that you need to learn more programming languages because you need better-suited tools for the tasks you're trying to accomplish. Just remember that specialization is more important, will get you better paid, and will make you a better programmer. You should have one or two languages you are an expert at, and then one or two that you are familiar with. I recommend learning the following languages so that you’re well-rounded:
You'll need a more performant programming language if you need to do work that requires serious performance or memory management. If you don't know what you should learn, I recommend that you learn C++. It is widely applicable, widely supported, and has a vast ecosystem of resources for learning it. If you're interested in competitive programming, then I especially recommend C++. At this point, you’ll have already learned one or two programming languages, so picking up additional ones will be much easier for you.
I prefer statically typed and compiled languages that offer access to low-level operations and resource management. I think the greatest combination of languages to get the ability to do the most while knowing the least amount of languages is C++, C# through .Net, TypeScript rather than JavaScript, and Python.
There's really no best way to learn software development. It’s a wide field, with tons of sub-fields, and a lot of information. Here are some important tips I’ve found:
I recommend just using a free flagship IDE like Visual Studio Community or XCode for Apple until you know enough to move on. If I'm not using Visual Studio Community, I like to use Visual Studio Code with a whole host of extensions such as these.
Use repl.it to practice programming if you're intimidated by setting up a text editor or integrated development environment.
The intro material you choose will give you instructions on what they recommend to do for setup. Here is a list of common text editors and integrated development environments (IDEs).
If you have smaller kids, then I recommend getting them to try the recommendations below. You can graduate them to the recommendations above when they've shown interest and seem ready. The tough part of teaching kids is keeping them engaged and focused on one task for a set period of time. These websites try to make the learning process fun for kids. So, I think they are worth a shot. But, they don't teach actual coding, so they will eventually have to switch to something like the above recommendations. Programming involves sitting at a computer and problem-solving for extended periods of time. There's really no way around that, and some kids may not be into that. Teenagers may be ready to just jump into the recommendations above, but you can have them try the suggestions below to gauge their interest.
1. Software Development: Develop and maintain software products. This field is usually a money maker for companies, so it is treated well by corporate leadership. Software developers are typically highly paid and their roles are resistant to employment downturns. However, this career requires constant study and improvement to stay on top of trends. Not every company has software engineers, but the field is growing exponentially, and there is a significant demand for talent.
2. Information Technology: A support role that ensures the electronic “plumbing” of a company, like the network, remains operational. IT is often seen as a "cost" depending on the company culture. In companies that do not value IT, compensation may be lower. Unlike software development, every company has IT needs. However, this field has somewhat stagnated in recent years.
3. Cybersecurity: Protecting a company's network from infiltration (blue team) or testing defenses by attempting to break in (red team). Cybersecurity roles usually offer higher pay than IT since it is a subspecialty requiring additional knowledge. Not all companies have dedicated cybersecurity teams, and some only prioritize it after experiencing an attack. Despite this, cybersecurity is a rapidly growing field with an increasing demand for talent.
Here is a general career roadmap in the industry.
You'll eventually need to figure out what field of computer science you want to work in. This is important because specialization is what gets you paid, but there are countless sub-fields, programming tools/languages, companies, etc. I recommend looking up the various fields and finding out what interests you. In the picture below, there are countless areas of specialization in each job title.
If you don't know what to pick, you can just apply to a wide breadth of jobs and take whatever you get. You can worry about specialization after you figure out what you do and don't like at your first job.
For jobs in computer science fields, the most important things are:
You don't need a degree in computer science, IT, or cyber to get into those fields. The degree, and some certs, will matter most when you're looking for your first role in the industry. The degree will help you get your foot in the door, make you more competitive than your peers, probably give you relevant skills, and teach you “how to learn” and how you learn best. Getting a degree is great and makes you more competitive, but isn’t a requirement.
Once you learn how to program, it’ll take you about 3-6 months, if you're dedicated, to learn data structures and algorithms well enough to pass “hard” level problems on LeetCode, which is what the MAANG companies require. If you want a regular web development job, you won’t even need to master data structures and algorithms. You could be employable after learning how to program with 6-12 months of practice. Some companies are willing to hire beginners and train them as junior developers, so you might get a job quickly after learning how to program.
The key thing to know is that in these fields, what pays is experience. The better you are at your job, no matter what field, the more you’ll make. The top-level IT professionals make just as much, if not more, than software engineers. The important thing is to pick something that interests you, or that you could stand doing, and the money will come.
There aren’t really any certs worth their weight in software engineering. In IT and cyber, there are certs that will help since they certify the knowledge you have, but they are not a replacement for it. However, certs are good for use as a study guide for what skills you need to learn. I used to use a specific site (the link is broken, but I’ve sent them a message). To answer your question, it depends on what part of software development you’re interested in. But generally, no one cares about certs past the first software development job. Certs and degrees will help candidates get their first entry-level job. After that, companies just look for years of experience and what you can build for them to make them money.
For more information, check out this roadmap of top IT certifications.
The only real difference for veterans is that there are some dedicated/funded job readiness programs, plus a network to market yourself through. If you're interested in Software Engineering, the best thing you can do is to "grind LeetCode," publish software, and expand and utilize your network. You can do the majority of your networking via LinkedIn by finding veterans that are working in areas you're interested in. This is a good example of a resource I used early on from Kalan Snyder.
By "grind LeetCode," I mean mastering data structures and algorithms in a programming language and grinding coding challenges on popular sites like LeetCode. Consider using VET TEC to attend coding boot camps. These programs upskill you and have connections in technical job placement.
Service members and veterans should also apply for BreakLine and take their free online classes. BreakLine’s purpose is to help veterans, minorities, and women get into high-paying tech roles. This is one of the best ways to secure a tech job.
Remember that depending on the company, you will likely have to pass technical assessments to get a job offer. If you have a security clearance, it may make you a more attractive applicant to government contractors since clearances can save companies time and tens of thousands of dollars.
However, these companies often do capital E Engineering, not typical web development, which has a lower bar to entry. This involves using STEM skills to optimize the performance of manufactured products, working in enterprise-scale teams, and adhering to legal and moral liabilities. They prefer STEM graduates. If you don’t have a STEM degree, preferably in Computer Science or Electrical Engineering, consider pursuing graduate studies to make yourself more appealing.
Understanding capitalism will help you focus your job search:
Fundamentals of hirability:
This level of preparation is probably overkill for most roles at most companies. However, it's good to expose yourself to what top-level companies expect from technical interviews:
Go to pythonbooks to see a breakdown of highly rated books by skill level and topic.

Watch some videos from Michael I. Jordan on what AI/ML is and is not: here for lecture style or here for a podcast.
Terms like Artificial Intelligence, Cybernetics, Machine Learning, and Deep Learning describe an emerging interdisciplinary field that takes years of study and practice to become competent in. People often enter the field from backgrounds in computer science, data science, math, neuroscience, etc. Some folks take the "hands-on" approach while others spend years attaining math maturity.
If you're interested in working in the field, and not just learning enough to use it as a hobby or to solve some of the problems you encounter in your own field, I encourage you to talk to people in the industry, write down your priorities, make a 5- or 10-year plan, and backwards plan everything you need to do to be successful. Your daily actions should feed into your priorities.