• Paolo "Nusco" Perrotta

    Code, Complexity and Frogs

    Paolo: So, hello! Good evening. Welcome in Potsdam! So, today it’s Friday. What does that mean? Can you guess? Party! What do you all like doing? Besides coding? Drinking. Hugging. Yes, so, we're going to do a big group picture, so please stand up and hug your neighbour or stretch out your arms (Applause). So, before we kick off we have to thank some people, of course, the people who made this a financially viable event, and Florian will introduce our wonderful sponsors. Florian: Hi, so I have this sheet of paper instead of slides today. Our sponsors are Fyber, who are going to sponsor the party tonight. (Applause) Peter is going to tell you a little bit about that in a minute. Asquera, a company I don't really know… it’s mine! (Laughing) and we're sponsoring the transcription service (Applause). Thank you. Then we have Travis, the ones responsible for the coffee out in the hall. (Applause); Plan.io, who has always been kind and sponsored eurucamp in the past and are doing it again this year; ThoughtWorks, which you might know as the company of Martin Fowler, I looked analytics company, or GitHub; I don't know if you know these guys. A couple of smaller sponsors that have been either giving a little bit of cash or sending speakers or being otherwise supportive; so we have Bullet Proof, Sound Cloud, Birth Cloud, Scef… Peter: When I mentioned to my marketing team that there was an opportunity to sponsor something, they said, ‘Oh! Great! Do it, do it, do it!’. I just asked myself, what should I present there, actually? So, like, your fucking marketing slides or something like that? Then I just decided it's such a cool event, right before the keynote, so I wanted to tell you a story. Like, a story of my life (Laughing). I hope that's okay for you. It’s not a sad story, actually, but it's a real story, so it's real life. When I was a child… yep, I think it's a good start! I always wanted to be an architect, and, my parents told me ‘Yeah, okay, study architecture so that you will maybe become an unemployed architect’ or something like that. It's actually not such a good idea, but when I think back, I always did creative things just like I started drawing, and, yeah, I was at some point in my life part of a small Graffiti combo, I played a lot of music, even in an orchestra. And um, I did not become a musician, actually, and, I did not become a professional Graffiti player, so, actually, so, yeah, but, when I now -- now I totally forgot what I want to say! So, short time preparation today, oh, I totally lost it! That's so sad. Nowadays I'm doing all of it. I don't build houses, but I plan software for start-ups, so just like big software systems. That's some kind of architecture too! When it comes to drawing things, you draw sketches or prototypes, and that’s something creative too! You're not playing in a band, but you're working in a team, and this’s something really similar or at least comparable. I'm so glad to be here and to meet so many people with the same passion I have, and I am really looking forward to meeting some of you. I wish us a very cool event today, tomorrow, and on Sunday, thanks! Alex: There is an app you can download to view the captions, and we'll be viewing the Captions in the lecture halls. You should see it on Twitter or by e-mail, so, if you have if I questions, please come see one of us. Live stream… we also have a live stream this year, so you can watch the sessions in the Lecture Hall 1 live at http://live.eurucamp.org Regarding artwork; there is artwork there (points) and there (points). And I think one other place… there (points)! Please don't sit on the art work. As this beautiful little guide will explain, we have a code of conduct. It's a policy to be respectful when you meet people who might be different to you. That means whether it's a different race, gender, sexual orientation, different abilities… respect them. That's why we're here; I think we'll all have great time. Please respect each other! If you have any problems, your first point of contact is someone in a pink shirt. If it doesn't work out for you, or you can't find someone; or maybe you're lost, I don't know, 20-kilometres away in Brandenburg; please call number on the back of the leaflet you would have received and someone from our team will answer you. So, everyone with a pink t-shirt please stand up. I don't have one! I'm sorry. But you can approach me too (Laughing) I have a pink bracelet! About social media, our hashtag this week is #ec14. And we will tweet out other links. So, I wanted to say just a few words about eurucamp. It's all about making the event accessible, affordable, even though we went over hundred euros this year unfortunately, we offered discounts for students and beginners, it's really important for us to widen participation and to get an enormous mix across the community (Applause). The other thing that's really important for us is to make it fun. It's not just about talks. We’re in summer and everyone wants to be outside, so we have a whole breath of out door activities that you can take part in. And this is a really good way to meet people and the see the other side of them, not just as programers, not just their Ruby abilities, not just what framework they're using. Not whether they're using Mongo DB or not. (Laughing) so you'll get to do that this weekend. We are run by Ruby Berlin, EV, and Florian is on the committee, I wanted to say just one thing about them. Florian: I would like the say two words about them, Dajana is also in the non-profit, thank you, raise some applause for her. We're a non-profit organisation that helps spread Ruby in Germany, but also in Europe, so we're trying to grow a few projects and our most important project is actually Rails Girls Berlin, about which Ute will give a few words (Applause). Ute: Yeah, wow, so many people! I'm a Rails Girls Berlin organizer since 2012, this was today our third workshop during eurucamp and we are very, very happy to bring new people to this awesome community. I like eurucamp very much! We are the most active chapter worldwide, we had 18 workshops with over 640 attendees and we have in Berlin 120 coaches. I thank you all for supporting us, thank you! (Applause). Alex: We're waiting for the thousandth attendee, maybe next year that'll be a realistic goal. A few notes on what's happening tonight. So the plan is after this keynote, we move down the road to a place called Sunervert, that means we call the Teltou canal, you'll go to the station turn right and there'll be someone in pink that will guide you along the way so you don't get lost, if you do get lost you know what to do, call the number. Exactly (Laughing) not the police, no! (Laughing) Thank you very much to our party sponsor, Fyber for sponsoring the food, music and drinks tonight. One more thing, activities! Use activities.eurucamp.org if you want something to do tomorrow afternoon. We have a number of things planned, including the slip and slide (Applause) for which you might need a bathing suit of some sort. I've got an extra. (Laughing) bottoms only. There's also swimming, there's kayaking, there's kayaking and swimming if you can't kayak (Laughing) One more thing, and this is kind of a sad note, as some of you may know Euruko was canceled this year because of the political uncertainties in the Ukraine. Of that's very, very sad for us that that happened, but there is one upshot of that, and Natalia (Laughing) and Julia are two of the organizers from Uruku 2014 from Kiev -- No, I can't say it DNE -- Debronebrov. Okay, we'll teach you later on, after the party. They'll be our MC -- they will be our MC's for next two days (Whooooo !) So you get a little bit of a taste of Ukraine. Natalia: Sure. Thanks Alex and Florian! Hi there, thanks for inviting us, it's exciting to be here. It's really a pity that we weren't able to say hi to all of you in Keiv this year, hope you'll have an opportunity to do it really soon. And that's great that we have such a great chance to meet at this awesome conference and get together and meet people. Okay, so, let's start. Hi, everybody, and, now, we would love to, invite our first speaker who came to us right out from the lake enjoying kayak activity, if you want to join it tomorrow, you are welcome. knowing a lot about Paolo, don't want to spoil the content, we just wanted to talk that Paolo will tell today more about what it makes to be a real great developer. And, yeah, one more thing, we will have a kind of interaction, and if you have a chance to come closer to the stage, please come closer. Thanks. Paolo? (Applause). Paolo “Nusco" Perrotta: Hello! Thank you, Mom! (Laughing) okay, I have good news And bad news, can you hear me? Audience: Yeah!! Paolo: Okay, that's the good news!! Now... Seriously, the good news is that I have a presentation that is extremely visual, there are lots of pretty pictures and I'm not going to require your attention with complicated concepts and just listening to me speaking. So I really worked on this pictures for a very, very long time, and if I can say so, myself, I'm well prepared. The bad news is that the beamer is broken, so, actually I can't show you a single slide and you're stuck with me speaking on this stage for the next half an hour or so. Audience: (Whooo!) Applause Paolo: And I love it to death when Florian came to me and told me, he gave me this piece of news, he was like -- man, take it easy, it's okay, I can still deliver the keynote even without pictures, who cares if I make a fool of myself, it's just a few hundred people, right (Laughing) and he was like, oh, and we have live streaming. Fuck! So, let's keep it short. I'm here, essentially, because I want to hire a developer. They told me that there are a lot of good developers here, so, everybody who's a developer in the audience, could you please raise your hand. Just to Verify. Wow! Yeah, there are a lot of them, yeah. Well, now offence intended guys, I don't want to just an average developer, I want somebody who's good, okay, so, everybody who is a good developer, raise your hand, please. Okay, there are still a few guys in the audience. Seriously, keep your hand up, show me you are, okay. Okay. Good is kind of Ummmm I would like to have somebody great, because I have such tough competition. So everybody in the audience who is a great developer please raise your hand, now there is one guy there who's probably delusional (Laughing) this little dude, what's your name, son, who, me, it — Ben: It’s Ben. Paolo: No, Ben, I wasn't talking to you, I was talking to this other guy, here. Constantine: Constantine. Paolo: This is interesting, because what makes a good developer, really, what makes a get developer, we have seen people who have these high opinion of themselves if particular Ben and Constantine has also, and, it's a bit arbitrary, right. I mean, let's call a good developer and a bad developer on stage, this guy didn't raise his hand when I asked for a good developer, come here, Florian. Come here, anybody -- anybody who's great want to step on stage? -- Of course. Of course. Of course. (Laughing) I don't know whether this is a good idea, but look at these two guys, okay. Great developer -- they are replacing my slides, they their function is this. Okay. Great developer, Suckie developer, no offense (Laughing) so this guy will build the next Facebook,this guy has a lot of fake Facebook accounts so he can like his own selfies. Okay, this is the kind of people we're talking about. Okay, look at them like this, now, yeah, okay, they are kind of hand some guys, but, could you tell just by Looking at them -- Of course! Yeah, you're biased. Paolo: Okay, somebody who's not kind of in a close -- in close friendship with either, can you tell by looking at them who's the best developer here? Who's good? No, no. They both look smart. All right. So you can't tell it. And when they work, what you see, you see two people typing on a computer, that's what you see, you see two people typing on a computer, you don't know what they're doing. Neither, sometimes neither does their Bostock. Okay, you can bugger, the two of you (Applause) (Neither does their boss). I hope I get a better applause then they did, because they didn't do shit, really (Laughing) so, that's -- that's a problem that you probably had explaining to the people a lot what you do for a living. What they see is somebody typing into a computer, right. So unless they are developers themselves, your parents won’t know what you do. It’s not going away, I have to tell you. If you think that it's going to go away, I'm 45 and my parents are still like ‘May I introduce you to my son? He does something with computers.’ (Laughing) 

