DEV Community

bellsofaba
bellsofaba

Posted on • Updated on

How To Make Your Self-Taught Programmer Journey Not Suck

JACK:

Technology… boy we have come a long way. From the days of seeing video calls done on Sci-fi shows like Star Trek, waiting for the telephone operator to connect you with your destination, waiting for a family member to get off the internet so you can make a phone call, to receiving the ‘You’ve got mail’ notification, to witnessing all these features materialize right in the palm of our hands via our cellphones– it almost feels surreal, doesn’t it?

Say you zap one of your ancestors from a few centuries ago and bring them to your current reality and introduce them to the wonders of today's living, imagine the bewilderment on their face. What about the look on your face reacting to their reaction? It’d be one priceless viral sensation waiting to explode. I bet you’d spend days trying to convince them it’s not witchcraft.

It’s not witchcraft. It’s years and years of knowledge built upon existing concepts in order to make them better. That way our time on earth becomes a little less boring.

About Us

BOB:

I’ve been writing code since I was ten years old; somewhere around 1978 I saw an advertisement for a computer that “will satisfy your lust for power.” From there, I got a Computer Science degree, leaving college in 1990 (the Internet was just starting to become a thing). I learned to write code in classes and from books.

Out of college, I struggled to find my way; and in 1994, I accepted a position teaching computers to inmates in a prison that had recently opened. I spent a decade there and about 25 years total teaching computers in one form or another.

Along the way, I taught myself to write frontend code. This was no different than most of the learning I had done since I was young.

Then I ran into an opportunity to get back into development; to do what I love, “write code.” That was somewhere around 2010. I got to see some amazing tools and libraries come and go; all the while learning and exploring.

In 2016, I left that position for Leading EDJE, Inc where I get to solve problems writing code every day.

JACK:

Fairly new to the world of coding but not entirely a newbie to the world of programming in general (depending on when you have decided to give this a read) I am going through an online coding Bootcamp and learning Full Stack Web Development with a cohort of more than a thousand other self-taught programmers. We call ourselves 100Devs and we are a global community of enthusiastic individuals ready to add our quota to the tech industry.

By the end of this article, if you still doubt my credibility and ask what right of passage I have to assert my experience and provide you tips on what to do to make your journey seamless, then I would have done a horrible job.

And if you don’t want to take my word for it, take Bob’s. You would do yourself a massive disservice if you don’t take Bob’s. Bob has close to 4 decades of knowledge and experience in all things programming.

Why are we qualified to talk about this topic?

BOB:

All of my learning over the years has been self-taught. I did get a college degree, but that just added a polish to what I already knew. My communication and research skills benefited greatly from my time in school, but code has always been something deeply personal to me.

JACK:

I have my stats. Stats that are verifiable by my online presence via Twitter, GitHub and some few other projects and portfolios that didn’t make the cut for this article.

I have also dedicated time to learning about coding daily by participating in the 100DaysofCode challenge on Twitter.

I am not alone in this challenge as it is an ongoing and trending collection of tech - twitter posts that show up daily on your timeline. This is only contingent on an active following of the latest posts from tech twitter.

It was via my earlier days of posting my 100DaysofCode challenge that Bob left me a rewarding and encouraging comment to keep up with my learning.

ALIENS… ALIENS DID IT

JACK:

Who’s responsible for all these innovations? A few episodes into watching NATGEO would have you fully immersed in the conspiracy theory of alien architects. It’s unattainable by humans. It’s lightyears ahead of our technology, it’s not something the human brain or cognitive ability can fathom let alone muster. Sigh.

I doubt anyone reading this would subscribe to that degree of thinking but whatever rocks anyone's boat.

THE MARVELOUSNESS THAT IS YOU

Humans, by our sheer ingenuity, continue surpassing the expectations and raising the bar for what was seemingly impossible to achieve in the past. It’s admirable; it makes you wonder how further out we can venture. What else is possible?

Over the last fifty years, technology has progressed rapidly to the point where we have begun taking it for granted. And why not? Its accessibility is all over the place; it's not just celebrities or the military that hold exclusivity to them anymore.

