From Teacher of Many to Teacher of One – Tips on How to Be a Self-Taught Learner
Tags: beginners, productivity, webdev
Published: 2022-01-25 20:11:52

### A Little About Where I Come From

I’ve always loved to learn.  I want to know what makes the world work and why. There are so many interesting and beautiful things in our universe:  Music, Language, Mathematics, Spacetime.. And I've wanted to learn about _all of them_! Well, now I’m in my 30s and I can say that I _have_, in fact, learned about all of them. Well, not _everything_ about **all** of them… but I have spent a considerable amount of time learning about each one, and most of what I know I have learned _on my own_. 

For the past year and a half, I have been dedicating my time to being a _self-taught Software Engineer_. I left my job as a high school computer science and mathematics teacher here in NYC to pursue a change and start a new career. After teaching people how to learn for many years, and teaching myself as well,  I wanted to share some strategies I’ve used that have helped me be more efficient and productive as a self-learner. I know some of this information may seem intuitive, and most of it should, but I’ve realized sometimes you just need to hear someone else say it. 

I've found that a lot of the skills I've learned as a teacher have been transferable to being a software developer. From understanding how to manage your time appropriately, to being able to plan out projects and ideas, or being consistent with your work, most, if not all of these skills I've had to use somewhere in my teaching career and I'm using them again now in my journey to become a software developer. 



#### Here are my tips and tricks for being a Self-Taught Learner:

---

### Time Is Your Friend
One of the most important concepts I’ve realized about learning something new is that **time is your best friend**. We need _time_ to **retain** the information we’re trying to learn and ultimately be able to _recall_ it. As we learn new concepts or ideas, new connections between neurons in our brain are being formed.  Every time we reinforce our learning (reread a concept, practice more code, watch another tutorial, etc), these connections get stronger and the impulses sent become more and more efficient. Compound this effect with a healthy diet, lots of sleep, and – you guessed it – plenty of time! And before you know it, you’ll have learned something new. 

Take a moment and think to yourself about something you’ve learned in the past: riding a bike, tying your shoe, learning to drive, etc. Were you able to do it perfectly on your first try? For most of us the answer is most likely no. **Learning how to be a developer is no different**. I’ve seen many people (including myself) start to learn a new topic and think: “_I’m never going to understand this_,” or “_It’s just too difficult!_”. **That’s okay!** It’s okay that it’s difficult. It’s okay that you don’t understand it. I promise you that if you go into it with an open mind, a positive attitude, and just give it some _time_, **it’ll click**. Pieces will start to come together, ideas will start to make sense, and you’ll even start to remember how to do different tasks – It’s really quite amazing. 

###Consistency Is Key – Show Up!

If you combine time with being _consistent_, you can be unstoppable. Okay, maybe not unstoppable, but you can definitely accomplish a lot; I can attest to this first hand. Over the years, I’ve taught myself how to play several instruments, how to speak two foreign languages, and now, I'm teaching myself to become a developer. Any of you who have learned a new skill can attest to how much practice is required to improve that skill. You wouldn’t expect to become a professional athlete by skipping practice, the same goes for becoming a professional developer – you have to show up, and you have to put in the work. 

When we are consistent, we allow ourselves to create good habits. We reinforce these good habits by doing them over and over, allowing them to become part of our daily or weekly routine; after a couple of weeks, it doesn't really feel that difficult anymore. It's sort of like going to the gym – it's really tough to motivate yourself at first, but you always feel great after going and eventually you don't know how you lived without it. Sometimes we fall off the wagon, and that's okay too! Don't beat yourself up, just get back on.


###Planning With Purpose
    
Planning – here’s a tool I wish I had learned earlier in life. I didn’t fully realize the benefits of planning until probably half way through college; and what a game-changer! Who knew that if you took some time, brainstormed, and then organized yourself, it would make a task that much easier. Taking a project and breaking it into **small, achievable steps**, will really help you feel like your goal is **_attainable_**. 

Let’s say your goal is to build a blog site (or whatever the project is you want to build). How would you go about it? Sure, you could sit at your desk and just start hacking away at it, but this can easily start to feel overwhelming. You may not know where to start, or which order to build your components in, and ultimately, avoid doing the task all together. 



Here are some steps to help you alleviate this. On your current or next project, I want you to try the following:

1. Open up a Google Doc (or ToDoIst, or some other equivalent note taking app)
2. Write out an overview of what your project or task will entail – small paragraphs or bullet points are fine. For example:
     1. **Paragraphs**
