Skip to main content

Summary πŸš€β€‹

I work on software to help people, for work, or both. My principles are:

  • solve problems for people - especially by understanding things and making them simpler,
  • keep learning - especially learning by trying, failing and succeeding, and
  • help others learn - especially the ones who love learning.

Feedback πŸ“ˆβ€‹

Do you work with me? Have you worked with me in the past? I'd appreciate feedback, even anonymous.

Personal πŸ‘Ήβ€‹

I am vegan πŸ₯•, love animals πŸ• and this planet 🌏 (nature, outdoors, cycling). Contact me if you have similar interests or are solving solve interesting and important problems, I'd love to help.

Contact πŸ’Œβ€‹

  • Email: final bensEmailAddress = "ben" + "";. *Join the 2 strings together (text within quotation marks), or
  • Feedback form: Submit the feedback form with your message.

Talks/workshops I've given πŸŽ™β€‹

profile for Ben Butterworth at Stack Overflow, Q&A for professional and enthusiast programmers

Ben's github stats Ben's languages

Software engineering πŸ€–β€‹

Summary: I've used a lot of tools to solve problems. My CV has specific achievements in organisations I've worked for.

I've worked with backend applications, including protobufs, gRPC and deploying them using Docker, Kubernetes and Helm. I've worked with mobile platforms, runtimes and programming languages for mobile app development, SDK development and machine learning. I've also worked in backend roles specifically for mobile API development. I received dean’s list and distinction for degrees in computer science and engineering at Imperial College. I also communicate well: I write hundreds of Stack Overflow answers (and questions πŸ€“), give technical talks, and most importantly: discuss, debate and listen openly to others. I started programming in 2017 when I lived in a house with ~25 other students in the USA, some of who interned at Microsoft, Google, venture capitalists and startups. Since then, I haven't really stopped programming, learning and helping others. I've been product-led before university, by performing the role of product manager and designer - some of my contributions can be found in hotel rooms around the world, and in the back of camping vehicles in Australia. I have a list down below which shows the type of stuff I've worked with. Take a look at my projects.

  • More Python: I've done a lot more Python work in my job. This is where I realised Python can be done better than the way I did, predominantly by using mypy + type hints and writing unit/integration tests. However, in the end, these "type hints" are just hints, they're not types. It is also where I came up against Python's limitations in it's threading model - thread prioritisation and lack of structured concurrency. Optimising Python code (e.g. using Numba) can also make it unmaintanable, introducing deployment issues (e.g. it only works on amd64) and unreadable code (complexity, annotations, magic). Some dependencies also need you to install the whole of LLVM.
  • Flutter, iOS and Android: I've used Flutter since 2020, but I worked on a Flutter package, ably_flutter containing a lot of Android and iOS code. It was nice to learn some Objective-C, but I've already begun the migration to Swift πŸ˜‚. Recently, I've added push notification support, allowing users to register the device for push notifications, and handle everything on the Dart side without writing native code: handling foreground messages, background messages and notification taps / app launches. This was more complicated than expected, since I had to launch a Flutter Engine when the message arrives on Android.
  • Three.js, NextJS/React, WebSockets/Ably, MediaPipe, TailwindCSS: I learnt these while making Club2d, an anonymous video calling app.
  • iOS (Swift) and Android: Android and iOS development are both enjoyable in their own ways. I've also built a macOS CLI tool for colleagues, some prototype apps using CoreML (iOS) and Tensorflow Lite (Android). I've been compiling a list of differences which I'll publish soon. Currently working on an iOS library for Ably. I've also touched a small bit Objective-C, though I highly recommend you stick to Swift if possible.
  • 🀯😻 Flutter & Tensorflow since April 2020: In Flutter, I've accumulated 100+ hours now, and I'm loving the type system. I've also been working on my user interface designs, from sketching, wireframing and mocking. On top of normal UI design, I am currently designing a novel user experience as part of my Master's individual project, for physiotherapy patients and computer vision. I have now made a few smaller apps in Flutter. For my final project at Imperial, I am researching 3D pose estimation and computer vision and baking it into an app with Flutter. In 2021, I became a TensorFlow certified developer.
  • 😲 Gatsby, React, HTML and CSS: We needed a landing page for Foodprint, so I quickly learnt these tools to make Foodprint. I'll be using Next.JS instead of Gatsby if I ever need another landing page. Although Gatsby was frustrating, it provides a lot of web performance and tools out of the box.
  • React Native πŸ€—/Typescript 😎 in late 2019: I picked up React Native over Christmas 2019, and am now productive in Typescript & React Native, check out Foodprint.
  • πŸƒβ€β™‚οΈπŸ€  Rust: Alongside C++, I read the rust book, but didn't manage to build any complicated programs. So much for getting stuck in! I've decided to build more user facing programs, but won't hesitate to use Rust if I need performance.
  • πŸ’ͺ C++ for 3 months in late 2019:
    • Imperial'S C++ intensive course (where I learnt real programming skills, thanks to Will Knottenbelt and Fidelis Perkonigg). I got 85% in the exam πŸ˜₯ and 84% in courseworks on average.
    • This course taught me to be pragmatic, and to read the documentation 😍. It taught me to do things without watching courses and videos, and just get stuck in. I recommend the same.
  • πŸ₯° Javascript throughout 2019: learning javascript basics and writing scripts in my free time
  • 😑 Java for 7 months in early 2019: As part of on-boarding at Ocado & day to day programming. I didn't enjoy Java. Maybe it was because of the enterprise programming & boilerplate.
  • πŸ˜ƒ Python & Javascript & NodeJS for 6 months in late 2018: Self-taught to make web apps. Finally, I was actually programming. In reality I was just following tutorials and could not make anything myself... So much for deliberate practice.
  • πŸ™‚ Python for about 6 months.
    • in 2017: Self-taught to do data analysis for simulation results
    • in 2018: Self-taught for final year project data analysis for simulation results
  • Matlab for about 3 months 😭 in 2014, 2015, 2016...
    • undergraduate Matlab courses, and several simulation projects. I really did not enjoy Matlab, and know many students who were scared away from programming because of it. Do yourself a favour, don't touch that thing. Use the right tool for the job: in Science, that's Python now, not Matlab.
  • My first real tool I learnt was Adobe Photoshop & Illustrator, mostly to draw illustrations and posters. I started when I was 11.

Devops related platforms I have used (recent first) πŸ’Έβ€‹

  • Gitlab and Github CI/CD: writing CI/CD jobs, including templates used by many other projects.
  • Docker and Docker Compose - writing Dockerfiles for CI, development machines and deployments at work.
  • Kubernetes, Helm, Spinnaker
  • Firebase & GCP - Mobile app backend as a service (authentication, database, cloud functions), including Firebase security rules and application threat modeling.
  • Doc Cloud: The Imperial College Department of Computing Cloud. It's got limitations no amount of money can circumvent. Might be a good thing for my wallet.
  • Netlify, Vercel, Cloudflare Pages - hosting my blog and other small web app projects
  • Terraform - Deployed AWS & Cloudflare resources for a project. And very soon killed the project with tf destroy 🀣. At least I can redeploy it with tf deploy.
  • Cloudflare DNS - They update their DNS records almost immediately when you make a change. So TTL does not matter, mostly πŸ˜‡.
  • AWS EC2, Lambdas - I used to use Lambdas for email forwarding. I also used EC2 it to some extent when working at Ocado. I've also explored Openfaas and Knative, but I don't want to pay for Kubernetes cluster.
  • Heroku - The tool that shows up a lot in front of beginners. I soon outgrew this. I just realised there are some really good websites hosted on heroku.