Teaching Kids How to Write Software Code
| | | |

Why I’m Teaching My Kids to Code

I really don’t want any of my children to be a coder for a living.

But I’m teaching all of them to write code.

Here’s why.

My Own Software Development Experience

There was a time in my life when I thought I would spend my next thirty or so years employed in a career, from the time I was in college working as an intern up until my ultimate retirement, that involved writing software at first, then managing a team of software developers.

The coding phase of my career ended up being pretty short-lived.

Here’s how it went down.

When I started college at the age of 21 (I served a two-year volunteer mission in Canada right after high school), I had no real skills to speak of. I spent my childhood up through high school playing sports year-round (football, baseball, basketball, wrestling) and goofing off mostly, not worrying much about how I’d provide for myself and a family later.

My experience as a missionary, more than a thousand miles away from home teaching people about a religion that was hard for most of them to grasp, mostly because they didn’t want to, helped me to grow up quickly. When I returned home from my mission (1997), and it became time for me to educate myself, I received a lot of advice from family and college counselors. Much of it focused on the need to “get good at computers” to become employable in the rapidly accelerating technical economy.

I followed their advice. My first class at Snow College, the school I chose mostly with the aim of playing football initially, was an accelerated pre-semester  introduction to computers course. I struggled, but I liked the challenge. I followed that class up by taking three terms learning how to program in C++. At the end of that freshman school year, I realized that I was a horrible coder, and that it wasn’t very natural for me. My code was sloppy. It took me forever to get things to compile, much less to follow the algorithms required to pass off assignments. But I was persistent. I made my way through the three terms with something like a B+ average.

Then I had some experiences that were almost magical for me. I began to notice that my ability to articulate technical topics had lunged forward. Along with the math and engineering classes I took, this computer science and coding regimen was forcing me to be very disciplined about describing how things worked. The responsibility of modeling what happened in real life with functions and variables that I was taught made their way down ultimately to 1’s and 0’s being fed through a complex system that began at hardware components like a motherboard, a central processor, memory devices, communication buses, and several other supporting pieces that came together with an operating system on which interesting software applications could be developed.

In addition to the excitement I had as a rookie in the software development world, I also found out towards the end of that semester from my professor that my newly developed skills were likely sufficient to help me land a summer job that paid more than double what I’d made in previous job making pizzas at Pizza Hut. He threw out the idea that I should be able to land a job making $12+/hour. “Wow!”, I thought, “I guess you could say things are getting pretty serious.”

I later landed a job as an intern with a technology company called Vinca (later purchased by Legato Systems) that paid $14.60/hour. One of the developers I worked with told me he was making over $70k annually, and he expected to see increases in his pay as he moved into management roles, ultimately expecting to make in the six figures range. Learning about that potential, I thought for sure I’d found my career path.

Turns out I hadn’t.

Trying to Survive BYU’s Electrical Engineering Program

After I finished my two years at Snow College (neither of which, incidentally, involved playing football), I transferred to BYU in Provo, Utah. The natural progression of my Pre-engineering Science major at Snow College combined with my experience writing software in C++ seemed to me to be majoring in electrical engineering at BYU.

BYU Electrical Computer Engineering Lab

That ended up being a really bad choice.

My first two semesters as a EE major at BYU involved struggling to push my way through 17.5 credit hours of engineering classes that included complicated electronic circuit theory, advanced multi-variable calculus and linear algebra math, writing programs in assembly language code, and a seemingly never-ending half-credit breadboarding lab in which I found myself (as a color blind knucklehead) unable to figure out the difference between resistors that varied by magnitudes of tens of thousands of ohms. It didn’t help that the teacher assistant for that lab couldn’t EVER be bothered to get up from his video game to help a newbie like me.

Combine that workload with a nagging feeling that I should be dating (looking for a potential spouse, which was a strong religious and cultural priority for me) and the twenty or more hours I put into my programming job each week, and it’s easy to see why I experienced burnout. My excitement at becoming the next technical genius haling from BYU turned into a struggle for survival.

Ever Caught a Football Before?

