I am Francesc Campoy Flores. Ask me anything.

6 December 2018, 10:00 pmAsk Question

I’m the VP of Developer Relations at source{d}.

I have a passion for developer relations, specifically when it comes to Go and anything that can help developers be more productive and happier.

Previously, I was a Developer Advocate for the Go team at Google and for Google Cloud Platform. I’ve been working closely with the Go team at Google since 2012, and my goal has always been to make the language as accessible as possible to everyone.

In this page you will find the projects I’ve worked on, such as my YouTube series justforfunc, as well as some of my GitHub repos, blog posts, and some of the talks I’ve given over the years.

Ask Francesc Campoy Flores about:

  • Golang
  • Golang tooling
  • Machine learning in general and machine learning on code
  • Open source
  • Justforfunc Youtube channel
Jill Castro's photo

What programming advice would you give to a 10-year-old Francesc? ;)

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

Code as much as possible in as many languages as possible and have fun!

Programming is all about creativity :)

Aravind's photo

What is your favorite thing/feature from the Go2Draft?

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

It is indeed kind of hard to do it here! hehe

First the things I like about both is the fact that at the end of the day, no matter which one you're using you can always end up exposing the vendor directory therefore letting your users simply use your code without having to care about your choice for dependency management.

On the other side dep is not integrated into the go tooling as much as modules (for reasons that belong more to political rather than technical conversations). This means that eventually everyone will be able to use modules natively without having to have an extra tool ... and we know programmers are lazy!

So yeah, I'd say modules and dep are both solutions to the same problem, but given the fact that modules is already integrated with the official Go tooling I do not think dep will be popular for much longer.

And that makes me a bit sad, because the team of gophers behind dep is amazing! Great people and great coders. The show must go on, as they say.

Aravind's photo

Hey, Francesc thanks for the AMA and the justforfunc episode on Go modules. I would love to know your take on dep vs go modules and maybe go a little deeper into the differences between the two approaches. And please feel free to do a dedicated justforfunc episode for it, if it's difficult to do it here.

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

Since I joined source{d} I've been doing more and more data science and machine learning ... which has driven me back to Python.

I would have loved to be able to write those things in Go too ... but unfortunately things like tensorflow and pandas are not available in Go.

Ok, tensorflow kinda is ... but not really, you can't do any training with it anyway. Gorgonia is worth having a look and I think it might eventually become a great option but the biggest challenge on using it right now is it's documentation.

So ... I guess I want pandas in Go? It could be called gophers! 😅

Milica Maksimović's photo

Hey Francesc,

Thanks for the AMA!

Can you describe how your average day at work looks like? Do you even have those days 😄

Show +1 replies
Milica Maksimović's photo

Editor in Chief @appsignal, former Community Manager @Hashnode

Thanks for your reply!

I'm amazed that you manage to travel so often and yet find time for yourself.

Hope you'll have fun at KubeCon! I'm Europe-based so, I won't be attending it this time (or this year at least) 🙂

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

See you maybe at FOSDEM, then!

Chris C's photo

What is your favourite project written in Go?

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

Cegal's photo

Hi Francesc!

Thank you tremendously for the JustForFunc series.

What (existent or absent) libraries do you think the community should work on to improve the things we can do with Golang?

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

I'd say my favorite thing is the effort on bringing generics. I've wanted them for quite a while, since they will empower gophers to write more concise code.

Imagine a library containing common concurrency patterns, or maybe even some functional programming concepts like reduce or filter ... the dream!

I don't care that much about the error handling, because I think that once we have good generics we should be able to improve error handling thanks to other concepts like error monads etc.

Hiren Chauhan's photo

Hi Francesc,

Thanks for the AMA. I want to learn GO but I'm not sure what's the correct path. If you could suggest some books and some course or blogs that would be awesome. And your YT channel is an amazing place to look for new stuff in golang.

If you were to learn the golang today, how would you start the learning process and where would you look on the internet.

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

If I was to learn Go today I'd probably try to learn it the same way ... by joining the Go team! Hahaha

I'm not kidding, that learning experience was amazing and I recommend it to anyone that has the chance to try.

But more realistically I'd say a good idea is to simply start writing Go, as much as possible, even when it doesn't really makes sense! My first program in Go was something that I would have normally written in bash, a bunch of calling other commands and pipes, etc.

The next step is to share that code and seek feedback wherever you can (the gophers slack is a great place for this)! I do code reviews on http://justforfunc.com from time to time, so make sure you send your code for consideration at http://form.justforfunc.com.

Code reviews are actually my favorite way to learn, because you're getting feedback on what you're doing wrong! So you already have the context and the knowledge is absorbed much more efficiently.

