Things I want to Grok (2021)

The 3-4 years of my career have been very conservative and majorly focused on frontend technologies. This was understandably the most friendly (possible) option at that time. But lately, I'm finding interest in other parts of software engineering.

How do I know?

I know because I catch myself daydreaming of knowing these things already. It excites me when I think of how much of my life as a software engineer would change when I know these things.

More exciting are the new projects I'll work on, new people & open source projects I'll discover. The point is, it can only get better with new knowledge. Let's dive right in...

  • Languages, Compilers & Interpreters: I have this hairy, long-term goal of building a programming language from scratch. Even if I don't get to, I'll love to do some reading/projects to understand how languages are parsed and understood by compilers, etc. There are a lot of things I need to learn about - language design, compilers, language tooling, type systems, etc. It's so overwhelming that it makes it exciting.

  • C++, Go or Rust: I currently know and write Javascript every day. I've used C# at work, and I recently started learning Python. While I'm not satisfied with my knowledge of javascript, I feel like I know the basics. I would love to go deeper on javascript and one more language. The decision of picking a language is hard and should be relative to the kind of work you'd be doing.

    • Python for machine learning
    • Rust for operating system programming
    • Javascript for frontends & real-time servers
    • Go for microservices, etc

I'm most likely to go with Go or Python - I'm also generally open to anything.

  • AWS, DevOps & Cloud-native development: Cloud services like AWS are already table-stakes for most software engineering jobs. I would love to understand common products and the problems they solve. I want to have enough knowledge to architect basic solutions on the cloud.
  • Algorithms & Data structures: I totally suck at DAS. I use to think they're only needed for job interviews. I've changed my mind about this and I'm more open to the idea. I like to think of DAS as problem-solving in resource-efficient ways for large-scale data. I'm currently learning DAS with Algoexpert and Pramp. I plan to look into leetcode.
  • Containerization & environments (staging, development, and production): My first and only experience with Docker was last month. A company I was interviewing for gave me an exercise to dockerize a react, node, and PostgreSQL application. The idea of containerization sounded great to me and I'll definitely want to look more into it.
  • Design systems: I've learned a lot from working on avocado (avocado is a design system I'm building from scratch). I think the best way to learn about design systems is to build one. The only problem here is that people have to use your design system before they can get past basic learnings. That's the stage I'm in at the moment. I would love to contribute to an open-source design system or work on design systems in a company to unlock the next phase of learning.
  • Modern frontend state management: Frontend state management is getting better I guess. At my previous job, we had this react application with state management in Redux. The workflow was so hectic, with a lot of boilerplate. My recent react applications use hooks with context API, but I've heard of some new ways to managing state (state machines, Recoil, etc). Most importantly, I want to be able to identify the best solutions for managing remote data and application state.
  • Supabase for rapid prototyping: I have a few ideas I want to experiment with. Supabase looks like a great product for prototyping modern applications.
  • Modern authentication and authorization practices: I have zero experience with 0Auth and other authentication services. I would also want to understand role-based authorization and how to set up authentication in large-scale applications.
  • Serverless and server-side rendering: I've been learning a lot about serverless lately and the idea sounds great. I don't need to set up a full-blown server to get some backend functionality. The craziest thing here is that you can write serverless functions in any language. Serverside rendering, on the other hand, is great for performance and speed. I love that they both go hand-in-hand.
  • GraphQL: My mind has been blown by GraphQL. I'm currently taking a Udemy course on it and I can't say how revolutionary the idea sounds. I've never used it in a project, so I can't say much about it. I can't wait to try it on some of my projects.
  • Postgres & Prisma: Where was my first introduction to postgreSQL and prisma. I'm loving every bit of this setup. I use to rely Mongoose before now, but I began to see where it would break. I like that I can work with migrations, SQL, and an ORM. Prisma, on the other hand, is God-sent. I love the Prisma migrate and neat typescript integration.

Others

There are some things I'm keeping my eyes on. I can't really master them because of limited time and resources, but I'll love to do some reading on the side.

  • Blockchain development: The idea of blockchains sounds great to me. I've seen some web developers migrating to blockchain development. Some even call it web 3.0. I'm not a huge blockchain fan, but I would love to see what's under the hood.
  • Basic machine learning with Python: This is part of the reason I'm learning Python. I've seen very exciting machine learning projects and I want to at least build a project that leverages machine learning. It doesn't have to be some grand idea and I'm keeping my expectations low on this one.

Like most things, I can't possibly check everything on this list. Heck, I would be a better engineer if I just understand a fraction. I've been thinking about this for a while and writing about it feels like a great way to put my thoughts together and bring the idea to life.

Thanks for reading.