How I Figured Out Software Engineering Was The Path For Me Plus My Learning Resources.

How I Figured Out Software Engineering Was The Path For Me Plus My Learning Resources.

Resources That Have Helped My Learning Process

How did I figure out Software engineering was for me ?

It's been 6 months since I started self-learning and there has been a lot of trial and error but what makes this more interesting is, that I now do things I never thought I would do. I had made this question a priority, considering I had tried a couple of things prior that didn't work out so well for me. I needed to be sure this path was for me.

So, how did I figure out this was my path?

- I was focused on building a strong foundation and was not afraid to learn.

I realized software engineering was for me when I was no longer worried about how long it would take to get my first job, instead, I was concerned and focused on building the perfect foundation for my software development career.

This meant growing in all directions; technical, and soft skills as well as making changes to who I was. I had a bad mathematical and logical foundation, and I can't remember the last time I read an educational book before 2022. I started wanting to work on my mathematical skills to help with my logic ( If someone had told me I would at any point willingly try to learn math, I would have hissed and walked away).

  • I was not afraid to fail or start again

I used to be so scared of failing or having to start all over but then I started this journey and realized I was so focused on learning, absorbing, and being able to do it, that I didn't care how many times I had to start all over. Once I have to work with something and I am unable to, I tell myself I don't know it enough yet. I look for a new source and learn from scratch again. This has happened a lot while learning JavaScript and Data Structures and Algorithms. You need a lot of patience 😉.

  • Continuous Improvement

I made a research on the type of software engineer I wanted to be and the skills I needed to be the best at it and logical reasoning was a huge part that made me go back to learning from scratch 2 + 2 = 4 and yes! I started with addition and subtraction and worked my way up from there. I played sudoku daily to help my logical thinking. I also took multiple logical reasoning tests until I got good scores. I took classes to improve my soft skills until I was no longer scared to talk, own and lead.

- I stopped being bothered by pain

Pain is not fun for anyone but a painful technique is a more effective technique. I can bear any pain as long as it has meaning. The painful process of debugging and finding solutions to new problems has led me on a wild chase for answers, through which I have learned things I didn't even think I needed and found patterns, and mastered skills. The satisfaction that comes from the result makes it all worth it over and over again.

  • I started reading

I didn't only start buying books on amazon, I was buying technical books 😭. I couldn't believe it myself. In 6 months, I have bought almost 8 books and read 6 of them completely.

  • I tracked my time

    I used wakaTime to track time spent on anything coding. If I don't like something or I'm not enjoying it, it is hard for me to spend time on it. I tracked continuously for 3 months ( a lot are on my Twitter account ). I was spending an average of 40hours a week coding and learning. On some really good days, I was on it all day that I would lose track of time.

image-28-06-22-05-07.png

At this point, I knew I had found my passion 🥳.

Resources that have helped me

Over the last few months, I have tried a lot of YouTube videos, books, websites, self-paced bootcamps, and more. Here are the ones that made a huge difference for me.

To Practice general problem solving, and verbal and logical reasoning. Check out app.graduatesfirst.com/gf/Client#Home/Index

Books

  • Data Structures and Algorithms with JavaScript . This is the absolute best JS-focused book. It goes through JS concept in bits and then DSA.

  • Eloquent JavaScript. The first time I tried this, it didn't go so well but I've heard so many good things and will be giving it one more try soon.

  • Grokking Algorithmsby Aditya Y. Bhargava. You can also find this book on Amazon. This book is so good, that I had to leave a review. It's perfect for visual learners and easy to read even if you don't use python.

  • Think like a programmer. An introduction to creative problem solving by V. Anton Spraul. You can also find this on Amazon. I love this book but I have been unable to go far because all examples are written in C++ which makes it really hard for me but I am saving it for the future.

  • If you’re finding DSA hard to understand, try studying Discrete mathematics to better understand computational complexity.

I was introduced to It by Demitri Swan and here’s a little study guide for the discrete mathematics that he recommended;

Chapter 1 The Foundations: Logic and Proofs

As it says on the tin, this chapter contains foundational material on logic and proofs that you must understand to prove that a mathematical proposition is correct. Work through all of this chapter. The terminology is used throughout the book.

Chapter 2 Basic Structures: Sets, Functions, Sequences, Matrices

Read 2.1-2.4 and 2.6. Prerequisite material.

Chapter 3 Algorithms

As you can probably guess, all sections are relevant here.

Chapter 4 Number Theory and Cryptography

Read sections 4.1 - 4.3. You only need the number of theoretical bits.

Chapter 5 Induction and Recursion

Read all sections. This is a special chapter that gets you to algorithm correctness proofs.

Chapter 5 Counting

Read 5-1 to 5-3 and 5.5. Given that computational complexity, analysis is essentially the process of counting basic instructions, this is relevant.

Extra credit

Chapter 8 Advanced Counting Techniques