BAD TECH

The certainty is this, there are visible pros and cons associated with having techy things as part of our lives. On the one hand, life is easier on so many spectra. On the other hand, it has heightened dissociation from reality, aided the rise in cyber-related immoralities and multiplied tone deafness by a thousand fold, toning down empathy and making humans almost machine-like.

TECHNOLOGY PIONEERS

That’s not why we are here. Pardon the digression. You are here to get the magic combinations that would make your self-taught programmer journey worthwhile. You know, to reinforce your decision to thread on to the end (DISCLAIMER: There is no end to learning and improving your software-related knowledge) without quitting. But I was hoping to make a point - humans committed to their craft make impossible things seem possible and almost like magic.

How do we do it? Is there a special god-mode switch that the likes of Thomas Edison, Nikola Tesla and Elon Musk have that we don’t? No. Turns out, they are just regular humans like you and me. We needn’t go that far to make comparisons with what software development entails. It’s pretty basic (or not) and with a consistent bout of determination, you would realize your goal in no time. However, there are tenets and etiquettes you have to abide by so that it is not too daunting.

NOT LIKE RIDING A BIKE

BOB:

I often preach the three things I see that most developers need, “Patience, Persistence, and Practice.” Learning to write code and do it well takes time and practice; at the same time a willingness to fail with some regularity.

JACK:

When it comes to coding and programming, it is almost tedious, repetitive and at the start, to a large extent like gibberish. It doesn’t seem to make any sense at all. The syntax is not something you’d expect a human being to randomly know at any point. Dare I say, that you would both be right and wrong?

Right, in the sense that you don’t randomly just know these things. On the other hand, it is usually a person like you and I that invents any of these languages. Take JavaScript, for example, Brendan Eich created it at Netscape.

Several other languages and frameworks associated with programming exist today and they were all written by humans. Humanity consistently proves that we do know what we are doing. However, you have to approach certain things with finesse and a drive that is laser-focused.

If you have attempted coding and stopped in the past, then you know that coding is not like riding a bike. It will not be waiting for you to set it all into motion say you take a long break and suddenly decide you want to have a go at it once more.

You’d have to restart from somewhere in order to get close to the footing you previously were. In contrast to riding a bike, it’s more like Math – it requires a constant barrage of brain challenges directed at your neurons that make your synapses scream “what the HECK IS GOING ON? “

The underlying fact is the difficulty involved. It is hard.

But again, there is hope when you know how to hack it.

HACK IT

If you are at the very beginning, ready to take a full swing at this self-taught programmer stuff, I will tell you one thing that should resonate with you intensely, you’ve got this.

In case you hadn't noticed, this article is a collaborative effort between Bob and I. And I have also had the pleasure of interviewing some Self-Taught Programmers whose journeys and valuable insights I will be sharing with you.

SLOW AND STEADY

The first thing you should consider is resetting your mind to a state of learning that is going to be slow, strenuous and challenging. This is manageable because you can employ what is known as the Pomodoro technique. That way, you can learn for hours, taking breaks in between without quitting or getting easily distracted.

This helps you steer clear of burnout. Burnout is real, you cannot take what usually takes a few months and even years of learning material and cramp it all in a few days. That is the fastest way to dread what you are doing.

So, each day, if you have the privilege of time, dedicate an hour or as much as you can comfortably spare to broaden your knowledge.

Ultimately, you would want to liken your learning process to a marathon, as opposed to a sprint.

ROADMAP TO A LAND OF ADVENTURE

Having a roadmap is key. You should know the path for your journey. Where you are, where you intend to be in the short term and where you plan to be in the long term.

Figure out what aspects of programming you would love to tackle. What things measure your strengths and which ones show you where you are lagging behind?

There are generally two routes you can consider:

  • Front-end web development. Here is a YouTube video that succinctly describes this concept in a summary.

  • Back-end web development. Here is yet another YouTube video to help you understand what this entails.

OR…

