Scott Hanselman

Programming's not for you? How about thinking? Be empowered.

March 4, '13 Comments [37] Posted in Musings | Programming
Sponsored By

Used under CC via http://www.flickr.com/photos/dellphotos/6151875304/There seems to be two extremes of this whole "Learn to Code" movement which has come to a crescendo with the "What most schools don't teach" video from Code.org.

People seem to fall on the side of "Everyone should learn to code! Teach the babies Common Lisp!" or "Not everyone can be a programmer! Relax!"

Surely we can ALL agree that this discussion isn't about code at all. "Code" is just a convenient and press-friendly way to say "think in algorithms, think about problems, think about how things fit together."

It seems a little disingenuous to focus so much on teaching first graders to code or third graders about robots while simultaneously shuttering music, art and drama programs. Our expectations of our students when it comes to math, with some suggesting we stop teaching algebra.

We need to teach kids to think and to be excited about thinking.

Code should be taught - in age appropriate ways - as part of a larger "solving problems" curriculum.

Thinking should be cool.

Why is everyone trying to get everyone else to code? One word: Empowerment. Code represents power. The power to create, the power to change, the power to influence. Code also represents money to many. It is a raw representation of both intellect and instinctually property.

But woodworking, art, sculpture, drama and music are all ways to create and influence. They just don't have price tags as impressive.

There's clearly a Digital Divide and it's bigger than just blue collar and white collar workers. It's as big as the STEM (science technology engineering math) divide. Are you a computer person? Or not?

A family friend almost lost their domain a few months back. Had they lost it, it would have decimated their whole non-technical business. It was extremely confusing for them to tease out the difference between who owned the domain and held it, who hosted the DNS and who hosted the site. In their case, GoDaddy controlled it ALL and they got locked out of everything. An hour of whiteboarding and some moving things around got them setup at DNSimple and SquareSpace and put them in control of the tech they cared about.

I hate to see small businesses being charged thousands for things they could easily do themselves.
- Said the Software Engineer who hired a guy to fix his toilet.

How/when could they have learned this incantation? In school? on TV? Or should they have puzzled it out themselves? How far should it go?

Learn the Basics. If you're excited, learn more.

Learning to code, to me, is no different from me having someone teach me basic woodworking, gardening, or kitchen tile. After each of these projects my sense of personal empowerment increased. In each situation learned how to think about a problem and solve it. I can do this. I can change my world.

Take a minute and read 101 Basic Homesteading Skills. I came out knowing about 9 of these, thereby ensuring my quick death in the coming Zombie Apocalypse.  There's a great video of Mike Rowe about how many 'dirty jobs' are available but folks either lack the skills or interest to do them.

We should learn a little of everything and a lot about the essentials. Is learning to code essential? No, not yet. but learning to think about abstractions is.

Maybe you won't be able to create swim lane overlay graphics entirely in CSS3 but you should hopefully get the gist and be excited about how freaking cool it is.

Reading, Writing, Arithmetic, and Algorithms

But perhaps it is time for "Reading, Writing, Arithmetic, and Algorithms" in school. For loops, while loops. I love this idea on "How to train your robot. The parents are the robots and the kids give them a list of instructions (a "program") to accomplish a simple task. A kinesthetic and tactile way to teach a young kid to think without staring at a screen. Read more about this at OffBeatFamilies and get the materials at Dr. Techniko's blog.

Image borried from OFFBEATFAMILIES. Read their article and love them!

Procedural and Functional thinking, as well as other concepts like Project Management and Time Management are essential components of an empowered individual. These are teaching people to think. Teach them a little code and a little music and a little art, then nurture their excitement and try to turn it into empowerment. Everyone should get a chance and be exposed to all of this.

At the very least, I'd love for everyone to come out of high school with enough math/science/technology be able to wallow in the magic and wonder of the greatest joke ever (origin unknown). ;)

An engineer walks into a bar and orders 1.0E20 root beers.
Bartender: "That's a root beer float."
Engineer: "Make it a double."

I'm still giggling at this one, years later.

What do you think?

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by ORCS Web
Monday, March 04, 2013 8:54:16 PM UTC
Just stating for the record that I am a software engineer and I fix my own toilet. Thank you.
Monday, March 04, 2013 9:02:32 PM UTC
I think too many people are taking this to mean "become a software engineer" instead of what I think the original intent is "learn how to get your computer to do some of your work for you" - the latter being a useful to anyone who uses a computer to do their job.

[)amien
Monday, March 04, 2013 9:36:10 PM UTC
Interesting the following expression

