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.
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 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.
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!
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
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.
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.)
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.
— 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.
… 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.
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!