Cultivating the right problem solving skills
Thank you jsanz for the revealjs Markdown blueprint!
When you start working as a software developer somewhere, chances are you'll feel great and write some completely awesome code which proudly has your name labeled on when committing. After a while, problems start to head your way. Things start to break - or maybe never worked in the first place. What should you do? How do you fix stuff? Wait, how do you find out what's wrong? And where to fix it? After these steps, you can try to ask yourself how to fix it. And how to prevent it from ever happening again.
These are everyday problems we're faced with. It sounds so obvious that it might not be worth talking about 'problem solving' at all. Then why are we doing it wrong? Why aren't we able to fix something within 10 minutes and why aren't we sure it won't come back? Don't lie to yourself. Finding bugs is hard. Fixing them might be even harder. But making sure they stay away forever might seem impossible. Under time pressure? Forgot to write tests? So the problem is not you but the legacy code you're forced to work with? Is this even your fault, why not blame someone else? It's not your wrongdoing that database scheme looks like crap!
During my software development years, multiple talented developers learned me how to find and take on problems. But the thing is, there seem to be multiple ways to find and fix somehting. I would love to share with you the problem solving skills we've had a lot of success with, and the problem solving skills we think could hardly be called a 'skill'. We're looking for a 'right' way to do it. After all, we want to be proud of what we do!
Where have you talked about this subject before?
This course was designed to be used at my work to increase our own craftsmanship. We try to learn from our mistakes but sometimes fall into the trap of doing things again and again under time pressure or other conditions. All examples are "real-life" examples I scraped together from various projects I've worked on in the past years. I've seen myself and others solve stuff but forgetting other stuff. It's meant to be a wakeup call. Next time someone picks up an issue, hopefully he or she applies principles explained in this course.
I always conclude the slides by doing some kind of mob-coding. Usually, as it's about problem solving, we take an actual (critical) issue one of our clients has with the software, and we try to get to an elegant solution together as a group. Instead of focussing on getting rid of the bug, as a group you might think more about tests, regeression, readability and design.
So, we talk about this all the time but we might dismiss obvious things as "of course I'll write a test" and promptly forget about it. Here comes regression...
How difficult would you rate your session?
200 - There's nothing technical about it but it does require you to think so keep your brains preloaded. The demo's are made with C# but don't contain anything fancy - that's not the point here. I don't want to make it too theoretical so lot's of alt+tabbing to VisualStudio.
Hi! My name is Wouter and passion is my passion. I'm a meta-kind of guy: I like to think about thinking. As a software developer for 10 years, I've seen awesome and despicable code. I've also encountered well-motivated and uninterested people. My mission is to tilt the scale for everyone towards fulfillment by taking control of what you're doing day to day. For us developers that'll be coding and most of all: liking how and what we coded.
Executing the mission means sharing knowledge and motivating myself and others. I'm a firm believer in abstract principles instead of concrete languages. That's why I try to promote being a polyglot as much as possible.
Besides coding, you might catch me treasuring offline time by baking bread or trying to write about the philosophy of everyday things in my physical journal (wow). I'm not one of the cool kids who likes social media so don't bother trying to tweet or facebook me. I do have a somewhat active GitHub repo: https://github.com/wgroeneveld/
You can find all code under the demos subdirectory. Have fun!