Walking into my Discrete Mathematics course in Computer Science, I felt like I had put on my big boy pants and was moving beyond simple coding projects. I was going to dive deep into Computer Science concepts and be a wizard programmer. I sat down and managed to get through some set theory, a few week later we started talking about graphs, Dijkstra's algorithm, proof by induction, and I looked like this guy:
I ultimately made a poor decision. I switched my major to Information Technology (IT). IT wasn't a bad major, it just wasn't what I REALLY wanted to do so it was a poor decision for me. The love learning hard things gave way to the pressures of life.
10 years later here I am, and so help me, I am determined to understand all the things I gave up! I have been building utilities and automating for years now. I understand systems, trade-offs, containers, Linux, architecture, design patterns, testing, security, project management, managing larger scale, design patterns, cross-team initiatives, and more. I appreciate every bit of that experience, but I still have major gaps in my programming ability.
Finally, I've circled back to what initially attracted me to tech and that was to dive deep into computer science, to understand the math behind the scenes, to know it well enough to teach others, to improve my ability, and build bigger and better things. That may sound boring to some of you, but I love it! Tonight I'm implementing Dijkstra's algorithm to make sure I understand it and I'm thrilled!
My point in all this is that you should focus on what's exciting to you. It's okay to be confused. There are resources to help you and I wanted to share some. Nothing I've done is a waste, my focus just drifted from what I was passionate about because I gave up for a period. No more! And I hope you will focus on what you're passionate about too!
There are more resources than ever out there. There is no reason a concept should be too hard to grasp because somewhere, someone has explained it in a way that may make sense to you. You just have to find it. I often joke that my job is knowing my way through a book or a search engine rather than engineering.
- "Deep Work" - book on how to really learn concepts and ideas and how to make effective use of time.
- "Learning how to Learn" is a course on Coursera. It was free when I took it. Alternatively, the book "A Mind for Numbers" is done by the same person and covers most of the same ideas.
- Book "A Common-Sense Guide to Data Structures and Algorithms". If you're newer to some of these concepts or have struggled to understand them, then this book is for you. I highly recommend.
- 100 Days of Code Initiative - Great idea, and I just started it myself! If you do it, let me know, I'll follow your progress.
- Free Code Campus - Great if you can't afford a code campus and want to learn basics of web-development.
- Hacker Rank - Useful for interview preparation, learning a new language, and deepening understanding of concepts. After solving a problem, you can switch over to the discussion tab to see how others have solved it. I re-implemented some of those solutions as a hands-on way to better learn some of the concepts that I may have missed or overlooked.
- Meetup - A local community or group of folks to work with can open up a lot more work, practice, and networking opportunities. Who knows there might be a tech group near you, or maybe you can start one yourself! You don't have to be a pro to start one or join one. Just be willing to learn and make something happen.
- And of course Dev - This is a great community!
There's a billion other resources out there. If you get lost or confused, ask for clarification or try another resource. Somewhere you'll find something that sticks.
What are your favorite resources? Which ones have been the most help to you?
Happy New Year and Happy Coding!