An interview to someone with interesting things to say about software development, software engineering or open-source

Posts

Interview with Thorsten Ball, author of “Writing an Interpreter in Go”

Thorsten Ball is the author of the book Writing an Interpreter in Go. I recently found out about his book and I reached out to him to ask a few questions about his ideas on creating programming languages, writing a book and discuss his approach.

Writing an Interpreter in Go - A book from Thorsten Ball

Writing an Interpreter in Go – A book from Thorsten Ball

Let’s meet Thorsten

Hi Thorsten can you start by telling us a little bit about you?

Hello Federico! My name is Thorsten Ball and I’m a software developer from Germany. I’ve been working with a web stack for the last five years of my professional life. That means: Ruby, JavaScript, Go, HTML, and yes, my achilles heel: CSS. I guess you could call me a full-stack developer. I’m self-taught and didn’t study computer science, so in my spare time I’m now digging deep and trying to understand everything I come across. In the past few years, that has been Unix, web servers, operating systems, systems programming, programming languages, interpreters and compilers. Besides blog posts and open source tools, one result of my passion for opening black boxes is the book “Writing An Interpreter In Go”, which I’ve self-published two months ago. The book is a practical introduction to programming languages, interpreters and compilers, written by a self-taught beginner for other beginners, who are overwhelmed by most classic literature and want to dip their toes into the topic without losing a foot.

I have seen that you have been working with Ruby for some time. In the Ruby community there is a strong interest for internal DSLs: did it have a role in making you interested in languages?

Not really, no. I didn’t get interested in programming languages because I wanted to create my own or a DSL, but because I wanted to better understand how existing languages work and how they’re implemented. I’ll also always fall for a bit of mysticism in programming and the reputation and aura compilers and virtual machines have certainly got me hooked. Steve Yegge’s “Rich Programmer Food” did the rest in convincing me that on my personal journey to being a great programmer I can’t cheat my way around learning about parsing, lexing, interpreters and compilers.

I read you had your “lisp period”. I can relate to that: I went through a Clojure period and a Haskell one myself. Is there any other language that caught your attention lately?

There’s actually quite a few. The first one is Elixir/Erlang. As a Rails developer by day I’m intrigued by the Phoenix framework and the Erlang ecosystem and tooling. The functional aspect, the VM, the deployment story, the stability — that all sounds too good to be true. I already spent some time working through the Elixir book, but I haven’t done any “serious” programming with it. Then there’s Rust, which has been on my list for at least a year now and it’s high time I finally learn it for good. I also think I want to learn one language from the ML family, just to broaden my horizons. I’m currently flirting a bit with OCaml by working through the excellent “Real World OCaml” book. And then there’s Forth, which I want to finally grokk, Clojure, which I tried to learn last year but still want to use for a “real” project, and a bunch of frontend languages that sound really interesting: Elm, PureScript and TypeScript.

Let’s ignore for a moment the constraints of your daily job: what is the programming language you would use all time if you could? Would you like to use more Go or Lisp or something else?

Phew! That’s a good question and I don’t think I have a clear answer. Ruby certainly feels like home to me, just because I’ve been using it for so long and can practically write it in my sleep. Go is not a perfect language and certainly has a few downsides, but it also has great ergonomics: really, really great tooling, easy deployment and it’s fast. And then there’s Lisp, which is certainly a temptation, just because I love it so much and it has a special place in my heart, but I’m not all too experienced with using it on a daily basis. In the end I have to say that my perfect language would need to have first-class functions, great tooling, a REPL, a type system that can help you, a testing culture, a striving, welcoming community and enough libraries/frameworks to be useful… I haven’t found it yet. If you have, please tell me. Until I do, I’ll use anything that comes closest to that.

Federico: it seems you have just described Kotlin…

 

Thorsten Ball

Thorsten Ball 

About building languages

Which languages do you enjoy more writing? Small DSLs for developers? Or something more tailored to end-users?

I haven’t built a language for end users and production use yet, even though some of the Ruby metaprogramming I did would certainly count as a DSL. I rather build to better understand how something works. But I think in the future the skills I’ve acquired by writing “Writing An Interpreter In Go” and building interpreters along the way will certainly come in handy. That could be when parsing configuration files, building a custom query language or just modifying something existing.

What is your opinion on tool-support: do you think notepad is enough or should every language comes with a full-blown IDE? I see that in your book you discuss building a REPL: do you think it is a critical component for supporting a language?

Oh boy, I’ve certainly stepped on some toes in the past when talking about IDEs, so here’s my attempt to approach this topic with the necessary tactfulness. First of all: I’m not a huge fan of IDEs. I think they hide a lot of complexity, not by abstracting it away, but just by stuffing it into some 3rd level context menu. And as soon as something goes wrong, you’re sitting there, wondering “what the heck did just happen?”. In the worst case, they give you some buttons to push to make some other buttons change their color, without you knowing what’s happening. But in the best case, combined with the right language, they can offer tremendous leverage and power. Compared to that a Vim user (which I am!) would look like a caveman rubbing sticks together.
That being said, I don’t think a full-blown IDE is necessary. But great tooling certainly is. I’m thinking of CLI tools here, primarily. It’s what can make or break a language. Just look at Go. On paper it’s the most boring language, but in practice, people are ecstatic about the great tooling it provides and how much easier it makes their daily work.

A REPL can be one of those great tools. It’s not a silver bullet, but it can make a language much more approachable and usable. I personally love working with REPLs, since they allow me to get feedback really fast and give me a place to sketch out ideas real quick. If I don’t have a REPL I need something else that can give me that.

About Writing an Interpreter in Go

You chose to write your interpreters using Go. Go is a language I am not familiar with, can you help us understand which characteristics of the language made you choose it?

Go is a really small language with a great standard library. It’s easy to understand and really easy to read. If you’ve used another “curly braces language” before, you can read Go code. Combined with the fact that Go code tends to be rather simple and not use many advanced language constructs (because there aren’t any in Go! Besides channels…), this makes Go the perfect choice as a teaching language.

My goal with the book was to make the topic of interpreters as approachable as possible and Go helps with that. You can understand the code in the book and translate it to your favorite language of choice, even if you’re not an advanced Go user.

Do you think writing an interpreter with another language, like Ruby, would be very different?

Besides performance and tooling, I don’t think writing an interpreter in Ruby would be vastly different from using Go. But using Ruby as the language in the book would’ve certainly made things much more interesting. It would be less lines of code, sure, but languages with metaprogramming capabilities like Ruby also make it easy to write code that no one else can understand, let alone translate it to their favorite language.

You chose the approach of writing your own lexer and parser, instead of using a parser generator like ANTLR. Why? Was more to satisfy your curiosity or do you think there are benefits in writing your lexer and parser?

