📚 How to get out of “the endless circle” of self-study programming?
Tags: productivity, beginners, codenewbie, dx
Published: 2020-01-05 17:34:19

## The story, which you have heard, but not listened 🤷‍♂️

I want to start with some true story from myself. Just because I can!

A few years ago (4 years, to be exact), when I wanted to learn Python from scratch (as my third programming language), I was read huge books, watched many online courses, subscribed to most relevant YouTube channels and a lot of dev podcasts and code streaming guys… and I faced extremely close with this feeling.

> I’m not psychologist and don’t know “how they calling it” (please forgive me), but I will be call this feeling “**the endless circle**” or TEC (for a short).

At that moment, I already knew: modern JavaScript, PHP, HTML+CSS, had practice into UI/UX and did pet & commercial projects on that web dev stack for a long time (since 2007 year).

But my “Python’s closed-loop” lasted about 6 months, for which I did not write a single line of code by myself — only retyped what online coaches, bloggers, books authors, streamers, etc… gave me.

> Only consumption, no independent practice.

![Photo by Atlas Green on Unsplash](https://images.unsplash.com/photo-1502322386937-39e80cbbb461?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1489&q=80)

## So, what’s TEC actually? 🤔

It can be described with just one phrase:

**The more I learn the ins and outs of new thing (programming language for this case), the more I’m drifting from its actual use in practice.**

> No, it’s not [Impostor syndrome](https://en.wikipedia.org/wiki/Impostor_syndrome) or something similar to.

TEC is more like a closed-loop mode. You start study of something new, but you do nothing, except start an another yet study circle! And again and again…

> Such as “well, look at another video now, but don’t even open your IDE, just see how I write the code on video” and etc.

### I know, what do you think now

It’s something, like “OMG, another guy with super best practice to learn how to code…”. And you’re right, that’s it! 👌

But ask to yourself first: “why I start reading this article?”. If answer is different from “I don’t know” — you’re in the right place at the right time!

Following the rules below — helped me then and helps right now when I decided to add Go to my “Pantheon of programming languages”. I just follow these rules, when I start to “dig in” so deep and feel rapid onset of TEC.

![Photo by Nghia Le on Unsplash](https://images.unsplash.com/photo-1452697620382-f6543ead73b5?ixlib=rb-1.2.1&auto=format&fit=crop&w=1350&q=80)

## Rule #0 → Stop thinking of all around, let’s do the fu***d “Hello World” by yourself right now!

No matter what programming language you are trying to learn, if you are in the endless circle, then stop right now!

> Seriously, watching “another video” — won’t run anywhere!

### Steps to repeat

- ✅ Close all of your “major” browser tabs (like Netflix, Facebook, Instagram, Twitter, etc) and browser itself. 
- ✅ Put “extremely interesting” book aside.
- ✅ Pause podcast at “most interesting place”.
- 👌 Deep breath.
- 🎯 Open your favorite IDE.
- 💭 Remember basics and syntax of programming language.
- 💻 Code your own simple program (for example, main function take 1 argument and return it into a string “Hello <argument>”).
- 😀 Smile to yourself.
- ⚙️ Write some simple test for this simple function (for example, test your function for return a string “Hello World”, if you give “World” as argument).
- 🔗 Push this code to your git public repository with a message “Initial commit for breaking TEC”.

**Congratulations! 🎉**

You have taken the first and most important steps to get out of TEC. There are many more interesting things ahead of you, but the best you can do now is to continue reading this article!

## Rule #1 → Found what you want and… code it!

While you still have warmed up IDE from the previous rule, now is the time to start your new “lifetime project” (the next day… maybe two). Moreover, this project should solve some of your current problems right now.

> Start with a simple thing and gradually add new features!

It could be anything: TODO list, fitness tracker, personal website, CLI app, etc. But algorithm for approaching this project should be like this:

- ⭐️ Make a minimum viable product (MVP), based on your knowledges and most popular frameworks/libraries/packages in current programming language.
- ✏️ List all that you don’t know how to do, but need to make.

### Real example

I self-study Python and want to tell about this awesome programming language to Internet. Best way to solve this — is personal blog. So, I need a web framework! 👋

After looking for 5 seconds, I found out that most popular web framework is Django. Let’s imagine, I read the official guide in 10 minutes and now I know how:

✔️ Install Django from PIP.
✔️ Create first Django app with CLI.
✔️ Configure DB and make first migration.
✔️ Create new models and routes.
✔️ Create views and templates.
✔️ Build functions for Add/Edit/Delete posts.

Ok! I just do everything that my knowledge and a piece of documentation at the moment allow. Because, it’s all I need for MVP! 👍

Other things, like: template’s design, cross-posting link to social networks after create new blog post, Disqus comments, add cute “About me” page, configure meta tags for SEO, build RSS feed and many-many more — is what I put into my list of “unknown functions for later research”.

## Rule #2 → Do not understand something — this is normal! It’s bad not to ask more experienced people

We live in a world where every second the amount of information increases at an incredible rate. What was considered necessary knowledge at “the dawn of the computer era“ — now you can google in a couple of seconds and absolutely not keep in mind!

So, why not start writing code the way you can understand right now and gradually improve it with the help of more experienced people from the Internet?

> Constantly writing code — is your goal at this moment!

### Steps to repeat

- ✅ Write code.
- ⚠️ Write tests for your code.
- 💬 Ask community of your programming language about problem points in your code or find similar questions and see how other people solve these problems (GitHub, StackOverflow, Dev.to, etc).
- 🚀 Try solution on your code.
- ⚠️ Write tests for your modified code.
- 📝 Record solution in your knowledge base.

> You still don’t have a knowledge base? No problem!

## Rule #3 → Create your own knowledge base for a programming language

And it’s not a joke. Make yourself a good habit: write down everything that helped you solve a particular problem!

It can be absolutely any offline/online service, but main points are:

❗️ Access to recorded knowledge 24/7 and 365 days in year.
❗️ Easiest way to quickly record a new knowledge.

## Rule #4 → Believe in yourself and your knowledge, but not too long!

When you faced a problem — try to solve it yourself. Rely on knowledge from your records in the knowledge base and what you remember from online courses/books/podcasts/etc.

But, if the problem is not solved in the first 20…30 minutes, then it’s better not to continue — ask people from the Internet!

> Wasting time on nothing — this is the last thing that will help you. Sometimes, it’s better to retreat.

![Photo by Jesus Kiteque on Unsplash](https://images.unsplash.com/photo-1489844097929-c8d5b91c456e?ixlib=rb-1.2.1&auto=format&fit=crop&w=1352&q=80)

## Final words

Look at yourself in the mirror. Yes, YOU did it! Live a little with this sense of freedom from the endless circle of self-study programming.

And now — don’t stop! World always needs new heroes... maybe it’s you?!

### Photos by

[Title] Atlas Green https://unsplash.com/photos/VGOiY1gZZYg
[1] Ben Blennerhassett https://unsplash.com/photos/G8rRItjrwkA
[2] Nghia Le https://unsplash.com/photos/V3DokM1NQcs
[3] Jesus Kiteque https://unsplash.com/photos/wn-KYaHwcis

<a name=""></a>
## P.S.

If you want more articles (like this) on this blog, then post a comment below and subscribe to me. Thanks! 😻

And of course, you can help me make developers' lives even better! Just connect to one of my projects as a contributor. It's easy!

My projects that need your help (and stars) 👇

- 🔥 [gowebly][gowebly_url]: A next-generation CLI tool for easily build amazing web applications with Go on the backend, using htmx & hyperscript and the most popular atomic/utility-first CSS frameworks on the frontend.
- ✨ [create-go-app][cgapp_url]: Create a new production-ready project with Go backend, frontend and deploy automation by running one CLI command.
- 🏃 [yatr][yatr_url]: Yet Another Task Runner allows you to organize and automate your routine operations that you normally do in Makefile (or else) for each project.
- 📚 [gosl][gosl_url]: The Go Snippet Library provides snippets collection for working with routine operations in your Go programs with a super user-friendly API and the most efficient performance.
- 🏄‍♂️ [csv2api][csv2api_url]: The parser reads the CSV file with the raw data, filters the records, identifies fields to be changed, and sends a request to update the data to the specified endpoint of your REST API.
- 🚴 [json2csv][json2csv_url]: The parser can read given folder with JSON files, filtering and qualifying input data with intent & stop words dictionaries and save results to CSV files by given chunk size.

<!-- Footer links -->

[gowebly_url]: https://github.com/gowebly
[cgapp_url]: https://github.com/create-go-app
[yatr_url]: https://github.com/koddr/yatr
[gosl_url]: https://github.com/koddr/gosl
[csv2api_url]: https://github.com/koddr/csv2api
[json2csv_url]: https://github.com/koddr/json2csv