My Story

Image for post: My Story

Imagine an average guy in his mid 20th, bad in math, no Computer Science degree, or any previous programming experience, without knowing anyone who was a programmer who even barely fluent in English. How it even possible that he can ever become a Software Developer? I am glad you asked, I think I have an answer for you.

I wrote this post to share my path towards becoming the Self-Taught Remote Software Developer at almost no cost. I described what I was doing, thinking, and believing in. I wrote about the successes and failures. All the path I went through I tracked via a time tracker and I will include screenshots so you can follow a timeline. If you consider becoming a self-taught or who just curious about what It takes to become one, you should read it. I hope you will find it helpful. Enjoy the journey!

That's it, I quit

The beginning of my journey. I was 23, I had an unrelated to CS university degree, I was not good at math, barely fluent in English, overweight, fatigued. I worked on a job where 14h working day was expected. It was not an enjoyable place to work. It became clear that there was something I need to change in my life.

I took all the bravery I had and quit this job. Then I took a 2 week trip with my friends to middle Asia to recover and clear my head. Before quitting, I noted a couple of prospective things I can do next to keep my life moving in a way I imagined. So when I returned from the trip, I started to put my head around the notes to choose my next step. I did not understand yet whether I was scared or excited about my future.

Here is the chart showing what I was doing and how much time overall I was investing in self-education and other online activities per week during 2015. There will be more such charts further.

Activity chart

Note that this data does not include the time I was spending reading books, writing notes, rereading the notes. So the actual time was spent in my case is 10-20% higher than it is logged in the time tracker.

Ask for help

I knew that to jump into a new career path I need to sustain myself while I acquire all necessary skills. Although I had some savings, I realized that they will not last long. The problem was not easy to solve. On the one hand, I could find a job just to pay the bills and use free time for learning new skills. On the other hand, I could ask for help from my friends or family.

I decided to go with the second option. I asked my parents for help. But, there are a couple of things I made before and while doing that:

  •  I cut off all consumption habits. No parties, no unnecessary shopping, no eating out
  •  I started budgeting and tracking my expenses
  •  I started "budgeting" and tracking my time
  •  I described my plan and steps I was going to do
  •  I committed to doing an occasional part-time job in the construction site to get some cash

I did all I could to help myself first before asking for help. Now I was ready to take the next step, choose a career path.

Activity chart

I will become a great Software Developer 3D Modeler

There were a couple of the main criteria which were the most important when I was choosing the next career leap:

  • I should have been able to learn it at home
  • should have been remote-friendly, so I can work from any place in the world
  • It should have been related to creating things so I can feel the joy of creation
  • should have been something that I can do in case money is not a part of the equation.

I made research, matched all available options to my interests, and came with the following list: Software Engineer, 3D Modeling, and Digital Marketing. Since I was poor in math and the only association with it was Visual Basic class from school, I was not even considering Software Engineer as a valid option. And Digital Marketing was not in a winning position. I made the decision, I will become a great 3D Modeler!

3D Modeling start

Learning 3D Modeling

I was excited to have a key phrase of what I was going to do: 3D Modeling. The next step was to understand what was 3D Modeling, what professionals in this field were actually doing, what the actual job looked like, what tools they used, which skills I needed to become a professional, and where to master these skills. I needed a plan.

I went all-in into the planning process and made the 3D Modeling my "The One Thing". I started to search for the answer to all the questions I had. I scanned dozens of jobs in the field and wrote down the most common keywords which were used in the job description. Since I did not understand the meaning for even half of them, I started a dictionary to write what those words mean. I was moving slowly but surely.

After I deconstructed the profession into small parts I was able to define which skills I needed to have, which tolls I needed to master and which projects I should have been able to build to get the first job. But I had no idea where I could learn it all.

I started to work on the self-education plan. For each skill or tool, I should have learned I prepared the best material I could find. And I did it before actually starting to do any learning activity. The Idea was to prepare all necessary materials in advance so I was not distracted by deciding what to do next during the learning process. The really helpful platforms were: Udacity, Coursera, EDX, Lynda (Linkedin Learning now), Digital Tutor (acquired by Pluralsight), Cadlearning. I also found many project-based courses made by individual professionals. At that point, I had a plan and all the necessary resources to start my learning. It was an exciting moment, It was the showtime.