"...There seems to be two extremes of this whole "Learn to Code" movement which has come to a crescendo..."

"crescendo" means in "growing up" in Portuguese, I wonder if there is any relation.
Daniel
Monday, March 04, 2013 9:38:13 PM UTC
Rush - Teach me.

Damien - Well said. If it's tedious work, can it be automated?
Monday, March 04, 2013 9:40:26 PM UTC
I believe that often we think there is only one way to accomplish a task. When it comes to teaching logic, for instance, we mainly use algebra or geometry. I'm not sure why teaching logic skills couldn't be taught using programming or even a logic course. In fact, I'm not sure why learning the slope of a line or the area under a curve is that important in everyday lives, but everyone loves to push higher-level mathematics.

As an aside, my wife teaches health and nutrition along with child development. While the focus of schools are on the core subjects, they aren't meeting the needs of teaching everyday skills like fixing the toilet, changing a flat tire, effective communication, or learning how to cook a healthy diet. These courses are intended to apply the core subjects to everyday life. Instead, the schools focus on split infinitives, the Magna Carta, photosynthesis, and Euclidean geometry.

If you want to see the usefulness of today's education, just watch an episode of "Are You Smarter Than a Fifth Grader."
Steve
Monday, March 04, 2013 9:41:38 PM UTC
"A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects."
ā€” Robert Heinlein, Time Enough for Love
Mike C
Monday, March 04, 2013 9:45:36 PM UTC
Just saying that I am a software engineer who bought a toilet that never needs to be fixed because it's not based on that stupid floating ball design that always breaks....

Set it and forget it. That's my motto...
PRMan
Monday, March 04, 2013 9:46:40 PM UTC
Not everyone can be a mathematician. Doesn't mean we shouldn't teach Math.
Monday, March 04, 2013 9:46:55 PM UTC
Just pop the top off and mess around with the mechanism. You're an engineer; you'll figure it out.
configurator
Monday, March 04, 2013 10:21:29 PM UTC
With regard to the root beer float:

I feel like I get the "secondary meaning" of the joke (the data types in the 2nd and 3rd lines), but not the "primary meaning"?

By saying "That's a root beer float," is the bartender just saying "that's an awful lot of root beer"?
Monday, March 04, 2013 10:38:53 PM UTC
Scott -

I have two kids, each about a year younger than your two kids (6yo, 4yo). I'd be interested to hear the ways you teach yours to "think in algorithms". I've done some on my own with some success, and they seem to be pretty age-appropriately logical kids. But I am always interested in ways to teach them to be deductive and logical in a way that might be more interesting to them.

Scott
Scott Isaacs
Monday, March 04, 2013 10:56:02 PM UTC
Personally, I think the traditional K-12 education should serve the following three roles:

  1. Promote a well-rounded education

  2. Teach basic skills needed in the environment

  3. Hopefully help the child identify areas of interest and start developing them enough to move on to the next phase, whether it be college, workforce, etc.

As such, some basic computer literacy is a virtual requirement in today's workforce, and some basic coding skills aren't too far behind. I was fortunate enough to attend a high school that offered a CS class; if it were not for that, I'd likely not be a developer today. Unfortunately, some typical state requirements (do all students really need a full year of world history?) limit the amount of electives kids can take, thus reducing both exposure and depth in certain subjects. Plus, classes have to cater to kids of all learning levels, so more advanced students waste away in non-AP or equivalent classes that cram two months of material into nine. Add in the GPA pressures to get into college, many kids will take the easier routes by avoiding STEM classes where they can.
Tuesday, March 05, 2013 4:15:10 AM UTC
Tried some of the "robot programming" linked above at home tonight. 4yo just wanted to make me clap my hands and spin in circles, but 6yo was focused and delivered "software" that met the requirements of navigating obstacles and picking up a toy. Then they proceeded to write functions involving a few steps ("pick up kid, throw on bed") and give them their own symbols. It was pretty cool.
Scott Isaacs
Tuesday, March 05, 2013 9:31:12 AM UTC
Software engineer who also loves home improvement projects. I fix my own toilet. Heck I built my own bathroom.

I always thought that the mental discipline required for writing software and working with your hands were highly compatible. It always seemed a natural dovetailing of interests to me.
Tuesday, March 05, 2013 10:17:03 AM UTC
Wholeheartedly agree, but I find this topic to be somewhat of a minefield to talk about. Analytical thinking is very natural for the way some people's brains are wired, but apparently painful and annoying for others - so much so that they shut down in anger. I've been burned a couple of times trying to teach analytical thinking and algebra to friends whose brains have different wiring than mine. I'm quite confident that I've been very respectful and gentle in my attempts at teaching and yet I've had friends become offended at me for some reason. I don't know how to overcome that.
Tuesday, March 05, 2013 12:54:18 PM UTC
I think a lot of people have problems understanding how to break problems down into steps, which is a fundamental ability.

