My nine year-old son and I enjoy listening to Bird Note
, our local NPR
affiliate. He and I sit patiently in the school parking lot waiting for 8:58 AM when we hear the announcement "and now time for Bird Note" signaling the start of the show. I think he loves hearing the bird sounds most of all. I love spending a few minutes together listening and laughing sometimes at the strange bird noises. The school bell usually rings right at the end of Bird Note and he opens the door, saying a quick goodbye, and runs off to class.
This morning as we sat there watching the rain fall on the wind shield, waiting for Bird Note, a story about code.org
came on. You can listen to the story here
. I'd read about code.org on Digg.com
a couple of days ago. The NPR story got me thinking. Would my kids ever really have the opportunity to learn programming the way I did when I was their age?
Most kids of my generation were exposed to computers for the first time in middle school or maybe high school. My high school had about a dozen Apple IIe's
and a few Apple IIc's
in the computer programming class. I took quite a few classes in high school learning to program in Basic on an Apple IIe. I was also fortunate because my parents indulged my seemingly endless interest in computers by purchasing a Commodore 128
, the successor to the wildly popular Commodore 64
. I spent many an afternoon in the basement typing in code I found in the latest BYTE magazine or some other computer hobbyist publication. We didn't have the Internet back then so we had to go to the bookstore and find a magazine with code examples to try out. Eventually I learned enough to write my own code. I remember writing my first database application. I used it to track the number of miles I ran each day. I was also into running 10K races with my dad at the time. It's funny to think now, but the program saved data to a 5 1/4 inch floppy disk. Every time I entered a new record to the database I could see the disk drive light flash and hear the mechanisms inside spin up. There was a very clear and definite connection between all these parts of the machine. Most importantly, I felt incredibly empowered by my ability to command this machine to do what I programmed.
In the early days of personal computing every computer came with some flavor of Basic installed. In fact, it was all but assumed that you would use the computer to do some level of programming. When you turned the machine on you were presented with a little flashing box or line. You could type a command, such as "load" or you could start programming right there, immediately.
At some point, I would guess around the time of the Windows 1.0 graphical user interface, computers stopped being shipped with this very "basic" assumption. The machine became a tool to accomplish work and the idea that you would use it for programming began to fade. Of course you could purchase Basic or some other programming language such as Delphi or heaven forbid C or C++, but they weren't bundled with the machine. I think that's a shame.
My kids know how to use a computer proficiently. I would say they know their way around Windows and OS X. But using a computer is not the same as programming one. And it's no simple task getting the computer setup to program. I think code.org attempts to solve this problem. There's a very simple interface on the website for entering code and seeing the result immediately. It gets very close to those early days of the blinking command prompt. This is a good start. It's a way to engage kids in learning that the computer can do more than play games or videos.
Why does this matter? Do we need more kids learning to program? Yes! Absolutely!
According to data at code.org there will be 1.4 million new jobs requiring coding experience by 2020. The value of these jobs in terms of salary is over $500 billion ($500,000,000,000). That's a lot of zeros. It's half a trillion dollars in potential personal income that we as a country need. We need these jobs to stay here in the US. These are good quality high paying jobs. Interesting jobs.
There's more at stake than the 1.4 million computer jobs. The skills required to program are skills that we as compensation professionals can leverage in our everyday work.
What's important is that our future generations understand that they have the power to harness the computer to accomplish cool and amazing, not to mention useful things.
To illustrate my point, let me explain a couple of key programming concepts: conditional statements
A conditional statement checks the value of a data element and performs an action based on the data value.
Here's an example:
A = 34,000
B = 35,000
If A is less than B then
Do one thing
Do another thing
Very simple. It's just seeing if A is less than B and doing something based on that.
Why would we need to know how to do this in compensation analysis?
The screen snippet below shows a small sample analysis checking to determine if an employee's actual salary is below the range minimum.
The formula in cell C2 compares the values in A2 and B2. If the salary is less than the minimum then it shows the amount below minimum, otherwise it just shows a blank cell. At a very fundamental level, this formula is a form of programming! And of course we can make much more elaborate formulas that begin to really look like programming code.
Iteration is the process of repeating a bit of code until some condition is met. For example, here's some programming code to determine how many years it will take for an employee's salary to reach midpoint.
StartingSalary = 35,000
Midpoint = 40,000
MeritIncreasePercent = 3.5%
RangeIncreasePercent = 2.0%
NewSalary = StartingSalary
CountOfYears = 0
Do While NewSalary is less than Midpoint
NewSalary = NewSalary plus MeritIncreasePercent
Midpoint = Midpoint plus RangeIncreasePercent
CountOfYears = CountOfYears + 1
The CountOfYears is increased by 1 each time the NewSalary is less than the Midpoint. This little bit of incrementing will continue until the NewSalary is greater than the Midpoint. But we can do the same exact thing in Excel and it's a bit easier to see and understand.
Here's a simple example of iteration in an Excel analysis of compensation. This is another type of programming (click image to enlarge).
So here's the bottom line. It's not important if the kids today learn to program in some specific language or on some specific device. What's important is that the kids of today learn the concepts of programming. That they feel empowered to use their minds and their creativity to solve problems. It's within their reach. The technology we have today is amazing and it continues to become even more amazing. We need our future generations to harness this amazing technology to keep us competitive as a nation in the new world economy.