Simon Katz's CV
Personal Details
Simon Katz, London, UK | Email: |
| Blog: blogish.nomistech.com | GitHub: 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: |
|
| Theoretical Computer Science | ||
| ● ● ● | Data structures & algorithms | |
| ● ● ● | Discrete mathematics | |
| ● ● ● | Complexity theory | eg Big-O notation. |
| ● ● ● | Theory of computation | |
| Programming Languages Ranging from assembler through to very high-level languages, including functional languages. | ||
| ● ● ● | Clojure and ClojureScript | For details, see below. |
| ● ● ● | Common Lisp and CLOS | 13 years. |
| ● ● ● | Emacs Lisp | Off and on since 2011. |
| ● ● ○ | Bash | Off and on for as long as I can remember. |
| ● ● ○ | Java | 6 months, plus what I've picked up from using Clojure. |
| ● ○ ○ | C | 3 years; was ● ● ● a long time ago. |
| ● ○ ○ | C++ | 4 years; was ● ● ● a long time ago. |
| ● ○ ○ | Scala | 6 months. |
| ● ○ ○ | Prolog | 6 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 principles | Modularity, coupling, cohesion, DRY, KISS. |
| ● ● ● | Design for functional programming | eg 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 SQL | Mostly Postgres. |
| ● ● ○ | AWS Infrastructure | eg EC2, ECS, RDS, S3, Athena, DynamoDB, SQS, Kinesis. |
| ● ◐ ○ | Kafka and Kafka Streams | Good theoretical understanding, but limited practical use. |
| ● ○ ○ | Redis | |
| Front-End Development | ||
| ● ● ● | ClojureScript | See above for details. |
| ● ● ◐ | HTML | |
| ● ● ◐ | CSS | |
| ● ○ ○ | JavaScript | |
| User Interface Design and UX | ||
| ● ● ◐ | UI and UX principles | eg 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 systems | 20+ years. |
| ● ○ ○ | Windows | ~10 years, not recent. |
| Process — Programming-Related | ||
| ● ● ● | REPL-based development | REPL-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 & Databases | Compute & Containers: AWS EC2, AWS ECS, Docker. Storage & Databases: AWS S3, AWS RDS, AWS DynamoDB. Infrastructure as Code: Terraform, AWS CloudFormation. |
| ● ◐ ○ | CI/CD & Observability | CI/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. |
| ● ● ● | Teaching | I 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.