It's going to stay like that. Hmm ... And your husband or wife, unless she or he is a developer, they don't know what you do. Your best friends, they don't know what you do. That's unfortunately the truth. So, if nobody really understands what you're doing, how can you tell good developers, great developers? What they do understand is that thing that they told you many, many times since the first time you told somebody you are a developer. You tell somebody you're a developer, and they go, like ... ‘Oh, you must be really smart’ (Chuckles) This this ever happen to you? Huh? If it didn't, then there's something wrong with you (Laughing) So, they go like ‘You must be really smart’ and, actually, what do they mean by smart? ‘Wow, thank you, man! Wow! Perfect. This is Sexy’ What they mean by smart is something like somebody a little bit Nerdy, you know, smart like you solve complicated problems. You apply your big natural brain, that is a blessing and a curse to solving complicated problems. This is what developers do. And what drives me crazy is that a lot of developers think the same. They believe that our job is solving complicated problems. And I am here to convince you that's not true. I mean, we do solve complicated problems, but that's not the core of what we do. And to do that, to be precise, I have to look at word complicated and give a definition to these word, and I well use something that comes out of complexity of theory. It is one specific modelling in complexity theory that come from a guy name Dave Snowden. Not *that* Snowden; this one is a University Professor a Welsh guy. The model can be essentially in one of three categories. You can make sense of a model or a system, sorry, by look at one of three categories, one of them is let me go with an example, you're driving home, after a day of work, it's a nice day and it's sunny, and suddenly you see your reserve light blinking. Blink, you're almost out of fuel. What do you do? I'm serious (Laughing) What do you do? Maybe you find a gas station. Maybe you say, I live just around the corner, I will find a gas station tomorrow. The important thing about this, is not what you do, it's that you know what's going to happen. If you don't refill your tank, eventually your car is going to stop, but maybe not right now. This is the knowledge, okay, you predict the future, this is what in complexity theory is known as simple. I had a slide, but I don't anymore, so I made a picture. It was hard, it required me some work (Applause) thank you. You're a heartwarming bunch. These are causes and these are effects and the definition of simple is that the relationship between cause and effect is obvious to everybody. You can see it before it happens. It looks like, of course, it's not of course, it's powerful, you can predict the future. You know your car is going to stop, most problems are not like that. But, meanwhile, let's stick to the simple stuff. Okay there, is the guy who made the model, also made the pneumonic, a small picture that can help you remember simple, and for simple he came up with a bicycle, look at this beauty. (Chuckles) Why a bicycle? Well, you can wrap your head around it, when you learn to ride the bicycle, you know, you don't forget. So essentially it's something that's all there. You know what's going to happen when you ride your bicycle, if you ride the same way in the same conditions. What do you do in your job that is simple? Audience: Debugging. Paolo: Come on, who us be doing a few things that are simple. Audience: Reboot. Paolo: Reboot. What else? Audience: Coffee break. Audience: Staging files. Paolo: What happens is that usually the simple stuff, you don't know this notice much because you automate a lot of it. That's what happens. After all we're pushing births and births are light. If you were pushing breaks then automating would be much harder. What happens in companies is people believe that developers do simple things, because they're used to low-skilled workers doing simple things, but in an environment where a machine can replace low-skilled workers, then most people don't do simple things. We automate them away. So, you probably know about developers who still do simple things, the click monkeys who just go through the procedures. 9-5 developers, they don't care much about what they do. Actually I am stereotyping. Hmmm ... I don't know anybody like that. But maybe you know yourself on a day when you are a lazy ass and this is what you do; you click through your day -- Lazy ass -- you click through your day, you do simple stuff. Now, let's look at the second stage that your system can be in. Now you're not driving your car, now you're -- well, a friend gives you a car as a present, but, to spare some money he -- you get a big box full of car pieces, you have to assemble this car. Is this simple? Assembling a car out of all of it's mechanical pieces. Come on, it's not, what are you looking at? Do you really think it's simple, man I got a job for you (Laughing) all of you. No, it's not simple. It's not simple because the relationship between cause and effect is not obvious to everybody in advance, it's only obvious to people who know what they're doing, like they studied how to assemble a car. Or, yourself if you take the time to really study the problem. This is what, in complexity theory is known as compliant. Complicated, no, serious. (Laughing) complicated. Oh, you are amazed by my drawing skills: That's nice, thank you. That's why I'm here, I don't know squat about software. (Laughing) so come collated means that cause and effect still have a well-defined relationship. You can still know that relationship in advance, but you need to analyze, you need to study or you need to pay somebody who did the job for you. You hire an expert. This is the area of skills. Okay. This is the place where so many developers really thrive, really want to improve. Software craftmanship, don't get me wrong, skills are great. I totally agree with the fact that we should be extremely skilled, know your tools improve your skills, but, frankly, what do you do in your job that is complicated? Interact with Facebook. -- testing. Browser testing, dependency resolution, interaction with Facebook, no that doesn't count. Customer support. Paolo: Customer support… I'll hold it for a while, I'm not sure it qualifies, but dependency solution definitely does. Audience: Naming things. Paolo: We’re on the verge here, yeah, yeah, kind of. But, again, we talk about it later. Audience: Separating things Audience: Refactoring. Paolo: Refactoring is not complicated. Separating things and even naming things is not complicated. Complicated means you can sit down and do it all in your head and after you've done it in your head you can predict the future. I can't do that with refactoring, I don't know whether you can, but I can't. I need to actually do it. Naming things, well, kind of maybe. But, separating things, I don't think so, because once again, I can't do it in my head. I mean, I can, but I will get it wrong. I need actually go into the code and touch the code. So, I don't think that's complicated. Complicated means that you can still get down and study and predict the future. That's the reason why the mnemonic for that is a 747. Now you know 747 now you know I can't draw plane. I don't know how it flies, frankly. I know why things fly kind of, I don't know why a 747 -- you criticizing my picture?! Constantin: A 747 has two layers. Paolo: Okay, smart ass because you think you can give a better keynote that I can, now you step up and draw a 747 in front of all these nice ladies and gentlemen. Audience: (Applause) Paolo: I try not to spoil it for you. Come on, come on. We don't have all night. Konstantin: (draws) (laughing). Paolo: Okay, good, good. Okay. Audience: (Applause). Paolo: I think mine is better. Well, the idea of a 747 is there that there are a lot of moving pieces. I don't know how they fit together, but give me five or ten years or enough money to hire somebody that knows, and I can tell you that how all those pieces fit together. This is complicated. But the interesting part is not about of this example\; the interesting part is when you're not, to go on with our story, driving a car. You're not even assembling a car\; now you are designing a car. I give you money, I give you resources and the people you need, and I give you time and a deadline, you got to get 2% of the European market for city cars. This is interesting because now can you sit down and do it all in your head and on paper; and then come to me and say, ‘Hey, man; it's done. We don't have that market yet, but, just put that baby out on the market, and it's going to be done.’ And I don't think you can do that. Because this time around no matter how you study, you can't predict the future. This is not simple, this is not complicated, this is complex. Complex means that the relationship between cause and effect is unknown and can only be perceived in retrospective. This doesn't mean that there is no relationship, of course, after the project. After your car is out on the market; if it fails, for example, you will maybe know why it failed. Maybe you will and maybe you won’t; but what I'm saying is that this doesn't impact on the definition; the point is that you didn't know when you did it. So, if you know it after the fact, all the power to you. But you disability know it when you started. This is the interesting part. What do you do in your job that is complex? Audience: Automating. Audience: Optimising Audience: Analytics Audience: Creating a new product. Paulo: I heard somebody there; these are all true. Employ production (I think is what he said) (Laughing) Smart asses. (Laughing) So, this is the point, sorry I'm using my useless slides as guidelines; this is the point, right, the interesting stuff that you do, the really interesting stuff tends to be complex, not complicated; and far from simple. This is the interesting stuff that you do. Now, I would ask you: What's the typical complex system apart from coding, apart from software? What's “the" complex system you can think of? Audience: Humans Audience: Relationships Audience: Society Paolo: People, yeah! So interacting with people sucks, doesn't it? Do you ever meet that developer that says ‘Oh, I can code whatever you want, just don't make me talk to the customer’? (Laughing) Proximate cause it's complex. (Applause) and the example of a complex system is a frog, I'm bad at drawing frogs (Applause) (laughing). Because it's alive. And it's bigger than the sum of its parts you can't pull a frog apart and put it back together and expect it to still work (Laughing). I didn't try, but don't do that. You can't understand how a frog works by looking at frog pieces. It's complex. I've been talking about great developers verse sucky developers, and how some people do complicated things while other people do complex ones. And there is a possible misunderstanding. I mean, some people in large companies they go like ‘Okay, so, we need different kinds of people. So we have the people who are stupid and cheap and do the simple stuff. And then we have the people who just have skills and do the complicated stuff and they have some experience, some seniority. And then we have the people who can think. And those are the architects’. Bullshit, I call bullshit! I'm not saying these roles shouldn't belong to different people. I say that every single person should be an architect I believe to solve complex problems and complicated problems and automate away the simple problems, those are not the issue. The way big companies divide these roles at the moment is just ridiculous. So, you have a bunch of developers in one room and an architect in another room. I'm sorry if you're an architect Hm ... but, frankly, I think this is just ridiculous. You have the one guy in this room who maybe hasn't ever written a single line of code his or her entire life and this person is spending all of his time thinking about things he never did. And in the other room you have a bunch of people who spend the entire day doing things they never thought about, so what could possibly go wrong, right? (Applause) It doesn't work like that. So, what I am suggesting is not that you divide roles like that, what I'm saying is, how do you approach problems in general? Do you just solve simple problems? Then you're expendable, you will be replaced by a very small shell script, as they say. (Laughing) or a very small Docu image these days, but you will be replaced. Do you just do complicated stuff? Well, then you're valuable, but, you're only as valuable as what you know, right. And, you're only as valuable as smart you are. And if it's all about smart, if it all comes down to that, I can guarantee that most of the smart people in the world live somewhere else, wherever you live and they are getting cheaper. So your market is being eroded by smarter cheaper people. Another rant -- recruiting and then I'm over. Smart recruiters hire people for what they can learn, for their ability to tackle complexity. Dumb recruiters hire people for what those people already know. So, they go through checklists, you probably received those mails in your mailbox we're looking for a developer who has these qualities. He has three years of this, two years of that. Or maybe you even went through one of those humiliating interviews where you're looking, this guy a checklist and he goes, do you have five years of the Ruby on Rails programming language? (Laughing) Do you have five years of Apple Swift experience (Laughing) I swear, I swear, when I was younger I did go to an interview where this person asked me ‘Do you have experience with this framework?’ And I was like ‘What do you mean by experience?’ . ‘Like using it in production.’ ‘To be honest no, but I wrote a part of that framework, it's open source and I contributed a key part of it.’ When they didn't call me and I called them and they were like ‘uh, no, we didn't take you because you didn't have experience with this framework in production’. (Laughing) True story! Another story about confusing the labels, complex, complicated. I once talked to a manager who just said in so many words that they didn't want the hire developers who were too smart. He said that just openly. ‘Oh, smart developers they only cause problems, so what we want to do is to hire developers who are a bit dumb and can just solve problems like that. And we give them problems they solve them because they have three years minimum C++ experience’, and what can you say, I was like, ‘Well, man, apparently this idea of hiring dumb people in your organisation doesn't apply only to developers, but managers! (Laughing) What you are doing is confusing seniority with experience. They have three years of C++ they don't have three years of C++ experience if you treat them like that, they have one month of C++ experience 36 times over and then you hired them because you think they're senior. And I call bull shit! So, you might think ‘I'm smart, I'm a developer’. And you might pride yourself on what you know, but what you know is only going to help you in solving complicated problems. So, you can walk into a new job and be the expert. And that feels good. That feels good, we all know it. There is nothing wrong with that. So you walk in, ‘Yu-hu!, I know everything about meta-programming’ and everybody's like ‘Ooohhhoohhh’. But in the end; you know that guy in the organisation with grey hair who is doing maintenance and waiting to retire and he used to be the best Cobol programmer in the organisation? That's you, in the future unless you keep learning, which is very uncomfortable. Learning actually forces you to face the fact that you're not as smart as you think, it's humiliating; I find it humiliating. You take jobs in technology that you don't know about, you start from scratch with people who have less experience than you do, but they actually know their stuff better than you do. It's humiliating. But ... that's the only way to be great as a developer; great developer means you select your problems, because a great doesn't mean that you were born great, it doesn't even mean you become great and you stayed there, it's not a state. Every morning you're not great, you suck. Apart from the morning breath, you suck, because you start from scratch. And then you earn greatness by sun set time. This is at least what I think, what I hope. And this is the only way that I personally know to honestly say, okay, I'm great, I'm great, I learned something, I'm great I learned something. How many great developers do we have in the audience again? Raise your hand. Okay. Okay. The other guys didn't learn squat today (Laughing) I hope you liked the pictures, thank you. (Applause) Enjoy the party. Alex: Thank you to Paolo, please find someone with a pink shirt and they will direct you to the party. (Applause)"

    About Paolo "Nusco" Perrotta

    Paolo is the author of Metaprogramming Ruby. He has fifteen years of experience as a developer, ranging from embedded to enterprise software, computer games, and web applications. Paolo lives a nomadic life, mentoring agile teams throughout Europe. He has a base camp in Bologna, Italy. He loves Ruby.

    This talk

    Your job is a strange one, developer. Sometimes, it's as simple as a bycicle. Other times, it's as complicated as jumbo jet. But whatever you do, mind those times when your job is as complex as a frog — because those are the times that will call for the best of your energies.