![Paragraph Format of Text](https://community.codenewbie.org/remoteimages/uploads/articles/qxm2b5a1f2hs75779yqh.png)     
     2. **Bullet Points**
![Bullet Point Format](https://community.codenewbie.org/remoteimages/uploads/articles/1k8menqhkzdu23o9k14s.png)
       
3. Then, Write down each little task that needs to be done; even if that task is something as simple as “open up VS Code.” Here’s an example for creating a Flask API:
![List of Tasks](https://community.codenewbie.org/remoteimages/uploads/articles/1c9syc5cwex8brwgp0ge.png)

There is something so satisfying about crossing a task off a to-do list. You feel like you’ve accomplished something and it's very motivating. By breaking your project down into small steps, all you have to do is open your computer and **_just do the first one_** – and there you go!, you’ve accomplished part of your project. Now, do the next small step, then rinse and repeat. When you come back to work on your project the next time, you can pick up right where you left off. Also, you will be able to see exactly what you have done already, reflect on how that went, make adjustments if needed, then keep moving down the list. 


### Manage Your Time
Ok, so we’ve set out a couple weeks/months (years?) to learn a new skill, we’re ready to be consistent, and we’ve planned out all the steps that we need to do for our project – now what? Well, when exactly are we going to do all of these things? Three times a week? Every other Tuesday?.. We need to **_make a schedule_** for ourselves. Making a schedule can have a variety of formats depending on how much structure you want/need to have. 

If you need a lot of structure, an **agenda** can be very useful (See example below). This type of format ensures that you spend a certain amount of time on each task. Also, it’s rigid, much like if you were in university or high school – you know exactly where you need to be and when you need to be there. Of course, you can always allow for some flexibility and give yourself a couple minutes or so on either end of any of the time blocks. 

![Picture of Schedule](https://community.codenewbie.org/remoteimages/uploads/articles/qvekhvbcymkyy02a9z9b.png)
If you don’t need as much structure, you can try creating **daily goals**. This strategy definitely requires a bit more discipline and time management skills. For my personality and needs, I find that this strategy works best for me and I typically create **3 - 5 goals per day**. I usually start on the **_most difficult one first_** and continue working my way down the list from there; following with the next most difficult, etc. Depending on what you have going on that day, it’s easy to rearrange the order in which you complete the tasks. Maybe you knock out 3 of them right away, creating a sense of accomplishment so you can start your day feeling good. Then, you're able to spend the rest of the day working on the bigger tasks knowing that that’s all you have to do the remainder of the day. There is a lot of flexibility and freedom to be had here, so play around with it and get them all done! 


###Don’t Be Afraid To Get Your Hands Dirty

Now it’s time to roll up your sleeves and get your hands dirty. You know exactly what you’re going to do, how you’re going to do it, and when you’re going to get it done – it’s time to start learning and time to start **_coding_**! 

I really want to emphasize the importance of just opening up your IDE of choice and **_Start. Building. Something._** I can’t express enough how important this part is; I will admit, however, it did take me a little while to realize this. One of the more difficult parts about learning on your own is that you don’t have anyone guiding you, telling you when it’s time to move to the next step or that you're going in the right direction. And it's easy to fall into the trap of watching tutorial after tutorial, or reading book after book. While these things are very useful, and I still use them, the amount I’ve learned from actually building applications, and more importantly **_making mistakes on them_**, far exceeds what a tutorial has taught me. I know you’ve probably heard this from everyone because I have too. Now, I believe them, and I hope I can stress the importance to you as well. 

Also, don't be afraid to start over or backtrack in your project via Git (and **commit often**!). While it may seem like a waste of time, all you're really doing is reinforcing what you've learned already and allowing yourself to see where you've made a mistake. I have definitely gotten stuck in a project before because I was "_just trying to get it done_" instead of actually **taking the time to understand** what I was working on, only to find out when I ran my code that there was some error and I couldn't figure out why. Had I taken my time, ran and tested my code more periodically, and committed more frequently, I would have spotted my mistake and wouldn't have needed to start my project over. It was unfortunate, but I did learn a lot in the process. 

### Resources Are Important

There are so many great resources out there – free and paid. Most of the information  you can get for next to nothing, if not completely free; however, it's important to do your research on each of the resources  and understand if it's worth your time and money. Chances are that someone has reviewed this resource you're interested in on one of the many forums that exist today. Take some time to understand what each one offers first and try to make an informed decision. That being said, I wanted to **share some resources** that I've been using to help me learn on my own:

- **Udemy**  
     - Most of us have heard about this site. They always have sales, just be patient and you will find it. Or create a new account because it seems that they are always offering cheap courses for new users. 
     - One instructor that I've used and really enjoy (he's very funny and entertaining, talks about his cats a lot) is this guy **Colt Steele**. I've taken two of his courses for both **_Python_** and **_Web Development in JavaScript_**:
          - [Modern Python 3 Bootcamp](https://www.udemy.com/course/the-modern-python3-bootcamp/)
          - [Advanced Web Developer Bootcamp](https://www.udemy.com/course/the-advanced-web-developer-bootcamp/)
     - Also this Instructor **Stephen Grider** for learning **_React_**. He's very smart and teaches well. 
          - [Modern React with Redux](https://www.udemy.com/course/react-redux/)
     - I've also taken a couple of courses in Portuguese. I've been learning Portuguese so it helped me immerse myself and learn some new skills. For those of you who are interested, I really like this teacher **Leonardo Leitão**. Very easy to follow, explains very well, moves at a good pace. 
          - [Curso React & Redux: Fundamentos](https://www.udemy.com/course/react-redux-pt/)
          - [React Native: Desenvolva Apps Nativas](https://www.udemy.com/course/curso-react-native/)
          - [Aprenda Flutter e Desenvolva Apps](https://www.udemy.com/course/curso-flutter/)

- **EdX/Coursera**
     - EdX was where I first learned how to code. I took an MIT course for intro to Comp Sci in Python. I've taken parts of other courses there, but this one is the one that stuck out to me. If you're just beginning, I definitely recommend it. 
          - [Introduction to Computer Science and Programming Using Python](https://learning.edx.org/course/course-v1:MITx+6.00.1x+2T2017_2/home)
     - Coursera is great too. You can audit the courses and get all the information for free, you just can't do any of the assignments or quizzes unless you pay for the class. I've also taken parts of a few different courses here. But, I did complete one of their specializations which I thought was awesome. Built some interesting projects, made some games, and most importantly learned a lot! 
          - [Fundamentals of Computing Specialization](https://www.coursera.org/specializations/computer-fundamentals)


- **Books** 
     - I feel like now-a-days people don't like to use books to learn. I, however, find books to be invaluable, especially as a reference. You can usually find PDFs of books online if you look hard enough. But when I find a book that I think is really useful, I'm happy to buy it to contribute to the author. Here's a couple books I've read and used so far:
          - [Flask Web Development](https://www.amazon.com/Flask-Web-Development-Developing-Applications/dp/1491991739)
          - [Learning React](https://www.amazon.com/Learning-React-Modern-Patterns-Developing/dp/1492051721)
          - [Learning Web Design](https://www.amazon.com/Learning-Web-Design-Beginners-JavaScript/dp/1491960205)
          - [Grokking Algorithms](https://www.amazon.com/Grokking-Algorithms-Aditya-Bhargava-audio/dp/B07HQYBNYK)
          - [Grokking Deep Learning](https://www.amazon.com/Grokking-Deep-Learning-Andrew-Trask/dp/1617293709)
          - [The Algorithm Design Manual](https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202/)
          - [Learning React Native](https://www.amazon.com/Learning-React-Native-Building-JavaScript/dp/1491989149)
          - [Android Programming with Kotlin: The Big Nerd Ranch Guide](https://www.amazon.com/Android-Programming-Ranch-Guide-Guides/dp/0135245125)
          - [Flutter Complete Resource](https://www.amazon.com/Flutter-Complete-Reference-Create-beautiful/dp/B08KH3R9SY)

- **Websites**
     - _Documentation for the Technology_
          - Sometimes these are difficult to read, but being able to understand them and utilize them is a vital skill of being a developer. 
          - MDN is basically the handbook on Javascript if you're interested in web development.  
          - Often the solution you need is in the technologies documentation, written in a very formal manner. If you have trouble understanding it, look at one of the many forums. 
     - _Stack Overflow_
          - I use this forum almost daily, maybe even hourly. Another invaluable resource. A community of learners helping each other completely for free. When you get better, you can contribute as well. 
          - Almost any time you google a question, chances are someone has probably asked that question already on Stack Overflow and people have responded and posted solutions. 
     - _Other Developer's Blogs_
          - Just as you're reading this article, I have done the same with other developer's blogs and will continue to do so. I've learned that there is a whole big community of developers out there willing to share what they've learned and most of it is completely free.
     - _Geeks for Geeks_
          - I use them often as well. They have a lot of good explanations with examples for basic coding concepts. 
     - _Yak Shaving_
          - My partner taught me this phrase and I think it is hilarious. It basically means scouring through the internet until you find a solution. When in doubt, Google it. If you can't find it on one of the previously mentioned sites, there is probably another site that has answered the question somewhere.