There’s been a lot of recent initiatives to get kids in public schools to learn how to code on a computer.
President Obama wants to fund new programs to make coding a new pillar of literacy on top of reading, writing and arithmetic. And he plans on backing up his words with a multi billion dollar funding package. He is VERY serious about wanting more kids to enter the field of computer science.
The question running in the back of my mind is SHOULD CODING REALLY BE THE NEW LITERACY?
I think the logical first step in addressing this question is asking what problem is coding literacy attempting to solve?
When I was a kid, the personal computer revolution was in its infancy. Apple introduced the Apple I and Apple II and IBM introduced their first IBM PC system.
Sure big mainframe computers, were around for many decades before the introduction of the personal computer, but personal computers really became the trigger for introducing technology into our everyday lives.
Personal computers, slowly, but steadily began creeping into the workplace environment.
Technology has becomes so entrenched in the workplace, it’s near impossible to find any modern company these days that DOESN’T use technology to help their business run on a day to day basis.
It’s going to be a rare job that won’t require at least some basic familiarity with using a computer.
Now let’s be clear, coding literacy isn’t the end all, be all job skill for anyone entering the job market in the 21st century.
Unfortunately, the way that traditional coding skills have been advertised to people thinking about getting in the field of computer science, has been pretty narrow minded.
The latest rage these days are non traditional coding schools and bootcamps, which promise a nice fat, six figure plus salary plus juicy company perks, after successfully graduating from their 6-12 month bootcamp course, and starting to do software development full time.
Don’t get me wrong. The US Department of Labor is predicting 1.2 million new computer science related jobs by 2020. To fill that many positions, there will need to be a lot more computer science majors entering the field. We, as a nation, need to encourage more kids to consider entering the field.
That said, the heavy emphasis on the actual act of CODING, that is, the process of writing the source code of some programming or scripting language like Java, C++, Javascript or the myriad numbers of available languages out there, seems to be missing the point about what coding is all about.
There is no such thing as coding for coding’s sake (unless of course, you’re just starting out and you’re learning a new programming or scripting language).
The whole reason behind coding is to SOLVE A PROBLEM.
The problem can come in many shapes and forms.
Maybe a product owner is trying to extract some data out of a database, but has no available tools or mechanisms to get that data.
Or there’s some sort of painstaking, time consuming manual process that a business analyst needs to go through to crunch some numbers on a spreadsheet and produce a pretty report for some higher up executives.
Or maybe a project manager wants to take some customer data, which contains geographic information regarding where they purchased the product her company produces, and visualize it on a dynamic digital map.
Before a smart software developer even begins to think about writing a single line of code, they will put lots of mental effort into thinking about the problem statement.
This will include the following:
- Define EXACTLY what the customer’s problem or need is. That includes what the final deliverable should be.
- Define what the overall technical architecture will be involved. What kind of programming language and frameworks will be needed? Will it be a mobile app? A web application? Or some sort of behind the scenes enterprise integration?
- Define the kinds of data structures that will be needed to address and solve the problem. Is a simple array all that’s needed? Or something more complex like a hash map or dictionary object? A double linked list? Or maybe even a custom data structure object?
- Define any necessary algorithms or design patterns necessary to tackle the main problem.
Of course, there are a ton of other things to think about when tackling a new software project.
The actual act of writing the source code, the CODING, should actually be the LAST thing to think about in the software development process.
I’ve learned through the school of hard knocks that jumping immediately into coding, without first thinking about the problem and what is needed to SOLVE the problem, is a classic recipe for disaster.
You end up spending tons of effort going down a wrong path and having to go back and fixing what you wrote.
It shows that CODING isn’t really the most important part of software development.
It’s the COMPUTATIONAL THINKING, that is, the thought process behind trying to solve the main problem.
The core essence of software development is actual PROBLEM SOLVING.
And you don’t need to be a full blown SOFTWARE DEVELOPER to acquire this highly valuable skill!
In fact, many software developers, including myself, LOVE IT, when this kind of analytical thinking has already been taken care of by non software developers. It makes the actual process of CODING a literal walk in the park. Once you’ve learned the nitty gritty SYNTAX of a programming language, then it’s almost like TRANSCRIBING all that analysis into actual source code.
Make no mistake, learning how to code is a valuable skill. And there are many opportunities that await for those who want to get into the field of software development.
But computational thinking, the process of learning how to solve a problem, is just as valuable a skill that many companies and organizations will handsomely reward.