saw.gif I have read quite a few posts recently on the lack of quality programmers, web or otherwise, available in the current market. I’ve even written a post myself on some of the “differences” in the technology stack between now and when I started programming professionally just four years ago. Some people are saying we need to encourage children to become programmers, others are questioning the languages that are taught in schools, still others are criticizing the things that are not taught (or encouraged) during secondary education. I’m going to question how things are taught.

I spent my first year of college at RIT, not to downplay my last three years at Muhlenberg, but everything I really needed to learn I learned in three quarters at RIT. Computer Science 101-103 had labs in a Sun Unix lab. We wrote Java code using Emacs from a shell. We compiled it from that shell. We checked it into RCS from that shell. We ran diffs from that shell. We submitted our completed assignments from that shell. We loved that shell, whether we wanted to or not.

We did not have an IDE, not in today’s sense anyway; there was no code complete, re-factoring tools, or visual SCM merging tools. In the process we learned Unix, we learned how to grep, how to use sed and awk, telnet, ssh, and command line ftp. We learned how the internet worked by first learning how a network worked. We learned to write code, use a computer, and use the internet with the functional equivalent of hand tools. In the process we learned and understood how and why it all fit together.

As a matter of illustration, I’m reminded of the Home Improvement television show that was on when I was a kid. In it, Tim Allen plays Tim Taylor, the host of a cable TV tool show called Tool Time. He has an assistant, Al Borland, played by Richard Karn. On the show, Tim’s motto is “more power,” which usually leads him to the biggest Binford Tools power tools, disastrous projects, and eventually the emergency room. Al, on the other hand, is more of a renaissance man, appreciating the beauty, elegance, and simplicity of hand tools and the wood they’re used on. Although I don’t think it was ever stated, Al never ended up in the emergency room. Which character would you hire to work on your house?

But I digress, we’re seeing more and more computer science grads who have worked only on Windows. They’ve used Eclipse and Visual Studio. They know how to use the very basic IDE functionality with the mouse and they live and die by ctrl+c and ctrl+v. They were given power tools in the very beginning of their careers and now quite a few of them have figuratively managed to cut their fingers off. They’re crippled programmers because the “more power,” here’s-a-monsterous-power-tool-that-does-everything-you’ll-ever-need-really-fast attitude has physically removed their ability to operate the simple tools that solve their problems in an elegant manner. They’re afraid of the shell because they don’t know how to use it, but they’re not afraid of the IDE because it has a big, shiny button that promises to make their life easier if they press it. Power tools in the real world have warnings about loss of life and limb if operated incorrectly. Sadly, power tools in the digital world do not.

So, I propose my solution. Bring the hand tools back into the classroom. Eliminate IDE’s from the educational system. Teach students to use the shell, and with it the tools of our hacker forefathers. Let them nick their fingers with a hand saw instead of cutting them off with a circular saw. Encourage them to use open source. Encourage them to contribute to open source. The web in general runs on it, they should know how it gets made, and know how to give back to the community that has made a large part of their future pay possible. Teach them Emacs or Vi. Give them cvs, svn, or git, and teach them to read a diff. Make them create a website and share what they’re learning, or at least participate in the forums of some pet open source project.
Do them a favor and scare the ones who aren’t meant to be doing this out of the profession. If they don’t have the passion to persevere they need to find something else to do. Ladies and gentlemen of academia, I ask you for one thing. Stop manufacturing cookie-cutter, power-tool graduates and start nurturing artesian, master programmers.

Thank you. If you need me I’ll be uninstalling Eclipse.

