Christopher Dyer

Give me some problems to solve


Welcome

Welcome to this obscure corner of the Internet. I hope you are having a nice day.

A little about me

I am a Melbourne*-based software engineer seeking to explore interesting problem spaces. In a brave departure from cliche I have a beard and a bunch of monitors. In my spare time I do a lot of cycling and wrench on my terrible project car.

*the Australia one

Why would you want my help?

I think we can agree that at the very least I have a rudimentary grasp of Markdown.

That seems insufficient?

OK, fair point. I was really just trying to avoid describing myself as technology agnostic because people who make that claim so seldom are.

I am though (honest).

I’ve been a ‘full stack’ web developer for a long old time, and have done some desktop application and Android programming along the way. I’ve also worked in the DevOps space and am well-versed in data science and engineering.

I write code for the next person to come along, with sensible names, single responsibilities, and loose coupling. I enjoy writing unit tests. If I had a mantelpiece it would have a portrait of Barbara Liskov above it.

I understand where (and where not) to compromise and how not to let perfect be the enemy of good, and that it doesn’t matter how elegant code is unless it is in front of customers.

I have strong opinions, weakly held. One of these opinions is that functional programming is way cooler than OOP.

Enough waffle! Give me the list already!

Who doesn’t love buzzword bingo?

Core principles

  • Release small slices of value
  • Refactoring is not (generally) a separate exercise
  • Slow is fast - quality and speed are not in opposition
  • Avoid tight coupling
    • architecturally;
    • and in terms of data modelling
  • Collect more data than you think you’ll need
  • KISS
  • YAGNI
  • Don’t baffle people with TLAs

Frontend

  • React
    • with proper separation of state and render concerns
    • strong working knowledge of the component lifecycle
    • big fan of custom hooks
    • without making a mess
  • TypeScript
    • beyond merely JavaScript with scalars types - generics for reusability, utility types, etc
    • I’m really good at turning JS codebases into TS
  • GraphQL
    • in concert with automatic generation of types/fragments
    • Apollo
  • CSS/SASS, etc
    • I think I just about understand Flexbox
  • jQuery
    • It’s still out there!
    • have written custom plugins, etc
  • Various templating frameworks
    • Twig
    • Blade
    • Pug
    • Jinja
    • …you get the idea

Backend

  • Node
    • strong functional bent (algebraic types, etc)
    • Express, Koa, Fastify, etc, etc
    • can use async intuitively
  • PHP
    • the OOP variety
    • deep knowledge of the Symfony framework
    • done a lot of application tuning and containerisation
  • Python
    • Flask
  • Java
    • mostly Android
    • a smattering of Kotlin

Databases

  • xSQL
    • effective at schema design
    • understand indexing requirements
    • performance debugging
    • solved more N+1 problems that I care to recall
  • NoSQL
    • MongoDB
    • DynamoDB
      • including single-table design strategies
  • ElasticSearch
    • OK not really a database but you get the idea
    • Strong working knowledge of the DSL
    • Optimisation
    • Basic understanding of how Lucene works under the hood

Data Engineering/MLAI

  • Scala
    • Spark
  • Python
    • Pytorch
    • Tensorflow
    • Notebooks
  • Computer vision
    • OpenCV (specific focus on extracting insights from construction drawings)
  • I’ve done the Stamford course just like everyone else
  • Developing my knowledge of AI ethics

CI/CD

  • Buildkite
    • Really quite a lot of this
  • CircleCI

Testing

  • I have done some TDD in all the languages I mention
    • but I’m not some kind of TDD acolyte :)
  • Strong intuitions about where to build in coverage
  • BDD when appropriate

FaaS

  • Serverless
  • SAM
  • I have written a lot of Lambda functions and have a good understanding of the quirks of the runtime

Containers

  • Docker
    • have hours of wrestling with Dockerfiles under my belt
    • solid understanding of how to optimise image sizes
  • ECS/ECR

IaC

Most of the work I have done to date has targeted AWS. I have a working knowledge of all of their core offerings.

  • Terraform
  • CloudFormation/SAM
  • CDK

Other things

OK, I ran out of steam; I never claimed to be en expert in bulleted lists or category theory.

  • Ways of working
    • high standard of (small, focussed) pull requests
    • pairing as a learning tool
    • please give me the simplest Kanban board possible
  • API design
    • REST
      • with the proper verbs and everything!
    • GraphQL
      • limiting nullability
      • schema stitching/Federation
  • Advanced git (branching strategies, commit hygiene, bisect, all that good stuff)
  • I’ve written production C, if you really want some
  • Async work
    • promises/futures
    • message queues
  • Parallelisation (I’m across the threading and synchronisation primitives in a fair few languages)
  • Event-driven systems
  • Backend-for-frontend patterns

If any of this seems in any way appealing or useful you can reach me at hello@christopherdyer.net