Don’t Skip This

The details in this article will save you much time, stress, possibly your career, and definitely your hard-earned money and invaluable time. It may even save you your marriage and home and much misery. I wish I had the details in the article on many occasions over the last 14 years.

Because changing your career to become a programmer will impact your (and your family’s) entire livelihood now and in the future, because more people quit their programming education than complete it, and because you may not know which programming career path best aligns with your capacity for the job, you need to learn the essential factors for success in your programming education and programming career before you invest your money and the prodigious time and stupendous effort required to become a programmer.

Furthermore, since you may or may not enjoy programming, might not possess the cognitive adeptness to take on one of the challenging programming careers, or may lack the sense of design or the mathematical inclination necessary for some programming careers, you would be wise to pick the programming career that best fits your interest and capacity.

Article’s Objectives and Key Results (OKRs)

In this article, we set out to accomplish the following objectives, all of which you will realize when you read the article and complete the exercises at the end:

  • Understand the four crucial factors for success in programming and why they are essential.
  • If you lack one or more of the four crucial factors for success in programming, know how to get them.
  • Determine if you have the capacity to become a programmer, and, consider if software engineer, developer, system admin, instructor/professor, or a non-programming technical career best aligns with your capacity.
  • Choose the career path that best aligns with your capacity and interest.

We discuss the key results (the specific concepts or ideas you will learn and the steps you will take to accomplish the objectives) at the end of the article.

The rest of this article continues after the series’ table of contents below.

Articles in this Series

  1. Why Now Is the Best Time Ever to Become a Programmer, What You Can Do With Your Programming Skills, and Why Programming Is One of the Best Career Paths
  2. Your Goal and Purpose for Learning Programming Will Determine Which Programming Career Path to Pursue and Whether You Will Succeed
  3. A Significant Number of Students Quit their Programming Education, Find Out Why Before You Sign Up for a Program and Suffer the Same Fate
  4. The Crucial Factors for Success in Programming, Assessing Your Capacity to Become a Programmer, and Choosing the Best Programming-Related Career for *Your* Capacity
  5. Why You Will Need Your Family’s Support While You Train to Become an Employable Programmer
  6. Teaching Yourself to Code to Become an Employable Programmer—What to Learn, Where to Learn, and More
  7. Selecting a Coding School: Programming Boot Camps vs. Accelerated Programming Academies vs. MOOCs vs. University Computer Science Degrees vs. For-Profit Colleges
  8. All the Programming Careers and Everything About Them—Including Responsibilities, Education, Available Jobs, Qualifications, and Salaries
  9. Specialization: Your Key to a Long and Successful Career in Programming, in the AI and Automation Age
  10. What Are the Secrets to Becoming a Great—Proficient and Confident—Programmer?
  11. The Single Biggest Factor That May Derail Your Chances of Becoming a Programmer
  12. What Are Some Major Downsides to Working as a Programmer
  13. Are You Too Old to Become a Programmer and What Programming Jobs Are Best for People Over 40?
  14. Alternative to Programming: High-Paying Non-Programming Technical Careers That Don’t Require a University Degree
  15. Overcoming Ageism, Racism, and Sexism in the Tech Industry
  16. Planning for a Long-Term Programming Career Beyond 2–5 Years
  17. Parents: A Roadmap for Helping Your Kid(s) Pursue a Career in Programming
  18. How to Secure a Great Programming Job with a Handsome Salary After You Graduate From a Coding School or Self-Education

The Four Crucial Factors for Success in Programming

To succeed in a rigorous programming education and become a confident and proficient programmer, an employable programmer, you need these four crucial factors: time bandwidth, cognitive bandwidth, purpose, and competent logic reasoning (or average problem-solving skills). While you don’t need all of these factors in equal measure, you do need at least three of them in adequate measure and one of them in a modicum of measure; I expound on this further below.

Without these crucial factors, you will either fail to get deeply involved in your studies and keep pushing it off for months and likely years, struggle to understand the concepts and eventually give up, get bored and feel too overwhelmed to continue, or become distracted or disinterested and move on to a career that aligns with your capacity and interest.

Let’s discuss the factors in detail and learn why they are essential.

1. Time Bandwidth

Above all else, you must have sufficient time to study to become a programmer. This seems so obvious that it shouldn’t be discussed, yet it eludes many who set out to change their career to become a programmer. During my experience educating hundreds of aspiring programmers, I have discovered that most people who attempt to change their career to become a programmer via a coding school don’t have enough time to study; they keep their full-time job and don’t (or aren’t able to) set aside at least 2–3 hours each day for their studies.

Lack of sufficient time to study, as simple as it appears, is perhaps the single biggest reason most people quit their programming education and never realize a career in programming.

If you don’t have enough time to study (that is, at least two hours a day or 20 hours a week), you won’t be able to learn and understand and practice the crucial concepts and technologies in an reasonable time, and therefore won’t be able to remember and attain the requisite competencies and skills.

