Coding is a Buzzword — Riviera DEV 2016

This is the transcript of the talk I gave at Riviera DEV 2016 last week. This talk is about Software Craftsmanship, but I wanted to get to it through a different perspective, focusing the attention more on the developers careers, showing why and how they need to do one more step ahead. Now that everyone wants to learn to code (coding is a buzzword) being simply good at programming is not enough to win the competition. Software Craftsmanship can help their careers and the company they work for (and the software industry as a consequence).

Slide 3. Why I think that coding is a buzzword ... Let’s start with the definition of buzzword.

4. A buzzword is a “word or phrase that becomes very popular for a period of time”. And I don’t know if you’ve ever tried to google “Learn to code”…well, the result is quite impressive and interesting..

5. the number of resources that you can find is really impressive. The graph that you see is taken from Google Trends. Programming in general has always been something of interest for many people, but mostly for people with a Computer Science background. From 2012 onwards we see a huge increase in the number of searches. More and more people are interested to learn how to code.

6. Really everyone is interested to get this skill. This is a tweet from Mike Bloomberg, previous mayor of New York City until 2014, who had this new year’s resolution: learning to code! 
Do not take me wrong, the more people want to learn how to code the better it is, in my opinion. It’s awesome this burst of interest in programming.

7. This growth of interest has also been helped by initiatives like code.org, which mission is to make more and more children interested in programming. Also, here in France now there are programming courses at school. 
Initiatives are great, but they also helped the buzzword to grow.

8. One of the consequences is also the blooming of more and more learning platforms where you can learn how to code. This is just a very small subset of articles that I see every day. 64 places you can learn to code online for free, etc … we’re really overwhelmed by articles like these..

9. And the problem, at least personally, is that they make kind of pressure on me. It’s like if I’m not learning something new, the latest technology, every day I should feel guilty. They make pressure.

10. Anyway, let’s say that you want to learn something. OK, but the question here is WHAT? There are programming languages that come our every year. Rust? Sure, it’s one of the most interesting ones. Or why not a functional language like Haskell or Scala? What about Python? The interest is growing again on Python lately. What about Java 8? It’s cool Java 8 with Streams and Lambda etc..oh but wait, because Java 9 is coming, hopefully, the next year, and I already read articles about Java 10. And do not forget Javascript, everything is Javascript now and it’s the first in the Stack Overflow ranking as the most interesting language, mostly thanks to things like NodeJS. What about Go? Maybe the most sexy one. What about AngularJS? Oh but wait, which one? Angular 2 is coming, which also means that you have to choose between Javascript and Typescript..

11. Let’s see that you picked one of them. Now the question is WHERE can you learn it? You can learn it by yourself just by going to their official website, or you can pick up one of the online platforms available … but there are so many of them. This is just a subset, and I basically tried all of them (and they’re all great).

12. So yeah, the feeling is this. Totally puzzled. You don’t know where to start.

13. This is a real discussion I had with a developer some weeks ago. He told me that he wanted to start a new pet project in order to improve his skills, and I said “great, what do you want to improve?”. He didn’t know. Too many choices and he didn’t basically know where to start.

14. This made me remember of a very interesting book I read years ago called The Paradox of Choice. The author of the books describes how people tend to think that having more choices means that they are more free. If you have more choices means that you can select more precisely the thing that matches exactly with your need and so you’re more satisfied. The book instead shows that having more choices leads to more unsatisfaction because people have a constant feeling of regret (what if you are learning Java 8 and Java 9 comes out few months later? “Oh I could have chosen Java 9. Let’s start with it now”).

15. So, maybe the question we’re asking is wrong.

16. We should not ask ourselves “What should I learn next”?.

17. We should rather ask ourselves “What do I want to become?

18. Technologies come and go. It’s impossible to follow them. Do we want to become someone like Inspector Gadget who has a lot of tools in his belt, but he doesn’t master well any of them, but we have lots of things to put on Linkedin? Or do we want to become someone who master the software engineering field, independently from the technology?

19. And here we have to understand how strong are our knowledge foundations of software engineering.