You could combine both and learn full-stack web development. Sounds cool but again, that’s too much commitment for a beginner. If you are looking to work with startups, it wouldn’t necessarily be a bad idea as full-stack web developers are mostly sought out by start-ups and/or medium to small-scale companies where staff numbers are not as much and delegation of work is limited to a small number of employees.

Where to get Free Learning Resources

Welcome to the internet age where almost any information you are looking for can be found online. For FREE. That’s right, even learning that is as intense as programming. There are a lot of websites where you can go from learning the most basic programming concept to mastering them – depending on your commitment and ability to grasp information.

Here are a few of the most recommended platforms where you can find full curriculums of learning:

There are a bunch of other websites where you can learn just about any web programming concepts for free. You just need to google them.

Hack it even further

These are a collection of habits you can build that would help you make the entire process of learning tolerable. And though you will not need to totally immerse yourself with learning basic concepts after landing your first tech job, the process of learning will not stop. These constitute the things you can add to your artillery of to-do list so that consistency becomes a daily routine for you.

Effective time management

Certain tasks require a repetition that is done on a regular basis. Learning on your own can be challenging because you are the author of how and when you study. There is also the question of how long you will need to study for so that it is adequate to learn something new and not too much that it becomes something you would dread.

As such, setting up a quiet time each day that would see you use your time efficiently is something you should consider. If you have your hands full during the day and are too tired to dedicate any time to study at night, a better alternative to this would be to wake up a bit earlier in the morning.

Spaced repetition and active recalls

There is a unique way to enhance your learning process – without the need to learn everything from scratch each day. This is spaced repetition. Spaced repetition has been shown to be one of the most effective ways of making your studies fun and unforgettable. It involves short sessions that are spaced so that learning is broken down into segments. You can learn more about it here.

When you learn using spaced repetition, you will study less but retain more information than you typically would if you were to reread a chapter every time in order to remember it.

An effective tool you can use for this is ANKI. It is a software you can install on your computer and you get to set up questions and answers on a deck of cards that you will create. While using spaced repetition, you can incorporate active recalls as well. Simply look at this as the Feynamn method. This is where you flip the original learning process on its head and explain in simpler terms what you have just learned. It is like explaining complex contents to a 5 year old. Rubber duck debugging might come into play for your active recalls as well.

Frustrations management

BOB:

For me, managing frustration is learning that “banging your head against the wall hurts” and clients aren’t really impressed with “how far a laptop can fly.” Knowing that my code will rarely work the first time is simply a first step in a larger process of understanding how to get better and improve not just the code, but your processes as well.

JACK:

You will get pissed. Not once, not twice, but a whole lot. Learning to code and the urge to smash your PC or keyboard against the monitor are synonymous. But again, choose peace.

When you stumble upon a programming concept that’s too difficult for you to traverse, take a step back and get away from it for some time.

Your brain might be fogged at the time. This builds frustration towards the thing you are unable to get a hold on. At such moments, this might be your cue to log off for a bit. Get away from the screen. Take a walk, talk with someone about something unrelated and give your brain some time to adjust. Leon Noel usually says “there is no need to bang your head against the keyboard. “

After taking a break, so many people find that they get a sudden bout of clarity when they return to a coding challenge. And if you still don’t find a solution, break down the problem to little chunks and work your way up from there.

Kenan Azizli mentioned one way he effectively deals with burnout and learning frustrations is to have a go at a coding challenge with other people. This is one unique way to look at it, as there are several people who can vividly explain a concept to you in ways you might not necessarily see from your point of reference.

Kenan Azizli is a Software Engineer transitioning into the tech industry from being a Financial Analyst. They are also the host for chatwithhackers, a podcast that discusses everything related to tech.

Another useful insight was given by Eno.

On being asked how they deal with burnout, they gave two responses.


"1 - C O M M U N I T Y

Luckily, the people I met in the 100Devs community have been such a great support system. Knowing that I am not alone when it comes to burning out is such a relief. I have made good friends throughout my journey that I will get DMs here and there asking how I am doing when I don't show up for a couple of days.