Considering a significant number of people who quit their programming training do so because they lack sufficient time to study, one would presume that time, a seemingly obvious requirement, would be the most important thing people consider before they enroll in a coding school. But they begin knowing they can barely spare one hour a day after work, and that is one hour while they are tired are a long day of work, which impacts their cognitive bandwidth, as you will read below.
Be sure to give yourself no fewer than 20 hours a week to time to study to become an employable programmer; although, forty hours a week would be ideal.

2. Cognitive Bandwidth

In addition to sufficient time to study, you need sufficient cognitive bandwidth. For the simplest of description, think of cognitive bandwidth as a clear mind or your normal intelligent self—that is, your brain’s capacity to comfortably learn and grasp complex concepts such as those taught in intro programming courses.

All sorts of factors can reduce your cognitive bandwidth and impair your capacity to learn properly. Notable among those factors is scarcity, which I discuss below.

Without enough cognitive bandwidth, learning programming will be exceedingly difficult for you, and you will struggle because your brain is essentially handicapped, possibly performing at less than half its capacity or worse. You won’t have enough room in your cognitive system to take in and process new complex information.

Learning with limited cognitive bandwidth is drinking a thick, heavy milkshake with a needle-thin straw. Painful, frustrating, unenjoyable.

Whereas learning under normal circumstances, with ample cognitive bandwidth, is drinking a more liquefied milkshake with a fat straw. Delightful, fulfilling, enjoyable.

Learning is that much more undesirable under the duress of less cognitive bandwidth than with sufficient cognitive bandwidth.

The Powerful Effect of Cognitive Bandwidth on Your Intelligence and Ability to Learn and Focus

Recent research has proven, in conjunction with dozens of other related researches over the last few decades—all in accord and documented in the groundbreaking book Scarcity: Why Having Too Little Means So Much—that our cognitive bandwidth diminishes in the case of scarcity of some crucial resource; the scarcity forces our mind to focus on the problem. In fact, when you don’t have enough cognitive bandwidth, your IQ, a measure of intelligence, drops precipitously, as much as someone who is legally drunk. And this impairment of your cognitive capacity impacts your ability to learn and your overall capacity to reason, especially when given tasks that require nontrivial logic reasoning.

(On a related note, I will discuss the problem with IQ tests in a separate article.)

You must have sufficient cognitive bandwidth—enough room in your mind—to focus on and grasp the complex concepts taught in programming courses, to successfully complete your programming training. If your are too cognitively taxed, you won’t have enough cognitive bandwidth to process complex concepts, and this will prevent you from focusing attentively and from learning properly.

By “cognitively taxed,” I mean your mind is so consumed as to be exhausted, leaving little room for much else. Scarcity is one of the common factors for reducing one’s cognitive bandwidth. When you are going through scarcity of some sort, your mind, subconsciously, continually attends to one or more pressing concerns (the scarcity) that you are dealing with, even when you are not consciously focused on or thinking about that concern.

How Scarcity Weakens Your Mental Capacity

Different people experience scarcity in different ways, yet the effects of scarcity on the mind is the same: It reduces cognitive bandwidth.

Scarcity come in different forms. For example, scarcity can come in the form of poverty or a similar financial stress; your mind is so preoccupied with the financial stress that, even though you don’t realize the significant degree to which you are cognitively taxed and even though you might not noticeably feel any mental fatigue, you have difficulty learning and grasping complex matters such as those taught in programming courses. All of this happens at a subconscious level.

Scarcity can also result from work-related mental fatigue; you come home from work every day so mentally fatigued, so cognitively taxed, that you have no mental room to learn new and complex concepts. You have limited ability to focus on programming courses and projects.

You May Not Know When You Have Limited Cognitive Bandwidth

When cognitively taxed—that is, when the mind has limited cognitive bandwidth—some people may not know it and may think they have a learning disability or that they aren’t smart enough to become a programmer, not realizing the true cause of their limited cognitive ability.

The truth is insidious, and most people will never know what is really wrong with them. This is especially true for the poor.

Limited Cognitive Bandwidth Lowers Your IQ

The same mind, yes, the same person, when going through a period of extensive financial difficulty (scarcity) and given an IQ test, often score 10–15 points lower on the test than when they are not experiencing scarcity. This same experiment has been carried out with other forms of scarcity, not just with poverty. And in just about every case, the research has proven, over the decades, that scarcity limits your cognitive ability, your cognitive bandwidth.

Performing any nontrivial cognitive task while your brain is less than its capacity (say, less than half of its capacity) is challenging enough; now, imagine being asked to learn a new complex programming concept or build a sophisticated web application or take a difficult programming test when you are in that cognitive-handicapped state of mind. You can say life is tough for people will limited cognitive bandwidth.

As the two lead scientists—creators of the new science of scarcity—note, “losing 13 points [on the test] can take you from ‘average [intelligence]’ to a category labeled borderline deficient.”1 (Scarcity)

You may want to read that again, to grasp the powerful effect of cognitive bandwidth on your mental capacity, your fluid intelligence, and your capacity to learn.

In their groundbreaking book Scarcity: Why Having Too Little Means So Much, behavioral psychologist Sendhil Mullainathan and his coauthor, Eldar Shafir, discuss the new science of scarcity, including cognitive bandwidth, in scholarly depth and with precision. I enthusiastically recommend the book; it is serving an instrumental role in the innovative solutions we are devising to solve global poverty.

