views:

2284

answers:

26

I love software development. I live for it. I spent almost 100% of my free time writing code for my latest project, priding myself on readability, a lack of complexity, and modularization. Also, since I'm graphics programming, I can also add in usability, interface, and just things that are easy on the eyes, and the fingers.

Thus, when I entered the CS class I'm currently taking, I thought it would be a breeze. Boy was I wrong. Sure the tests all have incredibly easy concepts. I understand everything perfectly, however, we're asked to decipher fairly unreadable code in short amounts of time.

I'm a writer, not a math genius, so I take my time and step through algorithms slowly when I'm deciphering code. I don't want to do it quickly, and I'd rather get it right at a slow speed, then wrong speeding through it.

Our final exam in the class, our teacher told us, consisted partly of the AP Computer Science test that high schoolers take. I was unable to finish it in the allotted time. I know exactly what's going on, I just can't do it fast enough. I feel incredibly stuck. I continue to improve my software development skills every day, but I can't see how I can improve the speed at which I process calculations.

I feel ashamed that I couldn't finish a simple AP CS test, but it also leads to my questioning of what Computer Science is as a discipline. Do I really want to get into it if all I'm getting into is stepping through algorithms, in an environment where concepts like readability are preached, but not practiced? Am I better off just taking some other major, while still programming (I would hope employers would take more heart in sample code and programs than a degree in the "discipline", but I doubt it.)

Edit: I've considered one alternative. I am very good at writing itself. I like programming more, but I also enjoy writing. How would employers view a major in some kind of writing discipline, but with solid code samples?

+44  A: 

I love software development. I live for it. I spent almost 100% of my free time writing code

You sound like you'd be a good programmer. Don't let one bad experience decide your future as a software developer.

It comes down to loving what you do. And from what you said, you love to code. The more you do something, the better you will be at it. This especially holds true for being a software developer.

There are a wide variety of classes in computer science, you don't need to like all of them.

For the most part, pretty much all employers will judge you mostly based on your previous experience. Continue to work on projects in your spare time and you'll find yourself with a career that you love.

Try not to get frustrated, you don't need to be the best, and you don't need to get perfect. You just have to keep with it. Being a great programmer takes decades. Do you really want to spend decades becoming a great programmer? Remember: It's The Journey, Not The Destination.

Brian R. Bondy
+1 Great comment, and to the point!
KMan
+7  A: 

I know exactly what's going on, I just can't do it fast enough. I feel incredibly stuck. I continue to improve my software development skills every day, but I can't see how I can improve the speed at which I process calculations.

This seems to be the crux of your frustration.

If that's the case, I'd say don't worry about it too much. Speed, and more importantly, efficiency, comes with practice. As you spend more and more time (years, not months) programming, you'll get more and more efficient. Practice, practice, practice... It really does help.

That being said:

Do I really want to get into it if all I'm getting into is stepping through algorithms

Learning to love algorithms is, in my opinion, a core part of being a good developer. If the latter part of your statement ("concepts like readability are preached, but not practiced") is the issue, then I'd have the same frustrations as you...

If, however, the complaint is really that you don't like working with algorithms, perhaps design would be a better career. Your interests you mentioned are all issues that you'd have a lot of exposure to if you worked on the design side...

Reed Copsey
I would strongly dispute the idea that not loving algorithms means you're better off in design. Being able to implement algorithms is important, but given a good description of the algorithm, that should be trivial. There is plenty of interesting development to be done that doesn't revolve around coming up with some novel new way to e.g. sort values.
Nicholas Knight
I wasn't suggesting that - however, I do feel that at least having an acceptance of algorithms, and probably more "general problem solving" is key to becoming a good developer. The way he worded the question, it was sounding like there was a distaste of algorithms in general, and everything mentioned that he loves (graphics, etc) was more design oriented, hence my suggestion.
Reed Copsey
+10  A: 

What "Computer Science" is taught varies wildly between institutions. Generally, Computer Science is a more theoretical look on computers and programming. It will tend to have a heavy slant towards algorithms, structures and the maths behind it as opposed to the more practical "software development" side.

Some institutions will have alternatives to Computer Science which will have a lot of the same courses, but are more geared to the practical side.

But, as Brian said, don't let one experience decide your future. Work out what you want to do and give it a red hot go.

