Console #117 - An Interview With Tushar of Copper - A Go Toolkit to Build Web Apps
Featuring fauxpilot, RustPython, and Lyra.
đ¤ Sponsorship - PostHog
PostHog: Open-source product analytics you can self-host
With PostHog's open-source analytics platform, customer data never has to leave your infrastructure.
Featuring product analytics, session recording, feature flags, heatmaps, experimentation, and more - all available for free!Â
The best part is everything is seamlessly integrated, so you can spend less time configuring different tools and more time getting valuable insight into user behavior.
đď¸ Projects
fauxpilot
fauxpilot is an attempt to build a locally hosted version of GitHub Copilot. It uses the SalesForce CodeGen models inside of NVIDIA's Triton Inference Server with the FasterTransformer backend.
language: Python, stars: 3204, issues: 5, last commit: August 06, 2022
repo: github.com/moyix/fauxpilot
RustPython
RustPython is a Python-3 interpreter written in Rust.
language: Rust, stars: 11801, issues: 187, last commit: August 07, 2022
repo: github.com/RustPython/RustPython
demo: rustpython.github.io/demo/
Lyra
Lyra is a fast, in-memory, typo-tolerant, full-text search engine written in TypeScript.
language: TypeScript, stars: 2536, issues: 9, last commit: August 06, 2022
repo: github.com/nearform/lyra
site: lyrajs.io
Copper
ââââââââââââCopper is a Go toolkit complete with everything you need to build web apps. It focuses on developer productivity and makes building web apps in Go more fun with less boilerplate and out-of-the-box support for common needs.
language: Go, stars: 797, issues: 0, last commit: July 29, 2022
repo: github.com/gocopper/copper
site: gocopper.dev
đ¤ Interview With Tushar of Copper
Hey Tushar! Thanks for joining us! Let us start with your background. Where have you worked in the past, where are you from, how did you learn to program, and what languages or frameworks do you like?
Hey, I'm Tushar and I live in New York City! I work at Robinhood as the tech lead for the Web3 team and have worked at Uber and Apple in the past.
I started programming at a relatively early age of 12. Initially, I played around with simple languages like Visual Basic and eventually moved onto PHP (tbt LAMP stack ;)) when I bought the PHP for Dummies book. This put me on a strong path to build web applications. Eventually, I picked up frontend technologies like React and built a few iOS apps as well.Â
After jumping between different stacks, I started working in Go. I started building my side projects in Go and solidified my skills at Uber where I helped build many large scale systems using Go. Finally, I started dabbling in open-source projects in an attempt to contribute to the wider ecosystem.
What is your favorite software tool?
JetBrains builds the best IDEs out there. I have tried other tools like VSCode but always fallback to GoLand Â
If you could dictate that everyone in the world should read one book, what would it be?
Why Nations Fail helped me better understand the institutions and systems that we live with. It makes you realize to not take institutions for granted but also puts faith in certain things - because now you have a clearer understanding of why something is likely to work.
If you could teach every 12-year-old in the world one thing, what would it be and why?
Any musical instrument! I missed out on this and it is soo much harder to pick it up as an adult. I truly feel having these skills can help in your day-to-day life when you want to relax, take your mind off work, and do "non-screen" activities.
Why was Copper started?
As I built several side projects in Go, I started taking certain common packages out to make the next project easier and faster to build. Copper is just that! It stays true to the Go ethos in terms of simplicity but balances that with making you more productive.
Where did the name for Copper come from?
The Go ecosystem has a trend of naming projects after drinks. To continue the tradition but not make it too obvious, I opted for Copper which is the traditional mug material for my favorite cocktail - Moscow Mule.
Are there any overarching goals of Copper that drive design or implementation?
Copper was built to reduce boilerplate when starting a new project. So, any new feature must prove that it does just that. At the same time, it has to stay explicit with no magic. The balance between reducing code while keeping everything explicit is a huge challenge.
Youâll notice this when creating a new Copper project. The first line of code wonât be setting up an HTTP server or setting up your directory structure or even setting up your database - thatâs all taken care of. Instead, the first line of code will be directly related to your unique project! At the same time, take router.go as an example, where each HTTP route is explicitly declared. Thereâs no guesswork in what your app does and how it does it. You can trace the full request lifecycle easily.
How do you balance your work on open-source with your day job and other responsibilities?
As an engineer, it is my responsibility to keep myself up-to-date with the industry standards and bring the latest and greatest to my day job. Working on Copper allows me to do just that! Itâs a space for me to explore new ideas and work with the wider community. Both of these things make be a better engineer and I hope that reflects in my day job.
I have been a product engineer throughout my career but gained significant experience with framework-level problems while working on Copper. Now, I can share these ideas and experiences with teams at my company and help them build internal frameworks for the Robinhood engineering community.
What is the best way for a new developer to contribute to Copper?
Build a project using Copper and you're bound to run into issues or find missing features. Now you know exactly what you should contribute! Join the Discord group, discuss your proposal, and make a PR.
If you plan to continue developing Copper, where do you see the project heading next?
Today, many web apps are SPAs (single-page applications) where there is a frontend application (built with React, Vue, etc.) that interacts with a backend system exposing JSON APIs. Our industry is slowly shifting back to a more traditional architecture where the backend system may drive more of your app (both frontend & backend). This is similar to how Laravel and Rails work.
I think the Go ecosystem needs a strong contender for this and this is exactly the void that Copper could fill. It'll require newer technologies to keep the benefits of interactivity that you get with SPAs while keeping the simplicity of a single codebase.
Want to join the conversation about one of the projects featured this week? Drop a comment, or see what others are saying!
Interested in sponsoring the newsletter, or know of any cool projects or interesting developers you want us to interview? Reach out at console.substack@gmail.com or mention us @ConsoleWeekly!