Most students who quit Bov Academy have done so either because of insufficient time to study (lack of time bandwidth) or insufficient cognitive bandwidth. Based on the reasons students gave us over the last two years for why they quit or took extended time off, even though the students themselves were unaware of the new science of scarcity and the effects of insufficient cognitive bandwidth on their capacity to learn, most of their reasons pointed directly to time bandwidth or cognitive bandwidth.

Solutions for Dealing with Limited Cognitive Bandwidth While You Study to Become a Programmer

Some people can’t eliminate their own poverty; they are stuck in a poverty trap and simply don’t have opportunities to escape their financial scarcity, which means they often live in a state of perpetual diminished cognitive bandwidth, which furthers keeps them in an infinite loop of poverty. Others, particularly in the developed countries, suffering scarcity of different sorts—including financial scarcity due to bills, student loans, debts, high cost living, and so on—are also inhibited by their compromised cognitive capacity and don’t typically know how to rid themselves of the problem.

Therefore, people imprisoned by their limited cognitive bandwidth need help. As Sendhil Mullainathan and Eldar Shafir advised: we have to “redesign the cockpit”—redesign crucial resources people use and rely on, to make the processes and services easier and more beneficial to the people. I dig deeper into some of Mullainathan’s and Shafir’s recommended solutions (and other innovative solutions we have devised at AI Humanity) in necessary depth, in my book Eduprosperity: Education for Prosperity for the Unprosperous and for the Coordinated Advancement of Humanity. Sign up on the AI Humanity website to be notified when the book will be released.

For the purpose of helping aspiring programmers who read this article, below, I focus on a few solutions I believe you can benefit from now, with actions you can take on your own. The solutions follow:

  1. Give Yourself More Time to Study: Learning with limited cognitive bandwidth means you are learning (that is, understanding and memorizing) less than you normally would. For this reason, you need more time to study, to learn enough to complete your education in the expected time. Since you likely can’t easily find more time, you will have to do whatever is necessary to make some sacrifices, such as:
    • Negotiate with the company your company to allow you to work fewer hours.
    • Ask your spouse or other family members to work more so that you can work less.
    • Give up some things that occupy much of your time, including television, Netflix, social media, other extracurricular activities, and so on.
  2. Learn at a Coding School that Facilitates Slack and Deep Learning: Under the duress of limited cognitive bandwidth and scarcity, you will likely take longer to complete your programming education. You you will need a coding school that allows you to take time off and to resume your studies when you can, with no financial or other penalties, no loss of your progress; this is slack. I should note that slack is one of the solutions proposed by Mullainathan and Shafir in their book Scarcity.

    Likewise, choose a coding school that facilitates deep learning. That is, the school should incorporate in its courses and teaching methodologies that allow you to grasp the concepts fully (clearly, comprehensibly, and comprehensively) and allow you to put your theoretical knowledge into practical, real-world use. For example, after you learn about AJAX in JavaScript in depth, you should be able to build a nontrivial project that makes full use of AJAX, and then build a real-world application (one that users will use) that uses AJAX.

    When you learn in this manner, you will grasp each concept so well and get to use them in such a practical manner, as to not need to relearn them and as so to be ready to use them for complex applications at any employer.

  3. Choose a Less Demanding Yet Equally Rewarding Programming Career Path: You can become a frontend developer in just 3–6 months and get a frontend developer job that pays around the same big salary as other more technically challenging careers, such as frontend engineer or fullstack engineer, pays. These more challenging careers will take you longer than six months, unless you are already a frontend developer and want to upskill.

  4. Get the Motivation You Need To Keep Going When You Inevitably Take a Break from Your Studies: You will almost certainly take a break at some point during your programming education, considering the mental toil and your limited cognitive capacity. During your break, you will have difficulty resuming your studies; you make even become comfortable, due to the power of inertia, and may never get back to productive study. You will need either the coding school instructors or students to check in on you and push you to keep going or you will need a family member or friend to encourage you. All of us like to think we are super and won’t need such support, forgetting we are just as fallible and human and vulnerable as other humans. I am confident in saying that you too, no matter how mentally strong you think you might be, can and will benefit from support.

    I have seen students come back from disinterest and languishment and hopelessness to continue their studies and go on to get a great job, all with the help of encouragement or from the push or frequent encouragement of an instructor.

  5. Get Help with the Main Problem Causing the Scarcity: If the reason for your limited cognitive bandwidth is a financial scarcity and you have no way to resolve your circumstances on your own or with your family’s help, seek the help you need. There are organizations of every sort that provide help of every kind, and I am confident there is one to help you. In fact, at AI Humanity, we will help you get the help you need. But AI Humanity is still many months away from providing this kind of service.

    As noted above, not only poverty and financial problems can cause scarcity. You can have other sorts of scarcity in your life. Find out what could be troubling you (including subconsciously) and get the help you need. You will do yourself a lovely favor and thereafter get all the wonderful benefits, which may last for the rest of your life.

3. Purpose

The third crucial factor for success in your programming education and, crucially, in your programming career, is purpose. Learning to code is so mentally exhausting and time consuming that to survive the demanding process and to continue the journey with deep interest, you need something to keep pushing you forward, day after day, week after week, month after month, bug after bug, frustration after frustration.

