Joel Gives College Advice For Programmers
An anonymous reader writes "Joel on Software explains what college students should do with their lives. Interesting to note is how he justifies such trivialties as GPA scores and well-roundedness, the very things comments here tend to think are overrated. In short, learn to write English, learn to write C, and don't worry about India!"
nteresting to note is how he justifies such trivialties as GPA scores and well-roundedness, the very things comments here tend to think are overrated.
The anti-intellectualism here on Slashdot is extraordinary. I must admit to being rather surprised whenever I see comments like "PhD's dont know nothin" (sic), or a recent post saying I hate college with poor grammar and spelling. Responses to it basically stated that a college degree was worthless.
Amazing.
Visit Jonesblog and say hello.
Actually write code. Get off of your donut encrusted seat and write code! Experience! Stop complaining... Arrgghhh.
Please, please, please! Learn to write English. My wife delights in showing me papers she's had to grade from freshman composition classes that are written entirely in txt msg spk that U or I do ! understnd.
Seriosly, bad communication skills generate huge costs in lost time, and legal fees when something goes wrong.
Trying to use sarcasm in text-based forums does not work.
My advice would be to not take college too seriously. You can learn much more efficiently when you pursue your own interests in your own time. Use the college to get a degree and meet people, and your spare time to study.
So far, all the jobs and good friendships I have gotten have been due to what I do outside school hours. I do the minimum possible for assignments I don't like, and score good grades on the ones I do like, because I do them with enthusiasm.
Of course, I am one of those people who love to learn and experiment. If you're not that kind of person, most of what you learn probably comes from school. YMMV. HAND.
Please correct me if I got my facts wrong.
You have your whole life to work. Even if you think all you ever want to do is program, nothing beats those college summers for traveling, working interesting jobs like at summer camps, outdoor guides, etc. Live a little, you have your whole life to work. Obviously Joel is stressing internships for selfish reasons anyways. There's more to life than just your job. I love programming and I love computers, but I also loved those college summers I spent working with kids at summer camp, teaching swimming, camping, and hiking, traveling with my friends, going to the beach. Enjoy it!
"Karma can only be portioned out by the cosmos." -Homer Simpson
they have to take all these unrelated classes.
That is what college is.
It isnt training for your job, that is what other post high school education venues are for.
College IS the extra classes plus your expertise.
it is a combo of both so if you dont like it, college may not be the best choice for you.
value exists in those classes so enjoy them (even the pain in the ass ones)
I'm not a programmer (basic doesn't count anymore does it =), I am admin + help desk + repair tech + ...etc... one-stop-shop in our company. I do everything, and after spending 8 hours 'working' on PC's and various projects (MySQL, PHP, web) I go home and I spend 6 hours working on PC's.
About the only thing I can't stand to do is the 'helpdesk' role to my family.
"Mom, I don't know what 'thingy' you are talking about or how you broke it in the first place!"
That just makes my skin crawl.
"The price good men pay for indifference to public affairs is to be ruled by evil men." ~Plato (427-347 BC)
I've heard from too many people that punching out code all day at work makes them very hesitant to even touch a computer at home.
I've been 'punching out code' at the same job for the last 3 years, and nothing could be further from the truth. You write code at work, then go home and play some Age of Mythology or even write some code for my personal projects; frankly my computer is my lifeline (queue the jokes). On top of that, I'm married and have kids - fact is you don't get a whole lot of free time when you've got a family, so I look forward to my free time on my home machine, despite 'punching code' for 8 hours a day at work.
Tech, life, family, faith: Give me a visit
I wish I would have read this piece before starting college. I have to say I agree whole heartedly with the author. I was just offered two seperate positions not because of my programming skills but because of my ability to communicate to others.
If there is one thing I want to say to those looking to go into Computer Sciene or a related field it is learn to communicate! Learn to write, and write well! Learn to communicate effectively with other human beings! This may require social interaction that involves not being at a computer. Get out of your room, or parents basement, and talk to people! Go to parties and talk to girls, get over any notions of fear or doubt you have. Be confident. Strong communication skills will get you further than you think.
The hiring manager at the company I accepted the offer from said, "We chose you because you could talk to us. You didn't talk to us like a programmer, you talked to us like a human being."
-J
Learn how to communicate.
That means learn how to express yourself in a way that others will understand; tailor the message for your audience so they'll "get it."
And learn how to listen to what's being said; others may not be adept at expressing themselves, so if you can learn how to get to "what they mean" instead of just "what they said," you'll be much better off.
And the cool thing is, these skills will carry you through your career, no matter which field you study.
Diplomacy is the art of saying, "Nice doggie!" until you can find a rock.
My company gets thousands of resumes a week. We absolutely need a first-line filter. It is GPA.
In my career I have found that GPA is a very good indicator of a whole host of things. When I get a pile of resumes on my desk, I skip the 4.0s and throw out the 3.0s, if nothing turns up in between, I go back to the 4.0s.
4.0 = uptight asshole or passionless droid
3.5ish = smart but obviously had to work at it
3.0 = probably only excelled in things s/he liked
3.0 forget it, not worth my time because you shouldn't have been in college if you can't maintain a high-B low-A average.
The 3.0-3.5 range implies they are not suzuki-method droids, but actually had to work as proof by some low grades (so not everything came easily to them), OR, they cared about something enough to get an A and demoted things they didn't care about. This shows promise in my eyes.
Regarding college 4.0s, my gripe is that they tend to be passionless about what they master, but they seem to master quite a bit. I sound like I'm knocking them, but not really: most 4.0s in college studied their ASSES off and never developed a social life. While this is admirable, there is more to excelling at a career than studying what's in a book.
I can easily recall 5 superperformers at my company (4.0 doctorates from top schools with 3-5 years experience at work), and they all share the same traits: stubborn, egocentric, verbose, scared of precision error greater than 1e-10, and always in the goddamn way of deadlines!
https://www.accountkiller.com/removal-requested
When in college try not to focus all your energy in one spot especially your strongest areas. You're already good at that, if you work at that your GPA will go up .1 . But, if you work on your weaknesses, that's where you have the most room for improvement and get the most rewards for the smallest efforts.
You can legislate morally you can't legislate morality
I know several folk who had 4.0 through at least their undergraduate years, and some through a Masters or PhD. The majority of them are real people, not ubergeeks. They communicate, they have fun, they can make jokes with or without computer references, they get along with just about everyone short of Osama.
Anyone who ignored these peoples' resumes because of the 4.0 would be an utter fool.
Yes, I've known a couple of the types the parent referred to, but only a couple. Of course, now that s/he avoids 4.0 people like the plague, s/he will probably never meet another, and thus the percentage of 4.0s that are weenies will remain fixed in this person's experience, as a self-validating proof.
Beware the stereotype!
I'll never forget one of my CS profs telling the class in a 400 level that a number of the 100 and 200 level profs have found that many of their incoming students can't remember how to do long division. Many of the students I see at my university have terrible HS educations, and we are one of the top public schools in Virginia. The ability of so many that I have seen to coherently argue a point, especially without resorting to profanity and ad hominems, is simply non-existant at my school.
What's interesting to note is how well people who take advantage of the liberal arts nature of our university tend to do in CS. Of course perhaps these people value learning for the sake of learning, rather than seeing money signs when they're selecting their course schedule. I'm not sure exactly which it is.
Communications skills would seem to be the easiest way for Americans to differentiate themselves from foreign outsourced competitors. If we can eloquently communicate what we are doing to our employers and write very clear documentation, then we can add another reason to stay with us. That's not to say that Indians naturally have poor communications skills, in fact the few we have here are probably more adept at this than a number of my American peers. What it does do, is it makes it harder and harder to justify moving labor overseas because it makes it only about money, not capabilities.
One or two classes on technical communication can really make a big deal in how you are perceived if you take advantage of them. Isn't that what has been holding back OSS for so long? Arguably what has kept companies like Microsoft and Sun in the lime light for so long has been their ability to communicate to business people and developers.
Joel's assumption seems to be that every CS graduate wants to be a working programmer and a clone of Joel. Look at where Joel is in life and think twice about whether you want to be there yourself. He's running a software company producing bug tracking software, one of dozens such systems. And occasionally, he preaches his depressing philosophy of how to add more messy code to existing messy code. Sure, it may bring home the bacon, but it seems pretty meaningless to me.
Perhaps Joel's problem is that he doesn't see how exciting computer science can be. If all you do for a living is reimplement tired old ideas and trying to make the best out of inferior tools, I suppose that's not surprising. I'm sorry that a course on "dynamic logic" scared him away from grad school, but his poor choice of courses for his interests isn't the fault of grad school.
My advice is: do what excites you. Think about what you want to look back on in a few decades and say "this is what I accomplished". If you merely want to make a living, sure, just follow into Joel's footsteps and re-implement the wheel; that's a pretty safe bet for making money. But if you want to do something meaningful, you'll have to use your head and take risks. The choice is up to you. But you do have a choice--you don't have to become a little Joel clone.
I've heard from too many people that punching out code all day at work makes them very hesitant to even touch a computer at home. For those who are currently computer programmers/engineers, would you say you really enjoy your job, or does it get extremely old and tedious after awhile?
Short answer: it depends.
Long answer:
When I was in elementary/middle/high school, I used to spend long hours programming and couldn't get enough of it.
When I was in college I found myself too distracted by other things to program.
When I was working full time (programming) for a company, even on projects where I worked solo on design and devlopment, I was definitely too tired/spent to touch a computer at home (in fact, I didn't even have one at home -- but this is before the Internet made "being connected" all the time a necessity).
However, as soon as I started doing independent contracting (and working from home) I found that the freedom to schedule my day allowed me to set aside time to program for pleasure. I wrote a couple shareware games, made no real money, but enjoyed having turned one of my passions (programming) back into a hobby.
Now, I run my own company and spend all my time programming -- in essence I've come full circle and now my hobby is my career. From this point of view, I completely agree with Joel's quote, with a caveat: if you enjoy programming computers, and your programming is not "owned" by someone else, then you are in an extremely fortunate minority of people.
So, to answer your question: yes, I really enjoy my job and it's not old or tedious in the least bit, but, it took me some time to get to this point.
(Disclaimer: I skimmed most of the article except for the part on grad school.)
With all due respect for Joel, I found his remarks on grad school a bit discomforting. It's not that I don't like Joel and I think he has the occassional interesting word but I'd have to disagree with his remarks over why/when he chose NOT to go to grad school.
I went to Berkeley and worked in the research labs in their CS department. From what I saw the CS grad students did very interesting things. At the time some of them were doing high quality streaming media, using millions of robots the size of pennies, building the next generation peer-to-peer networks, etc. Sure there will be your handful of professors who want to prove that 1 = 1 but most others in tech are out there to do something cool (examples: Sun's RISK processor (berkeley), Google (Stanford), Inktomi (Berkeley), etc.)
I'm not an expert on this but from what I've heard it only pays off if you go to a GOOD grad school in CS while the mediocre ones are probably equivalent to going to a good undergrad school. I'd say that sounds about right.
"Injustice anywhere is a threat to justice everywhere." - Martin Luther King, Jr.
Either I don't know what a real job is or you took some really shitty CS classes. First off you don't learn dick about CS as a help desk lackey. As a programmer you honestly learn little more aside from bad habits that become hard to unlearn when you are shown proper theory.
CS != fixing computers and CS != programming. My advice to you go to a real school, the kind where you are constantly being challenged and the kind where you are taught actually CS not just here is a tour of programming languages. Its people like this that are ruining Computer Science as a science, instead they look at it just as a trade ie programming.
Well, I won't take seriously an advisor who pretends to care about programmers' English-language skills, yet considers "they" a neuter singular pronoun.
Whether you like it or not, "he" is the neuter singular pronoun in English.
If you wish to avoid offending gender-sensitive people, simply use the plural. if Joel really values literacy as he says he does, he should have written:
I won't hire programmers unless they can write, and write well, in English.
As an advertising/marketing student, the most important thing i've learned is "KNOW YOUR AUDIENCE". It is a philosophy that applies to every aspect of your life, since you always have an audience. If you know your audience, you know how to approach things with them, and can get better results.
Wonder how this can help you? Well..for starters, with building your resume, talking on the phone, and landing an interview, and then hopefully nailing that interview.
And remember the ever important 80/20 rule. Its 80% WHO you know, and 20% WHAT you know. And while I wish it weren't true, it is, and the sooner you learn that and accept it, the sooner you will go further in life.
Buy Steampunk Clothing Online!
What a fucking hypocrite. His first point "Learn how to write before you graduate" is totally fucking blown away by his run on sentences. Jesus christ, I thought that I wrote bad. Looking at this guy I can clearly see that I don't need all those writing classes I planned on taking.
The rest of his points seem to be on the "obvious" side; who the hell is this guy? Maybe I'm not up on all the writings and books but I've never heard of this guy at all. He obviously needs to go back to college for writing if he has anything to do with publications. I was disgusted after the first two "paragraphs", if that's what you can call them.
I'm f#$king magic!
Kudos to Joel for emphasizing the Big Picture. In the real world, you succeed by 1) doing good work every single day, and 2) selling yourself. You sell yourself best by communicating well -- a clear vision backed by a clear voice will do more to gain you respect than anything else, technical prowess included.
As Joel says, Linus Torvalds' success probably lies *equally* as much with his communication skills as his technical abilities. His accomplishment was not so much the design of Linux as the catalysis of a far flung herd of cats into inventing the next 'insanely great thing'.
Excellent advice from Joel. Slashdot, get a clue.
Randy
" I would never listen to technical advice from someone who puts: body { font-size : x-small;"
And you expect people to take you seriously when you care more about the font size than the content? Some people may not be design experts, but they may have interesting stuff to say.
"When the only tool you own is a hammer, every problem begins to resemble a nail." - Abraham Maslow (1908-1970)
I bet Mr. Krishnan writes better English that Joel writes Hindi.
Disclaimer: I don't know which is Mr. Krishnan's first language actually is. For an Indian it could be one of about seven. Hindi is just a likely candidate.
I often compare it to being a lawyer (as any analogy, it breaks down, but it's useful to consider). Like lawyers, tech people have a basic skill/knowledge set that is unfamiliar to execs. Like lawyers, we are highly specialized in our training and in applying intellect to solving complex and comprehensive problems. And like lawyers, mistakes can be extremely costly. Unlike lawyers, however, we do not give programers any kind of insight into business structures, concerns or patterns in school. As a result, many developers don't really know where they fit into an organization, how they can partner with other business units, or when to compromise "ideal" for "useful"--i.e. when expediency is required and how to evaluate trade-offs from a comprehensive perspective. That leaves us wandering a mine field with no idea that tap-dancing isn't very wise...
Second, the "job prospect" value of a degree, GPA, certification, etc, has nothing to do with the quality of the subject matter. It has to do with the fame of the place. A Cisco certification is going to land a network engineer a job, even if they know bugger all about networks but can pass exams without trying.
These two should never be confused. Good scientists, researchers and engineers will remain good, even if they have little or no paperwork. You can identify them because they get good results. Crick and Watson didn't need certifications in genetics to do DNA research, they needed some modelling straws, a few stolen photographs, imagination and phenominal intelligence.
On the other hand, hiring managers and Human Resource divisions aren't equipt to evaluate candidates on practical skills, because they can't be expected to be experts in all relevent fields. They rely on test results, exams and other easily compared data. They have to.
The best "college advice" anyone can get is to learn how to learn (important to actually DO anything) but ALSO focus on the quantifiables (because you'll never get a chance to DO, if nobody believes you CAN).
The day and age where people with actual skills could make their own opportunities has long since passed. There are no "self-made" people out there. Success and failure depend on a twisted mess of trust and codependency in the job markets, COMBINED with actual skill in the field. You need both. (Stupid, but that's the way it is.)
High scores only mean you can do exams of the type you were set. "Multiple Guesswork" exams are common and require no skill or knowledge beyond being able to eliminate the obviously wrong. (In a typical multiple choice exam, you're set 4 possible answers, of which two are often so far out that they're tied to the paper with a bungee cord. By eliminating those, you're guaranteed a score of 50%. If you can eliminate "unlikely" answers, you'll do 75% or better.)
"Good" practical tests of real "real world" cases are rare. Practicals are typically simplistic and free of typical problems. However, those "problems" are often not "noise", but characteristics of the cases in question. So, eliminating them renders the case study meaningless.
eg: Programs that can't run into memory problems, require CPU cycles, or have sync problems with threads, are not real. Everything costs, and programming is about figuring out how to maximise the benefits while staying in the costs - complexity, cycle count, financial expense, RAM, etc. The reason for the bloat in modern programs is that costs are neglected in education and therefore understanding isn't important to get a good test score.
Other examples would be latency-free infinite-bandwidth networks. Or parallel code that doesn't consider Ahmdal's Law. Or microkernel OS' that don't consider the expense of the added layers. Or real-time systems where components are running at such disparate speeds that they cannot function together.
If you don't know why things happen, you can't know what to do about them. Having a bunch of "facts" is merely having a religion - received wisdom with no backup or proof that all too often conflicts with what people actually see.
You've got to be "initiated" in the religion of the job market, if you are ever going to be hired. But you cannot afford to believe in it, if you expect to do more than blindly and robotically follow a set script. Sure, many employers WANT robots,
It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
Sorry, but you're wrong.
I love my job (control systems engineer).
I work a 40 hour work week. Sometimes 50, sometimes 30, it balances out to 40.
Am I married? Do I have a kid? Own my own place? Not yet, but someday; nothing about my job would prevent me from doing these things.
Find the job you love, and the rest will happen. The American Dream is *not* slaving away doing something you hate so you can own a bigger home than the next guy. At least, it shouldn't be.
---
Mod me down, you fucking twits. Go ahead. I dare you.
(I read with sigs off.)
I would say this in response: If all you're doing is banging out code all day long, you may not be a very good programmer, and you definitely have a crappy programming job, but don't worry... soon you'll lose your job to a happy Indian.
OTOH, if you can get into an area which requires real analysis, puzzle-solving, thinking and designing, you've got a great programming job and you'll enjoy it.
I'm happy to say that most of my career has been spent in the latter category.
Proverbs 21:19
I was wondering if the university you attend matters in the long term? I'm a freshman right now at a university close to home with a scholorship. The university isnt known for computerscience and the cs classes are really easy. I was wondering if it is worth it to transfer to another (more expensive, well known) university.
I think the answer is "it depends." Some hiring managers might put great stock in the "eliteness" of your school, some may not care at all. Myself, if I were doing any hiring, I admit I would be somewhat impressed by someone who graduated from Stanford or MIT, and might be a bit more tempted to call those folks in to interview. But I certainly wouldn't exclude someone just because they went to North Carolina Central or East Carolina (or, God forbid, UNC-Wilmington) instead.
All said, I think that going to a more prestigious school is more likely to help, than hurt, your career opportunities. So if you are accepted to, and can afford, the more prestigious school, I'd say go for it.
// TODO: Insert Cool Sig
I usually like what Joel says just enough to keep reading the essays. This is a pretty good one.
When I'm interviewing a recent college grad, though, I don't look at GPA as much as he does. Too often, high GPA indicates that a student figured out what the professor wanted to hear, and said it in the way the professor wanted to hear it. This is even true in the hard sciences. While you won't get a high GPA without having some grasp of the material, the difference between a 3.0 and a 4.0 is often how much you pander to the professor or TA.
But the seven points of advice are right on, especially "Learn to write" and "Get a good internship". To these, I would add "do something career-related outside your courseload".
There are many recent CS grads who did well in coursework, can write acceptably, and don't stink up the interview. I want one who has enough drive and intellectual curiosity to do something beyond what's required.
If you've got an industry-related blog or website, or you've written a couple of programs out of curiosity or for your own use, then you have a major advantage over your fellow students at interview time, at least if I'm doing the interviewing.
First, I think it's also to learn macroeconomics, if you plan on becoming anything more than a cubicle-dwelling drone. If you want to take mattesr into your own hands, you have to have a good understanding of the big picture.
Actually, if you want to take matters into your own hands and start a business, you will need micro. I took macro, and while I understand why daily newspaper a lot better, I still wish I knew the business basics that are covered in every micro class. Sure, I can read "microeconomics in 30 seconds" or "microeconomics for idiots," but those are a poor substitute for a good teacher, a good text, and good assignments.
Probably the most talented debugger I've ever known is not coincidentally a somewhat poor programmer. His ability to understand complexity and obfuscation is second-to-none, but those same skills work against him when he writes his own code, because what he sees as "resonable complexity" ends up resulting in unmaintainable code for the rest of the programmers.
Knowing what happens under the hood is a good thing. Writing code like you're under the hood isn't.
I think this Joel guy gets far more coverage from Slashdot than he deserves (It's not his first story covered by /.).
:)
And I don't agree about his C thing either. If you really want to know how the machine works, why not learn directly assembly instead? And when you actually want to produce something, switch to Python
perception is reality
The article really does describe what hiring managers look for because it is what they did themselves. Time and time again, I look back at what I learned in college, and when I've hired engineers. It's EXACTLY what I look for when hiring. The only thing I don't completely agree is the whole C argument. C is fine, but its just another language. For you to really understand what a programming language does, take a compiler course. Now you will know what the computer does to your language, and what the assembly looks like. Who cares if its C, C++, Java, C#, Scheme, LISP, ADA, or FORTRAN if you know that semantically, they all eventually get down to the same low level assembly, and theoretically, are equally as powerful? Languages are different though, as the constructs on top of them make it more useful in certain applications than others (so let's not get into a non-theoretical argument of how powerful a language is). The other suggestion that I'd recommend is to take an operating systems course where you actually write a scheduler, memory manager, etc. That foundation will allow you understand the fundamentals of an operating system and help you extrapolate out to what modern operating systems do, and how the affect your systems as a whole. Also, it is possible, and probable that you could get a software engineering job without many of the things that Joel espouses, but to be honest, the best overall engineers (business decisions as well as technical), do most of what Joel writes about in his article.
If you had attempted to take classes while you believed that the degree wasn't worth anything, you would have slacked off, and possibly have subconciously attempted to prove yourself right.
Actually caring about what you're doing, be it your work, or you school, can make a significant difference in how well you do it.
My former boss's roommate said that he was glad that he didn't go straight to college after high school -- because it gave him a chance to appreciate how important the degree was, and if he had gone straight to college, he probably would have spent all of his time partying, and have failed most of his classes.
Build it, and they will come^Hplain.
I think that you are trying to brainwash people by trying to imply that it is impossible to somewhat enjoy one's job. I like my job, am paid well, and get ample time off. I guess 'massa' just brainwashed me.
The anti-slashdotism here on Slashdot is extraordinary. I must admit to being rather surprised whenever I see comments like "slashbots don't know nothin" or a recent post ...I hate slashdot with excellent spelling and descent grammar. Responses to them are generally stated that slashdot is worthless.
Amazing.
GENERATION 26: The first time you see this, copy it into your sig on any forum and add 1 to the generation.
Instead of listening to Joel, whoever he is that admits "I'm so hopelessly out of date that I can't really figure out AIM", here's some better advice from young programmers. 1. Don't go into programming. You cannot compete with off shore programmers. 2. If you are dumb enough to do anyway, always get jobs at the top notch companies, ie Fortune 100. 3. Who you work for is more important that what you do. 4. Worry about your career early on and don't just think that doing a good job is all there is. 5. Work on your own product and company along the way so you can leave the rat race behind. 6. Never stop learning. 7. Learn about selling and marketing. 8. Always think 80/20. 9. Don't confuse urgent issues with important issues. 10. Always use feedback to improve your thinking and actions. If you're still programming at 45, you screwed up big time along the way. :-)
-Nazz
In general, I approve of Joel's recommendations in this essay. That said, I would make a couple of additions:
1. Take an introduction to finance
Learn how to read and know the differences in a financial statement including a balance sheet, an income statement, and a cash flow statement. Learn the differences between operating and capital expenses. Learn how the income statement can say you are making a profit, when the cash flow for the period is negative!
Finance (along with the law) are the programming languages for the operating system called business. If you understand them, you can hack them just fine!
2. Take an introduction to business law
Learn what is and isn't a contract. Learn what a tort is. Learn the differences between a patent, a copyright, and a trademark.
The Legal System (for good or for ill) has a tremendous influence on our lives. Being illiterate in the law can result in self-inflicted wounds!
Yours,
Jordan
"what's to stop your employer from opening a programming shop in Bangalore and paying $7,500/year for the same job?"
... you get my drift. Attempting to perform this function correctly with a company that's in a time zone more than 13 hours different from your own is difficult to say the least. Not to mention that you now have to pay someone to be awake at night to interact with India, worry about security of your proprietary data, and travel occasionally to India just to keep things moving along. All of those things (and more) cost money and time (more money). So on the whole, you'd better be sure that the cash you're saving on compensation in the US more than makes up for the transaction costs of sending the work overseas.
An excellent question! What indeed? There are a lot of reasons not to send work overseas, but I'll just touch on two here: transaction costs and knowledge theory.
One of the reasons that companies exist is to reduce transaction costs in achieving a goal. If we assume the goal here is to develop software to a particular set of requirements, then one of the transaction costs involved in getting to that goal is the requirements discovery and specification. It's my experience that discovering and specifying requirements is a job that requires a lot of face-to-face interactions, meetings, document revisions, more meetings,
The second reason it doesn't often make sense to send development work overseas is based on the knowledge theory of the firm. In a nutshell knowledge theory asserts that firms exist to facilitate sharing knoweledge in a trusted environment. Software development is really just the embodiment of specific knowledge into an automation process. It's tough to share knowledge with someone who's working when you want to be sleeping and vice versa. It's even tougher to do it when you've got to rely largely on electronic communication (instead of meat-space interaction) to transfer this knowledge from your head into the software via the outsource company.
Both transaction costs and problems with knowledge transfer (really just another transaction cost if you want to look at it broadly) are barriers to moving this kind of work overseas.
I responded to that thread, but I did not state that a college degree was worthless.
A college degree is supposed to represent something, namely an "education". Ideally, an "educated person" should be a well-rounded individual, with a solid understanding of civilization and how it came to be that way. This includes a basic understanding of a wide variety of subjects, from economics to biology to history to mathematics, with no major "holes" in this liberal arts foundation. An educated person should have a well-developed ability to think critically, and should have established a solid rapport with the innate self-education apparatus that all humans are born with.
Learning how to self-educate is the most important lesson of college, because that skill will be valuable throughout life. It involves using whatever resources you can get your hands on. Those might be classes, books, newspaper articles, people, the Internet(s), trial-and-error experiences, etc. Each resource has a lesson to teach.
In today's world, however, more people go to college than ever before, and as a result, the degree has been "dumbed down" to the point where it no longer means that a person is "educated".
A college degree is not (and never has been) the one true path to the end result of being "educated". There are many other ways to get there, and this is what people forget in our metrics-obsessed society.
That was my main point.
I always shudder now when I see advice written for graduates and career-starting people.
The advice is almost always obvious "Get a good GPA!" but never practical "if you didn't get a so-good GPA, here is how to compensate..." It is almost always written by people who were lucky in life (money, connections, looks). It is almost always not applicable to people like me.
So here is my four 2.079 Yen.
Advice for people seeking jobs out of college is like advice on losing weight. It is everywhere, it is always the same, yet people keep packaging it in different ways. If you are getting career advice from Joel, then you are not utilizing your university to it's fullest. Shame on you! What are you paying tuition for?
If you want advice about getting good jobs when you graduate, talk to your professors who teach courses in subjects you wish to pursue in your career. Ask them. And do it your freshman or sophomore year.
The only people who start asking about how important a GPA is are those who are struggling with their GPA. My advice? Get as high a GPA as you can. That's it. Enough said.
In my experience, people who are interviewing you for the job are just as likely to be dumber than you as they are to be smarter than you. Don't assume anything on their behalf. And act like an adult. When I was in boot camp, I told my mother that if we had only listened to our mothers, boot camp would be half as long. Why? Because they taught us things like stand up straight, look people in the eye, comb your hair, don't walk and eat at the same time, tuck in your shirt, etc. etc. The same applies to interviews. Sounds trivial, doesn't it? You would be amazed...
Realize that a university is a social institution, with all that that implies. Our society places certain assumptions on a diploma and the people who carry them. (Whether those assumptions are valid or not is irrelevant to your situation, but knowing what those assumptions are, is.) It cuts down on the "get to know me" process. The lower-tier school you go to, the more you have to prove yourself. The less contacts you have, the more you have to prove yourself. The less work experience you have, the more you have to prove yourself. This is not a whine or a fatal blow to your opportunities. It is a fact.
Which leads me to my last piece of advice. Depend on nobody for your success but yourself. This does not mean to burn all bridges and go it alone. Use every opportunity (people/places/thing) that you have! But always remember, in the end, you alone will get you to where you want to go. If a door slams shut, go to the next one. Never give up, never give in, and always believe in yourself. Sounds trivial, doesn't it? You would be amazed...