The Coders of tomorrow ! (or coding is a skill, not a game)

I find it interesting when I see efforts to encourage the students of today to learn how to code. Yes, learning to code is an important skill which should be taught in school. In the same way we all learn how to read in school, so too learning to code is a beneficial skill to teach. There is one problem though. Coding isn’t a game, it is a skill. Simply put, coding is work and anyone who suggests otherwise is not being fair to those interested in learning it.

A a programmer myself, who develops tools for other programmers, I have a unique perspective about this. I don’t just write code, I develop tools which other programmers depend upon and I regularly deal with their challenges as well. So from my own experience, let me share with you some of my observations about coding today and what it takes to be able to produce valuable software.

Early start in coding

I started learning how to code back in 1975, in my senior year of high school. Back then we didn’t have desktop PC’s , smart phones or tablets. There was no official classes on programming either. My exposure to programming started in an advanced math class. Our teacher gave us access to a local colleges main frame computer via a teletype style device where we could enter code and run it. We learned BASIC, which was easy to learn. That exposure to programming would later come in handy, when I went to college at Worcester Polytechnic Institute (WPI) ( http://www.wpi.edu/ ) where I took a Fortran class. First I started coding on punch cards and later on work station (monitor/keyboard). They later tried to teach me Lisp, but I didn’t like the language very much. Since I was paying for my own schooling, I decided to leave college when I had some personal issues to deal with. Amazingly, I never went back. But the short time I was their, my exposure to programming would later in come in handy. Then in the early 1980’s the home computer became popular and I got myself a TI-994A computer and started really learning how to code. I found some other computers clearanced at the local department store and bought myself a couple Atari 400’s and advertised in the local paper that I would teach classes on programming for anyone interested. I taught a few classes and in the process it led to me getting some consulting work at a local manufacturing plant, writing software which interfaced  with a machine in the plant which tested valves for heat pumps and downloaded the data to a computer running CPM. I wrote the software in BASIC and some machine language. The software would do statistical analysis of the test data and print out bar charts for the quality control engineer.

I later bought a Commodore 64 and learned 6502 machine language and wrote my own compiler. By this time I was using a BASIC language compiler, rather than interpreted BASIC. I wrote a fun family friendly video game which I sold to Compute Gazette magazine and it was published. At this time the IBM PC’s were starting to become the primary business computers, rather than CPM, so I sold all my computers just so I could afford to buy a users Blue Chip brand IBM compatible PC.  I moved to Microsoft Quick Basic 4.0 and never looked back. Over the years I wrote software for a variety of local businesses, including video rental stores, auto repair shops, sheriffs dept., manufacturing, custom machine shop, PBX software for Dupont, furnature store, building supply store and more.

I learned as I went along. I read books to learn more about programming. I learned some x86 assembler language as well. Some of my early software projects from the early 1990’s are still in use even today. Over the years my programming languages went from QuickBasic, to PDS 7.1, to Visual Basic and in recent years PowerBasic. I have dabbled with a number of other languages such as C (never liked it), GFA Basic, CA Realizer and others. Today my software tools, used by other programmers, are being used to develop software for major industries and businesses. One of my favoriate examples is this company ( http://www.fathomsystems.co.uk/ ) , Fathom Systems. They are using my programming tools to develop some important software which controls the hardware they build for a variety of underwater devices (ROV’s). They sent me a link to a video ( http://www.youtube.com/watch?v=D9fvdfE59_Y )by one of their clients, Chevron, where at about 4 minutes and 33 seconds into the video when you see a laptop with the control software which helps run their amazing underwater repair system, that software was written by my customer using my software as the backend (GUI engine). It is exciting to see my software doing some important real world work.

So I can honestly say that I understand how important software is and the kinds of real work it must accomplish. We definitely do need quality coders to build such software. Educating young people how to write such software is a valuable skill to learn. But there is one problem here.

Coding is a skill, not a game !

To encourage young people to learn how to code, by giving them the impression is is fun, a game and that anyone can do it, is simply false. Coding is real work. Coding is a skill. Coding requires years of learning to do it well. In some ways, coding is even an art form. When I look at examples of so called “learn to code, by having fun” programming languages, a few things become apparent. First, they aren’t programming languages. They are more like games which let you define a few logic parameters and get immediate feedback. The old time interpretted BASIC’s of the 1980’s were closer to real programming than many of the so called kid oriented programming languages of today.

Second, there is a big difference between coding and app development. Even in the early years, this divide was obvious. Some coded applications, while others used higher level RAD tools to develop software. While the end results (building software) are similar, the skill sets for each are totally different. Sadly, even in the real programming world, software development has become more of a “drag and drop” environment, than real coding. For all the high level drag and drop environments being used today, behind the scenes someone still has to write good old code. Code generators, visual designers and prebuilt components make software development faster, for sure, but at times you still need someone who can write some down and dirty code. Yes, like when I worked on the farm, some times you have get your hand dirty (meaning for programmers, writing real code).

What is not talked about a lot today, is the sorry state of a lot of software. How many software projects in big companies fail today to even get finished ? How much of our software today is full of bugs ? And don’t think the big companies don’t have this problem. They do. What is often not talked about is the need for quality software, reliable software, bug free software. Yes, learning how to debug software is an art form and it is not an easy thing to learn.

Low level coding often requires good math skills. I first learn about programming in an advanced math class, which in my opinion is a good place to teach it. Coding is often an expression of mathematic logic.  In my own case, math was one of my strong skills as a youth and it has served me well in programming. Obviously young people today often have poor math skills. Just go to the local store and when the cash register (a computer) doesn’t do something for the cashier properly and see what happens when the cashier has to manually calculate something. I at times go to a building supply store and the cash register does not have the reduced price for an item which was suppose to be clearanced. The sign said 50% off (or sometimes 75%) and when the cashier was forced to mentally calculate the correct price, they often are stumped. I can do most of these calculations in my head. Why ? Because I was taught math well in school and it has stayed with me.

Programming requires some very serious skills. Good math background. Good logic skills. Especially good debugging skills. If software is not reliable, simply put, it is useless. Some serious work is being done by software today and it can ill afford to be buggy. In some cases, peoples lives may depend upon the software being 100% reliable. That is not a game in my opinion. Businesses may fail because the software they use fails. Again, not a game in my opinion.

To give kids the idea that programming is fun and a game passes on the wrong idea. True, one wants to encourage students to learn programming. But it can still be done in a way which sends the right message. The joy from programming does not come from it being a game or somehow fun, but from the satisfaction of a job well done.

Teach the right skills

So what makes a good programmer ?

Surprisingly some of the same skills which make a good mechanic, a good carpenter, a doctor or even a good farmer. For one, like many other trades one needs to keep up to date with the latest techniques, so learning how to read well and develop good comprehension skills (one can be able to read seemingly well, but still have poor comprehension skills) is important. In a YouTube world, sadly reading is at an all time low for the young. Second, math skills do make a difference. You don’t have to know calculus to program, but you should know basic algebra well. Third, logic skills are vital to be a good programmer, especially when it comes to debugging. But logic skills are not simply learning how to define the movements of a turtle in a turtle graphics like child oriented “so called” programming learning app. Logic is a matter of knowing how to examine details for patterns, looking for unobvious (in the case of software bugs). As an experienced programmer, I like to compare it to being like Sherlock Holmes. This fiction character demonstrates how one looks for patterns where others see nothing unusual. Debugging software is actually very similar. While many programmers today may wish that all debugging could be automated (meaning let the programming language find all the bugs for you), the real fact is that debugging requires very human logic skills, which are far superior to what a computer can do.

Good programming requires one be meticulous for details. I know , sometimes most people get frustrated with people like us, so meticulous. But with programming it is vital. Details matter. One small error in code, could make the difference between life and death. Really ! Our cars are now run by computers, but what would happen if one wrong calculation causes a car to do something dangerous ? No laughing matter. No game here.

Learning to code is not all that different than learning in wood shop in school. What ? Absolutely ! How I remember, being told how serious a matter it was to use a table saw or any other dangerous tool. One could easily lose a finger or a hand by being careless. While in the programmers case, he often is not the one who can be hurt by his bad software, but the end users though could be in just as serious a situation. Imagine writing accounting software, which tended to miscalculate its totals. Sounds like a business may be in for a rude awakening.

Its not all about apps

Today, with all the talk about mobile, everyone wants to build apps. The truth is though, that most apps for mobile devices are simply time wasters or useless. Some have value, but may do little work. What few may realize though, is that a huge amount of real work is getting done behind the scenes, because of software and it has little to do with apps. Businesses use accounting software. Warehouses use software to keep track of things. Manufacturing uses software to run machines, to design products, to do real work. There is a lot of important software that needs to be written today and students in school need to be taught the real world skills necessary to do this work.

Its not about getting rich

If the young view programming as the way to riches, then again they are being misled. True, some do make a lot of money. Some make a splash in the world (in water, a splash looks big and exciting but has little real value). But if one is motivated simply by the idea of making a lot of money, then you won’t get the kind of programmers needed. Why ? Aside from the moral issues, even from a practical point of view, coding is hard work and it requires someone who cares about the end results more than his paycheck. Companies may be in a hurry to get a software product to market, but if they do so befire it is really ready simply to make money, in the long run it does more damage than good. In some cases, serious aspects of peoples lives are affected by software. Just driving your car makes you affected. It is running software and your life depends upon it doings it job right. You surely don’t want your bank to be using poor software when it comes keeping track of your money and your credit. Often, when it comes to quality software, it comes down to hard work, good coders who do their job right.

Teach programming the way we use to teach other trades

While I appreciate teachers, really, when it comes to programming, I am not sure most teachers are well equipped to teach programming, even at the college level. Why ? In the old days, many trades were taught by a master tradesman who would teach his apprentice, doing real work in a real world situation. If a young person wants to know what programming is all about, then seek out those who really know how to code, who do it in the real world. Learn the real challenges they face. When you start writing real code, don’t simply do it for fun, but doing something practical with it. Making a little animated graphic character move on a screen may sound interesting and fun, but do something more meaningful. Learn to use a little bit of math in your code. For example, how would you code the drawing of rectangles or lines to create a simple grid (say to print out your own custom grid paper) ? You need a loop. You need to calculate multiple positions or coordinates by incrementation. A simple task, but much more meaningful than coding an animated characters movements with simple, “move left”, “move right” commands. Thats not programming !

Good coding is often a lot of mundane work. In wood working, one starts out by building simple things like a wood box or something. Then you later move to hard objects. In learning coding it should be the same. Givng a student a pseudo programming language, which is really a high end graphics engine so they with just a few commands can animate a character like they worked for Disney is not programming. It is not coding ! That is playing with a high end animation game engine which does all the work for you. Coding is much more mundane than that at times. It is like the wood worker building his first box with hand tools. Not exciting, but still useful and a stepping stone to bigger things.

Students should be taught real world skills which have far greater value in the long run. I am a coder and a decent one at that, but many of the skills I use in coding I also use in doing work on my car (I have even rebuilt an engine), in remodeling my home (from doing tile work, building stairs, building cabinets, doing electric work) and more. Knowing how to read well is vital. Knowing how to do research is important. Having good logic skills is critical. Knowing how to follow directions carefully is priceless. And all of these skills are something one can learn, even if never exposed to coding at all. They also make better coders too. They also make better mechanics too. Also better carpenters too.