Yes, some bugs will frustrate you and you will conquer most of them, burnout will demand you take a long break and you will likely acquiesce, big projects will push you to your limit and you will abandon some of them, deadlines will test your mental toughness and you will miss all of them.

As you see, you will need something compelling to carry you through all the difficulties, through all the months and possibly years.

What is that compelling something that will keep pushing you? It isn’t grit. No matter how gritty you are or how determined you believe you are, if you don’t like what you are learning or doing and don’t have a compelling reason to keep doing it, you won’t keep doing it; you will eventually quit. You will. I see this real-life drama plays out time and again, consistently.

The thing that will keep pushing you forward no matter what setback or difficulty you encounter is your purpose. Purpose is something more powerful than grit, determination, and desire, as I have also noted in the second article of the series on becoming a programmer.

Finding Your Purpose (Discussed in Article 2 in the Series)

Purpose is the reason, the primary reason, you are pursing a career in programming.

Purpose is the answer to the question Why precisely am I putting myself through all of this pain and sacrifice and frustration, all this mental rigor, for many months and likely years? You will likely know (or get closer to) your purpose once you answer that question. As Daniel Pink detailed in Drive, purpose is a self motivator, an intrinsic motivator, and it is more powerful and more fulfilling than extrinsic motivators.

You could analyze yourself further to better pinpoint your purpose. For example, you could ponder questions such as the following:
(You likely saw this same list below in the the second article of this series; I am adding it here again for convenience.)

  • Are you learning to code to make a bigger salary to help your family with a stable financial future (perhaps you have kids or plan to rent a lovely home or buy a house or help your parents)?

  • Are you doing it because you are ambitious and determined to become successful?

  • Are you doing it because of an unquenchable thirst to achieve some specific aspiration you set for yourself and you are determined to achieve?

  • Are you doing it because you hate your current job or career so much that you feel compelled to get a better one?

  • Are you doing it because you want to get better and better at coding—the pursuit of mastery.

Whatever your purpose, you must have one. Identify your purpose and ensure it is strong enough to see you through.

The Relationship Between Passion and Purpose

Passion is a type of purpose; it can be the purpose of the pursuit of mastery; that is, you enjoy doing something so much and want to become better at it so passionately that you keep doing it, over and over with no loss of enthusiasm, with absolute and deep interest.

Or it can be the purpose of gratification; you gain so much personal pleasure and satisfaction and joy from doing something as to prioritize it in your at every opportunity, for months and years and decades, if necessary.

Imagine the amateur golfer who practices multiple times a week, just for the love of the game. Imagine the programmers who contribute to open-source software with no expectation for pay or recognition, just for the satisfaction they get from solving problems. Imagine the volunteers who go out each day and help out just for the fulfillment that helping others brings them (the volunteers).

Evidently, the passion of purpose can direct your entire livelihood and bring much satisfaction and joy to your life, perhaps the reason many have advised us over the decades to pursue our passion. If you can get paid to do what you love doing, that thing won’t feel like work and you won’t lose interest in it, perhaps ever. So, while “pursue your passion” may sound cliched, it is based on the principles of real life, and it is thus sound advice.

You Don’t Need To Be Passionate about Programming To Succeed in It
Note that, just as you can have a successful career as an average or even below-average programmer, you can also have a successful career as a programmer if you are not passionate about programming. And you need not pursue a career in programming to get the benefits of a programming career. You can pursue a similar technical career that doesn’t require complex programming or that doesn’t require any programming at all.

For more on programming-related careers that don’t require complex coding, read the rest of this article. For more on non-programming high-paying technical careers, see the related article in the series; it is titled Alternative to Programming: High-Paying Non-Programming Technical Careers That Don’t Require a University Degree.

While you don’t need passion to excel in programming, if you have it, you are well on your way to much success as programmer.

A Brief Discussion on Grit, Perseverance, and Determination

For brevity, I will group grit, perseverance, and determination into one category and discuss all as determination.

Some experts in education, mostly academics in the area of teaching and learning, believe you need determination to succeed in any long-term challenging tasks and to accomplish any significant goals, including the successful completion of secondary school and a college degree.

What is determination? Merriam-Webster defines it as “firm or fixed intention to achieve a desired end.” Determination helps students focus and thus enables them to succeed at every level of their education, according to experts. They describe determination as a general quality that some people possess and some don’t. And some experts believe it can be taught to those who don’t possess it naturally; they can acquire it through practice.

One way to think of perseverance is thus: It is force that helps you focus and it pushes you to succeed; of relevance to programming, it helps the successful programmers endure the tough coding courses and outlast the coding curriculums.

But can one really succeed in anything and everything just because of a general force—grit or perseverance—that pushes them forward no matter the circumstances or consequences? Do gritty or determined people use their special “grit” force for any and every project they must complete, no matter how disinterested they are in the project or how unnecessary they might consider it?

Imagine this scenario: If you are a determined person, do you use your determination to succeed with every project, even when you find a project unnecessary or a waste of your time? Likely not.

