Yes.
You (and some others) may not like what I'm about to say, but you asked for it, so here goes...
In all the years I've been in technology, it has typically taken me about 28 seconds to determine if another person was "fluent" more than one or two levels below the surface.
Those that were were almost always programmers, engineers, or technicians at one time or another. Everyone else was at best managers and business people, or at worst, administrators or posers.
I know some might disagree with me, but a Computer Science major who doesn't want to code is like a dental student who doesn't want to look into anyone's mouth.
To get good in technology, and I mean really good, you must get under the hood, deeply and often. The best and most logical way to do this is by programming. And you will have to do this intensely and for long hours, so you have to love it.
The single biggest difference I've seen between great programmers and everyone else is a pure love for what they do. Intelligence matters, work habits matter, ability to work with other people matters, but make no mistake about it, there is no substitute for passion.
Great technologists love what they do so much, they can't wait to get back to it. They have to check on their work after dinner. They have to review their notes at bed time. They are often the first in the office in the morning and just as often the last to leave. They read and learn voraciously and can't wait to apply their skills to new problems. They're so busy doing what they love, they don't even think of it as "working 9 to 5".
By your own description, you do not sound like this. So do yourself (and the rest of us) a favor and find something you love and major in that. If, on the other hand, it's too late or it doesn't make sense to switch majors, then go ahead and finish your CS major, but please find a direction to follow that puts you in work you love. Be forewarned, though. Unless you're a programmer first, you probably won't make a very good sales engineer or project manager. You may want to consider sales or even (dare I say) proceeding on to business school for your MBA.
CS != programming.
I haven't always loved to code and especially don't love tasks I'm told to do as opposed to ones I invent myself. But when I do get into it, I build great products. It comes and goes with me as I like to wear different hats from time to time.
This applies to everything, whether it's programming or gardening or sales. You can only be great at something if you love doing it. Keep trying different things until you find what you love doing. Once you find that, everything else will fall into place.
Was I in the wrong major? I'm not so sure. I've thought about it a lot. Physics, while not my ultimate passion, was responsible for teaching me a way to think about difficult problems. It "broke me in" so to say, and from then on, everything else became "well, atleast its not physics". Physics taught me to be immensely skeptical but curious. It was inspiring and thought-provoking. Satisfaction didn't come by answering a few questions quickly, but at the end of a 20-hour problem set that I sat with the entire week.
So while I agree with your post (and up-voted you for writing it), I'm not sure to what degree I agree. Because I feel like everyone should have the opportunity to explore many different subjects and find out through the course of learning them what their true passion is. Perhaps the OP will be really thankful in the future for having a CS background which afforded him opportunities he would have otherwise not had.
Well, yeah. That's what this whole exchange is about. The original poster has explored CS. (S)he is done now (and knows it, otherwise this post wouldn't be here.)
Time to explore another subject! The great thing about figuring this out during junior year is that you actually have a chance to do so before you graduate, which will literally save you a lot of time and money. I'd suggest studying physics ;) [1] (Which is indeed an excellent thing to understand, even if the actual job of a physics researcher isn't for everyone.)
---
[1] Though not very seriously. From what little I can guess about OP's tastes, some economics, accounting, law, or even design classes might be more fun.
Also, the whole thing about not thinking of it as "working 9 to 5", I totally agree with you and I will point out that I am one of those people. The only difference is that I don't do that for my code but for my pet projects. I sleep with a moleskin book next to my bed for those times when I wake up in the middle of the night and need to jot down an idea.
However, there are tons of business people who have never done any programming and are still great business people. Imagine how great a business person you will be if you do know the technology.
A lot of business people go the business route and then are forced to do programming from time to time and they really write crap code and it breaks and it's horrible to maintain that stuff. Your code will be better than that.
I had this guy tell me one time, he was a business grad, he said, "Coding is easy, all people should take business courses and learn the programming on the job." But believe me, I had to fix that guy's code and integrate it into the big picture and it was total garbage. I suppose the Dunning-Kruger effect kept him from realizing how bad his code was.
Anyway, point being, I think if your passion is in the business side and you go through the ranks in school getting your CS degree, then you could be unstoppable in the tech world. If more CS grads had the business passion, they'd be better entrepreneurs.
When I graduated in CS with an M.Sc. I said to myself that I didn't see myself in a cubicle coding along all day. I'm also more outgoing than the average hacker so I wanted to work with people more than with machines. So I applied for all the "wrong" jobs. (My thesis was about usability so I applied for usability engineering positions, competing with psych graduates etc. while the industry was desparately looking for programmers with my background.)
It was good that I couldn't get the job I wanted, forcing me to take on a programming job. I became a project manager within three years and a product manager in a larger company within five years. I didn't program anymore at my day job during that time.
But I realized I did love programming so I started all kinds of side projects and kept up with technology even though it was not needed much for my job.
What I'm saying is, you may not have discovered it yet. Get a programming job and if you really do hate it, get promoted to some management position (it's often easier than you would suspect because most hackers don't want to do management). I know quite a few people who did that. They're doing a good job and they're happy not having to code anymore.
I am not a fan of coding, but love what I have learned as a CS major. I am much more interested in cultivating my understanding of how computers really work. Learning about coding was interesting, but it was only a tool for me, a game, another language, or system of representation necessary to develop a higher level of understanding. I would liken it to learning languages to study literature.
I learned how to do calculus and linear algebra by hand, and use it all the time, but i use calculators and matlab to accomplish this.
I love having learned about fascinating topics, such as networking protocols, functional programming and the lambda calculus, security (my favorite), concurrency, software engineering (from design patterns to agile development / project management to versioning systems (which I apply to other aspects of my life now)), all the way down to assembly language, microcode, combinatory logic, boolean gates, flip flops, busses, and pipelines, etc that makes this all possible.)
I still don't love to code, but I know I want to work with computers for the rest of my life, and I'm pretty sure that studying Computer Science was the best use of my time at school.
There are a lot of people who code giant Java or PHP projects and think it's Computer Science. It's not. It's not even interesting.
Computer Science, at its heart, is a form of mathematics. Its progress, at best, stems from that, and is simple, elegant and beautiful.
I've said this before on HN, but there is more to computer science than the math-heavy, CS theory that many people here seem to think is the entirety of computer science. Computer science also encompasses the study of programming language design and implementation, computer architecture, operating systems, networking, graphics and other fields. While math is a part of these fields, math is also a part of organic chemistry.
Perhaps the most fundamental nugget of computer science is that it is everything concerned with computation in both the abstract and in implementation. All of the fields I mentioned stem from that idea, including CS theory.
Dear [here I'll say it for you] But-I-am-not-a-geek: Obviously you are neither interested in the non-people-oriented ;) aspects of "technology" nor are you (or your university for that matter) projecting any signs of aspirations to the heights of application of "mathematics". Switch to a business degree and minor in the non-people-friendly-and-not-for-just-anyone CS.
The OP has indicated no interest in creating "technology", whether in bits or in the abstract, but has indicated his interest in both business and technology. So regardless of the validity of your general points and personal anecdote, you are not really answering his question.
It's a common misconception that programming = CS. It stems from the fact that programming just so happens to be a very convenient way to compute things, so it happens to be what most people who don't understand CS see.
Also, "theory of computation" is an area of computer science theory. There is much more to a CS curriculum than theory of computation.
Too right. I agree with this. I think that the "field" of software has generally gone in three directions.
1. How do you compute it (or Thinking about it)? That's CS 2. How do you plan to build it (or Planning it)? That's Software Engineering 3. Go build it (or Doing it)! That's IT
Sadly, at least at my alma mater, the trend of keeping these three fields separate has reversed. Instead, with budget cuts, the departments have merged under the CS umbrella. I think this continues to push forward the layman idea of these three things being equal because of how they are co-mingled -- but really they are as separate of disciplines as Physics is from Road Paving.
Ideally the number of students and practitioners in each fields should be distributed like a pyramid (a la any other engineering discipline). Most people doing, fewer people planning, and even fewer people thinking.
>Also, "theory of computation" is an area of computer science theory. There is much more to a CS curriculum than theory of computation.
I guess I also agree with this. I've always chafed at calling Computer Science the "Science of Computing" though since it's not a science in the classical sense. But everything I ever learned in my undergrad (not counting unrelated curriculum coursework) was definitely related to "computing" in even a loose sense of the term. I just don't think calling it the discipline of "computing" makes it any more clear since "computing" - the act of using a computer (like a Mac) and "computing" the act of performing computations, are easily confused. The "Theory of Computing" has always seemed to have the best balance while providing context for "computing". But I'm open to accepting other 2 word descriptions ;)
(I do have to disagree with your point 3: building it is very much engineering. I consider IT management and service of computing resources and information.)
I have a feeling that, with the way the three disciplines overlap, when everything finally shakes out we'll probably see the formation of a few more disciplines. We've been doing math, science, engineering and building things for thousands of years, but software for not even a century.
The interesting thing about giant projects (say, hundreds of thousands of lines of code on up) is that they're by far the most complicated systems that humans have ever created. And coping with a million lines of unstructured logic is simply impossible.
Lots of interesting ideas in software engineering -- higher-level programming languages, modularity, abstraction, tiny-programs-connected-through-stdin-and-stdout, service-oriented architectures, et multa cetera -- are direct attacks on the problem of how to design systems that predictably exhibit incredibly complex behaviors.
These systems would be literally incomprehensible, and unbuildable, without the library of intellectual tools we've accumulated over the last couple of decades. That library is still growing. Maybe you or I will get to write a chapter. This is Interesting. But it certainly has little to do with the analysis of algorithms.
If you're good at interacting with people and have a background in technology that makes you very valuable - look at the spread of jobs in consultancy and team leadership (software development end of the scale), technical writing (aka information development), technical pre-sales (explaining technical stuff to non-technical people).
1 - I know of no major whose job outside of college resembles what you study.
2 - I went to Georgia Tech, '87-'92. Yep, a long time, as I was a co-op student and had several entrepreneurial jaunts along the way. I chose EE as a major as I specifically did not want to study CS since I had been programming for 5 years prior to college and the first 2 years of the CS curriculum looked boring to me. I have not used my EE education any more than I would have any other discipline in my entrepreneurial life.
3 - My work as a co-op student gave me clear perspective that what I was learning in school would not be what I would do afterwards. Changing majors would not have effected this. In fact my work as a co-op gave me a better "MBA" than what I feel most learn from the world's most revered MBA programs. I can't say this is the case for all co-op students as I was handed a dream job surrounded by industry veterans that loved to be my mentor. Even with that, I still didn't know what I wanted to be for the rest of my life ;).
4 - Don't worry about your job outlook. It will change by the time you graduate. Stay the course with your CS degree and continue your entrepreneurial thread. A true entrepreneur is one for life. You have no idea what you will do or if and when you'll make a windfall of money.
5 - I don't always like to code, it just happens that I'm pretty good at it and was able to fall back on coding work to supplement my income to support bootstrapping my own projects. It comes and goes. I enjoy a job well done even when it was tough to get motivated. You will most likely have to bootstrap things yourself and coding skills can play a big role.
After graduating with my information systems degree 10 years ago, I started a small software company. Three years later, I was concerned that since my strongest skill was programming that I was doomed to be a programmer. I went back and got my MBA from Texas A&M (2 intense semesters followed by a very light 3rd semester).
Pairing the MBA with my technical background has proven to be very beneficial. I can interact with my customers or occasional clients and really understand their needs from a non-technical perspective and then I can then go back to the office and work with a developer either in pair programming or just in a project management role.
My hair is still wet from finally getting a shower today at 240 pm...
CS is the BEST ticket to get a job that's NOT staring at a monitor from 9-5. If you're willing to do sales, you'll be flying around the country (or at least driving), doing installs, and possibly earning commissions.
If you're willing to do entrepreneurial things, you'll be staring for 10-15 hours a day, definitely not 9-5, then be checking in and on the phone most of the time after you get something moving, but definitely won't be 9-5ing it.
Additionally, for many branches of development, if you prove you deliver, you get some ridiculously flexible schedules by the standards of any other field.
Do I think that means I finished my degree with the wrong major? No, not really. Like you, I'm interested in technology and I felt I could still contribute something worthwhile to that world. The understanding and ability to code are still things that have a huge benefit.
There are plenty of opportunities for people with that background as well -- from technical sales (on the more people-oriented side of the scale) to program or product management at software companies (on the more tech-oriented side). I'm a Program Manager at Microsoft, and while I don't code as part of my job, I feel like I wouldn't be able to interact with developers and testers nearly the same way if I didn't graduate with a degree in CS. You should look into positions like this and see if they sound interesting. Here's a great writeup by Steven Sinofsky, president of the Windows division at Microsoft: http://blogs.msdn.com/techtalk/archive/2005/12/16/504872.asp...
Long story short: Stick with CS. There will be plenty of opportunities to get further away from the technology if that's what you decide to do, but very few opportunities to get back into it if you let your skills wither while you're still in school.
As a matter of staging, get a coding job in a large company. Straight out of college the expectations will be fairly low for you, so meeting coding expectations would be easy. Use the spare time to seek out right-sized communication gaps in projects that are important for your skip-level manager, suggest improving it, provide your budget (I will spend one week on this, this and this) and make a tiny but clearly measurable progress. If you make a decent effort you will be noticed, if you succeed after first three attempts you will be fast-tracked.
Remember that engineers respect other engineers, so if you start with coding and especially a coding achievement you will come from the position of strength compared to any regular program/project manager.
If you're interested at all in starting your own company, which you definitely seem to be, I'd definitely recommend switching majors. The network of people you will meet in a business program will prove far more valuable than CS.
Edit: Good luck in the ACC champ game!
A smart girl I used to work with realized that she was more interested in the business than in coding & testing and left to become a Business Analyst. The job suits her personality much more than being a coder did and she's good at it. Basically her job now entails meeting with customers to elicit requirements and understand their needs from a business perspective. Having a CS background gives her the ability to talk to both business people and technical people and be able to translate between either "world."
In software development today, your interpersonal skills are much more valuable than technical skills. I rarely turn down an job candidate for tech skills: it's almost always a personality problem.
In my opinion one solution would be IT or management consulting. You'll be travelling around, getting to know many people, etc... And I think it gives you the exact tools you'll need if you want to become a entrepreneur later (social network, overview of how businesses are managed, what they need, you get the picture).
Some consulting companies that love to hire CS majors here in Switzerland: - The big 3 (BCG, McKinsey, Bain) - Accenture (seems to be present in Europe only) - ...
I had the exact same conflict, where I didn't want to be programming every day for eternity, and this will give me the opportunity to travel around and see a ton of different companies. Granted, I'm expecting to get worked to the bone and get tired of staying in hotels every week, but it'll be a fun experience that should let me move into something awesome.
I'm a systems administrator, and while I like to program and do so fairly frequently (both for fun, and on the job), I just can't see myself as a programmer, at least in the near future.
I find most "real-world" programming to be quite boring. And doing it day-in day-out would just burn me out of it real quick.
Of course, there are some programming jobs I can see myself taking. But making business apps or web stuff isn't one of them, and that's pretty much the whole market right now.
But being a CS major has helped. From being able to break down a problem and create a concrete solution to the fact that our spreadsheets work better and are easier to read, the things we learned as a CS major are very helpful.
Treat it as learning a particular way of thinking and I think you'll be fine. Treat it as "learning how to code" and you might regret it.
However, now that you've realized other majors might be interesting, I would suggest minimizing your CS courses and finding other courses that interest you. Take a marketing class instead of a class on compilers or something. Get a minor in something you really want to go into. Or, better yet, study something you'll never get the chance to learn about again (at least until you retire).
Edit: Sorry, one thing I didn't consider is that some colleges do core classes for 2 years and then classes for the major afterwards (didn't do this at my college). If thats the case for you, then I'd suggest looking into a CS minor and maybe some other major.
My first job was a mostly coding job (even tough it was really not "just" coding) but it quickly morphed into something else. If you are good and you are interested, there are many other things possible than just sitting at your desk 9 to 5. Nowadays I very rarely code on my day job and when I do, it usually is fun (unless its Excel macros, that doesn't count).
Most things in CS are able to be studied both empirically and theoretically. For example, Scott Aaronson is a CS theorist at MIT who has admitted to doing just a little BASIC programming in school. I took no computer science courses, but now I code full-time.
Are you passionate about something? What is it? Do that, and don't worry about your major.
So I think you have two options coming out of your major in your position. (1) you don't code, but that's ok because at least you'll have a technical background which will enable you to do a lot of cool things (tech consulting, tech ibanking, project management, etc.). or (2) you find out you really do like to code, at which point you're happy anyways.
Last, but not least, most things in college you can learn by simply picking up a book and reading about it. The only critical classes I took in college were several of my upper-division CS classes that I would not be motivated to learn about (ie. how to build a CPU) and accounting 101. As such, whatever your choice, at least you gave CS a shot, and that has defined another set of paths for you given your current disposition.
High-schools need to start informing students that what ever their major is in college, it doesn't necessarily affect what they will do out of college. I know a lot of great programmers who were history majors, and a lot of tech industry managers who were engineers.
What matters in college is that you are taking classes that you enjoy. If you are spending $20,000+ a year to just get a piece of paper, you are wasting your time. you need to find something that makes you happy and increases your knowledge of the world. for me, that happens to be CS, but if you aren't happy taking CS courses, get out now! Find something that you enjoy and do it, you are wasting your time and everyone else's if you are in something just for the money.
Those are just a few examples, but it shows that there are careers out there that require a technical background but don't involve coding.
However don't expect to jump int business/marketing/management" out of the gate with a cs degree. Your going to be competing against mba's, and people with marketing degrees.
First ... So don't take a stereotypical coding job; whatever your definition of that may be. I've personally in general avoided big companies my whole career to avoid what I see as the stereotypical coding job - too many meetings, too much waterfall style development and way too much bureaucracy which I find myself unable to navigate. It's served me fairly well in that I get a chance to do a lot of different things. Small companies need more versatile staff - people who can do systems and network work as well as coding. Who can help design and architect systems as well as coding. These things from my standpoint let me enjoy technology while not going insane spending 12 hours a day producing cogs and widgets. And of course the option exists for you to go the route you are obviously culturing of Entrepeneurism. If you can handle both the technical and business sides you may have an advantage as you can work both sides of the equation. But beware of becoming the dreaded business-guy who produces crappy code and expects his programmers to take it as holy writ from upon high. If you plan on blending business and technical keep your skills and knowledge polished and relevant. (Yes, I've had a few of those. Including one who would "Align" all his code in the gutter [aka no freaking tabs] and freak out if anyone reformatted it)
Second... The degree does not make the man. Personally, I'm an autodidact although I originally pursued a Criminal Justice degree. The best programmers I've worked with personally (keep in mind the plural of anecdote isn't data) have all had either no degree, or had a degree in an unrelated subject. I've worked with chemistry, physics, English and history majors all of whom were stellar programmers. While the fundamentals are important, it's the capacity for learning and doing something that you enjoy that matters much, much more. If you think you have the core concepts of CS at a point that they're useful to you, change majors. Go get a business degree, or one in physical education if it makes you happy.
Just use what you know, and what you think you can learn in the future to best advantage.
Perhaps you can minor in business or other area and see whether that helps with your job prospects better. I think you're "selling yourself" wrong...
Ultimately "the wrong major" comes down to the course content. CS courses can vary wildly - the one at my uni (I never was on it) was very business oriented for example. If your enjoying the course then there seems no reason to consider it the wrong one.
However beware: do talk to people who are happy to be critical of you (and you trust to tell the truth) and find out if you ARE a people person. With the best will in the world every single person I have ever met claiming to be a "people person" generally isn't. I'm sure you are: but it's worth checking :)
Generally though, I'd agree. If you don't want to code, CS isn't the best fit for you.
Although in our field, it is quite unique that what your degree is in really doesn't matter. I several coworkers, who are great developers, with degrees in Political Science, History, and other completely non-tech fields.
Working in a 3 person startup in a loft is very different from Fortune 100 IT dept, different still from writing code in a research lab, or freelancing, or out in the "field" in remote places, or programming lathes and CNCs on a machine shop floor. I know people who started with CS degrees doing all of these things.
Since you're still in college, I'd suggest you just finish your degree and try a bunch of different challenges. If you love coding, you'll find a place where you fit in.
Unless you're planning on continuing education to get something like an MBA, switch majors now.
I'd imagine a lot of your credits would transfer to a program in management. Alternatively, finish your CS degree and go to law school. There is a shortage of lawyers who understand tech. Or do an MBA.
Junior year is the point when most CS programs really start to get difficult if it were just about not wanting to code might you not have figure that out freshman year?
Look for jobs that put you in the more administrative/management side of a software project, and then transition from there to building your own company.
Having CS credentials will give you more street cred with programmers who you'll ultimately try to rope in with a startup you want to found. Without those credentials, they'd likely just view you as "just another business guy with an idea".
You on the other hand would be great for management, which I've seen lots of my friends with CS degrees who don't like coding more into in the work force. Stick with it, there are plenty of jobs for you!
You have plenty with a capital P jobs available to you as a CS major with no love of code.
However, the entry level position with someone in your degree will typically be, pretty much, coding. You don't know enough about anything else to even be marginally useful. (Remember, I have the same degree you're pursuing). Depending on how much you've co-oped or interned, you may be one hair of one bit useful, but chances are you aren't even that, in anything, not even coding, but you're more likely useful in a coding position than in anything else.
Other jobs: MS Has entry level PM track positions
Consulting companies such as Deloite, etc (of which there are lots) have positions which are more about meetings and less about coding (but require ~80% travel).
There are LOTSS of technical sales jobs about. You work on commission though, for the most part, and you often have to have pretty good base knowledge of the field, for some you have to code pretty well, others not so much. Honestly, if you're still a 3rd year, and want to learn sales, I'd go start a Clear wireless dealership right now and sell sell sell (They are in Atlanta at the moment, and appear to be cheap to start. Franchises are the most likely to succeed form of small business out there).
Now onto jobs past the first couple years:
First off: I too am quite "outgoing" as you'd say. I run a small consulting and product development company. But I'm also a deep deep code guy. Liking talking to people does not by any means mean you're going to be one of those unwashed guys in the Old CoC smelling like BO and playing wow all the time in their time off who's height of social interaction is a LAN party or anime fest (sorry to pander to stereotypes).
In our field today, there is a HUGE premium for translators. I land so many contracts because I can explain deeply technical issues to businesspeople in the terms that they care about (risks, costs, etc) while still getting across the technology. If you can get fascinated by the technology as well as working on your communication skills, you can land similar positions.
Secondly: CS is still paying well, and hasn't hit a huge of a downturn as many of the other majors available to you that fit your current skill set. If you're interested in doing something entrepreneurial, then CS is by far one of the cheapest fields to do that sort of thing in. That alone should keep you looking at CS as a means to the end and make you learn how to do something deep.
Lastly: CS is not just programming. While I studied systems and embedded programming, there is a LOT of work in software engineering that is pretty much herding people all day long. I will caution you against spending too much time in that department, because you will strangle any entrepreneurial endeavor under too much process if you get that stuff too much in your blood (it's really better suited to mid-large sized companies).
Additionally, if they haven't changed it massively since I went there, GT is WAAAAAAY too in love with somewhat older, non-MS languages.
Try some python or some C#, or even some AS3. You may be surprised how joyfully productive those languages are for you at this point compared to some sort of matlab/C/java/scheme things you've had tossed at you so far. Hell, buy a mac mini or $999 macbook pro and release a iPhone app or two, Objective C is like the best parts of C and Smalltalk rolled into one. (Although apple is a bit controlling).
PM Email me (iphoneappsiphoneapps@gmail.com) if you'd like to go to lunch and talk, I live in midtown.