Burnout is going to hit anyone who decides to take coding seriously. There are just too many things to learn and I praise people who can go through the hardships alone. But I know I am not one of those people, so I rely on my friends when the difficult time arises. Of course, I do the same when I feel like one of my friends is showing signs of burnout. A simple "You got this" can really make a difference.”

2 - Reminding myself that progress is progress and appreciate yourself

The deeper we dive into code the more things we want to accomplish, at least for me. I have found myself setting a standard on how much I need to work every day (e.g. 3~5 hours at least of learning or creating projects). It's good when I am consistently meeting my standards, but when I don't, I feel terrible and it's a domino effect. It prevented me from feeling good about my accomplishments because I didn't complete task x or y. But that shouldn't be the case. Instead of focusing on what I didn't complete, I should have focused on what I did and the progress I made.

So I try to pat myself on the back for the progress I made that day, even if it's only for 30 minutes. Because at least I am 30 minutes closer to my goal than I previously was!”


Eno is a Software Engineer and a self-proclaimed pomodoro king. For the obvious reason that they effectively break down their studying into chunks that can go on for hours unend.

At the end of the day, coming to terms that frustration will countlessly be a part of your learning process is something you have to embrace. It would happen again and again. How you intend to respond is what will determine how less hectic it would be in the future.

Motivation

BOB:

My motivation comes from a simple love of writing code and a passion for solving problems. I often tell people that if you are here just for the money, you will end up being miserable. Find your passion, lean toward your interests … you will get a much better return on your investment.

JACK:

Having an insurmountable plethora of motivation will get you through your learning process from one stage to another. Ask yourself why are you doing what you are doing? Is it to be able to afford your dream job, your dream house, your dream vacation, a way to help other people automate difficult tasks?

Whatever your reason, it is valid if it pushes you to become a better version of yourself.

Brittany Keith had this to chime in with regards to what motivates her.


“That probably sounds silly, but I've started thinking of coding as modern day magic, rather than just something I want to do to get $$$. Thinking about all of the cool stuff I will be able to build once I am proficient has been more motivating than just thinking about a high salary.”


Brittany Keith is a UX Designer & Web Developer who’s passionate about education, problem solving, and usability and naps.

It is clear that not everyone is entirely incentivized to learn coding for the sheer benefits alone. Like Brittany, there are a lot of other enthusiastic programmers who approach coding and all its perks as something to further their philanthropic cause.

Kenan Azizli also had this to add in terms of motivation;


“I have tried to learn to code for the last 9 years. Every single year, I would purchase some great programming books and even switch my favorite Windows devices to Mac solely because I thought only Macs could help me become the next Brin or Gates. The years passed and now I am 28 years old. Years will continue passing by, and one day I will be a 35-year-old Kanan. Now I have this choice, do I become a 35-year-old Kanan who is great at coding or a 35-year-old Kanan who is still thinking about starting to code? The choice is obvious. This is what helps me wake up in the morning and start coding.”


The reasons vary for a lot of people. And whatever those reasons are, there is a vital trait that is needed to make ones drive a solidly tied knot that is devoid of inconsistency, and that, is discipline.

You have to imbibe and imbody a discipline that helps you keep going when all hope seems to be lost. When none of the learning process seems to make any sense and when the feeling to give up is treading in the realms of quitting, discipline is one thing that will help get you through the trough of sorrow. Discipline gives you the boost to go hard on your goals. It helps you hold yourself accountable. That way, others will not do it for you.

Finding a Community

BOB:

I am co-authoring this article with a #100Devs Bootcamp member. I know that Jack talks about who and what they are in other parts of this article. However, I want to point out here the amazing community that I have watched come to live and evolve. This is a diverse group of people (in the thousands) from all over the world that simply want to learn, grow, and improve their lives. I have NEVER seen a community self-evolve the way this one has into an amazing, supportive, group of friends from all walks of life.

Having a community is critical; the network and support can be critical to your learning process.

JACK:

