Today was my first day at the Recurse Center, where I'll be spending the next six weeks taking some time off of client work and focusing on learning some new things. My goals for my time here are:
To work with new programming languages for both backend & frontend.
So, having the space and time to work on something of my own, I want to branch out.
Publish a cross-platform app.
Other than some small projects using Cordova, I haven't had the opportunity to build native iOS and Android applications. I want to grow in my career as a developer, and mobile apps have felt like an un-checked box for a few years.
That's what I'm doing here. I never had any formal training in programming; instead, I learned through people who were posting questions, blog posts, tutorials, and classes online. Most of what I have learned from was shared freely. It is amazing to be part of a community that values learning together in this way, and I want to be better at making a contribution.
Form a healthier relationship with work.
This is a "meta" goal for my time at the Recurse Center. As a freelancer, it is easy to overwork. You don't see coworkers clocking out at a regular time, and if you mostly work alone, it's hard to get a sense of how much work is "enough" for one day. I tend to work compulsively, and too much, and have experienced burnout too many times. I won't be writing about this much in subsequent posts, but this is a big goal for me this year, and I also think it is important that we (as developers, as humans) are open about things we struggle with.
This idea is fairly new, and I'm still not sure of the best way to describe it. But, after meeting a handful of other fresh Recursers this morning and discussing what we will be working on, I've formed a bit of a sound-bite: Co-Touch will be a kind of chatting app, using collaborative drawing instead of messages. I want it to be simple and playful, inspired by apps like Flight Simulator and Dialup.
The general idea is that you'll share some kind of canvas with another person, and "draw" to each other instead of sending messages. The drawings will be simple, ephemeral, and time-based - like drawing with your finger on a foggy window.
I don't have any mockups - things are all still very loose, and, since I don't have any collaborators, I think it's OK to just keep it all in my head for now.
I've decided to use a web-friendly renderer for the drawing, maybe working directly with HTML5's
canvas, or using a library like p5.js. This part of the project may be the most technically difficult one, so trying to achieve it in a new language might be taking on too much.
I will need some kind of backend & API. Users will need a way to connect with each other somehow, and I want them to be able to save and replay the drawings they have created together. A simple REST API feels like it makes the most sense, but I'll still need to consider:
- Real-time collaborative drawing - websockets will be involved, and I'll need a way to stream users' "touches" (or strokes) to others as efficiently as possible.
- Database - Each drawing will be stored as a long list of touches, and not as static images, as I was originally planning. A drawing could potentially be made up of thousands of touches, so I'll need a database that can performantly save new entries and fetch many at a time. I am most familiar with Postgres, but I have also done a little work with DGraph and might give that a try.
Six weeks is not a lot of time - especially when you are surrounded by dozens of people working on all sorts of interesting projects. We'll see how much of the above I can really get through in my time here. If I end up with a simple MVP, or even just getting the hang of a new programming language, I'll leave happy.