Learn a bit about Joshua Johnson
I’ve worked with lots of tools, languages and frameworks over my career, I’ll provide as many as I can remember here along with some small snippet about the capacity in which I used it.
This list is meant to be extremely verbose, if that’s not what is preferred you can find my targeted core skillset here
I’ve been using Swift since it was released back in 2014. It’s the 2nd programming language I’ve grown to love (along with Python) and I’ve continued to appreciate and enjoy its progression throughout the years. I first started iOS development around the time Swift was released and starting to gain adoption and as such Objective C always feels a bit uncomfortable to me (please forgive my unending bias).
I spent a lot of time in Python, behind Swift, this is the language I spent the most time honing. I spent something like 6 years doing Python development and before Swift, Python was the first programming language I loved. Fond memories ❤️
I’ve been using Kotlin since it launched in 2016 and would place it on the podium in my heart (with a clear bronze) for languages I love. A lot of modern functionality and design, coupled with type safety and speed. I’ve mostly used it for Android mobile development and have found it to be a delight.
My first mobile programming language in my early Android days. This was pre-Kotlin so your only option was Java.
I was lucky enough to be given the opportunity to learn C# on the job both during my time at Vizio and Versus. The former, I used it alongside ASP.net for backend programming, the latter, Unity Game Engine development.
The first programming language I learned when I wanted to be a game developer. I first started making things in C using the Allegro game programming engine and Jamsas C++ programming bible. A tough road. I enjoyed C a lot more when I eventually found my way back to it later in my career while dabbling with MicroControllers and embedded devices.
In my fullstack development days I wrote a great deal of Javascript for websites, played around with NodeJS and single page application web frameworks like Vue and Angular. I was never lucky enough to get involved in a large SPA project before I transitioned to mobile but I did dabble.
The less said about my paltry Objective C skills … the better. I can work with it when I need to support legacy code though I’ve often found its syntax frustrating in comparison to my 1st love Swift.
An early adopter of SwiftUI, I started learning and integrating SwiftUI into my projects the moment it was released. I’ve built full apps using SwiftUI and Combine and I aim to continue using the framework as it grows in the coming years..
I started my iOS journey in 2015, I was given the opportunity to learn mobile development on the job for a customer that required it at the agency Envoy. What started out as an opportunity to help the company turned into a 10+ year passion for mobile development. I’ve worked on numerous teams and products since 2015 and continue to enjoy the experience.
When I first began my iOS journey UIKit was the only option for building UI, I used it to build advanced UI for various projects and have maybe grown a bit rusty since the introduction of SwiftUI. I can still bind those collection views when needed though 🫡 - I see you Interface Builder….I see you.
I started playing with Rx concepts during my time creating Android SDKS. I first learned to use RxJava around 2018 or so - learned the ins and outs of reactive streams with some admitted difficulty 😅. Luckily, a lot of the hard earned wisdom transferred over to Combine and by the time it launched alongside SwiftUI I was fairly well poised to take advantage of its power (albeit with different syntax and some caveats). I’ve been building systems and services with Combine since it launched, I was seriously aided by Joseph Hecks fantastic book series here along the way.
Allegro
The first game engine I ever used - I’m honestly surprised it’s still kicking and making active updates to this day (in a post Unity world). This is a C based engine that offers some high-level helpers for things like loading graphics and playing sound. I didn’t realize at the time, but its use necessitated a significant amount of effort in order to make basic games. Think, creating your own game loops, physics, event handlers, collision handlers … etc etc. I learned quite a bit about low-level game programming (admittedly more than I wanted if I’m being honest …. physics ….) and as a first taste of software engineering I was both hooked and terrified.
This remains my favorite web framework to reach for when I need to spin something up quickly. I started learning Django after building some products in CherryPy and wanting a more complete framework that didn’t require as much bootstrapping. Most of my professional Python development career was spent with Django - both at IBM, eventually Envoy and finally Vizio. I learned a lot about database performance and query optimization when having to pick apart some of the problems I walked myself into with the ORM 🥹. It served me well for ~6 years.
Most of my Django experience was spent crafting backend APIs - and for Django, at the time - there was hardly a better framework than DRF. Used this for a number of years to craft RESTful API for various projects and companies.
One of the first web frameworks I learned during my Python years. I used this to create a picture blog early on and came back to it later after I’d had more experience and used it to build a lightweight, speedy, image processor.
I used celery in numerous projects during my backend days, some small - some large, I used it to async process large amounts of metadata for TV/Movie shows, acquire and compute stats for sports scores, and build trending lists for large datasets.
I learned .Net during my time at Envoy while working for their client Vizio. They had a large ASP.net backend that needed lots of feature work and support and I got the opportunity to learn C# and .Net to help aide. I enjoy C# and found the Microsoft ecosystem fascinating. Visual Studio was (and hopefully remains) a solid IDE and I found the experience rewarding.
I spent quite a bit of time making software and systems in a Linux environment (and still do if you count Unix-Based MacOS … and I do 😅). This was my first real development environment when I started getting into backend engineering. An understanding of a number of its subsystems and interactions were required to be successful deploying and maintaining web servers at the time (~2015 or so). Arguably, you still need to know quite a bit if you’re looking to use something like AWS’ VCS images - but you can get by without needing to know nearly as much about Linux these days.