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.
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.
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.
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.
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.
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.
- keybr.com – A really good web-based keyboarding tool to help you learn or master the art of keyboarding.
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.