Joy of Coding 2017

Yesterday I attended Joy of Coding 2017 and I had a blast. JOC is a conference for developers from all languages, frameworks and corners of the world and I found myself amongst mostly new, friendly faces who share the same passion that I have for technology.

… Well, passion

After the introduction, the first keynote talk Living The Good Life began, given by Ted Neward.

I don’t know why they call them ‘soft skills’ when they are so very hard to cultivate!

Ted talked (… pun not intended) about eudaimonia, or what constitutes a good, happy, fulfilling life. He criticized ‘passion’ as an emotion that isn’t something you actually want from your developers or even from yourself as a motivating force; passion is intense, exhausting and temporary, and can even turn into anger. When it comes to staying motivated and engaged in life, rather than relying on short-term bursts of passion or external rewards, experiments and research have shown that intrinsic, internal motivation is much more powerful and long-lasting. In fact, developers were apparently less motivated to fix a problem once they were paid to do so.

I’ve done a lot of self-development over the past few years, and I nodded to Ted’s points in agreement. I have found that there is no external factor that can even measure up to the power of internal motivation, and that the ability to tolerate delayed gratification is one of the most powerful tools of achieving awesome long-term goals. If there’s any soft skill you want to pay attention to and grow in, pick that one. Being able to put up with boredom and frustration to get to the higher pay-off is so worth it.

During the short break after the talk I found myself inhaling some much needed coffee, and quickly making contact with the developers around me. That was definitely the thing that made this conference awesome; there were no devs sticking to a clique, and instead everyone was mingling and getting to know each other.

Next up was Shaving the Golden Yak by Jessica Kerr.

I wonder if they ran into these whilst building the Death Star software.

I hadn’t heard of yak shaving before. It’s a term used in tech to describe any single task or series of tasks that seem pointless, but are sometimes necessary to solve a problem in order to be able to solve another problem. Sometimes these are very obvious — you gotta fix your build before you can deploy your code to an acceptance server — but more often than not, devs get sidetracked by many yaks that aren’t especially necessary to fix. Or are they?

Maybe in order to install this framework, you need to install this package manager, for which you need to install this compiler, which has complicated installation instructions, so you end up spending hours reading up on that compiler, and end up on an article about how this other package manager could be much more efficient to use, so you install that and play around with it, and you come to the conclusion that it is better, so you hook it up to your framework, but you’ll need an extra library for that, only that library has a bug in it specifically interfering with the database version you’re using, so now you have to fix that bug locally and send in a pull request, but the library hasn’t been updated since 2014, so now you’re considering going back to the original package manager…

Yep, you just spend an entire day shaving yaks. Development is very sensitive to this, because there is always something new and shiny, because there’s always one thing to set up or clarify or document, because there are always requirements left and right to take into account. There are a lot of things getting in the way of getting things done and often enough developers like shaving yaks because woo, there’s more problems to solve!

But, back to Jessica’s talk — in order to really bring her point across she learned a lot about the actual breeding and shaving of yaks, which was a brilliant and hilarious way to frame the presentation. Not to mention the excellent yak illustrations. Jessica describes several types of yak and how to best deal with them; she repeats how important it is to prioritize the smoothness of the development path for the whole team so that the sum is far greater than the parts. It is encouraging to consider that even if you’re not going down the road of shaving those yaks, you can leave a breadcrumb trail for other devs to follow, or smooth things out just so that it does improve the situation for everyone without spending too much time on it.

She also touches upon automating as much as possible to minimize the time spent on manual setup and repetitive tasks, so you can get back to solving the problems that actually need to be solved.

The first three aliases you want to put into your shell profile.

Then: the Speed Meeting, organised by Linda van der Pal

After Jessica’s talk I was faced with a choice: either stay seated and enjoy some lightning talks from fellow devs, or attend the social speed meeting. Since I wanted to socialize more, I chose the latter. And I’m glad I did! It was awesome, if at times also awkward, to talk to people on a time. It’s a quick way to get to know more people at a conference and touch upon mutual interests.

One particular speed-meet that stuck with me was actually with Llewellyn Falco who’d be speaking about mob programming later that day. When I mentioned how I’m starting at a new job soon, he suggested I spend the first few days pair programming in the role of the driver (all typing no thinking), since this could be a fast-track to understanding the company’s code and setup without the traditional long spin up time of new developers. It’s a great idea I hadn’t even really considered before; of course having a new dev literally go through the paces with another dev would speed up their acclimatization. Developers are smart people; you only have to show them how to do a thing once and they can figure it out from there. It’s way faster than having them bumble about by themselves the first few days.