I also think that a lot of people don't think theory is important, that they can just forget everything once they leave school.

I once gave code complete to one of the junior developers that didn't have a strong concept of things such as release cycles, testing, code quality etc. He gave it back the day after saying there was a lot of theory and didn't seem to understand why it was so important. He thought he could just copy and paste bits of code from the web and that what a developers did.
Tuesday, March 05, 2013 1:33:25 PM UTC
This topic is very interesting to me. Especially with two young boys (10 & 8) who want to write mods for Minecraft.

While I think this is great, I don't expect them to become great coders per se or write a mod any time soon. I'm a developer but earn most of my money as a manager so they know I could help.

I've been trying to temper their expectations while showing them the basics of coding with Scratch, which I think is good. We also did a simple Windows app to calculate card scores for a scrabble-like game a short time ago. Forced them to think about how it would work, let them do it the long way, showed a couple shortcuts, made them think of their own shortcuts, <insert life lesson here>, etc

Anyway, this was a bit much for the 8 year old but at least they're not bugging me about Minecraft mods lately. :) BUT I hope they bug me again some day soon
Taki Stewart
Tuesday, March 05, 2013 2:16:13 PM UTC
I'm a software developer and I have fixed my washer twice using google
Frederic Nourry
Tuesday, March 05, 2013 2:32:27 PM UTC
Most of the adults I've met that don't code, would be capable of coding if they put some effort into it. Coding can be fun, but it's also work.
Tuesday, March 05, 2013 2:44:29 PM UTC
I'd like to just ask that we stop with the analogy of coding to fixing plumbing because it is inaccurate and far from and apples-to-apples comparison. It also sells what we do short.

If you must, what we as coders do is more like designing and engineering the creation of tankless water heater system or architecting the layout for a commercial plumbing system.

The analogy of unclogging a drain or fixing a toilet is more like connecting your computer to a WiFi network, installing a printer, or removing a computer virus.
Brad Rembielak
Tuesday, March 05, 2013 5:09:28 PM UTC
I think the problem is that schools don't teach math, but teach arithmetic, which is fundamentally different. There's a lot of value placed on doing boring, mindless drills like long multiplication which can be easily done using a calculator. Why waste time doing something a machine can do better and faster? Would you be more impressed with someone who does accounting using a paper ledger or a person using spreadsheet? The educational system is hellbent on mentally beating up learners as part of some sick hazing ritual. Society sees this as a way to enforce mental discipline.

Instead, schools should focus on teaching mathematical reasoning. I've thought about how it could be possible to teach mathematics without numbers, making it vastly easier to get to the core concepts. If I taught algebra, I would use objects such as apples and oranges to represent units. It would be very clear to the student that you can't add oranges to apples, unless you convert them to the same unit (fruit). Using a scale and some divisible objects, I can teach them how to solve equations, making it brain dead easy. Once you've mastered the concepts, you start to introduce variables and numbers.
Tuesday, March 05, 2013 5:38:54 PM UTC
@Jon Schneider
The engineer asked for the root beer in scientific notation used for "float point" numbers. Search "E notation" in Wikipedia.

@Scott Hanselman
Have you read The Camel Has Two Humps?
http://www.johnnybigert.se/docs/programming_test.pdf

I believe you can teach someone how to dilute oil paint, set the canvas, and spread paint on it. But that is far from making a Dali out of them. But they will be able to paint the kids room.

You can teach anyone how to use a computer only because brilliant minds build software to make it easy for them. Software developers purpose in life is to abstract complex tasks for the common folk.

Fixing your toilet is not the same as being able to design a toilet (you need an engineer for that).

Tuesday, March 05, 2013 6:19:53 PM UTC
I've found that there is a high degree of correlation between people who can code and people who can do Math/like math and related fields (elect/mech engineering, physics).

It may well be physiological. The person who is not good at software and/or maths or related fields, might be great at poetry or be a good author or artist.

I wouldn't be surprised if there is already some study on brain physiology that makes such a deduction.
hpcd
Tuesday, March 05, 2013 6:55:04 PM UTC
Brad,

that isn't really correct though. After a day of learning to program, you can create some small utility applications. I highly doubt you'll be designing and engineering a tankless water heater system in a single day.