That was a conscious choice I made. Before writing the book I was really frustrated by other resources on the topic taking the “let’s just use a third party tool” approach. I’m here to learn, damn it! Show me the code, show me the parser! So I chose to implement a full Pratt parser, step by step, in the book. That way the reader can always use another tool later on, but at least they’ll know which problems it solves, since they solved it by hand before. It’s easy to say “oh, parsing is a solved problems, just use yacc/ANTLR/etc”, but if your goal is to learn, why should you skip learning about parsers?

You wrote a book specifically about interpreters: can you tell us when do you think is it better to build an interpreter instead of a compiler?

If you’re out to learn about programming languages, interpreters and compilers, I think you should start by writing an interpreter. They’re generally easier to understand and easier to write. Later on, you can always extend the interpreter and even turn its tree-walking mechanism into a compilation step. Then you can compile to bytecode or to native machine code. Or you can build lazy-evaluation into the interpreter, or you can try your hand at JITing. And then the line between interpreters and compilers starts to blur anyway. And if you’re starting out, I think it’s important to get results quickly – to keep the motivation up – and that’s easier to do with an interpreter than, say, a compiler compiling C to x86 machine code.

If someone was about to write several languages and several interpreters, how much code do you think could be reused? How much of the code presented in your book is general and reusable?

There’s a separation of concerns in most programming language implementations that feels almost natural: there’s a parsing part, one or more independent internal representations, and components that either translate between these representation or evaluate them. Of course, the details differ between implementations, but it’s safe to say, that most follow this separation. That makes it easy to reuse certain parts. As an example, I took the Monkey interpreter presented in the book and turned it into a bytecode compiler and virtual machine, without touching the lexer, the parser, the AST or the tokens at all. All I did was switch out the evaluation process with a compiler that emits bytecode and added a virtual machine that interprets this new internal representation, the bytecode. So in general, there are a lot of possibilities to reuse that type of code. That’s why projects like LLVM exist. Of course, the final decision – whether to reuse something or start from scratch – has to be made on an individual basis.

The code presented in the book is not meant for production use and is not even the most elegant/performant/reusable code. That wasn’t the goal. The goal was to make the code as easy to understand and readable as possible. I won’t guarantee what happens when you try to use it in production 🙂

It seems that “Structure And Interpretation Of Computer Programs” had quite an influence on you. Who should read this book? Any other book you want to recommend?

Yes, it’s a fantastic book. If you’re a self-taught developer and want to get a solid computers science foundation on your own, or if you want to know why someone would call Lisp/Scheme beautiful: read this book! You can’t go wrong doing it. It asks a lot from you, the exercises are incredibly tough and the pace is high, but you also get a lot back.

I can talk about and recommend books all day, but if you want to dig deep and build a foundation for your understanding of computers, here’s my top three: the Code book by Charles Petzold, Programming From The Ground Up and The Elements of Computing Systems (From Nand to Tetris). And then there’s the fantastic The Soul Of A New Machine as a companion.

About writing a book

How was your experience writing the book?

Fun, despair, weeks of productivity and motivation, weeks of frustration — all of it. It took me nearly a year to write the book, to go from “I want to do this” to “Wow, it’s out there now!”, and of course I went through up and downs. But all in all, it was a very rewarding experience. I learned a ton — about the topic at hand, of course, but also a lot about myself — and I’m incredibly proud of what I did.

I read with interest your blog post “What I didn’t do to write a book“. It seems a human approach to writing a book. Have you any other advice you would like to share with someone trying to write a book for the first time?

Everyone’s path is different. You need to be completely honest with yourself and find out what works for you. But if there’s one general advice I would give, it’s the one I got from a friend of mine: don’t start yak shaving, start writing. Don’t obsess over the file format, over whether you use gitbooks or leanpub or emacs or vim, just start to write, try to create something. You can always reformat it or switch a provider later on.

Many authors of technical books struggle to the promotion of the book. What are you doing to let people know about your book? What did it work for you and what did not?

I haven’t done any “classic” advertisement yet: I didn’t spend any money on ads. All I did was to set up a mailing list on which people can sign up to get notified when the book is released. And then I just tried to write blog posts around the topic, to get people interested. But I don’t want to write clickbait articles. I want real content that can convince a reader that I know what I’m talking about and that I can write. And if they are so inclined, they can buy my book. I shared these blog posts on Reddit, Hacker News and Twitter and, well, the response has been quite good. I think being honest and not trying to trick people into buying something they don’t want works best.

Conclusions

What is the best way to follow you?

Probably @thorstenball on Twitter. Then there’s my blog at thorstenball.com, where you can subscribe to the feed and also subscribe to my mailing list on which I send out occasional updates about the book or new blog posts.

Do you plan to give talks in the near future?

Nothing planned yet, but I’m sure I’ll talk at one or two user groups. I’m currently working on a print version of the book and want to extend it some more.

Federico: It was really nice for me to discuss with someone who shares the passion for languages. I liked very much his curiosity and his interest in understanding the mechanisms behind parsers, interpreters and compilers. I also got some nice ideas about what to read next. He has also convinced me to include a REPL in the next languages I am going to build. I hope you had fun too. If you like interviews there a few you could take a look at:

Interview to Erik Dietrich on Static Analysis and a data driven approach to refactoring

eirk_dietrich_static_analysis

Erik Dietrich is a well known Software Architect with a long experience in consulting. His blog (DaedTech) is a source of thoughtful insights on software development. In particular I was very interested by his usage of static analysis and code metrics in his consulting work.

I am myself a relatively young consultant and I thought it would be very valuable for me to hear his opinion on these topics and in general about consulting in the software industry.

So I wrote to him and he was kind enough to answer some questions.

Introduction

Can you tell us about the typical projects you work on?

It’s hard to summarize typical projects over the course of my entire career.  It’s been an interesting mix.  Over the last couple of years, though, it’s coalesced into what I think of as pure consulting.  I come in to help managers or executives assess their situations and make strategic decisions.

Can you tell us about a project which results exceeded your expectations?

There have been a couple of projects of late that I felt pretty good about.  Both of them involved large clients (a Fortune 10 company and a state government) to whom I furnished some strategic recommendations.  In both cases, I checked back from time to time and discovered that they had taken my recommendations, executed them, and expanded on them to great success.  What I found particularly flattering wasn’t just that they realized success with recommendations (that’s just what you’d expect from a good consultant), but how foundational they found the seeds I had planted there to be.  They had taken things that I had written up and made them core parts of what they were doing and their philosophy.

What make your work difficult? What are the conditions which reduce the possibility of a success?