After the speed-meet, it was time for lunch! The conference offered a wide range of food from good old fashioned cheese on bread to chickpea burgers. I was a fan of the luxury bread toppings with guacamole and beet spread. Despite the long queue, there was enough for everyone!

Not pictured: a hundred developers queueing up for food

Next up: Stories Every Developer Should Know by Neal Ford

Neal started his talk introducing us to the failed design of a 2-storied cannon ship (perhaps the very first failboat), continuing onto the history of programming languages and the billion-dollar mistake that was introducing Null references to ALGOL W, the grandfather of many modern programming languages. Another poignant story was how Knight Capital created millions of dollars in debt in 30 minutes, simply by trying to re-use a code toggle and failing to update all servers. Not to mention the mistakes made during the construction of the software of the Ariane 5 rocket, causing its failure and subsequent explosion.

“The internal SRI software exception was caused during execution of a data conversion from 64-bit floating point to 16-bit signed integer value.”
— Ariane 5 Failure Report in full

Oops.

Neal’s point was how often reuse and shortcuts in development can have some pretty serious consequences, and these mistakes still get made every day when building software. It’s good to be aware of these stories in order to not make these mistakes again. Shortcuts and trying to be backwards compatible can often have some costly ramifications in the long term.

I appreciate the shout-out to Ada Lovelace, the world’s first programmer, whom the Ada programming language was named after. Role model!

Another point Neal made was about how much developers love metawork more than actual work; they love building a framework or tool that solves a problem rather than solving the problem. This too can spiral out of control (and is closely related to shaving yaks).

All in all, there is a lot to be learned from the past. Sometimes you really don’t want to reuse existing code, but you don’t want to overdo building new things, either.

And then it was time for the Mob Programming talk by Llewellyn Falco.

I was especially interested in this talk because I had just been hired by DevMob, and if your company has that name, mob programming sounds like a think to try! Not only that, but I’d spoken to Llewellyn during the speed meeting, where he urged me to pair program for my first weeks at my new job. I hadn’t considered that, and it would be a great way to get used to all the code and tools.

Mob programming is a sort of extended pair programming; not only do we have the driver and navigator, but also other developers to pitch in; preferably from different backgrounds, so knowledge can be shared optimally. After a set time, the roles shift to the next dev in the circle. Everyone gets a shot at being the driver and being the navigator.

Llewellyn immediately showed us how effective this is at sharing knowledge and skill by a small demonstration, using the live audience! (And thus making sure we were all still paying attention in the late afternoon, too.)

The mob wrote a FizzBuzz test step by step, with decreasing levels of misunderstanding!

To me personally, pair programming is quite intensive, even with breaks. Still, mob programming seems worth a try to solve more complex coding problems, and a good way to disseminate knowledge across a team.

After another break it was time for How to hire and work with people who aren’t like you by Koshin Mariano.

I resisted the urge to cheer — diversity is an important topic to me, especially as a woman in tech, and I really appreciated Koshin getting out in front of people and talking about this and paving the way for this topic.

His talk made apparent how a lack of diversity in tech companies also constitutes a lack of developers — if you aren’t hiring a more diverse crowd, you’re missing out on developers as is, and their added experience as a member of a different group. Diversity in the workplace has shown to dramatically increase the performance of companies all across the board. Many tech companies are crying out for developers, but end up hiring similar people — and thus not tapping into a potential hiring resource.

“In an ideal world, companies are representing society. But we live in the opposite of an ideal world.” @Koshin_M #joyofcoding pic.twitter.com/d4VfJ17drw

— Felienne (@Felienne) June 30, 2017

I think the talk resonated with all of us who would like to see a more diverse workplace. Not only for the sake of equality, but for the sake of experience, knowledge and creativity. It’s good for us to learn about different people, different cultures, and different backgrounds. It helps us grow as people and that also feeds back into how we do our jobs.

It was good to hear these things out loud and I believe we need to talk about it more.

Next up was Carin Meier‘s talk about The Joy of Stochastic Gradient Descent.

Something that, in retrospective, I probably should have looked up!

Stochastic gradient descent (often shortened in SGD), also known as incremental gradient descent, is a stochastic approximation of the gradient descent optimization method for minimizing an objective function that is written as a sum of differentiable functions.
(Source: Wikipedia)

