The New Wild West: The Starbucks Model for Software Training Courses
We have to stop confusing beginners. Enough is enough!
Imagine being from the country where you grow up on a farm and drink black coffee every day. You know that if you wanted to mix things up a bit, you could add milk and sugar to your coffee. But, for the most part, you’re happy with your daily routine. Sometimes, you go to the nearest coffee shop and order coffee. When you order coffee, you know what you’re ordering and the person taking your order knows what you’re ordering: black coffee, unless you clearly state that you want milk and sugar with it.
Now, imagine you go to a big city, for the first time in your life. It’s early morning and you realize you want you some coffee! So, you walk into the nearest coffee shop. The place looks a little weird, filled with people in a hurry to go nowhere in particular but you pay them no mind. You walk up to the counter and say, “I’d like a cup of coffee, please”. The person behind the counter looks at you and with the fakest smile you’re ever seen, asks, “what would you like?”You’re now unsure a little but you soldier on, “coffee, I just want coffee”. You’re told, with a hint of impatience, “what size? Tall, grande, venti? Which coffee from the menu?” You’re about to say, “Venti? I no speak Italian!” and then your eyes go to the menu. You look at all those choices available and your head starts to spin! You walk out of there yelling, “all I want is coffee!!!” while everyone around you thinks you’re crazy.
Now, this may sound like a funny and unlikely story but this is exactly true for people who’ve never experienced Starbucks. They don’t know coffee needs to be so complicated. But if they walk into Starbucks one day, all lost, those around them, folks who are familiar with Starbucks, treat them like they’re crazy.
You might be wondering what this has to do with software. Well, software is exactly like this. Most people who enter the world of software to become software developers have a very simplified view of software. They have straight forward expectations of wanting to go from point A to point B in their journey. But those who are already experienced software engineers expect that as soon as you utter the words, “I want to be a software developer”, you should understand the nuances of software at the level they do. They throw out software’s version of “tall, venti and grande” like that’s common knowledge the world over.
To add to this problem, almost all software training courses, and this includes university courses, are designed exactly in this way. They all claim to be for “beginners” but the assumptions that work their way into those courses throw beginners down a rabbit hole that few manage to come out of unscathed. It isn’t very surprising though since most software courses are designed by software engineers. And the insane amount of contradictory information that exists out there is so dizzying that most new folks, under pressure, just end up picking the first thing on the menu in the hopes that they make the right decision. Unfortunately, for most people this is usually the wrong decision and they end up giving up. And on the other side, this confusion allows people who have no idea what they’re talking about claim to be “instructors” and churn out horrible course after horrible course.
I mentioned university courses. One of the courses that I think is an amazing course, CS50 from Harvard University, is also unfortunately designed this way. It is billed as a course for beginners but it is absolutely not for beginners. I understand that if you’re a student at Harvard your hand is held a lot more than their online offerings, but claiming that it is a good course for those with little to no exposure to programming is ridiculous. David Malan is a great instructor, but a miracle worker he’s not. I see so many beginners who read that CS50 is a good beginners course, get started with it and then give up not only on CS50 but on programming itself. And the retort is, “well, you ain’t cut out to be a developer.”No, you overpromised and/or created a horrible course and that’s what failed the student. Take some responsibility!
Look, I don’t think being a software developer is for everyone. It just isn’t. But I’d much rather people come to that conclusion with their eyes open and not because of the confusion caused by these mind numbing contradictory choices. Not everyone needs to start with CS fundamentals. Not everyone needs to understand Big O before they write their first line of code and see results. Not everyone is destined or even wants to be an optimization engineer at FAANG.
What happened to asking the beginners, those without experience, what they want? Imagine, in our example above, if the Starbucks barista had taken the time to just understand what you wanted when you asked for coffee. And while giving you exactly what you wanted, explained how you can order this very thing in Starbucks-speak the next time you come in. Would the experience not have been wildly different?
Now, imagine if experienced developers and trainers did that with software training. Actually understand what beginners want, what they’re struggling with and actually guided them through the process. That would make for better courses. That would make for better experience in the industry, and for those who decide to continue after understanding what they’re getting themselves into, it would make for much better engineers.
There is something we can all learn from self-taught developers. These are people who persevere. They look at the mess that is software training and chart their own way. But not everyone wants to or can take this route. Self taught developers are more like pioneers in this wild west type environment we have in software in general but in software training in particular. However, they are not the ideal student on whose experience the courses should be designed.
Courses and training material should be designed for those who are unable to move forward without their hand being held in the beginning. Because not everyone is able to recover from a fall early into their journey, especially if they are completely unaware that that fall is completely normal and expected.