Is Computer Science a good major?

Should I major in computer science even if I feel I'm not naturally good at it?

  • In other words, how important is natural ability in computer science? After taking an introductory computer science course (which gave me my first experience in programming), I realized I loved it. Writing programs, even time-consuming ones, was immensely rewarding and satisfying. The problem is, I can honestly say that I'm a pretty mediocre coder. I think I realized this when I compared my program with a friend once, and my jaw literally dropped as I saw that she had condensed my hundred lines of scrambled-up code into ten elegant lines. It was beautiful. I consider myself a pretty hard worker and reasonably intelligent, but my brain just couldn't work the way hers did.  So, am I just being a cop-out? Or am I being mature in my ability to recognize my own limitations?

  • Answer:

    When I read the title of the question, I was expecting something like "I don't really like it but it seems like a great career choice" (in which case I would urge you to drop it). But you say almost the exact opposite. You say you love doing it. That's it right there. Go do it and enjoy yourself. Whatever innate abilities folks might have, if indeed there is such a thing, are a lot less important than loving it, since loving it implies you'll spend time learning and doing and training and digging and fighting it. You'll end up being way better than everyone else. Genius is hard work more than genes. I've known a guy at Google who was a world class coding competition wizard. Seriously top notch. But he just wasn't into it any more, for whatever reason. He was tired and bored. Then there was this other guy, in the same team, who wasn't nearly as "innately" ingenious, but he was passionate and driven and all over his projects. Guess which one did better?

Alon Amit at Quora Visit the source

Was this solution helpful to you?

Other answers

"Natural ability" in programming doesn't have much to do with how you do in introductory CS classes.  It has more to do with patience, determination, and how long you are willing to hack on a problem before you give up.  Since you enjoy writing time-consuming programs, you might have more ability than you think.  But the real test is whether you can sustain your motivation over weeks, not hours. Anyway I would say do it because if you have the right personality traits you should quickly get better.

Jessica Su

Most people who study computer science in college started programming around the ages of 12 - 14.  If you look at the kind of stuff I was writing when I first started out, I'd honestly write things like this A = rand(0, 9) B = rand(0, 9) C = rand(0, 9) D = rand(0, 9) E = rand(0, 9) F = rand(0, 9) G = rand(0, 9) H = rand(0, 9) I = rand(0, 9) N = A + 10*B + 100*C + 1000*D + 10000*E + 100000*F N = N + 10000000*G + 100000000*H + 1000000000*I to generate a random nine-digit nonnegative integer. Of course, by the time I got to college I'd improved. So I'd say your friend probably just has a bit more experience than you do.

Daniel McLaury

You are probably being unfair to yourself to say you have "no natural ability" after an introductory programming course. You have the two fundamental things required to improve  - you love programming, and you understand what better programs than the ones you are currently writing would look like. This implies very strongly that if you give yourself the resources to improve, you will. The only thing in your way is that you're contemplating giving up ....

Simon Kinahan

Despite what you may think, you have no idea how much time your friend spent honing her skills. How do you know it is her innate ability that is driving the empirical skill difference? Be aware that some people have a pathological tendency to under-represent how much time working on something, which has a side effect of provoking insecurities in those around them. Go forth and invest 1000 solid hours. I am sure it will benefit you, which ever your final career path. You won't regret it.

Yi Liu

You said that you'd just taken an intro CS class, and that was your first experience programming. This means that, until now, you'd never written a single line of code and aren't used to thinking like a programmer. Well, like just about anything else, learning to think and problem solve like a programmer takes a lot of time and practice. I don't believe there's a gene or set of genes that you either do or don't possess that gives you natural programming abilities. If your friend had also never written a single line of code up until that class, she still might simply be more used to this type of problem solving from an advanced math class. Or it may just be that she had a random epiphany that you didn't. Conversely, maybe you just, on this particular occasion, latched onto a line of reasoning that was unsuitable for the problem at hand, leading you to a suboptimal solution. (This is common even with professional programmers. If you pick the wrong analogy through which to analyze a problem, it could very well doom your efforts from the get go. That's why it's often helpful to take a break and approach a problem with a fresh mindset later on.) In any case, a single occurrence does not establish a pattern. And even if you struggle through the entire course, that is still not a sufficient sample size to determine that you aren't suited for CS. Besides, performance in an intro-level course is a poor indicator of long-term success. There are a lot of people out there who breeze through intro and intermediate courses in a particular field, but then just hit a brick wall once they reach the higher level courses. Likewise, there are people who may struggle to get into the programming mindset at first, but once they do, they excel at programming and grasp the more difficult concepts better than others. If you enjoy programming, do so in your spare time, then you will get better, guaranteed. Additionally, the nature of this field is that many students will have spent years programming on their own as a hobby before they take their first CS class. So you don't know that the top students didn't struggle just as much as you when they first started programming. Right now, you're at a slight disadvantage because you didn't come into the field as a programming hobbyist already. So you do have some catching up to do. But the biggest determining factor for long-term success is whether you actually enjoy CS. If you enjoy it, then you'll be driven to practice programming, to learn about CS theory, to teach yourself outside of the classroom (and there are so many excellent free resources these days). Lastly, considering how fast IT-related fields move and evolve, even for late-comers the playing field is pretty even. I may have started programming over a decade before you did, but we both have to constantly re-learn how to program as dominant platforms change and new programming paradigms come about. So give CS a chance. At least learn about OOP and top-down programming before you give up on something you're passionate about. These basic programming tools will greatly improve the quality and organization of the code you write.