Community is everything in terms of coding. You just can’t comfortably do it on your own. On the off chance that you do attempt doing it on your own, well... here is a fair warning... it is going to be extremely lonely and difficult. Having a diverse range of devs to talk to cushions the blow in terms of the frustrations you would likely face. Earlier in this article, Eno mentioned how having a community has helped them keep showing up.

There are a lot of other communities you can find in your vicinity and online with regards to like mindedness and general support. Communities help you get in touch with people who are engrossed in the same thing as you are and those who understand the challenges you have as a software developer. You can collaborate on communities, attend hackathons together, solve different coding challenges together and recommend each other to jobs.

Another reason communities are greatly helpful is that they help you deal with imposter syndrome. This is a feeling of inadequacy and not feeling good enough. A lot of developers and software engineers deal with this regularly. It is not exclusive to beginner software engineers either as senior software engineers also deal with it. Although, not as frequent. More on the topic can be found here.

Networking

BOB:

Getting a job without networking is simply a numbers game. How many resumes you submit can directly impact the number of job offers you get over time … but there is no guarantee that it will be a job or company you are interested in. Take the time to learn to network properly so that people in the industry know who you are and what you are interested in. When the time comes to look for work, it’s amazingly helpful to have that network in place.

From my perspective, having that network also provides insight into what the industry is doing, what the trends are over time.

JACK:

This is actively putting yourself out there in the midst of other people who share the same profession or passion as you. Networking can introduce you to a whole other side of software engineering or coding in general. If you are good at it, you get to meet and communicate with folks in the industry who are passionate in helping others attain certain life and personal goals.

If networking is not a strong suite of yours, you might want to dedicate some time to understanding people. A good resource is Dale Carnegie’s - How to win friends and influence people, self improvement book. It has the ins and the know-how of interacting with people in a way that is not pushy but modest.

A few places to start your networking could be via meetup. It requires an online registration. However, meeting up with folks could be in person or online.

Another great platform to meet and communicate with people is Lunchclub. Unlike meetup, meetings happen strictly online and you get to set up and communicate with people who share the same interests and passions as you do.

Build Stuff

Finally, when learning, feeling the need to over compensate your learning process and master every little thing becomes something you struggle with. If you can, and ideally, you should approach your learning by building new projects.

This is the fastest way to maximally grasp most of the things that you will be learning. This way, you are fully implementing what you are learning and watching it come to life as opposed to learning without practicality and getting stuck in what is referred to as tutorial hell – learning and learning non-stop without the need to get any real project up and kicking.

Alan Vila and I had an extensive coffee chat about project based learning. He is a great advocate for project based learning as this was how he was able to successfully attain his learning and software engineering goals.

I couldn't agree more as this is one route you can take to make your learning stick faster. It is only by practically applying knowledge you have learned that the concepts start to make sense to you.

You can approach building projects on your own by getting right to it while using google to build up whatever you are looking to build from start to finish. Or, you could follow along with coding tutorials on YouTube. The downside to this is that it will not be as mentally stimulating as solely building something on your own.

conclusion

We have made it to the end.

The major takeaway is that whatever you do on a regular basis adds up over time. Ideally, it should be your efforts towards becoming a software engineer - a software engineer that knows their whys, knows how to make routine a habit, has a passion to build things via code, can effectively work within a team, while also learning and sharing ideas in the process.

Finally, I’d like to appreciate Bob for gracing this article with his years of knowledge. He has been both a friend and a mentor.

Whenever you can, or if you ever need to talk with a Senior software engineer that is brimming with industry knowledge, expertise, and an experience that is older than I am (with regards to growth in the tech industry and all things that pertain to life in general)

I urge you to reach out to Bob via
Bob.ts Twitter or one of his many socials. I am confident he’d be glad to show you the ropes and offer you some lifetime tips.

Go ye forth and prosper.

Prosper with vigor and an eagerness to watch yourself succeed in a terrain that is difficult but not too high nor steep for your goals.

Prosper my kind friend.

Top comments (0)