Skills

I thought it would be a good idea to list some of the technologies I use here. Although I don't want this page to just be a list of languages and frameworks, so with that in mind, I will try to qualify the listed items with some sort of explanation of how I use them or links to code or blog posts I have written and limit the items here to just the ones which are significant to me.

Languages

Although the only language I use for work is Javascript, I have developed with other languages in my spare time because I find that learning the concepts from other languages helps me write better JavaScript, plus it's fun!

JavaScript

As stated above, this is the language I use daily for my job and therefore the one I know best. It's also the language which I have written the most blog posts about. In addition to building frontend applications, I have also written web servers and CLI tools with JavaScript.

Rust

I enjoyed learning Rust which was quite a steep learning curve coming from JavaScript. Aside from working my way through the official book I wrote a couple of CRUD APIs and a CLI tool for listing the currently installed packages in JavaScript repositories which I use pretty much every day.

Reason

After learning Rust I found Reason which allowed me to write frontend applications in React with a language which is syntactically similar to JavaScript but with a solid type system. I enjoyed using it but the trade-off was that the additional complexity introduced through the need to bind to JavaScript modules did make development slower than writing in plain JavaScript. For this reason I can't see myself using it much in the future unless I end up using it in my day job.

Typescript

Typescript sits somewhere between JavaScript and Reason for me. I haven't used it extensively but I do use it in my photography website where I found that being able to create interfaces to describe data structures for code completion really useful in modules which passed a lot of data around.

Go

I haven't spent a great deal of time with Go but I have built a Graphql server to serve the list of blog posts on this site. I really enjoyed using it so I'm looking forward to finding some more projects to work on in the future.

Frameworks

I'm going to use the term "frameworks" loosely here, basically I'm classing it as any tool I use with JavaScript to create applications.

React

This is the main framework I use in my day job. I do enjoy using it, more so since the release of hooks as they have allowed me to write much more functional code which I prefer to using classes. I've written several blog posts on it but I don't have that many examples in Github; I prefer to try other tools in my spare time as I use React all day at work, the only exception being this site.

Svelte

Svelte is probably my favourite JavaScript framework, I use it with Sapper which provides routing and server-side rendering. Github has classed it as a language which is why I'm able to provide a link to some repositories above. If I had to create a website quickly I would definitely use Svelte.

Gatsby

Gatsby is a framework built around React. It's main party trick is that it has a data layer which you can query at build time with GraphQL to create pages dynamically. This site runs on Gatsby so I've included a link to the code in Github above.

Node

I've used Node for writing web servers and also for creating scripts which perform tasks such as cloning multiple repositories or scraping data from websites. I've included a link above to a project which sends me a weather report each night as an example.

Backbone

No links for this one and Backbone isn't something I would like to go back to using when we now have the likes of React and Svelte but it was the main framework we used when I started my job so I do have experience with it and therefore it's going on the list!

Additional

Test Frameworks

I've used Mocha, Jest, Enzyme, React Testing Library and Cypress. My preference is to use Jest with React Testing Library for unit tests and Cypress for integration tests. I mainly write tests for the code I write at work although I have also written tests with Cypress for my photography website which can be viewed on Github (link above).

Production Environment

I use CI/CD tools for releasing my code. At work this is with Jenkins and Gitlab Workflows, my own projects use Netlify, Github Actions or (in their infancy) bash scripts. I usually use Docker and Docker Compose for serving applications or for running JavaScript scripts as executables and NGINX for proxying incoming requests to the correct ports for services.

Development Environment

I've used macOS and several Linux distributions for development in the past but I'm currently using Windows with WSL2 both at home and at work. I use Zsh, Tmux and Neovim unless I'm trying out a new language and want easy access to extensions, then I use VsCode (with Vim key bindings).