There is something else that determines where and when you apply this “grit” force, and that something, that motivator, is your purpose, one of the reasons I noted earlier that purpose is more powerful than grit. Purpose is the motivating force and your perseverance is one of the factors (along with others such as responsibility, guilt, fear of failure, fair of consequences, and so on) that help you along the way to realizing the purpose.

In fact, your brain—the conceptually System 2 part of your brain (as Nobel laureate Daniel Kahneman categorized it), the part that does the deep thinking and helps with long-term accomplishment—is conservative and only puts in a significant effort when absolutely necessary, whether for a purpose important to you or one that brings you joy or contentment or satisfaction or peace of mind.

Therefore, if determination does matter, it matters in the context of purpose, and it is because of the purpose that we persevere, the reason purpose—and not determination—is noted as one of the crucial factors for succeeding in programming.

4. Adequate Problem-Solving Skills

The final crucial factor you need to succeed in programming is adequate problem-solving skills. Adequate in this context means average or a bit above average. We don’t have a precise measurement for below average and above average, but we do have some logic tests that can determine your current problem-solving capacity.

I use the word current here because we know that anyone can improve their problem-solving skills and we learned above that the state of your cognitive bandwidth can affect how you perform on cognitive tests. Thus, your problem-solving capacity might not be the same after you practice solving some logic problems for a few weeks and it likewise be different if your cognitive bandwidth changes much (increased or decreased) for any number of reasons.

To read or write even beginning to intermediate code, you need at least average problem-solving skills. Some people seem to be better equipped to handle logic problems more than others, whether because of their effective elementary school training or their affinity for solving such problems.

Fortunately, anyone can learn to code and can improve their problem-solving skills. This doesn’t mean anyone can become a proficient software engineer, however, as the work and time and dedication required to become a software engineer elude most people who learn to code, even brilliant people.

Just two years ago, I used to believe that everyone could train to become a frontend or fullstack engineer, or to become any kind of programmer. But I have been proven wrong consistently.

My research in the field—while working with aspiring programmers as they train to become professional programmers and professional developers as they train to become advanced software engineers, and my academic research on cognitive science, neuroscience, motivation, and behavioral psychology (for my forthcoming book, for AI Humanity, on improving education for the unprosperous)—have taught me much about why many people struggle succeed in their programming education and what specifically people can do to become confident and proficient programmers.

I expound on the findings in that book. And the details above, the crucial factors for success in programming, help to shed some light on the matter, at an introductory level.

Let’s now determine if you believe you have the average problem-solving skills to code and to become a programmer.

Do You Have Adequate Problem-Solving Skills to Become a Programmer?

If you can comfortably solve most of the logic problems below, you most likely have the requisite problem-solving skills (basic logical reasoning) to pursue a career in programming.

Basic Problem-Solving Test

Question 1:

If integer a=10, and integer b=20, and a=b, then which of the following must be true?

  • a = 10; b = no value
  • a = 20; b = 10
  • a = 20; b = 20
  • a = 10; b = 10

Question 2:

If True = 0 and False = 1, then what is the numerical value of: True + False – (True * False)? Does the numerical value correspond to True or False?

  • 0; True
  • -1; no corresponding value
  • 1; True
  • 1; False

Question 3:

If you let the word a=’healthy’ and word b=‘living’, and then if you let b = a, which must be true?

  • a = ‘healthy'; b = ‘healthy’
  • a = no value; b = ‘healthy’
  • a = ‘healthy'; b = ‘living’
  • a = no value; b = ‘healthy living’

Question 4:

You have two sticks and matchbox. Each stick takes exactly an hour to burn from one end to the other. The sticks are not identical and do not burn at a constant rate. As a result, two equal lengths of the stick would not necessarily burn in the same amount of time. How would you measure exactly 45 minutes by burning these sticks?

Question 5:

You are standing in front of a wall with three switches on it. Each switch is connected to a light bulb on the other side of the wall in a closed room. The connections from the switches to the light bulbs are random and not in any order.

All lights are initially off, and you can’t see into the room from where you are standing. You can flip the switches any number of times you want but you can go inside the room only once to see the bulbs. Your task is to determine which switch controls which bulb.

Describe how you would go about determining which switch is connected to which light bulb?

If you can’t solve any of the problems above on your own but you can reason out the solutions and understand how they are solved after you see the answers, you may still have sufficient problem-solving skills to become a programmer.

But if you have difficulty solving the problems, and after seeing the answers you still find the problems difficult for you to reason out, don’t despair. As I hinted above, not everyone can become a software engineer, but everyone can learn to code and can find a programming or programming-related job that fits within their capacity, and everyone can improve their problem-solving skills.

Improving Your Problem-Solving Skills to Become a Programmer

If you believe you lack sufficient problem-solving skills to become a programmer at this time, whether because you never had the proper training during your formative school years or you have been away from basic math-type logic and problem-solving for too long, know that you can still improve your problem solving skills.

Three Stages of Improving Your Problem-Solving Skills

