Simon Katz's CV



What I know, what I've done, and what I want to do

Personal Details    

Simon Katz, London, UK

Email:

Blog: blogish.nomistech.comGitHub: github.com/simon-katz

Objective    

I'm interested in:

  • development work using Clojure and/or ClojureScript
  • passing on knowledge of Clojure and development in general to others
  • continuing to learn; particular areas of interest include event processing systems, ClojureScript front ends, DevOps, and cloud computing.

Overview    

I'm an intelligent, personable, self-motivated software professional with excellent written and spoken communication skills. I've used incremental and iterative approaches supported by automatic tests for over 20 years, and since 2011 I've worked in environments that make use of modern agile and DevOps ideas.

I have a track record of producing well-engineered software that meets customers' needs and of communicating and collaborating effectively with colleagues, management and customers.

I like Clojure; I've used it since 2011 and before that I used Common Lisp for many years. (It may be worth saying that Clojure is a modern Lisp.) I've also done many things that aren't Lisp.

I have extensive experience of the whole software development lifecycle from business analysis through to delivery to users and subsequent support and maintenance.

I've worked on web, desktop and command-line-driven applications, in application areas including telecommunications, publishing, software tools that support design processes and software for software people (eg application generators and compilers).

I'm calm, well-organised, fair-minded and a natural teacher.

Knowledge and Skills

Key:
● ○ ○Beginner
● ◐ ○More than beginner
● ● ○Middling
● ● ◐More than middling
● ● ●Good
Theoretical Computer Science
● ● ●Data structures & algorithms
● ● ●Discrete mathematics
● ● ●Complexity theoryeg Big-O notation.
● ● ●Theory of computation
Programming Languages
Ranging from assembler through to very high-level languages, including functional languages.
● ● ●Clojure and ClojureScriptFor details, see below.
● ● ●Common Lisp and CLOS13 years.
● ● ●Emacs LispOff and on since 2011.
● ● ○BashOff and on for as long as I can remember.
● ● ○Java6 months, plus what I've picked up from using Clojure.
● ○ ○C3 years; was ● ● ● a long time ago.
● ○ ○C++4 years; was ● ● ● a long time ago.
● ○ ○Scala6 months.
● ○ ○Prolog6 months.
Clojure and ClojureScript

I've been using Clojure professionally since 2013 and in my spare time since 2011. I have a good knowledge of functional programming principles and of Clojure's take on functional programming.

I'm familiar with Clojure libraries including tools.namespace, Component, Integrant, Mount, Midje, clojure.spec, Schema, Compojure, Ring, clj-http, HTTP Kit, Hiccup, Cheshire, core.async, Yesql, HugSQL, and Jackdaw.

I've mostly used Leiningen, and I'm just starting to use deps.edn.

For ClojureScript, I've used Reagent, Figwheel, and shadow-cljs.

Software Design
● ● ●General design principlesModularity, coupling, cohesion, DRY, KISS.
● ● ●Design for functional programmingeg Use of purely functional code, separation of purely functional code from side-effecting code, functions as first-class values, higher-order functions.
● ● ○Domain-driven design (DDD)eg Emphasis on domain modelling, clear separation of domain code and other code, common language for all stakeholders.
● ● ◐Object-oriented design (OOD)I've used OOD when programming in C++ and in CLOS. I understand the building-blocks of object orientation and I understand SOLID design principles. I also have a rusty knowledge of OO design patterns.
For TDD and BDD, see the 'Process — Agile Development' section.
Back-End Development
● ● ○HTTP
● ● ○Microservices
● ● ○Relational databases and SQLMostly Postgres.
● ● ○AWS Infrastructureeg EC2, ECS, RDS, S3, Athena, DynamoDB, SQS, Kinesis.
● ◐ ○Kafka and Kafka StreamsGood theoretical understanding, but limited practical use.
● ○ ○Redis
Front-End Development
● ● ○ClojureScriptSee above for details.
● ○ ○HTML
● ○ ○CSS
● ○ ○JavaScript
User Interface Design and UX
● ◐ ○UI and UX principleseg Consistent look & feel, use of mental models to guide the structure, typography to reflect structure, providing feedback on actions and status, error tolerance.
Operating Systems
● ● ●Various Unix & Linux systems20+ years.
● ○ ○Windows~10 years, not recent.
Process — Programming-Related
● ● ●REPL-based developmentREPL-based development backed by automatic tests for fast feedback at a micro level.
● ● ●An Emacs/CIDER setup for Clojure and REPL-based development
● ● ●Git
Process — Agile Development
● ● ●Pair programming
● ● ○Automated testing
● ● ●Test-driven development (TDD)
● ● ○Behaviour-driven development (BDD)(By which I mean TDD with tests at the level of externally-visible functionality.) This is a 2 rather than a 3 because I haven't used any specific BDD tools.
● ● ●Incremental and iterative development
● ● ●Close collaboration with the customer
Process — Build Pipelines, Deployment, Devops
I've been using DevOps approaches since 2011, with a year of AWS from 2018 to 2019. I'm not an expert, and I am keen to improve my skills in this area.
● ● ○Continuous integrationSometimes continuous delivery.
● ○ ○Jenkins
● ○ ○CircleCI
● ○ ○Docker
● ○ ○Cloud deploymentAWS CloudFormation, Terraform.
● ● ○Monitoring — AWSCloudWatch, SignalFx.
● ● ○Monitoring — otherTelegraf, Influx and Grafana (metrics collection, storage and visualisation tools).
Soft Skills
● ● ●Communication

Good oral and written communication skills.

I produce clear and concise technical documentation.

● ● ●Organisation

Prioritising, multitasking, working to deadlines and managing expectations.

Balancing my own work with other people's work and with the needs of clients.

● ● ●Teamwork

Communicating with other people and teams, discussing problems, collaborating, active listening, compromising.

Sharing knowledge and ideas.

My approach is empathic, patient, respectful, tolerant and (when appropriate) lighthearted.

● ● ●TeachingI regard teaching as part of my job. This has mostly been through day-to-day things such as answering miscellaneous questions as and when they occur, pairing, code reviews and producing wiki-based documentation, but I have also done more formal teaching with classroom-like lessons and training courses.

Work History and Education    

See Simon Katz's Work History and Education for details.

I've worked at the following companies:

  • StatsBomb
  • Moblox
  • Wefarm
  • YouView
  • HSBC
  • uSwitch
  • Bwin Party
  • ThoughtWorks
  • Mobinets
  • Mobile Systems International
  • Logica

I have a BSc (Hons) in Computer Science, 2(i), from University College London.