When it comes to purely consultative engagements, the hardest thing is probably gathering and basing recommendations on good data.

If I’m writing code, it’s a question of working with compilers and test suites and looking at fairly objective definitions of success.  But when it comes to strategic advice like “should we evolve this codebase or start over” or “how could we make our development organization more efficient,” you get into pretty subjective territory.  So the hardest part is finding ways to measure and improve that aren’t just opinion and hand-waving.  They’re out there, but you really have to dig for them.

Human factor

When promoting changes to a software development team how important is the human factor? Do you face much resistance from developers?

It’s the most important thing.  In a consultative capacity, it’s not as though I can elbow someone out of the way, roll up my sleeves, and deliver the code myself.  The recommendations can only come to fruition if the team buys in and executes them.

As for facing resistance, that happens at times.  But, honestly, not as much as you might think.  Almost invariably, I’m called in when things aren’t great, and people aren’t enjoying themselves.  I try to get buy-in by helping people understand how the recommendations that I’m making will improve their own day to day lives.  For example, you can reduce friction with a recommendation to say, have a unit test suite, by explaining that it will lead to fewer late night bug hunts and frustrating rework sessions.

How do you win support from people? Developers employed by the company can get defensive when someone from outside comes to suggest changes to their way of work. In your recent post What to do when Your Colleague Creates Spaghetti Code you suggest using data to support your considerations. How well does it work for you? Do you always find data to support your proposals?

Using data, in and of itself, tends to be a way more to settle debates than to get support.  Don’t get me wrong — it’s extremely important.  But you need to balance that with persuasion and the articulation of the value proposition that I mentioned in the previous answer.  Use the data to build an unassailable case for your position, and then use persuasion and value proposition to make the solution as palatable as possible for all involved.

Static analysis

Is there any typical low hanging fruits for organizations which start to adopt static analysis? Anything that can be achieved with limited experience and effort?

I would say the easiest, quickest thing to do is get an analysis tool and set it up to run against the team’s codebase.  Those tool vendors know their stuff, and you’ll get some good recommendations out of the box.

Do you work with different language communities (e.g., JVM, .NET, Ruby, Python)? My impression is that on .NET there are better tools for static analysis, and maybe more maturity in that community. Is that your feeling also?

With static analysis, these days I work pretty exclusively in the .NET and Java communities, though I may expand that situationally, if the need arises.  As for comparing the static analysis offerings across ecosystems, I’ve actually never considered that.  I don’t have enough data for comparison to comment 🙂

In the Java community there are a few tools for static analysis but I think their default configuration reports way too many irrelevant warnings and this contribute to the poor reputation of static analysis in the Java world. What do you think about that?

I don’t know that this is unique to Java or to any particular tool.  Just about every static analysis tool I’ve ever seen hits you with far more than you probably want right out of the gate.  I suspect the idea is that it’s better to showcase the full feature offering and let users turn warnings off than to give the impression that they don’t do as much analysis.  

A common problem of open source software is the lack of documentation. In your post Reviewing Strangers’ Code on Github you talk about the challenge of confronting with unfamiliar GitHub projects. Do you think static analysis tools could be used to get an overview of the codebase and familiarize faster with the code?

Oh, no doubt about it.  I run custom analysis on new codebases just to get a feel for them and gather basic statistics.  What’s the length of the average method?  How systematically do they run afoul of so-called best practices?  How do the dependencies cluster?  I could go on and on.  I feel like I’d be looking at a codebase blind without the ability to analyze it this way and compare it against my experience with all of the previous ones I’ve examined.

The role of developers

Your next book, Developer Hegemony, is about a new organization of labor and the role developers could occupy in it. Can you tell something about it? And do you think this new organization could be advantageous also for other creative jobs?

In the book, I talk extensively about the problems with and vestigial nature of the corporation in the modern world of knowledge workers.  Corporations are organized like giant pyramids, in which the people at the bottom do the delivery work and are managed by layer upon layer of people above them.  To make matters worse for software people, a lot of these organizations view their labor as an overhead cost.

I see us moving toward a world where software developers move away from working for big, product companies that make things other than software.  I see us moving out from having our salaries depressed under the weight of all of those layers of corporate overhead.  A decent, if imperfect, analog, might be to doctors and lawyers.  And, yes, I think this absolutely can apply to creative fields as well.

To add on to your post How to Get that First Programming Job what is something that the average programmer is not aware of and could improve their work ?

One of the best pieces of advice I think I can offer is the following, though it’s not exactly technical.

If you’re working and you find yourself thinking/muttering, “there’s GOT to be a better way to do this,” stop!  You are almost certainly right, and there is a better way.  Go find it.  And don’t automate something yourself without checking for its existence.

One of the most common mistakes I see in relatively inexperienced programmers is to take the newfound power of automation and apply it everywhere, indiscriminately.  They solve already-solved problems without stopping to think about it (reinventing wheels) or they brute force their way through things (e.g. copy and paste programming).  So, long story short, be sensitive to solutions that may already exist or ways to solve problems that may not always involve writing code.

You are clearly an accomplished professional. Could you share one advice for advancing the careers of someone is the software industry?

One thing that drives me a little nuts about our industry is something I described in this post.  We line our resumes with alphabet soups of programming languages, frameworks, and protocols that we know, but with little, if any mention of what sorts of business or consumer problems we know how to solve.  It’s “I have 8 years of C++” instead of “I can help your team cut down on the kinds of memory leaks that lead to system crashes.”

It will improve your career and focus your work if you start to think less in terms of years and tools and more in terms of what value you can provide and for whom.

Conclusions

I am very thankful to Erik for sharing his opinions. I think there are many interesting takeaways. Two ideas in particular made me think:

  • The changing role of developers: maybe some will still prefer the security of corporate jobs but there are undoubtedly many opportunities for those we are willing to go independent.
  • We as professionals have to raise the bar. One way to do that is start taking more seriously our job by basing it on data, when that makes sense. Data cannot yet provide all the answers, but it can help and it should not be ignored.

Do you agree?

Interview to Vaclav Pech on Jetbrains MPS: the community and the future

If you are reading this blog regularly you know that I am interested in many things but language engineering is the topic closest to my heart. You could have also noticed that I am spending a lot of time working with MPS. If you are instead a new reader you may not know that MPS is an advanced Language Workbench based on projectional editors. In practice you can use it to create Domain Specific Languages with their editors and supporting tools.

A couple of weeks ago I decided to contact Vaclav Pech with a lot of questions about MPS: I love it and there are so many things I wanted to ask about. I had in this way the chance to satisfy my curiosity and take a glimpse at the future of MPS. Vaclav has been so extremely kind and helpful providing detailed and honest answers to all of my questions. It is now a great pleasure to share all of this with other persons interested in MPS.