… So, math.

Carin took us on a wild journey through the general approach of Deep Learning AI programming and soon things became a little more clear to me: essentially, machine learning is possible through a formula that approximates the maximum (though stochastic gradient descent approaches the minimum). This allows a machine to effectively guess at what it’s being presented.

And also, generate cats, which is the best application of AI the internet has seen so far.

Diving into this field for a little while was fascinating, if also very mind-boggling, and I was lost at some points of the presentation because of lingo rather than logic. As a big fan of science-fiction and Isaac Asimov, it is a topic I could definitely get back to, because it’s not only very complicated, but also very awesome.

The conference concluded with the presentation of the Dutch champions of the RoboCup Junior 2017 dance division, which honestly was equal parts adorable and impressive. It was really cool to see such young brilliant minds at work, and  the majority of them being girls — I am enthusiastic about encouraging girls to code and get into technology. I think we are going towards a future where computer skills are becoming more and more important, as AI becomes more sophisticated and technology more ubiquitous.

All in all, it was an awesome day, with both educational talks as well as socializing and networking with fellow developers. A huge thank you to those who sponsored my ticket and made this possible. And thank you to the Joy of Coding organisers and volunteers who put together this conference. I hope to attend again next year!

 

010php Meetup June 8th

Last week I attended the 010PHP Meetup for June 8th, with two talks: Review unknown code with static analysis by Damien Seguy, a talk he will continue to refine and give at the Dutch PHP Conference at the end of this month. The other talk was GraphQL is right in front of us, let’s do it, with Symfony by Renato Mendes Figueiredo.

The meetup was hosted at Youwe in their brand new Rotterdam office in the middle of the city centre. Right off the bat the atmosphere was friendly, groups of devs catching up with each other with a beer in hand.

Notebooks for everyone!

I spent some time socialising with 010PHPers familiar and new. Since I was present at the very first handful of meetups and gave my own talk back in 2013 (called ‘Debugging for Distressed Developers‘), it was natural for me to get back in touch with my peers starting with 010PHP. It’s a friendly welcoming group of developers with good mix of veterans, mediors and students alike.

Coffee, beer, pizza, and talks: the average dev’s fuel

After most of the pizza had made its way to hungry developer stomachs, the first talk began.

Damien is an experienced speaker and he had no trouble getting the audience involved. He explained how static analysis is about reviewing the code with as little bias as possible, starting at the very basic level — what kind of PHP settings does this code use? Which extensions? — and slowly digging further into it, looking at dependencies, filenames, directory structure. The audience was frequently tested on their own analytic ability by being asked if we noticed anything unusual or something that told us more about the application.

Then we were introduced to a large number of PHP inspection and analysis tools, including Damien’s own Exakat software and PHPLint. What especially struck me were the graphs with the PHP version on the x-axis and number of errors on the y-axis that told us how a particular application may be maintained with regards to PHP version compatibility and that enterprise applications will often stay stuck before a major version change out of fear of breaking everything.

The version numbers also reminded me of PHP6 — in the sense that we jumped from 5 to 7 and we don’t talk about 6, much like we went from Windows 95 to XP and don’t talk about ME (even though XP has many of the features first released in ME). But, that aside.

After a short break, Renato continued with his talk on GraphQL. As someone who’s been out of the loop for a while, learning about new technologies has an extra layer of ‘I need to know this! Help!’ so of course I paid the utmost attention. 

“Help! I need to learn this new library right now or I’ll be completely obsolete!”
— Sasha Greif at So what’s this GraphQL thing I keep hearing about

GraphQL immediately struck me as a very elegant solution with clean, understandable syntax. It’s one of those technologies that makes you wonder, ‘where have you been all my life?’ Of course, it’s been around since 2015 and first developed by Facebook in 2012, but it’s quickly gaining even more traction. It sits between your application and all those other APIs out there, so you can just talk to GraphQL — and let your users talk to your GraphQL server — and it does the work for you. (Well, mostly. You have to write resolvers to deal with your input, but then you’re all good to go.) And as a total Star Wars fan, I appreciated the look of Renato’s presentation! He’s also giving this talk at DPC by the end of this month as well as submitting it to several conferences, so you may see it pop up in the future.

It was good to attend a meetup again and soak up some tech knowledge! I’m attending the Joy of Coding 2017 conference in Rotterdam by the end of this month, so be sure to check out my report on it as well.