Overly Enthusiastic

What I Don't Know (as of 2019)

October 9, 2019 • ☕️ 5 min read

At the end of September, I got a new job. Woohoo for learning new things!

At my previous position I was a full stack engineer, focusing primarily on backend, inter-service communication via REST and service bus (RabbitMQ), as well as the data model in PostgreSQL and Mongo, and touching deployment tech with Kubernetes on AWS. I also worked with front-end Angular 1.6 and some React “when I had to”. 😄 I really enjoyed being able to work on cross-product libraries and solutions, so I look forward to building these out at my new company.

At my new position I’m again a full stack engineer, but in some different tech. The specific work isn’t set in stone, but I’ll be a core product engineer working on features, bugs, data models, service architecture, and so on. For my first month or two I’ll be working with a new devops engineer on brainstorming and implementing some solutions to modernize our infrastructure, which will be a good way to dip my toes into a new ecosystem.

I’ve done some digging through code my first two weeks, so here’s everything I found that I don’t know, but will be learning over the next coupla’ months!

Service tech:

  • C#
    • What is C#? What main paradigms does the language have?
    • What are the main differences between C# and my most familar OOP language, Java?
    • What types does the language have?
    • What sort of operators does each type have?
    • Is there a similar concept to a prototype function in C#?
    • Are classes/functions the same as I remember from Java in school?
    • Is there an equivalent of Async/Await? Or is that not necessary?
    • What sort of syntactic sugar do we get?
    • What is LINQ?
    • Are there versions of the language, like the JavaScript ECMAScript progression?
    • Package managers? What’s Nuget? How does this relate to the NPM model?
    • How is C# compiled? I see .dll and other files too when built. How are these related?
  • .NET
    • What is .NET? Is this the same thing as ASP.NET?
    • .NET vs .NET core? What’s new? What’s the different between all these .NET and other 3-letter abbrevations?
    • What does .NET provide? Is it like a framework for languages speaking together? Or platform agnosticism or something?
    • Do I have to use Visual Studio on Windows? Are there alternative tools? Anything on Mac? (I’m gonna miss my iMessage on Mac 😄)
    • What’s a .csproj file? .sln file? How does everything “get connected” with one another? (My new codebase has a lot of .csproj files that seem to be connected.)
    • Are .dlls a C# thing or a .NET thing?
    • What is the MVC pattern, and how does it apply when we use Vue as a frontend framework?
    • I’ve heard .dlls are versioned pretty well. How can we leverage that fact? (Builds, betas, releases, etc)
    • What prevents us from breaking up our monorepo into separate apps for backend and frontend (and then easily containerize)?
  • Vue
    • What are the core concepts relating a HTML screen to controller functions?
    • How does data get in the “scope” of the page?
    • What are all the words used to describe Vue code? Controllers, directives, functions, services, providers, etc?
    • What’s the hierarchy of scopes in Vue?
    • I think we use C# instead of JS functions? How does this work?
      • What and Why is .CSHTML a thing?
    • What special syntax does Vue use to put data into templates?
      • Raw data insertion
      • Structural HTML (ng-for ng-repeat alternatives)
      • Conditional, etc
    • How are events handled? Clicks/keyboard events? Cross-scope events?
    • What are the big players in 3rd party libraries? Routers, event managers, data stores, etc?
    • How is Vue adoption? If we rewrite our codebase, should we move to something else (Angular, React, Svelte)?
    • Is Vue platform agnostic, or are we tied into the monorepo somehow?

Deployment tech:

  • Azure App Service
    • What is an App Service?
    • Are apps deployed scalable?
    • How do apps communicate with one another?
    • What does app service provide us that we couldn’t do on bare metal?
  • Azure Kubernetes Service
    • What level of abstraction do we get here?
    • Can I get a kubectl on my command line and work in “pure” Kube?
    • What overhead does AKS require? What extra configuration?
  • Azure Key Vault vs App Configuration for secrets
    • What are the downsides of one versus the other?
      • Possible response times, incompatability with other services (both inputs and outputs)
    • What would we store in either one
  • Azure Service Bus
    • What underlying spec is being used?
      • Kafka, RabbitMQ, NoMQ?
    • What knowledge can I transfer from RabbitMQ topics/exchanges/queues to here?
    • How do messages get routed to the right subscriber? Or do all messages get sent everywhere and the consumer is responsible for consuming the correct ones?
  • Azure Pipelines
    • What all do we get here? Gated deploys and CI and stuff? What else?
    • What are the differences between pipelines and releases?
    • What options are we given for configuration? I see YAML configuration but only in some areas, maybe this is new?
    • Artifacts are a thing again? Is this good? Or do we just use a container store?
  • Azure Container Store
    • What are the main differences from Docker Hub?
    • I assume this is private by default, how do we auth? Do Azure Pipelines get free auth builtin?
  • Azure Monitor
    • What sort of alerting can we get?
    • Do we have dead-man switches in case everything dies?
    • How can we monitor raw CPU and memory usage for researching bugs?
  • DNS/Front Door
    • What is Front Door? I know we use it but what does it provide?
    • How are our domains registered? Is there something like Route53 provided?
  • Infra-As-Code
    • What sort of version control can we put to all this? Terraform compatibilty?
    • What’s HCL? Is this related and could be helpful?
    • Maybe Microsoft offers something baked in for us?

Phew! That’s a lot to learn. 😂 I’m looking forward to learning more about the Microsoft world. I hope to break any preconceived notions I have about the tech, and hopefully I can bring in my existing knowledge and put it to good use. I also want to see if I can be a part of more architectural conversations, but I want to make sure I keep my noob-biased-opinions far away and come in with an open mind.

I want to follow this post up with a “here’s what I’ve learned” post in six months or a year from now.

When I was interviewing, I talked a lot about how, in spite of how cheesy it is, we engineers we really love learning. We like to take a new problem, apply existing knowledge, and if that’s not enough learn how to fix the problem properly. I really do look forward to getting to know a new codebase, new languages, new frameworks, and a new cloud computing service, as daunting as it may seem right now.

Cheers to learning new things!