Considering your cognitive capacity can adapt, contract, and expand—increasing or decreasing in its ability to learn and memorize and solve problems—we can think of an adult’s problem-solving capacity for programming education in the following three stages:

  1. Improving Your Problem-Solving Skills Before Your Train to Become a Programmer: Before you train to become a programmer, your problem-solving skills are either already sharp and on duty or rusty and on vacation. If the latter, you can get your problem-solving skills in shape by solving dozens of algebra or similar middle-school or early-high-school math problems.

    At Bov Academy, we have an intro math course that helps students who need a refresher to put their problem-solving brain cells through a bit of a workout, to get in cognitive problem-solving shape. Post a comment below if you need access to this course.

  2. Improving Your Problem-Solving Skills While You Train to Become a Programmer: While you take programming courses, especially JavaScript courses, you can practice solving simple to intermediate coding challenges on websites such as those listed on this website.

  3. Improving Your Problem-Solving Skills After You Become a Competent Programmer—Before You Take any Technical Job Interviews: In the last article of the series, How to Maximize Your Chance of Securing a Great Programming Job with a Big Salary After You Graduate From a Coding School, a student of Bov Academy who went through the entire process to land a high-paying job will document his experience and provide invaluable tips and insight into securing a programming job. Some of the topics discussed will include:

    • Optimizing and Getting the Most Out of the Last Few Weeks of Your Frontend Career Training
    • Practicing and Preparing for the Technical Interviews
    • Searching for a Job as a New Graduate
    • The Interview Questions You Absolutely Must Be Prepared For
    • Being Patient and Optimistic, Yet Aggressive Enough to Get Selected for Interviews
    • Increasing Your Chance of Getting the Job You Really Want
    • What to Expect on the Job
    • How to Be a Good Frontend Engineer on the Job

You don’t want to miss that article. It should be ready sometime before September 15.

I should also note that advanced students at Bov Academy take a course titled Art of Programming, which covers topics such as improving your problem-solving skills on an advanced level, writing better code, and other art-of-programming topics.

What If You Don’t Have All Four of the Crucial Factors for Success in Programming Education? Can You Still Become a Programmer?

If you have some (not all) of the crucial factors for success in programming, you can still become a successful programmer, especially if you choose a career path that aligns with your capacity. Let’s look at the four crucial factors in context with the others and the options you have:

  • You don’t have enough time to study: If you lack sufficient time to study (e.g., you have just five hours each week to study), you most likely won’t become a confident and proficient programmer within a year or two, no matter how much of the other three factors you have. With just five hours a week, you might need 4–5 years or more to become a proficient programmer. Remember that time is the most important factor.

  • You lack a meaningful purpose: If you have no purpose, no compelling motivator to push you to succeed, no matter how much time you have to study and how good a problem-solver you might be, you will most likely quit your programming education sooner or later. You might not quit in the first month or two, but you will quit at some point or keep studying for more than four years and never push yourself to complete your training.

    Humans are not good at pursuing difficult challenges unless we have some purpose, some powerful motivator to keep going—be it the deep satisfaction, the pursuit of mastery, the pursuit of money, or the pursuit of prosperity, to name a few.

  • You are too cognitively taxed every day (that is, you lack sufficient cognitive bandwidth to learn complex concepts): If you have three of the factors but lack sufficient cognitive bandwidth (that is, you have difficulty learning and grasping complex concepts because your brain is too taxed as a result of some scarcity), you can still become a programmer, but you will need significantly more than 20 hours a week to study.

    You will need about 30–40 hours or more each week. In other words, you will learn at a much slower pace than if you had enough cognitive bandwidth, the reason you need more time. Time can make up for your reduced cognitive bandwidth.

    Read the other solutions above for dealing with limited cognitive bandwidth.

  • You are weak in problem-solving and don’t believe you can improve much: If you are weak in basic logic reasoning and problem-solving of the sort we discussed earlier (if-then-else problems) and you also believe you won’t be able to improve your problem-solving skills much, you could still find success in a programming career. You can pursue a developer programming career path, one which requires more user interface development tasks and less complex programming tasks of the sort software engineering requires. I give more detail on this below.

You should be hopeful at this juncture, considering you can still become a programmer even if you don’t have all the crucial factors to become a programmer and even if you lack adequate problem-solving skills.

Do You Have the Capacity to Become a Programmer and Should You Pursue a Career in Programming?

After working with more than 200 students at Bov Academy of Programming and Innovation, and after reading and replying to tens of thousands of students’ forum messages and emails (I keep up with every student’s progress) in painstaking detail, I have come to understand what one needs to succeed in coding schools and in various programming careers.

But that isn’t the only experience that informed me. My 14 years working in various capacities as a programmer (from CTO to freelancer, all roles directly involved with software and programmers and stakeholders, from lead fullstack engineer to owner of my own consulting firm to a subcontractor with the United States government) have also contributed to my understanding of the essentials for success.

From those experiences and my academic research on improving education for the unprosperous, I would advise the following:

  1. You should absolutely pursue a career in programming—if you have the capacity to become a programmer. And even if you don’t have the capacity (time bandwidth, cognitive bandwidth, purpose, and average problem-solving skills) to become an programmer, you may still have the capacity to become a developer or to excel in some other programming-related or nonprogramming-related technical career.

  2. Although everyone can learn to code, only a small percentage of those who learn to code will go on to become programmers (or software engineers). Many people who learn to code still become successful developers, even if they never advance to software engineers or gain proficiency in their career path.

