Charles Lowell, a software developer at Frontside.io known for his contributions to Emacs and JavaScript, shares insights into the unique benefits of a shared Emacs configuration. He discusses the evolution of Emacs from the 90s to now, emphasizing its adaptability and community contributions. The conversation covers implementing ES6 modules in js2-mode and how tools like Undo Tree and Buttercup enhance developer productivity in Emacs. Charles also highlights the importance of personal ELPA archives for smoother development without merge conflicts.
Charles Lowell emphasizes that a shared Emacs configuration fosters collaboration and efficiency among developers by leveraging collective insights and reducing individual troubleshooting efforts.
The use of the JS2 mode in Emacs enhances JavaScript development through real-time code parsing and powerful refactoring options, demonstrating Emacs' capability as a robust development tool.
Deep dives
Charles Lowell's Emacs Journey
Charles Lowell shares his origin story with Emacs, which began at a startup when he was just 18. A senior developer encrypted all other editors, forcing the team to use Emacs and learn its basic features. Later, as he transitioned through various Java-centric environments, he initially leaned towards IDEs like IntelliJ and Eclipse for their powerful features. However, upon exploring lighter languages like Ruby and JavaScript, he revisited Emacs, ultimately finding it to be a superior tool after gaining more development experience.
Shared Emacs Configuration Benefits
In his current company that consists of four developers, Lowell emphasizes the advantages of having a shared Emacs configuration. This method allows all developers to benefit from the insights and discoveries of their peers, creating a smoother collaborative experience. By maintaining a collective configuration, any bug fixes or enhancements can quickly be shared, allowing for consistent usage among all team members. This approach not only increases efficiency through shared solutions but also contributes to team cohesion as everyone operates under the same environment.
Customization and Continuous Integration
The shared configuration originated from a fork of Prelude, a popular Emacs starter kit, which was customized to fit the team's development needs. The configuration is uniquely managed through an ELPA package archive, allowing easy updates without cumbersome Git operations. This CI strategy ensures that any changes pass a test suite before being pushed live, thus maintaining stability and reliability across the development environment. Developers can apply their customizations via hooks in a predefined manner, fostering both individuality and team consistency.
Key Packages for JavaScript Development
In his development work, Lowell discusses several essential packages that enhance the JavaScript coding experience in Emacs. He highlights the transformative nature of JS2 mode, which provides real-time code parsing, enabling powerful refactoring options that mirror functionalities found in traditional IDEs. Additionally, the team needed support for JSX to accommodate React development, showcasing their comprehensive approach to modern web development. They also developed custom utilities for handling errors and managing dependencies within the Node ecosystem, further streamlining their workflow.
We’re back! In this episode, Daniel interviews Charles Lowell
from Frontside.io, an Austin-based software studio with
a company-wide Emacs config and their own package archive! Charles does a lot of
JavaScript work and has contributed support for ES6 modules syntax to js2-mode.
Frontmacs, in their own words, is a
“package-based, web-centric, customizable, awesome-by-default, acceptance-tested
Emacs distribution curated by your friends at Frontside”.
The logic behind having a company-wide Emacs configuration is the benefits of
having a shared configuration: this way, every person on the team is able to
benefit from the discoveries of others (e.g. the things they bring in from the
community). Also, a shared config allows for a low friction for cooperation:
when doing code reviwes, everyone knows the bindings, or the installed
packages. Another benefit of a shared config is its stability, and that as rough
edges are sanded down as time goes on, everybody gets to enjoy those benefits,
and thus helps reduce wasting of time (e.g. by 10 people not having to
individually solve a particular issue with their setup themselves).
Because Frontmacs is distributed as a package on Frontside’s own package
archive, updating Frontmacs doesn’t involve using git (on the surface) and
things like having to manually pull the latest changes, rebasing from upstream,
or making sure there are no merge conflicts. Instead, you just update the
Frontmacs package, as you would with a regular Emacs package, and that will
update all its dependecies and update Frontmacs itself. Then the only thing left
to do would be to restart Emacs to start using the new update.
Undo Tree: “… replaces Emacs’s
undo system with a system that treats undo history as […] a branching tree
of changes”; thus letting you recover any past state of a buffer.