As I’d attempted to hang on my fellow classmates, trying to see if just associating with them while they worked together on their homework in the commons area of the Clyde Building, I repeatedly found myself not really fitting in socially. Almost none of these people knew anything about college football, the Atlanta Braves or Boston Red Sox, or any other thing I considered to be cool. Every time I heard someone say, “You can’t spell gEEk without double E”, (which was pretty much every day) it made me reconsider who I was being expected to become. This technical persona simply didn’t match very well with who I was.

The culminating experience that made me realize I was not a fit culturally for this group of people came one morning in my ECEN 220 Electrical Circuits Analysis class. Our professor would draw up a circuit on the whiteboard, then ask if someone wanted to come and solve the problem on the board, the reward being a prize.

I watched as this goofy kid confidently (I learned that there is a nerd “swagger” that kind of parallels what good athletes manifest) walked up to the board, ran through some calculations for inductance, capacitance, and resistance using partial derivatives and other math, then ultimately arrived at a solution. The professor asked the class for approval of the student’s ultimate solution (a few steps behind what was happening, I was like, “Yah, looks good to me.”), then moved on with the prize portion of the contest.

He pulled out a little BYU-branded football, the kind they give away as promotions during games, and threw it across the room to this student. What happened next was surprising to me. This guy awkwardly lunged at the ball with some of the worst timing and least coordination I’ve ever seen. The ball went off his fingertips and up in the air, towards the second row of students. Not willing to give up (in a non-athletic kind of way this guy was apparently a fighter), he dove awkwardly into the second row of students, still far from being successful at catching it. His persistence made it seem like he thought that not catching the football was make his work null and void.

I remember thinking to myself, “Wow! This guy has never in his life had a ball thrown in his direction before. Unbelievable!”

It was then that I began to seriously question what I was doing planning a career that would put me right in the middle of that crowd of people, most of whom simply had a much different take on what was fun and interesting in life than I had.

Shortly thereafter my ambitions to become a software developing electrical engineer ended. I remember receiving a test score back from the first major mid-term test from that electronics circuit theory class. I knew I hadn’t prepared well for the test, but I didn’t expect the humiliation that naturally came when I was handed back a test paper that had more correction marks on it than my initial incoherent chicken scratch attempts to solve the problems on the test. My test score: 39%/F-. I immediately got up from my seat and wandered over to the counselor office to discuss how to transfer out of that major.

After ultimately deciding to leave electrical engineering, I went through a list of other degrees I could achieve to satisfy what I thought at the time were my family’s, potential employers’, and society’s unwavering expectations about education. That list included everything from sports coaching to math to a simple online general studies degree. Ultimately I ended up graduating with a BS degree in Manufacturing Engineering Technology with a minor in Business Management. Obtaining that degree took more time and effort than I would have liked, and I ended up having to negotiate my last 30 or so required credit hours with the department heads, convincing them on my third time trying to substitute some engineering classes I took at Snow College for the civil engineering classes I’d missed from BYU.

My last experience writing code full-time was a job I held as the lead developer for a text messaging application startup called Communitect (now Solution Reach). I wrote a significant chunk of the company’s initial codebase in Java in 2001, before calling it quits to ultimately move into the world of entrepreneurship, where I’ve been ever since.

Writing Code Isn’t For Everyone

My experience attempting to become a coder certainly wasn’t a write-off. If I had any reason to think that it was, I wouldn’t be teaching my kids how to do programming.

One thing I have learned from that experience is this: while software development can be a lucrative career, writing code (and similar technical disciplines) certainly isn’t for everyone. In fact, based on my experience as a developer and working with software developers since that time in various roles, I can see that there is a very distinct personality required to be successful at software development.

Much of this I’m going to be speaking in terms of stereotypes, but this description of the typical software developer is not without some data and experience backing it. Many people refer to the software developer personality as INTJ (Introvert – Intuitive Thinking – Judgment) using the Meyers-Briggs personality scale. The brains of software developers typically work quite a bit different from the rest of society. They are typically chronic problem solvers, a strength that allows them to develop complicated software to follow algorithms and solve complex problems, but that also reduces their abilities and inclinations towards other things, like interacting with people in what would be considered by most of society as “normal” or healthy environments, or doing other socially involved or physically demanding activities, like playing sports.

