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.
I'm being a bit sarcastic here, but 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?
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.
* Learn microeconomics before graduating.
* Stop worrying about all the jobs going to India.
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. As for India - which is related to my first point: it is important to look at all trends and act accordingly. If you ignore any large trend, movement, etc., you can very well be doomed to failure. When I say trend, don't misinterpret that as the equivalent of "fashion."
A blog like any other.
I actually just got my BS in CS about 3 weeks ago...with a rather mediocre GPA in fact (damn sociology class!). I'll let you know if there is any reason to take this with more than a grain of salt.
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.
Non-math courses help develop a personality and there's no shortage of need in that department, where I've worked. Learn some general psychology, socialogy and language. A well exercised brain is more creative than one that only dwells on one aspect or type of challenge.
I found many formulas and ideas from classes outside CS contributed greatly to offering information and processes which normally may not have occured to me.
In short, you're in school, make understanding the concepts behind your classes your main focus, socializing and entertainment when you can fit it in, not the other way around.
A feeling of having made the same mistake before: Deja Foobar
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)
Here is Sriram Krishnan's response to Joel's advice
"When the only tool you own is a hammer, every problem begins to resemble a nail." - Abraham Maslow (1908-1970)
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.
I find myself a closet programmer. By day I'm what They (tm) call a "Systems Analyst," said with a breathy expulsion like it is some sort of position involving the laying on of hands. My employer makes no bones over the fact that this is the Way of Things, so if I want to continue to get a paycheck, I will learn soft skills and management skills and all that other non-coding stuff.
But what do I do at night? I go home and write code. Why? Because I get a blast out of it.
I think Joel's article is right on; especially the piece about learning C. I was taking an inventory of my skills (mostly with 4GLs and non-bare-metal languages, though I have written smatterings of C++ and S/390 Assembler) - and the one area that I'm really deficient in is C.
Since I'm also in school for an MS in Information Systems, it might take me a little more time than I thought... but It Will Be Done.
As far as my employer goes, they can promote the soft skills and the management skills all they want; I may even find my hair forming into the PHB hair style; but when I go home and close the door, they will take my laptop only if they pry my cold dead fingers from around it.
Mit der Dummheit kämpfen Götter selbst vergebens.
I agree with him about getting a good internship. I got one in summer 2003 that payed $6/hour. Not many in the area applied for it due to the low pay. summer 2004 and 6 weeks before graduation I am worrying about finding a job. I figure I'd call them up and see if I could get the internship again. Turns out they called me before I could call them. It turned into a full time permanent job I am enjoying now. As to what I do? I work at PBS, make good pay and get to play with 5,6 and 7 figure TiVos. (AKA Broadcast Servers).
Fly me to the moon Let me sing among those stars Let me see what spring is like On jupiter and mars
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
. . . amazing how much bad grammer and poor spelings holds back you.
So long and thanks for all the fish . . . !!!
I was a closet-nerd.
I joined the Football team, I went to the gym, I dated the cheerleaders... but at some point it got so frustrating to live such a falsehood.
I eventually moved out of the frathouse and into a poorly lit basement appartment and switched from a BA in Phys. Ed. to Computer Sciences.
Now I read slashdot and I live the out-of-closet life of a warflamin'geek! w00
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!
In short, learn to write English, learn to write C, and don't worry about India!
Hinds' Seventh Law: "Make it possible for programmers to write programs in English, and you will find that programmers cannot write in English."
Bruce's Seventh Law: "Make it possible for programmers to write programs in C, and you will find that programmers cannot write in C."
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.
(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.
However, in the years since, I have grown in wisdom and have discovered that book knowledge will only get you so far and that personal experience will also, only get you so far. Taken together, a person can go places that having only one alone would be near impossible.
Now, reaching my 30's, I am kicking myself in the rear working towards obtaining a college degree to build upon and further my career goals.
If I had an opportunity to peform a 'do-over' the only thing that I would change in my life is completing at least an Associate's Degree the first few years after completing High School.
If you ignore the other uses of a tool, does that make the tool less useful, or you less useful?
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.
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!
Interesting. Even when I graduated (1991), it was still possible to get a programming/development job on basis of skills/experience alone, regardless of degree (or G.P.A. for that matter).
So a question for those just-graduated (or about to graduate): Does anyone hire "self-taught" programmers anymore?
Comments from a surfer newsgroup, on non-cubicle jobs:
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...
My background is a B.S. in Mechanical Engineering where upon graduating in 1993 had the lovely firsthand experience of what was a recession in my field. I returned to do a second bachelor's in computer science.
I worked full-time at the campus IT Department while taking classes vastly ill-structured compared to my M.E. courseware. The options of languages to learn were behind the industry and this is a Pac-10 University I'm citing. Like almost all accredited programs they seem to be under the umbrella of Electrical Engineering. I ended up having to take several classes that I fulfilled in Mechanical Engineering for C.S. The smug remark was always the same, "I don't believe you guys covered this area with applied math in your EE class equivalent." My retort was always, "I don't believe you guys covered anything in your Statics/Dynamics cliff notes and Thermo for idiots equivalents but we don't make you waste time and money taking the full crap if you wanted to do a Masters in M.E."
Needless to say, I was looked upon as a "typical elitist Mechanical Engineer" within the department. I was only there to apply Finite Element Analysis, study Computer Modeling and hopefully get my ass back into a career I had just spent five years educating myself to do. To eliminate the boredom of the classes I made sure in both degrees to have a minor outside the range of technology that may expand my mind. I declared a minor in Anthropology.
Anthropology is where I rekindled my love of writing and love for what makes us tick inside. This diversion made studying science much more enjoyable.
However, it doesn't improve one's odds at retaining a career of their choosing. You garner such skills through Social Engineering--a nice label for Social Networking--where one learns to manage time, alcohol and communicating with the sexes over countless hours of downtime. This set of skills matched with one's professional skills are what land you the interviews and ultimately the ability to adapt into new careers thanks to the chaos known as the Real World. It doesn't guarantee one to always be ahead of the storm--that depends on whether one is constantly cautious and through pessimism looks for such pitfalls.
In short, expect several careers, various job titles that will most assuredly have nothing to do with your formal education and more to do with your social education and more importantly realize your needs fluctuate in life--the needs that we label as attributes to personal fulfillment.
Thanks to this lovely recession I'm currently focused on writing short stories, novels and verse to land me a new career, while simultaneously refreshing myself in Mechanical Engineering (I put that on hold while working in Silicon Valley and the Northwest for a decade) as well as make a conscientious effort to further my technical skills in Linux, OS X, C/ObjC and Java.
The moment you think you have learned enough to sustain a lifestyle of your choosing will be the moment you realize you've never had such a lifestyle afforded you. The promised land of telecommuting around the globe have yet to become the norm. Without this option one is always in debt upon entering the doors at the new job chosen by you which rarely is in the same town and most often requires you to relocate, at considerable expense, on your dime.
Welcome to the Belly of the Beast, where nothing is guaranteed nor afforded to you without a price. Sacrifice, patience and an unwavering desire to be adaptable to change is the only guarantees one has of never succumbing to the blackhole of has beens, contenders, or desperate souls who have given up on all their dreams. No longer vibrant and creative over a few beers while doing their studies they now just meander along in life with the highlights being Friday at the bars, Saturday with the woman and Sunday afternoon Football as their only reprieve from a thankless life of compromise.
The greatest falsehood in the Real World is that what was afforded to you
A high GPA score tells me that person has already done exactly that in an academic environment.
No it doesn't. Your conclusion is just one of many that you *could* infer from a high GPA. It could also indicate somebody who cheated like hell, slept with their teachers, "played the grade game" by taking the easiest possible classes, etc., etc. High GPA is not a guarantee of strong performance in the "real world."
There are so many factors that you have to evaluate beyond just a single number, to come to anything close to a meaningful conclusion. Who's better, the student with the 4.0 GPA who took things like "Basket Weaving" and "History of Pornography as an Art Form" as electives? Or the guy with a 3.4 GPA who took "Quantum Mechanics" and "Intro to Neural Networks" as electives?
or what about the difference between a student with, say, a 3.8 GPA, who had rich parents to pay his way through school, and didn't have to work at all - versus a guy with a 3.5 GPA who worked full-time, 3rd shift, and followed work with an 8:00 am section of "Discrete Mathematics?" Hmmm... who is more "competitive" and has more will between those two? Which one will outperform his/her colleagues in the working world?
Are you *really* comfortable just picking the higher GPA in either of these cases?
Why should I take the risk that someone with a mediocre score will suddenly decide to apply himself once he's on my payroll?
You're taking a risk either way. GPA is just one factor you should look at, IMHO. If I were evaluating a candidate, I'd want to see their transcript, and actually look at what courses the selected. I'd want to talk to the person and find out what their interests are, what motivates and drives them, etc.
and FWIW, my own GPA is a 3.75 at the moment, so none of this is an attempt to apologize for myself.
// TODO: Insert Cool Sig
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)
Team Overbot, Silicon Valley's entry in the DARPA Grand Challenge, is hiring.
Coolest robotics project in the area. Great resume builder.
C++. GCC. Python. Geometry math. Electronics work. Field testing. Hard problems. Not boring.
In Redwood City, CA.
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.
If you're in the position to hire personnel and are looking to staff a position... take your stack of applications and divide them in half at random. Take one stack and throw it into the trash.
Avoid hiring unlucky people.
Speak truth to power.
I'm reading this and i'm like hmm, decent advice blah blah blah... i didn't get a great GPA in college but i did land a good programming job...blah blah blah and first i'd like to say I've never heard of this Joel guy, the submitter and Joel himself make it sound like he invented the first computer program ever, but i've never heard of him, and i like to think I keep on top of tech news and people. Then he ends his story with "kids one day you can make a great bug tracking software like my company does", and i look at the website, and no joke i've created a bug tracker with as many features as that in a single day, and I don't consider myself any kind of computing guru (I certainly dont have a website called momoruonsoftware.com). So i'm not entirely impressed with his guy, and his "Make sure you take C, and dont worry about logic classes" advice. Anyone want to explain who this guy is and why anyone should listen to his advice?
learn bricklaying and plastering, plumbing, carpentry, welding
That way you can compete with Mexicans for jobs instead of Indians.
Proverbs 21:19
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.
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
There is a lot Joel doesn't know.
Sure, bug tracking software doesn't need rigorous verification, but i wouldn't fly on any airplanes that Joel wrote the software for.
His point, as far as I can tell, is twofold.
One: You get from college what you put into it.
Two: A guided, strong college curriculum pays higher dividends than trying to learn on your own.
The guy who posted in a Ph.D. in neuroscience (spec., visual neuroscience). Trust me, you don't learn neuro from reading about it, you learn neuro from being in a lab, tinkering with experiments, reading the data, and trying to discover new things. You can't do surgery in the library.
The library and internet in the hands of a motivated man are very useful, but they don't equal the experience of learning from a trusted and qualified advisor, especially if you get to be a part of his or her research program.
The real college experience has nothing to do with being told to "shut the fuck up". Book learning is static, a college experience (by the fourth year) should be dynamic, learning the bleeding edge of things that haven't been put in the books yet. I'm sorry yours didn't turn out that way. =)
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.
But this line takes the cake:
Right. Because programming is all about understanding pointer arithmetic.
This statement has nothing to do with CS, nothing to do with software engineering, nothing to do with digital design or assembly. This strikes me purely as "my language is better than your language" elitism.
I firmly believe in his general thesis: a great software developer pays attention to soft and hard skills. Software development is a continuum of skills: at one extreme, it's all about people -- at the other extreme, it's all about computer science.
However, the argument that the best programmers must know C idioms can be reduced to the argument that the best programmers must know (in depth) electrical engineering, digital design, or physics. Because otherwise, it's just superstition that the machine works!
In today's world, knowledge is the essential resource. It's more important to know how to organize your ignorance than to try to learn everything.
Abstract languages like Simula, Lisp, and Smalltalk completely changed the way we look at computer science. It brought the "people" element back into it - the need to think and communicate primarily at the level of the problem, not at the level of the machine -- but retaining the ability to drop down to machine level when necessary.
Abelson and Sussman explained this shift in the preface to SICP, which I think is a good way to end this rant (highlights mine):
-Stu