I was sitting and typing up another blog post earlier today, and I was interrupted rudely by a fellow student who decided it was completely up to me to fix her (or his) specific problem in their code. Being the pushover that I am, I lent a hand, only to find that this person was way over her (or his) head.
I don’t want to call names, or cite specific examples, so I’ll talk in really broad terms about why some people may need to rethink their career path when they make it to college, and find the work to be way over their heads.
I’ve talked before about how the higher education system is becoming a joke, and how the value of a Computer Science degree is ever decreasing. In fact, the other post that I was writing was about a similar subject. My opinions are certainly just that–opinions. Please take them as such, and don’t think that I am bashing any specific person or group of people with this post.
The fact is that some people aren’t cut out to be programmers.
General Prerequisites
I’d like to touch on the idea of what prerequisites are important to have when you begin on a path of learning to become a programmer, developer, or some other creative pursuit Computer Science student.
When you look at the work you have ahead of you, there’s two main things you are going to be doing if you want to become a programmer: typing and problem solving. Sure, there are quite a few other things that are involved in writing software (good or bad), including interfacing with clients, understanding the technology you are using and getting things done. If we put those things aside, we have our two core values.
Typing
While being a 95 WPM typist isn’t a standard prerequisite for being a programmer, it sure helps. The bulk of the actual work in programming is typing. If you are writing a new piece of software, most likely you are going to be spending the vast majority of your time in front of a keyboard, entering characters which will form your code.
Don’t get me wrong, I know quite a few people who aren’t master keyboardists, who have been in the industry for years. I’m not saying that it’s a mutually exclusive deal. What I’m saying is that in order to be a competent programmer, or even just a simple computer user, you have to at least know where the keys are located on that thingamabob in front of you.
If you are entering into a Computer Science field of study, the best thing you can do for your career is to have a strong basis in keyboarding. This not only saves you time, but it saves your employer man hours, as well as saving your instructors the time it takes to change that one piece of code that doesn’t seem to be working. If you cannot find the pipe character on your keyboard when your instructor asks you to input it for the 400th time in class, maybe you should go back and take a look at the most fundamental skill you can have as a programmer.
Problem Solving
Any doofus can do some copy/pasting from a Google search and stick it in their code to complete an assignment. Though it can be hazardous, I think looking at other people’s code is a good thing. But, when you are given an assignment, and all of the high-level concepts you need to add 1+1; if you can’t come to the conclusion that the answer is 2, you are either not paying attention, or a career involving that magical box with rectangular thingamabob with weird little squiggles and a hand thingy that clicks just isn’t for you.
It’s trivially easy for an instructor to discover that you have indeed copied someone else’s previous work. The thing you need to understand here is that when you do this, you may cut out a few hours of work for yourself, but you are wasting everyone else’s time. You waste the time of the instructor, who knows whether or not you actually completed the assignment yourself. You are wasting the time of your fellow classmates whom you ask to pore over every inch of your flawed code. You are wasting the time of your future employer because you simply don’t understand what you are doing. And last but not least you are wasting your own time.
Life is about solving a series of problems with ever-increasing difficulty. My bottle is across the room, and there are toys in the way, so how do I plot a path from here to there without injuring myself? The little girl sitting next to me thinks I smell bad, but I think she is just dreamy, so what can I do to change her mind? I need money to put food on the table, what do I do?
Trying to determine the interest rate on your mortgage through simple algebra is one of the easiest problems you’ll face in life. If you do not have the adaptability to figure things out for yourself, you are going to be wearing diapers and sucking on a binky for the rest of your life.
When I look at the students around me at school, in these fairly high level Computer Science classes, what I see is a misunderstanding of the basic principle of gaining an education:
You go to school to learn, not to be taught.
Becoming a programmer is not something that you can be taught. Becoming a programmer takes time, effort and a little bit of skill. Sure, best practices can be taught to the worst programmers out there, but ultimately, even a dolphin can be taught surf the Web.
If you are in school to get a degree and attempt to find a job in the real world, you have to take the time to learn the material yourself. It is extremely important to not only learn the programming languages themselves, but the ideas and concepts behind the languages, the platforms they run on, and the way all of the many components act together. If you are constantly asking the instructor why the exact same error message appears for the exact same piece of code on many occasions, you are wasting the instructor’s valuable time that could be better spent giving a decent student that little push they need to understand the problems they are having with their code.
After all, the role of the instructor is to point you in the right direction during the learning process, not to hold your hand at every turn, thereby giving you even more of a helpless leech complex.
Assignments in school are very narrow in scope, and most of the information needed to complete the assignments is given to you. In the real world, you are presented with a problem, and expected to know–or figure out–the best solution that will take the least amount of time, money and effort to implement. Unless your manager has way too much time on their hands, an angel on their shoulder, and cold hands which enjoy being coupled with his employees, you are not going to be given instruction every step of the way. That means no UML diagrams, no interface design mockups, no code snippets, and no help with the final product. Your manager has better things to do.
Learning to be a programmer is not only a trial and error process; it’s a process of learning from those errors and applying that knowledge to future trials. If you can’t solve the simple problems presented to you, maybe you need to rethink your career path, and save yourself–and those around you–a lot of pain.
Course Prerequisites
One of the fundamental flaws with the way the higher education system works, (maybe only at the current institution that I am attending) is that there are no non-Computer Science prerequisites for taking Computer Science classes. This means that students could (potentially) go into a programming language course, such as Java, with no fundamental basis in Algebra or basic English language composition skills. This might not sound like such a dire circumstance, but the truth is that programming is intrinsically tied to both of these areas.
Too often I find a fellow student who doesn’t understand the concept of a modulus, how to determine the value of a savings account after n years at x% interest, or what an integer is. On the same token, it’s often apparent to me that some students lack a basic understanding of how to articulate the ideas they are searching for during their learning process, whether it be through email or conversation.
Programming is not some job where there is no interaction with outside worlds, and you create a pretty wolf with an girl riding on its back which runs across the screen. It’s not a career where you never have to interact with another human being in any way. Programmers don’t sit in dark corners of the basement of a corporation, never having to see the light of day, let alone talk to a customer about whether they want the button to be mauve or chartreuse.
Programming requires basic skills and understanding in mathematics and the basic skills of communication needed to convey concepts and ideas from your mind to another person, regardless of the communication medium.
Save yourself some time. Take an Algebra course, discover what a modulus is. Because if you don’t have that tiny little basis in real-world intellectual topics, you are going to suffocate under the weight of your own ignorance.
Whether or not the education institution you are attending has strict prerequisite policies, do yourself a favor and figure out what general studies courses will benefit your experience in Computer Science before wasting the time of your instructors.
Learning to Be a Good Programmer
Anyone can be a programmer. It takes time, effort and skill to be a good programmer. You need to know how to pay attention to the task at hand and how to solve the current problem you are faced with. In order to go forward writing good code, you need to understand the basic principles of what it is you are trying to do, what the accepted methods are, and how you can learn from this experience and become an even better programmer.
There is an infinitely deep resource at your fingertips which can help you learn something new every second of the day. Though you are potentially wasting your time sitting and reading this, the Web is full of good information to help you on your journey. That being said, all the book reading in the world will not make you a good programmer. You have to get out there and create something with your own two hands in order to truly understand what it means to be a programmer.
Recommendations
If you are considering a career in Computer Science, there are a few resources I would like to recommend to you to help you on your way.
- Keyboarding:
- keybr.com – A really good web-based keyboarding tool to help you learn or master the art of keyboarding.
- Text:
- Websites:
- Stack Overflow – A site built by programmers for programmers.
- Coding Horror – A blog about what not to do when programming.
- The Daily WTF – Scary stories of coding and IT.
There are tons of other resources out there, but these are the basic few that I think should be on every amateur programmer’s list.
I’d like to leave the article with a bit of advice for those of you considering a career in programming:
- Take a day or two and research what is involved in learning to program.
- Read anything you can get your hands on.
- Find out if you need skills in seemingly unrelated areas such as Maths, written language or speech.
- Take everything very seriously.
- Consider your dedication to the subject matter.
- Consider the time and effort that you will have to put into learning.
- Consider your ability to learn and grow.
- Consider the time and effort burden that you will be placing on those around you while learning.
If any of these points bring up negative thoughts, make your stomach hurt, or just generally feel foreboding, do the right thing. Consider other areas of interest before becoming a programmer. Do us all a favor and look before you leap.