While some part of my personality craves the problem solving elements of being a software developer, that attribute takes a back seat to my natural tendency to want to interact often with people while not looking at a computer screen and my lifelong pursuit of sports and athletic involvement. From my experience, the persona of an athlete or someone who’s heavily involved in sports doesn’t much overlap with the persona of someone who spends his entire day writing and troubleshooting code.

As I guide my kids through the process of discovering who and what they want to become, I am fairly convinced already that spending their full-time careers interacting being fully involved in the community that comprises coders and related professionals won’t be nearly as fulfilling for them as lots of other alternatives.

Speaking about the social implications, I certainly don’t want my kids ever playing networked video games all night long, living in my basement, unmarried, and unmotivated to be more involved in real life social activities. Nor do I want them to think that because they can think faster and solve an algorithm more quickly than most of their peers that they can’t listen to feedback or feel like they know everything there is to know. I especially don’t want them inclined to reason away their belief in God because faith becomes something irrational for them. Coders have done a lot to earn each of those stereotypes.

But I do want them to have a grasp of the fundamentals of software development.

To accomplish that objective, I had my wife pick up a couple of coding books for kids – Coder Academy, which reviews the fundamentals of software development, and Coding for Beginners Using Python, which teaches kids to code using a programming language that has found a way to be relevant over almost three decades, and which appears to be positioned to be a highly useful language to know going forward – that we’ll be using over the next few months. Once we’re finished going through these beginner books, I’ll continue to help my kids write software for educational and hobby purposes.

How Learning to Code Helps Non-Coders

When I entered college more than two decades ago, my skill set consisted mostly of tackling people, hitting, catching, and throwing baseballs, and some sweet hip hop dance moves. As I mentioned, I quickly figured out that those “skills” wouldn’t cut it when it came to making money and supporting a family.

Fortunately for me, rather than having my first few semesters of college be filled with soft classes like English (the language I already spoke), history, etc. I found myself learning computer science along with civil, mechanical, and electrical engineering and math topics. That experience completely transformed the way I think.

I learned how to be precise as opposed to being sloppy in the way I described things. In my associations with up-and-coming coders (many of whom wondered why I even bothered to take the classes they were taking), I learned how to become very observant of how things worked as we did our best to model real life things using a programming language. I became much more perceptive of cause and effect relationships. I also became much more of a critical thinker. In fact, my brain was transformed (of necessity) to be able to a find missing semicolon among hundreds of lines of code, which now allows me to find misspellings in a 1,000+ word document within a few seconds of seeing the text.

In summary, learning how to code forces a person’s mind to think a lot like the way a computer thinks, which turns out to be pretty helpful in the 21st Century economy.

The majority of high-paying professions in our current economy require a person to have a solid background in technology. They must understand more about context when it comes to using spreadsheets, understanding how apps work, knowing the ins and outs of the relationship between software and the hardware that makes use of it. Not only that, the most successful need to be armed with the ability to not just regurgitate information (just about the only thing our public schools tend to teach these days), but to figure out new things using their intelligence.

The process of learning to code tends to instill that kind of intelligence among those who have been exposed to the discipline.

With the prevalence of software-related careers, it’s true that there is a higher percentage of software developers who are breaking the traditional mold of the 1980s software geek. In my own career, I’ve seen how a background in software development has uncovered steps for me as an ecommerce business owner to climb to be more successful in my career. I’ve seen how understanding how software is written has given me a better approach to teach Google’s search engine how to send traffic to my websites and how to extract traffic to my Amazon stores from the Amazon search algorithm. The learning process that led to me knowing how to code has been a blessing for me financially, mentally, and even socially in many ways.

I don’t want to code all day long. But I’ve found a pretty good balance for myself between knowing the basics of software development and even understanding how to write software and being able to operate businesses that make use of software written by other people. Although I chose not to make a career out of writing code, knowing how to has been highly beneficial for me.

I want the same thing for my kids.

Similar Posts