Calvin Huang

You just realized there are better ways of doing the same thing and you still have a lot to learn :) It all starts with hacking and knowing how to get things done. It slowly translates to getting things done well so that what you've done is readable/understandable to you or someone else after a month! It then transcends into organizing code into neat structure and learn the various 'patterns' that are employed to solve commonly occurring problems. You'll learn how to talk using (UML) diagrams and converting that into code. You'll learn the what/why/how of 'design' and 'architecture'. After that you'd migrate to designing high-level architectures and making tough design decisions that will (somewhat) seal the fate of system evolution. So what you are seeing now is that the your enjoyable 'path' has just begun and there is a lot to learn. There will ALWAYS be people who'll be better than you at what you do but that's a fact of life. Remember, they didn't get there by sheer 'innate' ability. The fact that you 'love' what you do will make the journey enjoyable. Trust me. I love everything to do with software engineering and architecture - the journey is just fantastic :) All the best and keep discovering. In fact when you find someone who "did it" better than you, look at it and learn from it. It may just help you sometime. That's the innate ability which I feel you already possess (all humans do). Keep the joy of learning alive and be happy to have people around you who know a lot more since that'll always ensure you keep learning :)

Nupul Kukreja

Disclaimer : I don't even consider myself a good coder, esp after seeing/working with some people who have been Gold Medallists at IOI etc. But in my high-school class some of my friends thought that I had innate capabilities, which really isn't true either. I couldn't really articulate why I was slightly better at it till I read Paul Halmos's "How to be a mathematician". And what I realized that made me good was this : I was naturally curious and asked a lot of stupid questions. I always "fought" what I learned, I tinkered with it till I completely got it. Asked a lot of questions: Is it always true, what will happen with the edge case, how could I override that, what is more generic way to write that code, a simpler way etc. That compounded over time gave rich dividends. I still remember, along with another friend (who went to do Ph.D at Cornell in Physics), solving at least a few chapters ahead of my friends in Math in 4th grade. Learning a new concepts from text book without the aid of teachers was exhilarating, because we were not supposed to do that, and we were sneaking by :). But all those small things helped, I guess. http://ebooks.adelaide.edu.au/s/schopenhauer/arthur/essays/chapter3.html : On reading and books. When we read, another person thinks for us: we merely repeat his mental process. It is the same as the pupil, in learning to write, following with his pen the lines that have been pencilled by the teacher. Accordingly, in reading, the work of thinking is, for the greater part, done for us. This is why we are consciously relieved when we turn to reading after being occupied with our own thoughts. But, in reading, our head is, however, really only the arena of some one else’s thoughts. And so it happens that the person who reads a great deal — that is to say, almost the whole day, and recreates himself by spending the intervals in thoughtless diversion, gradually loses the ability to think for himself; just as a man who is always riding at last forgets how to walk. Such, however, is the case with many men of learning: they have read themselves stupid. Another thing I learned to, was to modify the statement "Always ask stupids questions" to  http://terrytao.wordpress.com/career-advice/ask-yourself-dumb-questions-%E2%80%93-and-answer-them/. Because people tend to think you are hay-wired, arrogant, or a combination of those qualities, when you are essentially only extremely curious.  Otherwise it wouldn't help you to progress in the right direction. It is extremely important that you like doing it. When you like doing what you like, it never feels like work and you can always push yourself more without realizing the pain. What is often perceived as natural ability (at least in my case was) was/is a result of some of the actions, by choice or by luck (luck in my case, that good teacher or parent etc..) which led to better skills. So if you don't get it by luck, it is quite do-able by choice and it might turn out be even better, because you are learning about learning after learning how to learn :).  Good luck.

Anonymous

Nobody is a born programmer. One might be a prodigy and you can say programming comes to him naturally. But taking some introductory CS classes and making a judgement that you are a bad/good programmer or that you have made a bad/good decision by choosing computer science as you major is like saying that you are a bad swimmer because you are not a fish. What is natural ability? I don't get the concept of natual ability. Computer science is not something that comes naturally to a person. Look I can run my computer, now I know how ALU works. This is just foolish. If you love what you are doing, that's what you should do. You are lucky that you are loving what you do. Most of people remain dissatisfied with their jobs but can't do anything about it. A lot of electrical and electronics major I know of are working in a software company. What does that tell you? Its good that you know you are mediocre programmer. You recognize your position in programming. However, don't make it your limitation. You compared your programming skills with someone and found that she was a better programmer. What's the big deal? In every phase in life, you will find a person who is better that you. Does that mean you regret your decision of choosing your path and quit it. Its good that you are trying to compete with people who are better than you. But be slightly realistic and also observe the people who are struggling way more than you are. A lot of software engineers fail to write a simple C program for bubble sort at the end of the introductory CS programming course. None of them quit. Why should you?

Shashank Kumar

Do it. It only makes sense. Do what you love. If you don't feel great about it, practice! I was terrified when I took on CS and saw that nearly all the guys around me seemed to naturally know what they were doing, but I kept at it because I enjoyed it so much. Though I'm still in school, I'm happy with my decision. My job prospects are good and I like what I do, and that's what matters!

Cassidy Williams

Related Q & A:

Just Added Q & A:

Find solution

For every problem there is a solution! Proved by Solucija.

  • Got an issue and looking for advice?

  • Ask Solucija to search every corner of the Web for help.

  • Get workable solutions and helpful tips in a moment.

Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.