mps

Introduction

Can you tell us something about yourself?

Hello Federico. First of all, thank you for giving me this wonderful opportunity to tell your readers more about MPS, I’ll be happy to answer all your questions.

I’m a software engineer since 1997, majoring in server-side Java, databases and distributed systems. In the distant past I’ve been working as a developer and consultant on several projects in the finance sector. After joining JetBrains I’ve gradually expanded into the domain of development tools, code analysis, programming languages and DSLs.

What is your role in Jetbrains?

I’ve been with JetBrains since 2003. During these 13 years I’ve had the chance to try several exciting roles. I started in a purely development role for a few years. About four years into it the marketing department won me over and I’ve become a full-time JetBrains evangelist. Then, in about 2011 I jumped back into a more technical role in the MPS team, which, however, included not only in programming tasks, but also a variety of non-programming activities. You can sometimes see me present at conferences, give lectures at universities, deliver MPS trainings, visit partners or shoot technical screen-casts and write documentation.

Adopting MPS

Looking at the forum or the questions on Stack Overflow it seems to me that the interest in MPS is growing. What do you think? What are your impressions on MPS adoption?

Yes, I have the same feeling, and it is not only from the questions, but also the answers that people from the community provide – from their increasing sophistication you see the growing experience among the users.

Our statistics on MPS usage and downloads support the feeling – the active user-base has been growing steadily during the recent years, so that It tripled over the last five years. We’re also happy to have discovered universities using MPS in their curriculum to teach DSLs.

Just like many other open-source projects we live somewhat in the dark not knowing who and how uses our tool. That’s why the Partnership form has been created – to get some feedback from the users on how they use MPS. The discussions that we hold regularly with some of our customers and the feedback that they give us help us direct our focus.

Federico: I agree on the increased level of sophistication. I think that the community is starting to think about best-practices and patterns start to emerge. It is not just about “how do I use feature X” but the community is starting to ask “what is the best way to design the solution to this kind of problem”. We as a community are understanding these things and I find it very exciting.

I saw JetBrains started offering MPS training: how is it going? Any particular plan on that front?

We did, indeed! The team had been receiving requests from customers for quite some time before we decided to enter that field. You can currently choose from two levels of trainings – Introductory and Intermediate, which together cover the fundamentals of language design in MPS. They are typically held at our premises in Prague. We’re also able to do on-site trainings for our customers.

What do you think are the main factors preventing wider adoption of MPS?

I tend to think that this is related to the low adoption of language workbenches in general. In my opinion the experts in domains that would benefit most are not yet aware of the true potential of these modern tools. To speak more concretely about MPS, JetBrains has over time gained pretty good reputation among programmers thanks to its IDE’s, like IntelliJ IDEA or ReSharper. This success story is, however, only marginally relevant for the target audience of MPS. In a sense, marketing of MPS does not overlap with the marketing of the other JetBrains products much.

Federico: I agree that the lack of awareness about DSLs is a major issue. In many fields DSLs could improve dramatically the productivity but people who could benefit from them have simply no idea this is possible. It is also true that marketing MPS is different than marketing IntelliJ IDEA, however I am seeing people becoming more confident in adopting MPS because Jetbrains is becoming more and more well-known and established. This reassures prospects that the company can afford the development of MPS in the long run.

MPS Community

Where are you seeing more interest in MPS? Which countries? Which fields?

I would avoid any generalization until the numbers get considerably larger. The sample we currently have is unfortunately too small and varied to make any sensible conclusion or find a pattern, I’m afraid.

We have users in the insurance business, a tax-collecting government organization, TV studios, research laboratories and, thanks to mbeddr, also numerous embedded software houses.

When in comes to geographical  distribution, we can see Germany at the head of the ploton at the moment, followed closely by a few other European countries. USA, India, China and Israel are also notable in our statistics.

At which conferences or which venues is easier to find MPS enthusiasts?

This is something we yet have to discover. We used to attend CodeGeneration in the past, where we would find many like-minded souls. This conference, however, has been discontinued. At the general developer conferences you always find a few people interested in model-driven development or DSLs, but the critical mass is missing there.

Federico: Perhaps we could think about organizing a small online conference to compare our experiences with MPS. I would love to see how others are using MPS at this moment.

What do you think could help growing a community?

JetBrains has always followed the strategy to win customers by focusing on delivering superior tools – listen carefully to the passionate members of the community and then do your best to satisfy well their needs with the IDEs.

As for MPS, we would like to make it more suitable as a tool that domain experts could use to write DSL code. The tool should offer more guidance through the inherent complexity, which would primarily require numerous improvements in the usability of the user interface. Having a web-based UI would certainly help, as well.

Are you aware of anyone doing interesting things with MPS?

I don’t think there can be a boring project based on MPS. In fact, most of MPS-based projects that I’m aware of do very interesting things. We partner with a government institution, for example, that attempts to model parts of the country’s legislation in MPS. They take MPS to its limits by heavily focusing on tabular notations, in-editor interpretation of the models and seamless integration with several inherited legacy systems.

Fabian Campagne has created MetaR – an MPS-based IDE for statistical data analysis. The Faculty of Mathematics and Physics of Charles University in Prague investigates the paths to automatically create language definitions in MPS for existing languages by importing their grammar. Obviously, there are many more projects that would be worth mentioning. Most of those that gave us their permission are listed on the MPS project web-page.

Federico: I would love to hear more about all these projects. In particular what they are doing at the Charles University sounds pretty amazing. I played a little bit on integrating ANTLR and MPS and I think that Marco Lombardo could have done something in the area too.

Have you ever seen a project built on MPS that surprised you?

The mbeddr project has always been very surprising. These folks not only have created a powerful IDE for embedded software developers to program motor controls, robots, avionics and other embedded devices, but along the way they have built a set of super-handy micro-tools and languages called mbeddr platform that they have generously shared with the community. I’ve seen these gadgets being used in many other MPS projects.

Federico: I am most definitely among their users!

It seems to me that the Mbeddr platform is contributing a lot of interesting stuff. Could we see some of this stuff integrated in MPS in the future?

We’re very grateful to the mbeddr team for packaging and publishing the handy tools and languages that they themselves found useful on their projects. Since the mbeddr platform is open-source, anyone can instantly benefit from it. To make this easy for the users, we’ve exposed the MPS build server to the public and have the mbeddr platform continuously built there, alongside MPS. As the next step we’re considering making a joint distribution of MPS with the mbeddr tools.

We may also be integrating some of the most useful elements directly into MPS, but being busy evolving the core functionality of MPS we will hardly ever catch up with the pace, at which these guys innovate the mbeddr platform.