Dan McGrath
I would say, find another school with Computer Science teaching closer to what you want to learn.
Natim
+1 to Natim, seek out what you want, don't change for where you are.
Dan McGrath
To expand the *Some institutions will have alternatives to Computer Science* concept, I will point out that in europe many countries offer a choice between two kinds of university-grade computer courses. **Computer Science as told by Scientist** in the faculty of Science and **Computer Science as told by Engineers** in the faculty of Engineering. *Yes* there's a lot of replication in that and members of those faculties hate each other, still... *choice.*
ZJR
+1  A: 

If you have the passion for it, then I wouldn't say that you should abandon all hope. You may need to refocus your side projects, however, to improve your skills and speed in the particular areas that you need to learn or are struggling with. I do this all the time and find that it's incredibly helpful -- if I don't know how to use a library or find some particular algorithms difficult or confusing, I make myself do a project that uses those things.

Having a love for programming is a very good thing -- many people who enter the field for other reasons (like money or job availability) end up regretting it, and a lot of them leave. Being good at it takes work, but if you focus your work to specifically to improve your skill, you can be successful.

Kaleb Brasee
Also consider that maybe your side projects need **much more** than *refocusing* maybe they beg to be *slashed*. After all little of what one writes before getting a good structured education in programming makes sense afterwards. Some programs *simply have no use* in the light of what you learned afterwards, some *end up looking like the product of an herd of rabid chipmunks*.
ZJR
LOL, this is true. Like my old QBasic program, which was a collections of about a dozen various utilities, all included in a single 100K file.
Kaleb Brasee
not another `start your own project` answer... ^-^
Arnis L.
Well, it works!
Kaleb Brasee
+5  A: 

As an entirely self taught developer that did not go to school, I can honestly say I'm not sure I could handle CS curriculum. Don't get me wrong, I know what I'm doing, I understand O notation and advanced data structures. But, the point of the matter is, you will never use it in real life. 90% of programmers will never touch a raw binary tree, let alone implement anything that needs it. You will not be writting new sorting algorithms or even needing to understand how they work.

I'm not saying you should be ignorant of such things, that is certainly not true. But you do not need to have an intimate knowledge of all the abstract and rare concepts they cover in CS to be a good developer. Programming is easy. Most of it is simply understanding basic concepts of how to properly design software (which they never teach in school, and it sounds like you've already grasped them, or at least strive for them) and learning new APIs.

If you aren't enjoying CS, don't get a CS major. You could always go for EE or something. Perhaps your school has MIS degrees that allow you to study real-world problems and develop skills employers are actually looking for?

jcm
Programming is easy. Programming well is not.
Andy West
Allow me to dissent. You **will** write new sorting algorithms. Only **no one will ever notice or care**. (nor give you a raise) Instead they'll go crazy for the *new set of icons* you chose from that *freebie* site and dropped over your code.
ZJR
+4  A: 

I love software development. I live for it. I spent almost 100% of my free time writing code for my latest project, priding myself on readability, a lack of complexity, and modularization.

That's a pretty good sign.

...however, we're asked to decipher fairly unreadable code in short amounts of time.

It doesn't get better when you enter the workforce. You will always be asked to read other people's (often terrible, but sometimes awesome, usually in-between) code.

Do I really want to get into it if all I'm getting into is stepping through algorithms, in an environment where concepts like readability are preached, but not practiced?

That's a fair assessment, but keep in mind that the people who are preaching readability are probably practicing it, too. Most teachers and programming bloggers do both. Many practitioners do neither. It will probably be your job to clean up after the latter.

Only you can answer your titular question, but I don't think it sounds like you are without hope. It's been my experience that when you show someone a better way to code (not just tell it to them) they start to pick up on good habits and they write cleaner code in the future. You'll get better at reading bad code. If you stick with CS, you'll have plenty of practice.

Bill the Lizard
+10  A: 

Don't sweat the small stuff. When I had my own software company and had to interview and hire people, I found that there was almost no correlation between degrees and programming abilities. If you can code, if you can solve problems, that what I as an employer am interested in.

One thing I noted was that most kids coming straight out of school had never worked on anything larger than a few 1000 lines of code and their debugging skills were almost nonexistent.

Real life includes walking into systems of 100,000's of LOC and having to figure out what someone else screwed up. If you can do that and can demonstrate it through active membership in a significant OSS project, then I think you have what it takes to be a real, down in the dirt coder.

Ps. If I had bothered to finish my BS it would have been in Finance. I've been programming professionally for 37 years next month.

Peter Rowell
I agree with this wholeheartedly. I'm a young (19) developer/designer doing my own thing, no school. I'm digging it, and I'm doing well, but it's not because I can code, it's because I can SOLVE PROBLEMS and figure shit out. Walking into a system full of thousands and thousands of horribly unmaintained and hacked together lines of code, being able to figure out what the problem is, and then fix it, is called Clusterfuck Management. You won't learn that in school.
Sneakyness
"Real life includes walking into systems of 100,000's of LOC and having to figure out what someone else screwed up." True beyond pain...
Lucas
+2  A: 