All-time I had was dedicated to learning and doing hands-on projects. I followed the plan thoroughly. After a few months of self-education I had some knowledge about 3D Modeling and even had a couple of projects:

The scene if for the yellow building I modeled from a 2D draft

There was still a long way to go to improve my skills. But I was really happy to have hands-on projects in place.

The Software Developer Awakens

While following the 3D Modeling self-education plan, an interesting thing happened. I was doing the Interactive 3D Graphics course in Udacity and I faced a module where I had to do some programming to complete one. Since self-education increased my confidence in learning things, I stopped the course and decided to give it a try and learn a bit of programming just to be able to fully understand the course. I dived into the web and found a course: Programming-Foundations: Fundamentals. Something clicked inside me when I watched this course.

The programming course changed my perception of what programming is actually about. I expected math, Visual Basic, or piles of other code with syntax no one can understand without a degree in Computer Science. But I got a clear picture, the essence of programming without any distracting details. And unexpectedly for myself, I was able to understand it. It was liberating. This course shook the confidence in future 3D Modeler inside me.

After I completed the Programming-Foundations course, I decided to give it one more try and took another programming course. This time it was An Introduction to Interactive Programming in Python at Coursera. And then, I took a part 2 of this course. Things started to get serious.

Start of Interactive Programming

These couple of basic programming courses I took showed me that programming is actually interesting and very practical thing. Instead of teaching solving nonpractical math problems with the programming, as it's usually done in a traditional education system, the authors showed how to create games.  I was fascinated with what I was able to do while going through these courses. Python as a programming language appeared to me so elegant and clean compared to many other ugly looking programming languages. It was a game-changer. This was the moment when my 3D Modeling career ended before it ever started.

Creating a plan for becoming a Software Developer

After I completed An Introduction to Interactive Programming in Python I was convinced that I want to pursue a programming career. I gracefully wrapped up all the ongoing 3D projects and courses and placed them and all related resources on my external hard drive. So I can share this part of my history with my kids in the future.

It was time to formulate a new vision of myself as a programmer and design the self-education plan which will lead me to it. The programming became my new "The One Thing". I needed a new plan.

After spending some time researching what jobs for programmers exist, I found that Web Development looked interesting. So I formulated my vision as: "I want to become a great Software Engineer who develops web applications which solve real-world problems". My goal was to do real-world things with programming. But I also knew that I needed to deeply understand the fundamental concepts behind Computer Science to be a skillful developer. I started by designing a list of academic courses.

I read at some point that you need to invest approximately 1000 hours in learning to acquire job-ready skills. I was not sure If it was true or false, but it was good enough to define a basic metric and make my progress measurable. And since I have tracked my time at that time, I decided to include this in my self-education process.

I really liked An Introduction to Interactive Programming in Python, so I decided to continue with them and included all the specialization: Fundamentals of Computing Specialization into my learning curriculum. 

I wanted to build a really strong theoretical foundation and even understand a philosophy behind the programming concepts. I wanted to grasp the core of Computer Science. With this in mind, I decided to incorporate a technique that served me really great. I was learning a similar or even the same concept, but from a different resource so I can see them from various perspectives. For this reason, I included MITx: 6.00.1x and MIT 6.00.2x from the edX platform to my list.

By the way, I was astounded when I found the online courses from the Massachusetts Institute of Technology. Before that, I thought that only the world's elite has access to the kind of education and that It was extremely expensive. But the courses were free! It was one additional prove the phrase: "Seek and you shall find".

While I had a good set of courses for building a good theoretical foundation, the second part of my self-education plan should have included practical courses where I could learn by doing. Otherwise, my brain would have got rid of the unapplied theory. But before that, I needed to define the skills and tools I need to learn.