Comments

  1. Eric Wendelin:

    I think your solution is perfect and if I'm ever teaching in this decade or the next I will likely force my students to use the CL. There is a certain sort of understanding you acquire when you do things this way.

    June 17, 2008 9:43 am

  2. Chris Hall:

    The right tools make a developer more productive. Providing shortcuts, automating repetitive tasks, and hiding all of the little nuts and bolts lets them concentrate on getting things done. And that's what it's all about.

    Unfortunately, tools are often used as a crutch.

    If you're in the field long enough, you'll run into situations where your standard tool set isn't available. Maybe you need to make a quick template tweak on a live server, or work on-site as part of a client's team using a tool set you've never seen before. How you handle that is what separates "good" from "good enough".

    June 18, 2008 6:47 am

  3. James E. Ervin:

    Don't worry about uninstalling Eclipse, it will be there for you when you grow up kid. ;)

    First off I want to preface my comments, you were a kid when Home Improvement was on the air and yet you are pontificating like an experienced developer?? Whew, I need a moment to sit down and catch my breath, I don't like where that is going.

    Still I don't disagree with your general point. I think it would be better stated as your best power tool is still the one between your ears and not on your desktop. The problem is not the power tool per se, the trouble is that there are people now that do not understand the reason for the power tool. I agree with you that people starting out need to get it from the basic level. I still think that my training as a Computer Engineer serves me well writing software. I started out with logic design, chip design, and began programming from the assembly language level up. This education gave me an understanding of how computers actually work and then my exposure to various Unix distributions showed me how an operating system should work. Perhaps the way forward is to stop hiring CS grads?? *Duck*

    In defense of the power tool, Home Improvement was a good comedy, but you are perhaps too young to remember what it was based on. Home Improvement really was a parody of the old "This Old House" program on PBS. Tim is Bob Villa and Al is Norm. The reason why I mention this is that if you ever watch Norm's "New Yankee Workshop" on PBS you will notice two distinct things. First, Norm is an extremely skilled craftsman. Two, Norm, the real life Al, uses all kinds of Power Tools.

    June 18, 2008 8:16 am

  4. admin:

    @James,

    Ouch. ;)

    Why do you assume that because I was a "kid" when Home Improvement was on I am not an experienced developer? I grew up on the web and writing software. While I may only have 4-years post-college experience I've been doing web development professionally for 12, which in this industry's case is damn near forever.

    But pontificating aside, I might have lost part of my point, which thankfully you have pointed out. Norm, or Al in my example, can and should use power tools, since he has the experience and understanding of the medium in general to improve his own efficiency.

    Just as your experience in CE makes you a better programmer, the experience I'm advocating in "IT" can do the same for web programmers. If these kids don't know how a network really works how can we ever expect to write a web application. And by "kids" I mean the ones that wrote their first "hello world" in college, not the ones that installed linux on their parent's PC in the 8th grade.

    As far as Eclipse goes, I'll allow it back on my laptop when it starts be useful with Maven. Until then it's TextMate and a terminal for me.

    June 18, 2008 10:45 am

  5. Abhijeet:

    I agree with you that using the shell and command line tools to do things is a great way to learn. But uninstalling Eclipse isn't going to help. On the contrary, its going to slow me (and you?) down a LOT. I can't imagine loading .java files one after other just to trace the flow. Whats wrong with F3? Its more like...right tool for the right job.

    June 19, 2008 4:27 am

  6. admin:

    @Abhijeet,

    I suppose my treatment of Eclipse is a little rash, but recently it has not been fitting very well in my programming tool belt. If you are programming with java there is no doubt in my mind that you should have some sort of IDE, it just makes life easier, and the language practically requires it for its current design paradigms. (Generate getters and setters saves me hours!)

    Like you said it is a case of the right tool for the right job, and at least in my recent experience with Eclipse, it's feeling a little more like this tool (does everything but is it really that useful?) than this one (everything you really need and it still fits in your pocket!) Personally, I'm craving something a little simpler for a while, I'm not saying I'm going to go mountain man and only develop with vi, but it is still possible to be an effective developer without using a full IDE.

    June 19, 2008 4:50 am

  7. Chris:

    Interesting metaphor. As a die-hard emacs user, I also enjoyed the conflicting metaphor: http://www.team.net/mjb/hawg.html

    July 10, 2009 7:38 pm