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; 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: |
|
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, 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 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, 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 integration | Sometimes continuous delivery. |
● ○ ○ | Jenkins | |
● ○ ○ | CircleCI | |
● ○ ○ | Docker | |
● ○ ○ | Cloud deployment | AWS CloudFormation, Terraform. |
● ● ○ | Monitoring — AWS | CloudWatch, SignalFx. |
● ● ○ | Monitoring — other | Telegraf, 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. |
● ● ● | 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.