I  analyzed dozens of job requirements for Web Developers and compiled a list of skills and technologies which I should have learned to become one. Same way as in the 3D Modeling case, I had no idea what most of the words in the list are actually meant. But at this point, I was comfortable to be in a situation when I know nothing. Self-education has given more and more confidence in the ability to figure out things. So I knew that I will figure it out.

After some time I had a decent self-education plan which, I believed, will serve me as a teleport to the Software Developer career. It was an execution time!

PS: A more detailed list of sources I used for my self-education plan is on the Learn page

Self-education framework

I defined my personal approach to do self-education. I was learning 6 days a week and I used the 7th day as my personal Management Day. Each day I split into 2 parts: mornings were for academic study so I have more cognitive resources to grasp new concepts, and afternoons I dedicated to hands-on courses as it required less cognitive power. At the Management Day, usually, it was Sunday, I used to reflect on what I was doing and how it was going. I also used it to measure my progress, analyze what I had done and what had not, and why, revise the education plan. It was also a time when I was planing the next week. I was something like Scrum or as I like to call it now: Self-Scrum. But I was not familiar with the concept at that time.

I had defined a couple of rules I used during the self-education. The first rule was the criteria that I was using to define If I was able to move further from topic to topic. I permitted myself to move to the next lecture video of the course only when I "Understand" the concepts which were explained in the previous video. Not to acknowledge, not to become familiar with, not just be able to pass the assignment but to deeply understand the concepts. Understand what is it, why it exists, and how it applied in the real world. While practicing this rule during the self-education, I realized what was wrong with the traditional education system.

I was moving slowly. When I said "slowly" I meant extremely slowly. As I mentioned in the beginning, I was barely fluent in English. So I had a couple of challenges, especially when doing academic courses. The first challenge was to understand many of the unknown English words. And the second challenge was to understand a computer science concept which was explained. Many of the few minutes long lecture videos had been taking a couple of days for me to understand the concepts and follow the first rule. Guess if I was able to meet a deadline for the courses?

The academic courses usually had deadlines that influenced the final score and whether or not I will get a certificate of completion. I was honest with myself regarding the pace I can move with. So I was not even bothering myself thinking if I was able to meet any deadlines. For this reason, my preference was to join courses on a free basis without paying for the certificate. While doing that the second rule for self-education originated: "No Certificate Driven Learning". This means that a deep understanding is prioritized over the desire to get a certificate. A University degree was enough for me.

I was following the self-education plan every day. As with all of us, there were days where I had some other obligations. In those days I should have spent at least 1 Pomodoro to reread the notes related to the material I was learning earlier and leverage the active recall principle. This was my self-education rule number three: "Do not break the chain".

Although I was moving slowly, the approach when I tried to deeply understand things and try them in hands-on projects before mowing forward was giving its rewards. I was getting a positive reinforcing loop each time I understood a new concept and applied it in a pet project. It was keeping the level of my motivation high most of the time.  It's was also continuing to solidify the confidence that I am able to learn anything with the right approach.

Things were not always smooth. There were a couple of courses and assignments I tried and dropped. For example, there was one Stanford course I tried to go through, but I was not able to complete it. My brain was not yet ready to grasp those concepts and I am sure the language barrier contributed to that. But even the part I was able to learn which was explaining the computational complexity was invaluable. Some courses had assignments that I was giving up to solve by without help. But when I was doing it, I searched for the solution and decomposed it into the smallest pieces which I can understand and fill the gap in my understanding. The gap was not allowing me to complete the assignment by myself. Approaching the failures this way taught me that if I can not do something, there is a gap in my brain's neural network which I need to fill in with the right information. And it is more important to find this information rather than mistakenly acknowledge incapability to accomplish the task. 

At this point, all I needed to do is just to follow the self-education framework and reach the 1000 hour checkpoint. And I did just that.

Daily patterns 2015

Daily patterns 2016

PS: A more detailed list of tips and tricks I was using during my self-education you can check-in How to learn page.

Looking for a first job

