On the Fence? Major in CS
lesswrong.com
lesswrong.com
I disagree. If you know you want a technical major but you're not sure which, choose Math. It is the common factor that all other technical fields share, and it will give you the most options. Major in math, then go to grad school in CS, Physics, Economics, or even Law. But majoring in either CS or Economics makes it difficult to go to grad school in the other one.
And most of the "benefits" of majoring in CS that he mentions don't actually require you to major in CS. You merely have to have an interest in programming, which is easier to pick up on the side. On the other hand, try teaching yourself abstract algebra.
Further, the analytical thinking skills that university-level math gives you serve you well in many fields, including computer science. But all that said, if you know what you want to do, definitely do that!
But it depends on the Computer Science program. I think of CS as more of a theoretical approach to computing, but it seems a lot of schools are placing emphasis on the more practical aspects of development (like actually working? who'd of thought). I've heard complaints that universities have just been turned into Java mills.
Perhaps math programs are far different at other schools but here are some of the classes I was required to take, along with a few electives: real analysis, abstract algebra, "foundations" (more abstract algebra), knot theory, topology, algebraic geometry, number theory and so on and so forth.
You'll note that almost none of these are applicable to anything unless you're doing very abstract research. It's impossible to get a job doing anything useful related to these topics with an undergraduate's understanding. It's probably impossible to get a job in these fields with a phd's understanding - math phds have the highest unemployment rate out of any phd, but that's another discussion. If I hadn't been a campus Perl programmer in my spare time I would have been unemployable like the other math majors who didn't take teaching credential courses. The only math I've really used much as a programmer is linear algebra, and perhaps "discrete" math which I didn't learn about in school because that class was offered by the CS department...
In contrast, every job interview I've had they've asked the same algorithm and big-O questions. Those first interviews would have been less embarrassing if I had taken those classes in the first place.
If you're on the fence, don't want to do CS, and want to major in something technical which is not only applicable to every scientific field as well as economics and finance and Google and Paypal, but is also in short supply, major in STATISTICS. Learn C, Python and Matlab in your spare time and take the intro algorithms class from the CS department. Good luck.
Maybe a Stats/CS dual major is the ultimate?
I completely disagree. I am not even convinced that a computer science degree is the best degree to have for a software job, but a computer science degree is useless unless you go into computer science.
The other degrees can yield multiple career opportunities math being the most widely applicable to different careers. Disclaimer: I have a degree in mathematics.
My reasoning is: in the next 50-100 years, there will be a ton of breakthroughs in other fields brought about by sheer number crunching. Biology is seeing this with bioinformatics, physics is seeing it by being able to process the humongous amounts of data thrown off by modern equipment like the LHC, etc. Having a CS degree allows you to work in any of those fields, applying your knowledge of computation to help others achieve decidedly non-useless breakthroughs.
To give an example, the biology department at my alma mater is recruiting CS grad students as fast as it can to help implement some distributed system to simulate protein interaction (or something like that, I know so little about biology that it's embarrassing).
I'm not saying CS should be the default choice of every technical person, but it's not utterly useless to other fields. In fact, I'd say CS is _more_ useful in this case than it is to cubicle software jobs, because in the average Enterprise Doohickey, you aren't doing anything complicated enough to care if your algorithm is O(n^2) vs O(n).
I love software and can't imagine doing anything else but if I had a CS and didn't like it I would need to go back to school and get another degree to do something else. That isn't true with say a math degree.
And as I pointed out in my last paragraph, I'm not saying I agree with the article either... I was just pointing out that CS knowledge is useful outside of CS.
'When's the last time you heard a math person refer to some real-world situation as "a real elliptic curve"?'
I imagine that "a math person" sees real world situations in terms of mathematical concepts constantly. Your thoughts?
I would suggest looking for applications of say, linear algebra or group theory. I don't know enough CS to come up with an equivalently unapplicable topic to match elliptic curves.
I have to disagree. People with a real passion for programming will use a CS program to become even better at programming.
Other people, lured by the promises of big $, can get through a CS program with a bit of effort and at the end still be worse then average coders.
That's certainly what I experienced when I got my CS degree. About half the people loved to program and the other half hated it and weren't good at it, but still got their degrees. A CS degree does not make you into a good coder, it can help you be one, but it doesn't make you.
Presumably two assumptions are made:
1) Getting a CS degree at some level is not the only degree that they will get
2) They are frickin' smart.
The advantages that the author proposes are as such:
1) You will probably learn how to use a computer to solve problems for you at a level beyond using Matlab or Excel
2) You will have a practical and marketable degree with which you can enter the work force if you decide that academia is not where you want to stay.
3) The abstractions that you learn from studying Computer Science are applicable to many common systems beyond those found in computers.
That is my interpretation.
Statistically speaking, most CS majors are doomed to salt mines (or a change of profession entirely.)
See:
http://www.reddit.com/r/programming/comments/83dzc/dear_redd...
If you want a more robust, equally versatile scientific field, I'd suggest Physics or Maths.
Once we've learned fundamental concepts, it's difficult to imagine when we didn't know them, and it's easy to assume learning it was inevitable.
The only thing a CS degree might give you that self-study would not is a good overview of the field. But then, if you're passionate about programming and you've been into it since you were 10, chances are you have a pretty good overview of the field already.
So in that case (passionate about computers since an early age, hesitating about degree) I would strongly recommend something other than CS.
Although the attitude "the bits that I don't know are the bits that I haven't needed to use" is dangerous, since you never really know if you need something until you understand it.
Anyway, your point seems to be if you're going to learn CS concepts anyway, then don't choose CS as a major. You're taking "going to learn CS concepts" as a given. The author did not.
The problem is that most industrial programming is a sort of motorized version of bashing one's head against an ultimately meaningless spreadsheet.
If you're a merely average programmer, you're going to get stuck in a crappy corporate cube farm. You should either have the passion or genius to dive into startups and/or be hired by cutting edge companies, or you should not think that a CS degree is some kind of ticket to paradise.
For that, you also need some degree of extraversion, and a willingness to put up with mountains of bullshit and to work on problems of zero long-term consequence and of scarcely any deep intellectual interest.
> be hired by cutting edge companies
And if you simply want to work on your own creative ideas, instead of being a servant (whether to established companies or to fickle startup customers), academia is the only remaining ticket. And when it spits you out, you're screwed. Industrial research (say, at Google) mostly hires those with a Ph.D. Thus the gatekeeper is the same.
I think that it's more a question of redefining "your own creative ideas" to have a narrower scope. There're plenty of opportunities for creativity even in large organizations, they just have to fit into the overall framework of the organization's goals.
If you look at truly world-changing, creative "big ideas", they often grew out of very limited, narrowly-scoped ideas that someone started exploring. Microsoft came from a BASIC interpreter for the Altair. Google Search came from the idea of downloading the web and just keeping the links - they weren't even thinking of a search engine at that point. GMail came from sticking PB's email into the groups indexing engine. Linux came from printing out ABABA on the terminal. Then they attracted lots of people interested in ironing out the details, and that's what made them world-changing products.
I'd wager that about 99% of the people working on their own creative ideas in big research labs or tenured professorships will never have anything come of those ideas. That's the nature of research: almost all new ideas are crap. But in the process, they explore lots of little ideas in related spaces, and some of those may prove useful.
I don't consider any of these things "big ideas." Major enterprises, yes, but not ideas. Do you consider the Egyptian Pyramids an "idea"? With the exception of Google's search algorithm (a work originally intended as mathematical, I might add) there is not a single whiff of originality in any of them.
If you want to understand what I mean by ideas, think of, say, "Green's Theorem." I do not yearn to work on "world-changing products." I am simply looking for a path to actual intellectual freedom.
I understand that my chances are cosmically slim, but it bothers me that most people are entirely unwilling to even acknowledge that the problem exists. It is almost like some psychological defense mechanism is at work. Nobody seems willing to admit that they are a servant - and a Porsche-driving and McMansion-occupying servant is still a servant, in that his time is not his own to dispose of and his livelihood is at the mercy of others.
Anyway, I don't really consider it a problem, because the ability to work on ideas of your own choosing already exists. Simply spend far less money than you make, and bank the rest as time. So if you make $60K/year and live on $20k/year, then for each year you work you get 2 years to do what you want.
I did this and used the excess time to start my own company, which failed miserably but was still an excellent experience, one that I'd recommend anyone take. (Plus, it led to getting a job with enough of a raise that I could still save 75-80% of my take-home pay, yet do so without having to live with my parents.) A few of my friends from college have done so as well - that physics Ph.D baker managed to save roughly 40% of his income on a grad school stipend, which I think is pretty impressive. Best of all, you're not a servant to anyone - you're trading your time for time to pursue your own interests, and nobody's forcing you to make the trade if you find it objectionable. You can't get something for nothing, though.
Subtract the time you would spend on the next job search, and also the time you (or at least I) would spend crippled by the anticipation of it.
> nobody's forcing you to make the trade if you find it objectionable.
I would say that the threat of death by starvation and exposure fits the definition of "force" pretty well. (Assuming the trade you're talking about is employment in general.)
> You can't get something for nothing, though.
Much of Hacker News consists of people who eventually hope to live their lives getting something for nothing (namely, living off the interest from a princely sum earned from the sale of their start-up.) The entire ruling caste of our society continuously gets "something for nothing."
Some data points (hey, the singular of data is "anecdote"):
My sister's boyfriend has a Ph.D in biomedical engineering. He makes less than half what she does, post-doccing. His day job consists of writing papers that the tenured professors get credit for.
My roommate has a degree from Cornell, also in biomedical engineering. She runs community outreach (i.e. posting on FaceBook) for a youth soccer nonprofit.
One of my best friends from college is working on his Ph.D in physics. He is planning to become a baker afterwards, because there are very few jobs for physics Ph.Ds.
Another of my college friends has a masters in mathematics after dropping out of the Ph.D program. He teaches math to high school girls at an elite private school.
My dad has an MIT Ph.D in nuclear chemistry. He became a househusband when I was born after finding the corporate world a soul-crushing mess of office politics.
One of my netfriends has a degree in biology. She kills rats for $30k/year and considers herself lucky.
Another netfriend has a degree in biochem. She works as community manager for a Web 2.0 fashion site after a stint as a UPS store manager.
It's necessarily true that professions will seem more glamorous as a kid than they are in real life, because you only hear about the glamorous ones. They wouldn't be noteworthy if they were just like what your parents did. But most people still manage to be happy in their job, even if its nowhere near as exciting as they imagined when they were young.
Heck, I work in what most people would consider a fairly glamorous programming job (Google Search, as a UI engineer writing new features for the search results page). Y'know what the majority of my workweek consists of? Tweaking CSS so an element is no longer off by 1 pixel in WebKit. Writing tools to automate 5-step long build processes. Getting things to work with other teams' features that basically invalidated all my design assumptions. Figuring out why my new feature is suddenly broken in IE8. Getting yelled at (metaphorically) for breaking the build.
This really isn't all that different from what any other web developer does for a living. Everybody's doomed to the salt mines: it's whether you enjoy mining salt that matters.
Getting graduate degrees learning stuff that you cannot apply to gainful employment may seem a waste, but it is difficult to predict how educational opportunities will benefit you.
I think that one was actually a cold call...she applied to like every job in San Diego before finding one that would take her. Persistence pays off.
People with professional degrees are an odd case, because they often end up with so much debt that they have to go into their chosen field. I know a couple law grads that really would rather be doing something more rewarding than corporate law, but can't because they're $200K in debt and that's the only thing that pays well enough to pay it off. 'Course, they can make boatloads of money and pay it off in 3-4 years, but then they get the Stockholm Syndrome effect and can't imagine not being a lawyer, after all they've put into it.
If I were giving my 18yo self advice, I'd suggest majoring in physics but taking the minimum required courses. With a light core schedule, fill up the rest with economics, writing composition and history. Maybe design.
On the other hand, PhD programs in CS are worthwhile.
It's interesting to keep this in mind when reading Kaczynski's "Industrial Society And Its Future". He spills a lot of ink on how humans in industrial societies waste a lot of time and energy on "surrogate activities" rather than focusing on their own survival (which is no longer a challenge). It sounds a lot like the frustration of an academic who sees no use for his increasingly arcane work.
Most of CS also revolves around making things easier (correctly, of course) for yourself.
If there's a method that will get things done with less work, you are usually encouraged to take it, provided it gives the right output - nobody cares too much unless its completely slow or bloated.
That was the biggest reason for me over going into engineering - CS actually rewards you for thinking outside the box, and it thinking like that really helps most of the time.
... where on earth do you work? Dont get me wrong, I love CS; however, I dislike when people romanticize it. Read thedailywtf.com over and keep in mind that there is no shortage of stories ever to get posted on that site. and as for:
- "What invariants must this process satisfy? What's the cleanest way to organize this structure? How should these subsystems work together?"
I know a lot of people who graduated with me that I would not trust to ever answer any of those questions.. I have seen their programs and do not believe they know a good way to cleanly organize themselves out of a cardboard box.On the fence? Major in Math.