I have always been fascinated by computers from a young age. I am from a geography and era where user interfaces were text-based, yet I managed to spend countless hours playing those (now) retro DOS games. I figured that the only way I could explain my time on the computer to my parents and teachers was to pretend that I was majoring in Computer Science, and that's what I did. Lucky for me, I realized that I was also something I would like to do for a living. I started picking the courses that would lead me to a Computer Science major, and eventually my way into a small software development company.
Dell Ultrasharp 32 inch curved monitor
Kinesis Freestyle Ergonomic keyboard
Logitech M750 Marathon mouse
Apple Magic Trackpad
Startech Dual Monitor KVM Switch
Apple Mac Pro desktop
Apple MacBook 32GB
Since I work on React Native code, I have Xcode and Android Developer tools setup. I frequently switch between XCode, IntelliJ, Nuclide (Atom) while using VSCode for personal projects.
Since I work on React Native, most of my work is mostly front end, involving developing apps for Android and iOS. I use Flow for type checking, BUCK as a build wrapper around Gradle/XCode and Node for most other tooling. At work, GraphQL is pretty much the way to talk to the server which itself is written in PHP/Hack.
When working on personal projects, my stack also usually revolves around NodeJS with Mongo on the backend. I usually deploy on Heroku and AWS. I also like trying new things and try to pick up the flavor of the season when starting new personal projects.
While a lot of my code gets committed into the React Native repository, I also closely watch the changes in React, either because those changes eventually make it into React Native, or just to try out the new ideas they experiment with. Other repositories like Jest and Metro also have pieces that impact my daily work, and I do keep an eye out for issues and pull requests. To keep abreast of new proposals, I also frequent repositories like React RFCs and React Native discussions and proposals.
I have also recently started to learn Flutter and am going over the Flutter repository to understand how the system works.
I am particularly excited about React Native since it is the first time in my knowledge where a "hybrid" framework can be eased into an existing, fully native app. I believe that as more apps are developed, and as frameworks like React Native and Flutter enable smooth and performant apps, software development shops across the world will want to leverage the advantages that come with learning once and writing for all platforms.
As a web developer, many features like live reload or instant updates are taken for granted. When writing mobile apps, I have still had to deal with less than ideal build times and cases where developer tools don't connect as seamlessly.
My ideal development workflow would be the ability to use a single editor for multiple languages (even if we need multiple languages) and being able to connect my favourite developer tools to those systems.
I am a big proponent of open systems and I love how Chrome made the debugger protocol like a specification, or how the format of the traces from a profiling session is well documented. These APIs/specifications let me bring in my own toolchain to connect to the system, enabling even more innovation.
I am starting to get into the new C++ world, a world with smart pointers and lambdas. I eventually want to get to Rust after I am able to rebuild my C++ foundations.
Back in the day, I build a project to automatically measure the performance of a web page. The project was called browser-perf and was an end to end testing tool that would run specific user scenarios to give metrics around scroll performance, frame rates, memory usage, etc. This was a port of Chrome's performance suite but turned around to test the performance of web pages instead.
Many companies working on automation web performance have picked up this project and contributed to it. If I can talk about a second project, it would be a polyfill that I wrote for IndexedDB. I was associated with the specification and was sad when I realized that it was not supported on Safari. I wrote up the polyfill that relied on the older WebSQL specification, and an active community continues to maintain the library.
I believe that improving one's understanding of the basics always helps. While many developers look for the next big thing, I believe that with a solid foundation, it is easier to pick up newer ideas.
I also like to emphasize the balance between depth and breadth, that would help someone compare the different solutions present for their use cases.