Federico: I am personally using a lot of stuff from the mbeddr platform, which I think of as a sort of “MPS++”. This makes me desire more and more a way to specify dependencies between languages: I would like to be able to specify declaratively a dependency on a specific version of the mbeddr platform. This leads to my next question on build systems.

One of the thing I am looking forward to is integration with build systems. I saw the work of Sergej Koščejev on a Maven plugin: do you think it will be soon production ready?

Sergej’s initiative received very positive reactions from the community. We will release a prototype as soon as it reaches reasonable maturity. In the first version we will focus on very raw integration with Maven and cover the scenarios of DSL usage in maven-built projects. Later, we will provide the possibility to place MPS languages into maven during the build.

Federico: It is amazing to hear this. I think this component can make a huge difference for our community. I am looking forward to this one.

Future

What are the plans for MPS in the future? Is the public roadmap up to date?

The primary goal for us at the moment is to make MPS more flexible – we would like to better support non-traditional approaches to language development. Expanding on the idea of Language-oriented programming, users should be able to define their own language aspects or modify the existing ones. If, for example, the normal way editors are defined in MPS doesn’t suit you, you should be able to come up with an alternative approach, use it and perhaps also share it with others. There are many roadblocks that we have to clear away, but ultimately MPS should become a truly universal platform.

Another big task is to reorganize the whole code generation process. We would like to detach generators from languages and give the language authors more control over the whole generation scenario.

We would also like to improve the usability in the area of editor definition – provide more intuitive languages, offer better validation of user code, automate many aspects of the dynamic editor behavior (aka side-transforms), as well as text-gen and parser creation.

The notation for editor definition is another area, where we can improve usability a lot. We’re experimenting with notations that would offer more automation

Last but not the least we want to embrace useful visual tools and gadgets that make the editor easier to use for DSL programmers. DSL programmers (aka domain experts) have different skill sets, habits and preferences than professional programmers – they prefer more rigid syntaxes with strong guidance by the IDE, enjoy rich visual assistance, demand explanatory and syntax-aware error messages. The mbeddr project has gone a long way towards providing intuitive visual assistance and we would like to follow their footsteps in this.

Following the previous question: will we see MPS on the web? Is the JetPad project a priority?