Allow me a moment to explain that last point.

Of one thought, you can—with moderate effort and average (even below average) problem-solving skills—learn to code and perhaps reach an intermediate level and subsequently get a satisfactory entry-level or mid-level programming job, likely a web developer job. Note the moderate effort and average problem-solving skills bit.

Of another thought, you can become a highly paid proficient software engineer—the sort who will eventually develop complex applications that the world runs on, that humanity relies on for critical services every day. But to get to this stage:

  • You would have to practice coding for hundreds of hours (likely thousands, for slow learners and for those cognitively taxed).

  • Dedicate yourself to the learning process. To gain proficiency or mastery in a field of study or in any discipline, including programming, requires prolong dedicated practice, as Mihaly Csikszentmihalyi correctly deliberated in his book Flow: The Psychology of Optimal Experience.

  • And have cognitive adeptness, the above-average problem-solving skills required for software engineering. You will need more than average problem-solving skills to understand and write the complex algorithms and to handle the math necessary for building sophisticated applications.

As you see, there is a path to success for everyone willing to put in some work.

Yes, You can Still Become a Programmer Even if You Lack the Prerequisite Skills and Drive, But with with Less Reward
You can earn a handsome salary and still realize programming-related career even if as just an average or below-average developer.

However, as a confident and proficient programmer, you may find your career more rewarding—just as a top soccer player dominates the field, gets recruited, commands the biggest salary, is more admired and respected on the job, and leads his team to more success than an average or below-average player does.

Naturally, to excel, you don’t need god-given talent, but you do need proper training to help you become confident and proficient, and you need some additional essential factors (e.g., time to study, purpose, etc.) to help you benefit from the proper training.

Let’s find out which category of programing might best align with your capacity.

Choosing a Programming Career that Aligns with Your Capacity: Programmer, Developer, System Admin, or Non-Coder

We can put everyone who works with code (even if a teeny bit) into four categories: programmers, developers, system (OS) admins, and non-coders.

Not all programmers can build complex software or write sophisticated algorithms, not all engineers can build user interfaces, not are UI/UX developers can administer database and server resources, and not all programmers actually write code. Indeed, programmers and developers have varying degrees of expertise and specializations.

You may find that your capacity aligns with one or more of the noted careers, so choose the best one for you. You know what you are capable of and the amount of work you are willing to put in to realize your aspirations. Read below to see which programming career path you prefer and can handle.

1. Software Engineers and Programmers: The People Who Write Code and Build Software

The terms programmer and software engineer can be (and often are) used interchangeably. Both describe, generally, someone who has the knowledge and expertise to build software applications, particularly applications that require non-trivial programming and that use one or more common software principles, such as objective-oriented programming (OOP), software architecture, design patterns, functional programming, and the like.

These programmers typically receive their technical training at a formal educational institution, such as an accelerated coding academy or university, to name two. And the programmers usually complete a series of mandatory software engineering-related courses and advanced-level programming and computer science courses.

Self-Taught Software Engineers and Programmers
Of course, some programmers are self-taught, and they are no less of a software engineer than a college-educated computer science graduate or an accelerated-academy engineer. Some of these self-taught software engineers even teach themselves the same courses and tools and techniques that the college-educated computer science graduates learn.

This has been a common practice with programmers for years, but the self-taught training has gotten more advanced over the last few years, as universities provide the public with free online access to the same set of highly technical courses that are taught at these institutions.

Generally, these well-educated software engineers (or programmers or computer scientists) can manage the complex logic and algorithmic programming required to build nontrivial modules and frameworks and applications. (I began the preceding sentence with the word “generally” because one can successfully complete the noted complex courses and still lack the ability to build complex software.)

Of all the people who learn to code, only a small percentage become software engineers and programmers of the sort described above. We know this from the U.S. Bureau of Labor Statistics’s data on the number of working software engineers. When we compare that data to the number of people who have been learning to code, including the high percentage that quit, over the last many years, we learned that the vast majority of people who learn to code don’t become software engineers.

The important point for us to consider is this: Should you try to become a programmer, a software engineer? If you know you can handle courses such algebra and precalculus and Calculus 1—whether comfortably or with dedicated, strenuous effort and some help—or if you had (or have) command of the math courses taught in middle and high school, you should have no trouble training to become a professional programmer.

On the contrary, if you know the complexities of software engineering are outside your capacity, your interests, and your comfort zone, and you want to become some kind of a programmer, don’t give up hope just yet. Continue reading.

Teaching Programming vs. Building Software
I have noticed that some people (let’s call them programming instructors and professors) can teach programming courses well, even though they themselves are not interested in or don’t have the skills to work as a programmer. You should consider teaching programming if you know you can learn the complex subjects and teach them well but you are not as interested in or not as skilled in using the theories to build software.

You not only have options right within software engineering available to you, whether you have the skills for the job or not, but you also have other manageable options outside of software engineering available to you, as we discuss next under the section Developers: The People Who Build User Interfaces and Applications.

Programming/Software Engineering Career Paths