20. Try to put yourself in this graph. The first stage of competence is a really scary one because people who are there will never grow professionally: they don’t know that they don’t know, and so they are stuck in their career. 
It takes time to make the step to the second level, but that is the level from which we can start our journey towards the mastery of software engineering and so we can speed up our career.

21. It’s like the difference between Anakin and Yoda. Anakin is clearly someone who has some skills, but he’s not able to do the right analysis. He doesn’t master the field yet. Yoda instead is someone who has such a strong knowledge foundation that can basically do both the right analysis and has the right intuition.

22. We are basically talking about the difference between someone who is a professional and someone who’s not. And professionalism is another way to say …

23. Craftsmanship.

24. Who do you think of when you think about a craftsman? You naturally think about someone who cares. Someone who master his/her tools and the theory. Someone who delivers quality products to his/her clients and also someone who continuously improves him/herself because doing that he/she’s able to do even better jobs.

25. And so, what is Software Craftsmanship?

26. Well, it’s exactly the same concept. This is the Manifesto of Software Craftsmanship and as you can see the focus is put on well-crafted software, community of professionals, adding value and so on. I don’t want to talk about all of them because there would be subject of another presentation and there are blog posts talking about each of them. I will talk about two of them that really impressed me the most as a person, and as a professional, that completely changed my point of view.

27. But for those of you who don’t know what Software Craftsmanship is, let me give you very quickly some context. The idea of professionalism is maybe started with a book called The Pragmatic Programmer written on 1999. Then the Agile Manifesto was written in 2001 and in 2002 the book called Software Craftsmanship came out where the author introduced the idea of apprenticeship and craftsmanship in software development. Starting from that point people started to wonder if Agile was diverging from its original idea, and in 2008 Uncle Bob (who by the way is one of the people who signed the Agile Manifesto) proposed a new value for the Agile “Craftsmanship over Execution”. And in 2009 the Software Craftsmanship Manifesto was written.
Starting from there a huge global movement begun.

28. There are two subjects when we talk about Software Craftsmanship: values and technical practices.

29. Talking about values, everything comes from the idea of professionalism. A Community of Professionals. If you grasp the idea of professionalism it will completely change your point of view and your attitude in your daily activity as software developer.

30. Job is not a Profession. A job is something that is done for the salary, the work you are asked to do from 9 to 5. A profession goes beyond that. A professional is someone who cares about his job and wants to continuously add value for the clients (being it a customer or the company he/she’s working for).

31. A professional is someone who owns his career and he/she doesn’t rely only on the things he learns at work, but he/she spends some of his/her own time trying to improve his/her skills and increase his/her knowledge. In a very illuminating talk that you can find on YouTube, Sandro Mancuso gives the example of a doctor. When you go to a doctor for a problem you will never see a doctor asking you to buy a book, or to send him to a training in order to take care of your problem. Instead you expect him to have the knowledge because he’s a professional and you expect it to act as a professional. Well, it should be the same for software developers. 
If your company provides you trainings that’s awesome, of course! But the trainings they provide are a reaction: your company adopted a new technology and consequently they start to provide you the trainings for that technology. You as a professional should be proactive, and learn things that go beyond your daily activity so that you can provide new ideas and so add value to the company.

32. Another point of the manifesto that impressed me was well-crafted software. Writing quality code is a skill that takes time to master and it has to be practiced as often as possible. We as professionals, as the doctor does, we should be continuously practice the skills to write clean code so that we can act as professionals. Things like TDD, BDD, DDD or refactoring or design patterns are hard to master and they’re are not knowledge that can be learned just by starting to write code from day 1. They have to be learned through books, trainings, and a lot of time.
Technical practices are the tools through which we can act as professionals.

33. So OK, you can now say “yeah, OK culture is important, but in the end nobody cares”.

34. Well, not really. More and more companies are embracing the values of Software Craftsmanship nowadays, in a way or another. I put here Facebook just because is maybe the most famous one, but many other ones out there. At Facebook they basically hired one of the best: Kent Beck. His job is to foster, preserve and enhance the engineering culture in the company, also providing technical coaching to the employees (lucky people). 
Facebook is spending a lot of money on culture, craftsmanship and technical practices.

