Slashdot Mirror


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!"

29 of 808 comments (clear)

  1. Slashdot anti-intellectualism by BWJones · · Score: 5, Insightful

    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.
    1. Re:Slashdot anti-intellectualism by Rakishi · · Score: 5, Interesting

      In school: what you put in is what you get out. Want to cheat and not learn anything, go right ahead but I doubt you'll be making as much money as me in a decade or two. Talk to the Professors, show interests, discuss things, do research, etc.

      Also: Go to a better school then or get a better advisor. First of all the whole "you can learn it from a book just fine" is BS imho since unless you know which book to get you won't have a fun time. In addition, for many things the feedback you get on projects (or even just doing the thing assuming it's hard enough) is more valuable than anything else.

      As for "tangents" let's see I'm a Junior now and I've taken courses in: Math, CS (including grad courses in AI, Robotics and Genomics), Statistics, Psychology, Philosophy (Bioethics, and now I know the main arguments for a dozen important issues), Physics, Biology, History, Writing and a few others. I learned something in all of them, I took classes much harder than what I should be taking and while I didn't get an A in them I learned much more than if I took a class where I did get an A easily

    2. Re:Slashdot anti-intellectualism by sphealey · · Score: 5, Insightful
      In labor economics, there are three theories of why people pursue higher education:
      • Experience good (fun to get - think MA in US History)
      • Capital investment (like buying a machine - think BS in Engineering)
      • Signal to prospective employers/mates - university provides the filtering and winnowing process that addresses the cost-of-information and loser's curse problems that affect a non-local economy.
      These theories are not mutually exclusive; in fact, all of them can be in operation at the same time. It is the differences among the roles and purposes of the three theories that causes this discussion to get so heated, here and on other forums.

      sPh

    3. Re:Slashdot anti-intellectualism by jtshaw · · Score: 5, Insightful

      I don't know anything about your given situation, but I can tell you from some situations I have witnessed first hand that the "lack of support" is usually bullshit.

      Apathy is a huge problem at Georgia Tech, where I attended college. People bitch about how nobody wants to help them, about how professors don't offer any guidance, about how everyone is out to screw them. Fact is, the professors rarely even get approached by the students. How do you think these people that devote there lives to research and teaching feel with 99/100 questions they get are an attempt to get a higher grade? Most students show so little interest in anything other then grades it is no wonder the professors don't go out of there way to help more often.

      At any good school, GT included, if you make an effort to get to know your professors it really does pay off. Professors usually love to do research, especially in new and interesting fields. In my experience most of them are more then happy to assist there students in getting involved, especially if your area of interest overlaps with theres.

      If any of you are in college, or about to go to college, don't be fooled. Sure, everything they teach you there can probably be looked up in a library. However, where else are you going to be surrounded by so many people who have insight into so many different things? Don't throw away your chance to use the professors a bit and learn as much as possible.

    4. Re:Slashdot anti-intellectualism by anum · · Score: 5, Insightful

      I think you hit this one: Apathy + an entitlement society means the kids don't care but still expect perfect grades.

      I think every kid should be forced to do one year of grunt work somewhere before going to college. I don't care if it is Peace Corps, picking up trash along the highway or working a minimum wage slot at the 7-11. I know a bit of 'real world' experience would have helped me focus in class.

      I know, I know... There is always a way to game the system and the upper middle class kids won't get their hands dirty. But a trip abroad is a good way to open up closed minds. Maybe that would be a good subsitute. I currenty live in England and it isn't at all uncommon over here for the kids to take a 'gap year' before going to university. It is actually kind of expected and the entrance system is built to handle it.

      Just my .02

      --
      I don't think, Therefore I'm not.
    5. Re:Slashdot anti-intellectualism by PitaBred · · Score: 4, Funny

      Conformance would have made this post much more readable...

  2. Good advice... by Omniscientist · · Score: 5, Interesting
    I'm currently a college student who is going to be majoring in Computing Engineering. This article is something I should have read before I started my first semester at college, specifically the "don't blow off the non-CS classes". My first semester was mainly non-CS classes and it did hurt my GPA slightly (nothing I can't fix tho). He brings up an important part, I believe, in how necesarry it is that you must be able to convey your ideas through speech and writing well. The whole microeconomics thing is some good advice too. Ooh and its nice to hear that we shouldn't worry about all those jobs going to India. The only thing that made me scratch my head in the article was this passage in relation to Computer Programming as a job:

    If you enjoy programming computers, count your blessings: you are in a very fortunate minority of people who can make a great living doing work they enjoy. Most people aren't so lucky. The very idea that you can "love your job" is a modern concept. Work is supposed to be something unpleasant you do to get money to do the things you actually like doing,

    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?

    1. Re:Good advice... by saddino · · Score: 5, Insightful

      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.

  3. YES by Thunderstruck · · Score: 4, Insightful

    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.
    1. Re:YES by g0at · · Score: 4, Insightful

      My girlfriend and I argue about this type of thing from time to time. I know you were just poking good-natured fun at the OP's typo, but I feel it is important in this discussion to distinguish between excusable errors due to transient mistakes (e.g. typos by someone who can spell), vs. consistent errors due to ignorance (e.g. mangled words and grammar from someone who can barely handle their native language).

      -b

  4. Disagree on two points: by mOoZik · · Score: 4, Interesting

    * 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."

  5. My Advice by RAMMS+EIN · · Score: 4, Insightful

    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.
  6. Non-CS Courses by ackthpt · · Score: 5, Interesting
    Microeconomics Joel touches on for what I consider trivial reasons. My recommendation in regard to the non-CS core classes with a math foundation is to get a broad exposure to them, including macroecon, chem, physics and of course, calculus (which is usually required anyway.) Why? Because it gives you opportunities to consider how you might approach problems or exercises in these disciplines analytically and how you might program modeling and such. I found on thing could lead to another, quite often, as classes can often be very interconnected in theories and information and were inspirational for lots of experiments in coding. Broad experience in coding is essential, unless you like to play the high-risk game of specialization (big bucks, but little call for your skills)

    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
  7. Enjoy your summers by RadioheadKid · · Score: 5, Insightful

    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
  8. Response to Joel by alphakappa · · Score: 4, Informative

    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)
  9. The best advice... by Not_Wiggins · · Score: 4, Insightful

    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.
  10. True confessions... by rah1420 · · Score: 4, Interesting

    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.
  11. GPA useless??? by Sebastopol · · Score: 4, Insightful


    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
  12. The dangers of stereotyping by Roadkills-R-Us · · Score: 5, Insightful

    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!

  13. Do you want to be Joel? by jeif1k · · Score: 5, Insightful

    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.

  14. Anti-intellectualism is actually... by cnelzie · · Score: 5, Informative

    ...a large part of being a citizen of the United States these days. When I was younger, I was in the arrogant land of believing that College Degrees were over-rated and worth very little on paper.

    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?
  15. People skills by Lord_Dweomer · · Score: 5, Insightful
    I would recommend that any Slashdotter considering going into a tech related field do something at college to brush up on their people skills, whether it be by joining lots of clubs, taking a negotiation class, or even *gasp* taking a marketing class to learn how to communicate to an audience.

    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!
  16. Emphasis on a well-rounded education is the key by tyrione · · Score: 4, Interesting

    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

  17. GPA, degrees, et al by jd · · Score: 4, Insightful
    First off, the practical value of a degree depends on which educational philosophy the University or Polytechnic subscribes to. If it teaches subject "facts", then it's likely outdated and outmoded knowledge that is of little value in the real world. On the other hand, if it teaches you HOW to learn and HOW to obtain/evaluate information, then it is credible, even if the subject material covered IS ancient - you're then equipt to update what you know.

    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)
  18. As usual, a mixed bag by leshert · · Score: 4, Insightful

    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.

  19. puppeteer philosophy of hiring by spoonyfork · · Score: 5, Funny

    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.
  20. Re:AC Gives College Advice For US Programmers by wcrowe · · Score: 4, Funny

    learn bricklaying and plastering, plumbing, carpentry, welding

    That way you can compete with Mexicans for jobs instead of Indians.

    --
    Proverbs 21:19
  21. while (*s++ = *t++); by Chris+Carollo · · Score: 5, Insightful
    ...if you can't explain why while (*s++ = *t++); copies a string, or if that isn't the most natural thing in the world to you, well, you're programming based on superstition, as far as I'm concerned...
    Yes, you should be able to decipher what that code does, but I'd seriously question anyone who saw that as second nature, and you'd get a talking-to if you were one of my programmers and actually checked in code that looked like that.

    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.
  22. Very bad advice by Stu+Charlton · · Score: 4, Informative
    This piece was an exercise in ego, with a couple of decent nuggets thrown in.

    But this line takes the cake: ...if you can't explain why while (*s++ = *t++); copies a string, or if that isn't the most natural thing in the world to you, well, you're programming based on superstition, as far as I'm concerned...

    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):

    First, we want to establish the idea that a computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read, and only incidentally for machines to execute.

    Second, we believe that the essential material to be addressed by a subject at this level is not the syntax of particular programming-language constructs, nor clever algorithms for computing particular functions efficiently, nor even the mathematical analysis of algorithms and the foundations of computing, but rather the techniques used to control the intellectual complexity of large software systems.

    [...]

    Underlying our approach to this subject is our conviction that ``computer science'' is not a science and that its significance has little to do with computers. The computer revolution is a revolution in the way we think and in the way we express what we think. The essence of this change is the emergence of what might best be called procedural epistemology -- the study of the structure of knowledge from an imperative point of view, as opposed to the more declarative point of view taken by classical mathematical subjects. Mathematics provides a framework for dealing precisely with notions of ``what is.'' Computation provides a framework for dealing precisely with notions of ``how to.''

    --
    -Stu