Read 8.1 - 8.5 to learn how to solve linear recurrence relations and tricks for solving divide and conquer recurrences.

This should get you pretty far. The remainder of the book can then be read as your interests suit you. The rest is more closely related to specific structures and concepts such as graphs, relations, languages, etc. That said, working through the aforementioned material should give you the foundation to analyze algorithms, understand their correctness, and read algorithms literature and papers. If you’re lost in DSA, this should help ground you.

You can check out Demitri Swan on LinkedIn, he posts a lot on DSA generally.

Videos

  • Algorithms

  • Data Structures

  • Udemy Colt’s course goes through problem solving approach which is particularly helpful during interviews and problem solving patterns before diving deep into DSA itself.

All these videos go through everything in tiny bits and also cover Big O notation.

Websites

If by chance you need resources specifically for big O then check out khan academy

Google has free technical writing courses for software developers which I am about to take. Google Technical Writer .

The Odin Project. A full stack course I recently came across that has especially been helpful with backend languages.

Saylor.Org has an elementary data structures and algorithm course but it is heavily focused on C++ for those who do not mind.

Self-Paced Bootcamps

Before freeCodeCamp, I had taken a lot of other courses that didn't do much for me but definitely can't discard them because I had learned a lot of the basics from them although I won't be adding them here because, with the ones I have shared, you can also get those basics as well. I'm sure it worked for others, it just didn't work for me and I think I could have still gotten the same knowledge regardless but I'm grateful for their impact.

Data Structures and Algorithms Practice

Practicing questions help you identify patterns and forces you to think. A month into learning JavaScript, I thought I knew what I was doing until I attempted a leetcode question and that was when I realized I needed to start from scratch again, which I did with freeCodeCamp.

If you are looking to practice your skills, use these;

You will find DSA problems on LeetCode. You can search topics, company specific questions, join challenges, and more.

If you have the same problem as me where you want specific leetcode questions only for topics you’ve studied then try using NeetCode. It is sectioned with a leetcode according to topics. There are video solutions as well.

You can also use the chrome extension LeetHub to push your solved leetcode questions automatically to your GitHub for recruiters to see.

Another place to practice questions is Hackerrank. I find hackerrank questions a little more abstract with so many questions to break down. It could get confusing and frustrating at first but it gets better as you try. The secret is consistency.

You can also subscribe to receive daily coding problems here

Mock interviews

Taking mock interviews is very important as this helps you get comfortable with the interview process and environment. The interviews are conducted by actual engineers and hiring managers and you get feedback after detailing your weak points and how to work on them as well as what you did right. I currently take mock interviews using;

Here are some of the feedbacks I have received in the past;

image-28-06-22-05-07-1.png image-28-06-22-05-07.jpeg

Other Resources

Here are some resources that I have heard so much about and was looking forward to buy them. I found online versions.

Soft-Skills

The Job Hackers

For this, I took 2 classes. One was focused on Agile processes, understanding the human side of programming, product development flow, collaboration, and cognitive biases.

My main reason for joining was to understand the collaboration and agile part of the job but I left with so much more. They have classes that start every few weeks and each one lasts about 6 weeks. To join, The job hackers .

They also provide resume review sessions and have discussions where a case study similar to what you would encounter in the real world is used.

Akamai Job Preparation Program

I have always been a very shy person who got severe anxiety attacks from having to speak to others. I never talked during meetings except when asked to, which I would try to avoid. When I saw this program, it was perfect for me. It covered things like;

  • Public speaking ( skills to rock your speech )
  • Change management practice
  • Workstyles and their cooperation
  • Identifying and working on your personal brand
  • Business E-communication

    …and more.

It is very important to stay in touch and keep track of technological trends because things are changing every day. I recently started working on a few practice projects while also learning from a few similar tutorials made about a year back and the amount of things that has changed ( deprecated, updated) has been massive. It could be overwhelming sometimes but here is how I currently keep track and stay connected.

  • Social media platforms.

You should find groups specific to your field and some general ones as well. I joined on Facebook, Twitter, discord, slack, and even google meets. Sometimes if you are stuck and have tried and tried, you can always ask for help. Sometimes, people ask for help and through the response/ comments, you figure out things and learn new things from different perspectives. This way, you can make informed decisions. You can get information anywhere from Youtube, random blogs on google to developers' blogs like hashnode. I read on Reddit, specific WordPress, and come across videos on TikTok as well (yes! TikTok☺).

  • Newsletters

Somehow, on every website I join these days, I end up on their newsletter list. Some share very helpful tips, others don't but I have been able to unsubscribe from those and keep the ones that I learn from.

  • MDN

I check on MDN for specific documentations.

  • I check on the website specific to the technology or tool I'm trying to use to find information.

Tools

  • VsCode is a Code editor for building and debugging.
  • Netlify to deploy your web apps.
  • GitHub is used for version control, collaborations and project management.