[From the Archives] Gabriel Volpe, Author of Practical FP in Scala: A hands-on approach
[From the Archives] A Leanpub Frontmatter Podcast Interview with Gabriel Volpe, Author of Practical FP in Scala: A hands-on approach
[This Frontmatter Podcast episode was originally published on 2020-04-15...]
Gabriel Volpe is the author of the Leanpub book Practical FP in Scala: A hands-on approach. In this interview, Leanpub co-founder Len Epp talks with Gabriel about his background, growing up in Argentina and how he got into computers and technology, choosing ...
[This Frontmatter Podcast episode was originally published on 2020-04-15...]
Gabriel Volpe is the author of the Leanpub book Practical FP in Scala: A hands-on approach. In this interview, Leanpub co-founder Len Epp talks with Gabriel about his background, growing up in Argentina and how he got into computers and technology, choosing to live and work abroad, his book, and at the end, they talk a little bit about his experience as a self-published author.
This interview was recorded on March 16, 2020.
The full audio for the interview is here: https://s3.amazonaws.com/leanpub_podcasts/FM149-Gabriel-Volpe-2020-03-16.mp3. You can subscribe to the Frontmatter podcast in iTunes here https://itunes.apple.com/ca/podcast/leanpub-podcast/id517117137 or add the podcast URL directly here: https://itunes.apple.com/ca/podcast/leanpub-podcast/id517117137.
This interview has been edited for conciseness and clarity.
Transcript
Len: Hi I'm Len Epp from Leanpub, and on this episode of the Frontmatter podcast I'll be interviewing Gabriel Volpe.
Based in Poland, and originally hailing from Buenos Aires, Gabriel is a software engineeer who specializes in functional programming. A popular speaker at conferences and meetups, has authored a number of open source libraries, including the Fs2 Rabbit and Redis4Cats Scala libraries.
You can follow him on Twitter @volpegabriel87 and check out his website at gvolpe.github.io.
Gabriel is the author of the Leanpub book Practical FP in Scala: A hands-on approach.
In this interview, we’re going to talk about Gabriel's background and career, professional interests, his book, and at the end we'll talk about his experience using Leanpub to self-publish his book.
So, thank you Gabriel for being on the Leanpub Frontmatter Podcast.
Gabriel: Hi Len, thank you very much for inviting me. It's a pleasure to be talking to you today.
Len: I always like to start these interviews by asking people for their origin story. So, I was wondering if you could talk a little bit about what it was like growing up in Argentina, and how you first became interested in programming, and computers generally?
Gabriel: Sure. I was born in a small town in a naval base, because my father was in the Navy, and that's where he met my mother. We moved to a small town near Buenos Aires city, and I just had a normal childhood from a middle class family.
And, like any other Argentines, I think we played a lot of football during childhood, growing up with friends. I still love playing football, but I haven't been playing so much.
I got into programming at age 15, when I accidentally decided to change school.
My parents were sending me to a private school. I got to that point in my career, where you had to choose - you kind of need to choose for your secondary school or high school, a specific - how do you say it? Kind of like a career, right? I needed to choose between economy or art or social science or geography - that kind of stuff, and I didn't like any of them. So I decided to change to a public school where they had some like computer science stuff.
I didn't know anything about computers, I only used Microsoft Paint to draw some graphics, and that's all I knew.
And my first class, at this public school, when I started - which wasn't a really easy choice, because I left behind all my friends from primary school, and I just switched to this other school myself - but my first class was like algorithms and data structures. And I said to myself, "What did I get into? What is all the things on the blackboard?" I had no idea what I was getting into.
But then I got started into programming using QBasic, and C++ the next year, and then all the things just fit into place. I think I really liked - I got hooked up into programming with games as well. I think like most programmers, we like games - moving pixels from here to here, dealing with some gaming logic. That's how I got hooked up into programming.
After a few years I left high school already in love with programming. I was spending summers at my computer, just writing programs.
Back in the day, I didn't have internet at home. I didn't even have a computer. My first computer, I got it at 16 - and didn't have internet. In Argentina, things move quite slowly, not like the rest of the world. You don't get internet services so quickly.
So,- I used to go to these - they were called cyber cafes. In Argentina, we'd just go there to drink the coffee and use the internet services. I was looking for programming code. Like, "How do I get to solve these, and how do I get to draw some nice graphics on QBasic, on C++, using SDL later?"
I was writing down all of this code with a pen and paper, and I'm going back home - and then just like, go back to my computer. And then later, we get into diskettes and USB keys, but that came later - for me, at least. Now, we didn't have that kind of technology in Argentina. So that's how I got into programming.
Len: Thank you for sharing that, that's a fantastic story. One of the really great pleasures of this podcast is hearing about people's journey through technology, through time and place. I once interviewed someone who studied computer science in Crimea, during a time when there was a dramatic shut down of public services. And so there was a lot of learning to use a computer, when the electricity wasn't on, kind of stuff going on.
I think for a lot of people listening, there's these various eras. One of them is the smartphone era - and before that, you wrote things down on pen and paper rather than screen shots or like taking pictures, or writing things down on your phone. And there were these things called "cyber cafes." Which I remember very much myself.
If you didn't have internet at home, which not everybody did, or you were traveling, in order to get on the internet, you didn't pull something out of your pocket. You went into a cafe and you paid money, and you maybe got a code. And then you had to type that in, and then you got paid for the amount of time you sat there using the internet. So things really do change. And so you - ultimately, you went to university - I gather, is that correct?
Gabriel: Oh, I went to uni, but I gave up, because I was working and studying at the same time. That is a very common thing for Argentinians. We work and study, because otherwise we can't afford it. And even though I was - public universities are free - you still have to pay to travel to uni, get your computer, or get your books. You need to eat as well. And all of these things required some money, and my parents couldn't afford that for me. So I was working and studying at the same time.
The thing is, I was working - nothing related to IT, the IT industry. When I was 18 years old, I finished high school, and got a nice job for like very good money, for an 18 year old kid. You just want to go out - have your own things, buy your own guitar. And it was cool to have that, but then I realized - I didn't go immediately to uni, I let the year go by and I was working, making good money, I mean for an 18 year old kid, it was good money, and I could buy my own stuff, and that was cool.
But I realized that I didn't want to do that kind of job for the rest of my life. Because I saw people with 10 or 15 years' experience still in the same shop I was doing on day one. And I said, "No this is not for me, I need to study. I need to invest more in my career." My mother was actually pushing me to go to uni. So I signed up into uni.
I was actually called the National Technological University in Argentina, it is one of the two best public universities. And the thing is, I was working doing night shift. I was working in logistics, starting my job at around 11pm, leaving at 7am. So, working all night, and then going to uni at 8am. And I was falling asleep in classes. It's really tough. And so I think I just gave up and left uni there, continued working for six more months. And then I just made myself the promise that I would continue my studies and get into IT. Because I thought it was good doing what I was doing.
So then I quit my job immediately, and just signed up into uni again. I was like doing some random jobs like for two or three months. I had a period working as a DJ as well. Then I started uni and then I finished. I actually graduated.
And before graduating, I got my first IT job. For a very, very low pay. But you've got to start somewhere. After earning my money for a year and a half in logistics, in a different industry - and then to go back to an IT job and earning a very low salary, wasn't really pleasant.
Len: So you had your first job after university, and you were not making very much money?
Gabriel: Yeah, exactly. I had a very low salary, but I worked at this company for like eight or nine months. And then I got hired to do a real programming job. Because in my previous job, I was solving computer issues for other people. The typical, "Have you tried turning it on and off again? Off and on?" That kind of job. And it was partly programming, but not full-time programming. After this job, I got another job in programming, and that was where I learned a lot with other colleagues. I stayed in that company for like two years and a half.
Len: This was a few years ago, but is there a tech sector in Buenos Aires?
Gabriel: Yes. There is a very good tech sector, I think. Even with the economy that is not great in my country, if you work in IT, it's always good. You can have a good lifestyle and decent salaries, and you are not affected like the rest of the people.
For example, my mother works in the car industry. And they get fired. The government changes, and then something changes for them. For us, we - I think we are lucky to work in the IT industry. Because we can find jobs in other countries as well.
Len: Yes, and you eventually found your way to other countries yourself. How did you get started on that journey?
Gabriel: It wasn't easy. Mainly because I had - when was that? I got my first job. Well, first, I started freelancing for some people, when I was still in Argentina.
The main issue I had was English. My English was terrible. Because mainly English - like second languages education in my country - are really terrible. We have the same level of English from primary school, high school and university. It's just the same, and it's really bad. We always learn the same, and there's no way you can learn to speak.
I was very good at writing and reading, but I was struggling having a conversation. My words wouldn't come out. I had to translate the Spanish first, and then trying to translate into English. And by the time words come out of my mouth, it's like, dude. It's just terrible.
So I just decided to leave my country with a one-way ticket to London. I'd say - I had enough of the bureaucracy of my country, of the terrible things that happened every day in the economy. It's hard to save money. It's hard to invest in your own things. Because the rules of the game are always changing. The government changes, and the rules change again. So I said, "This is not the place where I would like to invest in my own business, or keep working here."
So I decided to emigrate. Mainly because I wanted to go to an English-speaking country where I could just become more fluent in English, and learn more.
I was doing some interviews via LinkedIn. And the first week, I flew to Ireland, to Dublin, for one of these interviews. And I got an offer. I don't know how I got that offer, to be honest.
Because I think I nailed it on the blackboard with the technical questions, but I had some Irish interviewing me, and their accent was really hard for me. But I was lucky enough that I was interviewed by four different people, rwo interviews at a different time. So I understood one, but not the other. And in the other interview, I understood only one person out of two. So I think I got lucky there, and that's when I got my first job in Ireland, in Dublin. Once my visa sponsorship and all the working permits were set up, I just moved to Dublin. And that's when my experience living abroad started. That was five years ago.
Len: That's really fascinating. I've got two things to share that I think are similar experiences. One is that in Canada, we have something called "French immersion", where people basically end up speaking the same level of French from grade eight to grade twelvem to graduating from university, more or less. And I know what it's like being able to read something, I never could write it well - but being able to sort of like construct your own sentences is a very different thing, from being able to receive. And so you can end up in this weird kind of split mind, where you can -
I lived in Montreal for a few years in Canada, where the main language is French. And so I would often find myself in conversations with people like me, but from the other side. So they would speak in French and I would speak in English. And we could understand each other perfectly. But if we had to actually speak in the other person's language, it was like, "What are you saying?"
I also, myself - when I was a young man - took a one-way ticket to London. I had my visa and stuff sorted out in advance, but I had no plan. And I still remember being on the plane next to this young woman who was like, "I'm going to London to do X, Y and Z, and I've got it all lined up. What are you going there to do?" And I felt like such an idiot. I was like, "I actually have not even thought about it. I'm just going." And London is - or at least it was, a remarkable place to find jobs and things, and opportunities that you can't find in the entirety of your own country. You can often find them in that city. It's an amazing place.
And so you ended up in Dublin. How long were you there for?
Gabriel: I worked in a gambling company for about a year and a half. Then I decided to leave, and go traveling for a while. I like to travel a lot. That's the other thing I enjoy the most. But I'm now getting at the point where I'm quite old to keep traveling like I used to as a backpacker. So I'm trying to settle down now. Because I've got my fiancée now, I used to be single.
Len: Speaking of traveling, this is something I was looking forward to talking to you about. So, we're talking on March 16th. 2020. We're in the midst of COVID-19 stuff happening everywhere. It's happening to you, it's happening to me, it's happening to all of us. But you recently barely made it back to Poland, I gather, from your Twitter feed. And I was wondering if you could talk a little bit about that. Because there's a lot of people out there who are, were kind of - elsewhere - when things came down - and Europe has its own particular challenges for getting around.
Gabriel: Yeah. So in order for people to understand my current situation, I need to go back in time a little bit.
I was living in Tokyo, Japan. Well, first of all I was - what happened? After Ireland, I went traveling to Asia and Eastern Europe for about a year and a half. It's like, no working at all, doing just some open source. And at the end of my travels, I met my current fiancée. She's a Polish citizen, that's why we are in Poland now.
And then I got this job in Japan, I got the job in Tokyo, and I said, "Hey, look - I've got this amazing opportunity to work in a great, great company in Tokyo - but we need to move to Japan." And the thing is, the Japanese government is very strict with visas. So I would get visa sponsorship from this company, but not her - which, was my girlfriend at the time, right? But she was crazy enough to follow me to Japan, even though she's not a big fan of Asia.
So I came through Tokyo first, and then she's showing me the second month, and she came as a visitor. She only had a three months visa. We were trying to figure things out, how we could live together and stuff. And we found - we were trying to avoid getting married, because it was too soon for us. And even if we got married, she wouldn't be able to work in Japan. Because they have this, you get this post-visa - and you need to just stay at home doing the dishes. That's part of the Japanese culture I don't like. But I didn't know when I went there.
And so she came back to Europe. She managed to get a working holiday visa for a year, and then she moved back to Tokyo with me. We were doing well. She got a job in Tokyo as well, with the working holiday visa. But we knew we only had a year, right? So before that happened - things were going well in my, in this company - until a time where my manager just quit. I decided it was about time for me to leave the company as well, as things weren't going that well.
So we decided to continue traveling, and we started our journey traveling Latin America. We started in Mexico, and went down all the way to Argentina by land. We explored all Central America and South America. And all this time, was when I was writing the book as well - in my travels. And now we are back in Europe, we plan to stay somewhere here. We wanted to move to the UK first, but I didn't manage to get a job I like. And she had something lined up there, but we are reconsidering things now. All this coronavirus stuff right now, so it's crazy.
We wanted to come to stay in Poland with her mother, with her family - because she hadn't seen her mother in about a year. We had a plan, we had a flight booked for - what is today? It's Monday. For yesterday - Sunday, from London. The idea was, we were staying in London for the last five nights just to end our trip, with visiting some friends in London - and because we like the city as well.
But on Saturday, while we were just having fun in town, the Polish government announced that they were shutting down the borders at midnight. That means that our flight yesterday was going to get cancelled. But even if the flight was still coming to Poland - they wouldn't let me in, because I'm not a Polish national, right? So they only let the Poles get back in, but not anyone else.
So, now that was - that happened on Friday, actually. That happened on Friday. So on Saturday, we had to book an emergency flight, try to come back. And we made it, but it was very expensive. So, yeah, that's how we are in Poland at the moment, in quarantine.
Len: Oh, you're in quarantine as well? They're asking you to stay at home for a couple of weeks before going out?
Gabriel: Yes. I managed to come in before they shut down the borders and they had this mandatory quarantine. So I'm only self-quarantining myself just as a precaution, not mandatory.
Len: I see, I see. And are the streets empty, or is life sort of carrying on as normal generally?
Gabriel: I think people are just carrying on as normal. But they are more cautious - there are not so many people outside. Today we went to do some grocery shopping, being cautious. And there's not so many people out there, but they still need to work. Mortgages and rent, they don't stop by coronavirus. They need to earn some money. But it's like all the shops, all the coffee places, hotels are shut down here.
Len: And speaking of impact on industry - so, like a lot of Leanpub authors, you do the conference circuit, and you're a very independent operator - willing to work remotely, and things like that. How is this all affecting your prospects for the next few months?
Gabriel: I think it's even making it better. Because it's embracing the culture of remote working. All this Coronavirus, suddenly a lot of companies realize that remote working works. So I hope we get more remote work for other folks, who will likely enjoy not going to the office, not commute every day.
Len: Yeah, it's really interesting. Actually I - I guess it's called "log rolling", but I published a blog post the other day, about how basically - one thing that might happen now, is that we might actually see a permanent shift in the way people work. I sort of don't trust my instincts too much, because I so much want this to be true. But I think a lot of people might realize - the reason they hate Mondays is because you've spent all weekend at home, and like having fun in your community.
And then getting up earlier than you have to, for no good reason - like getting showered and putting on clothes that you'll be evaluated on in your office place, and then commuting, and then getting to work. And like, instead of doing that - you get up and you have a cup of coffee. And by the time you would've got all that - just the beginning of your day, getting to the office, done - you've done as much work as you might have done in the full day at the office anyway.
People are going to, when things go - knock on wood - when things go back to normal, people are going to be going through that whole routine again, going, "What am I doing?" And then they get to their dumb office, and they sit around looking at each other, like, "What are we all doing here? None of this has anything to do with work."
But anyway, sorry, with that said - so you've been looking for a new position recently, I gather, from your Twitter feed. And you recently wrote a really good blog post about your experience going through interviews recently. I was wondering if you could talk a little bit about that. About what - there were some of the things that you encountered that you thought really sucked.
Gabriel: Well, I wrote the blog post in anger I think. Some blog posts could only be written that way. But yeah - I had a terrible experience, interviews in small companies, but also big companies. And that was a bit of a surprise for me. Because I've been interviewing a lot of people, a lot of software engineers - and I think I've got some experience interviewing people. I've been on the interviewer’s side as well.
I think in my last company, we had a really good hiring process, even though it wasn't perfect. Because we had a lot of things to figure out with HR, with the IT department sometimes - communication was key. And some miscommunication within HR and the IT department - it was going to lead into a bad experience for the interviewee.
But yes, I had a terrible interview process, because I was mainly interviewing for permanent positions in the UK. I think like all the details are in that blog post. But mainly, the main flow I've found is people - you have to go through a three stage interview, four stage interview. But I think it's a terrible mistake, just to put only one engineer on the other side, interviewing you.
Because they become the only judge for you. It is like a very biased interview. And something they probably don't like you, or probably they feel on the defensive side - I don't know how to rate it, but I think that's a mistake. I think there always should be at least two engineers, or two persons, if it's not a software engineering interview, on the other side. Because I have been on that side too, and if you are the only one, it's whatever you think about that person is what matters. And that's ultimately your decision, the one that you communicate to HR, or to the next person on the chain.
I think if you have another engineer by your side interviewing this other person, he might have another perspective. And at least you will have some arguments, you'll probably discuss about this interview. "What do you think about this? Did you see any red flags?"
But whenever there's one engineer, one person on the other side, there's not much you can do. And yeah - I saw many companies failing there. Probably, of course - it could be my fault that I wasn't a great candidate, being on the interviewee side. But I was left with this feeling that there's only one guy on the other side, being the judge of me, or whether I could be a good fit for the company or not.
Len: I totally know what you mean. I've had that experience. When I read your blog post, it brought back some memories of back in the day when I was interviewing for strategy consulting and investment banking jobs. And the worst thing was when it was one person. Because sometimes they – I don't know if you know this phrase, "the cut of your jib", but sometimes someone just doesn't like the cut of your jib. There's just something ineffable. There's something about you that they don't like.
And it could be - and I think you mentioned this in your post - that you're smarter than them. That is a very real thing, that sometimes people feel like you might be a potential competitor in the workplace. And so having only one person interviewing a potential candidate is bad for the candidate, and bad for the company, because human personalities are all variable.
And there's things like mood as well, right? Like, what if someone's just in a bad mood? Or what if they're in a good mood, and they hire the wrong person?
So - yeah, it's a very good idea to have more than one person interviewing an individual candidate for all kinds of reasons. And it can be incredibly frustrating, because you know that just - it's one of these reminders of the arbitrariness of life. "I could've had this whole career. My life could've gone a totally different direction. But because guy didn't like me, my life didn't go down that path."
And so, moving on to the next part of the interview, I'd like to talk to you about your book - which has been doing very well. It's called Practical FP in Scala: A hands-on approach. I guess I would just like to begin by asking you, what was your motivation to write the book?
Gabriel: The idea started in a conference. You know, when you go to conferences - especially these kind of conferences - there is a great community. There is a bunch of good folks. And you meet people. You are inspired by talks. And you get ideas. That's what happens in conferences. That's why I love going to conferences, either to speak or to attend as well.
And I got this idea when I - When was it? I think I was in Scala By the Bay in November 2018, in San Francisco. And I got a lot of good ideas. I started - I was writing a lot of blog posts, technical blog posts back in the day. And I got a lot of ideas. And then in December, I went to Scala eXchange in London. And around that time in 2018, December, 2018 - I got this idea of writing a book.
But I didn't want to write the book as a solo author. I wanted to write it with another developer. So I contacted a good friend, Jakub Kozłowski, which is another colleague and Scala developer, who is also quite known in the Scala community. I talked to him at Scala eXchange, and said, "Hey, would you like to write the book with me?" I only had like the idea - the topics that I want to touch on, mainly writing purely functional Scala, and - well, it was just like an idea.
I saw him and we kept chatting on it, but eventually it didn't go anywhere. Because we were working on different things, he was busy with his work, I was working with my own stuff. And I didn't put so much effort into it.
So that project ended there. We had the topics. We wanted to write a book, kind of like a table of contents. But it didn't go anywhere. We just set up the repository, and abandoned this repo.
But then, because of the situation of my life - I left Japan, I had to quit my job and I went traveling - and I had a lot of time while traveling, saying, "Oh, why not get back into this writing idea and see - maybe I'll just start writing a few chapters? Or maybe a few sections? And see what people think." And that's what I did first. I wrote the first two chapters myself, and with all these ideas I had, mainly bits and patterns, like concurrent state - dealing with domain data modeling in a purely functional application in Scala.
So I wrote these first two chapters and I contacted a bunch of guys from the open source community in Scala, and I asked them, "What do you think about this? Do you think this could work, there could be any kind of interest from people?" And they were really excited. And their excitement got me super excited as well. And I said, "Well, I've got plenty of time now because I'm traveling, I don't have a permanent job. I can do this."
I think I published it on Twitter or something, and that's what I came up with - I think some people pointed out Leanpub as a platform to publish your book, which is very much in-progress - only the first two chapters, not very polished. But I think Leanpub was a great platform to publish my book as it was. And people that are interested in the table of contents, they can sign up - and whenever the book is finished, they just get the full copy - and maybe for a bargain of a price.
Because I published I think for a very cheap price at the beginning, for people that wanted to support my work. So that's how I started. And then I was traveling and writing at the same time. So the book was written in different locations in Latin America.
Len: That's just a fantastic story. And actually, I'm looking forward to asking you some questions about your writing process and stuff, because I know you've written about that. But before going on, just for anyone listening - let's sort of like start from the foundations. What is Scala?
Gabriel: Scala is this hybrid language been object-oriented programming and functional programming. It was created by Martin Odersky, and he wants to promote the usage of object-oriented programming and functional programming. Kind of like a mix. Use the best of the two paradigms. So that's Scala.
But then, within the Scala community, we have the sub-set of the functional programming side. And there's a whole bunch of libraries, especially the ones that I use and I'm most comfortable using, is the typelevel stack. We can we can mention [?], Fs2, Cats Effect, Cats and a few others. And this is like the purely functional subset of this community. I think I started running less Scala - eventually you get hooked up into all this functional programming thingie, and you move there - and there's no way you go back.
Len: And so just for anyone listening - let's say, imagine someone's in their first year of studying Computer Science, and they're like, "Wait, what's the difference between object-oriented programming and functional programming?" Could you maybe talk just for a little bit about that?
Gabriel: Yeah. So I don't think I'm very good at explaining object-oriented programming, because I kind of like forgot what it means. But it's mainly - I had some experience using Java and working for companies using Java, which is one of the main languages in the JVM, that uses this object-oriented programming paradigm. It promotes the usability of objects to model real-life things. For example, here we have a car and a person - these things are modeless objects. And then [?], the interaction between a person and a car - it's also modeless objects. Everything is an object. Or that's the kind of thing that I remember.
And in functional programming, everything is - it's expressed with pure functions. Pure functions have a huge relationship with mathematics, and I think I like mathematics as well, algebra, and - even though I'm not an expert by any means in mathematics. But I think - there's a huge branch called - a theory as well, very much related to the topics we have nowadays in functional programming - and so like, yeah - the main difference I think - it's like, you model everything with objects in an object-oriented programming language. And in a purely functional programming language, you do everything with functions. And functions have these foundations in mathematics, and you can reason about functions better than you can reason about objects and mutation.
Len: And that's where the Lambda calculus comes in, is that correct?
Gabriel: Yeah, that's correct. I think Lambda calculus was created by Alonzo Church in the '30's or something, and I think the first functional programming language was Lisp, if I'm not mistaken - somewhere in the 50s? And yeah, we've came a long way.
Len: So with functional programming - you can appeal to kind of like timeless, universal principles of logic in a way that you can't with object-oriented programming. Is that right?
Gabriel: I don't know whether that's right or not. I think that the main advantages of using functional programming to reason about your code, is that you only have inputs and outputs. Functions - you get this in, you get this out. But within the context of an object, you might have some mutation of global state. And that's what is hard to reason about. Now you don't do that in functional programming.
Len: Okay, okay - thanks very much for that explanation. It's funny how these - I mean, I'm not a programmer myself. Actually I'm Leanpub's - I do some programming, and I've read some books obviously and stuff, and interviewed a lot of people - but I'm Leanpub's resident non-programmer. So I really love sort of like learning about these things.
And one thing I've discovered interviewing people who are real experts in things, is often you do forget - you sort of like - it's not exactly that you forget, but like explaining - making things explicit that are so basic. I remember talking to a friend of mine who was a nuclear physicist, who's like, "I can't explain addition anymore. I can't explain long division. That's just not part of my world anymore."
And so, who is the book intended for?
Gabriel: The book is intended mainly for experienced Scala developers, for intermediate to advanced Scala developers. It's not aimed for beginners. For beginners, I'd recommend a few other books in my Twitter or in the [?] channel of the book, or even on the book - these books are recommended, like Scala with Cats or the official documentation of Cats Effect, for example.
I think the book tries to fit in a space where there's no other books like this. I think that people learn a lot about functional programming, then they learn about this cool library. Then they learn about this other cool library. But then they are overwhelmed by the amount of libraries, and say, "Okay, how do I put all these pieces together now? I think I know how to use this library. I understand how this works. But what are the design patterns here? How do I manage concurrent state, concurrent access of data?"
And that's what this book tries to fit in. Where - you use all these cool libraries in there, that level stack. And then you put them all together, and you create an application from scratch. It's basically taking all these cool concepts that actually make me happy to work with, into the enterprise. Like convincing your manager to use all these. "Okay, how do you use them?" Oh, I tried to explain some design patterns and some common things - I think, like how to grow your software, how to scaffold your project - and common mistakes as well. So that's where this book tries to fit in.
Len: Thanks very much for that great explanation. You've mentioned Cats a couple of times, and I'm going to use - I'll put a link in the transcription to explaining what that is, the Cats ecosystem.
But I wanted to use this as a segue to talking about the process of making your book. So, you've got a really fun cover with a cat in a burrito.
Gabriel: Yes.
Len: Why is there a cat in a burrito on the cover of your book? A cartoon cat.
Gabriel: Yes, there is a common joke in the functional programming space about mondads. I don't know if you have heard about monads?
Len: Yeah, I interviewed Julie Moronuki on the podcast at one time.
Gabriel: Oh yeah.
Len: So we're kind of rehashing old ground for people who are like really devoted listeners. But I just wanted to give you a chance to explain this, because it's so fun.
Gabriel: So, I don't want to explain what a monad is, because I'll sound like a moron. Len: No, no.
Gabriel: There's many blog posts out there. But there is a very good joke in the functional programming community - that we say, "A monad is like a burrito." Right? A monad is like a burrito - and so the logo of the book is this cat, this kitty in a burrito, kind of like resembling this joke about a onad.
And it's a cat because of the Cats library. And it's been created by Impure Pics, which is one of the amazing guys making - is a very talented designer making logos for Cats, Cats Effect, Fs2 - and he was kind enough to let me use his logo in my book as a front cover as well, he designed the cover as well.
Len: Oh, that's fantastic.
Gabriel: Thanks Impure Pics for that, yeah.
Len: It'sreally funny. When I was recalling this cat in a burrito joke, I Googled it, and there is such a thing. I don't know if you know this? There's such a thing as a kitty burrito - which is a way of wrapping up a cat that's problematic when you need to transport it, like to the veterinarian or something like that. So you put the cat in a blanket, and there's a technique for wrapping it up.
Gabriel: I didn't know about that.
Len: Yeah, there's a real thing - a kitty burrito. So there you go - thank you internet, for everything.
Thanks for sharing that and congratulations on the wonderful cover, that's just great.
So now we're moving into the last part of the interview, where we talk about self-publishing.
And covers are very important, for anyone listening. It's worth money if you have it. There are creative things you can do yourself, of course, as well. But a great cover delights a potential reader, and gives them - more importantly - it's actually not a superficial thing in self-publishing. Because it gives people confidence that you really care about your project, and you really know how to show it. So that's a very important thing.
And so, you wrote your book when you were traveling, and you published it in-progress. Were you getting feedback while you were writing it, and publishing it in progress?
Gabriel: Yes. So, I had a few friends that were guiding me - especially in the first few chapters, where - it was like the first time ever I write a book. I wrote plenty of blog posts, but I never cared so much about my grammar mistakes. And, yeah - writing a book is a different thing. So you need to be very careful about your grammar. I had a native English speaker friend, John Regan, who was helping me with the mistakes - the common mistakes I was making in writing a book.
I think my writing got better after the first few chapters, where I learned from the mistakes. And then the rest of the chapters were much better. I learned new vocabulary. I was using dictionaries online to come up with new words as well, just to avoid repetition of words within the same sentence - use different words, but it's kind of like the same meaning, but don't use the same word. So I think I became a better writer. So yeah - I had help with the grammar, with the English part, but also with the technical stuff.
So with the technical stuff, I had a few friends from the Scala community. They are all named in my book, in the acknowledgement parts. But I don't want to say any names, because I will forget one of them. They know who they are. But great folks in the Scala community helped me with the technical part. They were reviewing all the code that I had in the book, to make sure I didn't make any mistakes, or maybe they could make other suggestions as well. So that was very, very useful. And, yes - thanks to all of them again. Because otherwise, this book wouldn't have been possible.
Len: And did you get feedback from just general, anonymous readers as well?
Gabriel: I did. Once I published the book, I was getting constant feedback by the early readers, which was very, very useful.
Len: And were they contacting you through a dedicated email address that you made available for them to contact you through?
Gabriel: Yeah. So, I created a GitHub channel, which is very common in the Scala community. And I encouraged the readers to contact me in any way they would prefer - Twitter, or the Leanpub platform, or via email. Like whatever they prefer - I will respond, no matter what the platform is.
Len: It's interesting, because when we kind of get into the weeds of stuff, it's really useful for self-published authors and not for anybody else - but so, did you have a system for dealing with the feedback that you got? Like did you record everything in a document somewhere? Or did you just kind of freewheel?
Gabriel: I have a GitHub repository for my book. So all the feedback and questions and suggestions I had, I just created GitHub Issues, and that's how I managed to go through them. Otherwise, I will probably forget some of them.
Len: Oh, that's great. I've interviewed a couple of people who have used GitHub Issues that way. Including, they used GitHub Issues - they'd set up a repo not to do anything, just to use the Issues feature, which is really interesting.
And so, the last question I always like to ask on this podcast - and we've gone from the sort of high to the low - is, if there was any feature you could ask us to build, or any problem you could ask us to fix - can you think of anything you would ask us to do that could help you as an author?
Gabriel: Yeah, definitely. I think the feedback feature didn't work in Leanpub. I think I reported that issue. I think it doesn't work until today probably. But I think it was a weird kind of edge case issue, it was hard to debug. But if I could ask Leanpub for a feature, it would be the offer to do - I mean, you can sell digital copies of your book, but it would be nice if we could also sell physical copies. Is that possible at the moment,?
Len: No, though thank you for bringing that up, and also for mentioning the bug. We're totally transparent at Leanpub, and that's important, right? Insofar as Leanpub is a good platform, it's largely because of feedback from people telling us what's broken and we suck. And that's one of the great things about having so many programmers as customers.
But when it comes to producing physical copies - we've had this request before. I mean, the magical ideal would be "click a button to make a print version of my book." We have our version of that, which is a print-ready PDF output. So you can make a book, and write a book at Leanpub - click a button, and then we give you a PDF - if you use our writing tools - and then you can click a button and create a print-ready PDF that you can use to upload to Amazon or Lulu or whatever, to make a print book.
But the short answer is, we will - I mean, "never" is a long time. But I think, well you used to work in logistics - and so you know the difference between dealing with digital things and physical things is different in kind, not just degree. And Leanpub getting into the business of physically creating books and transporting them and dealing with remainders and refunds and stuff like that - is something we've thought about, and we've decided not to do. So, we're there to help people get into that if they want to, and give them everything they need that we can help them with. But we're probably never going to be like buying a warehouse.
Gabriel: No, that makes sense. Yeah, probably - it's a different kind of business. I just mentioned this, because I'm in the process of getting my physical copies of my book and I'm using a different platform and
Len: Yeah actually - let me ask you a second last question, which is. how are you making your print copy of your book?
Gabriel: Well, to write my book I didn't use the Leanpub Markdown, I used Pandoc, which is an open source tool. I prefer to use open source tools for all I do. And so getting the margins and the bindings right for the physical copy is a huge challenge. I had some people helping me, but I order the first copy - it arrived in Poland yesterday. So that was awesome. I have just looked at the first physical copy. I have it right here in my hands, I think - somewhere here.
And yeah, it has a few mistakes, mainly related to margins and how they're - it cut off the pages really close to where the page number is. Dealing with margins is really difficult. It is very challenging. But now that I have the physical copy, I can compare it with the digital one that I see on the preview, and I can fix it. I actually worked on that last night - and I'm going to make the new order of the second proof of concept, physical copy - and see how that goes.
Len: Thanks very much for sharing that. I think it's probably really reassuring to other people who have faced the same challenge before, to hear that things like margins and having to get multiple test copies and stuff like that, are just a normal part of the process of self-publishing, and getting a print copy out. And when it is out - please make sure to share the link with me, so I can put it in the transcription for this interview - which will be online in a little while.
Well, thank you very much for taking the time. I actually got to see a Polish sunset in the background, it's a beautiful country - during this interview, it's dark now. But thanks very much for taking the time to do this interview - and for your book, and for using Leanpub as a platform to publish it. We really appreciate that.
Gabriel: Oh thank you, thank you for the invite to speak in this podcast. I think - I haven't mentioned it, but this was my first podcast ever, and so - yeah, it was a good experience.
Len: Oh well thank you - I'm a bit surprised, because you did so well. And we actually - for those listening - hopefully it's seamless, but we had a couple of technical difficulties and you dealt with it like a total pro - so thank you very much for that, I really appreciate it. And, yeah - thanks very much for being a Leanpub author.
Gabriel: Thank you.
Len: And as always, thanks to you for listening to this episode of the Frontmatter podcast. If you like what you heard, please rate and review it wherever you found it, and if you'd like to be a Leanpub author, please visit our website at leanpub.com.
