In this Episode
Nicolai Josuttis is the author of the Leanpub book C++17 - The Complete Guide. In this interview, Leanpub co-founder Len Epp talks with Nicolai about his background, the accidental nature of success as an author, how a programming language is maintained by a standardization committee, his book, and at the end, they talk a little bit about his experience as a self-published author.
This interview was recorded on February 01, 2018.
This interview has been edited for conciseness and clarity.
Len: Hi, I'm Len Epp from Leanpub, and in this Leanpub Frontmatter Podcast, I'll be interviewing Nico Josuttis.
Based in the German city of Braunschweig, Nico is an independent system architect as well as an author, consultant, trainer and technical manager - as well as a popular speaker.
He recently published a book on Leanpub, C++17 - The Complete Guide. The book covers the new language and library features of C++ 17 and how you can benefit in practice by combining new features and avoiding new traps.
In this interview, we're going to talk about Nico's background and career, his professional interests, his new book, and at the end, we'll talk a little bit about his experiences as both a conventionally published, and now as a self-published author.
So, thank you Nico for being on the Frontmatter Podcast.
Nico: Thank you Len for giving me the opportunity to do so.
Len: I always start these interviews by asking people to give a version of their origin story. So, I was wondering if you could talk a little bit about where you grew up and how you first became interested in software and computers?
Nico: Let me say it this way: I was lazy. And the point was, a friend from school once told me, "You want to do something like electro-technic or physics. Do something easy. Do computer science." And he convinced me. So I did it that way. I was not a hacker or a geek or something like that. It was more that, that I thought, "Okay if he told me, that seems to be appropriate." And it turned out it was. Or at least it worked.
Len: And where did you study computer science?
Nico: It's in Braunschweig. That's the reason I'm still living here. It's close to my my hometown where I grew up in Göttingen. I didn't go very far just for living. But I've seen a lot in the world, of course, due to my work now.
Len: One question I always like to ask, actually it's kind of an unofficial theme of this podcast, when I encounter people who are in the software world is: if you were starting out again now to pursue the same type of career, or if you were giving advice to someone who was in that situation, would you recommend a full university course of education in computer science, or would you recommend another path?
Nico: I think it doesn't matter, because we have enough demand for good people. So, if people are good enough, they will make their way one way or the other. So do whatever you think is appropriate. I mean, I started working for a company while I was studying. But my lifetime companion, she first studied something totally different, and then changed her life and went more and more into IT. So both work very well.
Also it seems that even my kids start with something totally different, like event management; and suddenly my son is in a company who does IT events. And now things become interesting, so -
Len: Thanks for that very clear answer. I think you might be the first person who said it doesn't matter. Some people get very passionate one way or the other. That's a refreshing response.
Nico: If I can interrupt you here and say something more about it. The main thing is that people are passionate and like what they do. And that they are pretty good. And that's all. That's enough for, more or less, all the business you can join.
Len: One of the pleasures of this podcast, is I get to interview people from all around the world. I was just interviewing someone who was originally from Tunisia yesterday.
So I have a German question for you. I know that until 2011, it was compulsory for men to serve in the military in Germany. And I have a friend from Kiel for whom his experience in the Navy was very transformative. Did you do military service?
Nico: No I didn't. I was rejecting it. I should say that my father is working for the church, and the - what is the English word for not Catholic, the other way?
Nico: Protestant church. So it's allowed. I'm not a secret kid, I'm a real kid. Well, I shall say it the other way around. My social life was highly impacted by going into youth club from the church. Not to believe in God, but to learn about democracy and the way you have to live in the world and to make it a better place.
Len: That's very interesting to me. I come from a Mennonite background, and my grandfather on my mother's side was a conscientious objector in World War II. Mennonites are pacifist Protestants.
Nico: Oh I see, okay.
Len: They tend to not fight in wars. So I'm familiar with that principle.
One question about that, if you don't mind talking about it. What was the reception of this decision in Germany in 2011 to end compulsory military service?
Nico: Well to some extent, [it was about] money. I mean there was simply not enough money now for the army to pay all the people going there. So the period of working in the Army for everybody, as part of your life, for every man, became shorter and shorter. I think I did something like two years of service. And it became less than half a year or so.
So it became a little bit ridiculous still to have it. And people were complaining about how some were being taken, and others were rejected, which seemed not to be fair.
So I think, beside the general situation in the world, after the cold war, if anybody remembers - there was enough support for this decision, I think.
Len: So you worked for a company - I checked you out on LinkedIn - you worked for a company, I believe until about 1999. And then you made the move to work independently. I wanted to ask you a little bit about that decision. What led you to that move?
Nico: It seems I couldn't find a company that fit simply fit. I was working in a very small company. Bredex was about 10 people or 20 people. I was starting to give their training, and also even starting to write books there. And then I tried to do something different. But I also wanted to stay in Braunschweig, where I started.
And then I decided, no, I'll try out a few things. Maybe I didn't sell myself very well. But I met the right guys, two other guys who also started or had been started to get self-employed. Which is a pretty unusual thing in Germany. It's not as common as in the US, for example.
And yeah, I took the risk. I had three kids and a wife. There was a lot of discussion, but it worked very well, looking back. But it's also changed my life, of course, because you live in a different world, as a self-employed guy.
Len: What proportion of your time would you say you spend kind of looking for clients, as opposed to working for clients? Or is that not how it works for you? Do they come to you?
Nico: Usually they come to me. I would say looking for clients would be normally part of going to a conference. Or maybe if it's a really bad time, sending out some emails to some friends and saying, "I'm available."
If you're self-employed, from time to time, you go into this situation saying, "I don't have any contract in the next half year. Should I worry myself?" And it still happens. It happened at the end of last year for me. But now I'm more or less booked out for the first quarter of this year. So yeah, it worked. That's all I can say.
Len: One way I've seen people help to build out their profile, is to publish books, which is something you got into. I was wondering if you could talk about your first book? How did that arise?
It was a revolution in areas where we didn't have Linux. We only had different UNIX flavors and different companies. And it was written by the company, my first company of, by guys there. And because they were stuck having already three authors, they asked me as a fourth author to jump in. And then we finished the book. That was the way it all began. Len: You've managed to be quite successful with some of your books. They've sold quite a few copies. I was wondering - all authors who are on the other side of that experience, want to be on your side. How did you get there?
Nico: Oh, by accident of course. I mean you can't plan to become a star or famous, or earn some significant money if you write books. Usually if you write books, it's just for your profession. You might let clients pay a little bit more, because you are an author, that's all.
It happened a little bit accidentally, because I initially wrote these books about C++ and C++ standard library in German.
And then I came into contact with the International Standardization Committee. And then I sold the English rights back to Addison-Wesley, which is now Pearson.
I had this luck that, first of all, C++ was pretty successful. And this was I think a pretty well-written book. Everybody needed it on his or her desktop. So in day-to-day work, it was not a book you read and then you give it away to the next person.
I have some feedback where people said, "This is one of the five books I never give away to anybody else, because I need it each and every day." That of course helps. If what you write about is successful, if the book is more or less alone in the market, and if people need it every day, that's a very good combination. But I was lucky, and I was not aware of that when I wrote it.
Len: Can you talk a little bit about your latest book, and why that's coming into existence, and who it's for?
Nico: Yes, it's about C++ 17, as you just said, and published with Leanpub.
C++ has gained some momentum recently. The reason I've written a book about SOA or Service Oriented Architecture was that I left the C++ community a little bit. And said, "I have to do something different, because I can't become an old pro C++ programmer. The young guys coming from university will know better about all the tricky details etc.
So I started with something new. And then with modern C++, which at the time was C++ 11. - C++ regained some momentum. For example, the Standardization Committee meetings rose from 30 to 40 participants, up to more than 100. Even with a lot of young guys. And so of course, the publisher came back to me and asked to write something, or present a new edition. And I did. And now we publish C++ standards each and every three years.
And I thought, "How should I spend the next book?" And I heard about Leanpub from the agile community, because they do a couple of things there. So I started this as a test case. The biggest concern I had was, I wanted to have control about this book. Which of course I have, but now I mean in the way I write it, and the way I can lay out it and publish it.
So the first thing I made, I wrote a script transferring my LaTeX source macros into your style. Which is Markdown.
Len: We've got "Leanpub-Flavored Markdown," and then something we're working on called "Markua". Actually I've got a couple of questions to ask you about this. But if we could just go back a little bit and talk about C++?
You talked about C++ 11, and C++ 17. And as I understand it, those are years.
Len: And so when you said, "Every three years" - there was C++ 11, and then there would've been C++ 14 and C++ 17. And there's a Standardization Committee.
I just wanted to ask you a little bit about how that works, because I think a lot of people might not be aware of how a language like this is maintained, and how it changes over time. I'm certainly one of them.
If you could explain a little bit about, what is the Standardization Committee, how do you get on it? That kind of thing. Because it's just so fascinating. People are mostly familiar with things like how, say, the English language generally gets kind of standardized. And it's that the language just kind of lives. People are doing new things all the time. And then there would be authoritative bodies, like the Oxford English Dictionary committee, who would then decide, from this vast jungle, what kind of new thing to pull out and make official usage.
But obviously, a programming language works very differently from that. If you could talk a little bit about that, that would be really great.
Nico: Thanks for giving me that opportunity. I do it very often in training, because it explains a little bit about the situation C++ is in.
It's a community-driven programming language. Originally, the founder, Bjarne Stroustrup, invented it for AT&T. But then he decided that this should become an international standard, which formally means that you have an ISO committee. A sub group of this is ANSI, in Germany it would be DIN, and in UK it was be BSI.
So every country formall has a delegation. And we vote at the end, in favor of a standard. The goal is to have common agreement. It's not that you can get a new standard by having something like ten against, nine votes or so. But that's only the formal background.
The informal background is that all the operational work is done just by meeting three times a year. And then everybody, even people not attending, can propose a change to this language. You don't even have to explain it. I mean, you have to totally convince people that they vote for it. And if there's enough agreement that we should go in that direction, we do it. Sometimes the agreement goes into different directions, or follows different design ideas. So therefore, we have some confusion.
Sometimes it takes a long time, because with 100 people, and having some common agreement means that there are not too many people disagreeing with a proposal, that's a problem we have right now. So it's community-driven. There's no general chief architect or programming architect behind it.
Which is good and bad; it takes us more time. Sometimes we go a little bit crazy, especially with consistency. But in general, it helps. I mean, more or less 100 people, and more standardize - and if somebody complains about the quality of C++, I always answer, "It's your fault, because you haven't been there to make it better."
Len: And how do you get onto one of these committees?
Nico: You just join. Just come to the meetings. There's an official website called isocpp.org. You will find out when the meetings are. You should tell us ahead, because we have to prepare a little bit of lunch. But everybody's welcome. And you can join, and there are people who very fast get attracted and respected in this group. Just come and listen and talk and help and that's all.
Len: One thing I read, preparing for this interview, was that there are criticisms of C++, that it's overly complex. I think I understand a little bit better now what some of those criticisms are based on. I found some kind of snarky comments about how everybody just kind of gets what they want in the end, and then people end up using - if I get this correctly, what they actually use of C++ in their own work, is a subset of it. But then you can end up with people using one part of the language, as opposed to another part that someone else is using to do something similar - if that makes sense? What's your response to that?
Nico: First of all, I would not agree with what you said.
I would fully agree that the language is complex. But I would not agree with the reasoning. Maybe I gave the wrong impression. Remember that I say, we have to have common agreement for changes. You have five groups. Each one is 10% or 20%, and everybody proposes something, and then we have five different things in the standard. It doesn't work that way. For each and every contribution, we have to convince the major majority of all the others to live and go that path.
And then finally, in the working groups, we have different groups. Some are for new features, some are for maintance, both for the core language and the library. They are the guys who implemented both the compilers of the library. They have enough experience to care for consistency etc. Yes, we make mistakes. But we make mistakes just like every other software project.
I would say the biggest problem we have is backward compatibility, as so often in software. I mean, we are compatible to C, and that's already a problem for some things. And it gets, of course, worse and worse. The language grows. We come in, come up with cool new ideas. But we can't give backward compatibility, otherwise you will run into a situation where, for example, the Python community was split into two different Python versions, just because the change they made was not backward compatible and too big.
Len: Thanks for that answer, I feel like I understand the situation a lot better now. It's just a fascinating structure to me. Going back to your book, you were mentioning -
Nico: Sorry, Len - one thing maybe I should say?
Nico: You learn something that is very important, in these times. You learn how you work together with different opinions, finding compromises and finding results where everybody can live with. I have to say that we live in times where we see some signs that we lose this ability to work together, and be constructive together. Joining an international group of people with very different experience and opinions, helps you to learn the lessons necessary to go back on this path, which is necessary for the progress of mankind in general, I think.
Len: That reminds me, I was listening to an interesting podcast about the effects of polarization on groups working together, and that there can be a kind of snowball effect where people get hardened and hardened and hardened. And then, working together becomes kind of impossible. So I appreciate your comment very much.
It also gets to the heart of a criticism that people often have of democracy that, because it's premised on a group of people finding some way to cooperate in an environment of disagreement, it can often mean that you don't get what you want as quickly as you might if your group simply had a powerful leader that could issue orders, and then things were done. But of course, the democratic answer to that is that you're not going to end up with a good outcome in the end, if a single will is driving.
Nico: If the single will is a good driver, I'm not sure about that. To be honest, I just don't know. The problem in my experience is, if you have a good driver, sooner or later, you lose ground of what you decide. And that's a problem. And we see that - I, for example, fall into traps again and again, just because I'm more than 20 years involved into C++. And then there comes some young guys and tell me, "But it's that way," Or, "That can be done." And then I say, "Yes, right, okay." And that's the important thing. So some leadership, I can live with, but constructive feedback is a major party in it.
Len: Speaking of being driven by a single will, getting back to your book. One of the things that often brings people to Leanpub, and to other self-publishing services, is that they get to have a lot of control over what they do, and you lose some of the benefits that come from working with a big publisher, but you gain a lot of independence.
But you did something special with your book that you were just getting into when I brought you back to the issue of C++, which is that you wrote a script that lets you write in LaTeX, so that you can produce what I would call highly-formatted PDF, and that also lets you output your LaTeX to Leanpub's book generator. So, you can use our system to make EPUB and MOBI versions.
I was wondering - what was behind that? Obviously there's a lot of work and thought that goes into a process like that. What was behind that decision? Was it very important for your project to have a good looking PDF.
Nico: Yes. I think a good layout is key for good books. I would say that Markdown is not good enough for the way I want to control and present things. It's not the problem of Markdown, it's just simple things like, I need three different ways for spacing from one sentence. And then having some code. And then continue the sentence. Sometimes I need short spacing around the code, sometimes longer, sometimes after the code there is a paragraph involved etc.
So I have different ways. Is this code part of the sentence? Is the sentence [?] just introducing the code, or is the code totally isolated, etc.? For these kind of things, I have, for my books, different LaTeX macros. I don't have this flexibility in Markdown. You always have the same distance between a sentence and a piece of code, and that makes reading more difficult, I think.
Len: Thanks for that very specific answer. Of course, we know about that because it wasn't working quite perfectly, and we had to do a little bit of work to make it work - which we were happy to do.
One of the things I should explain to anyone listening, is that sometimes we have people for whom it's very important that they have their PDF be, as it were, pixel perfect.
Other people come to us with ePubEPUB files. Then, that's the thing that they try to make perfect. And so what we built was a feature that lets you - it's not a very well-known feature, but it lets you upload say one of those files, like a PDF, but then also use a separate manuscript to generate EPUB and MOBI files for sale as well, which can be really, really helpful.
It helps you reach a wider community, and give people all those formats that they want, and maybe expect, even if you intend to push them in the direction of the one that you think is best.
You chose to publish your book in progress. I was wondering if you could talk a little bit about that decision?
Nico: Well first of all, I had to get used to this idea. As I said, the agile community is pretty awesome. I mean that's interactive development. So it's just a consequent application of this idea, of iterative publishing. I like it very much. I don't want to miss it, and if - two or three times, I was asked by traditional publishers already, what was the benefit I got from Leanpub? That is iterative publishing, is the biggest benefit I see they can do.
There's another thing that - it has to do with some money. I mean with royalties, etc. So they are different models, how you sell the books, and who owns the money etc.
The biggest thing traditional publishers could learn is the way to publish books iteratively. Because without this feature - the book was published in December of last year. I would say publishing the book would have taken one more year. And in this one more year, first of all, readers can benefit, because more than half is done. And this is a very useful part of the book.
It helps people. Especially those parts that are done, which are already available in C++ compiler. I don't have to, have to present all the details of those parts not available yet. And I get feedback, I get very early, very good feedback. And so I can improve the content.
And finally of course, I get early money. Which is also not as bad. So I get some revenue early. And by the way, earlier also is some pressure, because they already paid for a full book, so I have to finish it - and that helps.
Len: You actually answered one of my questions there already that I hadn't asked you yet, which is: is engaging directly with people who have bought your book important to you? And obviously it is. It's funny, you've managed to cover a lot of the ground that Leanpub authors go through very well.
Which is, not only the excitement of the early money, but also the obligation that one often feels. And also the excitement that one can get from building up readers of a project before it's finished, which can help motivate you to work on it in other ways.
How is it that you're interacting with your early adopter readers?
Nico: First of all, I had some traditional reviewers. I had some people in the community, I asked, "Do you want to?" Or, "Do you mind to review the book before it gets published even here in this platform?" So before a significant first part of it's published. And then I just get feedback from readers. It's not as much as I thought, by the way. But, well, I get it, I would say. I wouldn't say it's better or more than for traditional book. It's just like, I get it earlier. I mean, before the full book is done.
Len: And are they emailing you, or are they -?
Nico: The usual way is surprisingly using the Leanpub feedback channel. There must be something to use the Leanpub system to send me an email or send me a message. You know it better than me. So, yes.
Len: I think what you're probably describing is that, when you publish a new version of a Leanpub book, you also have the opportunity to send a message to your readers. While we don't recommend doing that if you've fixed a typo, if you have added significant content, then you can send an email to your readers using our system, in a way that doesn't expose your email address to them. And then they can reply to you, I believe is probably what you're, what your'e describing.
Nico: No, I don't think so.
Len: Okay, we also have forums that people can use. Oh, and then there's also an "email the author" feature. I forgot about that. That might be what you're talking about.
Nico: Yes, that's the one. I get a message from Leanpub saying, "A message from reader of --" and then the book title. From that comes the most feedback I get.
Len: Thanks, that's really interesting. That feature is a little bit hidden. You kind of have to scroll down the book's landing page to see an "email the author" link. So I'm happy to hear that people are finding it. That's great.
Nico: You can improve that if you like.
Len: We definitely plan to. Doing work on community is something that's really important to us. You might not have noticed it yet, but in Leanpub, you'll notice a little bell has appeared at the top right of the screen if you're signed in. That's notifications that we've built in.
Right now, what happens is, someone can get a notification there if an author publishes a new version of a book and sends a message. You'll get the download links right there. Obviously we're all familiar with the little red dots on bells that are notifying us of things that have happened. There's going to be a bit more of that happening in Leanpub, which will hopefully help people interact with each other.
My last question is a bit of a selfish one. But while I've got you, if there was one thing about Leanpub that we could build for you, or if there was one thing that we could improve, that we haven't talked about already, can you think of anything?
Nico: You mean not talked about already in this interview, probably. Because I have talked with some guys of you already, proposing a few things.
I think the most important thing we need is - we as authors of programming languages need a way to self-define syntax highlighting. Because that was almost a showstopper. That syntax highlighting or C++ you use, it's really way behind. It's even before C++ 11. And I'm writing about C++ 17. So the wrong words are not highlighted.
And I really need an interface for that. Because I think in general, you have the problem - people write new books about new things. So new keywords come, they are in, and they know the new way of syntax highlighting. And you can't use the general syntax highlighting rules of the existing books and the existing standards, because you describe something new. So I think this is something you really should introduce, to give people who write programming books more success with describing new things that are coming.
Len: That's really interesting. As you're saying, often Leanpub books are kind of cutting-edge. It's one of the reasons that the iterative, publish early, publish often thing works. And if you're showing programming code, the system you're using won't know to highlight new words, unless that system has been updated. And if I understand correctly, just to be precise - what you're asking for is the ability for you as the user to actually set the highlighting for these new words?
Len: If the system that we're using isn't caught up to the latest and greatest, or even what might be coming in the future?
Nico: Yes. I mean you have, you have a system for this syntax highlighting you use, I forgot the name what it was?
Nico: Yes. And they have syntax files, it's a Python tool as far as I know? And all I need is a way to say, "Here's my syntax tool, which describes a completely new language, which is C++ 20 for the next book." And the book should immediately follow those rules.
Of course, error handling is an issue. But I think this is very important, because wrong or confusing syntax highlighting is really counterproductive for a book.
Len: Yeah, we've heard from some pretty passionate authors about that issue in the past. So I thank you for telling us about the weaknesses that are still there.
Well, thanks very much Nico for taking some time out of your evening to talk to me today. I really appreciate it. And thanks for being on the podcast, and for using Leanpub for your latest book. We were really excited when you showed up.
Nico: Yeah, thanks Len. I want to thank you for this platform. I think in general, it worked very well. I had some time to try it out, and then I decided to go that way. I'm very happy I still can use my own macros. That way it works very well. Once you have new features, I can immediately update these macros and generate a new tool - that's also a cool thing. So thank you very much for your platform and all your work, and of course for giving me the opportunity to talk to you.
Len: Thank you very much, we really appreciate the kind words.