35. After all this part about Software Craftsmanship, its idea etc … let’s talk about you. What you can do to start your journey.

36. First thing first: practice practice practice. I cannot stress it enough. Practice is fundamental. Find some time for yourself and practice your technical skills in order to become Yoda and to go up in the stages of competences.

37. If you want a personal suggestion where to practice, exercism.io is maybe one of the best. I love it and if you don’t know it, check it out!

38. And then read, read, read, read. You can improve your technical practices if you don’t read what to practice. This is just a subset of fundamental books that every software developer should read: try to read all of them. Some of them are really technical like Clean Code, Refactoring, Code Complete, but I really love them because they’re extremely pragmatic: they contain a huge list of tricks that you can start to apply now in your code. Once you read them you will completely change the way you write code! 
Other ones are more inspiring, like The Software Craftsman. If you want to understand in depth the idea of professionalism read this book and your life will change forever. Promise!

39. Show your interest. Have a technical blog, show what you are learning and what you master. It’s only by writing about something that you will understand how much you understood it. Also, it’s a way to show your passion and more and more companies are looking at these things. It doesn’t matter if what you write has already been written by someone else: on Internet there’s no problem of space, so just write it.

40. Another fundamental thing you can do in order to start leveling up in the stages of competence is to expose your knowledge. Go to conferences, do pair programming with someone, go to Meetups … on this slide you can see a subset of the Meetups organized here in Sophia Antipolis: there are many of them and you can find Meetups for basically everything, from Ruby to Scala. If there’s not a Meetup about something you’re interested in, organize it. Meeting with people who’re better than you are and putting yourself out of your comfort zone is the only way to improve.
And if you want a personal suggestion, the French Riviera Software Craftsmanship Meetup is the one I co-organize. We organize coding dojos and open discussions every two or three weeks and everybody is welcome.

41. Another thing that for me is being really important is the international Software Craftsmanship Community. The link on the slide is the link to the Slack community. It is really awesome, I am learning so many things thanks to them and it’s a really great community of professionals. 
I am just back from a conference organized by them in UK, called SoCraTes, and it’s been maybe one of the most important moments for my career ever.
So, I strongly suggest you to join this community.

42. Stay inspired. Follow interesting people you can learn from. Follow them on the channel you prefer, Twitter, Facebook, RSS … I personally love newsletters .. and so if you want a personal suggestion, I have created one called Software Craftsmanship Newsletter where I share interesting links for people interested on this subject and software engineering in general. There are almost 500 people subscribed from all around the world.

43. And then be the spark. If you’re passionate about software you can be the spark that will ignite the fire of Software Craftsmanship in your organization. This is what we’re doing in my company, Amadeus. We’re trying to create an internal Software Craftsmanship Community in order to create a new culture of crafted code in the company by creating a network of passionate people who will spread passion all over the company. What I’m discovering is that you cannot imagine how many good things you will trigger just by spreading your passion.
We’re doing different activities. The first one is the Coding Dojo, an activity that we organize every two/three weeks and where basically we practice techniques like pair programming and TDD through simple coding exercise. The goal is not to do the entire exercise, but to think about the design, the tests and to do every step in the process perfectly. Through this activity we want to make people learn and practice these techniques so that they will be able to use them with their daily activities in the codebase.
Another one is the Book Club where we share our opinions around some interesting books that we read. 
The third one is a series of presentation called “Pragmatic Programmer”. Aim of this series is to share our pragmatic experiences with projects, or technologies or techniques that we used in the company. Success stories or failures are welcome. We want to share our experience and talk openly about them.

44. So, to come back to the buzzword. You can create buzzwords around technologies and techniques, but you can’t create a buzzword on values. Professionalism and Software Craftsmanship are values that you have to embrace personally and they won’t be something that come and go, like technologies do: they will stay with you for the rest of your life.

45. To conclude this talk, Software Craftsmanship is a fascinating journey, a long road towards mastery. You can start your journey today and your career will benefit from it, as well as the companies you’re working for and so consequently the entire software industry. Come on board today!

46. Thank you very much!