Adventures in code and computation.

On Not Giving Up Programming

I received a warm shout out from a friend of mine in his recent blog post which got me thinking about my own programming journey: both where I’m at now, and where I want to be in the future, and how I’ve managed to stay on the path to becoming a programmer despite many ups and downs along the way.

I first remember wanting to code in the “modern” PC context: in those days Windows 3.x, layered on top of DOS 6.x, ruled the day, and I noticed that certain kinds of files (notably .exe files) could be executed. Those were programs. I recognized the difference between the data I made or consumed using programs, and the programs themselves which could process, generate, and work with data. I wanted to be able to make such programs. My first attempts at programming in those days involved my trying to get QBasic to execute code I found in books at the library. Unfortunately the books from my local small town library did not teach one how to program in QBasic, but rather other dialects. I wasn’t able to get very far with those books, and I didn’t have the foresight (nor the background) at the time to really make better use of QBasic’s built in documentation. That was perhaps my first real setback: a lack of instruction.

One of my main motivations to program was to write video games. I wanted to code a cutting edge 3D video game right then and there, and I wasn’t willing to do the back breaking work of taking it one step at a time. I could have: eventually I figured out I needed a compiled language like C++ to get anywhere with the computers of that day (particularly for game development on DOS or Windows), and I acquired several appropriate books on the topic. But books unread, and exercises never completed, do not a programmer make. So my second major setback was my own impatience and laziness. Nevertheless, I dreamed of making games. Though dreams without actions don’t come true, those dreams did keep the desire to become a programmer alive within me even when I was being lazy about doing the actual work. And because of those dreams I met one of my very best friends who remains to me one of the best programmers I know. He taught me much, most of all to keep going even when progress was slow.

With time I discovered value in programming beyond writing games, and though writing video games (now with my own children) is still a goal of mine, I went on to become a programmer focusing on different areas. After beginning to work professionally with technology as a computer technician, I had a boss who was very supportive of my ambitions in writing programs. He allowed me to work on MS Access database applications and introduced me to Perl and PHP, encouraging me to study them so I could help push the organization’s utilization of technology forward. He also taught me a great many things about technical support and customer service that I have held with me to this day. He was my first real technology mentor, and I owe him a great debt for accepting me into the fold of technologists and being so free with his knowledge and encouragement (Tom L., that’s you, if you ever find this).

Around that I time I also discovered Python from Leo Laporte while watching TechTV and started experimenting with it. Those were days during the first dot-com bubble, so web development was a hot thing. (Though it’s even hotter these days; perhaps the bubble is even bigger this time?) So I kept working with dynamic scripting languages like PHP and Python, and even Perl when I got the chance, and tried to work programming into my current jobs however I could. I also taught myself HTML and CSS and began making websites by hand for fun and for my employer. It wasn’t always easy, and eventually I was discouraged from spending too much time programming instead of other duties. That discouragement was perhaps appropriate within its context, but it also was my third major setback: I realized I was in a position where I could not truly realize my passion as a programmer and many others around me did not understand that passion. It took a while for me to recover and try again.

But try again I did. I worked to balance my passion with my core duties, while doing as much programming-related work as I could justify, and eventually I got my big break when I was given the opportunity to code full time for my then current supervisor. (George S.: I will always be grateful to you for giving me that opportunity.) And code I did: I wrote custom PHP apps, developed a WordPress-powered information clearinghouse, and finally moved on to using Django and Python to develop a strategic planning application. I also received guidance from a counterpart I had in a different area of the organization. He and I remain friends to this day. His advice and encouragement, as I tried for the first time to be a professional programmer, was (and remains) invaluable to me.

Through it all I have not given up on my life long dream of becoming a programmer. If I have any regrets in my journey so far it’s that I wasted too much time doing nothing to really further my goals when I was younger. But it’s better to move forward, regardless of past mistakes, than to give up your dream. If you, dear reader, are someone who yearns to write software, even if you’ve experienced setbacks in your journey so far, I have three suggestions that I hope will be an encouragement:

First, and the most important, is this: never give up. No matter how frustrating things seem at times, no matter how discouraging those around you may be about your dream, don’t give it up. (But do do the job you’re getting paid to do first.) Code as much as you can, and don’t feel guilty about it. Find ways to contribute code to those who need it, and don’t stop coding. Or as another blogger put it, “always be coding”. You can’t write good code without going through the process of writing some bad code first. Better to write code and learn from the process, letting that fuel your efforts to improve your craft, than to write no code at all. But if you wait for perfection before starting to code, you will never start and therefore will never improve.

Second, find people who are willing to mentor you in your dreams and passions: programmers who’ve gone before you to the higher ground you’re aiming to reach. Hubris may be one of the tongue-in-cheek cardinal virtues of a programmer, but foolish pride will destroy you. Be willing learn from others. And along the same lines, freely share what you yourself know with those not quite as far along as you in their coding journey. When we freely receive as well as freely share our knowledge and experience we are all enriched in the process.

And finally, do the work you need to do to learn. There are an abundance of resources around you online and in your library, and many people willing to share what they know. Learn, but also apply. You must not just read, but read and try to put in practice what you think you’ve learned. There is no better way that I’ve found to really test, and enhance, your knowledge on something computer-related than to try it out; there’s no quicker way to clarify something that is confusing you than to just give it a shot. Yet you can’t practice what you don’t know, so it takes (in my experience) both seeking out and consuming the learning resources, as well as experimenting with the concepts you find.

I am still trying to put in practice all that advice myself, and I’m far from there. As for my own learning adventure, I have been learning from those around me with greater skill than myself; if not for my friend and tech mentor’s help, and the help of all the mentors who have come before, I would not be nearly as far along professionally as I am now. And yet I have a long way to go. I don’t expect to ever “arrive”, for the industry is constantly changing and very fast paced. But my near future ambitions are to develop serious projects I can proudly show off on my GitHub profile, starting with a project called Taskelot. With that and other upcoming projects I hope to really hone in some existing skills and develop new ones.

I’m making progress in this learning adventure, and so can you! I hope you will follow along as I continue my adventure to learn and apply computer programming. Perhaps you’ll learning something new, but perhaps also you’ll be able to teach me something new. Here’s to both!