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; a particular area of interest is highly interactive user interfaces.

Overview    

I'm an intelligent, personable, self-motivated software developer with excellent written and spoken communication skills. I use incremental and iterative approaches supported by automated tests and DevOps.

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 do my best work in 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, sports data, 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, Malli, Compojure, Ring, clj-http, HTTP Kit, Hiccup, Cheshire, core.async, Yesql and HugSQL.

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

Most recentlly I've been using Electric Clojure, a language that's reactive at the expression level and which greatly simplies communication between client and server.

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. I'm not an expert, and I am keen to improve my skills in this area.
● ◐ ○Cloud Infrastructure & DatabasesCompute & Containers: AWS EC2, AWS ECS, Docker. Storage & Databases: AWS S3, AWS RDS, AWS DynamoDB. Infrastructure as Code: Terraform, AWS CloudFormation.
● ◐ ○CI/CD & ObservabilityCI/CD Platforms: GitHub Actions, CircleCI, Jenkins. Metrics & Collection: Telegraf, InfluxDB. Dashboards & Monitoring: Grafana, SignalFx, AWS CloudWatch.
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.