Approximately 10 months passed since I encountered programming for the first time and started the self-taught Software Developer journey. I had created a couple of pet projects and a couple of small commercial web sites using Python/Django/Flask and related technologies. When I was checking the latest time tracking report during my Management Day I was excited to notice that I reached the 1000 hour checkpoint. Time to find a real job!

1000 hours

In the area I was living at that time there were not many companies hiring Python developers. I found there only 2 job postings in the same city and around 5 postings countrywide. But I was so eager to start a career and build software at a high scale that I was ready to move to any other city or country if a company would not willing to hire me remotely. I was in a mental state when I was not able to imagine a scenario when I was not finding a Software Developer job. It was what Tony Robbins describes as "must"

I applied for the first company which was in another city. They get back to me really quickly. We went through an initial HR interview and then they offered to work on a test project as part of the tech interview. I was excited! I rolled up my sleeves and dived into the project. After some time I had a decent solution. Or I thought I had a decent solution, which I sent them back.

I eagerly waited to hear back from them.  They responded in a couple of days with an email that my skills were not as good as they needed for the position. They also highlighted the parts in my project assignment which I should have done better. It was really sad, but I knew that this was a market response that I had to respect, appreciate, and learn from. I wrote a follow-up email honestly describing how I was grateful for the opportunity and for the feedback they had given. Unexpectedly, they responded with the offer to improve my skills and come to the on-site interview in a near future.

This was a revelation for me. I learned that when you honestly appreciate the effort someone spent working with you even if it ended with a refusal, it can lead to unexpected positive results. I also understood that job-seekers are those who responsible for showing that they have the right skills to be valuable in the market.

I accepted this opportunity but I did not have a chance to use it. I applied to the next company from my list, which was the local company, and immediately get back from them.  I went through a couple of interviews and finally, I got my first job offer! I will never forget what I felt at that moment. It was just amazing to get the rewards of all the efforts I made. I was proud to get the offer as a self-taught developer. That day a new chapter of my life began.

Job offer

Where I am at today

Since I joined my first company as a Software Developer up until now, the self-education framework has been always a part of my daily habit. It is just impossible to stop once you see the power of this habit and the rewards it can give.

It's been a while I am in the industry as a self-taught developer and changed a couple of roles. I had to learn something new all the time. This is exactly what self-education was helping me to do back then and helping me to do today. Being self-taught gave me confidence in my ability to pursue any other career I may desire in the future. I have a framework that has proven its sustainability for myself and I definitely can rely on it. I believe self-education skill is a superpower, which can give you ultimate control over your life.

I also have had a privilege to accomplish one of the other main criteria I listen to myself when I was choosing my future career back then. I joined a distributed company that allows me to work from anywhere.

Currently, I continue enjoying the Software Developer career in a remote-first environment. And this is exactly what I was imagining when choosing which career to pursue after quitting my first job. During a year I enjoy spending time in different parts of the world while delivering solutions to the project I am working on. And I love this flexibility!

Summary

As you can see, it is not a story like "How to become a Software Developer and get the 6 figure job in 3 months" which may harass you on the web. This is the real story of how I was designing and building myself as a Software Developer via self-education, how I was starting from the bottom up, and how others helped me. The story of how I was trying things out and going through various obstacles.

I believe self-education teaches you to take responsibility for your education. It teaches you to use education institutions or sources as plug-ins for skills you want to master. It teaches you to ask the right questions. While going through this path I learned that no-one and nothing responsible for teaching you anything, regardless of how much money you paid them and what they promised you. It is you who responsible

I was thinking about which key takeaways to highlight here, but I decided to leave it to you. Since you are a unique person, some parts may resonate for you more than for another unique person reading this post in another part of the world. But I hope you have found something useful for yourself in my story.

Few more charts on my overall activities during 2015-2016:

All activities 2015

All activities 2016

PS: If you decided to become the self-taught Software Developer or already started and you need help and support. Be in touch, this platform is built to serve you!

Share this

Alex Maistrov

Compassionate Software Developer and founder of Self-Taught Remote. His mission to help people to become remarkable remote Software Developers and self-educators from anywhere and without any dept.

Related posts

Comments:

New Comment

    There are currently no comments