You can actually already see it. The Census Analyser (https://censusanalyzer.com/) project is an experimental implementation of a web-based projectional editor (leveraging the JetPad library). At the moment, we’re not trying to enable web-deployment of languages designed in MPS. This will come later, once we gain some more experience in the domain. Currently, we experiment with a slightly modified and simplified approach to language definition for the purpose of web-deployment. The language designer uses a set of lightweight MPS-based languages to define her languages in IntelliJ IDEA. The generated Java/JetPad code has then no reliance on MPS, it can be deployed on a web-server and enabled to assist editing code in the browser. Through Java and JavaScript API it can communicate with the rest of the web application. Don’t forget that we are still at an early stage of development, so the distribution and business model of this tool hasn’t been decided yet.

Federico: This is so incredibly exciting. Definitely you like to do cool stuff at Jetbrains. I think that all language engineers will be excited to see this project and they will follow closely its evolution: I most definitely will.

Do you plan to develop a GPL specifically designed to take advantage of MPS?

We do not have such plans and it is not even clear, whether such a GPL can be created. BaseLanguage is the default GPL that is being used across MPS. It was originally meant to be independent from Java, but the need to generate Java from BaseLanguage influenced its design heavily, so, in the end, it became almost identical to Java and thus exhibits very little syntax alignment towards projectional editing. We might possibly try to build a platform-agnostic language on top of BaseLanguage in the future, but, on the other hand, implementing multiple projectional GPLs as copies of existing GPLs (JavaScript, C#, etc.) to ease porting DSLs to other platforms currently looks like a more viable path to take. Let me expand a bit on this topic.

Despite all the efforts that JetBrains has put into making the usability of the MPS editor as text-like as possible and despite the close similarity between MPS and say, IntelliJ IDEA, when it comes to structural manipulation of code, developers using GPLs still tend to struggle with projectional editing. They miss the possibility to (temporarily) treat their code as pure text in order to manipulate it on the character granularity. Since the main advantages of projectional editing, such as language composition and non-parseable notations, are not critical for GPLs as much as for DSLs, the balance between pros and cons favors textual GPL languages.

The syntax of a hypothetical projectional GPL would, in my opinion, have to lower the need for direct character manipulation and increase the leverage of structured, possibly non-parseable (graphical) notations. Since the current GPLs are well served with the traditional text-based IDEs, we see more potential for MPS in the DSL arena.

Federico: I agree that it is easier to see the benefits of MPS for DSLs. After all domain experts have today very limited tools to formalize their knowledge and automatically process it. Developers have instead advanced languages and great tools (like IntelliJ IDEA): they have learnt how to use such languages and going around their limitations so I think they are less prone to see the benefits of projectional editing. I still think it would be very interesting to use MPS to create extensible, more flexible GPLs but we have to figure out how to take advantage of the possibilities of MPS. Right now we are too used to textual languages and that limits our creativity.

Sometimes people see that Jetbrains is betting on Kotlin and MPS and they wonder about this split of focus. I know that Jetbrains is large enough to support both these efforts but would you share some insights on this? Do you see any relation between the two projects?

You have to keep in mind that Kotlin serves a different purpose than MPS. Kotlin offers an alternative to the Java language and fights for the hearts and souls of Java programmers. MPS is a DSL tool, which targets primarily the areas outside of the mainstream programming and the domains outside of the reach of languages and tools like Kotlin and IntelliJ IDEA, respectively. We’re trying to address domain experts, who are not necessarily full-time professional programmers and who live in and enjoy fields as varied as electrical engineering, insurance, software modeling, biology, data analysis, legislation, etc. Kotlin, or Java for that matter, are usually too generic to support their use cases nicely.

Is it true that YouTrack 2 will be developed in Kotlin instead of MPS? Is that a bad sign for MPS?

Yes, the domain of web application development offers such a large number of great technologies and tools for Java developers that it was impossible for the MPS-based set of web languages, which the YouTrack team had created and used, to keep pace. The YouTrack team made a sensible decision to rely on proven web technologies, instead of maintaining their own ones, in order to make their development more efficient.

This only confirms that the sweetspot for MPS lies in domains outside of the programming mainstream, which cannot be well served with the mainstream technology stack.

Conclusions

I think everyone listening to your talks or screencast will be thinking the same question: how did you manage to get such a wonderful English accent?

Thank you 🙂 It must have been through osmosis. I should perhaps thank all my British friends and colleagues for influencing me.

Anything else do you want to add?

Thank you for all the questions. I really appreciate your help in spreading the good word on language engineering.

Federico: it was a great pleasure for me! I have been interested in MPS for several years and having the possibility to ask questions to Vaclav has been amazing for me. I hope other MPS enthusiasts can also share my enthusiasm.

You may be also interested in:

Interview with Jan Köhnlein on TypeFox, DSLs and Xtext

Jan Köhnlein is a leading expert in DSL design and an Xtext committer. After obtaining his PhD from the Technical University of Hamburg he worked for companies very well known in the modeling field: Gentleware and Itemis. Recently he founded TypeFox together with Sven Efftinge and Moritz Eysholdt.

I thought it was a good moment to ask him a few questions about his new venture. Of course it is also a great possibility to ask him about his views on DSLs and the future of Xtext

About TypeFox

TypeFox

Can you introduce TypeFox and tells us more about what services you offer?

TypeFox is a software company focussed on development tools for software engineers and domain experts. As the leading company behind the open-source frameworks Xtext and Xtend, we have great expertise in language engineering, domain-specific languages (DSLs) and tool construction. TypeFox offers all kinds of services around these topics, such as professional support, projects, consulting and training. Our office is based in Kiel, (Germany) at the coast of the Baltic Sea.

How were the very first months at the new company?

TypeFox was founded in January 2016 by Sven Efftinge, Moritz Eysholdt and me. It has been and still is an exciting experience. None of us had led an enterprise before, so there were a lot of new things to learn in addition to getting the company going financially. But we managed to gather a team of very skilled programmers and thanks to the good visibility of the Xtext project we did not have problems to find customers. All in all we had a very successful start. So successful that we plan to grow further.

On DSLs

Are your typical customers already aware of the potentialities of DSLs or do you have to do a lot of evangelization?

Most of our customers choose us because they need Xtext experts, so they are already convinced of the DSL approach. But we do evangelize at conferences, and community gatherings and by writing articles for magazines or online portals.

In your experience what kind of customers are more willing to embrace DSLs? Does it depend on the size of the company or the domain?

As all kinds of abstraction techniques, the DSL approach needs a certain problem size to pay off. Even though Xtext is pretty lightweight for a language engineering framework, you would not create an entity DSL for just a handful of entities. But for a few hundreds you would. So yes, the problem size matters.

Company size does not matter that much. Bigger companies are more likely to have many domain experts, who are not necessarily software engineers, like mathematicians in an insurance company. Those experts can be more directly involved in the software development when they can capture their knowledge in DSLs.

DSLs seem to me more widespread in Europe than in the US: is that true for you? In which countries do you see them more used?

From my former experience, the development in the USA has been more focussed on getting things shipped, while in Europe and especially in Germany we have spent a lot of time on the architecture. Both approaches have pros and cons, but the latter mentality is for sure more susceptible to the DSL approach. Currently we have about as many customers in Europe as we have in the US, so they seem to be converging.

Have you seen any change in the number of DSLs adopters in the last years? Do you think they are going to become more common in the near future?

The basic idea of DSLs is pretty old, and there have always been phases of hype and decline. I see that DSLs have become mainstream in certain areas like enterprise application development, and some industries, like automotive in Germany, even cannot do without them anymore.

What are in your opinion the main issues to adopt DSLs?

Technically, DSLs raise the tool stack. It is not always clear whether this overhead is worthwhile, and many developers are skeptical about that for good reasons. And of course not every programmer is a good language designer.

The other issue is that there is scaffolding: Many developers ask why they should write a code generator for getters and setters, XML mappings or Maven poms if their IDE or web framework generates them on demand. It is not always easy to convince them that it is more sustainable to capture the model in a DSL and write a code generator that can be run repeatedly and can be fine-tuned to the specific needs of the actual project.

Do you work more on DSLs intended for developers or for domain experts? Are they very different?

We currently develop a bit more technical DSLs than business DSLs. This may also be due to the fact that Xtext had been available for Eclipse only, whose look and feel often  scares non-developers off. Since 2.9 you can also generate a web editor for your DSL, and this is where many business DSLs live.

From a language point of view, the main difference is syntax, where developers accept a program like text notation, while many business experts prefer forms, tables, diagrams and prose.

On Xtext

450px-Xtext_logo

I think that most newcomers to Xtext find the learning curve very steep, probably because of EMF. The quality of the documentation on the official website is very high, especially compared to other Eclipse projects but is there anything else you think the community could do to help people to adopt Xtext?

Thanks for the compliment, but documentation is always something that can be improved. Since Xtext is hosted on Github, it should be very easy for community members to submit pull requests for corrections. And luckily there is the book by Lorenzo Bettini, which is an excellent addition to the official docs. If you have an interesting project based on Xtext, an entry in the community section on the Xtext homepage is also just a PR away. Other than that, we have a very vivid forum where you get answers to your questions very quickly which is also driven by the work of the community.

You and your team are contributors to Xtext and you have an amazing experience with it. Can you tell us a bit about what is going on with Xtext and what interesting things are coming in the future?

We definitely plan to invest more in web support. One part of that is to integrate Xtext with Eclipse Che. Sven is going to talk about that at EclipseCon France 2016. In addition we are going to polish the new features added in 2.9, such as IDEA, Gradle and Maven support, as well as the new generator architecture.

One big feature Xtext got recently is the possibility to generate editors for IntelliJ and for the web. How mature is this feature? Is it helping to attract new Xtext users?

IDEA support is ready to be adopted by the users. Unfortunately, we did not get too much feedback so far. We hope that we are going to get more in the future.

Web support is working fine as well. But as there are a plethora of web application architectures, it will be interesting to use it in more projects and find out where we have to make it more generic or specific.

Xtext is about textual notations but models can support other visualizations (using GEF or other tools). What are your thoughts on combining graphical notations with Xtext? I remember reading a first post from you in 2009 and you kept writing on the subject (a more modern approach is presented here). Is it something you do often? Is it effective?

As Xtext is based on EMF like most graphical frameworks from the Eclipse world, the integration seems to be quite straight forward. But the problems emerge from a different understanding of transactions and object identity. The result will be strange glitches and bugs in the integrated tool.

This is why I advocate graphical views on top of Xtext, that only read the model. With FXDiagram you can do that pretty easily, and get a very modern diagram editor on top.
My colleagues Miro Spönemann and Christian Schneider have both worked on the KIELER project before, so you will probably see more contributions from TypeFox to the graphics community in the future.

By the way, we have a customer project where we integrate a textual DSL editor into a table, which was not easy implement for exactly the same reasons mentioned above, but works great now.

Final thoughts

Xtext is probably the most mature and complete system to create textual DSLs, however there are other “Language Workbenches” available. I am thinking of Jetbrains MPS, Rascal, Acceleo and others. What do you think of these alternatives? Any competitor I am missing? Any feature you think Xtext should get or cases in which an alternative tool is the right solution?

Ranting on competitors is not my style, but it is hard to find an alternative to Xtext that is as powerful, extensible and mature, does not lock you into a closed world of specific development tools, is open-source and backed by companies that provide professional support.

Is there anything else we forgot to discuss?

I just want to say thank you to our team, to all committers and supporters of the Xtext projects and to the community. You made Xtext what is is today.

Finally, what is the best way for customers interested in Xtext consulting to get in contact with TypeFox?

Write us an email to contact@typefox.io, or bump into us at conferences, like EclipseCon, JAX and others.

Apart from that, we are hiring. So if you know any good software developers who want to join our team, spread the word!

If you are interested in joining TypeFox visit http://www.typefox.io/career

Interview with David Åse from the Spark web framework project

I think that there are a lot of people looking for ways to get involved in Open-Source projects. I thought I could help by collecting a few stories from people who already started giving back to the community. A few weeks ago I talked with Luca Barbato and today I am going to talk with David Åse.

How David and I met

Recently I started using the Spark web framework, and I wrote a tutorial on it: Getting started with Spark: it is possible to create lightweight RESTful applications also in Java. David saw that post and contacted me. After a few emails, we decided to work together on a series of tutorials for Spark to be published on sparktutorials. While talking with David I learned more about his role in the Spark project and I thought it would be interesting to share.

So let’s get started with the questions:

Hi David, tell us a bit about yourself

Hi! My name is David. I work as a Software Engineer in the UX/UI division of a global telecommunications company, where I’m allowed to do things like create Lemmings-based analytics visualizations, or build a device lab made from LEGOs. When I’m not playing with Lemmings or LEGOs, I do design and web programming with a strong focus on delivering high performance services (~1 second perceived load time for GPRS connections). I hold a Master’s Degree in Computer Science from the Norwegian University of Science and Technology, but I studied music in high school and my parents are both artists.

Is Spark the first open-source project you get involved into?

The first serious one, yes. My master thesis was an open source project which someone else took over, and I created some free mIRC scripts when I was a kid, but Spark is the first project I’ve worked on that’s being used by thousands of people every day.

How did you find out about Spark?

I was looking for a simple Java framework to set up a prototype at work. I had previously worked with Spring, JAX-RS and Play Framework, but I wanted something lighter and simpler. I was googling for lightweight Java web frameworks when I saw Spark. At first I dismissed the project as outdated/dead due to how the website looked, and googled some more. After a little while I came back to Spark again, and I decided to give it a shot when I noticed the website said the project was recently rewritten for Java 8.

How did you get involved?

After having worked with Spark for a day, I was very impressed with how easy everything was and how right it felt. I was worried that other people would (like I did) judge Spark by it’s cover and miss out. So, I sent Per (note: Per refers to Per Wendel, the creator and maintainer of Spark) the following email:

email

A very intensive three days later, this commit showed up on GitHub:

commit

How did you help?

I completely redesigned and reimplemented the website, then tried to promote it.

For the design part I focused on eliminating unneeded content, only leaving the most important bits. I created a massive banner for the index page to really grab the attention of our visitors, communicating what I think are the main selling points of Spark: Java 8 and “minimal effort”. For the other pages I wanted it to be very clean, so I left everything white. It’s as minimalist as Spark itself.

For the implementation part I focused on writing search engine optimized content and following best practices regarding optimization and accessibility. The page scores 100/100 in mobile usability and 87-94/100 in speed using Google Pagespeed Insight, which makes google like us more and places us higher up in the search results (we didn’t have to worry about Mobilegeddon!). Note: Mobilegeddon refers to the abrupt downgrade Google gave to websites because of their poor performance on mobile usability, read here for details.

After I was pleased with the look and performance of the website, I tried to spread the word online. This was the hard part. I created social media accounts and posted to various Java forums online. The most successful was a post to reddit, which I think got us about a thousand visitors in a few days (which is a lot for a Java web framework).

Talk about the effects of rewriting the website?

It’s hard to say since we did not have analytics on the old page, but I’ve used Alexa and Ahrefs to estimate the past website traffic. When I joined Spark, it’s popularity had fallen from rank 800.000 to about 1.200.000 on Alexa, and it was losing more backlinks than it was gaining. Since then we’ve been on a steady climb up. We’re currently hovering around rank 400.000, and the amount of referencing pages/domains has doubled. The number of visitors to our webpage has increased with 30% comparing Q4 2014 to Q1 2015, so it looks like everything is going the right way. We’ve also increased our google search position a lot, which is important since about 65% of our traffic is from google.

How do you get feedback?

I rely a lot on my friends, colleagues and my girlfriend. I appreciate brutally honest feedback, which can be hard to get from strangers. Other than that I use analytics data a lot to see how the site is performing and how users are behaving, and make changes accordingly.

What plans do you have in the future?

We are currently evaluating if we can establish a dedicated Spark team with paid developers. We recently ran a user survey which gave us a pretty good understanding of who uses Spark and for what, and if our users would be willing to sponsor the project in return for extended support.

If he decides to go that way, I will work part time on the project, expanding the webpage functionality in order to provide better documentation, migration guides and tutorials. If not, I will contribute when I have the time, as I do now.

Are there any other projects which you find interesting?

Of the lesser known projects, I am a big fan of Intercooler. While I do like the concept behind Angular and the like, I just don’t think we’re quite there yet. Especially considering low end devices in emerging markets, going full JavaScript is just too slow.

How was your experience giving back to the community? Did it help you in any way?

I learned a lot about the importance and benefits of analytics and having an “online presence”, which I think a lot smaller open source projects could be better at. There seems to be sort of a “if we build it, they will come” mentality, but people are usually set in their ways and they need to be convinced that your project is worth looking into.

Federico: I fully agree with this. I think everyone is very busy and we have to help them find out immediately what we are providing, and Spark is doing a great job in this respect. “A tiny Sinatra inspired framework for creating web applications in Java 8 with minimal effort” is a clear and effective description of Spark.

What suggestions would you give to people who want to contribute to Open-source, but don’t know where to start?

As I started frequenting reddit (while trying to build Spark’s online presence), I noticed that people sometimes post about wanting to contribute to open source projects in programming language subreddits. These threads usually rank pretty high for a while, so I would just suggest doing that. If you have Java skills and you want to contribute, just go to /r/java and ask for project suggestions. Otherwise, if you already use open source software, there’s almost always a “Contact” or “Contribute” tab you could click on on their webpage.

Federico: I should probably start adding a “Contribute” section to the README.md of my projects, or maybe a Contributing.md file, as several projects are starting to do.

P.S. In the last days David has released a new project called j2html: it is library to build HTML pages programmatically, and the source is available on GitHub. I find it quite useful when I have to throw in some snippets of HTML for which it is not worthy the hassle of adding a template engine. Give it a try!

Conclusions

I found David’s story very interesting because it shows us how complex the Open-Source world is, and how many different things we can do to contribute. He is a technical person and rewrote the Spark website making it amazing, but he also focused on promoting the framework, finding different channels and communicating on all of them, finding ways to monitor the improvements he was doing and recruiting other volunteers (like me :D).

I also like very much the fact that he found ways to contribute focusing on aspects that the maintainer did not consider. I think this is what is great about having many people involved in one project: everyone contributes according to his/her own specific skills and the result is so much more than the sum of the single parts.

As an encouragement to you: There are many different ways to help Open-Source projects, you just have to find one that aligns with your skillset!

How people get started contributing to open-source? A few questions to Luca Barbato, contributor to Gentoo, MPlayer, Libav, VLC, cairo/pixman

I am hearing a lot of persons interested in open-source and giving back to the community. I think it can be an exciting experience and it can be positive in many different ways: first of all more contributors mean better open-source software being produced and that is great, but it also means that the persons involved can improve their skills and they can learn more about how successful projects get created.

So I wondered why many developers do not do the first step: what is stopping them to send the first patch or the first pull-request? I think that often they do not know where to start or they think that contributing to the big projects out there is intimidating, something to be left to an alien form of life, some breed of extra-good programmers totally separated by the common fellows writing code in the world we experience daily.

I think that hearing the stories of a few developers that have given major contributions to top level project could help to go over these misconceptions. So I asked a few questions to this dear friend of mine, Luca Barbato, who contributed among the others to Gentoo and VLC.

Let’s start from the beginning: when did you start programming?

I started dabbling stuff during high school, but I started doing something more consistent at the time I started university.

What was your first contribution to an open-source project?

I think either patching the ati-drivers to work with the 2.6 series or hacking cloop (a early kernel module for compressed loops) to use lzo instead of gzip.

What are the main projects you have been involved into?

Gentoo, MPlayer, Libav, VLC, cairo/pixman

How did you started being involved in Gentoo? Can you explain the roles you have covered?

Daniel Robbins invited me to join, I thought “why not?

During the early times I took care of PowerPC and [Altivec](http://en.wikipedia.org/wiki/AltiVec), then I focused on the toolchain due the fact it gcc and binutils tended to break software in funny ways, then multimedia since altivec was mainly used there. I had been part of the Council a few times used to be a recruiter (if you want to join Gentoo feel free to contact me anyway, we love to have more people involved) and I’m involved with community relationship lately.

Note: Daniel Robbins is the creator of Gentoo, a Linux distribution. 

Are there other less famous projects you have contributed to?

I have minor contributions in quite a bit of software due. The fact is that in Gentoo we try our best to upstream our changes and I like to get back fixes to what I like to use.

What are your motivations to contribute to open-source?

Mainly because I can =)

Who helped you to start contributing? From who you have learnt the most?

Daniel Robbins surely had been one of the first asking me directly to help.

You learn from everybody so I can’t name a single person among all the great people I met.

How did you get to know Daniel Robbins? How did he helped you?

I was a gentoo user, I happened to do stuff he deemed interesting and asked me to join.

He involved me in quite a number of interesting projects, some worked (e.g. Gentoo PowerPC), some (e.g. Gentoo Games) not so much.

Do your contributions to open-source help your professional life?

In some way it does, contrary to the assumption I’m just seldom paid to improve the projects I care about the most, but at the same time having them working helps me when I need them during the professional work.

How do you face disagreement on technical solutions?

I’m a fan of informed consensus, otherwise prototypes (as in “do, test and then tell me back”) work the best.

To contribute to OSS are more important the technical skills or the diplomatic/relation skills?

Both are needed at different time, opensource is not just software, you MUST get along with people.

Have you found different way to organize projects? What works best in your opinion? What works worst?

Usually the main problem is dealing with poisonous people, doesn’t matter if it is a 10-people project or a 300+-people project. You can have a dictator, you can have a council, you can have global consensus, poisonous people are what makes your community suffer a lot. Bonus point if the poisonous people get clueless fan giving him additional voices.

Did you ever sent a patch for the Linux kernel?

Not really, I’m not fond of that coding style so usually other people correct the small bugs I stumble upon before I decide to polish my fix so it is acceptable =)

Do you have any suggestions for people looking to get started contributing to open-source?

Pick something you use, scratch your own itch first, do not assume other people are infallible or heroes.

ME: I certainly agree with that, it is one of the best advices. However if you cannot find anything suitable at the end of this post I wrote a short list of projects that could use some help.

Can you tell us about your best and your worst moments with contribution to OSS?

The best moment is recurring and it is when some user thanks you since you improved his or her life.

The worst moment for me is when some rabid fan claims I’m evil because I’m contributing to Libav and even praises FFmpeg for something originally written in Libav in the same statement, happened more than once.

What are you working on right now and what plans do you have for the future?

Libav, plaid, bmdtools, commonmark. In the future I might play a little more with [rust](http://www.rust-lang.org/).

Thanks Luca! I would be extremely happy if this short post could give to someone the last push they need to contribute to an existing open-source project or start their own: I think we could all use more, better, open-source software. So let’s write it.

One thing I admire in Luca is that he is always curious and ready to jump on the next challenge. I think this is the perfect attitude to become an OSS contributor: just start play around with the things you like and talk to people, you could find more possibilities to contribute that you could imagine.

…and one final thing: Luca is also the author of open-source recipes: he created the recipes of two types of chocolate bars dedicated to Libav and VLC. You can find them on the borgodoro website.

1385040326653

I suggest to take a look at his blog.

A few open-source you could consider contributing to

Well, just in case you are eager to start writing some code and you are looking for some projects to contribute to here there are a few, written with different technologies. If you want to start contributing to any of those and you need directions just drop me a line (federico at tomassetti dot me) and I would be glad to help!

  • If you are interested in contributing to Libav, you can take a look at this post: there I explained how I submitted my first patch (approved in the meantime!). It is written in C.

  • You could be also interested in plaid: it is a Python web application to manage git patches sent by e-mail (there are a few projects using this model like libav or the linux kernel)

  • WorldEngine, it is a world generator written in Python

  • Plate-tectonics, it is a library for plate tectonics simulation. It is written in C++

  • JavaParser a Java parser, written in Java

  • Incremental Java parser, an incremental Java parser, written in Scala