That said that's not always possible for everyone so if you want to know websites and books to read:

  • excerism.io: great place to exercise your coding skills in Go and receive feedback from the rest of the community
  • adventofcode.com: a great way to find problems to solve in Go! also you'll be able to see many other solutions, which kinda counts as getting feedback I guess.
  • Dave Cheney's blog posts are a jewel! https://dave.cheney.net/category/golang
  • justforfunc.com ... I've heard it's pretty decent 😎

Regarding books, I'm not much of a book reader when it comes to programming languages ... other than "Learn you a Haskell for a greater good" which is amaaaaaazing!

I'd say the cannonical book is "The Go Programming Language" by by Alan A. Donovan and Brian Kernighan, but I'll admit I haven't read it completely ...

Cecil Phillip's photo

I'm used to working with streams and sockets in other programming languages. I've been trying to wrap my head around channels for IO. Could you help break down the differences between channels and streams. Maybe also any recommended examples, posts or code that really highlight their usage

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

Hah, great question!

Channels are more about communication and synchronization than streaming data, tbh. Everything you can do with streams you can also do with channels, but take into account that the result will very probably be much less efficient.

This is due to the inherent complexity on making things work correctly across multiple goroutines and threads.

If you want to write with streams in Go, io.Reader and io.Writer are your friends!

For instance you could do something like:

  1. http.Get on a url that serves a zipped json file, that returns an http.Response
  2. Create a zip.Reader reading from http.Response.Body
  3. create a json.Decoder reading from zip.Reader
  4. io.Copy from the json.Decoder to os.Stdout

This will start printing the first decoded objects from JSON before you're actually done downloading the file if the network is slow enough!

So if you wanna do data streaming use io.Reader and io.Writer, if you wanna do synchronization of workers sharing tasks channels.

For the synchronization of tasks, check out this talk by John-Graham Cumming!

https://www.youtube.com/watch?v=woCg2zaIVzQ

Greg's photo

Concebollista o sincebollista?

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

Concebollista hasta la muerte!!

clarifcation: he's asking whether I use onions in the Spanish omelette, the answer is "duh!" 😄

Wang Y's photo

What is your opinion on the future of Go? What do you think Go 2 will bring to us?

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

I sincerely hope Go 2 never happens.

This might seem a bit excessive, I know, but the reason is that having Go 2 would imply that somehow there's a non backward compatible change in the language.

This could cause the same kind of drama Python had when the migration from Python 2 to Python 3 was proposed. The amount of Python 2 code that is still running out there and that can't be used from Python3 is just painful. The community is finally getting back together, but it's been some rough years.

I really enjoyed this talk by Ian Lance Taylor (https://www.youtube.com/watch?v=LqKOY_pH8u0) since it talks about different ways we could have breaking changes that do not imply breaking the community in two. Basically how a single project could use some files in Go 1 and some in Go 2.

If that's the case ... let's go for it! But let's be very careful, please.

I think Go has a very bright future, but I'm also not fully attached to the language and I recommend doing the same. Attaching your career to any specific technology is always a losing bet.

Wang Y's photo

Thanks for your detailed explanation! I wasn't thinking about what would breaking changes do to the community.

"Attaching your career to any specific technology is always a losing bet." - absolutely agree 👍

Arthur Brown's photo

Is programming science or art?

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

Yes.

Is writing science or art?

When you're writing you need to follow some rules in order be understood, there's some guidelines on how to avoid complexity to make your ideas as clear as possible to any reader.

But writing is also creative and can communicate and create emotions on the reader's mind! Poetry is a great example of this, but not the only one.

I believe coding can be both: sometimes we want to keep it simple and write the most obvious and boring code we want because we prioritize clarity, sometimes we'd rather focus on writing "beautiful code" and that's also great.

The programming language you choose will help you go one way or another, obviously. But as in natural languages, beauty can be found anyway.

Jeffrey D's photo

What, in your opinion, is the weakest package in the Go standard library?

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

There's some packages that I've never ever used ... I'd say any of those!

A good example of this is anything below https://golang.org/pkg/container/.

On the other hand the net package is incredibly well designed! The context package is also one of my favorites, not because of how it's used but rather because of how it's implemented.

I made a video on that, btw!

https://www.youtube.com/watch?v=8M90t0KvEDY

Jill Castro's photo

Hi Francesc, Thanks for the AMA. 🙏

We know Go is a modern programming language but is it future proof? What are your thoughts?

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

Hi Jill!

I'd say this answer has already been answered here: https://hashnode.com/ama/with-francesc-campoy-flores-cjosfpnv30007b5vpi7h84gg6#cjpd3nevx002283s1bg1wkyze

But let me know if you have a follow-up question :)