Architecting a large SaaS application = not for everyone

Designing the water heater system = not for everyone


Developing utility applications = possible with effort/practice

Troubleshooting a faulty toilet = possible with effort/practice


As much as we shouldn't sell programming short, I would also argue we shouldn't sell other trades short. The ones who use the plumbing analogy aren't trying to sell you on designing toilets, but fixing minor issues with one. Likewise, they're not pushing for you to build the next insert_big_service either.

If there is anything where the analogy falls short, it'd be in the aspect of the variety of specialties in programming (games, web applications, OS, etc.) that one might be able to handle one specialization and not one of the others (I couldn't do games. At all.) Programming would probably be easier compared to cooking/baking (pastries, various ethnic foods, etc.) in that respect.
Robert
Wednesday, March 06, 2013 3:38:40 AM UTC
If the average person can learn how to input basic programming logic so they can retrieve data the way they like them or create basic validation on the fly. just think about the powerful and flexible features we can provide them. We won't have to provide them crappy GUI that serve 40%-60% the total use cases they want
Andrew liang
Wednesday, March 06, 2013 7:19:34 AM UTC
I'd agree that there is a high correlation between good programming skills and structured, methodical thinking.

Speaking of which, I put out this some time ago because people keep asking me how to get their kids started on coding: Programmng for kids
Wednesday, March 06, 2013 11:50:11 AM UTC
Think the campaign run by code.org is great. More people should be encouraged to learn development skills.

http://www.youtube.com/watch?v=dU1xS07N-FA
Wednesday, March 06, 2013 9:25:17 PM UTC
I remember back in Uni I was in a number theory course and wasn't doing too great. I managed to salvage a few marks on a proof by brute forcing the solution in C#. It's a very useful skill to have available to you.
Thursday, March 07, 2013 3:09:17 AM UTC
As a BI techie, I love Algorithms. So perhapse Iā€™m biased but defintly support "Reading, Writing, Arithmetic, and Algorithms" Time to chat to my kids school principal. Great blog. All the best James.
Thursday, March 07, 2013 7:32:54 AM UTC
"think in algorithms, think about problems, think about how things fit together" - well said

we are surrounded by code and everybody is coding...
Put some formula in Excel sheet, Bingo!! Now you are a coder.
Sumit
Thursday, March 07, 2013 8:27:32 PM UTC
In the coming zombie apocalypse you should remember a couple things. One, zombies do not generate body heat. It is well established that you head north to an area where zombies will freeze solid and are of no threat. Two, chain mail can be simply created from wire and provides proof against bite related injuries.

Humans > Zombies because we can identify and solve problems we have not previously encountered (the job of engineers).
Sunday, March 10, 2013 12:47:58 PM UTC
I think everybody should write their own operating system to make sure they can use the computer hardware to its best ability. Why pay $$$ to buy a O/S when anybody can make one in a month or so or work?
ramakant
Tuesday, March 12, 2013 10:12:48 AM UTC
I totally understood, you have brushed your teeth and then you find out that the brushing has not done a proper
job. Best Electric Toothbrush Summary. The situation can be worse for the kids as well as for the patient of diabetes.
Wednesday, March 13, 2013 5:54:47 AM UTC
Solving math problems is much like writing algorithms. Exercising kids brains with math will help them in writing code, working out logic, and break up a problem to solve.
Adnan
Sunday, March 17, 2013 10:26:04 PM UTC
I agree with some of the others that the Learn To Code campaign is doing a pretty great job. However, they really shouldn't be pushing schools to introduce coding classes, but rather pushing schools to teach more of the mathematics involved.

High Schools should be focusing on adopting Discrete Mathematics classes or Introduction to Algorithms courses, rather than programming classes. For the same reason that children are taught Algebra and Calculus before learning Physics.
Thursday, June 06, 2013 3:40:20 PM UTC
If you do feel like teaching your kids to program - we have free and open source courseware to do so using Microsoft SmallBasic, Java or C#. First two languages courseware is at www.TeachingKidsProgramming.org, for C#, we wrote a free Pluralsight course at bit.ly/PluralsightTKP
Saturday, September 14, 2013 7:10:27 PM UTC
im not an engineer of any kind, and i admire those who does unthought things, i tried to learn coding many times but i couldnt because i dont have enough time to learn and practice, while i was searching for learning in shortcut i read a qoute which is "programming is not about coding but thinking" at that time i quit learning, instead im going to establish a company with some of my friends who can code ;))
Washaq
Comments are closed.

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.