A few thoughts:

Don't take the time you spend programming as a substitute for studying for your exams! It can be hard to stay focussed when what you're studying seems to turn something you enjoy into something you dislike. You may have to live with this.

However, different classes encourage different kinds of learning. Some allow students to do things their own way, others do not. The same thing can be said of different schools overall. As a result, some classes (and some schools) will be better suited to your style of programming and learning.

As someone without a CS degree, I would encourage you to get one, particularly as it seems that you find the stuff you're learning in class to be "different" to what you learn on your own. When I was choosing my degree I thought I already knew most of the important stuff about programming. I was wrong (I later learned lots of important stuff through other means).

But if you're clever and motivated, you don't need a CS degree to get an interesting CS job, at least in my experience (I'm currently working on embedded operating systems research).

Artelius
+4  A: 

A career in "computer science" can be all sorts of things. You can do research, teaching, writing, managing, programming, testing, coaching, among many activities. And you will undoubtedly end up doing many of them in combination.

I did go through a computer science program, and it was beneficial to me. But I would also say I really didn't like many of the classes-- thank goodness I went to a large university where I could find other more interesting classes. Like you, I was actually a reluctant computer science major. I ended up just taking what classes interested me. At the end of four years I ended up with enough credits for a B.A. in CompSci (and two minors in arts).

In retrospect, that's one of the best things about software-- you can write software for all sorts of different jobs and experiences if you want. And the tools change continuously, so it can always be interesting. If you find other areas that are more interesting for you, definitely follow your heart-- but having tougher computer science classes under your belt won't hurt.

Also don't lose heart with a tough test-- the more experience you get the faster you get at both reading and writing code. I spent a couple years teaching computer science, and my goal was to not write unrealistic tests like this. There are all types of comp sci jobs-- some of which do practice what they preach in terms of values.

Good luck!

ndp
A: 

As to how employers will look at what you major in, it depends a lot on what the employer is looking to do. An innovative company that is trying to do something never done before will look for a CS degree and evidence that you have done innovative things. A company maintaining a system that maintains the corporate jewels will look for evidence of solid coding and estimation skills.

Getting a CS degree will indicate to an employer that you want to understand coding at a deep level. Getting a degree in writing will show that you want to understand plot, character development, and exposition at a deep level. A game company may be interested in an English major with good code samples while a contract web development firm will have little interest.

If you are interested in learning new things CS will challenge you much more than a career in writing.

And to echo what a writer above said, don't worry about your speed. If you are interested in the subject and keep learning the speed will come. The skilled test takers of today that never look at the subject again will not be your competition in the future.

verisimilidude
+23  A: 

Before you decide, remember what Dijkstra said:

Computer Science is no more about computers than astronomy is about telescopes.

Now, do yourself a favor: go to the local book store (if you live in the US) and browse over a copy of Knuth's book The Art of Computer Programming. I don't think you will understand it, but if you envision yourself being interested in learning that stuff, then you are clearly good material for becoming a Computer Scientist who Likes Programming. If you think it is dry, then you may still be a great programmer, but certainly not a computer scientist.

Cheers.

Arrieta
Awesome quote, and something I've learned over the course of the past few months.
Anonymous
This is really quite true.
Paul Nathan
While this is true, you don't have to be a computer scientist to get a computer science degree. A lot of the best software engineers I know aren't big on computer science, but they have a degree in it to improve their skills in the fundamentals. It still makes you a better programmer.
Benson
If you get a Computer Science degree, then you are a Computer Scientist. I don't get your point.
Arrieta
Good luck finding a book store where you can actually browse the Knuth books. Most book stores have the set shrink wrapped.
Slapout
In most book stores in the United States you can ask for the floor personnel to open the book even if it is wrapped. I have done this many times, most of which I did not end up buying the book. Try and you will see - remember you are the customer, and they have to try hard enough to sell you the book. If you cannot see inside, how do you know what you are getting?
Arrieta
+2  A: 

I love software development. I live for it. I spent almost 100% of my free time writing code for my latest project, priding myself on readability, a lack of complexity, and modularization.

Go you! Perhaps you've found what you want to spend your life doing, which (judging your age by your post) I certainly hadn't for many years after that point in my life.

But be aware that if you're only working on your own projects as a lone developer, you're only doing a small piece of "software development".

I'm a writer, not a math genius, so I take my time and step through algorithms slowly when I'm deciphering code. I don't want to do it quickly, and I'd rather get it right at a slow speed, then wrong speeding through it.

You can always write code on your own at any speed you want, and it sounds like you are. But if you want to make a profession out of it, speed is important. Phil Greenspun's ArsDigita had newbies build many new sites as quickly as possible to give them experience. Many top performers across many different fields seem to agree that experience gives you the ability to do things quickly, and conversely only by practicing doing things quickly can you learn to do things quickly.

Your competitors do things fast so if you want to survive in the industry being fast-and-good is going to be 100 times better than just being good. Computers aren't magic, after all: the only benefit they confer is their ability to be faster and cheaper than unskilled labor. I know writing something beautiful is its own reward, but to some extent you also need to separate that from shipping the dang thing.

Edit: I've considered one alternative. I am very good at writing itself. I like programming more, but I also enjoy writing. How would employers view a major in some kind of writing discipline, but with solid code samples?

The employers I've most enjoyed working for have not cared one iota what my major in college was. After a couple weeks working there, they've not even cared that I went to college. There are certainly many employers who would not even consider you if you have a writing degree, but I think you probably wouldn't enjoy working there anyway. College is for learning how to learn, not learning a trade. The hardware and software we'll be using in 5 or 10 or 20 years won't be much like the computers you used in college, anyway -- do you think all of us who graduated in the 20th century are still using our mad Win95 / Linux2.0 / MacOS8 skills? So study whatever you want, and then get whatever job you want, and don't assume that they have much to do with each other.

Ken
A: 

Always remember that there is a difference between school and business. It's probably true for most fields, but not a lot of them have it quite as extreme as computer science.

Most of the time, you'll be figuring out the algorithms yourself, not have them on paper.

MPelletier
+3  A: 

Reading your description of how passionate you are about becoming a programmer shows me you belong more than most do. Unfortunately schools attach some sort of rigor to computer science as if to succeed in it you need to be as quick and smart as a computer. I dismiss this as non-sense, programming and computers in general, are a platform for expression. They require you to be logical in instructing them. Paradoxically that is precisely why computers are stupid. What makes a truly great scientist in any field (especially fields like mathematics). Is the ability to think outside of logic, and be creative. Creativity is what separates us from other beings.

You step through code slowly? So what? Any good programmer who enjoys what they do wants to be sure their code works and is well designed before they run it. Do not let yourself become a marketing tool. Do what you do because you want to do it. Academia is producing poor intellectuals because they stress marketability over skill and passion. They will often make references about how you will 'look' on the outside. Forget that. You are fit to be a Computer Science major, don't let societies shortcoming get in your way. All of the greatest minds in the world approached their fields differently, that is what made them so great.

in70x
And that creativity often converts slowness into quickness.
Arnis L.
A: 

You can always fall back on bug testing and technical writing. It would not be the most stimulating of either world, but it is a valid career path! Don't evaluate your career path based on a classroom experience, think about what you want to be doing when you wake up in the morning :)

gawk
+1  A: 

I understand everything perfectly, however, we're asked to decipher fairly unreadable code in short amounts of time.

this is something you need to practice, to decipher other peoples algorithms is one of the cornerstones in doing professional programming. The more code you read, the better and faster it goes.

Anders K.
A: 

I continue to improve my software development skills every day, but I can't see how I can improve the speed at which I process calculations.

In one word: Practice.

And don't be too dismayed. Most software development jobs are not about reading impenetrable code at high speed.

Stephen C
A: 

I love software development. I live for it.

I'd say, do what you love! loving/enjoying means, you really dont have to think that you are working... or that you have to work! you just be it. Not that you be it intentionally, you "just be it" -

Plus doing something that you love and really enjoy increases the chances of 'excelling' in that career exponentially.

Just felt like sharing my two cents!

KMan
A: 

Computing needs more programmers who can write and who bring their writing talent to bear on their code, making it readable, simple, modular, and so on, as you say. It sounds like you'd do the field some good if you can get past this barrier, that both the schools and the employers value these qualities too little. Have you tried getting into free/open-source software? Building up a portfolio more than makes up for grades in CS courses, I think. Conversely, too much trouble keeping up there would make for another hint to try some other field.

(There is much of value in CS for a practicing programmer, though you don't necessarily have to learn it in school.)

Darius Bacon
A: 

What I believe is that first and foremost thing is the 'interest'.

If you have the interest in computer science, it is definitely for you. If you don't have interest on the other hand, you should not be there in it.

If you have no interest in computer science, but you are still in, you won't be able to put 100% of your potential; something which is natural.

Having said that, if you do have the interest in computer science, you have chosen the best profession for yourself where you will most likely be able to put 100% of yours which in turn will output something really good for others to witness and appreciate.

Sarfraz
+5  A: 

I think you'd make a great software developer or 'hands-on' computer scientist.

One of the things I've observed is that there are roughly 3 kinds of people who get "computer science" degrees.

  1. Computer Scientist. This guy loves algorithm analysis, graphs, Haskell, type systems, and other esoteric im-/semi-practical stuff. He doesn't write software per se, but his studies are pioneering for other people to follow. PhDs are a must. Dijkstra, Knuth are canonical examples of this gentleman. Typically these people are found at universities as professors/researchers.

  2. Software Engineer. This guy loves software development models, design patterns, big systems, and system architecture. Writing software for a business is where his heart's at. He probably will, at the most, wind up with a Master's. He'll either go down a lead engineer route, start his own software company, or do middle management.

  3. Programmer. This guy loves languages and tools. The dirty little details that the architecture people hand-wave and the mathematics ignore, he's into. He is ok with being a code monkey and really wants to stay in programming hands-on for the rest of his career.

There's a 4th kind of person, the 'hacker', who tends to be very artistic in his coding and to dig just hacking around (see Stallman's definition of hacker). Hackers have real issues getting degrees; it's too formalized/rigorous/$insert_reason_here for them. They prefer open source and might have real issues working in a traditional corporate world.

Typically, universities don't have the resources to split 3 ways in their "computer science" department and offer specialized degrees. So the engineer/programmer types get a pile of obscure theory mashed into them, and the scientist types get a pile of hands-on mashed into them. Maybe that's for the better, maybe it's not & that's a debate for another time.

If you want to know if computer science the degree is something you can do, find a senior and ask to see his books for his upper-division courses(or flip through the upper-div books at the bookstore). Those courses will be far different from a CS1 course. There's usually a giant divide between lower-division CS courses and upper-division courses.

Practicing computer science after graduation usually(80% of the time)[1] means programming CRUD applications unless you have a PhD, in which case you're probably going to do research-y stuff at a place like a University or like Google or Microsoft.

[1] the estimate I've heard is 80% of software is CRUD.

Paul Nathan
+6  A: 

Don't let a classroom experience discourage you.

Programming in the classroom is nothing like programming in the real world

Chris Ballance
A: 

Computer Science is going to teach you a great deal of valuable skills that you can apply to your programming career such as

1) Attention to detail 2) Precision/Accuracy in your work 3) Working in groups 4) Problem Solving ability.

