Emacs interview: Daniel Semyonov

| emacs

Emanuel Berg wanted to contribute this interview of Daniel Semyonov. Here it is! - Sacha

Interview with Daniel Semyonov, self-taught programmer and Emacs developer, who currently works on an Atom backend for Enacs Gnus - nnatom (Sourcehut link, might not be working) - among other projects.

Q: Can you tell us something about yourself, where you live and so on?

A: I'm a 25 year old hobbyist programmer, recently unemployed, living in Israel.

Q: Where did you first learn how to program, and how did that happen - do you remember?

A: I was interested in programming from a very young age, mainly due to video games. When I was around 8-9 years old, I found a set of tutorials for Game Maker on some website probably long gone by now, and I made a simple single player pong game, where you just play against a wall.

I made a bunch of further attempts to learn programming but most resources I found in Hebrew back then were for basic web development which I didn't find very interesting.

I then took after-school classes where I learned basic C# when I was around 16. I made a bunch of simple programs, and also a simple 2D platformer with XNA. ["XNA's not acronymed", a Microsoft freeware platform for games.]

Q: After that, how did it happen that you got involved in the free software and open source world? Did people bring you along or did you find it on your own? What were your impressions at that time?

A: I discovered free software through Linux, and honestly really "got it" through Emacs.

I started using Linux around 2015, dual-booting with Windows, when some programs I found, probably on GitHub, had to be compiled from source, and only had instructions for Linux. Probably overkill, in hindsight.

Eventually I discovered Emacs and Elisp. Learning Elisp was, for me, incredibly easy because all the information I wanted was always available in a convenient way. Even when there was no docstring, I could click a button to jump to the source code and I could see the results instantly. This made me really appreciate the value of being able to see and modify the source code.

Q: Is there a community for open source people in your city - if so, are you in contact with them? What is your impression from universities and business offices, what kind of position do we, as in Emacs, Linux, BSD and so on, have? Do you see it a lot and do people speak about it enthusiastically, or are they indifferent to it?

A: Unfortunately, there is no community like that in my area which is fairly remote.

I'm also not part of the tech industry in my country and I don't have much experience with universities. To be honest, I can remember maybe three people I've met which expressed any sort of enthusiasm for these things. I try talk to people about Linux, Emacs and other related topics whenever they seem interested, and almost no one ever has any idea what I'm talking about unfortunately.

Q: When and how did you first encounter Emacs in your life? Do you remember why you were attracted to it? Why do you think it happened that you became not just an Emacs user but a developer of its software?

A: I encountered Emacs first when I wanted to program on Linux and I was searching for recommended editors. I noticed quickly a lot of arguing about Vim vs. Emacs, which led me to use Vim for a while.

Vim was annoying to configure - from what I remember, I haven't tried in years - so I looked into Emacs, and honestly I decided to switch to it because pictures of Spacemacs looked cool.

I quickly discovered that while Spacemacs looks cool, I didn't understand how anything works, and after a bit decided to try building my own configuration. Thankfully, Elisp is a pretty nice language, and Emacs allows you to do a lot with just Elisp, so I quickly made more and more advanced changes until eventually I started developing packages and hacking on Emacs itself.

Q: There are many reasons people become programmers, what was the most important one to you?

A: As you might guess from some of my earlier answers, I never really had a lot of money, and many times during my life I had a desire to work on various projects or do various things, but I couldn't afford to do so. As a programmer, it feels that if I only have a simple computer and patience, I can do anything I want.

Q: What project are you currently working on? Go ahead, take your time to describe it - what problem does it intend to solve, and why is it so interesting for you to spend so much time on it? What problem have so far been the biggest and did you overcome it?

A: Honestly, I always work on a bunch projects at once, since I find it hard to focus on one project for an extended period of time. One project I currently work on is a Gnus backend for Atom feeds. I have been working on it for around 3 years at this point, though most of the development actually happened over fairly short time periods, just spread apart.

When I first wrote it, I had a lot of trouble understanding how to implement a backend in the first place. I was much worse at Elisp back then. This led me to eventually separate feed parsing (which is the part you can't avoid handling if you implement a backend for a new type of feed) from the rest of the implementation.

After a few iterations, nnatom, the Atom backend, was based on nnfeed, an "abstract" backend which handles everything except for actually parsing a feed.

This means that nnfeed can be used to define new backends very easily, with minimal knowledge of how Gnus actually works. Since this seems important to me (I honestly don't know the last time a backend was added), I did extra work to make 'nnfeed' more generic. It supports in theory "feeds", Gnus servers, providing multiple Gnus groups, it doesn't require reading the whole feed ahead of time to start parsing it (which is meant to support feeds which can span multiple files/urls, like JSON feeds), it notifies the inheriting (parsing) backend when the last article parsed wasn't new or updated (to prevent parsing the entire feed if it can be avoided, though this is not used by `nnatom' since Atom feeds are only one file anyway), and it should handle most types of articles (and I made that part of `nnfeed' also modifiable by inheriting backends in case there are some it can't).

Q: From a human perspective, how has open source treated you?

A: I've found that usually I either don't get a response or I get a positive one when I contribute in some way to a project. So all in all, it's been fairly positive.

Q: Is there anything we can do better to support our programmers all over the world?

A: Just be nice to them.

As a mostly self-taught programmer, the only times I really advance as a programmer, are when I'm daring enough to try something I don't feel confident about. If at that point someone insulted doing something wrong or making a mistake, I would probably stop working on it to be honest. I won't name it, but there is a project I am passionate about which I will likely never contribute to because the developers often attack would-be contributors for making mistakes, and I just don't want to deal with that.

Thanks to Daniel Semyonov and Emanuel Berg for sharing this story! Daniel has a small website at https://dsemy.com/ , and Emanuel can be found at https://dataswamp.org/~incal/ . - Sacha

You can comment with Disqus or you can e-mail me at sacha@sachachua.com.