David's photo

Hi francesc. I love your justforfunc videos so thank you for that.

As a nodejs developer looking to introduce go into the company I work at, what kind of arguments would you give for go? Opposed to nodejs if you have any opinion on that.

Do you think the go ecosystem and packages are abundant enough to compare to the resource that is npm? Minus the security risks let's say.

Thanks for doing what you do. I look forward to your content.

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

Ok, so first of all I don't think saying npm lacks security is fair. They're probably one of the largest targets for attacks, so I'd say they've been doing quite amazing even though there's been a couple of bumps.

That said, indeed the Go ecosystem doesn't have the abundance of packages of node.js, and this can be an issue for some problems that you might want to solve. But in general, I'd say there's enough Go packages that creating most programs doesn't require building everything from scratch.

I guess the big difference is how node.js embraces frameworks like node express, while Go shies away from them. This is more of a cultural difference rather than technical, I'd say.

Often, in Go, you'll see people writing web servers without any framework and I think that's not because of a lack of frameworks (beego, buffalo, etc do exist) but rather a sign of the quality of the net/http package itself!

Go does provide a lot of different packages to be used as toolkits rather than frameworks (e.g. the Gorilla Web Toolkit) and you can find them quite easily on godoc.org.

Is there any specific field of work that you feel Go packages are missing? I'd say Data Science and Machine Learning are two of them, but not sure node.js has a better ecosystem for those than Python.

Mucyo Miller's photo

Hi Francesc, do you think Golang some day in future will be mature and optimized to be used in building things that are not using it today like OS etc.?

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

That's an interesting question, because the biggest challenge here is not necessarily Go as a language but rather the design principles behind Go's runtime.

I'm unfortunately not an expert in the topic, since I care more about the way you use Go than the way it's implemented, but Go does require an OS normally.

But ... there are some efforts on implementing a kernel in Go! I'm not 100% sure of how this works, but I'll leave the project here so you can have a look: https://github.com/achilleasa/gopher-os

Arthur Brown's photo

Why is Golang very popular among Blockchain projects?

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

WARNING: I sincerely have no idea ... so this is pure speculation.

The blockchain is a distributed system, which means you're going to need to handle many concurrent events over a network. Luckily for Go, these are two of the things that you also need to be a successful language to tackle the problems that Google does.

So I guess it's nothing related to blockchain per-se, but rather to distributed systems such as the blockchain, but also kubernetes!

Fabbian Ngala's photo

What is the future of Golang in Digital disruption

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

It really depends on what you understand as digital disruption, so unfortunately I'm not really sure how to answer.

If by digital disruption you mean the impact on society of a new technology, I doubt that Go has had any specific impact (or at least that I can think of).

If you include the way we write code ... Go powers Docker and Kubernetes, so there's some big disruption right there.

David Alberto Montaño Fetecua's photo

Hi Francesc!

I really dont know what to ask haha just wanted to congratulate you for your youtube channel! Just For Func is amazing. You are very inspiring and I like the way you explain the concepts.

Ok after thinking really hard I will ask you some questions!

a - Is there a set of go patterns that you follow and are they documented somewhere? b - Is there a go project in github that you really like in terms of design and organization? c - Do you try not to use libraries that you find on github and prefer to implement most of the logic yourself? This happened to me while looking for an sftp client in go, I ended up creating one that was really really simple ... and it worked. Maybe the question is what are the go 3rd party libraries you use the most?

Thank you for the AMA, good luck in source{d} and KUTGW!

Francesc Campoy Flores's photo

VP of Product & DevRel at source{d} - #MLonCode #CodeAsData #golang #justforfunc

I think I partially answered your questions here: https://hashnode.com/ama/with-francesc-campoy-flores-cjosfpnv30007b5vpi7h84gg6#cjpd3nevx002283s1bg1wkyze

But I wonder what future proof really means ... Go is a pragmatic language, therefore it's been designed to solve the problems programmers have today.

It is pretty obvious that those problems will eventually change, and that the way we write code will have to evolve. I'm thinking about really disruptive changes like commoditized Quantum Computers.

Once Quantum Computers are the norm, will Go be able to run efficiently on them? Probably not, but I might be wrong.

In that sense no procedural programming language is really future proof. Other programming paradigms might be better suited to these changes, since they are at higher levels of abstraction! Functional languages are a good example of this, but probably Declarative or Logic programs (like Prolog) will be much better at adapting to different technologies since they were designed from a completely different point of view.