{ 2 trackbacks }
{ 7 comments… read them below or add one }
Wonderful! I can’t agree more — especially with two main points:
1. being taught vs. learning
2. Knowledge of Math and English.
The best programmers I know are the ones who read, can write coherently, and have a solid background in Mathematics.
And Ben … you write beautifully!
Excellent post! As a Sr. Developer, I can attest to the “prerequisites” you outlined here – particularly being able to articulate your thoughts.
Most programmers won’t go on to create that wolf with the pretty girl on its back, running across the screen. Most programmers move on to the cubicle farm, maybe a shared office, and spend their days receiving requirements from users, turning them into code, testing, documentation, and delivery.
Your customer has no idea what they want – regardless of what that requirements datasheet says, so a little bit of psychic power is in order as well.
If the Earth had no core, it would collapse in upon itself. This is a known fact and can never be ignored. You driving this point home in your article needs to be read by every instructor in computer science.
I am not a fair-weather fan, but I can only be a cheerleader for so long, and if the team isn’t shaping up as they should or doesn’t put forth the effort to do so, why should I continue to cheer?
The dilemma occurs because I see the slow erosion of a downward progression into an absolute dead-end for some students. But in today’s “touchy-feely,” “I’m Okay, You’re Okay,” “Don’t let anyone tell you that you can’t” mentality is making me question my value as an instructor. If you’re plain f**cking stupid, why is it my fault? Yet, I feel I need to do more – something I’m over-looking, some teaching technique that I have yet to try to help flip on the light switch.
There is an old saying you can lead a horse to water, but you can’t make him drink. As a joke one time, I modified this to say, “You can lead a student to class, but you can’t make him think.”
It’s true. I could discuss, cognition, meta-cognition, Bloom taxonomies, cultural diversity, learning styles, assessments, and other pedagogical psychobabble until I was blue in the face, but then I would be made to feel bad about it, because some fucknut from Harvard going for his doctorate in Education did a study. There are lies, damn lies, and then statistics!!
Like you – I am a push over. And then only after the rape has occurred and the perpetrator is gone do you mumble to yourself – what makes you so entitled that I should fix this for you or give you the answer?
My fear is quite founded in reality – some people (mainly those who feel entitlement and disguise it as helplessness) know how to work the system – and once slighted – would have no qualms at going to the powers-that-be and bringing down the terror from above. So we are damned either way. If I could simply be truthful and say – “You don’t have the chops for this, maybe you should look into doing something else,” Lord knows I would. To say – “The emperor isn’t wearing any clothes,” is something the administration does not want to hear. They want the money!! All you have to do is say you have a disability and the seas will part and all will bow down to your whims. “I know I’m blind, but I want to be a photographer, and you better not tell me I can’t or I’ll sue your ass!!” This is why I keep doing what I can – this is why I lose sleep, because my reputation is on the line, once this person is released to the real-world.
There are only two things I see as a positive outcome – the lack of initiative shown in school will continue well after graduation, and the degree will ultimately secure them a job at Bunnie’s Tavern. Or, my candidness and honesty when a potential employer calls me for a reference!! Oh please, put me down as reference!!
“One of the fundamental flaws with the way the higher education system works, (maybe only at the current institution that I am attending) is that there are no non-Computer Science prerequisites for taking Computer Science classes.”
My school requires discrete math to taken before any CS classes, and 3 semesters of Calculus for upper division courses.
You might want to add that one should also learn about all the periphal issues related to the main task through reading sites like Paul Graham’s and Joel Spolsky’s, in addition to books like The Best Software Writing Volume 1 and The Mythical Man Month. People who are good tend to have a strong ability to telescope between the specific problem at hand and the large, general picture.
The University of Washington Comp Sci requires that you take 3 quarters of Calculus and 2 quarters of Physics (or upper Biology I think) just to be able to APPLY for the major.
However, todays world doesn’t need programmers who know calculus when it comes to developing most software, whats needed is creativity and communication skills. Being able to come up with creative solutions to business problems and communicating the solution in English to the stakeholder is just as important to ones leet programming skills.
Hi,
good post
I cannot agree much with
‘Anyone can be a programmer.’
I know many people that just couldn’t become C++ programmers
Tihomir,
dev-the-web.com