Rather than discuss the individual programming career paths here, since there are many, I discuss them in detail in the related article, All the Programming Careers and Everything About Them—Including Responsibilities, Education, Available Jobs, Qualifications, and Salaries.

2. Developers: The People Who Build User Interfaces and Applications

Some “programmers” choose not to work with (or can’t manage) the complexity of algorithmic and logic-based programming we discussed above. Still, they find a way to realize a successful career in programming.

For example, instead of focus on software engineering (that is, specialization in writing complex code), they focus on what they have an affinity for and are better at: They specialize in building user interfaces with technologies such as HTML and CSS and JavaScript.

They use JavaScript mostly on the frontend. Or they build mobile apps. And although they must code, even write sophisticated code, to build web and mobile apps, the level of algorithmic complexity (or pure code complexity) they deal with on any given app may be thought of more as development (using mostly pre-existing frameworks and tools to build applications) than as pure engineering (writing original architectural code and complex algorithms).

I will clarify that last point. Among the large category of frontend and fullstack programmers, you can find both developers and engineers. The developers focus on just about everything besides writing complex code and the engineers have the skills and training to write complex algorithmic code.

To become a frontend or fullstack developer, someone who focuses on development and not much on engineering, you need not take complex math and computer science courses. For example, you can become a competent or proficient (even highly paid) frontend developer by completing only courses on HTML, CSS, JavaScript, and related technologies, all without the need to take subjects such as Architecture or Frontend Applications, Calculus, Discrete Mathematics, Linear Algebra, Advanced Algorithms and Data Structures, and so on.

3. System Admins: The people Who Manage the Computer Hardware and Operating System and Network and the Like

I discuss them all the system admin careers in the related article, All the Programming Careers and Everything About Them—Including Responsibilities, Education, Available Jobs, Qualifications, and Salaries. I will publish this article sometime over the coming two weeks.

4. Non-Coders: The People Involved with Code Who Don’t actually Write Code Themselves

I have written an entire article on nonprogamming career paths. For more, read the article Alternative to Programming: High-Paying Non-Programming Technical Careers That Don’t Require a University Degree, which I expect to publish sometime in September.

Concluding Thoughts

At this juncture, you should have a thorough understanding of what you need to succeed in programming education and what will push you to succeed in your programming career. I trust you have read the prior articles in the series as well, not just this one.

To get the most out of this article, complete the exercises below and check to make sure you have achieved the key results, which would mean you have also achieved the objectives we set out to accomplish.

Exercises: Actions You Should Take Now

Exercise 1: Understand the Four Crucial Factors for Success in Programming and their Importance to Your Success

Ensure you understand each of the following four crucial factors for success in programming and know the relevance of each to your success; in addition, be prepared to explain them to anyone who may seek your advice or whom you believe could benefit from the ideas discussed about each:

  • Time Bandwidth
  • Cognitive Bandwidth
  • Purpose
  • Cognitive Adeptness

Exercise 2: Determine if You Have the Adequate Problem-Solving Skills for a Career in Programming

Take the Basic Problem-Solving Test above to determine if you have the sort of basic problem-solving skills necessary to succeed in programming.

Exercise 3: Determine if a Career in Software Engineering Teaching Programming, Development, System Admin, or Non-Programming Suits You

After you analyze your problem-solving skills and consider the type of programming career you want to pursue, decide if your capacity might be best suited for a career in:


  • Writing complex code and building software
  • Teaching programming
  • Developing applications: You will work more with UI/UX development and not as much with complex coding.
  • Working without code: There are many careers that revolve around programming but which they themselves don’t require programming.

Exercise 4: Choose a Programming or Non-Programming Career Path

Read the article All the Programming Careers and Everything About Them—Including Responsibilities, Education, Available Jobs, Qualifications, and Salaries, in the series, and choose the best career path for you, the one that aligns with your capacity and interest and goal.

If you decide not to pursue any of those careers, you can still pursue a technical, nonprogramming career. For more on this, read the 14th article in the series, Alternative to Programming: High-Paying Non-Programming Technical Careers That Don’t Require a University Degree, schedule to be published sometime before September 15 this year.

OKRs Accomplished?

Have we accomplished the objectives we set out to accomplish at the beginning of the article? The key results will tell us; let’s find out.

Key Results to Determine the Success of Our Objectives

The key results, as noted in the beginning of the article, are the specific concepts or ideas you should have learned and the steps you should have taken to accomplish the objective(s). Accordingly, at this juncture, you should have grasped and completed the following; these are the key key results:

  • You know the four most crucial factors for success in programming and understand intimately how they can affect your programming education and career. And you can explain them to anyone who may need to learn about them from you.
  • You have a clear understanding of the sort of basic problem-solving skills required for a career in programming and how to improve your own problem-solving skills at various stages of your programming career.
  • You have a better sense of whether software engineering, development, teaching, or a non programming technical career aligns best with your capacity.

Recommended Reading List to Expand and Refine Your Knowledge on the Topics Discussed

The books in the list below will enrich your life and help you on your path to success. Some of them will give you a jolt of inspiration. All of them will enlighten you on subjects you may not know or that you know little of.