First, most professors understand the material is difficult, ingesting it quickly is not an easy task. I just finished a Unix/C programming course and we took a lab test with no book no internet no outside resources. We had to write 4 programs in 90 minutes demonstrating our knowledge of the Unix Programming Environment. Needless to say, I managed to get 2 problems done, 1 compile but I had a couple output issues. I'm sure my grade will be fine.

I couldn't see myself doing any other major in college, You cannot just give up after your first course or two. The attrition rate in this major is the highest of all majors, because people give up.

If you work hard, put in the hours and show up to every class I guarantee you will do just fine.

Nayrb
A: 

If you wanted an alternative major, consider physics or Mathematics rather than something in the Arts which may give a view of not being technically proficient. I know that may sound bad, but I would imagine various HR departments wouldn't consider English to be a technical discipline. How much programming do you do on other's code versus your own code? I ask because there may be something to you reading other code and developing the skill of quickly understanding code. "4 Stages of Competence" may help elaborate a bit on why practice would be useful.

We all have our moments where we stumble, the question is how do you handle that. Do you get enraged and childishly try to bully your way through? Do you step back, assess the situation and consider various alternative approaches that may yield better results? Do you just run away, avoiding such challenges in the future? In a way, this is a sign of maturity handling when one falls short of their own expectations.

JB King
A: 

Follow your passions, money and all the rest will take care of itself.

denny
A: 

Since you're a writer, you should be getting used to writing/thinking quickly. It just requires some practice and familiarity with the notation. Once you have that, the writing will be less of a struggle.

Algorithms are an important part of programming and computing science and if you don't know them, you're doomed to create slow and ineffective programs. Trial and error is no longer necessary in our field. If you want examples; the Quicksort and Dijkstra's pathfinding algorithms are from before the 1970s and are still relevant today. Programming is math and if you create something, it can become timeless.

omouse