Slashdot Mirror


What Skills Should Undergrads Have?

kramed8 writes "As a student myself, after reading the recent 'Slam' article on Java I really began to be concerned with the path of my education. I am currently attending a small Canadian University as a 3rd year Computer Science and Business student set to graduate next year. What seems to have troubled me from reading the article and user comments is that I do not feel as confident as I want to be in C, ASM and other related low-level programming topics. I was taught C++ in my introductory courses, with subsequent classes using C# or Java. My education has not been particularly difficult or time consuming to get good grades, so I have spent my free time dabbling in topics and languages that interest me (ie Multiple GUI Toolkits, Python, Linux). How can I spend my free time in the next year to prepare to enter the work place with a proper toolbox of skills? From what I have been told, there are more jobs for Java and Data Warehouse development teams compared to lower-level programmers. As an undergrad, what skills should I be trying to attain now to further my employability in the future?"

587 comments

  1. Free Time at School by Njoyda+Sauce · · Score: 5, Funny

    Parties and Women right? Oh.. forgot this was /.

    --

    You can only be young once, but you can be immature forever.
    1. Re:Free Time at School by oscrmyer · · Score: 0

      I like the parties idea. I just want to make a couple more comments.. First of all Linux is not a programming language. Also there is nothing wrong with java, the problem is that 80% of the people that code java don't know what they are doing. I think it's much better to know 1 or 2 languages very well, then knowing 10 of the very bad. Learn how to use memory well with java, and how to make your app multi threaded. These sound like simple ideas but, everyday I run into cases where people code like they have no idea what they are doing :(

    2. Re:Free Time at School by Mike+Buddha · · Score: 3, Funny

      You meant LAN parties, right?

      --
      by Mike Buddha -- Someday the mountain might get him, but the law never will.
    3. Re:Free Time at School by cayenne8 · · Score: 3, Insightful
      "Parties and Women right? Oh.. forgot this was /."

      Actually...this isn't a bad idea. One skill you need (if you're a guy) is HOW to get laid.

      If you're good at talking up women, and can get laid a decent bit...you're not gonna be tempted to get married by the first girl that lays you. You won't be tempted to get married too soon right out of school.

      If you don't do that...you can concentrate on your career early. You can enjoy some of that money that is coming in (and hopefully saving and investing some of it). You won't be burdened with kids before you're ready.

      These won't directly affect your getting a job, but, they will help you keep and advance....and you really should have some "fun" out there before you settle down to a family if that is what you decide.

      So, guys....work on your women skills, learn how to get laid on a regular basis with a number of them. It will benefit you greatly...and in the end, you'll make a better informed 'consumer' in which one you choose to hook up with on a more permanent basis. That, and you'll have some funds saved up and be making a bit more $$, which also has the benefit of attracting better looking ones.

      --
      Light travels faster than sound. This is why some people appear bright until you hear them speak.........
    4. Re:Free Time at School by blhack · · Score: 1, Insightful

      Can this stereotype please die already? Most engineers that i know love parties and women, sometimes even more so than their fraternity dwelling counterparts.

      Engineers are usually the ones who throw the illest parties anyhow since we tend to have way more lights, and sound equipment (half the engineers I know are DJs) than anybody on the block.

      So please...stop using this stereotype....its really stupid.

      --
      NewslilySocial News. No lolcats allowed.
    5. Re:Free Time at School by Anonymous Coward · · Score: 0

      Forget ASM (especially) and forget C. I learnt both in my CS degree when I was in uni over 10 years ago, and haven't used them since.
      Memory Allocation? Pointers? All useless!

      You dont need to know about compilers, or how anything works under the hood to be a great programmer. You'll probably spend most of your programming life working on business apps anyway.

      C++ is a good, modern language to learn. C# is great too, and there is a huge demand for developers at the moment.

      The most important thing you can learn in SQL... it will be the single most important thing you will use. Anyone can write lots of crappy SQL statements, but being able to turn the SQL server into an efficient workhorse will make your applications run like the wind.

    6. Re:Free Time at School by toadlife · · Score: 1

      Just a nit to pick...

      There is no such thing as being "ready for kids".

      Have kids early and you might not be in diapers by the time they leave the house.

      --
      I don't always use unix-like operating systems; but when I do, I prefer FreeBSD.
    7. Re:Free Time at School by toadlife · · Score: 1

      ..shit I forgot one thing.

      Kids are not a burden. They are a blessing!

      --
      I don't always use unix-like operating systems; but when I do, I prefer FreeBSD.
    8. Re:Free Time at School by cayenne8 · · Score: 1
      "Kids are not a burden. They are a blessing!"

      Depends on what you want out of life. If you want to settle down, and dedicate 18+ years of good years of YOUR life to this...go for it.

      Personally...I chose not to. I've had time to go out, travel, enjoy my money, buy things...not be tied down, able to come and go as I please, date various women (not tied to any one of them), etc.

      I've lived a life and done things that none of my married friends could have dreamed of doing.

      It is a choice, and I'm happy with mine so far....kids aren't for everyone. In my case, and there have been close calls...kids would have been a terrible burden on my life and lifestyle.

      --
      Light travels faster than sound. This is why some people appear bright until you hear them speak.........
    9. Re:Free Time at School by Aardpig · · Score: 1

      I've lived a life and done things that none of my married friends could have dreamed of doing.

      And, likewise, your married, kid-burdened friends have lived a life and done things that you could not possibly imagine. I speak from experience; having a kid was nothing like I imagined. For one, nobody told me it could be so much fun.

      --
      Tubal-Cain smokes the white owl.
    10. Re:Free Time at School by toadlife · · Score: 1

      lol.

      You make it sound like kids "steal" your life!

      --
      I don't always use unix-like operating systems; but when I do, I prefer FreeBSD.
    11. Re:Free Time at School by Anonymous Coward · · Score: 0
    12. Re:Free Time at School by Anonymous Coward · · Score: 0

      Sorry, dude, your shit's weak.

    13. Re:Free Time at School by Anonymous Coward · · Score: 0

      Communications, project management and business classes.

    14. Re:Free Time at School by Anonymous Coward · · Score: 0

      Don't waste your time learning a CS language.
      Master the basics of CS and Programming Languages paradigms and grammar.
      Focus on high level technologies (such as mutli-threading, networking, distributed programming, OOAD, software patterns, security, web, Operating Systems, ERP, SOA, embedded, etc.).
      Forget about proprietary technologies, focus on trends.
      Read about methodologies (RUP, Agile, etc.) and practice those methodologies.
      Get to know the hardware, not only x86, but sometimes some arcane obscure hardware knowledge may give you a priceless job. And learn all you can about application fields such as healthcare, telecom, banking, etc.
      Don't forget about project management and risk analysis.
      Read read read and keep yourself updated (not the same as follow the latest fashion).
      And maybe someday in 15 years time you'll be worth some money.

    15. Re:Free Time at School by dintech · · Score: 1

      I second this. Most techies know how to have a good time these days. I'm also a DJ and get paid for that as a hobby. :)

      Lights are for knob-ends however.

    16. Re:Free Time at School by allacds · · Score: 1

      [offtopic]
      Hey now, there's no reason to knock the "fraternity dwelling counterparts" in favor of engineers. Just think of what happens when the two become one!

      The best parties (LAN or otherwise)...
      The biggest study sessions...
      The baddest audio/visual equipment...

      And these behemoths.
      http://www.pbase.com/goldtimer/gt03wrecks
      Can anyone but an engineer appreciate the ugliness yet shear ingenuity of some of these things? It's a wonder they actually run.

      And they're all built new every year by ... surprise surprise, fraternity men!
      (Yes one of them was mine. No I'm not telling you which one)

      [/offtopic]

    17. Re:Free Time at School by cayenne8 · · Score: 1
      "You make it sound like kids "steal" your life!"

      Well, unless you are VERY wealthy..they do in a sense.

      If I'd had kids, I'd not have had the TIME to do things I wanted to do, nor the extra $$ to do them. With kids, you have to sacrifice time from your life and money for them, that's the name of the game. Sure, there are rewards for having kids too...they will (hopefully) be there for you in your old age....they become built in friends as they grow older...etc. But, this all comes at a price to you in your productive years, so like everything, there is a trade-off.

      It isn't a trade off I've been willing to make.

      That being said...as a guy, I can have children later in life than is safe for most women...so, my options are still open. Sure, I won't be young with my kids like my parents are....but, I still have the option if I so choose...and now that I'm starting to settle down a 'little'...I'd consider it. Not looking for it, but, my options are open if I so choose...

      --
      Light travels faster than sound. This is why some people appear bright until you hear them speak.........
    18. Re:Free Time at School by pushf+popf · · Score: 1

      Learn to work well with other humans. There's always another code monkey coming along who will be willing to work harder than you or longer hours than you for less money.

      The real job security and money comes from being able to work with the people who handle the money, understand what they're trying to tell you, figure out what it is they actually want, figure out what they actually need, and what would reduce costs, make people happier and make the business more profitable, then deliver it.

      Everything else is out-sourcable to the new cheapest labor pool on the planet (wherever that happens to be at the moment).

      Also, languages seem to drop in importance by about 10%/year, so after a decade, every language you ever learned will only be moderately useful unless you have a job somewhere that has a big investment in a particular one. However, data structures, algorithms and to a lesser extent SQL are forever.

    19. Re:Free Time at School by toadlife · · Score: 1

      Well, unless you are VERY wealthy..they do in a sense. You appear to view kids purely as liabilities. You are wise not to have them.
      --
      I don't always use unix-like operating systems; but when I do, I prefer FreeBSD.
  2. Don't overlook people skills by TechForensics · · Score: 5, Insightful

    People skills should not be overlooked. It is important you be able to get people to like you.

    --
    Those are my principles, and if you don't like them... well, I have others.
    1. Re:Don't overlook people skills by keenada · · Score: 5, Insightful

      No, it is important to be able to get along with people. Being liked by people isn't necessarily a good thing to pursue, because people will detect that you're trying. It's a fact of human nature. Trying to be liked is seen (for better or worse) as manipulative. In my opinion, as a Canadian post-secondary grad working in IT for three years, your biggest asset will be your ability to reconcile your people skills and your technical skills. A lot of Information Technology work in Canada is basically massive companies saying "We want to understand this objective, or corner this market, and we want to do it using modern tools." That's a pretty big problem set, and is going to require both a lot of analytical problem-solving, and a lot of communication. Whether you focus more on the technical or on the people aspects, never lose your ability to work in either.

    2. Re:Don't overlook people skills by AndGodSed · · Score: 1

      Yes. And good writing skillz. And talking good also helps. Then personal hygiene skills. LPI and RHCE as well...

    3. Re:Don't overlook people skills by laughing_badger · · Score: 1

      Get a copy of "How to win friends and influence people" by Dale Carnegie and read it several times. This book should be a first year undergrad textbook for all engineering subjects.

      --
      Help children born unable to swallow - www.tofs.org.uk
    4. Re:Don't overlook people skills by rucs_hack · · Score: 2, Interesting

      I spent every free evening I had as an undergraduate working till late at night teaching myself the subjects we were learning, and spent every reading week studying. To the extent that a lecturer who caught me in the otherwise empty lab at night told me to get out and get drunk like a normal student.

      Social life is important, yes, but after a year of this I was so far ahead of my fellow students that while the course was really hurting for them, I was having the time of my life, and I ended up actually teaching a first year course whilst in my third year.

      If you just study what's in the lectures, you'll be, at best, as good as everyone else in that classroom. If you read around the topics and hack code at night, you'll get your head above everyone else when it comes to the job market.

      Each of my friends who socialized more than they studied ended up with mediocre to normal degrees. Those who spent a lot of their free time studying and (more importantly perhaps), hacking code for fun, got good degrees, and very nice jobs almost to a man/woman. Not me, I ended up in a four year PHD course, so I have yet to see a fiscal return for my work.

      My views may be extreme, but it is possible to go out a bit less, and benefit a great deal from extra study time.

    5. Re:Don't overlook people skills by Digicaf · · Score: 2, Interesting

      I wholeheartedly second this. I've trained a number of implementation engineers in the past couple of years, so I've seen firsthand the difference a this makes.

      The trainees with good people skills do much better in the field than those without. In fact, the few engineers I've trained with very little technical knowledge are doing quite a bit better than those with highly technical backgrounds because they have better interpersonal abilities.

      My suggestion is to take plenty of social classes that emphasize speech, writing, psychology, and even drama.

    6. Re:Don't overlook people skills by EastCoastSurfer · · Score: 4, Interesting

      True, but you can boil the book down to 2 basic things (that I've found anyways).

      1) Remember names!

      2) Be genuinely interested in other people. Everyone has something interesting about them. Figure out what it is and then let them talk about it. Remember, whoever talks most in a conversation is generally going to think it was a good conversation.

    7. Re:Don't overlook people skills by homey+of+my+owney · · Score: 1

      I can only think of a single more important item. The ability to learn - NOT what you've learned, but showing you can learn.
      It's been many years since I graduated and aside from these two, there's nothing that I use from college days.

    8. Re:Don't overlook people skills by CastrTroy · · Score: 1

      This is very true. If you just learn what is presented in the courses, you will know absolutely nothing when you get out, even if you get an A+ in all your classes. Some of the most important things I ever learned were just from messing around with computers in my spare time.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    9. Re:Don't overlook people skills by Maxo-Texas · · Score: 5, Insightful

      Les Gibson's book "People Smart" from the 1960's is also magical.

      It adds
      1) Smile the first second when you meet someone (tho tricky if you are a very pretty female).
      2) Imagine you MUST say "yes" 9 times before you are allowed to say "no" to a co-worker. This does many wonderful things. a) respects their opinions b) lets them do things their ways c) you are perceived as likable and non-critical d) when you do rarely say "no" folks stop and listen because you respected them and you only say "no" when it is really important.

      --
      She was like chocolate when she drank... semi-sweet at first and then increasingly bitter.
    10. Re:Don't overlook people skills by zx75 · · Score: 1

      Agreed, I'm in the same position except with 2.5 years working in the industry (graduated April '05). You have to be able to work with people and have a good rapport with them on a professional level, and be able to do so whether you like them or not (and vice versa).

      If you work in a small shop, communication is vital and it pays off to be able to do a little bit of everything even if you're specialized in another area.

      As for purely technical skills, it depends on what level you're interested in working at but if you're doing modern application development and any work with the web then having good Java skills will pay off in most of the country. If you're in Alberta, and especially Calgary, then brush up on your .NET because 90% of the positions available will be looking for it.

      --
      This is not a sig.
    11. Re:Don't overlook people skills by Anonymous Coward · · Score: 0

      Like the first guy said parties and women!!!

    12. Re:Don't overlook people skills by Anonymous Coward · · Score: 0

      I never studied in college; I spend more hours at work every two days than I spent in the library my entire college career. Two-thirds of the way through my collegiate experience I switched majors from computer science to philosophy figuring that the question I'd be asking after college would be "Would you like paper or plastic?".

      I also had a part-time job at a company in the local area. Started out as an assistant. As I was graduating, they knew I was looking for work so they offered me a position in the IT department. No experience but it was entry level and they knew I was a good worker so they were willing to TRAIN me in what was needed.

      From there my career has begun to take from pretty unexpected turns; it helps when you impress the chairman of the company.

      My point simply is this, the most valued commodity in the work place is not your people skills, is not your skill set, is not who or what you know: how well are you trusted. That is the only "skill" you need to be successful. If you show up daily, do good work and have integrity you will go very very far and have many opportunities.

    13. Re:Don't overlook people skills by EastCoastSurfer · · Score: 3, Interesting

      I like the 'yes' thing.

      You're right about smiling, also look them in the eye.

      And while we're adding more items to the list, Chris Rock had a good one on how to make women happy. Just ask "How was your day?" I first did this with random girls I met as a joke, but then realized how right he was when he said that that one question can lead to a 45 minute conversation. I wasn't even aware that much 'stuff' could happen in one persons day lol...

    14. Re:Don't overlook people skills by piltdownman84 · · Score: 0, Flamebait

      Wow, sounds like my rules for picking up women, only insert "pretend to " before both statements. So its 1) Pretend to Remember names! 2) Pretend to Be genuinely interested in other people. Everyone has something interesting about them. Figure out what it is and then let them talk about it. Remember, whoever talks most in a conversation is generally going to think it was a good conversation.

    15. Re:Don't overlook people skills by Omestes · · Score: 0

      Do people really need a book to get along with people? That is, no offense, kind of sad. Learning to pretend to be friendly is just base manipulation, and most people can see through it. It makes people look sleazy, in the real world. The best way to get along with others is to be self-assured, and utterly yourself, and mostly, treat them as you want to be treated (as has been known long enough to be a cliche). Not a bunch of silly, manipulative, social-psycho-babble. Going by a book just makes you look like middle management, or a used car salesman.

      Furthermore its completely unnecessary. We're hardwired to be social primates, unless of course your a sociopath, or such, but then I doubt you'd be on Slashdot anyways (being a social site). Even being a geek isn't an excuse, I've spent more time poking at a keyboard that talking to people, and still have no real problem interacting with others.

      To relate this to college experience, find a peer group, go to a pub with them, flirt up the opposite sex, act like a human being.

      This might be getting more and more awkward to youth these days, I suppose, with the growing lack of real social interaction, with communications moving to impersonal, and indirect means.

      --
      A patriot must always be ready to defend his country against his government. -edward abbey
    16. Re:Don't overlook people skills by Omestes · · Score: 1

      They might be happier for it though. Which is what really matters. The job market is only a SMALL aspect of life, and not the most important thing in the world. I always giggled at the entering freshmen who were doing the overachiever track, only to end up getting mediocre grades, or dropping out, later on due to burn out. Life is a balance.

      But then again I was in college for philosophy, so I never had to worry about job prospects.

      --
      A patriot must always be ready to defend his country against his government. -edward abbey
    17. Re:Don't overlook people skills by Run4yourlives · · Score: 4, Insightful

      Do people really need a book to get along with people?

      Short Answer: yes.

      Long Answer: Many technically adept people are often misunderstood, uncomfortable around people, and unfamiliar with the rules of social conduct. It has little to do with being sleazy, and more to do with trying to improve your communication skills. What you take as a given is a learned skill for most of us.

      Think of the people you've met you you've thought were assholes, arrogant, insecure, and fake. Chances are, they were none of the above; rather they just came off that way because they didn't know how to properly handle the nuances of social behaviour.

      Aiming to rectify that is never a bad thing.

    18. Re:Don't overlook people skills by Run4yourlives · · Score: 2, Insightful

      You are only in your 20's once. Keep in mind that if you're still in school you're not really in a position to evaluate the choices you've made.

      Make sure that when you are (say, in your 40's at least) you can still evaluate them in the same way you're doing now.

      I would talk to those in their 40-50's to get an idea of what you may think when you are that age.

    19. Re:Don't overlook people skills by Grishnakh · · Score: 2, Insightful

      2) Be genuinely interested in other people. Everyone has something interesting about them.

      I disagree entirely. Most people are dreadfully boring and stupid.

      Figure out what it is and then let them talk about it. Remember, whoever talks most in a conversation is generally going to think it was a good conversation.

      But this part is exactly correct, which is why it's important to develop your acting skills so that you can act interested in other people and get what you need from them, even when they're dreadfully boring.

      My own acting skills aren't that great, and I'm stuck as an engineer with little contact with others, but this is exactly the way I like it. Why would I want a job where I have to talk to other people all the time? Luckily, I've found there's plenty of jobs just like this, where you can keep your head down in your cubicle most of the time, and the only interaction with other people you have to put up with is with your immediate coworkers (which is cool when they're like you, as they tend to be in these jobs), and with your boss, not with customers, the general public, other managerial types, etc.

    20. Re:Don't overlook people skills by 0m3gaMan · · Score: 1
      This is an absolute must. Furthermore...

      basic aptitude would be sufficient. The ability to spell, adequate grammar, and some sense of what's going on in the world--not just in the World of Warcraft, for example.

      /get off my lawn

    21. Re:Don't overlook people skills by insertwackynamehere · · Score: 1

      Just to be fair I spend a good deal of time programming, and messing around with computers. I am a Freshman at college as well. My whole winter break I've been developing a library in order to further learn about a certain subject and a certain language. I've been messing with computers since elementary school and before even and I really got into them (as in web development and programming) in 8th grade. I forked a homework assignment we had for class so I could build on it and continue to develop it just to see how far I could get with the idea instead of stopping at simulating it as the homework required. But I still hang out with people a lot. In fact, I hung out with people in high school (middle school, not so much, but for other reasons) but college I'm having the social time of my life. I actually don't even drink. I just talk to people, friends, girls. Just wandering down the hall to see who's doors are open is really fun. Sometimes I'll pull allnighters (or at least late nights) in the library programming something I don't even have to do but the two are not mutually exclusive. I'll pull allnighters watching movies with people and just having fun. And my not drinking is beside the point, that is my personal choice, but most people I know drink. I'm pretty sure I could drink and it wouldn't change things but for other reasons, I don't, so don't make my not drinking a red herring. I think that balancing social life and school is important because you are going to be balancing social life with work for your whole life probably. People who socialize and don't work have problems but likewise it can't be good to work and not socialize. But regardless I just want to defend myself and people like me who aren't slackers just because we like to talk to people and who aren't dorks just because we like what we learn.

    22. Re:Don't overlook people skills by evilmousse · · Score: 2, Informative


      indeed. so he should get a bunch of cats, and practice herding.

    23. Re:Don't overlook people skills by stewbacca · · Score: 1

      ) Be genuinely interested in other people. Everyone has something interesting about them.

      I disagree entirely. Most people are dreadfully boring and stupid.
      You must be a programmer.
    24. Re:Don't overlook people skills by Omestes · · Score: 2, Insightful

      I still don't know if a book is the answer. These books mostly deal with using people for your ends, and not the basics of "normal" interaction. I really don't think you CAN be taught normal social interaction, its one of those things you pick up and incorporate way back in your youth while being originally socialized. What these books teach are to interaction, what "networking" is to genuine relationships, shallow, fictional, and purely pragmatic. It boils down to "how do I fool this person into thinking I'm someone I'm not".

      I, for some reason, doubt that anything of lasting value can come of that. Building relationships (even of the temporary business type)is constructing things on a false foundation.

      These books are not about teaching those of us outside the mainstream culture how to fit in, their teaching how to get what you want. For this reason reading a couple good books on actual social-psychology (especially of sales) would have far more merit than something watered down into feel good, corporate speak, psychobabble. As for forging genuine relations I doubt even that the most pathetic basement dwellers among us need help, it still is a natural thing. Not everyone natters on about Brittany Hilton, or whatnot, and not everyone expects you to be slicker than owl shit in your communication skills.

      Really, here is the text of my self help book, I was going to publish it and make billions, but I feel generous:

      "BE YOURSELF" /rant

      --
      A patriot must always be ready to defend his country against his government. -edward abbey
    25. Re:Don't overlook people skills by Grishnakh · · Score: 1

      This is Slashdot, isn't it? "News for Nerds", not "News for Socialites".

      Honestly, I'm shocked and appalled that someone on Slashdot of all places would say something like "Everyone has something interesting about them." He's hanging out on the wrong site.

    26. Re:Don't overlook people skills by Anonymous Coward · · Score: 0

      1) Smile the first second when you meet someone (tho tricky if you are a very pretty female). Even trickier if you have crooked teeth.
    27. Re:Don't overlook people skills by __aaclcg7560 · · Score: 1

      To the extent that a lecturer who caught me in the otherwise empty lab at night told me to get out and get drunk like a normal student.

      I stayed in a library an hour past closing because I didn't noticed while programming on my laptop, and the janitor threaten to call the cops on me if I didn't get out. :)

    28. Re:Don't overlook people skills by teh+moges · · Score: 1

      The problem is generally found in introverts. Extroverts have a very difficult time understanding that introverts are not social outcasts or anything worrying like that, it is just that introverts get tired having to socialize. This means that some take the easiest way out of a conversation they can, by just being blunt etc.

      This book is great because it gives simple guidelines to follow to at least let these types of people do what comes unnaturally to them. Unfortunately, a lot of business decisions are based on areas that extroverts are more natural at and so introverts often need help to overcome this initial obstacle.

      As a sideline, I also have a theory that it is majorly extroverts that call humans "social creatures", while introverts are less likely to use that phrase, preferring "intelligent creature" or something similar (note: I am absolutely not implying that introverts are smarter).

    29. Re:Don't overlook people skills by Anonymous Coward · · Score: 0

      Ever deal with programming in a culture where saying no is avoided at all costs?

      The result is painful if one of those disregarded costs is code infrastructure/integrity.

      But I wouldn't take my advice on this subject, people at work probably hate me. But they sure loved the guy whose code I just spent the day cleaning up after* (Note that I didn't say fixing, I can't completely fix that mess without a refactor, which we can't afford to do right now).

      *Please note that I'm not bitching about my job, I like my job, I just hate the people who have left us with a huge mess that has led to an inflexible code base that forces me to say no to people when they ask for something I _should_ be able to provide (but can't because working with the fragile, overstretched code could, and most likely would lead to a disaster).

    30. Re:Don't overlook people skills by glitch23 · · Score: 0

      Just ask "How was your day?" I first did this with random girls I met as a joke, but then realized how right he was when he said that that one question can lead to a 45 minute conversation. I wasn't even aware that much 'stuff' could happen in one persons day.

      That much (enough to fill a 45 min discussion and more) happens to everyone but if you ask a guy the same question you would get an answer like "it was good" and be on to talking about something else. Women like to talk and men learn to just nod as they do so. That can easily take up 45 minutes many times a day.

      --
      this nation, under God, shall have a new birth of freedom. -- Lincoln, Gettysburg Address
    31. Re:Don't overlook people skills by Anonymous Coward · · Score: 0

      Don't go overboard getting people to like you. Sometimes you just have to be a hardass.

      Get people to respect you and *not hate you*. That's way more important.

      First of all, never get angry. Don't badmouth your coworkers. Never get in a public fight. If you have a beef with someone, settle it one-on-one. And I don't mean a fistfight.

      For me, settling things one-on-one means figuring out why they're aggressive towards me (beforehand) and then removing that reason in a conversation.

      One reason could be that the person you're dealing with is feeling threatened by you. You probably have superior skills, etc. They'll probably feel that you're a threat to their authority and respect (and by implication their job security).

      Do not confront these people in a meeting, for example. And when you do confront them, don't make it a confrontation.

      Mention that the problem/situation/whatever is familiar to you because you ran into something similar at another job, where some other guy (not you) came up with solution XYZ. It might be useful here too. "I can send you the details if you want.."

      Basically you just give this guy everything he needs and let him take credit for it.

      He's happy because you've helped him (and reduced your threat to him) and because this will make him look good.

      You can be happy because there's one less coworker to fight, because the solution you gave him means you won't have to waste time fighting about it and can get on with your real work and because he's not going to badmouth you anytime soon if he has any brains whatsoever.

      So you don't get any credit for it. So what? You've gained an allay of sorts. You've avoided a lot of pointless fighting. And of course this guy will support you if you propose things.

      Different approaches to different people at different hierarchical levels from you.

      I give juniors a lot of freedom, for example. And sometimes they mess up bad. If this disrupts production I'll fix it and tell everybody I messed up. I have more than enough authority in the company that people won't hassle me about it too much. Then I'll sit the junior down and talk him through his mistakes. He's learned a valuable lesson and also seen me take the blame for his mistake. Those kind of actions give you loyalty.

      In a more recent case a junior was about to miss a hard coding deadline because his codebase had become a giant mess. This guy was practically in tears. I told him to come to the office on Saturday and Sunday. We re-wrote the whole thing pair-programming (which is a good way to teach people) and had it all finished on the deadline (Monday).

      Getting people to like you is such a crappy target.

      In a pinch, who'd you bet on? The guy who smiles a lot and compliments you on your choice in designer pants or the guy who saved your bacon when shit hit the fan?

      A few social skills and hard work actually helping people is much more important. Help someone out of a jam and don't rub it in their face.

      What are they going to do? Hate you for it? Didn't think so.

      Trust and respect, that's what you should aim for.

    32. Re:Don't overlook people skills by Omestes · · Score: 1

      As a sideline, I also have a theory that it is majorly extroverts that call humans "social creatures", while introverts are less likely to use that phrase, preferring "intelligent creature" or something similar (note: I am absolutely not implying that introverts are smarter).

      I think its more a matter of "social thresholds", not that any of us aren't inherently social. I think introverts can be chopped into two groups, those who are actually alienated, and those who are actually very comfortable with themselves. Sometimes I'm of the thought that we all chatter way to damn much, and being that we aren't actually saying anything, it must just because we're afraid of silence (i.e. the sounds of our own thoughts), either that or a majority of us are playing some form of Marco Polo, announcing our existence to others because of some irrational fear that we may not exist. Introverts, I find, are far better conversationalists, ironically. What do you gain from lack of social skills, more time to read, think, and try to understand things. Of course these are groundless hypotheses. Tangent aside, even introverts need to talk to people, just less often than some.

      For the record, I consider myself mainly an introvert, but not to the point where I am completely antisocial. I was reading some lay descriptions of the Meyer-Briggs' personality test, and the simplified I-E matrix description summed it up: Introverts feel drained by social interaction and need solitude to recharge, Extroverts feel drained by solitude, and need groups to recharge.

      --
      A patriot must always be ready to defend his country against his government. -edward abbey
    33. Re:Don't overlook people skills by mattwarden · · Score: 1

      What? Parent said that it is important to get people to like you, and then you say you disagree because people will know you're being fake and they won't like you.

      See the problem? You're not disagreeing with parent.

      Anyway, parent was exactly right. It is incredibly important to get people to like you in just about any profession. Bottom line is that you are not the whole company, and therefore you don't hold all the keys. When you need someone with one of the keys in order to do your job, then it is much better for you to have a good relationship with them. Otherwise, if they refuse or stall, then you have to cause a fuss with your superiors, which will slow things down and is usually a lose-lose.

      I am a consultant, and if a person at the client sees me as a threat or really anything but a help, they are not going to be willing to get me what I need in order to get my work done.

    34. Re:Don't overlook people skills by stewbacca · · Score: 1

      Actually, even nerds have something interesting about them; be it hatred for sports, or lack of sex.

    35. Re:Don't overlook people skills by Anonymous Coward · · Score: 0

      No, he was just summarising 'How to win Friends...' (horrible title, great book) and he did so succinctly and accurately, the hallmarks of a geek. Perhaps if you had studied it in first year you could appreciate the message. It's easy to be a cynic and judge everyone as boring and stupid, but it's a reciprocal thing and just ends up making you look boring and stupid to everyone. I know of nobody without an interesting hobby, pursuit or interest that they can't entertainingly espouse once you find what it is. Even those who are dreadfully dull and boring on most subjects can be enlightening and fascinating if you find their true passion.

    36. Re:Don't overlook people skills by Anonymous Coward · · Score: 0

      Posting anonymously for reasons that will become obvious.

      I have a son who has been diagnosed with autism spectrum disorder (which to a large extent means they put a label on traits I had as a kid, that nobody did much about). He doesn't seem to pick up social skills by osmosis like other people do, but he can learn them explicitly just fine.

      Some people pick up social skills just fine. Some people don't, but aren't really hindered by that since they're nice people. Some people don't, and are jerks anyway (just because you've got Asperger's doesn't mean you're a good person). Some learn explicitly.

      People are individuals, and learn different things in different ways.

    37. Re:Don't overlook people skills by Gribflex · · Score: 1

      Careful with this one though.
      Most women are so used to guys being jerks that if you if you ask a question like 'how are you?' and actually show that you have a genuine interest in the answer, it's often construed as flirting.

    38. Re:Don't overlook people skills by DarrylKegger · · Score: 1

      'Think of the people you've met you you've thought were assholes, arrogant, insecure, and fake. Chances are, they were none of the above; rather they just came off that way because they didn't know how to properly handle the nuances of social behaviour.'

      Nope. Many people are in fact arse-holes. Think of the people you've worked with who
      played power games, who sucked up to the people above them and shat on the people below.
      think of the people who gossip at any chance about their co-workers and are constantly trying to
      position themselves to their advantage within the workplace social network. These people exist and are everywhere; ordinarily you wouldn't give them a second thought but the pricks are usually higher up the chain so you have to deal with them. They really do operate as reptiles and if at all possible you should treat them as such. nuances my arse.

    39. Re:Don't overlook people skills by Sgt.Modulus · · Score: 1

      I have a problem speaking up for myself. Generally I am shy. Sometimes I say some swearwords and come across unprofessional. Still working on it... Got me fired once.

    40. Re:Don't overlook people skills by Raideen · · Score: 1

      I really don't think you CAN be taught normal social interaction, its one of those things you pick up and incorporate way back in your youth while being originally socialized. What these books teach are to interaction, what "networking" is to genuine relationships, shallow, fictional, and purely pragmatic. It boils down to "how do I fool this person into thinking I'm someone I'm not".

      I can see how "learning" to socialize might seem fake and sleezy but learned behavior isn't always manipulation. (I'm not going the debate the merits of books on behavior since I've never read any.) I've learned nuances of social interaction beyond simply having a conversation. I can read body language and project my own positive body language. That may sound manipulative, but to me, I am simply expressing myself as I am in a way that I didn't learn while I was a kid. If, for example, you would like to socialize with people but your natural body language is perceived to be stand-offish, learning how to correct that isn't manipulative. I'd be surprised if most adults didn't pick up a new behavior or two once in a while (positive or negative). They just don't think about it as much as I do. Even I don't have to think about behavior changes as much as I used to (although I still work to correct negative behaviors that I notice).

      I actually had to start with learning to make eye contact. In high-school, I literally walked the halls while looking down at the floor. I spoke so little that some classmates were surprised that I could speak (or could speak English, as I'm Asian) when I actually spoke up in class. I've since learned to chit-chat and hold non-technical conversations of some length even with people I don't really know. Some basic things can be learned from a book but I agree that there's a lot of "normal" socialization skills that cannot be learned by reading. There's simply no comparison to real-world practice. To get better at socializing, you have to--gasp--socialize.

    41. Re:Don't overlook people skills by Grishnakh · · Score: 1

      Those two don't go together. Lack of sex is a bad thing, as most people would agree (including the people who aren't getting any). But hatred of sports is a very good thing, as sports (the spectator kind) are a complete waste of time.

    42. Re:Don't overlook people skills by Grishnakh · · Score: 1

      Perhaps if you had studied it in first year you could appreciate the message. It's easy to be a cynic and judge everyone as boring and stupid, but it's a reciprocal thing and just ends up making you look boring and stupid to everyone.

      Perhaps I just don't like people that much? Is that such a bad thing?

      I know of nobody without an interesting hobby, pursuit or interest that they can't entertainingly espouse once you find what it is. Even those who are dreadfully dull and boring on most subjects can be enlightening and fascinating if you find their true passion.

      Most people do seem to have some sort of hobby or pursuit, but that doesn't mean I'd have an iota of interest in it. For instance, there are many men who spend all their free time keeping up with some stupid spectator sport: players, stats, games, etc. I'm sure one of them could talk my ear off, but that doesn't mean I want to hear about that crap. I'm sure their eyes would glaze over if I started droning on about my Nixie tube project or the Linux kernel or something similar; I don't have any delusions that such subjects are interesting to most people.

      This doesn't mean I can't find interesting subjects to talk about with people I like, or with people I choose to have a conversation with for some reason. But this idea that every single person out there has something interesting to talk about I find completely ridiculous. Maybe if you're the kind of person that just loves people so much that you can't stand to be locked in a room by yourself all day, you might think this, but some of us actually don't like being around others that much. We'd be perfectly happy being alone much of the time, and the rest of the time only spending around a small, select group of friends and loved ones.

    43. Re:Don't overlook people skills by rucs_hack · · Score: 1

      I stayed in a library an hour past closing because I didn't noticed while programming on my laptop, and the janitor threaten to call the cops on me if I didn't get out. :)

      Well I'd get hassled too if I stayed in the uni library after hours. I'm talking about labs open 24/7 though.

    44. Re:Don't overlook people skills by Anonymous Coward · · Score: 0

      Obviously you misplaced the parenthesized commentary, it should read:

      1) Smile the first second when you meet someone.
      2) Imagine you MUST say "yes" 9 times before you are allowed to say "no" to a co-worker (tho tricky if you are a very pretty female).

      Fixed it for you.

    45. Re:Don't overlook people skills by Anonymous Coward · · Score: 0

      Posting anonymously for reasons that will become obvious.

      The reasons aren't obvious. Why should you be ashamed of your son or yourself needing to work at learning social skills? It doesn't come naturally to everyone.

    46. Re:Don't overlook people skills by Anonymous Coward · · Score: 0

      Slashdot very nice. Learns me to get laid.

    47. Re:Don't overlook people skills by stewbacca · · Score: 1

      I love it when my examples are proven by random slashdot user's reply ;-p

    48. Re:Don't overlook people skills by Maxo-Texas · · Score: 1

      LoL....What a fun workplace that would be.

      Seriously, the rules for pretty females are different. What is a warm connecting smile for anyone else can be misinterpreted as "she likes me and wants to have sex with me!" I'm no a pretty female so I forget the suggestions in that area for them.

      --
      She was like chocolate when she drank... semi-sweet at first and then increasingly bitter.
    49. Re:Don't overlook people skills by AP31R0N · · Score: 1

      i recommend David DeAngelo's Double Your Dating (for the dudes in the thread)*. How To Make Friends and Influence People by Dale Carnegie, is also note worthy.

      Socializing is a SKILL. You can learn it, practice it and improve it the same way as you do any skill. Flirting, dating and romancing are also skills. A guy can add two points on his 1 to 10 rating just by being socially aware, confident and in control. Such traits have benefits beyond the bar and bedroom. Emotions are contagious. If you are sad and scared you will bring others down. If you are happy and confident, the moths will come to your flame.

      "Think of the people you've met you you've thought were assholes, arrogant, insecure, and fake. Chances are, they were none of the above; rather they just came off that way because they didn't know how to properly handle the nuances of social behavior."

      It could also be that !X people feel insecure when they are around X people. Where X is attractive, confident, wealthy, smart, secure etc. If you are a glowing beacon of awesomeness, your lack of light is all the more apparent. People insulate themselves against this by creating a story about their betters being fake or secretly unhappy. Anything to prevent them having to admit their own "faults" or worse yet, having to DO something about them. (i do realize we're talking about different things, your comment just brought this to mind)

      This is a variety of loser/victim mentality. A specific flavor of it is "fat girl" mentality. "See that skinny little girl with her hair all up and expensive clothes? She's probably high maintenance, spends all of her free time at the gym, starves herself or is otherwise unhappy". Some or all of that MIGHT be true, or it might not be. The fat girl compliments herself on being "real", instead of taking on the challenge of improving her situation. Note the use of 'little' and 'skinny'. When someone says "your little (game/job/girlfriend/etc), they are being dismissive. Skinny is supposed mean 'too thin'. Fat girls use the word skinny to describe healthy, attractive women so as to avoid responsibility and to say there is something wrong with the prettier woman. There are similar victim mentalities for race and social status. You can replace fat girl with any number of mindsets, i'm not trying to pick on them.

      * DYD turned me from a guy who could get 2 girlfriends a year to one who could get 2 girlfriends simultaneously. It also helped me figure out many other things about (my) life in general.

      --
      Utilizing the synergization of benchmark e-solutions to pre-workaround action items!
    50. Re:Don't overlook people skills by keenada · · Score: 1

      No, I explain what I mean fully.

      Being liked or likeable is one thing. Trying to get people to like you is quite another. People who are trying to be liked reek of it. It's blatantly obvious and shallow.

    51. Re:Don't overlook people skills by sgtrock · · Score: 1

      This is a Good Thing. If she thinks you're cute, she'll flirt back. It's kinda how we're wired. :)

    52. Re:Don't overlook people skills by sgtrock · · Score: 1

      Almost forgot. If she's from the Deep South, she'll be the one flirting first. I swear, there must be something in the water down there. /Every/ woman I've ever met from south of the Mason-Dixon line seems to flirt as naturally as breathing. I love Southern women. :)

    53. Re:Don't overlook people skills by MartinB · · Score: 1

      Be genuinely interested in other people. Everyone has something interesting about them. Figure out what it is and then let them talk about it. Remember, whoever talks most in a conversation is generally going to think it was a good conversation.
      Dale? Is that you?
      --

      The only thing you can accurately describe as "Scotch" is a sticky tape made by 3M. And it's

    54. Re:Don't overlook people skills by pojo_rising · · Score: 0

      "tho tricky if you are a very pretty female."

      I have it from reliable sources that the last time such an entity visited /. was never.

    55. Re:Don't overlook people skills by mattwarden · · Score: 1

      People who aren't good at it reek of it. People who are good at it make a lot of money. The difference is incredibly clear in my profession, and people who can't do this don't last more than a few months.

    56. Re:Don't overlook people skills by snl2587 · · Score: 1

      So you can die the death of a salesman!

    57. Re:Don't overlook people skills by GWBasic · · Score: 1

      Imagine you MUST say "yes" 9 times before you are allowed to say "no" to a co-worker. This does many wonderful things. a) respects their opinions b) lets them do things their ways c) you are perceived as likable and non-critical d) when you do rarely say "no" folks stop and listen because you respected them and you only say "no" when it is really important.

      I see right through that kind of stuff. I percieve such people as never making any commitment, because when they say "yes," I don't know if they really plan on following through or not.

    58. Re:Don't overlook people skills by Maxo-Texas · · Score: 1

      I can see how that would be a problem. That only applies to situations where they are agreeing to do work for you. My work involves a lot of talking and negotiations with others. By agreeing to a lot of little things, I am more likely to get some or all of the one big thing that I want while being perceived as unusually giving and helpful. And as you pointed out, I follow through on my yes's.

      A case where your objection might not apply... a co-worker wants to implement some new code in a way that is only 90% the way you would do it. While discussing it with them you can either push really hard for the 10% or you can ask why they want to do that part differently. After getting their answer... you think "Is this where I want to spend my 'no'"? In most cases, you will prefer to save your no and let them do their work the way they want. And since you asked them about it without pushing them (and this really happens to me all the time) they may either do it 93% the way you want it, or they may even go away-- think about it-- and come back and say "you know, you have a point- I'm going to do it the other way".

      It works in personal relationships too. The related dale carnegie principle is never criticize complain or condemn.

      Amazing stuff. Had one lady who's husband had driven her crazy with driving so she always was telling him to slow down and so on use it. She stopped criticizing. He noticed and asked why. She said, "I know you love us and you will drive as best as you can to protect us and you have never had an accident so I will trust you". Within the hour, he was driving more reasonably! She had tears in her eyes when she told us about the change.

      --
      She was like chocolate when she drank... semi-sweet at first and then increasingly bitter.
  3. Golf by UncleWilly · · Score: 1, Insightful

    Playing a good game of Golf will do more to further your career than most anything else.

    1. Re:Golf by Spleen · · Score: 1

      It's so terribly sad that the parent is right.

    2. Re:Golf by Anonymous Coward · · Score: 0

      People don't play golf like they used to. 20 years ago it would have made a difference. Now, not so much.

    3. Re:Golf by Bastard+of+Subhumani · · Score: 0, Flamebait

      Learn to stick your tits out and flutter your eyelids, it works for the bitchcow in my office.

      --
      Only three things are certain; death, taxes, and apocryphal quotations - Ben Franklin.
    4. Re:Golf by Fyre2012 · · Score: 1

      I'll disagree with that.
      As a Canadian working in IT, i've found the game to be more popular now than it was in my father's era. Players like Tiger Woods have done plenty to attract the average joe to the game, and for business-types, it's a great way to get outdoors, network, be out with 'the guys' and away from the 'wife and kids' for a bit.

      I've gone numerous times with my employers and their friends, and I tell ya that's where deals happen and great ideas can be born. Plus, if your boss is well-to-do, you can network with some pretty influential people. It's always interesting talking to various levels of multi-millionaire outside of work.
      Being able to 'hold your own' and play the 'gentleman's game' on the course says a lot to them about your ability to do the same in life, and thus they begin to accept you as more of a peer than a subordinate.
      And, of course, it all comes back to having the people skills for such a situation.

      --
      This is not the greatest .sig in the world, no. This is just a tribute.
    5. Re:Golf by flanaganid · · Score: 0

      It's quite the opposite. Golf has become incredibly popular, especially among businesspeople. It is possibly the single most effective networking tool in the arsenal. Think about it: if you treat the CEO of a company to a round of golf, not only do you get him in a better mood because he's out of the office and playing golf, but you have his ear for 4+ hours. The ability to write the round off as an expense is icing on the cake.

    6. Re:Golf by misleb · · Score: 1

      Playing a good game of Golf will do more to further your career than most anything else.


      Maybe for management, but not software development.

      -matthew
      --
      "THERE IS NO JUSTICE, THERE IS ONLY ME." -Death
    7. Re:Golf by vrmlguy · · Score: 1
      The parent post will get a lot of mods as "Funny" but there's a serious point behind it. After many years in the tech business, I've decided that the most valuable skill is salesmanship. I mean this in a generic way, of course. As an employee you have to sell yourself to your boss to get a raise, while as a consultant you have to sell yourself to your clients to get a contract. Heck, as a grad student you have to sell your ideas to your faculty advisors. Now, I don't mean a used-car salesman whom you probably never see again after you close the deal, I mean the long-term relationship type of salesman employed by tech vendors. Yeah, that's right, the types of salesmen who spend their days playing golf with their customers.

      So, my advice is to go the the library and read one of these books:
      Or if your library doesn't have these, follow the links to Amazon, find some similar books, and look for them at the library. The principles can be applied everywhere; they will make a real difference in your life.
      --
      Nothing for 6-digit uids?
    8. Re:Golf by misleb · · Score: 1

      It's so terribly sad that the parent is right.


      In what line work work? I've been in IT for 13 years and not ONCE have I ever been invited to work related game of golf. And I'm relatively successful. If your goal is to move into management and eventually be an CEO/CIO/etc with a large company, maybe, but for most people, particularly technical people, golf is not even in the picture.

      -matthew
      --
      "THERE IS NO JUSTICE, THERE IS ONLY ME." -Death
    9. Re:Golf by Mike+Buddha · · Score: 1

      You know, he could just take "Being a Douchebag 101" in college. That ought to cover all the buzzwords in your sales library.

      --
      by Mike Buddha -- Someday the mountain might get him, but the law never will.
    10. Re:Golf by gnick · · Score: 1

      I find that's only true if you want to recruit and manage projects. If that's your ambition (good $$$, but you don't get to get your hands dirty with code), then golf is indeed valuable. If instead you want to actually code / design projects / etc, I think it's more important to:
      1) Exude confidence in your abilities
      2) Have a knack (obsession helps) for IT stuff (coding, tinkering, general hacking, eating cold pizza at 3 AM, etc.)
      and
      3) Root yourself with the basics (definitely C - maybe ASM), but be able to quickly and confidently navigate the borg world (C# and similar) - Many interviewers know little except that those are the most recently updated and therefore the most important.

      --
      He's getting rather old, but he's a good mouse.
  4. If you want to be a developer by Safety+Cap · · Score: 4, Insightful
    Then read "The Pragmatic Programmer," especially "GOALS" on pages 14-15.

    Other than that, the only skills you need are

    1. The willingness to admit you don't know jack, and
    2. The desire and commitment to learn.

    The hard part: once you learn a thing or three, you need to go back and do #1 and 2 again. Forever.

    --
    Yeah, right.
    1. Re:If you want to be a developer by Anonymous Coward · · Score: 0

      I can't imagine programing in Fortran or Assembly now. Learning how to learn is the most important thing.

    2. Re:If you want to be a developer by sm62704 · · Score: 5, Insightful

      The hard part: once you learn a thing or three, you need to go back and do #1 and 2 again. Forever

      A fellow named Dennis Ringering, one of my undergrad instructors, was heard more than once telling some knowitall punk "I've already forgotten more than you've ever learned".

      --
      mcgrew's razor: Never attribute to stupidity that which can be explained by greedy self-interest
    3. Re:If you want to be a developer by markgaudreau · · Score: 1

      That is one smart comment, especially the "hard part" thing. It's so easy to just settle and think you know all you need to know.

    4. Re:If you want to be a developer by Stripe7 · · Score: 3, Insightful

      Problem solving skills, generally knowledge is not the issue. What you do not know you can find out, on the job it is mostly fix problems that crop up. Whether it be with people or machines or software.

    5. Re:If you want to be a developer by mmkkbb · · Score: 1

      Exactly. Skills in specific languages don't matter as much, because they keep becoming passé. If you can keep learning new ones (preferably on the job so you don't have to think up something to DO in that language) you'll be fine.

      --
      -mkb
    6. Re:If you want to be a developer by 0100010001010011 · · Score: 2, Interesting

      Volunteer, Get involved in 'hands on' classes. Volunteer with FIRST (If canada has it) or at other local high schools teaching kids something. Or take a course where the result isn't just a grade. I took a grad level course my senior year to help get me more knowledgeable with robots. I was asked more questions about how my robot worked on interviews than "Oh I see you know 50 programming languages."

      College doesn't teach you everything you need to know in the workplace. I'm a Mechanical engineer and I work for a big company that makes big mechanical things. I don't know anyone that's sat down and actually done a FE (finite element analysis) by hand. We have tools, but you also have to know the concepts behind it.

      I'm a 'bastard ME' as I'm actually in Mechatronics. (I took a liking to Matlab and went that path). I had some classes in building robots and I had those on my resume. I also had some completely unrelated experience. I found a job that I love. But in no way did any of those fully prepare me for what I needed to know, for example:

      I know Matlab, PHP, C, C++ and some Assembly. Mangers and other engineers still love Excel and Powerpoint to view data. I had to learn VB. I didn't have VB on my resume, but given that I knew some different languages my boss knew I wouldn't have a problem picking those up. I'm now learning how to interface Powerpoint with Matlab via ActiveX so that we can get some plots automatically generated. Again, I learned none of this in college. I don't even know if we had classes on it. But I knew the basics (for, if, while) and I learned to adapt that to other languages. I'm sure it's not prefect, but it gets me high ratings and it gets the job done.

    7. Re:If you want to be a developer by Amouth · · Score: 1

      i disagree..

      first rip your eyes out (they will only cause more pain later if you leave them in and try and read yours/others code)

      second - learn perl - and by learn.. i don't mean learn to read - or how to write - but really LEARN perl..

      everyone i know that truly knows perl has had no problem finding jobs with good pay

      sadly though.. once your in your stuck.. cause they woln't promote you cause your the perl guy.. the one of a few that truly know perl..

      --
      '...if only "Jumping to a Conclusion" was an event in the Olympics.'
    8. Re:If you want to be a developer by Toonol · · Score: 1

      Fortran, maybe not, unless you're in one of those weird spots where you're forced into it. But assembly is different; even if you don't have to program in it, you will greatly profit from knowing it. It's a fundamental building block of CS that impacts every language.

      Maybe like how knowing Greek and Latin will improve your English? Nah, that's a bad analogy. Can somebody give me something better, involving cars?

    9. Re:If you want to be a developer by 4D6963 · · Score: 1

      True, but you make it sound like a constant effort of humility in which you always must catch yourself into staying humble and learning. The way I live it sounds better, I first have an idea, then I look at what it takes to implement this idea, then I read/ask about the things that I don't know about yet in order to make it happen, then whenever I need I read/ask/experiment more.

      That's the way a programmer can start any project he can think of (within the limits of what's humanely possible in terms of workload/"learnload") without knowing a damn thing about what the project involves (that's how I started the linked in my signature, without knowing the first thing about signal processing and with barely more of a prior achievement than a hello world in C).

      And I'm not humble tho, I'm quite an arrogant cock actually. Just don't look at this whole thing as being humble and admitting that you don't know anything, you know what you know, and you know what you want and you know how to learn what it takes to do what you want, therefore sky is the limit.

      --
      You just got troll'd!
    10. Re:If you want to be a developer by JavaLord · · Score: 1

      Then read "The Pragmatic Programmer," especially "GOALS" on pages 14-15.

      I second the suggestion to read the Pragmatic programmer. Really though, if you want to be ready for the 'real' world, make crappy web apps that do CRUD stuff on a database via Java or .net , because that is what 80% of 'real' programming jobs are nowadays.

    11. Re:If you want to be a developer by Andrei+D · · Score: 1

      A fellow named Dennis Ringering, one of my undergrad instructors, was heard more than once telling some knowitall punk "I've already forgotten more than you've ever learned". Most likely he's paraphrasing a well-known song, I forgot more than you'll ever know
      It was covered by Johnny Cash, Bob Dylan, Jerry Lee Lewis, Patti Page, Kitty Wells, Jimmie Rogers, and the trio of Dolly Parton, Loretta Lynn, and Tammy Wynette. Great title, indeed
      --
      We often refuse to accept an idea merely because the tone of voice in which it has been expressed is unsympathetic to us
    12. Re:If you want to be a developer by Chandon+Seldon · · Score: 1

      A dead cat can do that to though though, and it'll only bid $3/hour.

      --
      -- The act of censorship is always worse than whatever is being censored. Always.
    13. Re:If you want to be a developer by mmkkbb · · Score: 1

      I am masochistic enough to LOVE Perl. Even though I do Java and C++ for a living, whenever I need to test a concept, or do any sort of ad-hoc text processing (important when we make sure our implementation of an algorithm matches the researchers') I whip out Perl.

      --
      -mkb
    14. Re:If you want to be a developer by DragonWriter · · Score: 1

      But assembly is different; even if you don't have to program in it, you will greatly profit from knowing it. It's a fundamental building block of CS that impacts every language.

      Maybe like how knowing Greek and Latin will improve your English? Nah, that's a bad analogy. Can somebody give me something better, involving cars?


      "Learning assembly will make you a better HLL programmer the way learning to synthesize the rubber used in the tires will make you a better Indy-car driver"?

      No, that's probably not the analogy you are looking for...
    15. Re:If you want to be a developer by Anonymous Coward · · Score: 0

      Then read "The Pragmatic Programmer," especially "GOALS" on pages 14-15.
      • Learn at least one new language every year. Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut. Additionally, learning many languages is far easier now, thanks to the wealth of freely available software on the Internet (see page 267).
      • Read a technical book each quarter. Bookstores are full of technical books on interesting topics related to your current project. Once you're in the habit, read a book a month. After you've mastered the technologies you're currently using, branch out and study some that don't relate to your project.
      • Read nontechnical books, too. It is important to remember that computers are used by people-people whose needs you are trying to satisfy. Don't forget the human side of the equation.
      • Take classes. Look for interesting courses at your local community college or university, or perhaps at the next trade show that comes to town.
      • Participate in local user groups. Don't just go a listen, but actively participate. Isolation can be deadly to you career; find out what people are working on outside of your company.
      • Experiment with different environments. If you've worked only in Windows, play with Unix at home (the freely available Linux is perfect for this). If you've used only makefiles and an editor, try an IDE, and vice versa.
      • Stay current. Subscribe to trade magazines and other journals (see page 262 for recommendations). Choose some that cover technology different from that of your current project.
      • Get wired. Want to know the ins and outs of a new language or other technology? Newsgroups are a great way to find out what experiences other people are having with it, the particular jargon they use, and so on. Surf the Web for papers, commercial sites, and any other sources of information you can find.
  5. Repeat after me... by east+coast · · Score: 4, Insightful

    Practice saying "Would you like fries with that"

    I wish you the best of luck but unfortunately you're going to see a lot of really good answers and they're all going to be right. Personally I would do whatever I like to do but become more robust with it. Knowing six languages on a beginners level isn't as good as knowing one ot two in-depth.

    --
    Dedicated Cthulhu Cultist since 4523 BC.
    1. Re:Repeat after me... by ari_j · · Score: 4, Insightful

      Better yet, learn at least three vastly different languages at at least a high intermediate level, or even master them. When you are confronted with a problem and immediately see its solution in, say, C++, Lisp, and Ruby, you will be able to quickly choose the right tool for the job (where "tool" could mean "closures" or "objects" just as easily as it could mean "Lisp" or "C++"). Even if you don't have that tool available to you (if your employer requires you to use Java, for instance), you will still be able to solve the problem faster and more elegantly.

    2. Re:Repeat after me... by Anonymous Coward · · Score: 0

      When you are confronted with a problem and immediately see its solution in, say, C++, Lisp, and Ruby, you will be able to quickly choose the right tool for the job.

      And then you will be told what language to use, probably by someone who knows next to nothing and isn't smart enough to know that he knows next to nothing.

      Seriously, very rarely does a Jr. Programmer get to choose the language for the solution. Often for good reason.

    3. Re:Repeat after me... by sm62704 · · Score: 1

      Forget what those guys said, don't even bother learning any foreign languages, or anything else you're not likely to learn.

      The caveat is, if you want to study a French author then you'd better learn French. But learning French will otherwise do you no good whatever in Kansas, and if you ever move to France or BC then you can learn French.

      It is handy, however, to be able to curse at a person in a language they don't undertand (Puta, su madre es un perro y usted es mierde. Besa mi cula). Also when you see the dual language signs when mopping the floor it's handy to know that "piso mujado" does not mean ":no pissing on the floor".

      Learn your own language. Become as literate in it as you possibly can.

      --
      mcgrew's razor: Never attribute to stupidity that which can be explained by greedy self-interest
    4. Re:Repeat after me... by TheRaven64 · · Score: 2, Informative

      These are the six programming languages I think everyone should know. If you have more time after that then learn FORTH (or PostScript if you want a real challenge and like pretty pictures) for a good example of a stack-based language. I'd also consider adding Self, Io or JavaScript (or NewtonScript if you can find a machine that runs it) to that list. You can do prototype-based OO in Smalltalk but it's not nearly as easy as doing it in a language designed for it.

      --
      I am TheRaven on Soylent News
    5. Re:Repeat after me... by Shotgun · · Score: 1

      Better yet, learn at least three vastly different languages at at least a high intermediate level, or even master them.

      Make sure one of those languages is a popular dialect in India, and another is a popular dialect of Chinese, because from where I'm sitting that's where all the jobs will be in a few years.

      --
      Aah, change is good. -- Rafiki
      Yeah, but it ain't easy. -- Simba
    6. Re:Repeat after me... by kisrael · · Score: 1

      Practice saying "Would you like fries with that"

      ???? That seems needlessly snarky, and in the most trite way possible...
      the whole implication he's headed only for a menial retail-ish job is
      both negative and not particularly wellfounded.
      --
      SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
    7. Re:Repeat after me... by east+coast · · Score: 1

      It's called humor. Look into it.

      --
      Dedicated Cthulhu Cultist since 4523 BC.
    8. Re:Repeat after me... by ari_j · · Score: 1

      Often, that reason is that he failed to read my entire comment. Try again - I already confronted exactly the problem you raised. :)

    9. Re:Repeat after me... by M.+Baranczak · · Score: 1

      The caveat is, if you want to study a French author then you'd better learn French. But learning French will otherwise do you no good whatever in Kansas, and if you ever move to France or BC then you can learn French. Ideally, you should learn French before moving to France. It'll make things much easier both for you and for the French people.
    10. Re:Repeat after me... by ari_j · · Score: 1

      My knowledge of Latin and Greek makes me a better English reader, writer, and speaker.

    11. Re:Repeat after me... by ari_j · · Score: 1

      All the coding jobs will be there. Many of the real problem-solving jobs will still be held by capable western problem solvers. That's why you want to be a good problem solver and a good tool selector. It's also why I recommend that everyone know at least one language which involves more thinking than typing - because the typing jobs will eventually all be done by eastern code monkeys, but the thinking jobs can be kept in the West.

    12. Re:Repeat after me... by sm62704 · · Score: 1

      I found when visiting Thaland in the USAF that being immersed in a culture is the best way to learn the language. I'd learned Spanish in high school, and it did NOT prepare me for working at Disney World. If they'd dropped me off in Mexico after my two years of Spanish I'd have starved; I wouldn't have been any better off than I was in Thailand, where it onlt took a few weeks to start learning anough Thai to get by on.

      --
      mcgrew's razor: Never attribute to stupidity that which can be explained by greedy self-interest
    13. Re:Repeat after me... by sm62704 · · Score: 1

      My knowledge of piglatin and geek makes me a better programmer and whiskey drinker!

      --
      mcgrew's razor: Never attribute to stupidity that which can be explained by greedy self-interest
    14. Re:Repeat after me... by Deanalator · · Score: 2, Interesting

      Of course it totally depends on what you want to be doing. I got my undergrad last December, and have been working on as a security engineer since last may. At school we did data structures in c++, operating systems in c, and compilers in java. I am sure that gave me a pretty solid base, but it is not how I got my job (I never let my schooling interfere with my education). I have one of the few jobs where knowing a ridiculous amount of languages is actually useful. For me, knowing how to calculate data flow in a multitude of languages is more important than familiarity with implementing specific solutions.

      Keep in mind that computer science is essentially a branch of discrete mathematics. The skills you learn in the undergraduate curriculum are useful to a multitude of fields. It's not just a degree in "computers" as some people seem to think. For example, a good friend of mine did his undergraduate in CS, then got an MBA. He now works for a consulting firm that optimizes business hierarchies for multi billion dollar corporations.

    15. Re:Repeat after me... by Anonymous Coward · · Score: 0

      they're all going to be right.


      they're all going to be right, but for different people. For work you really need to be interested in something to be good at it. If you listen to all the other people you may not pick what interests you and what you are good at. I suggest getting involved with some free software projects and finding out which languages and which type of software you like.

      I'd also like to disagree a bit about the six languages bit. In the end, what you do in one language isn't that much different from another, however different languages shape the way you think in interesting ways. You should know at least one functional (lisp / haskell), one procedural (c / pascal), and one declarative (sql / prolog) language. You should understand how to use objects both in an object oriented language (C++ / Java) and a one where you can construct and control the objects yourself (C / Perl 5 / Scheme). This will give you the ability to realise when you are doing something completely against the grain of a language (trying to system program in Java) or where a completely different system would give a better solution (trying to store and query data directly in C).

    16. Re:Repeat after me... by 19061969 · · Score: 1

      yo, I, like, studied both, Greek and Latin for, years at skuul and: im much beter at my inglish. i speek very best!

      --
      bang goes my karma... again...
    17. Re:Repeat after me... by Mike+Buddha · · Score: 1

      Knowing six languages on a beginners level isn't as good as knowing one or two in-depth. What is your definition of "good"? If by "good" you mean that you're able to get a job, then I'd beg to differ. Knowing enough of a language to get through an interview is far more useful than knowing the ins and outs of one or two languages. I think it's a huge mistake to pigeonhole yourself as "The C++ guy" or "The Java Guy". Everybody learns when they're on the job. If you can show a beginner aptitude in 6 languages with a solid software engineering base knowledge, you'll be much better off, and be a much better programmer.

      This is all moot, of course, because you don't have to decide if you're going to know one/two languages with expert proficiency, or 6 others with a baseline proficiency. You can do both (and will if you stay in it long enough). We don't live in hypothetical-situation-land, thank God.

      --
      by Mike Buddha -- Someday the mountain might get him, but the law never will.
    18. Re:Repeat after me... by Fulcrum+of+Evil · · Score: 1

      I recommend a deep knowledge of Japanese and German. Latin will help with romance languages.

      --
      "We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
    19. Re:Repeat after me... by gillbates · · Score: 1

      This is good advice for your personal and professional development as a programmer. But one thing you should keep in mind is that in practice you use the language your employer mandates you use. You don't often get to choose, and the language used is often times less than optimal for the problem you are solving. Learning how to creatively work around the limits of a language without creating an unmaintainable mess of code is the mark of a professional. It will get you much farther than complaining about how language X isn't suited for the job.

      Though, you also need to be realistic. If the language is so outdated that it can't do the job, you might be better off moving to a different company before the project fails and you get the blame.

      --
      The society for a thought-free internet welcomes you.
    20. Re:Repeat after me... by Chandon+Seldon · · Score: 1

      Latin will help with romance languages.

      True, but Italian, French, or Spanish will help more. As far as I can tell, the languages are more alike than they are similar to Latin.

      --
      -- The act of censorship is always worse than whatever is being censored. Always.
    21. Re:Repeat after me... by Fulcrum+of+Evil · · Score: 1

      Currently working on Italian - vocab is such cake.

      --
      "We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
    22. Re:Repeat after me... by Em+Adespoton · · Score: 1

      Knowing six languages on a beginners level isn't as good as knowing one ot two in-depth.

      And, of course, that depends on what you see yourself doing. As someone who has to review a lot of code written by others but doesn't have to write much from scratch myself, I'm glad I know 6 languages at a beginners level AND one or two in-depth.

      Of course, other than the memory management issues, "knowing a language" doesn't mean much -- as long as you know a few paradigms, any language should be easy to pick up. The trick is learning the development libraries being used wherever you plan to work.

      If you're going after the Java jobs, you will be replaceable. Sure there are a lot of them right now, but the learning curve isn't all that high, so the jobs can be easily outsourced. Being the one person who can actually sit down, scrap all the Java code and write something dependable in C and ASM for specific hardware will bring you job security and a higher income.

      The main thing to remember is that you have never arrived. You'll have to keep learning after you've left University; the school education just gives you a standardized jumping-off point.
    23. Re:Repeat after me... by Fujisawa+Sensei · · Score: 1

      All the coding jobs will be there.

      This is very bad.

      Many of the real problem-solving jobs will still be held by capable western problem solvers.

      And after coding for awhile the coders will become problem solvers, and you're nice high-paying problem solving job goes over there too.

      because the typing jobs will eventually all be done by eastern code monkeys, but the thinking jobs can be kept in the West.

      Keep believing that, those people aren't stupid, they have the same capacity to develop problem solving skills that you do, and there's a population pool of more than 2 billion as opposed to 300 Million to pick from. So eventually they will find somebody as smart, if not smarter, with problem-solving skills, who is willing to work for half as much, and you get replaced just like the code monkeys.

      --
      If someone is passing you on the right, you are an asshole for driving in the wrong lane.
    24. Re:Repeat after me... by Tablizer · · Score: 1

      Practice saying "Would you like fries with that"

      You mean, "Welcome to Walmart". Burger order taking is being offshored too.

    25. Re:Repeat after me... by mattwarden · · Score: 1

      Better yet, I would suggest he master everything.

    26. Re:Repeat after me... by Al+Dimond · · Score: 1

      Dude, my Spanish isn't all that great, but... your curse appears to be confused in areas of gender and address.

    27. Re:Repeat after me... by Anonymous Coward · · Score: 0

      Can someone point me in the direction of these semi-mythical places that allow you to pick and choose what development environment and/or programming language is best suited to a task. I really want to know where to find one because everywhere I have worked and every job I have ever seen always has a specific environment/language they insist you use.

    28. Re:Repeat after me... by ari_j · · Score: 1

      You, and several others, failed to actually read my entire comment. By the way, that's why you are stuck in jobs where you have no say in what tools you get to use: You don't finish even the simplest tasks.

      I clearly stated that, even when you don't have a choice of language, knowing which language would be best for the task at hand will still make your code in the employer-mandated language better. I know that it was buried at the end of my insanely long comment, but I assure you that it would have been a worthwhile read had you made it to the end.

    29. Re:Repeat after me... by ari_j · · Score: 1

      Oh, I won't be replaced. I already got out of the IT field. This is just a hobby for me now that I have a career that can't be outsourced, not even to another US state. :)

    30. Re:Repeat after me... by sm62704 · · Score: 1

      Which illustrates my point exactly - if you don't use it you'll lose it. There's no point in studying Spanish unless you're going to be in a Spanish speaking country.

      --
      mcgrew's razor: Never attribute to stupidity that which can be explained by greedy self-interest
    31. Re:Repeat after me... by kisrael · · Score: 1

      I thought humor was supposed to be funny, and preferably original, and this fails on both counts.

      "Do you want fries with that", unadorned, ceased counting as slashdot humor around 10 years ago.

      Usually it's a mark of Engineer scorn for Liberal Artists; here it was just trotted out as a fairly damning accusation that this young programmer was already hosed career-wise; an accusation that deserved at least some kind of support.

      --
      SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
    32. Re:Repeat after me... by east+coast · · Score: 1

      I thought humor was supposed to be funny, and preferably original, and this fails on both counts.

      If you fail to see the humor in it than you do need to check into getting a sense of humor.

      "Do you want fries with that", unadorned, ceased counting as slashdot humor around 10 years ago.

      The term is both much older than and much more encompassing than Slashdot. I'm not one of the Slashdot users who live and die by what's going on around here, thankfully. There are already far too many users here who can't relate to the real world and that don't understand that the ramblings of 50,000 or so (myself included) geeks doesn't count for anything in the real world.

      Usually it's a mark of Engineer scorn for Liberal Artists; here it was just trotted out as a fairly damning accusation that this young programmer was already hosed career-wise; an accusation that deserved at least some kind of support.

      Yeah, meaning that the future of the industry is bleak. It is but my comment was meant tongue-in-cheek. I'm surprised you didn't bust on the guy who said "girls and parties" as trying to derail this impressionable young man from his future career.

      --
      Dedicated Cthulhu Cultist since 4523 BC.
  6. Ask prospective employers by Dragonshed · · Score: 4, Insightful

    You will likely get both good and bad opinions in response to this question here on slashdot, but my best advice would be to ask this question of employers that you might be interested in working for.

    1. Re:Ask prospective employers by StaticEngine · · Score: 5, Insightful

      Agreed.

      One of the best things I did was to shotgun a few letters to prospective employers telling them how highly I thought of their company, and asking what I should focus on if I wanted to be hired there. The vast majority of them sent me back a "we'll keep your resume on file" letters (when I had not in fact sent a resume, but it was still good to know how impersonal these companies were, and learn that I probably didn't want to work there), but one CG Effects company in particular wrote a three page letter back stressing certain coursework and areas of expertise that I should focus on. While I never wound up applying to that company due to other circumstance, it was very valuable to hear from industry professionals, and get an informed opinion.

      I suspect this type of answer to your question would be much more valuable than a random smattering from the /. peanut gallery, although you probably wouldn't get to be amused by someone writing back that they're allergic to peanuts, and that I'm an insensitive clod.

      Good luck!

    2. Re:Ask prospective employers by apt142 · · Score: 2, Insightful

      Unfortunately, employers are often don't know what they want their employees to know. Take a look through some job descriptions and see how many show up with impossible requirements. (5 years experience in a language only out for say 3.)

      I'd suggest to the original poster to just mess around with anything that catches their eye. The more, the better. That way, he/she learns what he/she likes to mess around with and gets exposure all over. After that, I'd suggest finding some technologies that really intrigue him/her and learning as much about them as possible.

      I know that in pursuit of knowledge in my key area, I've had to learn a lot of things that are seemingly outside of it. I also believe that if you develop the passion for the work, you'll find a place to do it that will bring you the income.

    3. Re:Ask prospective employers by mr_josh · · Score: 1

      Yes! Someone mod this up. Asking questions is good, and while there are a large number of successful professionals from many industries on slash, the best advice you're going to get here is probably going to be, "Ask the people you want to be hired by."

    4. Re:Ask prospective employers by NeilTheStupidHead · · Score: 2, Funny

      I'm allergic to insensitive clods you peanut!

      No, wait...

      --
      Lose: misplace or fail || Loose: not bound together
    5. Re:Ask prospective employers by garcia · · Score: 1

      Unfortunately, employers are often don't know what they want their employees to know. Take a look through some job descriptions and see how many show up with impossible requirements. (5 years experience in a language only out for say 3.)

      Well, some think they know (by making those obscene job descriptions) but you may want to find one where you set the requirements for the job. After 3.5 years of job hunting following my move to Minnesota, I found a place of employment that let me develop my own job description in the first year. I wasn't limited by anyone except myself and I found that the job I created is a much better fit for me than any other could have been.

      While this might not work for everyone, it has opened new doors by allowing me to explore any direction I can think of and then add it to the "list of stuff I do," which now totals over 15 pages.

      I'm always looking for better employment (more money!) but I have yet to find another location that gives me the freedom to learn, expand and help them do what they need to have done quite like my current job.

      YMMV.

    6. Re:Ask prospective employers by mrlpz · · Score: 1

      "(5 years experience in a language only out for say 3.) "

      This is one of those "If I had a quarter for every time I ran across this" quotes. What everyone's forgetting is the particular focus of the two authors of this article, and it's DEFINITIVE slam of the whole quagmyre state of outsourcing, and the "programmer as cog" mentality that's not only pervaded business-types, but has somehow backwashed itself into academia. It's specifically BECAUSE no matter what area of computer science interests you, there SHOULD be SOME specialized coursework ( for which there should be no substitute for ) that targets that area for an undergraduate ; regardless of what underlying theory-based course he/she receives. I remember when I was in college in the 80's ( mega-slacker that I was ), were TOLD... "go forth, yes forth, and lisp, and c, and even assembler, and multiply out unto the land...and your code shall bear much fruit" ( or something to that effect ). The point was that we weren't just encouraged to do so, it found it's way into the freaking curriculum ( Pascal programming not withstanding ).

      Much HAS been lost due to the Frameworks, and the CLR's, ByteCodes, and IL's of the world ( it's all UCSD Pascal's fault, those who know, will remember ). Supposedly as much, if not more has been gained ( but not when I see some people's code, unngh ), but if that were true, why does it still feel as though it's a zero-sum equation in software engineer these days ?

      Is it the outsourcing ? Is it the plethora of me-too dynamic languages ? Or the tell-me-what-not-how miasma of functionalati, pushing all manner of contrived names for programming languages, which all do "something" kind of neat, but not EVERYTHING good enough to be generally useful ?

      It seems as though every new programming language today is a research project or dissertation run amok, and a novelty syndrome has taken hold of the youth of programming today.

      Now I'm not saying "Hey let's go back to Cobol" ( actually, I keep a loaded spud, that's potato pellet boys and girls, shooter for just such circumstances where one might crop up ). What I am saying is that if it took the Java folks almost 10 years to come back around to recognizing that the following line of code has actual elegance, we have a serious problem everywhere else:

      printf("hello %s world", cruel_string );

      What I think we really need is a "Jump the Shark" measurement gauge to apply to all languages that "get full of themselves". C, and to a lesser degree C++ started out rather unpretentious. Forth just cared about making sure things were threaded together nice and presentable. Heck, even Modula and Modula-2 were just trying to make a way for themselves without being ostentatious. You could even say that Oberon ( yes, I'm talking about your progenitor C#, so listen. What ? Who didn't know C# was really a genetically modified Oberon ? You! Dunce cap for you ! ) was that smart know-it-all who actually stopped to learn some social graces with the environment around it.

      I challenge someone anyone with a big enough reputation to say "Stop the stupidity", we don't need 18 ways from Sunday to compose a lambda expression just to generalize an operation, or perform some relational algebra-like expression in pseudo-sql syntax. Or as I like to call it....when is equal not equal to equal but is an equivalence. When everything was a pointer, that meant something. It meant "use your brain, silly, that's why it's bolted onto your shoulders".

      Anyway, enough of waxing nostalgic. Before this post "jumps the shark" too.

    7. Re:Ask prospective employers by Anonymous Coward · · Score: 0

      ask this question of employers

      That's a good answer. Also actually working part-time for an employer or two, if you really do have spare time. Cuts down on debt too. The campus might even have some low-level development positions around. Mine did.

      My education has not been particularly difficult or time consuming to get good grades

      What? What-what? Does the business combo take all the hard CS course out?

      Even the people who found the many courses easy had to push themselves at my University in a good portion of the classes. By third year in Canada, I was working *hard* to get an A or B in some of the courses. Some of the easier classes compensated with more grunt-style homework.

      Half the point of a BSc seemed to be to make you prove you'd work for it. The effort alone weeded out a large percentage of the lazy folk.

    8. Re:Ask prospective employers by Darinbob · · Score: 1

      It's important to try and do what you want to do. The issue of "more jobs available for X" shouldn't be a big concern. There are far far more jobs available in the fast food industry than in any programming field. But programming usually pays more, you get more respect, you have more career options, the work is more interesting, etc.

      Similarly, just because there may be more generic programming jobs at data warehouses does not mean you're necessarily going to like those jobs. The more jobs there are in a field, the more the companies are going to hire the cheapest labor they can get that can get the job done, and treat the workers as interchangeable units.

      Instead find out what you really like to do and see what it takes to make that a reality. What were your favorite subjects, what projects interested you the most, etc. I think a lot of students and parents fall into the trap of thinking "the field of X is booming, that should be your major", and often I've seen these fields either dry up or get saturated with poorly trained grads.

      When you know what to do, then talk to your professors and see what advice they have. Then get an independent study project going with them or join a group project.

      That said, you probably won't get your dream job out of school. You will probably have a crappy job. You may be doing Data Warehouse jobs. But 2 or 3 jobs later you may be positioned where you want to be.

    9. Re:Ask prospective employers by Anonymous Coward · · Score: 0

      I'm allergic to peanuts, you insensitive clod!!

    10. Re:Ask prospective employers by Futil3 · · Score: 1

      commenting to cancel my mod, sorry. :)

    11. Re:Ask prospective employers by NeilTheStupidHead · · Score: 1

      Thank you kind sir (or ma'am).
      You are no peanut. ^>^

      --
      Lose: misplace or fail || Loose: not bound together
    12. Re:Ask prospective employers by Anonymous Coward · · Score: 0

      >we'll keep your resume on file
      If you ever work with an HR dpt you will find that the world has an incredible amount of time wasters - this is probably an auto responder or equivalent.

      >While I never wound up applying to that company
      yeah exactly this is why most companies won't go out of their way to help you out

      --
      School isn't difficult you are paying them for a teaching service and you are the customer - i think this is why so many get a shock.

    13. Re:Ask prospective employers by Xiaotou · · Score: 1

      Good advice!

      From a slightly different angle: I once applited for a job in NYC. They wanted to do a telephone interview, so two of their Senior Engineers called me one evening. Suffice to say, I crashed and burned... badly. In my own defense, I was already a solid C++ developer, but they were doing some cutting edge stuff that I had, honestly, bever even heard of (Template Meta Programming, or TMP, if you have to know). Even so, it was embarassing. Even worse was the fact that these two guys were super nice, easy to talk to, and they seemed to be very knowledgeable.

      So, while they were wrapping it up (and telling me not to hold my breath), I decided to turn things around. I let them know that I had no illusions of getting the job, but that I really wanted to improve myself and make myself more marketable. That began several months worth of e-mail correspondence and mentoring. They pointed me in the right direction, and I followed their advice.

      Since that happened, some five years ago, I have been able to double my salary. I have made three jumps since then (one company got sold, and one company, a startup, went bankrupt), and I have literally been able to negotiate myself to double what I was making at that point. I also learned to love TMP. Alexandrescu is one of my heros!

      Anyhow, my point is not how wonderful I am (I'm not... I'm just smart enough to realize that I know very little), but that, IMHO, to be successful in this industry, you should seek out the gurus and listen and learn. They might be Professors, Managers, or Engineers, and they might be dedicated C, or C++, or even Java coders, and (gasp) they might even use Windows! Read books and blogs, and practice at home.

      It's like martial arts: you have to practice until you die.

      Also, finding the right industry helps. I've worked in the Defense Contracting, Medical Imaging, and, now, Financial Industries. FWIW, here is my take on these:

      Defense: Lots of diversity in skillsets. I was on a team with people who coded in Ada, C, Fortran, C++, and Perl. I did C++ on Solaris. The industry usually pays pretty well, but it's not terribly stable, especially if you support contracts from foreign countries. My team did so, and, from time to time, governments changed, contracts were cancelled, and people were laid off. Even so, it was way cool doing things like going to Taiwan and watching them dance with the Chinese military via a $15 million miltary radar system. Mmm... lots of fun toys in Defense contracting.

      Medical Imaging: Not as programming-language diverse, but more lower-level people (lots of embedded work, for example, which is often done in C using VxWorks, etc), as well as C++, which I did (mostly windows, some Linux). Not as much money, but I enjoyed going to clinics and learning how to X-Ray people. Making something that can save lives is also rewarding. Can be pretty stable.

      Finance: Lots of money! Also long hours, in many cases. Even though the industry is going through tough times, the developer positions are still pretty secure. The layoffs you read about are mostly sales/marketing/trading jobs. The companies still need their technology. We use a lot of C# and Java on Windows, although some companies prefer 'nix. Lots of SQL and data structures stuff. IMHO, this is the best industry to be in, from a compensation point of view. Hard to get your foot in the door, though. The best thing to do is to find a good recruiter who knows the companies and can steer you to the right jobs.

      Sorry for the long-winded post, but this thread seems to be all about sharing experiences and giving advice.

  7. Personal finances and Confidence are the two by GenKreton · · Score: 5, Interesting

    First s learning personal finances will give you an edge on nearly every other student graduating. Know how to balance your finances, plan, budget, etc.

    Second is confidence. Confidence in the skills you do have an ability to gain new ones. Have confidence in interviews especially. Confidence enough to demand more sometimes, too. Confidence directly addresses your questions of how to make yourself more employable.

    The skills you need and success in life should follow those two. Actual skills programming have less to do with you getting employed than you may think.

    1. Re:Personal finances and Confidence are the two by chiph · · Score: 1
      The parent is right on many levels.

      1. Know personal finance so that 40 years from now, you aren't the Wally-World greeter. Having an independent source of money is incredibly liberating. True freedom is the ability to go where you want, do what you want, and when you want. Money makes that possible.
      2. Understand that in business, it *always* comes down to money. Your bosses will always want to know the answers to these three questions:
        • When will you be done?
        • How much will it cost?
        • What are you standing around for?
      Chip H.
  8. Requirements lacking in most graduates by MSTCrow5429 · · Score: 4, Insightful

    Spelling, grammar, basic math, an understanding of economics, and a knowledge of the outside world.

    --
    Slashdot: Playing Favorites Since 1997
    1. Re:Requirements lacking in most graduates by seconddevil · · Score: 1

      You mean there is a world outside!?!?!?

    2. Re:Requirements lacking in most graduates by at_slashdot · · Score: 1

      Bizzaro Slashdot?

      --
      "It is our choices, Harry, that show what we truly are, far more than our abilities." -- Prof. Dumbledore
    3. Re:Requirements lacking in most graduates by Anonymous Coward · · Score: 0

      I haz a crehdit kard wif $500 limit, I can haz new ps3 (is $499.99 befour taxez!)?

    4. Re:Requirements lacking in most graduates by Anonymous Coward · · Score: 0

      I'd mod this up as interesting or insightful if I had mod points. But that's purely because it's so true of many of the people here.

    5. Re:Requirements lacking in most graduates by januth · · Score: 2, Informative

      Communication skills: spelling, grammar, public speaking, etc. If you can't make yourself clearly understood, or if you come off as an ignorant cretin, no one is going to be interested in any other skills you might have. I just had a resume cross my desk advertising a candidate's ability as a "NETW0RK ADMINISTRATOR"...a silly mistake, but if you miss a detail like that on your resume how much are you paying attention to detail on those netw0rks you are supposed to be administering?

      Business Acumen: Have a basic understanding of accounting, finance, and economics. Think about how IT/IS makes things happen for an organization, how it impacts the bottom line.

      Breadth of IT Skills: You can develop apps in a variety of environments...that's nice. But what do you know about databases, networks, servers, the care and feeding of end-users? Too many developers come up short here and are content to code in a vacuum and it shows in their work.

      Presence: Learn to leave the teenage and 20-something mannerisms and slang behind. Workplace email is not the same as your personal IM or text messages. Comport yourself and your writing in a manner befitting the situation. Restrict your use of the word "like" to no more than five times a day.

      Hope this helps...

    6. Re:Requirements lacking in most graduates by SQLGuru · · Score: 1

      I haz no n'cum and a crehdit kard wif $500 limit, I can haz new ps3 (is $499.99 befour taxez!)? Fixed

      Layne
    7. Re:Requirements lacking in most graduates by zolaar · · Score: 1

      ... and a knowledge of the outside world.

      All I know is that there are bears out there. That's why it's called Bearland.
      --
      One man's constant is another man's variable.
    8. Re:Requirements lacking in most graduates by anaesthetica · · Score: 2, Interesting

      About communication, I agree wholeheartedly. I spent last semester as a TA at JHU. Admittedly it was in a non-comp sci field, but nevertheless I had to grade some pretty atrocious essays and exams from freshmen and sophomores. I found it shocking that kids could get into a top tier university without knowing how to write an essay. I gave each a page of comments, and almost all would start off with: number your pages, don't use the first person in academic writing, don't use contractions in formal writing, proofread to catch typos, etc. The second paragraph would go over organizational issues, e.g. not having a thesis until five pages into their ten page paper, not explaining how paragraphs of evidence support their argument, and so on. A lot of the exams read more like diagrams (especially from the engineering students) than essays.

    9. Re:Requirements lacking in most graduates by KevReedUK · · Score: 1

      Restrict your use of the word "like" to no more than five times a day.

      Unless you are planning on writing apps front-ending sql data stores... kinda tricky to query certain datatypes without the use of this "forbidden word"!!!
      --
      Just my $0.03 (At current exchange rates, my £0.02 is worth more than your $0.02)
    10. Re:Requirements lacking in most graduates by MSTCrow5429 · · Score: 1

      Only Canada. All the people were eaten by the polar bears. So if you're dealing with a Canadian, remember, it's not a human. It's a bear.

      --
      Slashdot: Playing Favorites Since 1997
  9. Learn how the hardware works. by Anonymous Coward · · Score: 2, Insightful

    Learn how the hardware works. The concept of code portability is limited. Compilers on diferent architectures do not always convert intergers, floats and strings the same way. Also memory structure can bite you real hard.
    The more you know about what is under the hood, the more likely you are to craft code that is actually portable and that will be useful for more than just one generation of processors.

    1. Re:Learn how the hardware works. by TheRaven64 · · Score: 2, Insightful
      I'd generalise this. When you are writing code there are three important layers of abstraction:
      1. The user interface.
      2. The algorithm.
      3. The language.
      4. The instruction stream.
      The best programmers are the ones who are able to think at all four levels (and some sub-levels) at the same time. In many ways the language is the least important of these, it only exists to allow you to write the kind of thing humans think about (the algorithm) in something that is easy to turn in to something the machine understands (the instruction stream).
      --
      I am TheRaven on Soylent News
  10. Party more! by motek · · Score: 1

    This should give you a proper outlook on what is important in life. If you still have some time left over, I suggest you learn a foreign language of your choice. Better even - learn two. Or maybe read some philosophy. There is more to being a good carpenter then knowing how to hold a plane.

    --
    I would like to die like my grandfather did - sleeping. And not screaming in terror, like his passengers.
  11. Low level languages by Reverend528 · · Score: 0, Flamebait

    Well, you know Java. That's pretty low level. It doesn't even support the functional paradigm (one of the oldest in computer science).

    1. Re:Low level languages by arotenbe · · Score: 1

      It doesn't even support the functional paradigm (one of the oldest in computer science). If I understand you correctly, you are trying to imply that the older a given paradigm is, the more useful it is. Allow me to paraphrase you:

      It doesn't even support the spaghetti code paradigm (one of the oldest in software engineering). Java has its uses, just like any other language. Don't criticize a language based on what features it has. You should only look at how suited the language is to the task at hand.
      --
      Tomato wedge sperm darts that are Republican.
  12. Business classes by EveryNickIsTaken · · Score: 3, Insightful

    To increase your marketability, take as many business/mgmt classes as possible. Also, get a part time job or internship so you can network. Knowing things besides how to code (and building a good network) will likely be the most important factors in you getting a job.

    1. Re:Business classes by OldSoldier · · Score: 1

      I agree with this completely, but allow me to sell the original poster on it from another angle.

      First, he states that he's breezing through his courses w/o much trouble. Sounds like he has spare capacity for a few extra classes. While I personally believe biz/mgmt classes will be exactly the leg-up that the poster above mentions, you may do better to add extra non-CS courses that YOU personally find interesting. If you like economics better than marketing... take an econ course. If you like physics and math, take some of those courses. If you don't know if you'll like something, try to take a freshman level course in a related area. If you hate it and it's hard, it shouldn't be too hard after all it is freshman level and/or you could hopefully make up your mind before it's too late to drop out. Alternatively... DON'T (formally) TAKE ANYTHING, but audit the course instead. Many universities (here in the US at least) allow you to sit in on classes for no credit. I think you'll learn more if you take something for credit, but if you're nervous about going too far afield from the CS dept then go crazy and audit first, then if you liked it as an auditor... see if you can enroll for grades in a subsequent term.

      Bottom line... if you merely get better at CS then... how unique will you be in the work force? Even in the case where you can finish a masters level of work while an undergrad, you're still as useful to an employer as any other masters level student. But... how many CS majors have minors in biology, mathematics, economics, marketing, journalism, political science, etc... You want to distinguish yourself? Go further afield.

      And oh yea... I agree with the comment of learning 1-2 programming languages really well rather than a lots but only at a beginner level.

    2. Re:Business classes by B4D+BE4T · · Score: 1

      Yes, an internship is key. It's beneficial for both sides. Students like internships because you get your foot in the door and you get a preview of what you will be doing once you graduate. This will give you a much better idea of what you will need to do during your remaining time at school to prepare for your first job. Companies like internships because interns are cheap labor and it gives management a chance to hire an employee for a trial period.

  13. I wouldn't worry about the job aspect. by MrCawfee · · Score: 2, Interesting

    Yes there are alot of those jobs, but many of them will take a skilled programmer of any kind even if they do not have the specific experience in the toolset. With that being said, i believe it is more important to focus on some aspect that you really enjoy more than what you think will make money, especially out of college the better programmers are the ones who did it because they enjoyed it not because they are tailoring their skill set to a particular part of the nerd market.

    1. Re:I wouldn't worry about the job aspect. by Anonymous Coward · · Score: 0

      I absolutely agree here, IMNSHO if you're making decisions based on, "there are more jobs available doing x", then you're probably doing it wrong. The more important question on whether to learn about Java/DBMS related questions is not "how easy will it be to get a job of this kind?", but rather, "Do I want to be doing a job of this kind?"

      Learning and/or gaining experience in skills you don't like performing is a dead end. If you learn a skill, you might get a job where you have to use it, which gets you some experience with that and related skills. Once you have experience with that skill, you are even more likely to get jobs where you will be using it since it will probably be easier to land a job with maximal compensation if you target jobs doing what you have the most experience in. I have some experience and training with GUI toolkits, and I'm working with developing some GUI software at work right now, but I don't have any of it on my resume because it's not really something I like doing and I don't want to keep doing it in the future. On the other hand I am also involved in a project that requires me to modify GRUB and that sure as hell is going to be on my resume because it's more in line with what I want to be doing. I haven't liked anything I've seen in Java, so I don't work on it in my spare time and I avoid it if possible at work.

      Short version of my advice, concentrate your efforts on languages/technologies that you enjoy working with rather than what seems most marketable at the moment. If your goal for studying something is being more marketable rather than because you want to study it, I agree with other posters who suggested that social skills are more important than you may think as compared to trying to pad out your resume.

      Another short note, see about working on a large project, my experience in college did not prepare me much at all for the realities of large-scale programming.

  14. You got free time? by techpawn · · Score: 5, Insightful

    As an undergrad, what skills should I be trying to attain now to further my employability in the future?
    If you have too much free time and think your classes are too easy, see if you can get an internship or co-op at a local company. First of all NOTHING beats real world experience, Secondly you can see what they're looking for and what the competition is asking for as well. Sometimes those internships doing crap help desk is a good way to get your foot in the door at a company.
    --
    Ask not what you can do for your country. Ask what your country did to you
    1. Re:You got free time? by garett_spencley · · Score: 1

      The above is by far the best piece of advice I've read so far in the comments.

      The last company I worked at hired a TON of co-ops from the local University (mostly to save money and also because they had a lot of "easy grunt work" type of programming that was perfect for entry level). Many of these kids were over qualified for the positions and quickly moved up in the company. They were then offered full time jobs with much higher pay and full benefits upon graduating.

      Not to mention, what the parent said: NOTHING beats experience. You can spend your whole life in University and, without any experience, it won't mean anything to an employer next to another guy's resume who has less education but more experience. Education shows that you've learned how to do something. Experience shows that you've actually done it.

      So yeah this is almost a no-brainer. If you want to develop your skill set to increase your value in the work place then go get some experience in said work place.

      Another slightly off topic but similar anecdote. I've been in the computer industry for over 10 years and I currently run my own business. But I've been getting kind of tired of sitting at a computer all day so I've been thinking about going into the culinary world and becoming a chef. I contacted the local college to ask them what the best way to get into their culinary program would be and they told me to go get a job in a kitchen right now and then after working for a while enter the program as a registered apprentice. It just goes to show that no matter what you do experience is king.

    2. Re:You got free time? by techpawn · · Score: 1

      Honestly, I don't think I'd have my current job without the co-op I served in college writing VB apps with a SQL 7.0 back end in a factory. It exposed me to SQL and now with more experience built off that job I am now a SQL server administrator. That place exposed me to a lot of EVERYTHING including an AS/400 VAX system. We had to learn that so we could write the applications to replace it. Try learning that at college! Also, it looks damned impressive on the resume of someone as young as myself to say they have worked with an AS/400 system even if it's just following written instructions to shut it down properly at night.

      --
      Ask not what you can do for your country. Ask what your country did to you
    3. Re:You got free time? by EB+FE · · Score: 1

      Sometimes those internships doing crap help desk is a good way to get your foot in the door at a company. I'll second that. I just graduated a year ago and already had my current (awesome) job lined up several quarters before that. I owe it all the internship I took as a junior that had me doing pretty boring stuff that really didn't exercise my computer engineering skills at all. During that time, I schmoozed with several contractors that did business with my boss. A couple of them passed my resume on to their employers and the rest is sweet history. Get an internship, do a good job at it, and schmooze.
      --
      Vital papers will demonstrate their vitality by moving to where you can't find them.
    4. Re:You got free time? by rk · · Score: 1

      AS/400 = IBM. VAX = Digital Equipment Corporation, which was bought by Compaq, bought by HP. They are not the same thing and if you make that mistake in meatspace us cranky old farts who have deployed applications on both of them during our careers will snicker. ;-)

  15. Can't Resist... by Adambomb · · Score: 1

    The willingness to admit you don't know jack Dust.

    Wind.

    Dude.
    --
    Ice Cream has no bones.
    1. Re:Can't Resist... by davecrist · · Score: 1

      If I only had mod points. Best B&T reference I've heard all day... :)

  16. my $0.02 US by psbrogna · · Score: 3, Insightful

    For what it's worth my relevant advice to somebody planning to migrate from student to employee status would be: With great compensation comes great responsibility. (to paraphrase Spiderman, Pres. Kennedy & Pres. Lincoln) In my experience the biggest disconnect between an employer and a fresh out of school developer is that they expect high compensation but often aren't open to taking what an employer bundles with that (ownership, initiative, responsibility, etc). As far as specific topical areas? I think that depends on what kind of developer you want to be. Opportunities seem to exist no matter which environments you choose to familiarize your self with; as long as you have the theory down and aren't looking for a joy ride, you'll can make your way along a variety of paths.

    1. Re:my $0.02 US by ducatier · · Score: 0

      The number one skill you need to have is a willingness and flexibility to learn and improve yourself and your business. That alone can keep you and your business compeditive

  17. Learn the low level things. by epiphani · · Score: 2, Interesting

    C is definitely a starting point - you need not concentrate on ASM (since C is effectively macro assembler), but get used to memory management and handling basic structures. The functional flow and practices that you learn through requirement in C becomes hugely relevant in higher level languages.

    Also, linux or some type of posix-based system. C and Linux go together nicely, and most things for linux are written in C. Get out of the IDE environments as well - they're good tools, but they're tools that should be used after you're comfortable elsewhere. I suggest learning and using vim.

    Few people these days in an engineering organization have a good understanding of filesystems and underlying technologies. Someone capable of identifying and handling performance issues in applications are highly valued. Linux and C will force you to learn these things. Do GPL work, join some linux kernel lists - even watching these lists for purely curiosity reasons gives you an excellent method of peer review and gives you a good understanding of how development SHOULD work in an organization, even though it doesn't often happen that way.

    --
    .
    1. Re:Learn the low level things. by $RANDOMLUSER · · Score: 1

      Agree completely. Learn pointers, pointers to structs, SQL and regular expressions. Write practice programs to read & parse CSV or other flat ASCII data files - XML isn't everywhere yet. Become competent at a Linux command line.

      --
      No folly is more costly than the folly of intolerant idealism. - Winston Churchill
    2. Re:Learn the low level things. by hibiki_r · · Score: 1

      Those things are really important for becoming a great programmer. Are they the best use of someone's time that just wants to be easily employable? No.

      In my region, good knowledge of SQL and a passing familiarity with persistence libraries will get someone with no experience much closer to a job than more C experience and knowledge of the Linux Kernel.

    3. Re:Learn the low level things. by kudokatz · · Score: 2, Interesting

      Low level systems programming along with database work has been what I have grown the most with as a fellow student. I have a few internship offers, and many stem from well-roundedness in terms of programming paradigms and concepts. If you can get a good handle on functional programming, make a small web-database application, learn a scripting language like Perl (or dabble in its OO features), and tinker with the linux kernel then I think doors will open up.

      From a strictly job-search prospective, I must also sadly say that ASP/.NET experience seems to be in reasonably high demand, but job and internship postings typically also include *nix experience and C programming.

    4. Re:Learn the low level things. by Anonymous Coward · · Score: 0

      Some of that is just totally worthless. It is good to be a well-rounded programmer, which means knowledge of one low-level language (C or Assembly), knowledge of a mid-range language (C++), and knowledge of a very high-level "scripting language" (Perl). Of course those are just suggestions but it is good to know each. Now, as for how much time you need to spend learning the intricacies of underlying techs like File systems is questionable.

      Unless you really want to do either embedded system design or kernel level programming, C is pretty much only good as a building block for the rest. (Granted you can usually make things leaner and meaner in C, but you can also make them far more painful. This is coming from someone who LOVES C.) If you want to focus on a single area, then focus on what you'll need for that area. If you want to be well rounded, then go for it. You will be far more likely to get a job if you can show a variety of skills, because it shows you are capable of the thought processes and can learn new things.

      My biggest regret is not having learned a real scripting language yet. (I say real because I can write sed "programs" and shell-scripts, but thus far Perl just hasn't interested me.) Of course, I make up for this by having skills most programmers I know don't have -- VHDL and VLSI.

    5. Re:Learn the low level things. by Agoln · · Score: 2, Informative

      As a student who is just about to graduate in 6 months and having secured a job with one company, with about 10 offers from other companies, I would agree that knowing C and memory management is of the upmost importance. For a technical background, knowing your data structures, object oriented principles, and algorithms are also important. I asked how to implement linked lists, tell them what the different parts of different languages' OO properties (i.e. Java vs. C++), and how many bytes some data structure would take up. You need a good understanding of the basic concepts, such as time complexity of almost every basic algorithm (search/sort/iterate) for most basic data structures (trees/graphs/arrays). Always be reading and learning new concepts, not just new tools. Books that will help you are going to be such items as Pragmatic Programmer, Code Complete, Joel on Software, Mythical Man Month, and almost any book these reference.

      I think the most awarding experience that I have had during my time in college has been being involved in open source projects. They can teach you just as much about real world working as any co-op or internship can, if not do a better job of it. From my experience, open source projects usually have a much better development cycle then your ordinary company. Being able to talk about two solid projects that were not a trivial school assignment are important. And most open source projects will have politics to deal with, which go on at every aspect of every job.

      Finally, think about the people aspect. Working in teams is important, VERY, VERY important! Every single company I went to wanted to know what _team_ projects I had worked on, and how I contributed to that team. Very often, I was asked about the different aspects of working on the team etc. Leadership is a big factor here, being a team leader or showing leadership capabilities is important. You need to be able to be the alpha dog in a pack, although they are going to hire you as a grunt to start.

    6. Re:Learn the low level things. by gbridge · · Score: 1

      ...Joel on Software

      When I grow up, I want to be Joel Spolsky - the man is a legend. Back on topic, he wrote an article the other day about how lacking some university courses are and raises some good points about how they could be improved. Sorry if it scares the OP a little.
    7. Re:Learn the low level things. by jhol13 · · Score: 1

      Is this a joke?

      C is not even close to assembler. For example assembler does not have stack variables.

      Ah, vim is utterly idiotic for a newcomer (as is emacs), there are far better editors for programmers. I recommend IDE as they have much better code completion features: you do not need to remember everything by heart. Those even help learning!

      I would not recommend C at all as it leaves out too much good (e.g. data structures) and exposes too much bad (e.g. idiotic library). Java with internal insight (how variables and containers behave and why) would be hugely better.

      Java is good in other respect too: it has huge library. Learning what is in the library (and then studying how they behave by as need arises) will make you much more efficient programmer than you'd ever be with C no matter how well you know it (trust me, I know C extremely well - too well I'd say).

      Lisp and functional languages? Sure, they are fun at the nerd "party" to brag about but nobody uses them in commercial systems for a reason. Same goes for Prolog - it is as useful as yacc.

      All in all, you should learn the language you are going to use, which requires a crystal ball :-)

    8. Re:Learn the low level things. by Yold · · Score: 1

      If Linux/C floats your boat, then absolutely do the things the parent suggested. Although looking through the classifieds, you rarely see "Wanted, Linux C developer with kernel experience".

      But, if you want to be a good, employable, developer, learn LOTS of things, not necessarily inside-and-out, you should do that when you actually get a job. Learn about Java, SAX, SOAP, C#, ASP.net, MFC, PHP, JavaScript, XML (and everything that goes with it).

      Learning to work within a large source-base, like GPL projects, would also be hugely useful.

    9. Re:Learn the low level things. by gbjbaanb · · Score: 0, Flamebait

      I would not recommend C at all as it leaves out too much good (e.g. data structures)

      trust me, I know C extremely well - too well I'd say). I refer the honourable gentleman to the struct keyword.

      Perhaps you'd like a link to the definitions of "know" and "extremely" as well?
    10. Re:Learn the low level things. by aj50 · · Score: 1

      I disagree, firstly, a language is not just a language, it's also a way of thinking about problems. If you can think about a problem from both an iterative and recursive (for example) point of view, you're better equipped to solve that problem.

      Secondly, you never know what language you're going to have to use but whatever it is, you probably haven't learned it (although you can improve your chances by learning java,C,C++,C#,ASP,SQL) but the more languages you know, the easier it is to learn a new one. Learning the language is a lot easier than learning the concepts involved with that language. You'd find C very difficult to learn if all you'd done was Java since you'd never had to learn to use pointers and manage your own memory. Conversely, you'd find Java very difficult if all you knew was C because you'd never have touched on object oriented ideas.

      --
      I wish to remain anomalous
    11. Re:Learn the low level things. by Anonymous Coward · · Score: 1, Interesting

      But, if you want to be a good, employable, developer, learn LOTS of things, not necessarily inside-and-out, you should do that when you actually get a job. Learn about Java, SAX, SOAP, C#, ASP.net, MFC, PHP, JavaScript, XML (and everything that goes with it).
      You have perfectly expressed why I became a highly specialized niche programmer, a maneuver which also caused me to become highly employable. All those technologies you mention are unbelievably boring and are the sort of thing which would cause me to hate my job if I had to do any of them regularly. By no small coincidence, they're also technologies for which programmers are a dime a dozen. You may end up being employable, but so will most of your classmates, and you'll all be competing for the same jobs. But by specializing in area which I really enjoy, I not only don't hate my job, but became highly employable as well, and have the extra job satisfaction of knowing that I'm doing things very few people are able to accomplish.
    12. Re:Learn the low level things. by jhol13 · · Score: 1

      I cannot understand how learning Java would not teach pointers as it is a language in which every variable is a pointer. The first thing to learn, "a = b", teaches about pointers! (not to mention the idiotic "==")

      You find C hard to learn only because C is hard to learn. After learning some less idiotic language you just cannot believe *why* things are as bad as they are in C (and to some extend in C++). And this makes learning hard.

      Object oriented ideas are not hard, it is just basic encapsulation. If you do not use some kind of "objects" (structures) then you'll be really screwed in C. After all "a->foo(...)" in Java/C++ is nothing but "foo(a, ...)" in C.

      Sure, learning proper inheritance takes time, but it will take time even if you learn Java/C++ as the first language.

      Note: I do think learning more than one programming language is a very good idea - just like learning second language (french/...) is good. But C ... gimme a break!

      P.S. I think objects are "hard" only because many books teaching them are worse than useless. My pet peeve is how you are told inheritance by using animals as examples: "bird implements canfly", "ostrich isa bird" ... WTF, ostrich cannot fly!? The problem is that people have far too many (subconscious) feelings and learned patterns about animals. If an object "cat" has "eat" method it should not deallocate parameter "bird" (cats hardly are responsible for creating and deleting birds). There just are too many problems with animals. Much better is to teach GUI, "button" can be "pressed", "window" can be "drawn" to, etc.

    13. Re:Learn the low level things. by aj50 · · Score: 1

      I cannot understand how learning Java would not teach pointers as it is a language in which every variable is a pointer. The first thing to learn, "a = b", teaches about pointers! (not to mention the idiotic "==")

      I speak from the experience of watching the rest of my class learn C after having learned Java and not getting pointers. It's quite easy to teach Java without mentioning pointers: "a = b makes a and b the same object. If you want to make a copy of b and call it a, you do a = b.clone()"

      You find C hard to learn only because C is hard to learn. After learning some less idiotic language you just cannot believe *why* things are as bad as they are in C (and to some extend in C++). And this makes learning hard.

      C is easy to learn, the language is very small. Java is huge in comparison. Learning to do complex things in C without messing up is hard because C doesn't have safeguards and lets you do stupid things. Java on the other hand prevents you from doing what you want.

      Object oriented ideas are not hard, it is just basic encapsulation.

      Most things are not hard once you know them. Pointers, for example, are easy, but many people find them difficult and make lots of mistakes when learning.

      Note: I do think learning more than one programming language is a very good idea - just like learning second language (french/...) is good. But C ... gimme a break!

      C is low-level and gives you a better idea of what's going on at a low-level when you're doing something complex. E.g. your example equating objects with structs and functions.

      I think objects are "hard" only because many books teaching them are worse than useless.

      Agreed.

      --
      I wish to remain anomalous
  18. The only that really counts by Yold · · Score: 4, Informative

    is experience. Look for a job doing something in the field, do your job well, and get a letter of recommendation.

    The article yesterday I think was more aimed at people who don't understand that basics of whats going on behind the scenes. For example, its expensive to convert between formats of numbers (int->double etc), or how to use bitmasks/shift bits.

  19. Google by Anonymous Coward · · Score: 0

    Knowing how to search the web would be good. You could start by looking for the last forty times that this question has come up on Slashdot.

    1. Re:Google by Grundlefleck · · Score: 1

      Knowing how to search the web would be good. You could start by looking for the last forty times that this question has come up on Slashdot.
      And what the hell are you going to university for?! You could have searched the web for books on every topic then just bought a degree!
      --
      I accept I know nothing. Insulting my ignorance is wasted on me.
    2. Re:Google by Anonymous Coward · · Score: 0

      uh, where can i buy a degree at??

    3. Re:Google by insertwackynamehere · · Score: 1

      No worries, just include in your reading list a book on Photoshop and one on resume fraud

  20. A couple of things... by Capt+James+McCarthy · · Score: 5, Informative

    If you can afford the 'free time' see if you can apply for any internships at different large companies. Or see if a smaller one would take the chance with you interning with them. The price is right for them, and you get to tail someone who's more experienced in the field.

    You can also look up some open source projects that need assistance (there are many of them that do) and see where you can help on them. Open source projects are a great way to get experience and critiquing your own skills.

    You can also learn these three words:

    "Hello. Geek Squad."

    --
    There are no loopholes. It's either legal or it's not.
  21. well, what do you want to do? by gangien · · Score: 2, Insightful

    If you want to be a software developer, and don't particularly care in which language, it would be a good idea to do a project in your spare time, in one of the main languages (C++/java/C#) used. Java seems to have the most jobs available, of couurse, that may vary in your area. The thing you need to be getting out of your education is understanding the basics, that transcend all languages. Rhe difference between C++, java, and C# are made to be a bigger deal than they really are. You should be able to program in any of these without to much effort. I think the best advice is to be smart, and take what you read here on /. with a grain of salt, as people here tend to overreact to almost everything.

    1. Re:well, what do you want to do? by mkiwi · · Score: 1
      as people here tend to overreact to almost everything.

      WE DO NOT!!!

  22. Self Taught... by BigDogDoug · · Score: 2, Interesting

    You're really going to have to teach yourself. Remember the college only prepares you with the basics. If you want to really impress your potential future employers you really need to know the stuff cold. You can't expect some over-paid college prof regurgitating text from a book to properly teach you anything. Join a group, network and get ideas from other people.

  23. Personal View by RockedMan40 · · Score: 2, Informative

    While I think you have a brighter future than "Want fries with that" option, the above poster did get one thing right.
    What do you *like* to do?

    I could not stand to write program code all day long, as it would drive me insane, BUT - for whatever reason, I don't mind writing in php and working with web-based programs. I know there are others that feel just the opposite. So, while you will see plenty of good answers on 'you have to know ' and they will be right, cull it down to what leads you into a career you can enjoy.

    I earn pretty decent coin now, but have earned better in past. I just loathed the job. And since this is personal view - As long as you can learn quickly, and don't mind doing good quality work, there will be a job for you somewhere.

    1. Re:Personal View by corychristison · · Score: 1

      I agree with you here. It is entirely about what you have a personal interest in. At a young age (10 or 11) I really got into the internet and web design. While I have built some completely useless websites in the past, they taught me things and allowed me to move on into new things.

      I started off with HTML and eventually got into "DHTML" and CSS. After realizing there were browsers other than IE, I learned more and have nearly perfected my HTML skills. And as time goes on, I got into Perl/PHP. By getting into these languages, I moved into learning more and more about open source. At the age of 15 I saves my pennies and built my own computer to use. I managed to get SuSE 9.XX installed and was hooked on Linux and Open Source Software.

      When I was 16 I moved out of my mothers home and into a basement suite across town. I've been living on my own working the usual retail jobs and building websites on the side.
      Over a year ago I got my first big break working for a small Advertising firm doing graphic design making pretty good money ($11/hour in comparison to the $6.65 I was making in retail). I am now 19 years of age, making a net salary of $36,000/year. Which, around here and at my age, is pretty freaking good. I now manage all of the advertising for my city, the next city over and the surrounding towns and communities. I run around 50 LCD advertising "Viewers" in my area.

      I still do web design and development on freelance terms. There have been talks between my boss and myself about buying out my web design skills as well and paying me a fair deal more.
      If this business were to, for some odd reason, go down the drain I have the ability to go off somewhere else (perhaps even still in my province) and find a job making nearly as much as I am now... I will suck starting at the bottom again, but I have gained a lot of "real life" skills in working for this company. I only have my high school education. If this "buyout" of my web design skills goes through, the company will send me off to become certified in X/HTML and PHP.

      So, if this post doesn't get overlooked and modded down, my advice to kramed8 is to recommend him to start somewhere. DO NOT ever expect to be paid a fortune for starting somewhere. You have to work your way up and you have to be willing to work for it. YES, education is important, but look at the general majority of the population that still works in retail at the age of 40 living pay-check to pay-check... Most of them didn't finish high school.

    2. Re:Personal View by theMerovingian · · Score: 1


      That is awesome! You sound alot like myself at that age, although I dropped out of college during the dot com days to try and make it big time. I ended up writing some pretty valuable software, and my employer got quite the windfall from it. My bits of advice for you are this:

      1) If you are actively involved in a small business and are a key component of it, you should renegotiate your pay to include some type of commission or pay-for-performance element. If you get paid a straight salary or lump sum amount, no matter how successful the business is you will not be the beneficiary. What you need is some sort of way to measure your financial contribution to the company, and then ask for a small slice of it. For example, you want 5% of sales pertaining to all software you wrote and an additional 15% if you make the sale yourself. If the money at stake is more than a couple thousand bucks, get an attorney to help you draft the agreement.

      Note that your ability to negotiate for stuff like this is directly dependent on your role in the company. If you are the primary innovator or you are creating products for new markets, you will have alot of leverage to negotiate.

      2) Make sure you stack your chips, because the gravy train is always temporary. Don't buy Xbox, car, restaurant food, etc... even if you think you don't need the money for anything, there will come a time (probably in less than 5 years) when you will wish you had saved every penny you made. DO NOT TAKE ON DEBT OF ANY SORT FOR ANY REASON OR FOR ANY LENGTH OF TIME. NO CAR PAYMENT NO MORTGAGE NO CREDIT CARDS!

      3) Even though you have been successful without it, at some point your career will hit a glass ceiling without a degree. Go to a 4 year university (preferably public), and commit to studying hard and making at least a B in every class. Make sure you take a bunch of CLEP tests (those are very cheap credits). Take 6 credits per semester while working full time, and pay cash for them (or see if the employer will pay it).

      If your job falls apart, you will have a good start on your degree. You will have been saving your money, and will hopefully have a nice cushion. Take out as much student loans as you need to be effective in school and get the degree finished up by going full-time. The degree will absolutely pay for itself dozens of time over, so don't agonize too much over the loans (go to a public school in your state, and make sure you are getting at least a B in every class).

      4) Major in some sort of engineering, computer science, or accounting. All those liberal arts and science degrees are interesting and fun, but all that crap is a waste of money. Pick a bachelor's degree that will get you paid right out of college. You can get a good job, or you can go on and get any graduate degree you want.

      I guarantee you will be able to transition into any graduate science program from engineering, and you will be able to do any business or legal thing you want from accounting. If you want to be an artist or musician, you can earn a decent income and spend your extra money on oil paints and violin strings.

      5) Most importantly, just remember that your success is a curse. You have an ideal setup, but it will be difficult or impossible to make a comparable standard of living at any other job. You are basically trapped at your current job and cannot escape it without a degree. A degree is your lifeline, and the ONLY thing you can do that will ensure your continued middle class prosperity. College bureaucrats are a major pain, classes are expensive, those books are $125 each, so you have to cling to your education like a liferaft in the middle of the ocean. It isn't a question of IF your job will end, it is only a question of WHEN... make sure you don't get stranded!

      --
      "If you think you have things under control, you're not going fast enough." --Mario Andretti
  24. Don't forget "Engineering" skills by SpuriousLogic · · Score: 5, Insightful

    One of the biggest things I see when hiring college grads is that while they understand how a computer works, why languages behave the way they do, and what a certain language syntax is, they have very little knowledge of how to actually build applications from initial concept to full delivery. This type of knowledge generally falls into the "Software Engineering" category. Learn how to write and read requirements. Learn how to do formal estimates from requirements. Learn about different software development life cycles. Learn about requirements traceability and testing. Learn about software patterns. A lot of these topics are covered in Masters degrees in Software Engineering, so those are good places to look at for books on it. Here is an example, you can look at the classes to find the books used http://www.cti.depaul.edu/academics/Pages/MSinSoftwareEngineering.aspx

    1. Re:Don't forget "Engineering" skills by boristdog · · Score: 2, Insightful

      Learn how to write and read requirements
      This is VERY important! It keeps you from wasting your time.

      And only experience will teach you when to know what the customer/boss is REALLY asking for, no matter what they say. VERY few people know how to design a program/project/interface, or even know what they want.

      I find step 1 is often telling people "Get a piece of paper and draw out what you want". Saves a LOT of time and budget when they come to you later and say "This isn't what I wanted!" You show them their drawing or flowchart and say "Which part?"

    2. Re:Don't forget "Engineering" skills by Anonymous Coward · · Score: 0

      Pretty impressive, they even teach why it will be difficult to get a job when you graduate:

      http://mycti.cti.depaul.edu/programs/courses_mycti.asp?subject=IS&courseid=565

    3. Re:Don't forget "Engineering" skills by Anonymous Coward · · Score: 0

      Second the above.

      Plus, find someone with some 'real world' experience and try to run at least one of your projects as though it were a real life project. User requirements and user acceptance testing; source control; bug tracking; documentation; 'live' and 'development' servers and a process for moving between the two. Setting that sort of stuff up will give you a whole bunch of OS skills that I always find irritatingly lacking in our graduates even as they witter on about Ruby on Rails or whatever the framework de jour is.

    4. Re:Don't forget "Engineering" skills by master_p · · Score: 1

      Totally agreed! creating a software product is 10% about the programming language and 90% all the rest: understanding the requirements, communicating with the client, knowing how to test things, knowing how to analyze and synthesize problems...most programs can be done in a variety of languages anyway.

  25. Learn how to get past the HR dragons by Anonymous Coward · · Score: 0

    HR departments get lots of resumes. When they look at yours, they're looking for reasons to toss it in the trash.

    Your resume has one purpose: get you an interview. It's not a biography or someplace to show off your creative writing skills. If something is on that doesn't fulfill that purpose, take it off!

  26. Because girls dig it. by DarthVain · · Score: 1

    nunchuck skills, bowhunting skills, computer hacking skills...

    1. Re:Because girls dig it. by winkydink · · Score: 2, Insightful

      They dig knowing how to carry a conversation and how to make eye contact (i.e., not staring at their breasts) a whole lot more.

      --

      "I'd rather be a lightning rod than a seismometer." -Ken Kesey

    2. Re:Because girls dig it. by DarthVain · · Score: 1

      This coming from a guy with:

        "I'd rather be a lightning rod than a seismometer." -Ken Kesey

      in his sig.

    3. Re:Because girls dig it. by Anonymous Coward · · Score: 0

      nunchuck skills, ... I'll need to practice with my Wii even more than now? I mean, if I master Resident Evil, will I get laid?
    4. Re:Because girls dig it. by Beardo+the+Bearded · · Score: 1

      My wife said she'd blow me if I got 280 in Wii bowling.

      --

      ---
      ECHELON is a government program to find words like bomb, jihad, plutonium, assassinate, and anarchy.
    5. Re:Because girls dig it. by winkydink · · Score: 1

      And I like to make sure my lightning rod stays well-oiled, if you get my drift.

      --

      "I'd rather be a lightning rod than a seismometer." -Ken Kesey

    6. Re:Because girls dig it. by Anonymous Coward · · Score: 1, Insightful

      Also be sure to be attractive and bring your checkbook. Knowing how to carry on a conversation and making eye contact without at least one of the previous requirements will land you happily in the "Friend Zone", where you will get to listen about her sex life with a string of guys who don't punch her that often.

  27. One thing to consider by Brett+Buck · · Score: 1

    I know why you are asking these questions, but I think you are missing an important point. You are looking at college like a vocational school - not a chance for a rounded education. You will do FAR better in the long run if you learn fundamental knowledge in many areas, and not spend a significant amount of time on specific training.

              Brett

    1. Re:One thing to consider by treeves · · Score: 1

      Depends on what you mean by "do far better".
      Earn money?
      Probably not.
      Specialized training combined with natural abilities can definitely lead to good earnings.
      A well-rounded education does not necessarily lead to career success, although there are certainly other reasons for doing it.

      --
      ...the future crusty old bastards are already drinking the Kool-Aid.
    2. Re:One thing to consider by incripshin · · Score: 1

      A well-rounded education is certainly much more satisfying in the long run. Personally, I see no fulfillment in just writing code forever. I like to be stimulated into the thinking of unique solutions or work on unique problems. Python in a Nutshell doesn't help with that, so that's why I took 'Introduction to Compilers', 'Modern Operating Systems', 'Introduction to Computer Networks', and 'Computer Security'. I don't care if it ends up being less profitable. What I loved about computer science was the learning and stimulating classwork. Not learning new languages.

      Though I do commend the original poster's decision to learn Python. I've never had trouble with C, but I have a friend who did. He borrowed my copy of The C Programming Language (Kernighan, Ritchie), which is required reading I'll have you know. He went through it in a weekend and was a different man. On the topic of languages, my favorites in order are C++ (most liked), Python, C.

    3. Re:One thing to consider by Brett+Buck · · Score: 1

      I certainly DO mean "earn more money". Flash-in-the-pan "language of the week" programming jobs get you a lot of money for a little while but it's not a legitimate career plan.

          Learn how to read, learn how to write clearly, learn fundamental knowledge, and you aren't stuck looking for narrowly-focused programming jobs.

                        Brett

    4. Re:One thing to consider by treeves · · Score: 1

      I'm not a programmer, so I think I don't have the same concept of "specialized training" that you have. I'm not familiar with "languages of the week". Could you give an example of one?

      I also don't consider learning C++ a "well-rounded education", something I think requires history, art, literature, science, philosophy, [human] languages, etc.

      --
      ...the future crusty old bastards are already drinking the Kool-Aid.
  28. A few projects good for ANY programmer! by neapolitan · · Score: 3, Interesting

    It depends on what type of job you want, and how good you want to be. Really, it does, and the answer is not simple.

    I really feel it is best to concentrate in core subjects during college. It is trite, but nobody cares if you know high level language X, be it Java, Python, Ruby, etc. This will change. Knowing how to program, that is a skill that will never go out of date.

    I do most of my programming in a very scientific environment, which requires MATLAB for "quick and dirty" computations, but I have also written elaborate C programs when needed for speed (up to 15 times as fast as interpreted MATLAB code despite the claims of optimizations.)

    If I were you, I would learn C in and out, through and through. It will guarantee you skills that you will use for the rest of your life, and you will never be an idiot. The way to best do this is to write moderate sized programs in C. I would take as many high level courses in the college environment as possible, preferably one on Operating Systems, which are some of the most complex programming environments and concepts that you will be exposed to. If you are truly into CS theory, then high level mathematics courses are favorable.

    What to program, you ask? Why, the standard lot. Here are some of the coding projects we were given in college.

    Hello, World (just kidding.)

    The game of life.

    The game of animals (teaching navigation of link lists, etc.)

    Make a program that plays Connect 4 against you. (basic algorithmic concepts, basic "AI")

    Make the above program graphical, for fun (GUI / display concepts).

    Write a program that implements the Zip algorithm (Huffman encoding -- not as hard as you'd think.)

    If these are too basic for you in C, then I'd try to understand a bit of the linux kernel, or get involved in an open source project. Good luck!

    --
    Slashdotter, ID #101. UIDs are in binary, right?
    1. Re:A few projects good for ANY programmer! by stuporglue · · Score: 1

      but nobody cares if you know high level language X, be it Java, Python, Ruby, etc. This will change. Knowing how to program, that is a skill that will never go

      Agreed. When I applied for my current job, I stated up front that I didn't know the language they wanted the work done in (Perl), but also stated that I had learned languages x, y and z on my own and was confident that I could pick up Perl quickly.

      They hired me and gave me a few weeks to get up to speed on Perl, and I've been doing just fine since. It would've been the same for any other language.

      Of course, I was lucky to be interviewed by technical people and not just an HR drone with a bulleted list of requirements. :-)

      --
      https://www.facebook.com/digitizeicm -- Show your support for the digitization of the Iron County Miner newspaper archiv
    2. Re:A few projects good for ANY programmer! by bgarcia · · Score: 1

      Make a program that plays Connect 4 against you. (basic algorithmic concepts, basic "AI")

      Make the above program graphical, for fun (GUI / display concepts).

      Funny you should mention that. My 8yo was begging me to teach him "how to program" after a Bring your (Sons &) Daughters to Work day. So I dug my old Commodore out of the attic and set it up for him. As his "final exam" (for which he would get a much more modern Pentium III computer), I had him create a Connect 4 game. In BASIC, on the Commodore. He did a great job (with some help of course). I had him change the display from ASCII art to actual graphics. He also had to update the routine that checks for a winner to be faster (1MHz machines running interpreted languages are quite slow, mind you).

      Now he's playing with LOGO. I'm trying to look for good online tutorials for other languages as well.

      --
      I'm a leaf on the wind. Watch how I soar.
    3. Re:A few projects good for ANY programmer! by The_reformant · · Score: 1

      No don't, the last thing we need is more null terminated character buffer crap originating out of bad c tutorials on the net. Learn C++ and use STL. If you want to work for a good company code maintenance is as important if not more important than the initial code.

      --
      I have discovered a truly remarkable sig which this post is too small to contain.
    4. Re:A few projects good for ANY programmer! by Anonymous Coward · · Score: 0

      Yes, the C thing is probably the most important base language. C++, Java, C# etc are just people messing about and spoiling C.

      After many (many) years in the business, a couple of insights:-

      Practical problem solving is the most important skill you will learn. Unfortunately developing this skill relies on making mistakes.
      You will not be put in charge of anything worthwhile until you have hands-on project skills - Learn to live with this concept.

      IT graduates are the worst people to have managing a project - They tend to choose whatever is cool or interesting to develop systems (These people often use this half-baked experience to leave just before their project crashes and burns, i.e. when it finally goes into production. They then go on to a competitor.). Other inexperienced managers choose what they are familiar with, whether this skill is relevant or not.

      Learn C properly.
      Really learn UNIX - Most of the important useful stuff out there relies on it. UNIX is not going away for a long time. Bash will keep you regularly employed.

      SQL is what most of the world relies on - Learn it. A knowledge of Ruby on Rails (or whatever framework is cool/hot today) does not equate to an understanding of real data structures.

      Python (or, if you really insist, Ruby) allows you to 'prototype' something that will probably finish up going into production.

      Old fashioned HTML is still important, but learn CSS and XML - Try really hard to avoid 'Web Designers', Javascript, PHP and Perl.

      Windows is for low level drones (both as an end-user, and as an IT professional).
      Learn something like basic accountancy - You need to talk to, and understand business owners or managers - They all talk accountancy (or, if you are lucky, they talk marketing as well).

      Save every dollar that you can - it really helps when you talk to a potential employer if you do not need the work - You tend to be honest, and that is one of the rarest assets in this business.

      Most of the above is tongue-in-cheek. It is also mostly true. Posted anonymously as I have moderated in this discussion.

  29. Neopoleon Dynamite quote: by Anonymous Coward · · Score: 0

    I dont know about on the job skills but apperently girls only want boyfriends who have great skills.... You know, like nunchuck skills, bowhunting skills, computer hacking skills...

  30. Keys to success by jbottz · · Score: 1

    The biggest thing I've found in 10 years in the IT sector is that just like in any other career path, networking (and not the cisco kind) will get you further than any other single thing. The old adage that "It's not what you know, it's who you know, and what they know" still holds true. Never burn your bridges, and remember that the people asking you for that emergency favor are people that you might in return need a favor from someday.

  31. Remember these words.... by slashname3 · · Score: 1, Funny

    Make sure you have a firm understanding and be able to deliver the following words:

    "Do you want fries with that?"

  32. Learn about workflows and project management by mveloso · · Score: 2, Insightful

    If you really want to be a good developer, you have to be able to learn how real people work and how to run a project. That's tough - I'm not sure if anyplace has classes on this. But - everything you write fits into a workflow of some sort, and if you can understand the context in which your stuff runs your software will be better for it.

    Project Management is almost a must, esp. since you're in the business program too. Projects that come in on time are better than ones where you have to do a "death march" to the end. They make everyone happier, and makes everyone look good. A good PM is usually the difference between 4 80 hour weeks at the end of a project that fails and a nice, 9-6 project that cruises to delivery.

    1. Re:Learn about workflows and project management by FatJuggles · · Score: 1

      Exactly! Next year, get an internship where they have project managers running an implementation of something. Sit, shut up, and watch. Learn what is going right, what went wrong, who was complaining and why, who didn't do what they were suppose to do and what e-mail the PM wrote to get that fool to start working, what words are commonly used in the office, how to operate within the cubicle social rules, what steps did people take to correct a wrong, was the wrong I.T. related, business related, or just a clash of personalities, who documented what and why, take notes during meetings even if you know no one will be reading them etc. You do that and I can tell you for sure, you've got a head start.

      Second, figure out what your likes outside of programming are. In business, do you like HR, Finance, Accounting, manufacturing, service, retail, or something else. Get a niche understanding of a specific business function. I can't tell you how many recent grad developers we hire and put them in the HR space and they look at us like we are crazy. What? HR needs programming too and no, we don't need you to tell us to recompile some kernel of anything. Help us solve this issue! If you think you are going to be given some hard written requirements and be expected to code off that, be prepared to buy a ticket to India in your free time next year since that is the only place that happens.

      I didn't tell you to learn any programming languages. I know I'm going to probably get chewed for this, but I believe that once you know one language, you know programming. Different languages are just tools to help you solve problems in different ways. If you can't even figure out the solution to a business problem, knowing C, C++, Java, ASM, FORTRAN, Perl, Python, or any of the 4,302,013 languages isn't going to help you any.

    2. Re:Learn about workflows and project management by sphealey · · Score: 1

      I am personally not sure what value a Project Management Institute PMP certification has for a person who doesn't have 5-10 years of experience, but there is interesting material in the curriculum and many job postings will have "PMP Certified" as a checklist item. It is a lot less expensive to take the classroom portion through a college so if you have that you might want to take it.

      sPh

  33. We work in a perpetually young field. by jockeys · · Score: 1

    So, it pays to stay sharp. What do I mean by that?

    Simple. I got into the software business because I love learning new stuff... and I will spend the rest of my career doing just that. Everything we are doing will be useless 5 years from now, and we will get to learn a new batch of skills. Sounds fun? Then you might have the right stuff to be a developer.

    Individual skills are good... but the one defining skill of a good programmer is the ability to learn.

    --

    In Soviet Russia jokes are formulaic and decidedly non-humorous.
  34. Get an internship by mcsqueak · · Score: 1

    If you have a decent amount of free time and good grades, try to get an internship or get involved with some sort of mentor-type program. I did that my senior year of university and was offered a job by my mentor before I graduated.

    The stuff you'll learn being exposed to the "real world" is much more valuable then what you learn in the classroom.

    Don't wait too long.. usually you need to apply during your junior year for any sort of senior-level internships (at least the ones I remember reading about).

  35. It Depends by Ohio+Calvinist · · Score: 1

    It really depends on what you want to do. If you want to be a DBA or a high-level programmer, I'd say you're on the right track (though, low-level code experience will make you a better high-level programmer). However, one thing I see lacking, amongst programmers I work with, is a real understanding of the platform they are developing for. I am kind of in an odd position where I'm programmer 50% of the time, and server admin the other 50%, and I see lots of instances where having more OS-specific knowledge would make the developers more effective. I think the same is true for databases-server products. I'm shocked with developers don't know general Windows OS stuff that all desktop support entry-level techs do. I've seen professors write dissertations on neural nets and call tech support (my first job) with the most assinine questions about how to configure Eudora.

    I think the converse is true as well, if you are a server administrator, being able to look at developer's code when windows flips out or you run into a performance issue makes a huge difference. (e.g. is this process slow because someapp.exe is single threaded, or is it slow because it is multi-threaded but generating many-many inefficent threads.)

    By your 3rd year of university, you should probably have at least a general direction toward what you want to do, so I'd say pick coursework that will work toward that goal, and if possible, pick up a complmentary course or two in System Administration and Oracle (as most folks can figure out MySQL/MSSQL if they have some SQL knowledge, but Oracle experience translates to dollars as most less folks have less training or self-taught experience with it.).

    --
    Forgive my spelling from time to time. I'm often posting during short breaks.
  36. If you are thinking of technical skills only by sphealey · · Score: 1

    If you are thinking of technical skills only, then a deep and thorough understanding of relational databases in both theory and practice will serve you well. If you haven't already taken a class in Engineering Probability, that too. And take some 300 level classes outside the CS world (say, Mechanical Engineering) so you get some experience in solving problems that aren't within your comfort zone.

    Outside of technical skills, political theory through the 300 level, some literature, and economics through the 300 level will be of more value to you than additional programming languages when you are in the 30-50 age period.

    sPh

  37. Student's Perspective by YutakaFrog · · Score: 2, Interesting

    I live in a place where the computer industry is doing well, and programmers seem to be in high demand, admittedly. But I'm also a Jr. in CS right now, and here's what I've observed so far between my own job experience and those of my other friends in school: Find something you enjoy and do it well. One of my friends got into ASP and C# real heavy, and is now the lead dev of a team working on his university's intranet. I'm very detail oriented, and got a job documenting an undocumented system, for which now I'm pretty much the sole dev type person around here, and I don't think they would dare to fire me, even though my school schedule's a pain in the butt. The point is, there is such a plethora of work available, you won't know ahead of time what you need. You just need to get all the experience in _something_ that you can. You'll find a way to use it, somewhere, sometime. If you learn it, they [jobs] will come? Good luck!

  38. You may never catch up. Get experience. Self Edu by FromTheAir · · Score: 1
    It could take 7 years to acquire all the diversified, cross discipline, base knowledge and understanding to be well rounded.

    Of course during those 7 years, there will be 7 years of new knowledge and technique produced.

    So it is almost impossible to catch up and be equal to those already having spent 10 years acquiring the skills and knowledge.

    So there will always be a declining number of advanced cross discipline IT technical professionals.

    The other thing is that technology changes weekly so fast much of it cannot be taught from a text book or university curriculum and theory doesn't always fit reality.

    The good news is those that come after you, may never catch up to you.

    The real education comes from direct experience, in doing.

    There may be exceptions to the above but in general I think it is accurate.

    --
    "an infinite player that has lost his finite mind" ~Infinite Play the Movie (it blends with reality)
  39. get into real projects ASAP by bryanthompson · · Score: 1

    If you have no real-life experience, you will join the legions of other just-out-of-college programmers that have no practical skills or real knowledge. The answer is to write programs RIGHT NOW that you think are important, fun, useful, marketable, etc. Join another project if you want, but whatever you do, it needs to be something you can be passionate about. The more experience you have with real products that people use, the better. /self-taught programmer with college education. The self-taught was worth 10x the formal education.

  40. What *KIND* of programmer? by erroneus · · Score: 1

    Unfortunately, "being a programmer" is about like "being a medical professional." There are all sorts of functions in the realm of being a programmer that require wide varieties of skills and no one person will have them ALL. So just as in the "medical profession" where you can be anything from a nurse to a brain surgeon, a pharmacist to a psychiatrist, you simply need to choose the skills that match your goals.

    If you feel that your foundation isn't as strong as it should be and you feel like you're missing out on something because you have to experience in writing assembler or some other low-level language, then you should at least satisfy your curiosity so that you know what it is and all that. (But I warn you, if you mess with assembler, you will find that the "magic" that computers run under will disappear and you will doubt your machine a lot more than you ever have in the past... it really spoils things for you.)

    But as far as I can tell, if being marketable is what interests you, do not put anything but relevant skills on your resume. "Overqualified" will not pass well through "HR" department filters and "too many skills" makes people doubt that you know any of them particularly well. Are you Indian or Pakistani? If not, things are not getting any easier or better.

  41. here's some others might not mention by Anonymous Coward · · Score: 0

    hygiene and social skills. practice them and you'll be in the top 10 percent in managements eyes regardless of your technical skill.

  42. Pole dancing ? by Qwrk · · Score: 1

    Pole dancing maybe?

    No, just kidding. Me thinks 'Safety Cap' is quite right stating;

    1. The willingness to admit you don't know jack, and
    2. The desire and commitment to learn.

    Once you learn a thing or three, you need to go back and do #1 and 2 again. Forever.

  43. Two answers by wonkavader · · Score: 1

    "As an undergrad, what skills should I be trying to attain now to further my employability in the future?"

    I'll give you two answers. Both are smart-ass and both a TRUE.

    1. Interviewing. Read "Sweaty Palms" by Anthony Melody.

    2. Learn how a computer works. Dimes to donuts nobody's made any attempt to teach you this. Read history books on computers. Read about old machines, where systems were simpler. Read older microprocessors spec sheets. Then ask questions about everything you saw. When you understand why people created mercury-delay memory, you'll begin to think about what having memory means, what speed in memory demands, and that will lead you (ultimately) to cache-hit ratios and paging systems. You're probably only learning things which isolate you from how things actually work, and thinking that that's reality. It's not. You'll be interviewing with people who are older than you and they'll know how much you don't. Remember: "Those who do not study history are doomed to not knowing it."

  44. Don't focus too much on the technical side by antifoidulus · · Score: 5, Insightful

    You will, throughout your CS courses and professional/hobby work find out what you really like and you should gravitate towards that. If you are really skilled, then you should be able to pick up what you need to succeed.

    That being said, here are the skills I think you should pick up. My only qualifications is that 2.5 years outside of undergrad I am earning $70k+ a year AFTER taxes and have had professional experience on 3 continents(Europe, NA and Asia). Here is the list in no particular order:

    1. Pick up a 2nd major. Now of course there are "useful" majors such as science or business, and if that stuff interests you, great, but pick something outside of CS/IT that you REALLY enjoy and go for that. Even if it is film studies. For one, how many chances will you have after college to sit around a bar/coffee shop and discuss whether or not the feds in E.T. represent America's increasing xenophobia after being rattled by Japan in the first real post-war challenge to the US economy?
    Secondly, having a 2nd major will catch the attention of recruiters who have to sift through piles of resumes that look the same and can really give you something to talk about at the start of your interview and allow you a pretty good segue into your tech qualifications.
    Finally, a second major will allow you to look at problems from a different perspective and help your critical thinking skills, which are in much shorter supply in the IT industry than Java or Python coding experience IMO.

    2. Learn another language. Again, there are "useful" languages such as Chinese, Hindi, Korean, Portugese etc., but if you are only learning a language for the money and not because you are interested in the people and culture, you are almost guaranteed to never become fluent. Even languages such as German can help you on the job. If you are working for a company and you and a rival company submit similar proposals for a German contract, and your documentation is in German and theirs English, who do you think is going to win? Plus, from my experience abroad, there is no better way to break the ice with someone in another country than to speak their language. I got a Software Engineering job offer in Connecticut with a small company totally based in Connecticut partially because of my Japanese language skills. The company has to go through a 3rd party to sell their software products in Japan, and they could have really used someone with both a knowledge of the technical side as well as the linguistic side to aid the translators and to double check their work.

    3. Study/work abroad. (Shameless plug alert):I found an internship working at an R&D Lab in Japan by working with a group called IAESTE that finds and exchanges internships all around the world. I had to do a lot of work too, for instance I hosted our first intern from Argentina. But after work, there is a lot of drinking! Nothing more fun than a room full of drunk college students from the world over! The internship itself was an amazing experience in terms of both the technical and cultural aspects inside and outside the office. Not to mention I instantly stood out among my peers when it came time for job interviews. It also helped me land the job I have today, working as a software engineer in Germany. Oh yeah, and tons of fun and drinking, cannot stress that enough!

    4. Related to the above: work an internship, at home and/or abroad. I also worked in a steel mill writing software, which was a unique experience in itself.

    Above all, don't worry about individual technologies. Stay abreast of the news and don't be afraid to dive into something new every few years at the minimum. Oh, and its college, have fun! You have the rest of your life to work your ass off, and you should still work your ass off in college, but the nice thing about college is that for most students, they are young enough to work their asses off AND still have enough energy to go out and party.

    1. Re:Don't focus too much on the technical side by CatPieMan · · Score: 1

      Some anecdotal comments.

      I was a double major, Math and Comp Sci in college.

      However, my senior year, I took a couple photography courses, one of which was a 400-level art course, and got an A- in it.

      I not only found out that I'm fairly good at photography, but I also enjoyed it a lot. I especially enjoyed working with the chemicals, and making small changes in water temp to affect the final prints. I'm sure it helped me stand out on the interview, especially being someone who is obviously left-brained doing well in an area typically reserved for right-brainers. My prof was Don Camp, who is fairly well known for his photography.

      Also my senior year, I did some independent research. It was in the math department, but that was only b/c I needed one more math class to graduate on time. It used OpenGL and fractal algorithms to generate random terrain patterns.

      Best advice I can give someone in college is to look at what they are interested in and try to find a prof who will let you do an independent project under them if there is no course offered.

      At the same time as this research project and the 400-level photography class, I had a 300-level course in the classics department simply called "Mythology". This made for a very difficult, but rewarding, final semester in college.

      -CPM

      --
      ---You're all I need, When the water runs deep, You're all I need, Now I cry my soul to sleep -- Collective Soul, Needs
    2. Re:Don't focus too much on the technical side by mattwarden · · Score: 1

      Gotta echo the suggestion for a second major. I doubled in Systems Analysis and Psychology. While I was in college, dumb classmates thought that combination made no sense. When I started interviewing, every single company made a significant positive comment about it. Further, when I was asked why I chose that combo, I said because those were the two things I was interested in (as opposed to an answer like: well, I wanted to be an AI guy, so it made sense, yadda yadda). Companies seemed to like that answer a lot.

    3. Re:Don't focus too much on the technical side by jotok · · Score: 1

      Excellent post.

      I do security consulting and the 4 points you listed are applicable there as well:

      1. For every thousand guys with a GIAC Cert, there's one guy who just has a Security+ but stands out because he minored in Poli Sci or something. The guys with the Certs says "What? That doesn't matter to our job! It's just a soft science!" but it impresses hiring managers and HR types, and having some depth to your schooling always helps.

      2. For every 1000 guys with a CISSP there's one who stands out because he speaks Farsi or something.

      3. Working abroad means you are self-sufficient enough to navigate an alien culture. Means you can act without adult supervision.

      4. Having a variety of experiences is huge. When you're an undergrad you should just accept that you're going to eat ramen for four years and get worked like a rented mule so that you can get a good job when you get done.

  45. Job skills can wait by geo-geo · · Score: 1

    You're in school. You will get a job and you will learn on the job. A degree from a University is gonna help a lot in getting your foot in the door, not the number of computer languages you know and how well you know them. I'd love the chance to be back in the situation you're in. Enjoy your time. Don't feel you even need computer related (summer) jobs to gain experience, you'll be doing those jobs for the next 40 years. With good enough people skills and a willingness to learn quickly you should be able to land a job soon enough without spending your free time now learning even more.

    Do the things you want, party and have fun. Real life will come along quicker then you think and you'll be kicking yourself for not doing the fun stuff when you had the chance. I haven't had that kind of life for nearly 15 years now and although I don't regret the path I'm on, there are things I know I'm not going to get the chance to do but I had the chance back when I was finishing school...

  46. Undergraduates should not be specialized ... by Thomas+M+Hughes · · Score: 1

    I made a version of this post in the previous thread, but some form of it should probably make an appearance here as well.

    Undergraduate education is not about developing skills, job training, making you a better employee or things of that sort. The proper way to learn new specialized skills (like new programming languages, techniques, or the like) is to either go to a trade school, pick up a book and start teaching yourself, or (heaven forbid) require your employer to train you for the job he wants you to perform. Skills are nice to have, no question. But specific skills are not the goal of an education.

    If you want to understand the point of an undergraduate education, look at the overall structure of the program. Notice how the University has a general education requirement where you take a bunch of classes that you thought you had no interest in? Anthropology? Philosophy? Literature? Humanities? Math? Foreign Languages? Okay, keep that in mind. Now look at your chosen major. Notice how it has you take courses from a number of different fields in your chosen major? (I'm not in your major, so I can't tell you what these are, but I suspect 10 minutes with a course catalog would make them clear pretty quickly). When you see this structure, it should be clear that the goal of an undergraduate education is not specialization; it's a degree of educational breadth more than depth.

    Why breadth? Part of the belief is that by having a small bit of understanding of a large amount of subjects, you as a person will be better suited for dealing with a large number of diverse circumstances. It's significantly easier to go from your own pet Instant Messenger program project to writing drives for hardware devices if you've at least had some exposure to them before. It's also easier to go from you drivers to writing video game physics if you've taken some physics classes. And it's easier to go from your video game physics to being a lead designer, if you have some background in literature, film, and the like, to provide you with some resources to make a really great game. The assumption in University education is that an individual with a wide breadth of knowledge will be smarter, wiser and more adaptive than a highly specialized individual.

    And this gets me back to my previous post about the point of education. The point of a university education is not because it leads to wealth, power, or even happiness. The university as an institution that stems from 2,500 years of intellectual history, dating back to ancient Greek civilization. For the Greeks (and the Romans, and then the Christians, all of who were the champions of education), the goal of education was to make you a better person. For Plato and Aristotle, the goal was that by understanding the world around you, you would be striving towards a form of excellence that is only available to human beings. This was similar for the Romans. The Christians modified it claiming it was to get you closer to God. The point is such that, when your life is examined, it's possible to say "That is a good life."

    So, I've rambled a bit, and I don't think I've answered your question. What skills should an undergraduate have? No skill is essential to an undergraduate education. What should an undergraduate have? They should have a wide array of experiences and exposures to different aspects of the world. If you leave your university with this, you may not find a job, but your life is going to end up being a lot better than the guy who's only concern was building a resume.

  47. COBOL by TheGrapeApe · · Score: 1

    Trust me, it's going to be huge.

    1. Re:COBOL by LWATCDR · · Score: 1

      Actually not that bad of an idea. There is a huge amount of code written in COBOL and running on mainframes around the world. Most of this code is at the heart of some of the biggest companies on the planet. People with mainframe skills are getting older and retiring and someone has to keep the stuff running. Maybe not the most important language or skill to learn but it isn't as funny as you think.

      --
      See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
  48. Not true by ShatteredArm · · Score: 5, Insightful

    I work with Indians all the time in my line of work, and the one thing they are all in agreement about is that their universities are not as good as ours. They simply don't have the education to compete with us, and if they are American-educated, they typically stay in America. The jobs they are getting are basically the equivalent of junior programmer positions, where they're told which module to write and they write it; or lousy maintenance jobs. There will always be a demand for developers who understand other lines of business (e.g., finance, health care, etc.), can work well with people, and have good analytical skills (for analysis, design, etc.).

    Which brings me to my suggestion: learn about other lines of business, because most likely you'll be writing software with actual business users. If you limit yourself to only jobs writing software libraries, you might not have as many options.

    1. Re:Not true by Anonymous Coward · · Score: 0

      Why is everyone so down on maintenance programming, its the quickest way of learning to read / refactor code there is.

      If you think having to change years maybe decades old production code that you have never seen before and has nothing in common with the documentation is easy, I doubt you have ever done the job.

      The quickest way to make a new graduate look sick is to ask them to make a small maintenance change to a system as opposed to the scale of systems they work on at College etc.

    2. Re:Not true by ShatteredArm · · Score: 1

      What I'm talking about is maintaining new code. For example, you finish implementing a new application, it goes into production, and they dump the lingering issues and support to the less costly maintenance team in India. My company does it all the time. Much more of our maintenance work goes to India than does the new development.

  49. Database by flymolo · · Score: 2, Informative

    Many real world applications need databases. Almost all web applications do.
    Learn some SQL. I've never seen a programmer job where Databases skills were a negative.

    --
    "Sometimes it's hard to tell the dancer from the dance." --Corwin Of Amber in CoC
    1. Re:Database by Anonymous Coward · · Score: 0

      Learn some SQL. I've never seen a programmer job where Databases skills were a negative.


      I have. Some OOP-heavy shops are anti-database. They want to wrap away SQL and databases behind verbose classes, and if you expose any, they'll beat you with an encapsulation stick.
  50. Competence, Communication, and Passion by Anonymous Coward · · Score: 0

    Interviewing loads of new college grads, my personal checklist is Competence, Communication and Passion. ( in order of importance ).

    Competence : Do you know what you are talking about, when talking about things you should know about.

    Communication : Can you clearly express what you do and do not know. No one expects NCG's to know everything, so be up front if you don't know the answer, but try to say how you would go about solving a problem even if you don't know how to do it.

    Passion : Are you doing engineering, software / hardware / whatever, because that is the path that was selected for you ? Or do you have some passion for it ? Have you gone beyond the scope of your learning to be interested in the field you are working in?

    Many people have the first two qualities, but it is the third one that will set you apart from a field. Any activities or projects that aren't required by your studies show that you have interest in your subject. That can make a difference when deciding between two competent candidates.

  51. firmware - C and asm by freshfromthevat · · Score: 1

    There are those that will tell you that C and asm jobs are much more rare than C++, C# and Java. They may be right. I can tell you, as director of Firmware Engineering of the company I'm with, that it is MUCH MUCH harder to find unemployed C and asm 8/16-bit micro engineers than it is to find MSWindows, Linux, big system, C#, java and etc programmers.

    My recommendation would be to go to http://www.ti.com/ez430 and for $20 buy yourself a eZ430-F2013. That comes with a MSWindows GUI demo package of a C compiler, assembler, simulator and debugger, with the real TI CPU. With this you can get your hands dirty writing firmware for your own application. It's worth it. It will really enhance your resume going into many lines of work in the embedded/firmware engineer lines of work.

    --
    .. Blub falls right in the middle of the abstractness continuum. -- Paul Graham
  52. Communication and Theory by MosesJones · · Score: 2, Informative

    The number 1 most important skill if you want to have a decent career in IT that won't disappear to South America or India is to be able to speak to business people about IT concepts in their own language. The standard of communication in IT is woeful with the US (IMO) being towards the bottom of the league in terms of the number of IT people who can speak to business people in a way that makes sense to their audience.

    The number 2 thing is the theory. Most new technology trends boil down to new applications of well understood theories. If you understand about distributed computing then you know the problem domain and just have to learn the detail of Web Services/REST/CORBA/.NET etc, if you don't know the theory you are stuffed.

    Communication and Theory matter. The programming languages don't. After graduating from a good university that gave me that base I went to one interview and said "yes I know C", one week later I had to do a programming test... I had to learn C in that week and still came top out of the interviewees. That was the theory helping. Today however I find more and more that its the communication part that is important both in communicating with the business and explaining the theory to those who don't understanding it within IT.

    --
    An Eye for an Eye will make the whole world blind - Gandhi
  53. Doesn't Matter by 26199 · · Score: 1

    Nobody hires graduate/inexperienced programmers expecting them to be good; some things only come with experience.

    Which is why lots of places don't hire graduates. The ones that do are more likely to be looking for people skills and problem solving than specific experience.

    The best CV for a programmer is one with >5 years of directly relevant programming experience on it, in a position of responsibility. You can't compete with that, so don't worry about it. Just do what interests you ... and be prepared to be persistent in the job hunt. Once you get into the game you will hopefully have the opportunity to prove that you're a good bet. After a few years in one job you are much more hirable and can move on if you want to.

  54. Don't tell them what you don't know. by PhearoX · · Score: 0

    At my last interview I was asked the following questions:

    "Do you have experience in cgi?" Answer: yep.
    "Perl?" A: sure.
    "C#" A: yep.
    etc etc etc. ...all lies. I had never even cracked open a book about any of these topics, let alone dabbled in these areas. However, I was applying for a job that had nothing to do with these things.

    Be sure you are answering questions within the context of the job you are applying for. You are applying for a web design job. Will web designers be familiar with backup utilities? Hiiiighly doubtful, but if you are asked, say yes. You are likely smart enough to figure out any backup tool they sit in front of you should the occasion ever arise. At least, as good or better than any other web developer on your future team.

    I did end up doing quite a bit of coding in the languages I just mentioned, but programming is such a simple thing to do, any fool can muddle his way through it. If it's a programming job you seek, just learn the basic highs and lows of all the popular languages, then make it very clear that you have "some" experience with however many languages it is that you looked into. Also make it clear that you can learn ANY language to some degree of proficiency in less than 24 hours, which is a perfectly acceptable amount of time to pick up a new language. They're all nearly identical, of course. A for loop is a for loop... Just syntactical differences in a few cases, which are easily googled in seconds.

    Unfortunately for those of us who have been doing it for a long time, programming is no longer the un-tamable beast it once was. These days my 6-year old son writes programs in VB to catalog his Pokemon card collection in one weekend. Tell them you know, even if you don't. Then when you need to apply the skills you lied about, google your heart out and come out smelling like a rose.

  55. RELATIONAL MODEL by Anonymous Coward · · Score: 0

    Please be sure you understand databases.. the way DBA's do, NOT the way programmers do. PLEASE. I'm so tired of the "Javafication"/"Railsification" of databases. Languages come and go, frameworks come and go, but we have to put up with shit DB designs for years and years.

  56. The rule of thumb by apankrat · · Score: 1

    As one of our instructors back in the Uni used to say - "we don't teach you THE language, we teach you how to LEARN the language". That's pretty much the most important SKILL anyone should master in the college. CompSci or not.

    As far as the actual knowledge goes, I have always been of an opinion that a graduate that knows 5 types of balanced trees is worth a bunch of dodos that "know" 5 languages. In the end the CompSci is all about an abstract thinking ability. Therefore the foundation - data structures, algorithms, db principles, grammars, etc - needs to be there and the rest will follow.

    Feel free to disagree :)

    --
    3.243F6A8885A308D313
    1. Re:The rule of thumb by Mr+Z · · Score: 1

      I don't think it's even really important to know 5 different types of balanced trees intimately. It's more important to know the basics of a broad array of data structures and their tradeoffs, and that even for a specific type of data structure (balanced tree, in this case), that there are different types, each with their own tradeoffs. For instance, I can't really tell you off the top of my head what the difference is between a red-black tree and an AVL tree, but I know both exist and both are self-balancing, and so if I needed such a beast, I'd go look at both to see which fits better.

      For most things, the actual data structure you use isn't as important as having the right abstractions. For example, do you care if your symbol table is a hash table or a balanced tree all that much, or yet some other structure? Not really. What you may care about is what the O() complexity is for insertions, deletions and lookups, so you can pick the implementation that best matches your usage pattern. And most of the time, you can just plop down an STL map and forget about it. :-)

  57. For four years I learned to program COBOL... by mdm-adph · · Score: 1

    ...on big iron. Then I graduated and got a job in web design. (A real job, not "making websites for people I know.") So, I guess... uh... keep your options open?

    --
    It is by my will alone my thoughts acquire motion; it is by the juice of the coffee bean that the thoughts acquire speed
  58. Depends on what you want to do by Tmack · · Score: 1
    If you just want "a job in programming", concentrating on Java will get you that. If you plan to build your career on programming, and do more than simply hold down a job, dig deeper into C, asm and other lower level languages so you can learn how the different logic bits actually affect the system as a whole. Java is so popular because it abstracts alot of the fundamentals and routine stuff such that you can get away with not worrying about it. The problem with it tends to be coders relying too heavily on Java doing the right thing, rather than knowing what their code actually does. Sure, you could get a job doing java, but if you want to really go somewhere and advance in the field, you need to have a firm grasp on reality, ie: Java isnt magic, it is still bound by the system (sry for the matrix-ish quote, but it applies here) and thus what it abstracts, like garbage collection and var management, still affects the system. With a better fundamental knowledge of how such things work, you can better control those effects.

    Aside from that, study the different OS platforms as well (Linux, Windoze, Solaris, BSD, etc). Even though Java itself abstracts that for the most part, there are still differences in the way it behaves and the tuneability and availability of certain functions on each. If nothing else, it will help immensely when working with an Ops team or when troubleshooting issues that might be platform dependant, and is good stuff to have on a resume.

    Tm

    --
    Support TBI Research: http://www.raisinhope.org
  59. Learn a Declaritive/Functional Language by Anonymous Coward · · Score: 0

    Invest time in learning a Declarative or Functional Language. http://en.wikipedia.org/wiki/Declarative_programming
    Languages like C and Java are Imperative and require a different type of thinking. Imperative languages have proven practical... but articulating algorithms/data structures in a declarative form is very powerful and making a come back.

    A declarative language like Haskell may be a good start, even though it likely will not become mainstream. But I'll wager that the things you'll learn in Haskell will make you a better programmer, and will be applicable to knew languages/toolkits of tomorrow.

  60. Reminds me of a joke... by Anonymous Coward · · Score: 1, Insightful

    ...stop me if you have heard this one.

    A man learns that his very wealthy father is going to die in just a few years. Knowing that he will inherit a fortune, he decides to try to use his wealth-potential to get a wife. After some searching, he meets a strikingly-beautiful young woman, introduces himself, and explains, "In just a few years my father will die and I will inherit millions of dollars!" Impressed, she goes home with him.

    A month later, she marries his dad.

    My point?

    I am a working programmer. I am not going to reveal to you the skills I have aquired which, I believe, give me a competitive advantage against other programmers. Think about that before taking too much advice from strangers on a web forum.

    1. Re:Reminds me of a joke... by UncleTogie · · Score: 0, Offtopic

      I am not going to reveal to you the skills I have aquired which, I believe, give me a competitive advantage against other programmers.

      But by the above post, you might be able to infer that acquiring basic spelling skill is optional...

      --
      Don't tell me to get a life. I'm a gamer; I have LOTS of lives!
    2. Re:Reminds me of a joke... by keenada · · Score: 2, Insightful

      There is a difference between acquiring knowledge and acting on it.

      Closing off hints and tricks to new graduates only hurts your company, the industry, the economy and ultimately yourself. Knowledge is power, yes, but a person has to want to act on that knowledge. As anyone who has taken Computer Science knows, the concepts may be easy, but 80% of people can't apply them to pass a simple course.

    3. Re:Reminds me of a joke... by Irish_Samurai · · Score: 1

      What is free, how costs money. If you don't know the difference you aren't leveraging it very well and you don't have the advantage you think you have.

    4. Re:Reminds me of a joke... by Kelbear · · Score: 1

      So the man who has /not/ done the work to inherit a fortune, had a conversation with a striking-beautiful young woman, banged her that same night, and she then voluntarily leaves without him even having to ask?

      I think the moral of this story is that lying is /AWESOME/.

    5. Re:Reminds me of a joke... by SatanicPuppy · · Score: 4, Insightful

      Oh please. I've worked in the business for a decade. My advice for an emerging undergrad? Remember that you don't know crap.

      School is about a foundation. You're worried about what you know about C? You may never in your life program in C. Or you may program in it every day. Either way, you're not going to get your first job based on your college programming experience, not unless you did something so wildly off the charts that you could have programmed it in RPG and people'd still be lining up to hire you.

      What you need most to remember is that it's your work once you're out in the world that will define your career. It's a hell of a lot more important to buckle down and learn in the real world, than it is to leave college thinking that you "know" how it's supposed to be.

      --
      ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
    6. Re:Reminds me of a joke... by Run4yourlives · · Score: 1

      Most people who compete want to do so against the most formidable opponent they can find. You can only better yourself with challenge.

      Your response suggests the following:

      1. You have a low opinion of yourself, as you have no desire to better yourself.
      2. The poster is probably more skilled than you are already.

    7. Re:Reminds me of a joke... by madcow_ucsb · · Score: 1

      Indeed. I do firmware for semiconductor startups, so I'm firmly into the "C everyday" camp. Yeah, I learned C/C++ in college, but I have to say, I learned about as much in the 2.5 years at my first job as I did getting my BS. Probably because I quickly realized I didn't know jack and had to bust my ass to get up to speed.

      Anyway, if there's anything that'll help you stand out when you graduate, it's cool projects and internships. I was a Computer Engineering major (thought I'd be a digital hardware guy, didn't happen that way) and we had to do an embedded system project senior year. That turned out to be the key that got me into that first entry-level position. Yeah, in hindsight our design was lousy, we chose an inappropriate CPU for the job, and had to bit-bang our ATA harddrive because we screwed up a couple signals. But it still worked, had real hardware interaction, and was real C and ASM with no operating system to help. So at least they guys hiring me knew I understood what a pointer was.

      From then I was just a matter of unlearning all the bad habits I'd developed (seriously, a while ago I found some of my old code from school and it was damn-near unreadable)

    8. Re:Reminds me of a joke... by -+r · · Score: 1

      when i was first hired as a programmer (straight out of an ibm mainframe assembler course - no degree or anything), i was told that i was hired not so much for what i knew (which wasn/t exactly true - day one i was given a dump from an old dos/vse assembler program and 4 hrs to figure it out) as for the fact that i was interested in everything. in the 20-odd years i spent programming, i learned far more than i ever did in school. from assembler on dos/vse to assembler/cics on mvs to horrible batch cobol on mvs (which actually is an okay language for what it does) to perl and web programming on unix (and sql on sybase), the job went places no one could imagine. pretty much all you need to learn, really, is curiosity. and, yes, i have had people hired because they knew little abt the actual environment, but were curious enough to find out.

      --
      - r
    9. Re:Reminds me of a joke... by -+r · · Score: 1

      um, just to say, doesn/t mean i don/t have a bachelors. only it/s in ancient greek, latin and english. so acourse i became a computer programmer. obviously.

      --
      - r
    10. Re:Reminds me of a joke... by Anonymous Coward · · Score: 0

      Defence of the undergrad:

      Ok, some emerging undergrads know a lot of crap. I'm not (or should that be no longer?) an emerging undergrad but I'm still 'young'. I have a PhD and a few years experience running scientific projects of small and medium scale but all I ever hear from people is not much experience. Things done at university are often sneered at or written off as unreliable experience by the private sector. This is an unfair reflection of the education system. I'm in the UK so I'm basing my views on what I see here. The fact that this emerging undergrad has gotten up off his butt and asked people and /.ers (two overlapping but non-identical sets) for their opinions on how he can make himself more valuable shows that he does know something and suggests, to me at least, that he knows a lot more than people making assumptions like yours give credit for.

      There are plenty of people I know who left university and didn't know much, seven years later and with seven years experience in the 'real world' and they still don't know much. A lot of them are my friends, some of them would be willing to say the same as I have done. There are people who have that same seven years and have turned themselves, with a little help, into experts in various fields. Ditto for people who stayed in education and didn't get and 'real' experience, some of them easily match equivalents from industry, some of them aren't much more use now than they were seven years ago. Its the people that make the difference not the label: 'undergrad', 'postgrad', 'experienced' or whatever that they or anyone else applies to them.

      Finally: I think undergrads are often encouraged to recall that they don't know much because many undergrads (and people of those ages in general) are a little too cocky, or come across as being so. It is too easy to mix up telling an undergrad not to be quite so sure of themselves with telling them that they don't know anything. I don't think its a question of application of knowledge either. I hear a lot of 'everything you did at uni was theoretical out here in the real world its different' well bollocks. Some of the stuff I did at uni was esoteric and theoretical, lots of it wasn't. Lots of it has to be applied in order for any results to be established, some of it has no meaning without being physically made.

    11. Re:Reminds me of a joke... by Anonymous Coward · · Score: 0

      I have a PhD and a few years experience running scientific projects of small and medium scale but all I ever hear from people is not much experience. Things done at university are often sneered at or written off as unreliable experience by the private sector. Did you publish at all, and if so, were the manuscripts or, at the minimum, the abstracts, refereed? If so, then I'd definitely say that's directly applicable experience, depending on what field you're going into. Granted, publications in biology might not get you much, for say, a computing position (bioinformatics, computational biology, etc. excluded), but it will say that you can at least conduct research and write well enough to at least fool some referees.

      As well, what kind of job are you trying to applying for? If you're applying for a research position, being able to manage research, write grant proposals, publish work of substance, and publish frequently are key skills. But if the job is predominantly non-research, then employers will most likely gloss over those abilities. From what I've seen firsthand, and been told, having a PhD opens very few doors, which are mainly research and consulting positions, and closes many, so this might be what is happening to you. In that event, talk with your adviser and see what type of connections he has, or possibly try a postdoc position or two.
  61. Haskell! by mstahl · · Score: 1

    Ok maybe not, but seriously programming in high-level functional languages like lisp, haskell, ML, etc., lets you really explore the abstract nature of computer science. That way you can become a computer scientist rather than just a computer programmer. Concepts like recursion, functional mapping, and—in the weirder languages—lazy evaluation and functional currying are really useful to at least be aware of, and they can help you write more efficient programs in other languages as well. Most helpful for me, at least, is that Ruby supports many of the same functional constructs that exist in Haskell (map, called "collect" in ruby; fold, called "inject" in ruby; etc.). The advantage here is that you can really prototype your algorithms in code and see, conceptually, what they do without being bothered with the nuances of a language like C++, which tends to slow down that process a lot with the constant compiling and mysterious errors.

    I was initially taught Java, then C, then C++. When I learned lisp, I never went back. And yes, my pinkies still hurt.

    Disclaimer: Watch out, as languages like PHP and Python do not support tail-recursion, a vital requirement for efficient functional programming. Without it, you're stuck with stacks and while loops.

  62. It depends on what you want to do. by jareth-0205 · · Score: 1

    If you want to go into application / web programming, then stick to the high-level Java / C# / PHP stuff. Even though a good proportion of /. seem to be obsessed that you must know about *everything* in a computer, for many programming tasks this is not necessary (else why was high-level programming invented in the first place?), and it's not practical for you to know everything.

    Give yourself a project to complete in a particular language and work through it. It's much better to talk about real completed tasks in an interview and it's very useful to have seen things through from beginning to end. You'll learn alot about how not to make the mistake you make on those projects again...
    Read about design patterns *and use them*. Being comfortable with a language and how to structure code is very important, they'll be looking for that.

    Course, if you're looking to go into embedded or kernel lowlevel stuff then the rules are different, and you should ignore everything I've said...

  63. Don't worry by Anonymous Coward · · Score: 0


    I spent days upon days in a top-notch CS program learning all sorts of issues in what is being clumped together here on /. by the term 'low level programming', I have been programming since I was a child in the days of the Atari 400 and Commodore 64. I have advanced degrees in the foundations of computer science. AND I have not used hardly any of it in my professional life. I Do Java, MySQL, etc. There are plenty of interesting well paying jobs. There are innumerable companies slavering at the mouth to have you come work for them. Most of what you'll need to know you'll learn on the job.

    I'm a big fan of Computer Science and computers and have a masters in the field- don't get me wrong. But the vast majority of the 'professional programming world' isn't computer science. I think Math, logic and the foundations of computation are far more important to understand than whatever particular 'low level' language is 'ubergeek' this week.

    Of course, there are exceptions. Want to do Kernel code? Embedded devices? Sure. But if thats not a prerequisite for you to be happy in your career. Meh. Take a humanities course. Read up on the French Enlightenment. Chase after that awesome hottie in the third row back. Enjoy college.

    On Java, and on most things, /. has been about as right as the hardcore 'warhawks' were about Iraq back in 2001. /. has been declaring Java dead since I have followed /.. There have been so many high-pressured vomitous ventings of geek spleen about Java here that they have become comical. Something almost of a parody of itself. Java is a fine language for most things. Java has many great features. Java isn't new, nor were most of the ideas behind Java new, nor were they really awesome or complete implementations that fulfilled the promise of those ideas. But so what? It works, its Object Oriented enough. When well coded and well designed its reasonably efficient for most applications. Its going to be around probably decades, and it will be a great tool for you to add to your kit when making your career. Perhaps even a central tool.

  64. The primary skill of any undergrad (and above) by malkavian · · Score: 1

    Should be Research. Knowing how to get the right answers (and not just trusting to an "I feel lucky" google run), or find the right information.
    Once you know where to find the latest information, coupled with the theoretical knowledge you've gained through your Uni years, you'll find that you're able to keep current (or at the bleeding edge) of your chosen path, once you've tinkered about with various roles in "The Real World", and found one that fits you.

  65. Necessary undergraduate skills by sm62704 · · Score: 1
    • ability to slam a six pack in less than five minutes
    • ability to wear a toga
    • ability to use a bong correctly
    • ability to (if white) excrete a rebel yell or (if black) yell "muthafucka!"
    • ability to ingest lethal amounts of various illicit substances without untoward effects
    • Ability to do without food for prolonged peroiods of time
    • ability to do without sleep for prolonged periods of time
    • ability to bullshit instructors into thinking you've actually absorbed the material you're clueless about
    • ability to reed and right
    • basic numeracy (ability to count past six)
    • lacking any other abilities, an undergraduate should have the ability to excel at some sport or another (does not apply to this discussion)

    For further study see my journal,How to succeed in life if you've been unfortunate enough to graduate from college
    --
    mcgrew's razor: Never attribute to stupidity that which can be explained by greedy self-interest
    1. Re:Necessary undergraduate skills by dintech · · Score: 1

      Hmm. Glad I didn't go to your university.

  66. Personality by obduk · · Score: 1

    I left university 6 mounths ago, and got a very good job before I left. I spoke to the person who employed me, and he said the main thing they were looking for was someone who would fit in with the team. The most problematic people they've had over the past few years have been people who have been anti-social, create code on their own that only they understand, and not be able to communicate with customers and other employees.

  67. Pick one by larryau · · Score: 1

    Diversify your toolbox of course, but pick on thing and become real good at it.

  68. Unpopular on /. but... by RandoX · · Score: 1

    Look at the want ads. Around here it seems to be almost exclusively .Net. Primarily VB.Net or C#. You can work on whatever you'd like to, but I'm assuming you're interested in learning some skills that have the best chance of landing you a job. Your area may differ in what they're looking for.

    Bring on the boos and hisses. It brings me home a very comfortable paycheck and I enjoy my job.

  69. Few major things by Sycraft-fu · · Score: 1

    First is understand how to program. By that I mean actually understand how one uses a programming language to command a computer to do what you want. Nothing worse than a "programmer" that can only program in one language because all they learned is that language, and not how to program. If you actually learn how to program, how a computer works, then you should be able to program in any language. You'll have to learn that language's syntax and such, of course, but you'll be able to do that if you need to. You won't be stuck programming in just one or two languages you know.

    The next would be learn the MS tools. You might not like Microsoft, but you have to accept that they are a major force in the industry and that you may end up with a job developing for Windows. Learn Visual Studio and be comfortable with it. Be able to write a basic program in it (it makes that pretty easy).

    However, learn non-MS tools too, GCC or something like that. Don't be one of those programmers who can only write code if there's a nice development environment holding their hand. Even if that's what you mostly want to do, designing GUI apps for Windows, you don't want to be a fish out of water if there's a job that calls for you to write some code on a server using nothing but a text editor and a compiler.

    Do those things, and I think you've got as good a general skills as you are going to get for an undergraduate type of education. You can't expect to master everything, and they'll always be jobs with particular requirements. Best thing you can do is get a good set of fundamental skills so you can be flexible and learn what a specific job requires.

  70. My 2 cents by Alpha830RulZ · · Score: 1

    I'd try to learn one of the container environments and web development frameworks, just to show that you can. Tomcat and Struts would be good. Try to do a project for a charity using one of these environments, which demonstrates a lot of good things to a prospective employer

    I'd get familiar with .Net. Like it or not, that drives a lot of work these days, and even knowing why or why not you'd like to use it will be good.

    I'd read about XP and other agile methods, and mybe some of the older texts, such the Mythical Man Month, DeMarcos' Controlling Software Projects, and Code Complete.

    I'd take economics and accounting, if you think you want to work in environments that handle money. If you want to do device drivers, then maybe not so much.

    Last, I wouldn't worry about it. The fact that you're asking this question probably indicates hat you're the kind of person who will do well.

    --
    I was taught to respect my elders. The trouble is, it's getting harder and harder to find some.
  71. No worries... by LuisAnaya · · Score: 1
    Do not get discouraged, you'll get employed if you know java and data bases technologies and data warehouses. The problem is overall lack of knowledge of fundamental software design and methodology, and computer hardware architecture. Those are things like: data structures, basic IPC programming, algorithm analysis, Functional Algebra for databases, all that boring stuff. This is what separates the real computer scientist than those who merely memorize to obtain a certificate of sorts. If you know your stuff, you know your stuff. If you have a good grip on the fundamentals, you'll be ok.

    Please, do not feel that you're wasting your time, but just be aware that your education is not done, you'll have more stuff to learn as you go along, and as long as you are having fun, you'll not mind.

    --
    Vi havas e-poston.
  72. Relational databases, SCM, practicality by Reality+Master+201 · · Score: 1
    Having worked with a large number of undergrad and recent graduates in computers, here's what I'd want to see more of in a candidate:
    1. Take the time to learn about relational databases. Not just SQL. Learn why there's a relational model and why it was developed (yes, pedantic shitheads, there is no widely available pure relational database; eat a dick). Learn what normalization is. Also, shoving everything into the database isn't always the best idea, and some stuff doesn't need a db behind it.
    2. Learn to work with an SCM -subversion, CVS, whatever. Understand branching and merging, and how you'd maintain a product over time. It's handy and there's tons of developers that have worked for years and don't get it right.
    3. Don't try to optimize stuff up front. The algorithm you pick typically doesn't have to be the fastest, nor do you have to do everything the most efficient way the first time around. Do something that's clean and easy to make changes to. That's an art, and it takes practice. Too often, I see people worry about making things fast before making them right. Don't do that.
    4. Learn how to do testing. Not just quickly clicking through shit. Learn to be through, use unit testing when appropriate.
    5. Do the simplest thing that could possibly work. Don't add features for the future, etc.
    There's plenty of other stuff. Don't depend on code generators, don't try to use every single new thing that comes down the pike, XML doesn't belong in 95% of the places you find it, most of the time the programming language you pick doesn't make that big a difference, etc. I like people who understand how to use Unix shell tools, mostly because you can get some simple tasks done quickly by stringing them together.
    1. Re:Relational databases, SCM, practicality by sphealey · · Score: 1

      > Also, shoving everything into the database isn't
      > always the best idea, and some stuff doesn't need
      > a db behind it.

      I generally agree with your points, but I have to question this subpoint a bit. Having been on the business implementation side for 15 years now I have found very little that is kept outside a database that wouldn't have been better off in one - and some of my judgments about those few exceptions turned out to be wrong in the long run. As Tom Kyte says, fads come and go. Languages come and go. Applications come and go. Platforms come and go. But databases and the data in them can live on essentially forever (not necessarily on the same platform).

      Which brings up another good point: get all of Tom Kyte's books and read and re-read them until you understand them. Although admittedly that is a bit difficult if you don't have any real business data projects to work on, so I would echo the comments above and say get an internship, preferably one that involves serious business data.

      sPh

    2. Re:Relational databases, SCM, practicality by Reality+Master+201 · · Score: 1

      I was thinking of the apps I've seen where the guy hard coded a DB config into the app so it could connect to a DB to get the configuration information for the app from the DB so it could connect to a different DB, or where it collects a ton of data from the web and stores it in text fields in the database. Also, people tend to put a bit too much logic in stored procedures, or depend on database triggers to run stuff outside of the database; the latest atrocity I've seen is a .NET trigger in MS SQL that calls external web services as part of a high load transactional database - turns out it doesn't work out so well.

      Some of it's personal preference I guess, as well as the industry you work in.

  73. Do a real, honest to God, project by Buzz_Litebeer · · Score: 1

    The best class would be a hybrid class where they get people wanting to major in business together with students in CS and they do a god damned project together.

    I was very good at college programming courses, only to get tossed into the "real" world where everyone does projects doing things that no one even approached having to do in an honest to God working environment.

    My ability to write a house emulator using X10 using Python on Linux was a FUN project but had no real world applicability.

    What should be done is get a group of business majors who approach their IT department from the point of view of their "client" their "Client" being the business classes instructor who never talks to IT directly except through scheduled phone calls.

    The business majors spend a period of time getting project requirements together, and during this period of time technology on how to approach the known problem is taught in the class on the IT side(takes first half of the semester), as well as meetings with the business group (possibly last 20 minutes of every class) to soften the overall proposal, discuss layouts, designs, feasibility etc...

    Then the second half of the semester the functional requirements and implementation stage for the program done by IT while the business group sets up meetings with the client when requested as well creating documentation of the work and trying to stop scope creep.

    If done right you could implement the completely dysfunctional work environment that people have to work in every day, and get a product that meets most of the requirements out the door by the deadline. The teachers would grade on work done, how close to requirements it met, then grade on the following basis.

    The "client" (business teachers) score would mean 20% of the overall grade of the IT group after reviewing performance reviews from the business students and IT documentation created for him to see, and 80% of the business students based on their performance and responsibilities, and IT instructor would give 80% for the IT students based on their code, cleanliness and following of some standard, and 20 % on reviews by the IT students and documentation provided to the IT students.

    This way both groups "grade" each other.

    Another good class (say part 2 of this thinking) would be having the students do a series of "real" upgrades and code management of legacy systems that people want to add features too.

    if they could pass both of those then they are ready for the regular grind of work.

    --
    If you don't vote, you don't matter, so don't waste your time telling me your opinion
  74. My $0.02 by PontifexMaximus · · Score: 1

    While you can get a good overview of the languages/tools you will use in the real world (what's that?) It seems to me that only by getting a job out here in said world will you really get the skills you need. Tinker all you want, every little bit helps, but very little I learned as an undergrad really prepared me for the corporate world. The whole 'college teaches theory, not application' is pretty accurate in my opinion. College (and school in general) tends to have a curriculum that's a mile wide and an inch deep. Lots of subjects covering very little in depth. I certainly think you should go with what you enjoy the most, not where the money is. I've found I'm a much happier person in a job I like making less money than getting 6 figures thrown at me and hating the job. If you don't enjoy what you are doing, none of your skills will matter much, as you'll be less interested in really using them.

    My biggest 'wish list' item for undergrads, especially in an IT related field, is a little more concentration on public speaking and people skills. Being a geek really is its own culture,but that doesn't mean you have to be a social retard. I've seen many a great coder fired for lack of tact/ability to dress properly. I think this is becoming a little less of an issue, but that's still one of my pet peeves.

    College can only get you so prepared for ANY field, the rest is a trial by fire. Be confident in what you DO know. Just out of school, don't oversell yourself to prospective employers, and you should be just fine.

    --
    Pax Vobiscum
  75. The best thing you can do by MikeRT · · Score: 2, Insightful

    Take as many development internships as possible. It doesn't matter how little the pay you. Take them. It's job experience that you can start out with that a hiring manager will look at your resume and go "ah, this guy isn't just a worthless, theory-ladden undergrad."

    You'll learn a lot of skills that way, and you might get paid to do it. Chances are, you'll learn a lot of basic skills that are applicable to your job market.

    This is the advice that I always give to people who are going to be graduating. Look at the skills that employers want where you plan to live. It doesn't matter whether you can code the best embedded systems in C and ASM on Earth, if there are no jobs for that where you want to live. If you want to get skills that aren't purely work-related, then study just what interests you.

    Where I live, Northern Virginia, the job market is primarily for Java developers. I don't waste my time learning languages like C++ on the grounds that someday I might need to learn them, when I can quickly pick up the basics when I need to use them at work. I keep up to date on Java for work, and learn Perl and stuff like that for my own enjoyment.

  76. Critical thinking and logic by Urban+Garlic · · Score: 1

    The most important thing you need to know is how to think about complicated programmed systems. They're deterministic and logical, but can be quite subtle sometimes, and appreciating how apparently non-logical behavior can arise from logical rules is extremely useful. Knowing the command-line switches of a specific compiler is nice, but it's not as important as being able to think critically about what's going on in a complicated system, and being able to convey your thinking succinctly in code that other people can read and maintain. Most Algol-like languages are pretty similar, so if you're proficient in one, you can probably shift to another fairly quickly, much more quickly than starting from scratch.

    You should probably try to position yourself to take advantage of the coming era of shared-memory multi-processing on cheap multi-core CPUs. Then when that era fails to arrive, you'll have examined the programming problem from two angles, and will have the mental flexibility to deal with whatever actually does happen.

    --
    2*3*3*3*3*11*251
  77. Here's what I look for... by Anonymous Coward · · Score: 0

    Hiring a new grad is both easy and hard.

    Easy - You need to have the standard toolkit of skills, primarily the language(s) that we use for development.

    Hard - I want to know that you can (and are able to) work on a wide variety of types of jobs. If you only want to do Java work and nothing else, good luck to you wherever you may end up. Versatility (and a WILLINGNESS to do a variety of thing) is critical.

    Things that would be useful for new grads is configuration management in large development teams (ClearCase experience is awesome), requirements (requirements tools like RequisitePro and DOORS is valuable), development processes/tools (Rational Rose experience is a differentiator), and an appreciate of the value of quality assurance methods (peer reviews, design reviews, etc.).

  78. Graduate studies by Anonymous Coward · · Score: 0

    Graduate studies isn't a skill, but getting an MSC will give you a leg up in the job market. It will also give you a chance to pick up on a few choice skills you feel you have missed as an undergraduate. A word to the wise: Pick your supervisor carefully! A negligent supervisor can leave you floundering for guidance, hold you up every time you need them to do something for you, and add academic terms to a grad degree. This can cause you a great deal needless anguish, and it is awkward to complain about a bad supervisor once you are at their mercy.

  79. Thoughts by HunterZ · · Score: 1

    - If you have an opportunity to get a decent internship, do it. If nothing else it'll look good on a resume.
    - Learn C/C++.
    - Get comfortable using Linux/Unix, at least to the point of being able to write some simple utility/test programs/scripts.
    - Take a software engineering class if your college has one available.
    - Expose yourself to some SQL and writing web-based frontends in one or more server-side scripting languages (PHP or whatever).
    - Get a good grounding in general programming concepts (how computers actually work under the hood, algorithms, data structures, object oriented design, etc.).
    - Look at job listings for stuff that looks interesting and see what qualifications they're looking for; explore the related technologies and concepts.

    Fortunately I was able to do all of those in college except for the internship.

    Also, it's true that college only prepares you so much; you'll have to spend a lot of time getting up to speed.

    --
    Arguing about vi versus Emacs is like arguing whether it's better to make fire by rubbing sticks or banging rocks.
  80. Too much free time? by Anonymous Coward · · Score: 0

    As far as first languages go, java is better than some (remember basic or fortran? as first languages?), at least you learn some good programming habits.

    Nevertheless, java as the only language? Better learn to ask, "You wanna fries with that" ...

    That "slam"-article contains a fairly good analysis. You might consider posix-type systems (like Linux), C, C++, math for programmers, formal methods for analysis, design and testing, ...

    In the end, it all depend on you. What do you wish to do with a computer? For some purposes, java is just about perfect. But, only some.

    1. Re:Too much free time? by SQLGuru · · Score: 4, Insightful

      What do you wish to do with a computer? This is probably the best line in the parent post.

      Computer Science is a very general field with many specific applications of that knowledge. The skills needed to excel in one instance might be completely wrong for another instance. You should really evaluate what area you want to work in and learn the skills needed in that area.

      Games programming? C/C++, understanding of 3D space, understanding of low level hardware (consoles), etc.
      Embedded programming? Tuning, tuning, tuning, and some C/C++
      Business Apps? Database skills (Oracle or SQL Server would be my first stops, DB2 a close 3rd), Java or .NET, WebServices, and how to work with someone else's solutions (vendor solutions)
      etc.

      The other skills you need you can't learn from a book. You need to learn to integrate with a team. You need to learn how to write a good design spec (and not for a semester long "project", but for a real application that takes upwards of a year to work on). You need to learn to accurately estimate. etc. To learn these, I recommend that you find a very good mentor at your first place of employment and absorb from them.

      Layne
    2. Re:Too much free time? by jayp00001 · · Score: 1

      I agree with the parent post and the skill you need to acquire is how to get an internship. You will need to be able to acquire almost all of the skills you're currently paying to learn own your own anyway (unless your college teaches you how to study rather than making you study- meaning you're figuring out how to study on your own). Internships are the absolute best way to learn this sort of trade and will likely land you a paying gig faster than graduating.

    3. Re:Too much free time? by gtm256 · · Score: 1

      I agree whole heartedly with the parent post. Ignore the Java slam post entirely; it's a bit of arrogence. I've found that the only practical use of such garbage is to formulate esoteric interview questions. A company that would expect you to know something so specific given the breadth of work available with computers is rediculous.

      For me, my education in computer science was a survey of what was out there and a ticket into the door for my first job. I think it was worth it and I think that's all you can really expect of it. It's up to you to get excited about an area, not your university. I suggest you do get excited about something and bring that excitement to your interviews. Good people will appreciate that much more than your amazing knowledge of template specialization. Although you certainly do need to build up some domain knowledge. But focusing on knowledge for knowledge sake is putting the horse before the cart in my opinion. You will gain knowledge automatically through the joyful practice of your profession. This stuff is fun. Don't let the inferiority complexes of a few a-holes ruin that for you.

    4. Re:Too much free time? by -+r · · Score: 1

      except, acourse, sometimes you don/t have a year to work on. mostly, programmers are slaves to the owners of their output. i doubt very highly one can learn what you need to know from a book, tho o/reilly have helped more than anyone could possibly expect.

      i think it *very* important to know the machine level programming of what you are doing. i also think c++ is a disaster. if you can/t do it in c, think
      abt the alternatives. as someone who went to 'object oriented' thru smalltalk, where things made sense, c++ is c w/ even more errors built in. i/d much rather program in *any* assembler than c++. and may your god help you microsofties who think c# isn/t anything but outta tune.

      the other thing i agree w/ here is that you *have* to understand how to communicate w/ your audience. no matter your environment, this is what keeps you in your job.

      --
      - r
  81. Think in algorithms, not in syntax. by hanshotfirst · · Score: 1

    It's ironic... When I was in college ( early 90s ) I must have read the same article, expect then C and C++ were the sexy languages to slam, Java was not yet quite on the scene, and Assembler was still the choice for low-level programming (but fading fast at the time). C and C++ were not formally taught at my school - it was considered a "tech school" language. But the advanced classes used C and C++, so those who were interested learned it on their own. Many classes were taught in Modula-2. Now THERE's useless text on a resume.

    I remember in one class I decided to learn COBOL on the fly, just so I wouldn't have to go back to Modula2, since C wasn't allowed for the assignments. Haven't touched it since then, but aced the class.

    I'd recommend 2 things: 1, Learn how to think through how you will do something efficiently, regardless of the language. The hot language changes every few years, so don't get stuck on any in particular. And 2, figuring out some of what you want to do, and spend time doing it; develop skills in areas that interest you, but don't just follow the programming fads of the day. I spent enough time to get through my assignments, but not enough to explore fun areas and get really good at a few things. I could have learned more about the new "world wide web" thing that was just getting interesting; Instead I had to brush up my Internet skills more slowly after graduation, in my (much-reduced) spare time.

    --
    Why, oh why, didn't I take the Blue Pill?
  82. Discipline should be your focus by hoppo · · Score: 1

    Worry less about the languages you'll be using and more about building discipline in yourself to do things the right way.

    College courses do well in teaching language syntax and high level concepts. Some schools also push good programming style. However, I find a lot of concepts get pushed aside since they're more important in a commercial environment than in an academic one. These are the concepts that make for a complete software developer.

    For example, testing is an afterthought in college courses. The reasoning is sound. You're building an application in a college course that is designed to run once and get you the grade. You don't have to worry about regression issues. It's not an application that will be cause for a 3am phone call on a Sunday morning. Even if testing is covered in the course, the nature of the work you do in that course means the value of the testing will never be realized.

    Maybe try this: come up with a software project to build discipline in your development practices. The scope of the project should be fairly small, as the code you write should be one of the least of your concerns. Rather, this should be an exercise in writing tests, managing your project in source control, automating builds (and testing them), and refactoring. Do this and you'll be amazed at how far ahead you are of your peers in a year or two.

  83. The Important Skills by mbrod · · Score: 1

    With so many different tracks it is hard to say. There is a big difference between writing internal business software and writing software for a company that sells software. I could go on about 50 other career paths besides those two but I am sure you get the point.

    As others have pointed out you will likely be doing Project Management, even if you aren't a "project manager" and some skills appropriate to that are worth while to learn. Along with that, so much work is outsourced you might end up doing a lot of Systems Integration as well, where you pull together outsourced projects in to the greater whole of what the business does.

    A solid understanding of the basics of straight SQL would be my best advice. This knowledge combined with your data structures knowledge in C++ and Java give you the foundations of what all business software is.

    If you want to go in to graphics programming, game programming, or work for a big software company I wouldn't know what to work on. All my work has been with business software internal to the business.

  84. Network systems architecture... by DriveDog · · Score: 1

    is what I would have learned more about if I had it to do over. How to program using low level network APIs and such. You can't know too much about data structures and how to do things at a low level. It may not help you get a job, but it will help you perform one. Security and cryptography - the basic hows and whys, is always a good thing to know. Personally, I would learn a lot about cartography and geo-spatial databases and algorithms. Applications using such will only grow for the foreseeable future. Best of luck!

  85. More projects by ari_j · · Score: 1
    Some of these are things that a CS degree should already require, but "should" means so little these days...
    1. Write an interpreter for some language, or a subset of one. Experiment with different data structures to represent the code being interpreted.
    2. Then write a compiler for it. (At least a bytecode compiler and an interpreter for the bytecode.)
    3. Write at least some sort of database library and see how fast you can make it run.
    4. Figure out at least one thing that's easy to write in C (or Java, etc.) and hard to write in Lisp (or O'Caml, Haskell, etc.), and understand why. Then do the same with the languages reversed.
    1. Re:More projects by schmu_20mol · · Score: 1

      Good one on at least number one. If I had some mod points you'd have them. Personally I'd change number four to 'write something non trivial' in a functional language. E.g., maybe even a reimplementation of the interpreter of number one in Common Lisp.

      --
      "Nae Kin! Nae Quin! Nae laird! Nae master! We willna be fooled again!"
  86. Learn the fundamentals (and drinking!) by swordgeek · · Score: 1

    Learning more languages is good, and the lower-level, the better in many ways. If you never write code professionally in C, it's still worth knowing. Likewise for Pascal and Assembler (!!!). The real key with more languages is that they eventually fade into different syntaxes and structures, and you cn concentrate on developing the ideas in the language du jour, without worrying about the language itself.

    Learn more math. Learn to develop algorithms. LEARN TO TROUBLESHOOT!!! This last is one of the two fundamental concepts that everyone on the planet should know, in their own appropriate context. (incidentally, the other one is quantitative analysis.)

    Learn how binary devices work. Build a digital display out of seven-segment LEDs and NAND gates. Write a final-year paper comparing the success of various network protocols, and what makes a good protocol tick. (Actually, that's a neat idea. Hmmm...)

    --

    "People who do stupid things with hazardous materials often die." -- Jim Davidson on alt.folklore.urban
  87. Low Level Programmer to a High One by UnknownSoldier · · Score: 1

    Programming is all about 2 things
    - problem solving
    - for other people

    The technical aspect is the first, communications is the second.

    As a a low level games programmer, proficient in Assembly, C, C++, don't sweat the small stuff. Actually, I'm a little "jealous" of programmers who grok high level languages like pearl, python, ruby, lisp, haskel, eiffel, and shell programming (I just don't love them like I do C). I like to tinker with the nuts-and-bolts, or bits-and-bytes, but I appreciate those who like to use the more abstract, "higher" languages to be freed from the tediousness of the low level details. Figure out what type of programming you enjoy (high or low), and pursue it. Keep "checking in" what the "other side" is doing, for it will expand your paradigms of programming. If you are a high level programmer, learn as much as you can about the low level. Too many programmers don't understand why their code runs slow, because they have bogged down the CPU in inefficient algorithms and implementations. i.e. virtual functions inside an inner loop.

    In the workplace, the most important things are:
    - working with other programmers; i.e. respecting the lead's decision, communicating what problems you are having
    - when adding new features to existing code, think & beware aware of all the ramfications
    - learning to read code, and get familar with a cod base. Most your time you will be _maintaining_ code, not adding in a ton of new functionality.
    - spend time with the debugger, learning how to debug
    - learn how to become better at estimating tasks.
    - Whatever tech you learn in school, is mostly obsolete in 10 years. The details are important for your job, but the general practices are important for your career. You need both.
    - Don't forget to have a life, outside from programming.

    Hope that helps

  88. Being able to talk to/analyze the customer especia by MikeRT · · Score: 2, Informative

    A developer that can sit down and talk to a prospective client about their business needs is going to provide a lot more value to their employer in most cases than one who needs someone else to build up the requirements set. I know some very gifted developers who have learned how to really talk to clients, and the pay difference is amazing. We're talking like they're getting paid salaries that'd make you think the dotcom bubble never burst. Why? They're one employee who can do the work of a developer and a business analyst. They can discover the needs, write them up in a way their team can understand, and then work with their team to execute them. Much cheaper than having two employees for the company, who is more than happy to pay bigger bucks to the developer.

  89. Computer Science and Business Student, 3rd year by Anderlan · · Score: 1

    If that is a program and it's only 4 years, it's not surprising they might leave some things out of one side or the other.

    --
    KLAATU, BORADA, NIh*ahem*
  90. Another good one by apankrat · · Score: 1

    Write an arithmetic expression calculator.
    E.g. compute the value of "2*(3+5*7)".

    We used to ask this as an interview question and a disturbing number of
    "senior developers" didn't even know from which end to approach it :-/

    --
    3.243F6A8885A308D313
    1. Re:Another good one by blitzkrieg3 · · Score: 1

      Apparently they never read Stroustrup

    2. Re:Another good one by Mr+Z · · Score: 1

      Wow, that's frightening. We had to write such a thing in our introductory data structures class. (The reason it was in that class was that we used it to make parse trees and to demonstrate how pre-order, in-order and post-order traversals yielded prefix (Polish), infix and postfix (Reverse Polish) forms of expressions.)

      And I wasn't even a CS major. (BSEE)

      --Joe
  91. Database by Nom+du+Keyboard · · Score: 1

    Database skills are as important as programming skills. It's hard to write a program of any complexity that doesn't interface with a database. You should be able to design and administer your own major database project (SQL Server, Oracle, IBM DB2) to be more of a complete solutions person.

    --
    "It's the height of ridiculousness to say for those 9 lines you get hundreds of millions."
  92. I am currently attending a small Canadian University
    Stop right there, I think I've spotted your mistake. Only kidding, eh.
    --
    Only three things are certain; death, taxes, and apocryphal quotations - Ben Franklin.
  93. Tech skills aren't as important as an open mindset by Richard+Steiner · · Score: 1

    Tech skills get you in the door. Good development and communications skills make you a valuable part of the team, and in the long run they'll mean a lot more to your cow orkers than a laundry list of eventually-to-be-obsoleted technical skills.

    --
    Mainframe/UNIX Bit Twiddler and long time Windows/Linux Hobbyist.
    The Theorem Theorem: If If, Then Then.
  94. skillz? by hypergreatthing · · Score: 1

    Bo staff skillz. Elite Hax0r skillz.

  95. There's only one programming language you need ... by mario_grgic · · Score: 1

    Turing machines.

    --
    As the island of our knowledge grows, so does the shore of our ignorance.
  96. What type of work do you want to do? by EmbeddedJanitor · · Score: 1
    Kind of related to the employer thing... If you're doing web processing and GUI stuff then you need a very different set of skills than if you're doing embedded work or kernel work.

    College/ University should hopefully teach you how to learn rather than just give you a finite set of skills. I went to university in the early 80s and pretty much none of the actual skills I learnt there (COBOL, FORTRAN, etc) are of any use to me know.

    --
    Engineering is the art of compromise.
  97. Debate team by 0xABADC0DA · · Score: 1

    Debate anybody you can that is willing and able... I did this in newsgroups, nowadays I guess you have a blog war? I don't know if a similar environment still exists. This was great learning because in order to defend your point you need to do the research to really know what you are talking about. Then just keep taking more outlandish positions that you can still defend and win.

    For example, when you say "smalltalk is slow at everything" to in smalltalk advocacy they are going to come back and say "JIT" and "30-bit integers" and a bunch of other hooey. You are going to need to hammer back about cycles to test flag bits and which optimizations are not available for dynamically typed VMs -- you need to have already prepared for these counters. And you should have some benchmarks already prepared in case they drop something you don't understand so you can drop a "but in practice" bomb while you work out an angle on it.

    Or when you can defend a non-memory protected typesafe operating system (ie a java kernel) as a superior solution over the micro- and monolithic kernels of today. That kind of thing takes knowledge of all sorts of things from mmu, cache lines, data copying, gc, etc in order to pull off successfully. Unfortunately places like slashdot are not suitable for technical debates like that.

    This is way more fun and educational than "hey let me learn about X just because it exists" or any class.

    1. Re:Debate team by Anonymous Coward · · Score: 0

      Or people may just consider you an asshole.

    2. Re:Debate team by Creepy+Crawler · · Score: 1

      I would concur.

      I'd rather start helping in a group new to me, whilst learning what I can.

      Cooperation and concerted effort is worth much more than AOLish whining, or the old standard of saying "Apple Computers suck" in alt.os.apple and alt.os.mswindows .

      But I guess some are just prone to immaturity.

      --
  98. Writing by unamiccia · · Score: 1

    The business world is facing an acute and chronic shortage of English programmers. If you hone your English programming skills (the computer science departments at most universities have subdepartments called "English" and "Comparative Literature"), you will never lack for work. English is the one programming language that is not going to go away during your career.

    1. Re:Writing by spuckler · · Score: 2, Insightful

      Absolutely. I interview/hire a lot of software developers, and if you show up with a poorly-written resume, you're toast. If you can't be careful with the most important language in your arsenal (the one you use to communicate with other humans), how can I expect you to be careful with programming? other advice: whatever you do, do it well...even if it's something you're not interested in. The worst thing is to give someone some grunt work, have them to a lousy job, and then have them ask for more interesting work. Kiss of death. Don't sweat about the particular languages you're studying. Many of the best developers I've worked with didn't even have degrees in computer science or software engineering. I majored in Russian, and I've done ok... Do study something besides computers. I work in finance, and if a person comes in with programming experience AND an understanding of finance, they immediately go to the head of the class. It sets that person apart from the pack. Make yourself unique, and chances are your job won't get outsourced.

    2. Re:Writing by SoulRider · · Score: 2, Insightful

      absolutely right. Communication skills are the crux of any job. Take more than one speech class and writing class. Excellent communication skills can land you a job even if you dont have a lot of experience. When I was in school I took a business oriented writing class, that one class alone has really helped me to communicate with the business dweebs in my life over the years. Think about it, sure your boss and fellow workers will most likely be techies, but everyone else in the business is probably not a techie. It is only to your advantage to learn to communicate technical issues with non-technical people. In fact I have seen people with less than stellar technical skills who are absolutely loved within a corporation just because they are able to explain what is going on in non-technical terms, of course these people usually become managers/executives. If you have excellent tech skills and excellent communication skills you will go very far in this industry.

    3. Re:Writing by stewbacca · · Score: 1

      Often the biggest skill lacking in technical people is they cannot write very well.
      No don't tell them that! I'll be out of a job (tech writer).
    4. Re:Writing by lelitsch · · Score: 1

      Ditto on the writing. I've probably interviewed about 80 programmers over the last year and a half and it's been striking how many of them can neither write well, nor explain even simple concepts verbally without getting hopelessly lost. We do have three fairly small programming teams with 10-20 people each, so being able to talk things over with colleagues; or explain things to managers or QA is an absolutely essential skill. Before someone blames this on non-native speakers, I've seen good verbal skills and bad verbal skills from Americans, Indians, Chinese, Filipino, you name it. It's really less of a matter of fluency than a matter of having a way of organizing thoughts.

      Another thing that I like to see in applicants is a general grasp of concepts or computing in general. This doesn't necessarily mean that they need to know the in and outs of TCP/IP or IPv6, but it would be useful if they could at least describe how a network works and have some idea what a router does. The same goes for basic things like "How does a web server work?" or "How does a document get printed?". It's mind boggling that many Java/JSP applicants with CS degrees are reduced to stuttering when asked to explain the difference between GET and POST.

      Obviously, programming skills are very useful, but I rather have a OK general purpose programmer who knows a bit about the bigger picture, than a STL genius who can't look past his (obsessively prematurely optimized) lines of code.

  99. Corporate Job by PPH · · Score: 1

    Be able to hang from the ceiling by your lips.

    --
    Have gnu, will travel.
  100. hate to say it but... by katorga · · Score: 1

    I think coders are the next textile workers. The entire US market will get decimated by the global economy except for very closed, security obsessed markets.

  101. Learn to Learn by Doc+Ruby · · Score: 1

    You should learn the lowest level possible programming of the most general-purpose computers. That means C and maybe ASM.

    Because for one, you need to start your career simply understanding how the computers work that you'll program for the rest of your career. They all basically work about the same, though there are important variants in parallel computing and stream processing, vs iterated procedures against a stack - but those aren't nearly as likely to be a target for your work (for the next 5-10 years, anyway).

    But the most important reason is that you have to learn how to learn. Each programming language is a skill that you should be able to pick up in a week, because you will have to. But they all boil down to instructing the computer what to do, eventually in its own terms. Which is ASM. C is a reasonable substitute, because, though abstracted enough from the CPU to be (largely) portable, it's really mainly a really good macro assembler. And most other languages are mostly based on it and its descendants, as are practically all OS'es.

    Picking which language to use is dependent on what you want it to do. If you want your language choice to teach you how to program computers, then C and ASM are the natural choice.

    --

    --
    make install -not war

  102. Paradigms by MechaBlue · · Score: 1

    Specific tools come and go but paradigms stick around awhile. C, C++, assembly, C#, Java, Python, etc. are all imperative programming languages and the concepts in one should be mostly applicable to another. Try to grok a predicate logic language (e.g., Prolog) and a functional language (e.g., Haskell, Lisp, Erlang, etc.). Doing so will let you see programming in an entirely new light.

    Spending time with different languages and toolkits is a good thing. However, not all languages and toolkits are worth learning. Rather that trying to learn every toolkit and language, study them to see what makes them unique. Tcl is a great example; it's not in demand but it does things much differently and for a good reason. Ruby is a good language to look at (closures, etc.) and Ruby on Rails is a good framework to look at (convention vs configuration).

    Also, try to nail some of the easier technologies. XML is in demand and it's very easy to learn and the related XSL, XSchema, and XQuery languages are easy enough to get familiar with.

    If you are more interested in theoretical, talk to your professors and get them to recommend subjects and texts for further study. Parallel programming is an area that will be especially in demand.

  103. Figure out what you want to do, then do it. by kwerle · · Score: 1

    Seriously. You're a student, now. You're studying programming. That tells us a bunch of nothing.

    What do you WANT to do?

    If you want to teach English, you should consider changing majors.

    If you want to design circuit boards, you should take some EE classes.

    If you want to write high level apps and programs, you're probably doing fine.

    You have taken a compiler course, and a circuit design course, right? I think there are some useful ideas in those.

    What the hell do they teach, these days, anyway?

    But more importantly for you: why the hell are you studying programming?

  104. Base processes by blueg3 · · Score: 1

    A lot of the previously-posted non-technical recommendations are really good.

    For technical recommendations, I personally think that the most important thing to be a good programmer is to understand the base functioning from top to bottom. That is, you want to understand true computer science -- the mathematical underpinnings, how programs are structured overall, how structured design is compiled into machine instructions, and how those instructions interoperate with the hardware and system software. Two of those -- namely, how the hardware and low-level operating system does things and what the mathematics is -- have served me particularly well.

  105. Level by level by sam_handelman · · Score: 1

    At first level, you should absolutely have ranks in Bluff, Forgery, Gather Information and Craft (Bong).

      Skill points permitting, Balance, Diplomacy, Decipher Script, Sense Motive and Intimidate are useful, but not required.

      As you rise in level:
    * You can never have too many ranks in Bluff or Craft (Bong), put a point in each at every level.
    * By the time you graduate, you should have at least 4 ranks in Spot and Listen. Nothing will actually happen until near the end of Sophomore year, so there is no rush.
    * As your living quarters grow increasingly slovenly during your time as a student, more ranks in Search will be required.
    * Avoid Knowledge skills - they are useless. Likewise Concentration.
    * Disable Device and Open Locks are both useful even with a small number of ranks.
    * Use Rope sounds good, but it turns out that you actually won't get a chance to take advantage of it unless you have many ranks in Diplomacy.
    * If you take any ranks in Tumble or Move Silently, you will spend the rest of your life as a douchebag.
    * If you've read too many novels you may think that Climbing will enable you to go around on the tops of the buildings. It will get you arrested.

      Hope that helps.

    --
    The good and new comes from no quarter where it is looked for, and is always something different from what is expected.
  106. My two cents by archammer2 · · Score: 1

    As many have said before me, nothing beats real-world experience. Everyone will want a different language, and you can't learn them all by heart. Know a few of the big name languages really well and have a good grasp on where to go when you want to learn another language. Plus, try out a few languages that are vastly different from each other. Knowing Java can help you get a grasp of C/C++ early on, but would help you nil with something like LISP, ProLog, PostScript or assembly.

    Personally, my first language was C++. Every language I've learned since then, I've asked myself "Okay, how is this like C++ and how is it different?" After graduating, I've had to use C++, Java (heavily), Python, and some strange variation of VB6.

    Off-topic: Personally, I don't see how Java is "damaging" to students. True, you don't need a GUI on every program, but I wish I'd had a decent class on how to make a GUI in Java when I was an undergrad. Though, I can't argue the issue of code overhead and hitting the system harder than necessary.

  107. I just had the greatest hit by Anonymous Coward · · Score: 0

    It was one long turd that just wouldn't stop coming out. I feel so light, fresh and clean now! I should try to accumulate and do it again tomorrow :)

  108. Skill Set by bouaketh · · Score: 1

    Developing your skills as a person is probably the first thing you should work on. Take a management class or participate in a student club or organization, take some time to figure out what your strengths/weaknesses are. Humility: Are you willing to ask questions, Are you willing to admit you don't know the answer, Are you willing to find the answer? Teamwork: Are you willing to agree, disagree, compromise, adapt, and move forward working with people of different backgrounds and personalities? Balance: Are you able to separate work from play, Do you have something else you love besides programming i.e. gardening, outdoors, arts and crafts, recreation, family life? Compass: Can you treat people with respect, Are you a good listener, Would you be willing to do what is right instead of what is easy? Once you have a handle on who you are you can train the programmer. Real experience helps. Don't be afraid to take internships that are unrelated to programming. These may be the people that you will code for. Understanding the user will make you a better programmer. Find something you love doing and find an angle that programming can fix/improve. As an earlier post said nothing beats real world experience. Get the tools and learn how to use them. Use the summer or break to intern or volunteer using your programming skills to stay fresh. Good Luck!

  109. Paid to learn by shirpa_kewl · · Score: 1

    You never know what your job will be from year to year, so there is only so much preparation you can do.

    The cool thing is that as a software developer, you get paid for what you're capable of learning on the job, not just for what you already know. Most big companies will pay for any training you need along the way to do your job.

  110. Personal Finances and Confidence with humility! by studly · · Score: 2, Insightful
    I think GenKreton got it 99% right. Start with Personal Finances. Add humility to the confidence and it's hard to go wrong.

    He's right that most graduating students don't know how to budget, plan, save for their toys or balance their checkbook. Learn these BEFORE graduating and practice every month. Keep in mind that budgeting doesn't mean denying yourself. It means making sure that you CAN have the toys/fun you want while staying warm, dry and well fed.

    Second is confidence. Be confident that you know what you know. But also keep the willingness to acknowledge what you don't know and then learn it. The phrase "I don't know" is rarely spoken by computer professionals. The phrase "show me how" is even rarer. Keep both handy and you'll be regarded as someone who knows a lot but doesn't seem arrogant. Try not to feel threatened by someone who seems to know more. If they do know more, learn from them. If they really don't know more, others will figure it out around the same time you do.

    The only other thing I can suggest in general is to take ownership of your own career. Don't expect your employer to train you or keep your skills fresh and new. That's your job. Also, keep asking yourself "what are you doing this year that warrants a raise from your employer?". If you don't want to pay your cable company more this year for the same service you got last year, your employer feels the same about their developers and administrators. Upgrade the services you provide, then ask for a raise knowing you deserve it.

    And lastly, HAVE SOME FUN! LIFE IS TOO SHORT NOT TO.

    Hope this helps...

    --
    Ididn'tdoitnobodysawmedoityoucan'tproveanything!
  111. Culture and Hindi or Chinese by Anonymous Coward · · Score: 0

    Want to be marketable? Learn Hindi or Chinese and study their respective cultures. 'cause that's where the entry- and mid-level jobs continue to go. Also Poland, Romania, Ukraine, and Russia.

  112. I think your school has it right by Pork-Chopper · · Score: 1

    The low level programming, especially ASM is the foundation of everything you'll do. The new languages and models are just abstractions for that. If you understand how a computer works, you should be able to pick the appropriate tools at the appropriate time. Also, make sure you communicate effectively and know as much math as possible.

  113. My opinion by eison · · Score: 1

    Most high-paying corporate jobs are C# or Java, essentially coding database backed websites but often using lots of buzzwords and acronyms and toolkits and whatnot. The skills that pay the bills are basically: Knowing how to use SQL & databases, and developing in an object oriented language with a large support API. Most corporate work at the end of the day is pulling info from a database and slapping it onto a web page. Learning how to quickly teach yourself how to work with somebody else's code based on nothing more than some simple API documentation (see http://java.sun.com/j2se/1.5.0/docs/api/ and/or Google and approach it from a goal-oriented perspective: How do I sort a list of names? How do I encrypt a credit card number using a standard encryption library?), and understanding basic concepts behind the internet, will pay the bills. Also, read a book or two on 'design patterns' so that it's easier to talk to other programmers and so that you won't constantly be thinking you just invented the wheel.

    They'll say all sorts of other buzzwords: in Java, it's Hibernate and EJB and XML and Tapestry or Spring... they're all fancy apis that make your life easier in some way and harder in others and the only school related skill that is relevant to them is being able to learn from a book and/or the published APIs. You expressly do _not_ want your school to give you a degree in one of these things, because they come and go every few years as the Next Big Thing reinvents Smalltalk, again. Instead, learn how to learn them.

    Beyond that, learn what interests you. There is all sorts of fascinating fun and specialized stuff to be learned. I know a guy who animates explosions. I know a guy who writes genetic algorithms for game playing. I know a guy who works on an MMO. None of them need a whit of database or web page experience or knowledge for these things, but it's sometimes hard to pay the bills fulltime with the fun stuff, so the database backed websites is a useful fallback. Hopefully you can get into something that fascinates you, but if not, you can always bank a good salary with a day job in the corporate world and tinker on your nights or weekends until you can afford to retire and do whatever fascinates you fulltime.

    --
    is competition good, or is duplication of effort bad?
  114. Writing by MonkeyBoyo · · Score: 5, Insightful

    Often the biggest skill lacking in technical people is they cannot write very well.

    I've seen some really bad reports written by fairly good technical people.

    Spending several semesters taking writing courses is a much better investment than learning a new language (which you should be able to do on your own and which will happen during your career).

    Being able to explain things clearly on paper will put you in an important position in any development group and will lead to the most career growth.

  115. Law school? by Anonymous Coward · · Score: 0

    I'd probably recommend undergrads prepare for law school, so they have a chance at a decent income for raising a family. Any science discipline such as CS, engineering, etc is pretty much a second class subject these days compared to business and law in the US.

    You never see an attorney's job get outsourced, while any tech field is at risk of disappearing overnight.

    You also never see someone with an active bar association membership (i.e. not disbarred) unemployed either, while the CS person fresh out of college is filling your coffee cup at Denney's.

  116. If he's going into the real world after this... by kjkeefe · · Score: 1

    He'd better spend some time on specific training. Unless he plans to do graduate work, college is NOT meant for rounding out his knowledge. High school is getting a "well-rounded" education, not college. Perhaps you meant that he should study a diverse set of topics within his major, then I would agree with you. However, if his goal truly is to be as prepared as possible for a job once he leaves school, he should start by looking at the work involved and tracing back the skills from there.

    --
    1, 2, 3, 4, 5... That's the combination on my luggage!
  117. My recommendation by Z00L00K · · Score: 1
    I would surely recommend you to indulge yourself in C programming on embedded devices. It is a completely different thing compared to C++ or Java. It really requires you to think over your design several times, first to get it to do what you want - then you figure out that your program is too large and then you lack some functionality so you have to start over again - and finally ending up with assembly...

    The other end of the spectrum is also important and that is system architect problem solving. This means that you have to see a system on a larger scope and not only the lines of code that are written. Many modern systems has to integrate with a lot of different systems using a variety of protocols. The whole range from custom-designed file-based exchange of data using FTP to CORBA with IDL and Web Services with WSDL. And don't forget XSD/DTD/XML.

    The more you learn the more you know that you don't know.

    --
    If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
  118. Do Not Learn Assembly by nonsequitor · · Score: 1

    While assembly language is a valuable skill you core ciricullum should have included a computer architecture class which covers a platform agnostic version of assembly code. If you did well in that class, stop right there. For the last 2 years I have been working heavily with microcontrollers and each has their own flavor of assembly language based on the architecture. If you did well in your class which taught assembly language, wait until you need it to do something, its absolutely pointless to learn a specific architecture otherwise. If your grasp of computer architecture and language theory is strong, it should only take a day or two to pick up a new assembly variant. Don't get me wrong, it is a useful skill. Some platforms have feature rich instruction sets, while others are so utilitarian and sparse it gives them a simple elegance. The most important thing to learn in school is How To Learn. The rest you can pick up as you go.

  119. D&D, WoW, Beer Bongs, 1000+ facebook friends by infonography · · Score: 1

    Remember the most useless things will go well on your resume. Remember to tell you prospective employers that you will need at least 20/hr a week paid time to keep up your social networking obligations.

    Also it's a good idea to bring a domestic beer to the interview. Micro brew or foreign beers denote a snooty attitude and do nothing to help fight the terrorists. Old Glory on your cap is an excellent way to show pride.

    Also remember bright green Bow Ties go really well with Lederhosen.

    --
    Sorry about the writing. Robot fingers, you know? Cliff Steele in DOOM PATROL #23
  120. Re:Being able to talk to/analyze the customer espe by Anonymous Coward · · Score: 0

    "... They're one employee who can do the work of a developer and a business analyst ... Much cheaper than having two employees for the company ..."

    Is the PM responsible for this guy actually booking him into the plan at 80 hours per week, or just the regular 40 of a single person?

  121. assembly by dshk · · Score: 1

    You don't have to be good in assembly but I find it strange that a university doesn't demand some knowledge about it, e.g. a 1000 instructions small project written in assembly. You should even go deeper at the same time and learn simple things about digital circuits. Then you will have some feelings about what actually happens when you write something like int a = 1; I can imagine that somebody can be very good coder without this - but I have't seen such a case :) And it really doesn't require significant effort compared to the timescale of graduating in a univerity.

  122. Good Programmer != More Employability by heckler95 · · Score: 1

    With the exception of writing low-level embedded software for very specific hardware, most of the programming opportunities out there won't care about low-level hardware/software know-how. A lot of today's jobs involve solving problems with IT/IS solutions and since most companies consider IT spending an expense or liability that should be minimized (rather than an opportunity to spend $1 to make $3) you aren't going to want to be worrying about memory allocation or pointers. Built-in garbage collectors and other features in todays higher-level languages will save you a ton of development time (at the expense of some execution time/efficiency, of course). Spending days or weeks optimizing a program to use 20% less memory or to shave 2 seconds off a 2 minute execution time just isn't worth it to the business in most cases.

    Even companies that SELL software are getting more lax on this - desktop hardware is way more powerful relative to most of the software out there now than it was even 5 years ago, there's plenty of room to be sloppy if it means getting the project to market weeks or months sooner.

  123. Re:There's only one programming language you need by sphealey · · Score: 1

    > There's only one programming language you
    > need: Turing Machines

    Wash U graduate by any chance?

    sPh

  124. Co-op Term by Foddz · · Score: 1

    If your school offers a co-op program, and its not too late in your education path, take a serious look at doing a co-op program. Nothing develops relevant skills for future employment like actually being employed in a relevant position. Also, speaking from the perspective of a recent university grad myself, I can truthfully say those in my graduating class with co-op employment on their resume were hired quite quickly (usually within 3 months) into a relevant position, whereas myself and a number of others had to jobhunt for the better part of 6 months to a year.

  125. ASM & latin by leomekenkamp · · Score: 1

    It may sound strange, but I think the most positive influence I had from any classes was learning Latin; not that I can now translate anything more basic than "Marcus et Cornelia in horto ambulant.", but because that thought my neural net to effectively split up one big problem into an number of smaller problems Also learning 8086 assembly language and 'manually' calling msdos calls (int 21h) and bios calls (int 10h) thought me how "to think" like a computer.

    --
    Wenn ist das Nunstueck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput.
  126. Pick a goal, for starters... by pla · · Score: 1

    From what I have been told, there are more jobs for Java and Data Warehouse development teams compared to lower-level programmers.

    "More jobs" does not mean "better" or "higher paid". It all depends on what you want.



    For the next few years at least, .NET and SQL will get you a job. But, do you want to write nothing but crappy VB.NET (or even C#, a small step up) apps with toy forms for data entry and retrieval?

    You could specialize off of that, data analysis has the potential for some fun (not talking about financial accounting here - I mean coding nonlinear trending/forecasting models, which can get into some of the coolest soft-AI techniques out there). You could focus on graphics, work on new ways to present data to users. If you really want to do low-level code, I can tell you firsthand that firmware rocks, will rake in the dough, but it can burn you out quickly (so have a backup plan).

    Mostly, realize that you need to do something fundamentally not fun, or no employer would pay you to do it. So, the real work comes from finding a way to make it fun to you. And only you know what that means.

  127. Six points to consider by xquark · · Score: 1

    I can't speak generally for the CS industry but, if say you have
    the following skills:

    1. Excellent math background (note not CS but rather math)
    2. Able to read a practical CS paper and implement in favorite language without help
    3. Understand processor architectures generically (meaning not only x86 but PPC, ARM,SPARC etc)
    4. Know C++ and a dynamic language like Python very well
    5. Have excellent written and verbal capabilities
    6. Are generally curious about all things not just tech.

    Then finding a good/rewarding job will not be hard, that said not
    having the above doesn't mean you can't find a good/rewarding job,
    it just means you'll just have to search a bit harder/longer.

    --
    Arash Partow's Philosophy: Be a person who knows what they don't know, and not a person who doesn't know.
  128. Bug/Defect Handling Skills by doug · · Score: 1

    Handling oopses was the biggest skill I had learn when I got out of school. That is both figuring out what went wrong (debugging), and how to gracefully handle errors at run time in systems that can't go down. In fact, I'd like to see some sort of Forensics class be core curriculum for all Engineers because designing a new system is easier than cleaning up a broken one.

    - doug

    1. Re:Bug/Defect Handling Skills by X-Phile · · Score: 1

      Ok, it must be the end of the day, cause I read the first two words as Hiding corpses . Yeah. There's a skill you should have right outa University. Pay is good, perks a killer but don't piss off the boss.

      --
      "Well you're not Fiona Apple, and if you're not Fionna Apple, I don't give a rat's ass."
  129. Don't Sweat It by Perl-Pusher · · Score: 1

    The first 1 or 2 jobs out the door are only going to be a stepping stone. My first one out of college was with CSC they had me running unix commands from a checklist and called the position 'programmer/analyst'. I wrote a gui in TCL/TK that made my job obsolete and I was moved to doing java front ends to an informix database. Within 6 months I was the shift supervisor over 3 programmers. I then left CSC after one year and got a job as a Software Engineer for atmospheric remote sensing satellites. Been there 10 years. In that time I've done systems admin (Linux), Web development (php,perl, python,java & jscript) in addition to projects in IDL, fortran & C/C++. People skills along with ability and the willingness to do learn are what is most important. When I need information , I first use google then I get my employer to buy me a book. If you have solid programing skills, a solid foundation in writing secure apps and a good understanding of algorithms, it won't matter what language is used.

  130. SQL, SQL, and more SQL by MBCook · · Score: 1

    There are some basic things I can tell you. C/C++/ASM are good things to know. If you can understand a pointer, a pointer to a pointer, a list of pointers, references, pointers to references, references to pointers, and such then you will be far above many of your classmates. Even if you end up using Java (like I have) it's still good to know.

    That said, I'd say learn SQL. I learned it in school, it was part of my curriculum. I was glad I learned it. It's an interesting way to look at things (since it works quite differently from something like C++). I didn't expect to use it too much. But I was good at it.

    So I got my job which defiantly included needing to know SQL. And man I use SQL every day. I never thought I'd use it so much, even in a job that works with web applications that connect to databases. I write reports, queries, insert statements, all sorts of stuff. I end up doing stuff some times (like gathering a little bit of data someone gave me in an Excel spreadsheet) and I can't think of anything but "this would be so much easier in SQL". It's amazingly powerful, and it's cross-platform. If you learn it, it will work on Macs, PCs, Oracle, MySQL, Postgres, MSSQL, and quite a few others. There are some tiny differences (like some function names) but that's pretty easy. It's amazingly powerful.

    SQL is a huge skill. If you can prove competency in it, there are a TON of programming jobs out there that will want you. Building e-commerce, inventory management, data analysis, tons. Everybody and their brother has some project that has (or should have) a database back end.

    Learn SQL now. In all I read about programming when I was in college or high school, before I had a job, I learned quite a bit. I saw opinions that said I should learn assembly, Java, C++, Lisp, and others. But I don't really remember hearing so much about SQL being important. But it's a fantastic tool and a skill that should come in very handy.

    --
    Comment forecast: Bits of genius surrounded by a sea of mediocrity.
  131. Avoid Java by DrJohno · · Score: 1

    I'm currently trying to hire LAMP developers, and am seeing a glut of Java programmers in the applicant pool. Speaking as one employer, I would like to see more people strong in PHP, Perl, C, and C++. These languages have a lot of shared syntax and they interoperate well. You can pick the best tool for the job (C or C++ for execution speed, Perl or PHP for development speed). Java is sort of a general-purpose language, but will never be as fast as compiled languages, or as easy to write as scripting languages.

    Your choice of computer languages will be like choosing a religion: other people will judge you based on your choice, and it can determine a lot of other decisions in your work life, so choose wisely.

  132. Find the hard courses by Tridus · · Score: 1

    Seems like an obvious piece of advice, but try to find the courses other people are avoiding. There's always one or two out there, things that scare off most of the other students. When I was in Unviersity (last year), one of the courses like that was the fourth year OS course. It was optional and scary by many peoples standards (since the goal was to learn how to write a kernel, not a GUI Java app), but was also one of the best courses around.

    If you have free time, you might also want to consider working on an open source project. There's lots of them out there that would welcome more help and aren't super complicated. You can learn a lot from working on one (both in coding and in dealing with other developers), and it looks really good on a resume.

    --
    -- "So they told me that using the download page to download something was not something they anticipated." - Bill Gates
  133. Target skills come and go by Agilis · · Score: 2, Insightful

    Learning skills that apply all over, and get expressed as 'targetted' skills, is worth much more over time. The ability to read, write, speak, manage time, and finally, learn and adapt...

  134. Automation Development & CS grads by rabenja · · Score: 1

    I am an employer, a CIO who has to find skilled developers to work for me. My opinion is that there are widely different sectors in the software development world. A developer who is perfect for a medical device manufacturer might not be of any use to me. I need business-minded developers with experience in the basic skill of making a problem statement then developing some automation that will help solve the problem. I have seen enough clever coders to know that it does not matter how good someone is at C, C++, Java, C#, Ruby or any other flavor if they do not have common sense and ability to solve the bigger issues. The risk of failing in any development project has much more to do with effective communication that skill in coding. I disagree that increasing success for US grads has much to do with the number of math courses involved or the sheer skill in any programming language. I do think that it is important to know a language/tool well enough to be able to apply it to actually solving a problem. I think that there should be a required apprenticeship program for developers where CS undergrads work for a minimum of 6 months with a mentor in their chosen field. Someone's imagination of what it means to develop successful automation might be way off the mark.

  135. You should be good by tritonman · · Score: 4, Informative

    The important thing is that you have learned programming initially or at the very least, been taught the fundamentals of some language like C or C++ which will let you understand how things like memory allocation works and how pointers work. If you understand those concepts you will be good. You don't need to be proficient in ASM, but understanding the concepts is important, you should learn that type of thing in an Operating Systems structure class though. Once you have learned the fundamentals of C or C++, I would say to do everything else in an easier language like java or C#, because you shouldn't spend your time focusing on your memory allocation and such when you are just trying to understand the structure of a redblack tree.

    1. Re:You should be good by lgw · · Score: 5, Interesting

      If you want to do "infrastructure" programming, such as OS development, language development, clustering, virtualization, storage, etc, it's vital that you learn C and C++, and have a firm understaning of pointers and recursion, data strustures and algorithms. In my experience most jobs in this broad area are still done in-house. Your job will be particularly uninteresting to a non-geek, but pay well. If your problem domain is the computer itself, you had better understand every layer you work with down to assembly.

      If you want to do "business" programming: inventory, payroll, CRM, SCM, vertical apps in a variety of fields, than by all means learn Java. But it's your business skills that will make you stand out, and as these jobs are largely outsourced, you very much need the people skills to work as a consultant, or manage consultants. If your problem domain is business operations, you had better understand how a business operates.

      If you want to do "embedded" or "realtime" programming, again the low-level details are important, but I caution you that these jobs pay significantly less than infrastructure jobs (despite often being harder). Also, non-realtime embedded programming is shrinking as a field, as the cost of hardware needed to run a full Linux or BSD OS install goes down every year. The world will always need realtime programmers, however.

      If you want to do "games" programming, I have no idea what skills you'll need, but you'll be paid crap and worked until you burn out and quit the industry, so do you *really* want to write games?

      --
      Socialism: a lie told by totalitarians and believed by fools.
    2. Re:You should be good by LithiumX · · Score: 5, Informative

      I'll wholeheartedly second everything Tritonman says here. You don't have to become a low-level master to be a good programmer, but a basic working knowledge of C and C++ is the key to understanding the majority of languages you'll face later (including ones that do not yet exist). Assembly teaches you why software is laid out the way it is, as that's what all compilers must eventually boil down to in one way or another. You don't need to be able to compose a serious tool in Assembly - you don't even have to know how to write anything useful in it. However, knowing the basics will give you a more solid framework for all later programming skills you tackle.

      However, here is another piece of advice. You'll hear many advising you to maintain a wide array of general skills, and they're absolutely right. On the other hand, I've been a programmer for about a decade, as well as an administrator (win and unix), graphic artist, management, and a wide array of other job descriptions - each of which I am well above average in, but none of which I specialize in (though my resume paints me as primarily a programmer). I'm well versed in more languages than anyone I know (including assembly language for four different chipsets), and I'm at least somewhat experienced in an even greater number. I'm able to easily install, configure, troubleshoot, and often hack many different operating systems. I'm also known at my job for being able to pick up almost any skill quickly, as-needed (such as studying for a CCNA, my most recent hobby) - I'm the resident fix-it-all here, especially when the task requires knowledge that none of us have at the time, or would normally require experts from a number of different areas. I have a range of experience that, in my line of work, is more comparable to the 50-something old-school techies that are inevitably found in this industry, than it is to my peers (who are in their late 20's and early 30's, have some range, but are usually unfamiliar with subjects outside their specific skill set).

      I'm not bragging though, and here's why.

      For all my wide range of skills, I've found I have been valued less in the corporate world than those more limited specialists. True, I can complete projects that normally take a whole team to do - and often faster. True, I've shown time and time again that I can find solutions and create software that even our better-paid experts haven't been able to seriously attempt. That doesn't matter, though, because as an accomplished generalist at a (large and growing company) I've found myself sidelined over and over, forced into a job of very limited scope that is filled with specialists (in ASP.Net in this case) who I now have to compete with (in the one area I was always weakest at - web design). I've had the empty pleasure of seeing my old tasks pulled away, one by one, so they can be moved into specialist departments (with the end result apparently being the same quality of work, but requiring a much larger work force). This wasn't due to overload (I can automate almost anyone out of a job) or poor work on my part, but simply a matter of corporate architecture. All of these skills I have, all of these years of experience, are now going utterly to waste, not because I have an inflated ego and believe myself to good for my present task, but because all I can do now is advise others on how to do the jobs I used to do, while I perform a now-monotonous role where quantity of output is the only way you're judged. That sort of thing, though, doesn't attract much attention or pay. If only I'd spent more time on one of those many subjects, mastering it more completely, because total mastery over one subject is eventually more useful than significant proficiency in many subjects.

      The long and short of it is... expand your horizons. Learn new skills, and maintain the habit of studying, even long after you're out of school. Grow and adapt, and become at least marginally familiar with as many areas of technology as possible, because th

      --
      Do not confuse "Freedom of Choice" with "Free Will".
    3. Re:You should be good by AuMatar · · Score: 1

      What crack are you on with embedded? They pay significantly more, not less, because of the specialized skill set and limited number of people with that skill set. Its not uncommon to be paid 20-30% more than the aveage business programmer with equa experience.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    4. Re:You should be good by kalidasa · · Score: 3, Insightful

      Very well said. For a bit more academic piece of advice: get all the math you can handle.

    5. Re:You should be good by Anonymous Coward · · Score: 0

      Dude, you rock! But at least you're modest.

    6. Re:You should be good by mustafap · · Score: 1

      >Its not uncommon to be paid 20-30% more than the aveage business programmer with equa experience.

      Not in the south of England.

      I'm an embedded engineer, and love it. My wife would prefer me to not be though, for the money.

      --
      Open Source Drum Kit, LPLC deve board - mjhdesigns.com
    7. Re:You should be good by Kiaser+Zohsay · · Score: 2, Insightful

      a basic working knowledge of C and C++ is the key to understanding the majority of languages you'll face later (including ones that do not yet exist). The best skill you can have in any tech industry is the ability to acquire new skills.
      --
      I am not your blowing wind, I am the lightning.
    8. Re:You should be good by Maxo-Texas · · Score: 1

      At my company they arbitrarily put 70% of the programmers in "ticket support" and they can only program on projects under 20 hours (including testing).

      They put another 30% in "enhancements" and they get all the training and hot projects that are not given to contractors.

      Management insists the structure is good.

      The turnover rate in both groups is amazingly high.
      The hot "enhancement" folks, get offered 20% more by the oil industry.
      The "maintenance" folks realize they will never really get to code again and they leave for jobs that pay the same or less but let them program.

      --
      She was like chocolate when she drank... semi-sweet at first and then increasingly bitter.
    9. Re:You should be good by TheModelEskimo · · Score: 1

      Your post makes you sound like you would be a very good freelancer or consultant. I am a jack-of-all-trades freelancer, and I get scads of work of different sorts, and I love it.

    10. Re:You should be good by the1rob · · Score: 1

      For the love of the Flying Spaghetti Monster, STOP.

      STOP learning new tech skills. You obviously have enough practical experience.

      Go get your PMP cert and specifically go into Project (and Program) Management.

      I was in the same boat as you; my skillbase is wide and moderately deep. I went into Project Management, got my cert, and now I manage App Development projects, IT infrastructure, application migrations, and everything in between. I use every skill I've learned over the last 12 years.

      My paycheck is *quite* nice.

    11. Re:You should be good by Crackerman111 · · Score: 2, Insightful

      It sounds to me like you've worked at places that aren't compatible with your talents. Am I wrong in assuming that you've worked predominantly in very large companies? A Jack-Of-All-Trades isn't as valuable in a larger organization as there tends to be a correlation between headcount and specialization. You should probably look for work in smaller organizations or startups, where being a Jack-Of-All-Trades is extremely useful. In these type of environments, the organization usually can't afford a body for every single role, so being competent in a lot of different areas is key. Although job security may not be as great in a smaller organization, if you work for a startup, you may be able to get stock options or equity of some kind. It depends what you're looking for. One other poster mentioned consulting, which could also be an attractive alternative.

    12. Re:You should be good by eeek77 · · Score: 2, Funny

      My paycheck appears quite nice too, as it is passed from my employer on the my wife and three kids.

    13. Re:You should be good by lgw · · Score: 1

      I'm comparing embedded and infrastructure job payscales at a senior level. The business programmers I know moved out of geek jobs as their careers progressed (and are making decidedly more than any kind of programmer), so I don't know what business programmer payscales look like after 10+ years experience (is there any company with a technical career ladder for business programming in the first place?).

      In Texas and in Florida, when I did my last job search in late 2006: given two job postings with basically the same skill set required (as the infrastructure jobs I was looking for), and same amount of experience desired, the embedded job would pay 25-30% less, very consistantly. The various recruiters I spoke with all confirmed my impression.

      I guess it's just that the sort of companies that want embedded programmers pay on a "real engineer" payscale, not on a software payscale. Just because a job requires a specialized skill set doesn't mean it pays more.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    14. Re:You should be good by happyemoticon · · Score: 1

      No matter how specialized you are, some of your superiors just won't understand your value as an employee.

      For example, the guy who got me started working with computers, a QA engineer, effectively replaced 3/4 employees in his department with scripts. He was doing fine for a few months - his supervisor understood that he'd saved the company a few hundred thousand dollars per year, at least. Then, a new supervisor gets installed, and after reviewing his underlings, he has the audacity to say, thought my colleague was making too much money. The supervisor didn't have even a basic understanding of unit testing, and thus could not square the corporate-jargon expectations of the position from the company literature with reality. Thankfully, everything got straightened out and he's still got a job:)

      This just goes to show you: it's not about bad managers versus good managers, it's about some people attempting to manage in an area they know little or nothing about, meaning the only tools they have to understand their underlings are gimmicks, buzzwords, half-truths and outright delusions. When you're something they can't define using this bizarre, aphasic lexicon, of course they're going to give you the shaft. No doubt you've got it worse because no corporate bureaucrat is going to understand the true value of a generalist, but it's an endemic problem.

    15. Re:You should be good by squallbsr · · Score: 2, Insightful

      You sound like you are in the wrong type of company. I believe that most every startup company would be looking for somebody who can wear many different hats and be proficient at each hat. You should consider sitting down and thinking through problems that you could solve that will make you money and start pursuing that after finding a buddy or two to go down that route with you...

      One of the most important things about startup employees is the ability to do many different things well, not to be a specialist.

      --
      Sleep: A completely inadequate substitution for Caffeine.
    16. Re:You should be good by gogodidi · · Score: 1

      I agree. I am a first year student. When I arrived at uni and was handed my schedule, I was shocked to find that there was NO maths in all the four years I would be spending here. I have now changed to a customisable course which allows me to build me own degree. I'm basing it on the embedded computer systems degree, but am swapping out rubbish like Access and am replacing it with better classes like a second year maths class. Its great.

      --
      ugh...
    17. Re:You should be good by philipgar · · Score: 5, Interesting

      Remember one thing though, there are a fairly limited number of "infrastructure programmer" positions around, whereas embedded systems programming is HUGE. The future of computing (and much of its past) is not in the box that sits on your desk, or the laptop that you carry. The future is embedded devices. Cellphones, cars, ipods, HDTVs, game consoles, media players, planes, controls, smart appliances, everything. The majority of computers are embedded, and this trend is only accelerating.

      However many of these devices are starting to resemble more "traditional" computing platforms. They run a full OS, have virtual memory support, FPUs, etc. However one thing they do have in common is that they run on a limited set of hardware, and often have strict memory, performance, and power constraints. The skill set does not really need to include knowing more than basic ASM programming (if you used SPIM in a computer architecture class you should be okay). You need to know the fundamentals of computer architecture, and a class on OS is very important (you must understand some of the different memory models etc).

      But, as a CS student, your job is not to know the details. Your job is not to know the languages and the tools, your job is to learn the algorithms, to learn the thought processes, to learn how to design. What tools you know how to use aren't very relevant, and will change over the next couple years anyhow. Being adaptable, and knowing the fundamentals, and having strong problem solving skills is far more important. The rest will come. Any company that won't hire you because you don't know their specific languages and tools is either not looking for a student out of college, or is looking for an IT monkey to write code for them. If they don't want a CS student, beware, as the job is likely quite boring anyhow.

      Phil

    18. Re:You should be good by Anonymous Coward · · Score: 0

      Get out of big companies, they ruin your soul as you repeatedly have to watch giant teams of slackers or incompetents brought in to do the work that one sharp guy should be able to script.
      Anonymous in case I need a quick easy paycheck from a soul sucking megacorp someday.

    19. Re:You should be good by xarien · · Score: 1

      I'm going to put a real world spin on this. Pursue the path of a generalist (learn as many skills as you can including many outside of your industry and requirements for your position) if you want to go into management (especially general management and higher). Pursue the path of a specialist if you end goal is to be a technical fellow (or system architect etc). The truth of the nature is that you need to know what you are trying to pursue, set your sights and figure out what skill set(s) will get you there. Realistically, you want to think roughly 2-3 promotions further than what you are now and pinpoint what skills are necessary to do that job well and provide value to your employer. Acclimate to the situation and be smart about keeping doors open and you should be fine.

    20. Re:You should be good by Anonymous Coward · · Score: 0

      because while a Jack-Of-All-Trades can find a job when others cannot, a specialist will always be paid more and get the best jobs

      Unfortunately, that's not always true anymore. As a jack-of-all-trades myself, I found it hard when looking for a new job last year, simply because more companies are looking for specialists. It's really sad how HR/Hiring people are just looking for buzzwords and acronyms now... and if your previous job wasn't exactly like the position they're trying to fill, they assume you don't have recent experience.

    21. Re:You should be good by Anonymous Coward · · Score: 0

      There are various articles on the web discussing generalists vs specialists. Generalists have their place. You should steer your career towards more responsibility and architecture, instead of deep specialization.

      I try to get jobs where I have to sit around and come up with new things. Eventually they bore me and I try to offload them to another person or team. Then I get to learn something new.

    22. Re:You should be good by KillerCow · · Score: 1

      For all my wide range of skills, I've found I have been valued less in the corporate world than those more limited specialists. True, I can complete projects that normally take a whole team to do - and often faster. True, I've shown time and time again that I can find solutions and create software that even our better-paid experts haven't been able to seriously attempt. That doesn't matter, though, because as an accomplished generalist at a (large and growing company) I've found myself sidelined over and over, forced into a job of very limited scope that is filled with specialists (in ASP.Net in this case) who I now have to compete with (in the one area I was always weakest at - web design). I've had the empty pleasure of seeing my old tasks pulled away, one by one, so they can be moved into specialist departments (with the end result apparently being the same quality of work, but requiring a much larger work force). This wasn't due to overload (I can automate almost anyone out of a job) or poor work on my part, but simply a matter of corporate architecture. All of these skills I have, all of these years of experience, are now going utterly to waste, not because I have an inflated ego and believe myself to good for my present task, but because all I can do now is advise others on how to do the jobs I used to do, while I perform a now-monotonous role where quantity of output is the only way you're judged. That sort of thing, though, doesn't attract much attention or pay.


      Change jobs. Stop consulting for free.

      A specialist will always be paid more than a generalist because:
      specialists have higher skills (take a generalist and add a specialization)
      specialists have more responsibility
    23. Re:You should be good by JavaRob · · Score: 2, Insightful

      If you want to do "infrastructure" programming, such as OS development, language development, clustering, virtualization, storage, etc, [...]. In my experience most jobs in this broad area are still done in-house. Wait... isn't this exactly the stuff that most companies do *not* do in-house ("Hey, boss -- I'm thinking we should design a new programming language and OS for this next project")? Only companies like Google do any of this kind of stuff in-house.

      But excellent points overall... there are very different niches available, and it's a waste of effort to try to prepare yourself for all of them. Get some exposure to the gamut, then narrow down and get some experience *at depth* if at all possible -- i.e., working on a big project with other people with source control, collaborative design, testing, bug triage and debugging.. all that stuff that you'll never see on 2-week individual projects.

      Don't panic if there's an acronym or two that show up on job listings that you're missing. You will be learning new stuff throughout your career.

      I also want to emphasize that "people" skills are extremely important, no matter your niche. If you're a wreck in basic conversations, practice with your cat, neighbor, anyone. Memorize a list of fallback "small talk" questions you can ask if you're lost, and learn how to listen and ask follow-up questions. You have to get to know people, you have to gain their trust, and you have to learn how to work anyway with people who fail to gain yours. You have to know how to stop your client/boss/coworker when they're explaining something and you lose the thread. You have to know how to ask questions. You have to learn how to offer criticism without offending, and how to just shut up sometimes. You have to know how to tear your own suggestion to shreds and decide on someone else's as the better solution, plus how to null route someone else's suggestion without bruising their ego.

      Sometimes someone else will make a mistake that costs you hours of time (and sometimes you will make that mistake). Someone will send an email out to the entire team that contains an obvious error that makes you look bad (or perhaps you will send this email). There's a serious problem in the code, and you think you know who did it. How you handle this stuff will make a huge difference in your quality of life.
    24. Re:You should be good by Unoti · · Score: 1

      Don't go into management! Once you do, it'll be hard to come back to technical work. And if you do go into management, keep coding in your spare time and stay current.

    25. Re:You should be good by xarien · · Score: 1

      It's laughable to see this type of sentiment along with the opinion that there aren't any technically capable managers out there. It's a career path and there is no wrong choice, but simply a preference. If someone is able, they will do a good job no matter what they are pursuing, it's simply the path that is different. The result will still be added value for his/her employer.

    26. Re:You should be good by Anonymous Coward · · Score: 0

      I'd say second year uni maths is a bare minimum, and I've never attended university. Still, I've attended their libraries, picked up some old SIGGRAPH papers or similar and learn the maths therein. Utilise MIT and similar university sites which have free online course materials if you want knowledge outside courses offered to you. I find engineering reference books often better than pure maths books due to the plethora of real world examples and useful formulae. Best of luck, though with the foresight you have shown you probably don't need any luck.

    27. Re:You should be good by dannys42 · · Score: 2, Interesting

      I'm doing non-realtime embedded work it my current company and my previous one. And I can say that we definitely would like strong C and networking skills, with some hardware familiarity. Some ability to comprehend other discipilines like SQL, PHP, HTML, etc. are also starting to be important in this field as everything's starting to incorporate web pages and web-based configuration.

      But even discounting the higher level languages, we've had a horrible time finding anyone with anywhere near the skills we'd need. And we're in Irvine, CA... theoretically one of the tech centers in SoCal.

      I'd actually think this field would be growing _because_ the harddware costs are getting lower, and it's becoming easier to just put Linux on everything.

    28. Re:You should be good by Anonymous Coward · · Score: 0

      This is getting offtopic, but how do you like Irvine? I've been considering moving/looking for work there doing embedded stuff.

    29. Re:You should be good by Anonymous Coward · · Score: 0

      Maybe I'm cynical, but that is the main lesson life has taught me over the past few years.

      I've had very similar experiences, although my skill set doesn't quite match up to yours. My strength was in learning things quickly. I once had a manager say to me (seriously, as a compliment):

      "When I can't find anyone else to do it, I give it to you."

      While able to take on any one of a dozen roles and be better an it than the existing person in that role, I was needed to handle all the painful loose ends. What really sets you apart in that position isn't the technical skills, they don't earn any respect (partially due to hubris), but the related business skills.

      Being able to draw up an excellent functional spec, train a team of professionals, document a set of changes, give a sales pitch, negotiate solutions and review procedures. For every 10000 programmers there are 100 technical swiss army knives, and in 100 swiss army knives there's only 1 person who is just as good at explaining what they did as they were at doing it.

    30. Re:You should be good by SageMusings · · Score: 1, Insightful

      I just left Irvine this past October. Why did I leave? The cost of housing out there is ridiculously expensive. I would strongly caution you against locating there unless you are well paid and are ALSO married to a well paid spouse. Otherwise, you'll get by but never be comfortable.

      There was one place I turned down that did embedded work (the salary was only 75K -- in Irvine that's low), it was Geotest. They sell automated test equipment and market a matlab-like language. They were very pleasant people. Look them up.

      --
      -- Posted from my parent's basement
    31. Re:You should be good by Anonymous Coward · · Score: 0

      Excellent points. I see the same sort of "corporate architecture" in engineering-- particularly in larger companies. One suggestion that I have is to study scientific computing and numerical methods, along with a class or two in some sort of specific scientific or engineering field. (Example, fluid dynamics, or PDEs and finite element method.) With a decent academic background in scientific computing, there are a number of engineering analyst positions that you could qualify for. (Simulation, data analysis, etc.)

    32. Re:You should be good by Anonymous Coward · · Score: 0

      I'm not bragging You are, actually.
    33. Re:You should be good by leenks · · Score: 1

      Seconded. All good points, but I think in particular when starting out you *must* learn to feel comfortable to stop people when you don't understand something and ask questions. When working together on a project, it really isn't a competition. If you don't "get" the objectives and the reasons why you will not be able to complete the tasks effectively, and when explaining the task to someone else you will end up bullshitting - and we all know how easy that is to spot.

    34. Re:You should be good by The_reformant · · Score: 1

      This is completely irrelevant, a grad will normally be applying to jobs through graduate schemes which will look at you general abilities rather than any particular programming language. To land a job for one of the major players you will need to demonstrate good technical skills (not necesarily programming, in my graduate intake there were 2 physicists who had done barely any programming), flexibility, good risk management and the ability to tackle problems both by skilling up and by identifying and working with people who are already strong in the area your having problems with)

      So enjoy uni, take courses that will expose you to multiple languages since you'll end up having to be multi-lingual to get a decent job in the industry anyway (and c++ isn't really any harder than any other language). Take some maths courses because they look good on the cv. Every summer get relevant summer work so dont just go work in a bar or something.

      A lot of what we're seeing outsourced isn't really the sort of work good CS grads should be looking at anyway.

      --
      I have discovered a truly remarkable sig which this post is too small to contain.
    35. Re:You should be good by neiko · · Score: 1

      The best skill you can have in any tech industry is the ability to acquire new skills. As an interviewer for our development team I'll agree that this is an admirable skill, yes...but it's hard to qualify during an interview.

      Interviewer: "Do you think you could pick up the language/tools we use here?"
      Interviewee: "Oh definitely, I learn very quickly!"
      Interviewer: "Good enough for me...welcome aboard!"

      Nothing is a substitute for experience with the specific skill required for a job. Learning helps after you've already obtained said job.

    36. Re:You should be good by Kiaser+Zohsay · · Score: 1

      Nothing is a substitute for experience with the specific skill required for a job. I said "best", not "only". Presumably, the specific skill required for the job was learned rather than hereditary. My point was that in any tech sector, the specific skills that the job market is looking for turn over on a regular basis, and that focusing on a particular skill set in school is premature. By the time you are out in the job market, the specific skills that the market wants will have changed.
      --
      I am not your blowing wind, I am the lightning.
    37. Re:You should be good by lgw · · Score: 1

      Good point - I meant "in-house" in a different way. For an OS Vendor, the OS development is largely done in-house. For a clustering vendor, the clustering development is largely doen in-house. Etc. In all of these cases I'd bet the teams are about 50-50 American and Indian employees, with very few contractors (at least, that's been my experience).

      --
      Socialism: a lie told by totalitarians and believed by fools.
    38. Re:You should be good by lgw · · Score: 1

      Once you put Linux (or BSD) on everything, there's no real disctinction between embedded and infrastructure programming.

      I'm also finding it very hard to hire people, here in Silly Valley, especially junior developers - it seems like no one is coming out of school with an understanding of pointers these days.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    39. Re:You should be good by lgw · · Score: 1

      So enjoy uni, take courses that will expose you to multiple languages since you'll end up having to be multi-lingual to get a decent job in the industry anyway (and c++ isn't really any harder than any other language). I probably agree with you in principle, by what you actually wrote (in the context of TFA) is wrong. To be good at C++ you have to understand *both* pointers and OOP. These days the OOP is taught by most schools, but most schools don't teahc pointers *at all*. Yes, if your "multiple languages" include both one with pointers and an OO language, C++ is no big deal. The problem with schools today is that this isn't the case! Even CS grads come out having *never* done pointers.

      I have the reverse problem in my field: if I instead try to hire senior devs, finding people with good C skills is easy, but everyone's a kernel dev who doesn't know from OOP at all. Thank goodness a very few are willing to take the hit and spend months learning new concepts!
      --
      Socialism: a lie told by totalitarians and believed by fools.
    40. Re:You should be good by petermgreen · · Score: 1

      Your job is not to know the languages and the tools
      I think to be a decent engineer you should know at least one tool/language in each relavent category. It may or may not be the same one you end up using but at least you will know the basic concepts. To use an analogy from the world of electronics in PCB design the tools will change as will the number of layers (though i'm sure there are still a hell of a lot of 1 and 2 layer boards being designed and made) but the concepts of PCB design (tracks, vias, pads, pours etc) don't.

      Since C and C++ practically define thier own categories and are very common that means that IMO you should learn them both though not nessacerally in great detail. C fills the niche of being about as close to the metal as you can get without actually writing assembler. C++ fills the niche of where you still want tight control but some OOP capabilities would be usefull. For higher level stuff things aren't so settled but still I think knowing at least one GUI framework and at least one high level networking library and so on will be very usefull to you later when you come accross a similar thing in future.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    41. Re:You should be good by Anonymous Coward · · Score: 0

      In my own small Canadian university business courses (Organizational Behaviour in particular), we've learned why people that are willing and able to handle anything that's thrown to them don't get ahead, and people with less ability and certain people skills do. It's not because they're specialists. In fact, a lot of people that don't know jack about squat get ahead of everyone else simply because of their people skills.

      Think about it... you fix it all, you've done stuff it would take entire teams of other people to do, you do it faster... Why would they promote you? You'd be in another position where you wouldn't be asked to fix all this stuff. The experts would be called in. Money would be blown. Time would be wasted.

      "We need a new manager. Bubba has the IQ of a walnut, John Doe here, he's a genius. Promote Bubba... yeah, Bubba's not too bright, but John's work will more than offset the raises we'll give them both..."

    42. Re:You should be good by SocietyoftheFist · · Score: 1

      I second that. I believe that all intro and data structure courses should be taught in C. A lot of people coming out of school are "Computer Scientists" that don't have the slightest clue as to how a computer really works. After the first two courses you can start introducing other languages once the student actually understands the link between the program statements and how the computer is really interpreting them.

    43. Re:You should be good by jhantin · · Score: 1

      I think to be a decent engineer you should know at least one tool/language in each relavent category. It may or may not be the same one you end up using but at least you will know the basic concepts.
      Agreed: what you really need is the meta-level skill of deriving principles from examples of the art. The first GUI framework I learned was plain C direct to Win16 User and GDI libraries; the conceptual model -- event-driven style, object-oriented code (without language support!), and so forth made learning Xlib a walk in the park, even though you have to roll your own dispatcher since Xlib doesn't come with one; it was pretty easy, even fun, at that point to cobble up a rudimentary X toolkit in Objective-C (w00t! late-bound methods!).

      C++ fills the niche of where you still want tight control but some OOP capabilities would be usefull.
      Just be very careful when Greenspunning more sophisticated capabilities you end up needing; you may be better off mixing in an interpreted language and alternating hard and soft layers. And yes, garbage collection and hard realtime constraints are compatible, while COM-style AddRef/Release reference counting breaks realtime since Release can cascade indefinitely. (Remember, hard realtime means predictable performance, not maximum execution speed.)
      --
      ...when you're writing a game...tweak the difficulty of "Easy" to something [your mother] can cope with. -- onion2k
    44. Re:You should be good by Anonymous Coward · · Score: 0

      Because I do not want this traced back to me and I know both my peers and managers take a look at this I am staying as AC.

      But for the parent, you are not the only one

      I have experiences and skills in nearly every aspect of computing and computing management, low level programming, high level programming, graphic design, web programming, administration, security, networking, database administration, and support. Worked in many different environments and industries, automotive, condition monitoring, corporate environments, insurance, payroll, distributors, etc. And performed many functions, such as project management, commercial design, quality, and general management.
      I know I have done better then average in all these fields individually from the responses, notes, memos, conversations, thank yous, pats on the back, etc. One manager was nice enough to do a ROI on me;) Each year the business department of the company I worked for saved 1.21 million dollars on average per year. That is nice but my bonuses each year did not reflect that of course.

      Like the parent, this isn't something necessarily to brag about. After all a smarter person who probably not admit to what they know.

      But none the less, just like the parent, I found myself having difficulty advancing. A good manager knows how to manage their assets. That often means, not to allow a person be promoted, advanced, or move on from underneath you when you can have a great person underneath you. and like the parent forced in a position that I get the least reward from. I was not allowed to, been blocked by my manager the 2 times I tried. It was just as hard to find a position, it is always 'We are looking for a person who has just done .NET for the past 5 years", "we are looking for a person who has done just lean enterprise work for the past 4 years", "Well you were 2nd on our list, you had all the skills, but this person here was focused a bit more in the area we were looking for", etc. etc.

      So, I finally discovered what many others already knew...
      Parent... start consulting, find the areas and the industries you had the most experience and start consulting... you have learned how to learn technology and concepts quickly... you can make more... I am, and I think we have a lot in common.

      None the less, these fields are very difficult to move around in without getting trapped. So stay focused on the skills you enjoy. So when you are forced into a position, the only position you are forced into is the one you like. Eventually, if you find yourself with enough areas of technology, and never or no longer being specialized. Become a consultant, and claim your specialization is in the entire industry that your client is in.

    45. Re:You should be good by HouseArrest420 · · Score: 1

      But, as a CS student, your job is not to know the details. Your job is not to know the languages and the tools, your job is to learn the algorithms, to learn the thought processes, to learn how to design. What tools you know how to use aren't very relevant, and will change over the next couple years anyhow. Being adaptable, and knowing the fundamentals, and having strong problem solving skills is far more important. The rest will come. Any company that won't hire you because you don't know their specific languages and tools is either not looking for a student out of college, or is looking for an IT monkey to write code for them. If they don't want a CS student, beware, as the job is likely quite boring anyhow. QFT. A good prgrammer...or at least a desirable one, is one that is able to adapt. One that doesnt mind learning the tools he needs to learn to do the job, especially if its on his own time. Hell....before he came to you for employement he was already planning to teach it to himself anyway.
      --
      This is Slashdot! Give me the latest gadget, bug, or OS project! This ain't english class so don't confuse the two!
    46. Re:You should be good by petermgreen · · Score: 1

      Just be very careful when Greenspunning more sophisticated capabilities you end up needing
      Maybe so but equally overusing library functions especially in embedded environments can bring in overhead you can't afford. That may be time overhead but it may also be code size overhead or ram overhead.

      while COM-style AddRef/Release reference counting breaks realtime since Release can cascade indefinitely.
      True but if you are making and dumping objects willy nilly then no system is going to make you safe from running out of time. For stuff that has to be that predictable it is often a good idea to just completely avoid dynamic memory or at least keep a very close eye on when and at what priority objects are being constructed and disposed of.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    47. Re:You should be good by The_reformant · · Score: 1

      I probably agree with you in principle, by what you actually wrote (in the context of TFA) is wrong. To be good at C++ you have to understand *both* pointers and OOP. These days the OOP is taught by most schools, but most schools don't teahc pointers *at all*. Yes, if your "multiple languages" include both one with pointers and an OO language, C++ is no big deal. The problem with schools today is that this isn't the case! Even CS grads come out having *never* done pointers.

      I don't think pointers are necesarily that hard. People seem to be terrified of them. I think that anyone who has the kind of logical mind to get the CS and problem solving side of a job should be able to pick up pointers without too much trouble. I honestly think half the problem is that people end up getting thrown into maintaining or modifying badly written code where they see a string of *, &, -> and . operators before every single variable name (kinda like how when your new to perl it just looks like an explosion in a puntuation factory) and just panic rather than working through it step by step.
      Of course tracking down bugs caused by dangling pointers can soemtimes be pretty tricky but its a good way to learn how to use a debugger. Something which I wasnt taught in uni but really wish I was.
      --
      I have discovered a truly remarkable sig which this post is too small to contain.
    48. Re:You should be good by lgw · · Score: 1

      It's pretty old news that two things are hard to learn/teach in programming: recursion and pointers. The majority of people who attempt a CS degree used to wash out on these specific issues. If you're the right kind of thinker (for this field), you'll "get" pointers and recursion, and so one programming language is much like another and you wonder what all the noise is about. But a large percentage of people simply can't seem to wrap their heads around these ideas.

      It used to be that if you hired a CS grad, you knew they didn't have any practical skills, but you also knew that they "got" pointers and recursion, so you knew you could teach them the skills they needed. The schools added value by washing out those who just weren't trainable.

      Now the school apparantly removed the wash-out courses just to keep the number of attendees up, and there's no proof that a grad will be trainable. After the intership program I ran last summer, I now place no value at all on a degree from a Java school when I evaluate candidates, and we're going to shift our intern recruiting to the few schools that still teach pointers and recursion.

      OTOH, fresh graduates with MS degrees from California Java schools are getting ridiculously high offers hrer in Silly Valley, so they probably don't care if I'm willing to hire them.

      --
      Socialism: a lie told by totalitarians and believed by fools.
  136. His question is to vague... by kjkeefe · · Score: 1

    Your suggestion is very likely a good one. However, he needs to clarify his question by answering mine:

    What kind of work do you want to do?

    For example, if he wants to code for embedded devices, then your suggestion is a good one and I'd recommend that he focus his efforts on learning a lower level (relatively speaking) language such as C. He should also make sure he has a good grasp of hardware design and algorithms.

    On the other hand, if he wants to do web based coding, I'd recommend he try PHP, Ruby, Perl, and JSP to get a feel for each. Also, learn how to configure an Apache server, learn XHTML and CSS (don't need to be an expert), and learn your way around in all the popular DBMS's you can get your hands on. Make sure you know your RDBMS theory and algorithms pretty well. Learn about some of the common frameworks used for web programming (Rails, Struts, etc.)

    If you want to do graphical coding for games or visual simulators, definitely dig into some of the more common libraries (OpenGL), etc, etc...

    But, it is important to remember that my suggestions are going to be just as inaccurate as everyone else's suggestions because it really, REALLY depends on what kind of work you are looking for and what company you'd like to work for.

    --
    1, 2, 3, 4, 5... That's the combination on my luggage!
  137. Information Interview by snowwrestler · · Score: 4, Informative

    One of the best things I did was to shotgun a few letters to prospective employers telling them how highly I thought of their company, and asking what I should focus on if I wanted to be hired there. The letter approach is not a bad one, but I think you can learn more in person. Try finding some folks who work in the field in which you'd like to work, and take them to lunch and pick their brain. This is often called an "information interview"--you stress up front that you're not looking to get hired, you're just hoping to gain a little insight. You might surprised how accomodating folks will be. The fact that you're young and still in school actually works FOR you in this context.

    How to find folks to interview? Networking. Work your contacts. Good sources include friends of your parents, your friends' parents or their friends, people your professors might know, etc. Or, find local events or societies or clubs that attract folks from your target industry. Or just call up companies you admire. This aspect of the information interview is great training for later in life, when you really want to get a job.
    --
    Build a man a fire, he's warm for one night. Set him on fire, and he's warm for the rest of his life.
    1. Re:Information Interview by StaticEngine · · Score: 1

      If you happen to know some people, or there are interesting industries locally, I totally agree. However, for the best cost/benefit ratio, you still can't beat some letters (on paper, sent via the mail).

      Otherwise, yeah, people love to talk about themselves and their careers/interests. Be flattering and interested, and you'll get lots of interesting information back.

    2. Re:Information Interview by throckmorten · · Score: 1

      How to find folks to interview? Networking. Work your contacts.

      The most useful bit of advice I've read yet.
      Whether you're just leaving school or you've been employed for 20 years and looking to change companies, you won't get hired because of what you know, you'll get hired because of who you know.

  138. I would recommend the valuable skill by Anonymous Coward · · Score: 0

    ... of not asking Slashdot for career advice. Ask your school's career placement office to put you in touch with recruiters, and quiz them. Cold call local technology companies, or email. Ask friends of friends. Most programmers love programming and are happy to talk about it, including the career management part of it. You just need to get past the HR flacks and reach the real guys doing the real work.

    What they're probably going to ask you is "what do you want to do?" or "what markets do you want to work in?" I know for example that a lot of financial services institutions use a lot of Java, combined with legacy systems held together with Perl and shell scripts. (No joke!) A lot of large corporations are using ASP.NET to build their intranet webs. And so on.

    I don't think you need to know C or ASM immediately coming out of college, unless you want to get into coding operating systems or server daemons. Although learning those does give you a deep understanding of what's really going on in a computer, i.e. so THIS is what my C# looks like when it gets compiled!

    And don't ask Slashdot for career advice.

  139. Get involved with something else (as well) by Peter+(Professor)+Fo · · Score: 1
    I once got a contract because I used a technical word I'd seen as I walked into the factory. People interviewing you probably have bees in their bonnets about certain computing subjects - that's just luck of the draw, but people who make widgets really love other people who are interested in widgets. Quite likely the bloke that's leaving was 'difficult to talk to' so you'll be a ray of sunshine - a bod who may be inexperienced but will get on well with the shop floor and be an enthusiastic developer and good listener.

    Here's the better news: Your passion for underwater flower arranging or any other not-IT interest can be a good card to play if you make it clear that without it you'd go bonkers because you work so hard during the day. (OK I'm an old hand, but it will be people that will employ you and you need to twig what makes them tick.)

  140. I was going to say by StarKruzr · · Score: 1

    The department sounds right to me. "Seduction" is an excellent skill to have.

    Honestly, though, it sounds like he's in a good place career-wise. If he wanted to go on to grad school, he would definitely want to study data structures and algorithms in greater detail, as that's what a lot of the tougher classes end up revolving around.

    --

    +++ATH0
    1. Re:I was going to say by Anonymous Coward · · Score: 0

      What if he has a very sex learning disorder?

      Kif, what's it called?

    2. Re:I was going to say by thhamm · · Score: 1

      *sigh* sexlexia ... :(

  141. It's not what you know by Orig_Club_Soda · · Score: 1

    Its who you know. What you should really do in the next year is create a network of friends and acquaintances working in the industry. Start with Linkedin.com and possibly start hitting the forums telling people you are starting to look for a job.

  142. Basic switching/routing by crossmr · · Score: 3, Insightful

    Its amazing what sort of monstrosities can develop when a programmer at my company attempts to set something up and then calls me for help when it "just won't work". I'm not saying you need to know how to completely configure a cisco router with advanced features, but understanding general concepts like ip addresses, host and network portions of an address and how that relates to the subnet mask as well as the basic principal behind how a packet gets from point A to point B would do wonders.

    1. Re:Basic switching/routing by Tablizer · · Score: 1

      I thought you said he's a programmer, not a network admin.

    2. Re:Basic switching/routing by crossmr · · Score: 1

      I did. That doesn't mean at every company you will work for will you have the luxury of working strictly within your "name of degree" skill set.
      Smaller companies, or companies with staffing shortages will often necessitate you work outside that and basic understanding of switching and routing, something you can pick up in only a few hours if you really want to, can be invaluable. Especially for programmers who might have to create some kind of test environment on their own.

      Your test environment that you need to test your software may fall outside the responsibility of the IT department. So picking up the basics and then making sure you have a good reference book handy to refresh them when you need it can make your job easier and make you look a lot more competent.

    3. Re:Basic switching/routing by Tablizer · · Score: 1

      It is difficult to do everything in IT well and keep up with it all. I've met only a handful of IT'ers who wore that many hats well. Generally a programmer and a hardware/network person have different personalities outright.

    4. Re:Basic switching/routing by crossmr · · Score: 1

      There is a big difference between doing routing and switching well compared to taking half a dozen hours to learn the basics of IP communication. I never said he had to be an expert. I said he had to be able to plug a couple boxes in to a switch or possibly two sides of a router (something like a linksys, not a cisco) and make them talk.

  143. NYU Prof. Doesn't Matter by Anonymous Coward · · Score: 0

    I didn't read the articles by the NYU professor, but I don't think his article is relevant to your decision.

    Do what you like doing and pursue your interests with passion. Play guitar like Steve Vai. Play chess like Kasparov. Know algorithms like Knuth. That's all you have to worry about.

  144. Skills, hell. by foxtrot · · Score: 1

    I'd trade every so-called "skill" on our new hires' resumes for just one person who'd recognize a clue if it hit him upside the head.

  145. Be careful who you listen to by hansamurai · · Score: 1

    For one, don't let fear mongering articles like yesterday's scare you into something you didn't plan on doing on Monday. The opinions of some super intelligent professors should be considered, but also remember the position they are in and how disconnected they are from real working world.

    I graduated two years ago and went to a school primarily focused on Java, but the classes I took were still great preparation for what I'm doing now. Just because you're using a high level language doesn't mean everything you learned about data structures and algorithms is useless.

    Anyways, there are a lot of good recommendations here but don't go overboard on changing your life to realize them. Remember who you are and what YOU want to learn, don't just learn it because Slashdot or some random professors think it would be best for YOUR career.

  146. Go back to the BASICs by Bones3D_mac · · Score: 1

    Sure, telling someone to use BASIC in this day and age may seem childish and stupid to some, but there is a lot to be said for being able to write useful programs under limited resources. For example, picking up an old Apple II and learning how to recreate functions modern programming languages handle automatically can really make you appreciate how far along programming languages have come, as well as make you treat your own code with far more respect than you might do now. Also, it removes the overhead of the graphical user interface by simply not offering one.

    If you can't figure that much out without the benefit of a pretty GUI, you probably shouldn't be programming anyway... as you probably don't have any real clue what is going on underneath the hood of your system.

    --


    8==8 Bones 8==8
  147. Life by manitoulinnerd · · Score: 1

    I recently graduated from a small Canadian University with a degree in Computer Engineering.

    What would be the most influential skill/quality I had that helped me get a job?
    My Life

    I went to school pursuing something I enjoyed. I didn't bust my balls over marks. I had a good time. I made friends. I talked to anybody who would listen and listened in return.

    What did I come away with?
    People skills. General knowledge on topics from economics to psychology. Friends.

    When it came time to get a job I did as everybody, hunting down companies doing cool things, sending cover letters and resumes and calling to see if they had questions.

    What it came down to was a friends dad in the electronics industry.
    I had met him. He liked me and in turn he helped me get interviews with some of his clients.
    I interviewed well because beyond answering technical questions I was able to converse and connect.

    So don't spend your last year at school in front of your computer learning Regular Expressions. Employers expect very little practical knowledge. You have shown your ability to learn and they will rely on that.
    Get out there. Go to parties. Join a club. (I suggest climbing, its super fun!)

    Its way more fun and I believe ultimately pays.

    Ciao,
    Joel

    --
    Burn Bright or Fade Away
  148. Expand outside languages by Anonymous Coward · · Score: 0

    A programming language is just a programming language. It doesn't take long to go from zero to productive in any language IF you have a sound basis in logic and software DESIGN.

    If you've got those, then add Database skills. Being able to write queries, views, triggers, and stored procedures will go a long way to making you more hirable.

  149. English by Bootle · · Score: 1

    Good writing skills, like using periods, uppercase letters, and paragraphs. I'm serious too, I see this lacking with undergrads all the time

    1. Re:English by Bootle · · Score: 1

      Note that I missed a period in the above!

  150. Smashing the stack... by blitzkrieg3 · · Score: 1
    ...for fun and profit. This was the first article I read that really made me want to learn assembly. Also I've taken courses in programming languages which was basically my college's way of forcing people to learn functional programming via Haskell.

    From what I have been told, there are more jobs for Java and Data Warehouse development teams compared to lower-level programmers.
    Speaking on a purely observational basis, I would have to say that this is true. But this also means that there are more Java devs and DBA's than there are C and Systems programmers, which enables the C programmers to command a higher premium. Also join your local ACM chapter and try out some programming contests. People in this group usually know what they're talking about. If you're strictly talking about what will help you in the business world, people skills are vital (as others have mentioned).
    1. Re:Smashing the stack... by Anonymous Coward · · Score: 0

      Java is pretty much dying anyway, being the COBOL of the 21'st century. Flex, .NET, AJAX, and other languages are killing it slowly but surely.

      Had Sun actually put work into having consistent JVMs where you knew your bytecode would work anywhere (as opposed to having to write specifically for which version of VM you are in, and if its Sun's VM, a GNU VM, IBM's VM, or whatnot) Java could have taken off to be a universal language.

      Too much hype, too little work on design as a language usable for more than just basic items. Even ActionScript has far more classes and utilities available to it.

  151. A well rounded developer knows dynamic systems by itsybitsy · · Score: 1

    While it's very important to know low level languages such as Assembly Language, C, C++, etc... as well as middle level languages such as Java, SQL, C#, etc... it's crucial to learn high level dynamic systems such as Smalltalk and LISP as they provide flexibility that you'll never find in low level and typed systems.

    A well rounded education and set of skills as a developer will provide you the best chances in the work environment. While languages like Java and C# are the new COBOL and might be the "language de jure" (language of the day) times are a changing (as the saying goes) and it's best to be prepared. Beyond that, the most interesting problems are best solved in languages that approach things from a freedom of expression that Smalltalk and LISP provide.

    The simply fact is that typed systems put a straight jacket upon the mind when they are used. Free your mind.

    Assembly Language, Smalltalk and LISP are three languages that share a tremendous amount of freedom for the mind. Somehow that's lost with C as the so called "type safety" begins to constrain ones thinking. It gets worse, as the other article pointed out, as you head contracts into the limiting space of Java and C#. Goo languages that the mind's creativity gets stuck in. At least that's the case for me and a great many programmers that I know.

    Assembly language is the most important language for programmers and developers to learn as it's the foundation for almost ALL other computing and programming languages. Once you've mastered assembly language all the other languages can be related to from a common perspective.

    LISP is an important language to learn since it's the quintessential paradigm shift where programs are data and data can be programs!

    Smalltalk is a crucial language to learn to grasp with fluidity the concepts of a pure Messaging language where Objects communicate. Smalltalk also has Block Closures, aka Lambda's, where code is a full first class object. In addition everything in Smalltalk is an Object that can be reflected upon, that is you can write programs that manipulate the program, or parts thereof. This provides incredible power in what kinds of programs can be written.

    There are of course a number of other programming paradigms that are also important to learn as they might be of occasional use, and who knows, your brain might find them easy or compatible with your way of thinking. Check out Prolog and Functional Languages such as Erlang.

    There are thousands of programming languages and even more implementations. The key is to learn one or more from each paradigm, that way you're flexible as possible in the types of work that you can deal with.

    Anyone who tells you that the "only" language is X is a fool or has an agenda for you that might not be of your choosing.

    A good starting point for Smalltalk is smalltalk.org. Seek out the best resources of the other languages.

    Beyond programming languages it's crucial to have excellent debugging skills to find out what's really going on in a program or system or between systems. Without that forget it. Debugging is a huge win in the work place as if you can debug systems to find out what's really going on a lot of money can be saved by businesses.

    The other most important area to study is concurrency and parallel programming as with multi-core processors a whole new generation of applications need to be written. The current single core focused applications can't be easily converted to multi core without being rethought. That goes for the current crop of boring operating systems such as Linux, Macosx, Windows Vista/XP/NT, etc... All these systems have got serious concurrency problems. There's gold in them concurrent systems. Users are waiting to access the full power potential that the N-Core processors provide. Oh, and those "New Cobol" (Java, C#, etc...) programmers don't get concurrency - I know as I've earned excellent money cleaning up their many messes as they attempt

    1. Re:A well rounded developer knows dynamic systems by Anonymous Coward · · Score: 0

      Mod Parent UP!

  152. What I've learned in my first year by mdarksbane · · Score: 1

    There are a million generally useful things - know a couple programming paradigms backwards and forward, know business, know how to work with people, get job experience, etc. Anyone who works in software will tell you that.

    The biggest specific things I found out that I did right/wrong in my first year out of college.

    1) Figure out what you want to do, and take as many courses in that as you can. Get into the graduate level courses as much as possible while you're still an undergrad - they are harder and are more interesting. I took every graphics course offered at my school, and it has made me even as a first-year the expert at my office in certain areas (in my case, GLSL shaders and animation algorithms).

    2) Take Operating Systems courses. And don't sleep through the intro one because it sucks and then not remember it. Performance programs are getting more and more multi-threaded because of the multi-core systems coming out now. I spent a lot of my first year slowly learning proper parallel programming techniques as well as how to think about a parallel system. It's in some ways kind of a pain compared to normal, deterministic programming, and I personally would have benefited from a better class on it.

    3) Take at least one real software engineering course, or at the very least read up on different development methods like Agile or the old Waterfall models. Take all of them with a grain of salt and figure out what works best for you, but it's very helpful to have at least heard of proper ways to develop like a professional instead of just hacking things to work.

    4) Never forget how to hack things that work :) In the end the biggest jump in quality of a software product is still from not working to working.

    By the way, a good side effect of taking more advanced courses in a subject is that you will often have the same professors multiple times, and they'll get to know you fairly well. I got my current job off of a recommendation from one of my profs - in terms of getting a job, nothing is more valuable than having a contact.

  153. The skill they really need for corporate survival by Anonymous Coward · · Score: 0

    SOCIAL skills.

    Nuff said.

  154. Skills in real life... by Anonymous Coward · · Score: 0

    We had a grad student last summer we wanted to try out but it was too much work - the guy didn't even know how to do revision control! A few years ago I checked the status of the algorithm analysis class I once took. It had turned into a pure java class (from C/C++) - but not only that: The students were given the solutions to the (coding) assignments as handouts, but they still had problems with it! Problems typing in the solutions and getting them to run...

    In real life, in a software business your code is what you make money from. You will need to have a solid understanding of the practical aspects of software development: revision control - how to branch/merge/commit etc, testing, knowing how to structure a software project, analysing requirements so you actually end up solving the problem you were supposed to solve etc etc. You will most likely end up working in teams, and you will need to know and perform these things on a daily basis. If you fail to know these things you will have to learn them, and you will be a poor performer (for quite some time); if you don't know them well enough you will do stupid mistakes that will cost your company both time and money. Knowing how much time and effort a coding job will take will also be an important skill - if a project manager asks you how long this and that will take you can actually make or break a project.

    In practice languages are just a (small) part of a software project, alongside many other tools. Knowing your compiler, debugging, and tracing etc are much more valuable than knowning 8 different languages. You're more worth if you can troubleshoot and solve problems in 1 language (than just being able to create problems in 8). Also, understanding of the actual computer science - algorithm analysis, datastructures, and also automata theory is good. Understanding of the more fundamental hardware-software "gray area" will be highly beneficial. Learn C - it is used by most of the "big" companies that work with electronics, telecom, etc.

    Learn to read and understand code. E.g. start with Linux kernel hacking. If you can jump in and get to work quickly on some code you will be more valuable.

    Oh, and stay single forever, and keep reasonably fit. Have a large work capacity. This will also be a big plus ;)

    RF, Norway

  155. What languages don't matter by gerdescm · · Score: 1

    I am currently a grad student and working full time. Those that are telling you that you need to know specific languages or that learning java ruins you as a programmer do not know what they are talking about. It is not about whether you know c or c++ or prolog (although all three are good to know), it is about understanding the concepts of coding. Even if you were to go learn 10 different languages, odds are wherever you work you'll end up coding in a language you don't know at some point. What you should be concerned about is understanding how programming _works_. You should know about object oriented programming, you should know about functions and serial programming. You should know about recursion and inheritance. The basics of which are nearly all contained within Java. What you should be doing is going out and learning languages that are good examples of all the concepts you need to know. By learning those languages you will not only understand the concepts better but you will be able to learn NEW languages more easily, which is way more important than trying to learn all the languages you may encounter in your lifetime. Most of the people that try to tell you that you need to know specific languages happen to code in those languages so those are the world to them. For my job I ended up using something called X++, I would never have gone out and learned on my own. But it was not a big deal because guess what, X++ turned out to be similar to Java and C#. If you know languages that cover most of the concepts, any new language you run across (with a few exceptions that are truly unique and interesting for that reason) will require you to simply learn their syntax because you will already know the concepts from the languages you have learned. and in response to the knock to java: it's an excellent teaching language that uses OO concepts and it is easy to learn as well as being cross platform. It works great for teaching structures as well as algorithms. Those that claim it is ruining eduction probably spend too much time creating poor code in good languages since they don't feel that conceptual understanding of algorithms is necessary to an education.

    1. Re:What languages don't matter by gerdescm · · Score: 1

      apparently I should have added html tags to that I promise that there were paragraphs there when I wrote it :)

  156. toolbox of skills by Anonymous Coward · · Score: 0
    You wrote:

    "How can I spend my free time in the next year to prepare to enter the work place with a proper toolbox of skills?"
    Forget toolbox of skills and settle for the toolbox -- and knowing what's in it.

    Eighty percent of using a hammer is having a hammer and knowing that you do and what it is.

    Seriously - a lot of forum questions end up sounding like:

    "What can I rub on the side of my wrench to make it grip better so I can 'hammer' in a nail without having to get a hammer."
    Just don't let that be you.

    A good exercise: get a piece of paper, and without referring to anything list all the technologies you can that you haven't used. Then google each with "quick tutorial" and follow one.

    If a bunch of people are using it, just get yourself in the set of those people. You can always post a "question from a novice" to some forum for that tool later, but only if you know that's the tool you should be using.
  157. Avoid the 'trade school' mentality by tvstorgo · · Score: 1
    It's simply not important which languages you learn - virtually any language can be learned in a few weeks at most. Even more of a waste of time is to focus on 'practical' things like 'database programming' or 'web development'. Those skills can also be learnt passably well in a few days or so.

    Your goal, and the CS program that you choose, should really be to teach the theoretical aspects of CS more than anything else. Or if you don't want to physically go to school, start with SICP and do the MIT online CS courses. The more abstract your knowledge the better - specific technologies can and will be learned throughout your career.

    Really, if you can say you're an expert Java programmer when you graduate, you and your school have done something seriously wrong with your 4 years - first for choosing Java in the first place, but mainly because your time should have been spent doing better things.

  158. Notice the inherent bias of the original article by onionman · · Score: 1

    The article to which you refer was written by senior officers of AdaCore, which means they have an inherent bias towards embedded systems and high-reliability software (the two areas where Ada is still seen), and hence biased observations about what skill sets are required in the majority of computer industry jobs. That said, they are still correct :-) Unfortunately, in all but the top universities, the CS major is slowly transforming into a Programming major. This is largely due to state legislatures pressuring public schools to quickly turn out programmers to fuel industry demand for code-slingers. Too bad, really.

  159. Written and Oral Communication Skills by Four_One_Nine · · Score: 1
    I know I'm late to the party and the "way at the bottom of the page" /. comments rarely get attention, but I am compelled to respond to this one.

    I have recently been asked by my Alma Mater to review some undergraduate portfolios to determine the quality of their General Education courses. I have been appalled at the (nearly) complete lack of ability to write a coherent paper. Sometimes the voice changes, sometimes the tense changes, rarely are there actual citations and never was there any semblance of flow from beginning to end.

    What was even worse, however, was the fact that the professors of these courses were giving kudos for this crap. This current generation of narcissistic praise junkies and these so-called 'educators' who give out this praise make me throw up a little bit in my mouth every time I think of them.

    --
    I did it for Johnny.
  160. Read Joel on Software by Soskywalkr · · Score: 4, Informative

    ISBN-10: 1590593898

    Could recommend this book more highly to an up and coming programmer.
    This is the first book that we ask our interns to read.

    The second book (for those pursuing management positions) is
    "Leadership and Self-Deception"
    ISBN-10: 1576751740

  161. Universities Are Diploma Mills by zgregoryg · · Score: 0

    Quote from post, "My education has not been particularly difficult or time consuming to get good grades." Within this sentence underlies the greatest problem with advanced education today. Too many are being churned through the system and exiting with a diploma and essentially GUI knowledge. Over a year ago I participated in an interview panel related to an open Information Security position at my company. We interviewed many who looked good on paper, even an MS in Comp Sci. from USC; only to determine that most of them a GUI-slingers with little programming ability or understanding beyond .NET. How unfortunate; perhaps their educational experience mirrored the statement above.

  162. What do you want to do after you graduate? by evilklown · · Score: 1

    In my search for employment, I found that "well-established companies" (read: old) still had legacy hardware/software that they maintain and create software with that technology. Newer companies and companies that embrace change tend to work with newer technology like Java, Ruby, and C#. From my perspective, if I wanted to work for one of the "well-established companies" then I needed to learn Cobol and C. I chose to work for a company that has embraced changing technology and I will be working with Java (until the next "big" language hits).

  163. At least 3 things by Anonymous Coward · · Score: 0

    - Automata, Formal Languages, and maybe Compiling (take and advanced course)
    - Algorithmics (Knuth-like, even though you can find better than the books of Knuth)
    - Computer organization and design (and maybe try to write some low-level C code to really understand architecture stuff)

    If you have time, try to learn some:
    - Functional Programming
    - OO programming

    If you plan to do software engineering and hope to be some team manager, do learn some:
    - Software engineering and UML (as much as I hate it as a scientist...)
    - Requirements management, Process management (I don't know if there's such a course)

  164. You're already ahead of 90% of your peers by jimicus · · Score: 2, Informative

    Let's see:

    1. You recognise that there are serious gaps in your experience and understanding.
    2. You are clearly motivated to do something about it.
    3. But you also recognise that your inexperience means that you're not entirely sure which gaps you should be plugging first.

    This puts you way ahead of a lot of computer "scientists" who are still in university.

    Please, please, please do the entire industry a favour and work to maintain that passion. People who've lost their passion,who don't really care as long as the next paycheque comes in seldom make top class IT professionals, and frankly are ten a penny.

  165. Required Graduation Skills by Brownstar · · Score: 1

    1) As mentioned by others get a co-op or internship at a company in a field related to what you think you want to do after school. In general, you'll get more experience working at a smaller company. This is because they are more apt to actually notice you, and if you're motivated more apt to give you responsibility real work.

    On the other hand, if you apply to a larger company that has a good co-op/internship program, that can work as well.

    2) Learn to socialize. Make sure you spend time out side of studies and have a good time. Become friends with others that are not CS/CE students. Go out and meet new people at bars or cafes and just chat them up.

    Make sure to network with people at school that you think can help land you a job, either soon, or in the future. Keep in contact with them. Basically look for people your age that have their shit together. Chances are, they'll still have it together when they're working. Make sure you keep in touch with them after school is over as well.

    3) If you drink, really learn to drink. Not necessarily how to drink a lot, but more to learn where your tolerance line is. Learn to keep up intelligent conversations even though you're slightly drunk, or even very drunk. Know when to stop drinking, before you're at the point that you should have stopped. That requires going beyond that point in an environment where you're not putting your career at stake. Know how not to act like a stumbling jackass when you're drunk.

    4) Learn about clothes. Learn the difference between a good fitting suit and a poor fitting suit. Learn how to put together a good wardrobe. Learn how to shine your shoes, and tie a tie. Learn the difference between good fitting shirts and crappy fitting shirts.

    5) After you have those taken care of, you can worry about your actual technical skills. Worry more about theory than a particular skillset. If you know 1 or 2 things real deep great. If not, as long as you can pick things up quickly, and you can do the above things, you can find a job, and learn the specifics there.

  166. Math and writing by richieb · · Score: 1
    If you find your current course too easy, you should take some harder courses. I recomend some serious mathematics - at least a year or so of Calculus, Statistics and maybe some abtract algebra and/or number theory. They are all very applicable to programming. The more math you know the more money you will make.

    Writing - take some writing courses. Make sure you can write a 10 page paper in few days that is well organized and readable. Being a developer means a lot of writing and not just code.

    Finally read some articles and books by Paul Graham and start working on a cool hard problem.

    --
    ...richie - It is a good day to code.
  167. Don't Forget The Web by WebmasterNeal · · Score: 1

    It seems to me that client side programming is going the way of the dinosaur. Most companies want applications that are web based and don't want to muck with client side programming. You may already have experience with web based programming, but if you don't take a look at that. Also if you choose to look into web based programming spend 25% of your time on design as well. I am more of a designer myself, and I find that most of the web jobs out there are more developer based, and I think people who are already good programmers should considering doing it on the web.

    --
    "During My Service In The United States Congress, I Took The Initiative In Creating The Internet." -Al Gore
  168. College Experience by Launch · · Score: 2, Insightful

    As someone who graduated college only a few years ago (2004) and as someone who has a career in the software industry and as someone who is responsible for hiring delevopers, let me offer you the following:

    1) I don't believe in CS programs. I feel that they fail to prepare students for the real world. Engineering is one of the few educations which should provide students with pratical experience that prepares the student for 'the real world'. You have learned a lot of therory. In my experience good grades has no corrilation to good developers.

    2) College, in general, is important for 'nerds, geeks, engineers, etc'. Sterotypically this group has poor social skills. This can hinder your professional development, as these skills are required in almost any business. Focusing on developing social skills, time management, and group collaboration will pay off.

    3) Therory isn't a complete lost cause. Focus on learning how to think, regardless of course of study, college should train you on how use your brain.

    4) Be passionet. College can be a great demotivator. I wouldn't be suprised if you loved computers a lot less today than the first day you stepped onto campus. Find time to utilize computers in a way that inspires you. Google Mircosoft's "Coding For Fun". Not only should you find something there that intrests you, it will help guide you into some self study of programming that is applicable to today's business world, which brings me to my next point.

    5) Focus on increasing your marketable skills. The utopian academia [and dare I say slashdot?] breeds a lot of technical fringe support. While being a hotshot ruby developer might be cool in this circle, it's not as marketable as being a profficient VB.net/C# web developer. Polish your skills in using technology that is common place, you'll need it being entry level in the job market.

    6) Experience is golden. Work for minimum wage, work for food rations if you have to! Finding internships in related industries will give you pressious contacts, and valible work experience to put on your resume.

    --
    Your mammas flamebait.
  169. Hindi, Mandarin Chinese by Travoltus · · Score: 1

    Learn those two languages or everything else you learn won't mean squat.

    --
    --- Grow a pair, liberals... stop letting the Republicans bully you!
  170. Higher Education by HotBBQ · · Score: 1

    Whether you will actually learn more is up for debate, but you could always try graduate school. I know it helped me secure at least a better starting salary. Most of the people who started at my company straight from college had Masters degrees in computer science. It's perhaps the second best thing to experience for new graduates.

  171. I have one word for you: breadth by mr_mischief · · Score: 1

    Don't be satisfied with languages based on C and C++, or even all the Algol-derived languages. Learn Scheme. Learn Prolog. Learn Forth.

    Take a class specifically on data structures whether you need to for your major or not. Proper data structures go from language to language much easier than syntax.

    Find yourself a nice foreign literature class (most are done with texts translated into your language) or philosophy class as an elective. You'll find as a programmer or software engineer you'll interact with a lot more than just other CS majors. You'll have more in common with them knowing something outside your field. They'll be far more impressed that you know Moliere or Anaxagoras than some technical jargon about code that they don't understand for one thing.

    Since you're looking as CS and Business, I can't be sure if you want to manage programmers or if you want to run a small programming shop as the owner. If you're looking at being a manager, look into psychology or sociology and learn about small-group interaction. If you're wanting to be a business owner, make sure part of your business education includes the basics of accounting, marketing, and business law. If you're wanting the third option, to write software for businesses, well, most of it is for businesses. Keep in mind that accounting software is probably the hardest business-specific software to write. If you're not sure what kind of software you want to write or in what business capacity then a good study of math, graphic design (for UIs if you want to do that), linguistics, symbolic logic, or electronics engineering could help in general.

    One thing I've read lately (probably on Slashdot) that sounds like a really good idea is that instead of waiting for inspiration about what to write in other languages, pick two or three other languages and do your programming homework in those in addition to what you'll turn in. That gives you a good grasp of the other languages and might shed light on how best to implement things. It'll also get you used to evaluating projects based on which language supports the needs of the project best. That's something that'll come in handy if you have the ability to choose languages for projects later.

  172. Besides technical, get personal and social skills by jgt10 · · Score: 1
    I've been in the hi-tech business 30 years. There's some good stuff above, I'd add just a few things.

    If you haven't, get a copy of Dale Carnegie's "How to Win Friends and Influence People"

    • read it!
    • read it again with a highlighter or a pen or pen to highlight stuff.
    • read it again.
    Yeah, it has some boring and dated stuff, but it is one of the best books to read on how to deal with people. Secondly ONLY to the technical stuff is dealing with people: your boss, co-workers, admins, janitors, customers, etc.

    You can go broad or you can go deep in the technology.
    You've got a good start by digging into what interests you. Keep doing that!

    Research companies that make software in the areas you are interested in.

    • Call them or write them and ask for an informational interview.
    • Fill out the web form for information or whitepapers. When the marketing types call you to find out why you want the stuff be up front and tell them your situation and ask who to contact in the company for more information.
    • Watch for them on campus during interviewing season and get an interview. Tell them you have researched them, are interested in what they do, and what you could do to improve your chances of working there.

    JGT

    --
    JOAT(MON) Computer Psychiatrist
  173. Be willing to work by Secret+Rabbit · · Score: 1

    I know that this might seem obvious, but it doesn't seem to be any more. My wife has told me of a new problem with graduates that is currently be documented by employers. Namely, that because of the lack of requirements (and difficulty thereof), among other problems, that students going into the work-place aren't used to actually working. So, they put in a pathetic amount of work in any given day.

    For those that disagree, lets think about the average students day. (S)he will wake up and get to there first class. This might be arriving for 8am or at some point in the afternoon. For arguments sake, lets say it's 8am. But, then how many classes a day are students taking? The full course load at most North American Universities is 5 at one time. That being split into classes on MWF and T/TH. Giving a non-skewed split of work, there'll be at most approx. 3 hours or so of classes per day.

    Now, for most students this is where the typical day ends and all the work that is done. For others, there'll be a couple more hours of work through doing questions and/or reading ahead and/or... But, nothing really significant. Perhaps 1 or 2 more hours a day.

    Do that for 4 or 5 or... years and it's no wonder that students have a skewed understanding of what a work day actually means. As in, the above students day is rather different from full time work where you're actually expected to work during all those hours.

    So, that's my number 1; be willing to work.

    My number 2 is understand what you don't know and understand how well you know what you do know. There's nothing more irritating than someone who doesn't know his/her limitations in knowledge and understanding. It's one thing to be confident, it's another matter entirely to be delusional.

    Effectively, when someone says you're wrong, don't do the knee-jerk "No, you're wrong." Ask why they think that. Start a discussion. Quite frankly, IMO, if people would ask more questions instead of arrogantly assuming that they're always right, we'd get a lot more done in a lot less time ending up with a lot better quality.

    For number 3, learn as much as you can that's outside your curriculum. Also, realise that you can never learn any language (or lib) specific to what you'll be using in your work when you get it. But, being able to say, I've programmed in that language a little bit, I've done -enter list here even if it's just re-writing assignments- is a hell of a lot better than starting from scratch.

    This learning thing never ends btw. Stop learning and you'll quickly become obsolete. Especially in an IT related field.

    For number 4, if you haven't already, watch Randy Pausch's "Last Lecture". There's a lot in there that's really really good to understand and live by.

    http://video.google.com/videoplay?docid=-5700431505846055184

  174. Problem Solving by Menoche · · Score: 1

    Ahhhh programming.. like there is only that in CS... The ONE thing which is always missing from future prospect when I hire is problem resolution skills. You fressh grads know a bit about programming, a bit about languages, dBs and such but real life problem solving, lets face it, you yougnsters SUCK!!! -Learn to think out of the box, especially while under pressure. -Learn to work and solve problems with a minimalistic set of tools. -Learn to recognize strenght in people surrounding you to help you solve problems -Learn to admit you don't know or made a mistake Mixing all this will not only help you on the market but help you in every other aspects of your life. The main problem I face every day is trying to solve issues faster with less time. Think MacGyver.. solve issues with your environnement. hope this helps Philip

  175. Learn How To Program by r0nc0 · · Score: 1

    I just hired two college graduates from a really large pool of candidates that our HR team recruited and winnowed. My team's process is simple. 1. Grammar and spelling. If there's a single error on your resume or anything you send us, something that you've had time to prepare and check, then what does that say about your habits in general? Seeing a simple spelling or grammar mistake just casts a shadow over things and will throw the decision towards the negative if we're on the fence. 2. Learn how to program. We don't give a damn what language you like best, but whatever it is, show us that you can solve simple problems with it. Coding style is very important, so we send candidates two simple programming problems. And I really mean simple. No big deal, right? But you wouldn't believe how few people can pass this simple test. A good number of submissions don't even compile! What are we looking for? Good programming practices, that's all. It just gives us an idea of where you are and how you think. If you're going to be writing code for us, then we need to see some examples. 3. Unit testing. Those programming problems should have a complete set of unit tests. You get extra points if you code the tests so they can be run by a framework like NUnit or Junit or whatever. But we need to see that you've thought about what will make the code fail. Those are the things that will get you to the interview. Once in the interview we're going to ask you questions to test the limits of your knowledge, and how you think, especially under pressure. What we're looking for is someone who understands that software is a craft and we are all at various levels of apprentice, journeyman, or artisan. To continually work at one's craft is something that transcends programming languages, and we look for people who recognize that.

  176. The answer to the question: by Conanymous+Award · · Score: 1

    Mad.

  177. Reinvent the wheel by DahGhostfacedFiddlah · · Score: 1

    If you have time, try writing your own constructs instead of using the ones provided by whatever environment you're in. You're reinventing the wheel, but until you've reinvented it, chances are you don't truly understand it. Linked lists, events - even graphics libraries.

    When you're in the "real world", you can start to trade off convenience for experience, but take this opportunity to make as many basic mistakes as possible while you have the chance.

  178. Re:Being able to talk to/analyze the customer espe by inKubus · · Score: 3, Insightful

    You're talking about Software Engineering, "the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software".

    Knowing languages is good. Theory is good also. But to make a working product you need much much more. From the inital vision, to project planning, choosing the appropriate tools (language, platform, etc.), and matching features to business process requirements, you have a lot of work ahead of you. Of course, actually writing the code is a challenge in itself, but in a lot of small- to mid-sized businesses, the "developer" is also the project manager, the analyst, the senior developer and the IT manager all at once. Careerwise you CANNOT go wrong having at least rudmentary (such as Quick Kill) and probably at least a familiarity with development methodolgies. There is no one leader, agile was big for a while but it was too cult-like.. There's a million of them, you have to match the right one to the job. People who do this are software engineers.

    Wow, you know a language. Most working coders know 10. It's applying that knowledge to make or maintain software that gets you a job.

    --
    Cool! Amazing Toys.
  179. Be a generalist by cyngus · · Score: 1

    Part of the point of the article slamming Java as a first language was that teaching Java first skips over a lot of conceptual ideas that are essential to writing good programs. If you can write good C or C++ and understand what object orientation is, you can write good Java with an extremely low learning curve. The relationship does not hold the other way. Java takes away a lot of repetitive tasks that the C[++] programmer has to worry about, but it is exactly knowing what Java is doing for you that make you more aware of what is a good program and what is a bad one. The language may do it for you, but the computer still has to do it.

    Be a good generalist and computer scientist. If a company is hiring you because you "know Java" or won't hire you because you're a master C# programmer, but they use Java, you don't want to work for them. Any company that doesn't understand that the language is merely the written expression of the program and that the ability to turn a program's concept into computer algorithms is the important part is lost.

  180. It's easy by Pointy_Hair · · Score: 2, Interesting

    1. Learn the art of bullshit. Become an expert at appearing you know what's going on even when your completely clueless. Keep in mind that this isn't just about bluffing or attempting to do something you aren't qualified for. It's all about appearance. If you look and act like you know what you're doing, 99% of the time most people will believe you. Instant credibility. Speaking of appearance, bathing at least daily and dressing like a real business person will make the bosses swoon and your peers hate your guts. You get real good at it, you will be able to spot another, less adept bullshitter a mile away.

    1a. Communicate well. If you're sounding like an illiterate teenager (in person, e-mail, it doesn't matter) that's what people will think you are. Maybe it won't be kewl and l337 to your peers, but the old people that write the paychecks seem to like it. If you're working internationally at least be functional in the language. Being in a meeting while natives are jabbering away right in front of your clueless face is not fun. The look on their faces once they discover you understood all the foolish American remarks and offer to buy them a beer is priceless.

    2. Always be able to articulate the value you add to whatever you're working on. Currency value is best since even the dumbest managers are keen on money. Understanding the business need behind the technology will help.

    3. Choose a technology that's interesting to you and that you like to work with. It doesn't matter if it isn't in the top 5 in last week's Network World. Even if it pays less than the skill-o-the-day. Nothing sucks the joy out of life more than a job that you hate. You'll also find that your natural enthusiasm for whatever it is you decide to be good at adds to the credibility you get from 1 and 1a.

  181. Self-taught, seemingly impossible story by sarysa · · Score: 1

    I know we're all getting off topic here, but mine in a nutshell: No degree, some college, silicon valley, entered through Java. (though could have entered through PHP)

    Long version:
    I'd learned from RL friends about high concentrations of Java programmers out of work, among other horror stories. I'd heard that the Silicon Valley area is saturated with umemployed programmers, that "all" of Java is outsourced. Prior employers told me that there's no way I'd find programming work without a degree. And yet I received two job offers on the same day, one doing Java (J2ME specifically) and another doing PHP. Still not sure how that happened (as I had tried before with no bites), but it may be a combination of...
    - Having the right level of confidence. Not being full of oneself while not being too timid. (and sadly, this can't be taught. I failed here too often.)
    - I had spent a great deal of free time [burnout level] in the 10 months leading up to my entry into the profession by working on several personal projects, which I did show off at my interviews. In doing so I learned a number of new concepts.
    - I made my resume and contact info very available, and posted a portfolio. Note that making contact info very available will result in spam. It's worth it.
    - I paid great attention to the inner workings of previous workplaces, even the one that told me I didn't have a chance. Understanding the business model of the sector you're looking to move into, as well as understanding the tasks of the various engineers there, is a huge plus.
    - I'm starting at a somewhat lower price. Until you're an established programmer, you're seen as a risk.
    - I saved up enough to weather the storm of a long job hunt. (3+ months living expenses)
    - I focused on the mobile space, which is still evolving, as well as its current tools. (J2ME/BREW) You need to specialize. Finding employment as a programmer is like playing the stock market, bet on a sector that will grow and you'll win. Mobile applications is one example, and I do expect it to continue to grow for at least 10 years. More sectors will surely pop up over time, just as many of the current sectors will shrink, or stablize to the point where development is not a high priority.
    - I understand general software/hardware concepts and the major universal programming concepts. I can learn whatever specific concepts need to be learned.
    - Timing was surely a factor. Those wily venture capitalists are at it again!

    While I haven't taken the path that you have, my story should be helpful. Now that I have the rest of my life to worry about, I may end up going back to school and majoring in math instead of CS. What I don't know in CS varies from language to language and can be learned on the job, while math is universal, and it can be a back-up plan if the doom-and-gloom phophecies of penny programmers come true.

    --
    Charisma is the measure of someone's ability to lie with a straight face.
  182. Re:There's only one programming language you need by mario_grgic · · Score: 1

    No, University of Waterloo, Canada

    --
    As the island of our knowledge grows, so does the shore of our ignorance.
  183. Focus on something that can't be off shored by tsandholm · · Score: 0

    I've spent 13 years teaching SVR4 Unix at a computer company, and the last 13 years managing, programing, tuning and troubleshooting Unix & Linux. Java coders are a dime-a-dozen, and easily off-shored. They may not write stellar, super-duper fast & secure code, but most management wouldn't know good code if they saw it. System Administration is something that's not easily off-shored, unless the data-center is off-shore as well, or you've got some exceptional data-center rats capable of following instructions, something like being able to vi a file without clobbering it. For the past twenty years, I've seen an alarming increase of bad code. I've seen developers trying to write a socket program, and not use the standard libraries to translate host & network byte ordering (htons, etc), then bitch that when they compile their code developed on an AIX PPC system onto an Intel their ports are all bass-ackwards. And these guys claim to be "network programming pro's". I see developers write perl scripts that read STDIN from the output of a command (via a pipe), and fail to check for EOF, or keep looping until they see a string that matches, not checking for error returns; only to proceed to consume system memory because the stupid program loops, and spawns 70000 copies of itself, ultimately taking down the whole server.
    Learning to program in C or Java isn't enough. You MUST understand the environment in which your code will run. How else do you plan on taking the best advantage of the underlying hardware? Ya, sure, Unix is supposed to be "hardware agnostic", you are supposed to be able to run your code the same regardless of the machine. Bullshit! Sure, a stupid little hello-world program will do fine, but when you've got an application that's spawning 32 children, each with an oracle connection and a few shared memory segments, and add it signal handling along with polled-selects, well, there is a difference between Unix distributions at that layer. The more you understand about the administration of a system, and HOW that system works, the better equipped you are to write applications for that platform. You'll be aware of the best way to structure your code, how the system will allocate memory for your program, etc., and this will put you in good understanding of how to optimize that code.
    Learn all you can about system administration. Not the basic useradd crap. Tear into the man pages for the platform, review every single manpage in section 2, 3, 5 & 8 (I'll presume you're already familiar with the section 1 commands). Tear into networking. Learn how to write a socket program, client & listener, then brach out & use polled selects and non-blocking IO (without dropping the system to it's knees). Try out the various system configurations for setting up things like drbd, heartbeat, software raid, xinetd, syslog-ng, etc. If you have an intimate understanding of the OS, and it's administration, that will make you a GOOD programmer, and this gives you a few options other than just being a programmer, you could be an admin, a consultant, a network engr., a security guru, etc.
    I think it's pretty lame the schools jamming all this Java crap at the students and shorting them on the theory of operating systems design. Remember Xinu? (great book!) I believe that you should be very good with C and pointers. How else do you plan on writing device drivers or system level services? And if you're looking for the most diverse and flexible environment to do all this on, choose Debian. If you're looking for ease of administration choose SuSE.

  184. Communication skills by adsl · · Score: 1

    Unless you want to be 100% a programmer I would spend time learning communications and presentation skills.

  185. Get practical experience by LongSpleen · · Score: 1

    The best way to increase your odds of being hired is to have practical experience in your chosen specialty. Degrees are nice but employers love to see proof that you know your stuff (and a college degree does not constitute proof). Choose a project that will showcase your skills and devote as much time to it as you can for a while. If you want a C++ job, write a cool C++ app.

  186. Foot in the door by Anonymous Coward · · Score: 0

    Take it easy there fella,

    You're schooling is only going to get your foot in the door with potential employers, and show them you know how to learn - it doesn't really matter what you've learned.

    Any employer that hires a graduate knows they're going to be spending their first few months training you in their own systems and practices, as well as whatever technologies they use. As has been said so many times before, if you know one language you can pick up the rest, as needed and when needed.

    So learn the languages you think are fun, build stuff you think is cool, if you enjoy what you do and are passionate about it that's a hell of a lot more important to graduate employers than exactly what you already know.

  187. A lot to learn by tknd · · Score: 1

    I only have 2.5 years of full time software engineering experience but in those 2.5 years I've seen and learned a lot.

    What seems to have troubled me from reading the article and user comments is that I do not feel as confident as I want to be in C, ASM and other related low-level programming topics.

    Good, that is how you should feel. What you will quickly find out in the real world is that there are very few masters of programming languages, a lot of mediocre programmers, and a whole boat load of bad ones. The best ones are the ones that are not proud of their skills and continually improve themselves. So that is lesson #1, ignore hubris and continuously improve your skill set or expertise.

    If you don't understand where to start, go dig up some of your first programs. Not the stupid "hello world" programs but the programs that actually did something. Read your own code you wrote years ago and be shocked that you wrote it. Hopefully you will understand that you could have written it better. Even the smallest details like variable name selection goes a long way. And when you're done with that, look forward and read someone else's code. Everyone likes to write new code because they don't have to read it...yet. The truth is we spend a lot of time in maintenance and improving code that could have been written better for different reasons (maintainability, bugs, design changes).

    How can I spend my free time in the next year to prepare to enter the work place with a proper toolbox of skills?

    Don't learn. DO. There is a big difference between learning about something and applying it. The easy part is learning. The hard part is applying and getting the experience. This is true for any topic not just technical things. There's a big reason why years of experience tends to trump all other factors.

    From what I have been told, there are more jobs for Java and Data Warehouse development teams compared to lower-level programmers.

    Go on a job listing board and look and investigate at what companies are interested in. Don't listen to what other people are telling you because they're probably speaking from their perspective and their desires. You have to figure out what you want to do. Call up the companies and see if you can ask them how they are using the technology. For example you will find most Java companies are not operating on plain J2SE but rather something like J2EE or J2ME. This is more than just Java, it is a set of other libraries and buzzwords that do other high level things for very specific problem domains.

    Figuring out the second part, what you want to do, is going to be very hard. No job description or even talk with interviewers is going to tell you what the job is like. The only full proof method I've found is to sit next to people and watch or observe how they operate or to take the job. That will show you what the job is truly like.

    As an undergrad, what skills should I be trying to attain now to further my employability in the future?

    I always say the following when I'm talking to my friends: If I could go back to being an undergrad, what I would do differently is not focus so much on my grades and my particular major--instead I would go back and minor or double major in a completely different topic to computer science like the social sciences, humanities, or business. I say this for a number of reasons: software engineers and even IT people don't spend all of their time in front of a computer with a text editor, a lot of time is spent working with people. The hardest problems I have encountered in the workplace were not technical in nature but social in nature. The most successful people in any industry, organization, or even group of friends are the people that understand other people and can communicate effectively.

    What I've responded to before were mainly technical questions you had. But now I will tell you that if you can understand and master what I've talked about in the last pa

  188. Well, it depends ... by Slasher+Dave · · Score: 1

    On what you want to do in your career. I mean seriously, have you thought about it? Game programmer? DBA? Internet/eCommerce? Device driver developer? Management?

    What you're shooting for will dramatically influence what technologies you will be using, hence the background you will need to do the job. Make a list of the top 3 IT market segments you would like to end up in and then find out what is needed to work there. A simple way to do this is go to Dice, and search on your target area. A detailed job description will tell you in a nutshell what your skill set needs to look like. I'd say that a good working knowledge of C/C++/ASM is important for any Java developer, but a much deeper knowledge will be required in certain market segments such as gaming.

    | My education has not been particularly difficult or time consuming to get
    | good grades, so I have spent my free time dabbling in topics and languages
    | that interest me (ie Multiple GUI Toolkits, Python, Linux).

    If you're working under a full course load and not finding it 'particularly difficult', then I'd say you're a very bright individual (good for you). However, this also means you're not getting your money's worth from your university (not so good for you). I'm sure there are other worthy subjects you can include in your studies that will challenge you appropriately. Try taking something that you normally wouldn't. Maybe a second language. I studdied some art history my last year of CS and had a blast. Your last year of CS is probably the most important because you have the opportunity to do some project based courses and test the theories you've learned.

    Don't underestimate real world experience. A coop/Internship (potentially with more than one employer) can help you get your bearings.

    Also, keep your options open. Don't assume that you will be in IT forerver. Keep your GPA up - this will keep the door open for a Masters or PhD or other professional school (ie Law, Medicine).

    Good luck!

  189. useful skills by hedrick · · Score: 1

    I wasn't impressed with the article you are referring to. The issue isn't programming language but breadth of skills. I work at Rutgers University. Our big applications are all in Java. But the really valuable skills for us have to do with debugging complex programs, finding obscure performance problems, etc. This means having a reasonable idea of how the OS, JVM, network, etc, work, how all the pieces fit together, and how you'd get a sense of how they are working. If your Java program starting slowing down, what tools would you use to investigate performance? What might you do? If you ran out of file descriptors, how would you fix it?

    It's certainly a good idea to have some experience with a variety of languages. If you know mostly Java, C, some script language like perl or python, and maybe something odd like Lisp. But it's more important to understand a variety of problem types and approaches. Even within Java you can use most of the OS features, do multithreaded code with synchronization, do a network client and server, use a database, etc. I would think that would be more important than to do trivial problems in every possible language. There's an interesting book on game programming in Java (Killer Game Programming) that comes to grips with a lot of systems issues in Java. (I'm not arguing whether you'd actually use Java to build a game engine.)

    Hardware still drives computing, so it's not a bad idea to look at the hardware/software interface. Linux is nice because it's a real OS where you can tinker with the source. Try to add some features to a device driver. Do us all a favor and implement a native device driver for some of the device types that are used on laptop computers and aren't yet supported. Or play with a robot. Or both.

    But I'm not so convinced that C or C++ are absolutely essential.

  190. Fuzzy Logic by Ilan+Volow · · Score: 1

    Get practice writing software for people who have fuzzy, ill-defined, and constantly changing business requirements that they themselves don't understand half of the time.

    --
    Ergonomica Auctorita Illico!
  191. Yes, and... by AiToyonsNostril · · Score: 1

    Emphatically seconded. Despite being a foreigner (in my US and UK jobs), I am the one who is always asked to write or proofread papers, mailings, ads, and presentations (and I make it a point to mention that in future interviews) and my emails are always in perfect English (proofread twice; three times if I have a migraine). This makes one valuable to coworkers, professional in written appearance and you don't even have to take a class (although classes and peer critique helps immensely).

    Also, public speaking. It teaches you to present yourself, your company, your background and your ideas so that they can be really appreciated for what they are. The same skills translate for interviews as well. If your career office does mock interviews - I cannot recommend them enough. Again, no class to take but very valuable.

    I also with the SQL rec upthread. If you are likely to be dealing with data, SAS has proven useful to me and is something you can learn in your own time.

    --
    "I'm not good. I'm not nice. I'm just right."
  192. Woosh by Anonymous Coward · · Score: 0

    think the moral of this story is that lying is /AWESOME/.

    Really? Because now she is his father's next-of-kin. Now SHE will inherit the fortune, not him. His attempt to impress her with his coming fortune resulted in her taking it away from him.

    Which would YOU rather have, one night with a beautiful woman, or several million dollars?

    Sheesh.

    1. Re:Woosh by Knara · · Score: 1

      The moral of the story is actually the time-honored "don't count your chickens before they hatch".

  193. More suggestions by mkcmkc · · Score: 1
    • Dabbling is good--keep it up. It's much harder to find time to do this later.
    • Play around with at least a couple of high-level languages. Lisp or Scheme are the canonical examples. Haskell looks interesting these days.
    • I wouldn't worry about writing programs in assembler per se, but it's useful to know conceptually how microprocessor instruction sets work.
    • Learn other parts of the tool chain: make, bash, gprof, valgrind, strace, regular expressions, wireshark.
    • When I was coming up, I read every man page on the Unix system I had access to. There's a lot more out there now, but the concept is still useful I think. Read, read, read, read, read.
    • Non-technical issues turned out to be much more important than I thought they would. I'd suggest reading every Dilbert strip. Quite a lot of those are motivated by things that really happen in the real world.
    Good luck.
    --
    "Not an actor, but he plays one on TV."
  194. google by tabby · · Score: 1

    learn how to use google to find some answers before bugging someone else or spinning your wheels for 2 weeks & putting the project behind schedule.

    Ok I have that out of my system now ;-)

    --
    I've experiments to run, there is research to be done on the people who are still alive.
  195. Indeed by Anonymous Coward · · Score: 0
  196. Recommendations for an undergrad... by Anonymous Coward · · Score: 0

    The first skill is curiosity. The second skill is research ability. The first skill gives you the important questions. The second skill gives you the important answers.

  197. Not a programmer but... by stewbacca · · Score: 1

    I'm not a programmer, but I would guess that it is just like most other professions. A degree is a piece of paper that says you paid attention and spent some money. Whatever degree that is in...congrats. Most employers, however, are realists, and realize that the degree only means you are either willing to work towards an end goal, went to a really crappy college and were handed a degree, or are pretty smart. The fact that you understand ANY programming language puts you at the top of the food chain for prospective employment in the computer science industry. So with that, expand your horizons OUTSIDE of computer/geeky things, to make yourself more well-rounded (and more employable at the same time).

  198. Giving people Advice is always dangerous ... by golodh · · Score: 1
    but here goes.

    First of all, realise that the critique in the article you refer to focused on CS students who don't really _know_ their chosen subject. Specifically:

    - being restricted to being able to connect Java components together like a plumber *without* understanding what makes those components tick in the first place, and what their strong and weak points are

    - not having a feel for what certain high-level instructions mean when projected onto hardware

    - being unable to understand, plan, and implement simple memory allocation constructs using pointers

    As a CS major, Computer _Science_ is your subject. Not specifically "coding". Apart from being competent at entry-level jobs, you should have sufficient background information to recognise, place, and absorb new developments quicker and more accurately than someone without your background. That's where the "science" part comes in. It really helps if you have a firm grasp of system architecture and understand how computers and even whole information systems consist of layers and components. Nine times out of ten a "revolutionary" change only changes one layer or component, and with it the appearance but not the structure of a system. Focus on structure, not details. You can always bone up on details, but if you don't understand the structure, you don't understand the essence.

    Being able to remain current (without being deluged by all the implementation details) ensures that

    (a) you will be able to spot where interesting developments are taking place and

    (b) your skills and knowledge won't quickly become obsolescent. Coding skills, especially those tied to a specific language, will become obsolescent with that language if they're tied to it.

    For example, dedicated C coders may have a blind spot when it comes to properly using (or even designing) object hierarchies or interacting objects. Dedicated Java coders may loose sight of memory management issues and may become fixated on "glueing components together" and "graphical interfaces". Dedicated Assembler coders may be so focused on low-level detail that they both fail to see the high-level logic of the software they're dealing with, miss out on object-oriented programming and understand nothing of e.g. correctness proofs.

    As a CS graduate you should have an overview in addition to specific skills because those skills will usually pale next to the specific skills of seasoned coders.

    Being able to recognise the underlying algorithms, datastructures, trade-offs, and fundamental limitations of new programming languages will aid you immensely in learning new tricks (languages, packages, concepts, systems), for very few so-called "new" concepts really are anything but old concepts improved or adapted to take advantage of new technologies.

    So, here are my suggestions:

    - look at http://en.wikipedia.org/wiki/Computer_science#Fields_of_computer_science and make sure you know what all of the terms referred to under "Fields of computer science" mean. Refer you your course material if needed. Ask your professors for reading material if needed. You _don't_ need to be proficient in all of them (so don't try), but you do need to know: what problems they address, what the approximate state of the art is, how quickly the field evolves, and what it's likely to throw up within the next 5-10 year. You should at least be able to explain the highlights of all those fields to an intelligent layman off the top of your head, even if you're prodded awake at 2 am in the morning.

    - some fields are more important than others. Since your major says CS *and* business, you will probably be required to talk to both "hard" IT people and business people. So: make sure to train yourself to see the core of problems from both points of view, and then present what you found. Both orally and in writing. Make sure you have a look at case studies of implement

    1. Re:Giving people Advice is always dangerous ... by EW87 · · Score: 0

      "The Game: Penetrating the secret society of pickup artists" by Neil Strauss Good place to start.

  199. More seriously by JanneM · · Score: 1

    More seriously, learning a second language (if you do not know one already) is a great idea. "good enough" coders are a dime a dozen; you're not going to distinguish yourself in that area. The vast majority of coding-related jobs are in places where the code and the computer system is not the point, but just a support function for whatever the business is really about.

    So, go for something different, a skill set that not everybody has, but that can be useful in your future company. A second language is good (if you're in the US, learning Spanish is not a bad idea). Learning economy, especially business-useful stuff like the basics of accounting is another good idea.

    --
    Trust the Computer. The Computer is your friend.
  200. Learn how to cope with large amounts of stress by composer777 · · Score: 1

    Some skills I wished I had learned in school were how to relax (meditation, exercise, etc.), and how to get through finals without caffeine and other crutches. Definitely learn how to cope with stress, because if you have any stress in school it only gets worse, and your body's ability to cope with it will drop significantly after you turn 30. Don't get too wound up or stressed out while studying, and remember to save some energy for a workout at the end of the day. If you are too exhausted from sitting in a chair for 8 hours to exercise, then that's a sign that you need to relax (take a yoga class, stretch, etc).

    Now that I'm off the caffeine (and quit smoking a few years ago), I find it amusing watching those who still indulge get wound up like two-bit watches every day. While I'm sure they think they're getting a lot done, it's interesting to watch the toll that such a lifestyle takes on people after a few years. Chances are you will be in a position where the sky seems to be falling every day, and your ability to handle it with grace, and to stay relaxed will have a large impact on your future.

  201. XML by spike2131 · · Score: 1

    XML is unglamorous and uninteresting, but you need to understand it. Its widely used in configuration files, and its the most common format for passing data around on the wire.

    We recently hired someone right out of a CS program who had never used XML, and our company had to send him to training for that. Seemed kind of silly to me that XML wasn't included in the cannon of Basic Software Development Literacy which all students must be taught.

    --
    SpyDock: Scientific Python in a Docker container
  202. You are going to school for the wrong reason... by dbc · · Score: 1

    ... if the reason you are going to University is to get a job. You should be there to learn how to think.

    Speaking as someone who has spent 20 years on the _other_ side of the interview desk, I care a whole lot less about what you know, than I do about what you can learn. Engineering is a problem solving profession. Show me you can think. Show me you know how to solve problems. If what you "know" is something that you can bring to bear on a problem in a creative way, good. If what you know is how to solve homeworks, buh-bye.

    I've intviewed people with an MS and a 4.0 GPA from a name brand university who, when given an interview problem, silently work out some answer, and without checking it, turn the pad around for me to see like I'm some T.A. who is going to check and grade their work. HELLLO... I'm not hiring you so I can check your work, I'm hiring you so you can check my work. And you get to check your own work before you present it to me. And most of all, I'm hiring you to invent things nobody has thought of before. Show me you can do that. If the university is not turning your brain into a tool for inventing, tell off your profs and transfer.

    Here's a hint for you. My favorite interview question: "Tell me about something that you taught yourself."
    Why? It demonstrates determination and ability to find answers for yourself, as well as demonstrating that you are a natural problem solver, not somebody who looks on an engineering education as a meal ticket.

  203. mix activities and align with goals, interests by Anonymous Coward · · Score: 1, Informative

    I've been out of college nearly 8 years now and have had a very interesting and quite successful career in software development so far.

    The most valuable experiences I had in college specifically toward my software development career, in approximate order:
    1. making friends also in Computer Science major or field
    2. specific Computer Science classes: introductory programming with emphasis on good style; operating systems; project class
    3. Computer Science teaching experience, including serving helper hours and giving lectures
    4. summer internships in software development, including giving presentations and writing papers
    5. making friends outside Computer Science
    6. entrepreneurship classes (including business and financial basics) and internship
    7. Psychology classes
    8. studying and interning in Japan

    If you are bright and can pick up stuff fast, then in school I would strike a balance between people skills (networking, teamwork, presenting, writing) and some technical foundation (low-level, high-level design, specific areas of interest). You don't need a lot of technical details in college other than good foundational classes which you most likely have already; instead save time for the long-term, value-add stuff like friendships, work experience, practice at communication, Psychology, additional interests that can help with positions in specific industries or simply help you stay sane by having a hobby.

    If you want to go to graduate school, then connections with professors will also be particularly helpful.

    I would use internships and first job(s) to explore what size and type of organization is right for you (this may also change as you age). I learned a lot from internships and earlier experience at larger organizations and used it to be more successful at helping startups and smaller organizations achieve their goals. For me it's hard to beat working in a small, highly talented organization with pleasant people and a good work-life balance.

  204. Re:Being able to talk to/analyze the customer espe by OwnedByTwoCats · · Score: 1

    I wish I had mod points. Good points all.

  205. Okay. by SatanicPuppy · · Score: 1

    So after you've picked up those languages, what then? Half the people reading this will never be more than code monkeys; it's certainly no use to them. Hell I've programmed in half of those (LISP, PROLOG, C) and nothing there is remotely useful to me in my daily life. In most cases there aren't really any practical applications for that stuff (C obviously being the exception).

    It seems more to me like pretensiousness than real need. Almost all of those languages have a very specific, very narrow, strength...I learned Prolog because I was working with automata, and that's the best language for that sort of thing. When I'm not doing that, it's useless, and most people will never move in that direction.

    I'd definitely recommend C, because it really does give you insight into what your code is really doing, and that does have benefits. Everything else though? Not so much.

    --
    ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
  206. languages everyone should know by gbjbaanb · · Score: 1

    6 languages everyone should know... C, obviously - it is as close to hardware as you want to come and gives you a good understanding of what really would happen in other langauges under their syntactic "easyness".

    But the others... well, maybe, but only from an academic perspective. You'd want to know SQL for definite, and a scripted language (who cares whether its PHP, Python, Javascript or VBScript the point is you get to see how powerful its flexiblity is and how weak the features that give it that flexibility is)

    Smalltalk is a good one, but I'd say any OO language is good enough nowadays, you don't need the holy grail of OO to understand it, you'll only get pissed off with lesser OO facilities.

    His list is the ultimate set of languages to describe different ways to program, but I think learning "real-world" languages to get a slightly lesser understanding would be more worthwhile. In academia I'd be more than happy for people to learn those, but if you're adding to your skillset to become more employable, go for C, C++, Java (or C#, same difference), SQL and Javascript.

  207. Trent Minion! by Sir_Sri · · Score: 1

    It sounds to me like you're at Trent.

    First: Take your concerns to professor patrick, we all read /., the article you mentioned has ended up electronically and in print on his desk, not that this is the first time those concerns have been raised. They were even raised (by me and others) before and after our curriculum change. Second: Ignore EVERYTHING stephen says, his rare occasions of usefulness are not worth his 99% complete cluelessness. Ditch the business side of things. No this does not apply in general, it does apply at Trent. Do not aim to be a manager, aim to be useful and get promoted into management because you have skills.

    Lastly: The most useful people we have, in order, Are Jamie, Brian H. And Jim. Talk to them. They know what's going on and what will get you directed towards useful, employable skills. Jamie's course work is by far the most directly employable, but both Brian H and Jim have years of industry experience, and know what's going on.

    If it makes you feel better (and it should) our graduating class from last year are mostly (90% of them, literally) doing quite well with respectable jobs and prospects for advancement, the ones who aren't doing well tried to do things they weren't really interested in, and that's a matter of personal growth.

  208. It's a Lottery by logicpaw · · Score: 1
    How well the skills you learn in school fit the job market is almost a random lottery. A large subset of the courses a student takes usually turns out to be completely irrelevant to getting and succeeding in their eventual job position, but that subset might turn out to be almost completely different for two different students. One company will tell you that social skills are important, another company will pay a collection of social misfits just as much or more. Some company will tell you that communication skills are important, another will have a bunch of programmers who kahnt speal. Some company will be looking for people into some highly organized software practices fad, another will hire people who can get the job done by poking hex machine code into the debugger. Some jobs barely require any skill at basic arithmetic, others may require an intuitive knowledge of linear algebra and the calculus of complex variables. Etc. Etc.

    Look for situations where the lottery odds are tilted and try to use that tilt in your favor. Talk to a large sample of people working in the type of industry in which you are interested. If 2X% are using some language, but only X% of students are studying that language, then look into learning that language as one way to help your odds at the job lottery.

    Good luck!

  209. CS Advice by corporate+zombie · · Score: 1

    All the talk on which languages to learn is missing a fundamental point. Computer programming isn't about the language you program in. It's about the data structures you use. If you want to be a good programmer get good at composing and transforming your data. Learn (inside and out) all the basic structures. Keep learning new ones. Not that you'll build them from scratch yourself but you'll know what's going on when you come across one in the wild. Throw in some analysis of algorithms. Sadly I couldn't analyze something these days to save my life but you'll know the stock answers [True story. I once had a (self-taught) programmer reporting to me use a bubble sort for several thousand rows of db extracted data. When I asked why he didn't sort using the database or sort() he replied that he didn't know how those worked internally so wrote the one that he knew. :/] and be able to make educated guesses.

    Once you know the structures and some algorithms then learn languages and implement what you already know. You'll pick up new tricks from each language as you go and be able to pull those out in different language settings when you need.

    The poster(s) that mentioned learning the business end of software engineering, proposing, designing, herding-the-cats, developing, and not getting stuck in ongoing support (you want to be good enough to always be on the next project and not the guy stuck on phone/case support ten years after the project has been out) hit the nail on the head. There's a lot more of that than there is of coding (or at least it will feel that way). To get good at the above items you'll need to develop those writing, speaking, and presentation skills.

    Be sure and learn about revision control systems (and the data structures and algorithms involved :) and comment your code.

    All the rest is just putting up with politics large and small.

        -CZ

  210. Step 1: buy an Apple ][ off of eBay. by Rimbo · · Score: 1

    Step 2: Write a simple game with graphics and sound. (It doesn't even have to be good).

    You'll need to teach yourself some 6502 ASM to write anything of note, especially for sound. You can't learn ASM without learning architecture, and the 6502 is a very simple, clean design.

    MIPS-1 is a better alternative for modern superscalar/pipelined architectures, and it's also a load-store architecture (vs. the accumulator arch. of the 6502), but the system's size being what it is -- 64kB, simple graphics (16 colors low-res, 6 hi-res), 2 general-purpose registers, 8-bit everything -- will allow you to really explore a variety of different things. It keeps things simple.

  211. Dara O'Brien's view by jamie(really) · · Score: 1

    The great punchline of the university system:

    (New hire): I have a First Class Honors Degree* degree in Engineering!

    (Everyone else): Good for you! Now make the fucking tea.

    * That's like a 4.0 for you yanks.

  212. SQL by somaking · · Score: 2, Insightful

    Get some SQL under your belt, and maybe take a databases class. Its everywhere in the job market, but schools don't usually promote it.

    Also, learn the LAMP stack if you want to be a developer. Statistics knowledge is very marketable. Take some classes.

    Most important: make sure you enjoy what you're studying / doing. It doesn't have to be your ultimate passion of the moment, but have long-term goals that fulfill your passions, dreams, ideals, etc.

  213. The Top Skills You Need by the+eric+conspiracy · · Score: 1

    Take as much of these as possible while in college:

    1. Writing.
    2. Mathematics.

    Everything else is vocational and can be picked up on the job or by self study.

  214. Don't listen to other developers by Anonymous Coward · · Score: 0

    Forget anything the developers have told you and get into management. Why? Management owns the developers.

  215. Learn how to debug anything by raygunz · · Score: 1

    Get the book: http://www.debuggingrules.com/. Full disclosure: I am the author. But it was IEEE Software Magazine that said this should be required reading for all technology students. And unlike most other tech books, this one's cheap, funny, and a quick read.

    --
    "Debugging" by Dave Agans - the perfect gift for your favorite imperfect engineer.
  216. Free software by anpe · · Score: 1

    Get involved in an Open Source project, Summer of code or whatever interests you. Try to gain some experience as soon as you can,
    specially on fields you don't feel comfortable with.
    Try to target an active community, you'll learn by observing how people behave on mailing lists, how people react to code, criticisms etc.. A major OS project (Linux, Mozilla, Ruby) would be great.

  217. Communication skills are vital in any profession by businessConvert · · Score: 1

    The ability to communicate through writing and spoken words are required in any field, transferring your ideas and thoughts to another is part of your professional life as well as your WHOLE life. You were taught to communicate with computers through code, you will undoubtedly need to communicate with managers who don't share your expertise, users who don't have your level of understanding, fellow developers with varying degree of technical understanding. As much as we all wish to shut the door, code the next super killer application, and release it to the world and be showered with praise and reward, in reality, there is much more work involved in convincing people and gaining trust. Think about this, are you employed to write only code? Aren't you there to create a solution to a problem?

  218. Large Projects. by jellomizer · · Score: 1

    If you want to prepare yourself don't get caught up on languages, OS's and technical stuff. Focus on being able to work on Large Projects. Start, Middle, and End a full life cycle of a project. School tends to focus on skills. A large project that takes months is a good learning experience. It teaches you that it is near impossible to make your code ultra efficient and even fully documented. You will learn what corners you can cut and what you can't and when users get back telling you what you though was your ultra uber program sucks. Gives you some realization knowing how to make real maintainable code. Not CS Get an A+ maintainable code.

    --
    If something is so important that you feel the need to post it on the internet... It probably isn't that important.
  219. Answers by Anonymous Coward · · Score: 0

    As a CS student, you should be an expert in Java. And C. And a modern assembly language.

    You should have knowledge and substantial project work in LISP. And C#. And various interpretive languages.

    You should know HTML. And CSS. And how to build a compiler, and operating system, and a relational DBMS.

    You should also follow up and be expert in other areas of your own interest.

    It shouldn't be easy, even if you're damn smart. It should be a challenge, and it should consume your life. That's what school is all about. Get with the program and make it happen.

  220. Get into an embedded project by ComSon0 · · Score: 1
    Just a few years ago I was faced with the same questions and doubts as a computer engineering major who had been taught to code in C++/Java and wanted to get into low level work after graduation. My grades were not the best (~3.0) but I was technically curious and learned fast. I just have one suggestion, and it will change your possibilities from doing something you don't want to do (high-level coding) to something you DO want to do (low-level coding):
    -

    Get into an embedded system (or another low-level prog) project

    I was strongly considering dropping off engineering school before joining our solar car project. It completely consumed me and I quickly became the electrical lead, allowing me to work on a lot of cool little projects: telemetry, radio comms, driver control and interface, etc...
    Not only I had loads of fun, traveled around the country, made a lot of friends, and learned tons of leadership and engineering skill, but I also got the one job I wanted doing what I wanted because I could demonstrate that grades don't show the entire picture.

    I honestly answered the following question from the VP of engineering during the interview for my current job:
    "Why are your grades this 'low'? Our other candidates average a 3.5"
    My answer:
    "The day only has 24 hours, I had to make a choice of how to be better prepared for the work I wanted to do, so I chose to stay in lab and finish things than to better prepare for exams".

    She later told me that's why she hired me. That happened in April of 2005, so it's not some old man's tale as I also graduated in April 2005.

    I don't know what your grades are, but be passionate and honest about what you really want and go after it! In embedded system engineering (or any other low level stuff), you need to show in your interview that you are willing to be hardcore.
  221. I've taught computer science at universities by ralphbecket · · Score: 1

    Unfortunately the majority of people obtaining a CS degree get stuck on some particular tool (e.g., Java) and spend the rest of their career suffering from tunnel vision (every problem looks like a nail). Your goal should be to learn enough of the basics and theory that you can pick up the textbook for any given technology and be up and running within a week or two. Here's a list off the top of my head of things you should understand:

    [Hardware]
    The fetch/decode/execute cycle
    Instruction decoding
    Pipelining, out-of-order execution, etc.
    Caches
    TLBs
    Busses
    Interrupts
    Discs
    Networking hardware basics

    [Software]
    Programming language paradigms: imperative, functional, OO, logical
    Finite automata
    Grammars and parsing
    Data structures: lists, queues (FIFO and priority), dictionaries, sets, trees, hash tables
    Algorithms: sorting, searching, etc.
    Memory management and garbage collection
    Big O notation
    Type systems (in particular, Hindley-Milner style) and type checking/inference
    Basics of security and encryption
    The relational model for databases
    Concurrency: pi calculus (or some relation), locking and lock management, software transactional memory
    Distributed systems: data exchange, error handling, establishing communication channels
    Queueing theory basics: Markov chains etc.
    Programming language implementation basics

    No doubt I've missed a bunch of important things off the list.

    All of the mundane stuff about learning various programming languages and toolkits should be seen as a means to explore the above topics, not as an end in itself.

    Hope this helps,
    -- Ralph

  222. Languages are not hard, data is hard by sgartner · · Score: 1

    I've been programming for 35 years and this is what I've learned: Languages are not hard, data is hard.

    By the time you finish school and get a couple of years into your profession, whatever you decide that will be, the languages will have evolved or possibly even changed completely. Spending time worrying about what languages you are using in school is like worrying whether you can operate an iPod. It doesn't matter because by the time you get out of school the iPod will be extinct and you'll have to learn how to operate the next thing (undoubtedly starting with an i).

    So, what you should be doing in school is learning the things that don't change: algorithms, data structures, methodology, problem solving. Seek out those professors that are providing problem "contests" and get involved. Find a public source project that is working on something interesting that you've never done and jump in. Get a team together and join one of the online programming contests. Anything you can to get exposed to as many different methodologies and as much data as possible.

    You will need to pick some languages (and your professors will force some languages on you), but don't balk at learning any new language. Also, it is my opinion that you should learn at least one assembler language (but it hardly matters which one) because it will force you to look at data in a very different way from programming in a higher-level language, even C. Understanding how things work at the lowest level can only help you to figure out problems later.

    Some may argue that learning a slew of languages will cause confusion, but I haven't found that to be the case. I have learned, and used professionally, upwards of 22 languages (so far) though I currently only use about 4 on a weekly basis (PHP, C#, XSL, JavaScript) and maybe add another 3 or 4 that I use occasionally. I didn't learn a single one of these when I was in school (they didn't exist).

    So the bottom line here is that flexibility should be your goal. Try to learn in school the things that are common to all software development. Be a generalist until you know what you want to do for the first few years of your professional life, then become a specialist in that (and while you are working those first few years keep an eye to what you want to work on next). Don't ever assume that you are done with your education.

    My favorite phrase is: when you stop learning, you start dying.

    1. Re:Languages are not hard, data is hard by sgartner · · Score: 1

      And, of course, on re-reading it I realize that I should have taken more math in college. I only have 25 years of experience, not 35. Oops.

    2. Re:Languages are not hard, data is hard by sgartner · · Score: 1

      I have 35 years experience. I agree with your general conclusions - But not necessarily the (PHP, C#, XSL, JavaScript) bit. You don't agree that I use those four languages on a daily basis? Sorry, but that's what they currently pay me for. I wasn't trying to imply that the parent needed those languages.

      You did not miss too much from 25-35 years ago, unless you like Fortran or punched card/tapes, or the need to do a low-level format to put the blocks on a disk before it was usable. I'm afraid I did not miss Fortran (both IV and 77) or dropping a stack of punch cards on the floor while loading them into the reader (which I'm happy to say I only did once). But I never had to put my own programs on punch cards, thank goodness, just use them to boot stuff in the computer room (mainly a monster IBM laser printer). I did just miss washing machine sized 1Mb hard drives, and entering machine code using toggle switches (my university still had them, but had just barely stopped using them for assembler classes). Boy has the world changed in the last 25 years...
  223. It won't teach you high-level by SanityInAnarchy · · Score: 2, Insightful

    Try going from C++ to Ruby or JavaScript. Possible, but there's a lot of things that it will take a long time to wrap your head around. (Closures being a simple example...)

    But for a real challenge, try going to Erlang, Haskell, or Lisp. Of those, Haskell is probably going to be the weirdest, but I don't have a truly thorough understanding of Lisp yet.

    --
    Don't thank God, thank a doctor!
    1. Re:It won't teach you high-level by Bluesman · · Score: 1

      The fastest way to understand Lisp is to write a Lisp compiler.

      This would be my advice to the original poster anyway. Write a compiler that compiles down to machine code. Play around with Lex and Yacc or write a recursive descent parser in Lisp, think about the different ways to reserve space in memory for data structures and objects, the difference between the stack and the heap, and the limitations and requirements for run time libraries that different language features impose.

      Once you've done that, you can easily understand the design decisions made in Java and other high level languages, and things like closures and continuations will no longer seem like mystical abstract concepts.

      --
      If moderation could change anything, it would be illegal.
  224. Learn to use real power tools by Fujisawa+Sensei · · Score: 1

    Try writing skills for documentation, and emails. Developers with good writing skills, like spelling, are in high demand. Suits also love to reward engineers who are good at Power Point with things like promotions and raises. Being able to deliver a good Power Point presentation to the Suits gives you a edge over the cheap guys in India.

    You might also want to study up on marketing and sales. Remember you are the product, and you will probably never stop selling or renting yourself yourself through your entire career.

    --
    If someone is passing you on the right, you are an asshole for driving in the wrong lane.
  225. Technical skills as important as people skills by Besna · · Score: 1

    You'll mostly get advice to improve people skills--the technical stuff is just as important.

  226. Money or Personal Satisfaction? by Tablizer · · Score: 1

    I've found that one generally has to make a choice between money and personal satisfaction. If you like fancy cars, fancy houses, and the prettiest women; then I suggest you look for where the demand is. Otherwise, pick what you like. If you like low-level stuff, then go there.

    Note, however, that offshoring may increasingly remove opportunities for low-level programming because its usually cheaper to define the requirements and send them off in a fairly clean requirements doc to the 3rd-world. You may have to bid low or move to another country to compete with 3rd-world PhD price levels. Or, move into project management where you manage offshore teams instead of compete with them at the tech level. You'd become a liaison between on-shore management and remote tech teams.

    And, keep up your people/social skills. Offshoring magnifies the need for that. If people don't like dealing with you personally, then they are more likely to settle for offshored labor.

  227. game programming... by HelloKitty · · Score: 2, Insightful

    you get paid like crap, it's really hard, schedules are very tiresome/stressful.
    you do it because of all the really cool shit you learn, and the opportunity to hang with artists.
    since there's artists, you can snag a really cool wife, before you burn out and quit the industry.

    that said, i'm still there, and like it. it is really interesting.

    1. Re:game programming... by ChocoBean · · Score: 1

      did you manage to snag a really cool gamer wife yet? =)

      i went to PAX with my husband for our birthdays last year....one of the funnest things we've done for birthdays =D

      best of luck to you~!

  228. Don't worry by nwbvt · · Score: 1

    There are plenty of college graduate level jobs for Java developers out there, and skill in that language (note that there is a big difference between skill in the language and being able to write a hello world swing application in it) will be in demand for some time. Java is the new COBOL not only in the sense that it is clumsy and somewhat outdated, but also in that it is the default business application development language. Also remember that after graduation you will be a newly graduated student. You will not be expected to be a guru in the software world. The notion that many seem to have that fresh graduates from college should be as qualified as professionals with years of experience is just ridiculous.

    That being said, throughout your career you will be constantly learning new skills. You will have to learn new languages and new paradigms, so you might as well start now. Hopefully the main thing you took from your CS classes was the backing theory (not to mention mathematical skills) that makes learning all that possible. The problem is with some schools that seem to be nothing but Java/C#/whatever-shops whose graduates have a very limited knowledge of anything outside of that one language.

    --
    Mathematics is made of 50 percent formulas, 50 percent proofs, and 50 percent imagination.
  229. books by ed.markovich · · Score: 1

    Sorry if this is not a direct answer to your question or seems like a shameless plug, but... I wanted to make a reading list for new programmers a while ago (because I ended up recommending the same books over and over to my friends and people I work with) so I started this: important books for programmers. Unfortunately I never had time to complete the writeups as to WHY I think most of those books are key, so basically the above is a list of links to books I read and thought others should too. I am mainly a C/C++ programmer nowdays so the list is skewed that way but I tried to make sure the fundamentals are covered as well. Feel free to contact me if you want to know more about why a specific book was chosen.

  230. Systems or Business Applications? by kbahey · · Score: 1

    Depends on whether you want systems type job, or application type jobs. Datawarehousing falls in the business application domain. Java is mostly for business applications too. If that is what you want, then as others said, get a coop job to get a feel for what work is like. If you want to do device drivers or systems level things, then you'd better do something about it.

    In all cases, having a tech job means that you continue to learn as long as you work in the field. What you know now will be obsolete and that will later be obsolete.

    After a while, you may get bored from coding after doing it year in and year out, and want to do other things. The desirable skills are people skills, team building, supervisory skills, organizing, written and verbal communications, presentation, interaction with customers, ...etc.

  231. Excellent web page on this by X · · Score: 1
    --
    sigs are a waste of space
  232. Be Passtionate About It by perlith · · Score: 1

    (Almost) anything technical you need to know can be learned on the job, provided you have a basic foundation of knowledge.

    Whatever it is you decide to do, be passionate about it. If you enjoying writing scripts, tell them why and what you've done. I enjoyed data analysis, and was able to talk in great detail about an independent project I did for a data mining course. The passion will show when you talk with potential employers / grad schools / other opportunities.

  233. The Bare Minimum by Gribflex · · Score: 1

    I would say that the following things are the bare minimum:

    1. Know how to program using one 'core' programming language. (C, C++, Java, C#, etc. Something commonly used for application development.)
    2. Know a scripting language. (Python, perl, ruby, etc.) Know when you should use a scripting language or a core language.
    3. Know how to use version control software to at least check in, check out, synch to latest revision and revert.

    If you do only this, and can demonstrate to a potential employer that you know how to do these three things, you will be employable. If you can't do these three things, you will have a lot of difficulty getting a job.

    After that, focus on:
    4. Learn to communicate well. Be able to comprehend written material, write coherently, and speak effectively.
    5. Knowing how to branch and merge code in source control.
    6. Develop something real using both the core language and a scripting language.

    This stuff is great to know. It will help you land a job (because you can demonstrate that you will be useful) and will put you quite a bit above the other new grads when you start working. Someone who just does the first three is a solid hire that has a lot to learn. Being able to do 4, 5 and 6 will make you look awesome compared to the average grad. This material is most useful after you've been hired.

    Next:
    7. Try to develop a thick client application with a gui; a command line application; an app for windows; an app for nix; a web application; something that uses a database; something that reads and writes files; something that works across a network.
    8. Redo the above applications in a language that you don't know. Spend time thinking about what's the same, and what's different between the two languages. Why would you choose one over the other?
    9. Go read some books on design patterns and best practices.
    10. Know how to perform basic operations on a nix machine, a windows machine, and a mac.
    11. Brush up on your 2nd year Comp Sci material. This will help in most interviews.

    This section will help make you a flexible dev. If you do even half of this you will be able to tackle 90% of the problems that a new grad hire will face in their first job.

    That's it.

    I know that people will look at this list and think 'Well, that's a stupid list, everyone should be able to do that.' The reality is that most new grads can't. I've considered over 300 resumes in the last three years, and interviewed ~50 candidates; maybe 20 of those people met the first three requirements.

    Even if you can just demonstrate the first three items, and somehow prove that you have some brains in your head (marks won't help with this, sorry) you will be hired. I promise.

  234. Try a different approach.. by pnewhook · · Score: 1

    You sound like you are going beyond what you are being taught which is a great approach.

    Given that you are in third year, instead of just picking up extra skills randomly, why not scour the companies and find out where you want to work, who you want to work for and what you want to do.

    Once you find a few viable companies and positions, see what skills their job postiongs are asking for, or contact their HR deparments directly to get the information. Once you find what they are looking for, make sure you have those skills, then figure out the best way to demonstrate you really have those skills to an interviewer.

    You are probably going for interviews in less than a year. This gives you about the right amount of time to target the job you really want as opposed to just applying around and taking the best of whats offered.

    --
    Tesla was a genius. Edison however was a overrated hack who liked to torture puppies.
  235. nunchuku skills, by skydude_20 · · Score: 1

    bow hunting skills, computer hacking skills... duh...

    --
    Jesus saves souls and redeems them for valuable cash prizes
  236. what is your goal? by samantha · · Score: 1

    Almost nobody programs assembler anymore so I wouldn't worry about that. Writing a few small to medium programs in C or understanding an contributing to an open source one is more than enough of that. Unless you are headed for something close to the metal I don't see that any more knowledge of C would be useful. Besides it is pretty darn simple as languages go.

    If you are heading out to get a j-o-b then knowing Java, Python, Ruby and or C# is going to mean a lot more than C. What kind of job? Most of the jobs are either Java or C# numerically. But there are an increasing number of python jobs and a small number of Ruby jobs. If you ask mean both of those are a heck of a lot more fun to hack in. That aside what kind of programs, systems, environments charge you up? Tailor your skills for what you want instead of trying to make yourself a generic software shmoo.

    If you are young then I think you should consider Paul Graham's advice on doing a startup rather than immediately become an employee.

  237. Another Quality course by thoglette · · Score: 1

    My education has not been particularly difficult or time consuming to get good grades,
    That's a worrying sign. Another "modern university" concentrating on "marketable skills" no doubt. No wonder the IEEE considering making a MEng the "entry level degree". Sigh! To summarise some other people the options include
    --
    -- Butlerian Jihad NOW!
  238. As someone who's hiring... by Sarusa · · Score: 1

    We see lots of gawdawful candidates.

    Ideally you would: Start with a semester of python - it's easy, it's fun, it's very productive and readable, and if you can't do this, go home. Then we throw you into C so you can see what's making this all work, to have some appreciation for low level and managing memory, and to make you realize how easy you had it. After that, C++, Java, whatever. You should know how to write well, how traditional software development works, how agile software development works, and how version control works.

    You should have designed and implemented several projects from start to finish. This is possibly one of the most important things - all the classes in the world won't help you if they don't involve full projects.

    After that, well, then it depends on what you want to specialize in. Java programmers are always in demand if you really want to be toiling on projects with legions of interchangable monkeys who are dumber than you - it really is the new COBOL, designed to let lots of idiots work together without doing too much damage. I know some fantastic Java programmers, but they're real exceptions. C# is quite hot these days if you like apps stuff. Embedded Linux is extremely in demand. Web devs seem to be doing pretty well.

    You personally seem to be doing quite well - I thought the Java screed missed the point in that it wasn't the Java that was the fault, it was the lack of any C or C++ or ASM to go with it. If you're not comfortable with C, you probably want to learn some more of that - it's still the language of choice for systems, and small and clean enough that you don't have to fight it much while learning concepts. As someone who is fairly good at C and C++, I am going to say that you will waste so much time learning and working around C++'s ugliness (instead of getting things done) that it's not worth it unless you think you will be doing a lot of it.

    So a bit more C, do what's fun and *design and make some products from scratch*. Polish some of them up enough that you would feel proud if you released them. The problem solving that goes with this is the single best skill you can have, is what separates the software engineers from the programmers, and is one of the best ways to get a job. I walked into my interview at this company with a pile of things I'd written (some released) on my own and was pretty much hired on the spot, and if more interviewees would do this we would be likely to hire them on the spot too barring any glaring issues.

    I also can't say strongly enough that going for Java, DB, or Data Warehouse stuff just because you think there will be a lot of jobs in it is the worst mistake you could make if you don't actually like doing it. It may be a good living, but you're too young to do something that soul-crushing on purpose so soon. There are lots and lots of jobs for software engineers who are good at what they do - pick what you want to do and get really good at it and have fun and a quite comfortable living will follow. It's the code pigs whose jobs are at risk for outsourcing, not people who can actually solve problems.

    1. Re:As someone who's hiring... by Sarusa · · Score: 1

      Sorry, rereading this I sound more hostile towards Java than I really am. Especially since 1.5 I think the language itself is quite nice for things like the interoperability and especially for the amazing sandboxing, but it's undeniably the language of choice now for really bad and mediocre programmers (unless you want to argue for Javascript or VB, and I won't press on that).

  239. Repeat After Me by Lord+Kano · · Score: 1

    P-E-R-L, Perl Bitches!

    Seriously, as an undergrad you need to understand IT fundamentals. Like how data structures work. How memory allocation works. How sockets work. How debuggers work. If you understand the fundamental concepts, you can learn anything else.

    Unless you have a rich uncle who will guarantee you employment when you finish school, you need to have as broad a base as possible. And something that's invaluable is getting yourself an internship. It's experience that means a lot on your resume. If you do a good job, it's a foot in the door. Many employers will give higher priority to someone who has interned with them and has a rapport with their existing employees.

    Also, you'll do well to learn which professors know what in the hell they're talking about and try to only take classes that they teach. You will learn much more from a professor who knows more than you do.

    --
    "Hi. This is my friend, Jack Shit, and you don't know him." - Lord Kano
  240. Excel Skills by LittleBigScript · · Score: 1

    You must be good at creating spreadsheets. Spreadsheets hold all important information.

  241. Learn what you enjoy by Fred+Nerk+Sen · · Score: 1

    If you are to go places you will enjoy learning. University will probable be the last time you can do it full time, enjoy it. If you are lucky you will be able to take subjects from all the schools, pick the topics of interest and take them. In my case I got a lecture from the head of the engineering department telling me "no more" because I was devaluing the engineering degree. Fortunately the other departments didn't stop me. The ones I enjoyed most, how to program these new fangled things called computers. Oh and more maths.

  242. College, not trade school by Alchemist253 · · Score: 1

    I expect that many on Slashdot will disagree with me, but I will voice my opinion anyway.

    The University (or the College) exists as an intellectual haven, a location for like-minded individuals to congregate and exchange ideas in order to advance human knowledge. While the credential that one receives upon graduation is certainly important (and usually helps career development), it is not the primary (or even A primary) motivation for attendance.

    If your sole interest lies in getting a job, there are institutions that exist for this purpose; they are called trade schools. While many look down on them, they are perfectly legitimate entities that simply serve a different role in society. If you find the idea of transferring to one unpalatable, then I advise you worry less about your employment.

    In my experience there are two facts true about most college students. First, a great many will end up in a career largely unrelated to their field of study. Second, those who have difficulty finding a job tend to be those who focused too narrowly in their studies and thus lack flexibility.

    So, what specific advice would I have for you?

    1) Read things not related to computers: the New York Times, James Joyce, Shakespeare, H.G. Wells, Stephen Hawking, or whatever your choice of source or author may be. It is fine to read computer books (in fact, I am currently giving myself a refresher on database theory), but computer books will not teach you how to communicate, nor guide you when you meet an inevitable obstacle in the real world. It is worth noting that all but the most menial jobs require good communication skills; I have personally seen a worse scientist receive a professorship simply because the better contender was ineffective at explaining his research.

    2) Get to know many people, especially those outside your field. Laymen can often provide insights into problems that would never have occurred to "experts." If nothing else, you will build a network of friends to whom you can turn when searching for career options.

    3) Take classes outside your field: learn Chinese, or study early modern Christianity, or take up political science.

    4) Relax, and remember that programming languages change rapidly, even fundamental design principles change. You can, and will, evolve your skill set to match. It is more important to now gain wisdom about less ephemeral topics.

    Take the advice for whatever you feel it is worth.

    1. Re:College, not trade school by Anonymous Coward · · Score: 1, Insightful

      I'd concur with a lot of the sentiments here:
      1) read stuff outside of the field. Find some *good* fiction, (I spent a while reading the classics of the 20C), read the Art of War, read Machiavelli, read a Brief History of Time. Anything, but make sure it's not trash.
      2) Sit in on any lectures that interest you. Both in and out of your field. You won't get a chance to do this for a little while.
      3) Spend some time learning different types of language - imperative languages is probably all you'll ever probably be paid for, but knowing about functional programming, logic programming, type systems, etc is invaluable. A course on Principles of Programming Languages is something I wish I'd done.
      4) Don't forget to see people outside of the labs. Your social network is quite important, especially when you leave.

  243. OT: wouldyoulikefireswiththat??? by Anonymous Coward · · Score: 0

    How did this misspelled tag make it to the front page?

  244. Depends on what you want by terjeber · · Score: 1

    Depends on what you want. If you want to make money developing software, systems programming is the way to go. That is where the money is, but it may not be as "fun" as other programming. Reality however is that no matter what job you get, most of it is going to be "dumb" routine for most of the time anyway, so I wouldn't worry too much about how fun things are.

    So, for money as a developer learn Java, Oracle, DB2, Web services etc. That will get you the decent paying jobs in the short run. Make sure you are a generalist though, what is hot today is cold tomorrow. Well, except for Oracle and DB2 that is.

    More importantly, if you want to make real money, is to learn something that has nothing to do with technology. Technologists (OK, geeks) are a dime a dozen these days, and getting cheaper by the minute. What the industry is seriously lacking is geeks with other skills. Social skills perhaps :-). Not really joking. Take classes in public speaking. If you work in the private sector you'll make more money teaching people technology than actually working with it. Learn something about business and economy. A sales engineer (a technology savvy person who can convince people he knows stuff and that his stuff is better than the other guy's stuff) makes twice what an engineer does, or even more, and he works less. A lot less. He also has a lot more fun.

    The hardest thing to find in technology is someone who really gets technology and can communicate this to others. Sales. Teaching. Evangelizing. They all pay better than the pure technology job, and it is also a job you can have past forty without going insane. If you like your self and want a family, make sure you don't end up coding past forty. It's not worth it.

  245. People Skills by kramer2718 · · Score: 3, Insightful

    1) Learn how to manage conflicts. They are guaranteed to come up. 2) Communicate technical ideas well to non-technical people. Will your manager understand the technical details of your job? What about his manager? 3) Lean to present well. What better way to impress many people at once? 4) General Problem Solving Skills. A competent technical interviewer is likely to test you on this and be more interested in your performance than he is in you remembering the exact syntax in some language or some details of some library (although you should know those things to some degree). 5) Be generally eloquent and friendly The social aspects of work are often ignored

  246. Don't enter the workforce by wikinerd · · Score: 1

    Don't become an employee unless you just want to understand what being an employee means. You should become an independent consultant. And yes, it's easier than it sounds. You can find initial clients through professional associations and conferences.

  247. gnucash by wikinerd · · Score: 1

    Know how to balance your finances, plan, budget, etc.

    I second this. And knowledge of a software package can help you a lot. I learnt to use simple bookkeeping software when I was 13-14 years old, and more complex software 5-6 years later. This has helped me much. A nice package you can try is GnuCash.

  248. Don't worry too much - just learn what you can by aenikata · · Score: 1

    In the end, C++ is a valuable skill for a number of areas - 3D, games, driver development, etc. However, for most web development it's almost useless, and there are a LOT of web development roles around. Equally, a lot of the bespoke business development requirements (which also account for a significant proportion of real-world vacancies) are generally more focussed on database accessing and so on. You look at Slashdot and the like and you could think that you should learn Ruby and C++, but if you're mainly thinking about a career, the thing to really to is to look at the job market in your area and see what skills are actually in demand. Like you I've learned some C++, and have a reasonable understanding of memory allocation and so on, but am not as comfortable with pointers as I'd like. In practice, I've had to stay away from a couple of bits of code at companies I've worked with, but it's not been an issue. VB, ASP and .NET skills have been the main things I've needed, and, looking around, most of the well-paid jobs in my area are more interested in .NET (C#) than C++ now anyway. I more want to be more comfortable with C++ for my own sakes than because it's required for my career. Just as I want to know more about Python and Ruby (especially Ruby at the moment, since I like various aspects about Rails) for personal satisfaction rather than for career reasons. Of course, if you want to get into games development, then learn C++. Learn to use DirectX and so on. Focus on those skills. You may be able to get by with XNA and C#, but it's cutting off your options. If you just want to code for a living, and the salary on offer is more important than the particular focus of the development, then feel free to focus on Java or C#, as there are plenty of well-paid jobs which don't need any pointer referencing and dereferencing, ever. What I can say is that employers seem to prefer someone who is really good at the skills they regard as key, rather than having all of the nice-to-haves. I've been something of a generalist, picking up C++, VB, C#, Python, Ruby, Javascript, Java, PERL, PHP, Delphi, PROLOG, etc. Even working on existing code in an unfamiliar language on occasion (being a generalist does at least help you hit the ground running with an unfamiliar technology). The existing employer valued the skill, but when it came to interview time for the next career step, most of the skills were irrelevant to the employer. A solid focus on a solid, narrower skill set (e.g. .NET/C#) seems more valued. As noted by others, database skills are in demand for many development roles so rather than worrying about whether you've learned enough programming languages, making sure you're good with either SQL Server or Oracle is more useful for maximum job choice. Don't worry too much about missing some areas of knowledge - you can't learn all languages in full depth. And you'll still have a lot to learn (and the bar keeps moving, so there's always more being added to the 'stuff to learn' list). While you're looking at the step from studying to employment, give some thought about what you CAN bring to the table for an employer - at the end of the day, one of the developers I know that would have the hardest time getting a job is probably one of the best coders I know... their interview skills are useless, while one of the worst developers I've met had no problems getting a job... you need to sell what differentiates you to the employer, and once you have that first development job, then you can work out what you really need to improve on for that role. Worrying about what bits you might need to know is not necessarily productive, because different industries have very different development requirements.

  249. Just read and write by wrook · · Score: 1

    Wow there are a lot of responses here. I wonder if anyone will read this...

    But I'll type anyway. Although I agreed with the article saying that CS programs should teach more than Java, if you want to be a programmer, I don't think you need to worry so much about that.

    Remember that first and foremost a programmer is a writer. You spend endless hours at your desk writing. And no matter where you end up, you will likely be buried in a pile of crappy code. So you need to know how to read and write code. And just like any writer the best way to learn is to read and write.

    Spend every second you can reading other people's code and modifying it. Write your own code. Think to yourself, "Is this good code or bad code". Ask yourself "Why". Try to improve bad code. Try to write code from scratch. Try to emulate good code.

    When you get into the working world, you will be horribly constrained by both deadlines and the sheer weight of the code you are in. Learn how to move on your own. All to often I see people writing the same bad code over and over again. They are just overwhelmed by where they are. They have difficulty improving their writing because they have never taken the time to read and write just for themselves. So if you have the time now, please spend it reading and writing,

    One other thing. One of the best ways to improve is simply to refactor code. Pick some project at random. Find some bad code. Build a test harness around it. Rewrite it so it isn't so bad, but does the same thing it did before. This will lead to significant insights.

  250. You don't need "X" skill, you need brains by sirwired · · Score: 1

    Do not concern yourself with learning the language-of-the-month. You are a Computer Science student, and you don't want to end up as somebody who gets their job outsourced to Bangalore when the new fad language comes into vogue.

    Start by decided what career path you would like to take. There are two primary ones for CsC students: The Computer Industry or Corporate IT.

    You want to work for MS or SAP? Do you want to write code for products that will be sold? You need to know lower-level stuff. You need to know C, C++, and probably Java. Do not worry about all those languages that are primarily used for writing database applications or building websites. Beyond that, take classes in technical topics that interest you.

    Do you want to work in Corporate IT? If so, you will never need C, and are unlikely to need C++ (although they wouldn't hurt). Instead, learn everything you can about databases, SQL, and a couple of languages used for DB front-ends.

    ASM is nice, in the same way that higher math is nice (stretches your mind), but unless you want to write embedded software, you are unlikely to need ASM.

    Beyond that. You MUST have vaguely relevant experience, or you will have a far tougher time getting a job after graduation. Your jobs don't even have to be in your particular specialty, but they MUST be technical and/or involve leadership of some sort. For myself, I managed a retail store at a Cub Scout camp for three years (also in high school), spent one summer in the Pentagon doing help-desk-type work, and spent another summer doing lightweight webmaster and DB front-end work. On top of that, I did help-desk-type work for the school's IT dept.

    SirWired

  251. fires? by White+Yeti · · Score: 1

    Is that the point of the "wouldyoulikefireswiththat" tag?

  252. ADA sucks! by AndyCSGuy · · Score: 1

    I agree with the majority of the article except for stressing the importance of Ada. What a horrible language. Specific reasons: 1) Ada is a defense industry language from a long time ago and is dying. Nobody outside of defense uses it. Even within the government, while existing systems require maintenance, the language is not being used for new applications. 2) It does not teach the basic concepts well. It has the flexibility of Pascal in the sense of allowing anything you want to do. I am of the opinion that a stronger definition of syntax and strictly defined primitive types would make for a better experience when transitioning into other languages. As to the rest of the article, I agree with the majority of it. The general trend should be that, while languages like C# and Java have a great place in understanding OOP, they do not help build a foundation in some respects because they are too high level. It is much easier to shift from C/C++ than the other way around. C/C++ require more work than C#/Java because less is done for you as it is less abstracted; school should present you with the hardest of circumstances as it is easier to adjust. Additionally, note that languages that do not fit directly with the curriculum of a particular class should be part of a general programming languages course. This course would include languages like C#, Fortran, Pascal, SmallTalk, etc. Note that as well, even though LabVIEW is intended more for engineering applications, it would be good to teach graphical programming in schools so that students will at least know that it exists. It is important to note that while learning programming is important, it's more important to learn Computer Science (different) in school.

  253. construed as flirting. by Dareth · · Score: 1

    construed as flirting.

    That may be the point, or maybe not. What level is your current WOW character anyway, how much grinding time do you need before the next raid?

    I spent mega hours/days/weeks on MUDS back in the day. Then I met the woman who would become my wife, and soon the mother of my children. It all started with some flirting.

    --

    I only look human.
    My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
  254. An interest in computing by DiarmuidBourke · · Score: 0

    The amount of people in my computer applications (software engineering) course that have no interest in computing is hillarious. I honestly feel that if students have a genuine interest in their course, then it doesn't matter what the course is teaching them as they will be able to teach themselves fairly well.

    Lots of the people without any interest are doing the course because "There's loads of money to be made", "It's the thing everybody is doing", "I didn't qualify for any other degree course".

    On the content of the course side, I can't really say, as I'm new to the field in comparison to people who did it 20 years ago. It's very interesting to be reading this discussion though!

  255. Know When To Hold 'Em... by ticklemeozmo · · Score: 1

    You need to know how to identify the WRONG way to do something, and be capable enough to do them the RIGHT way.
    Don't make 100 strings when you can use 1 array. Normalize your tables. Plan before coding. Use functions more often for things that should be separate and distinct. Read thedailywtf.com and you'll realize that every company has bad programmers. You will impress your boss and others if you can write code that works better than what's running now.

    Have an interest in programming.
    Lackluster employees in the department just code because they have to. They have no desire to complete the project other than the bonus. They know antiquated ways to program and are stuck in mind-sets. This sounds like a PBS special, but a young fresh mind is very valuable, especially if you like programming. The best programmers in our department are the ones who do it at home. The ones who do it as a hobby because they are always trying to expand their knowledge and look for additional/better ways to do something.

    --
    When modding "Informative", please make sure it both has a source and IS actually informative.
  256. Skills to pay the bills by frank_tudor · · Score: 1

    Anyone getting out of College is going to be (disillusioned) for a bit. Swimming around for a good job. you'll probably first get indoctrinated by big companies as entry level recruit (level E or F) where they will pay you crap and focus more on molding you to their 'culture' and 'brand name' of douche bag. You'll have to learn much of your skills as you are working (sorry if companies don't like to here this). It doesn't matter what you are learning as everything applies. And by your 5th or 10th job/project you'll be a salty dog and you'll be ready for any programming job around. I guess I would be considered a low level programmer (Coldfusion|Fusebox|jQuery)...and yes I have had problems finding the exact skill to job matches, but as one person told me...Specialize and try not to be a jack of all trades.

    Tip: Get arcGIS experience with Java as there is a shortage right now.

    Good Luck, Frank

  257. all you need to know are ... by CRiMSON · · Score: 1

    ... hacking and nunchuk skills is all you need to get ahead in life.

    --
    oogly boogly!
  258. day to day workflow by Anonymous Coward · · Score: 1, Informative
    There are plenty of good answers above, but I haven't seen anything that talks about essential, day to day workflow stuff. The best way to learn that, short of actually working for a company that gets it (of which there are very few), is to join a largish OS project. May I recommend PostgreSQL? They have a gorgeous code base and superb coders for coaching / mentoring, and the patch acceptance process is very demanding (which means they'll demand you do it right).

    Learn the tools
    • scm variants, and yes, you need to learn CVS if only to understand it's "limitations". I'd also suggest one of the modern distributed scms like git or bzr to learn the modern / better way)
    • bug / issue tracking systems
    • wikis and other collaboration systems
    • build and test management systems


    And then learn the process (submit a bug, verify it, analyze it, patch it, test patch, submit patch, review patch, apply, test release, release etc.). I've met dozens of starters in the field who have no idea what the software life-cycle process is, nor the tools that are used to handle it. While the specific tools don't matter a whole lot, the problems they solve are common. If you intend to write code for a living, this is stuff you'll need to know. I don't typically interview people for entry / junior positions, so maybe they're not looking for this kind of stuff. But I know that I absolutely am looking for it when I interview for intermediate / sr positions.
  259. know how to think... by er3s · · Score: 1

    I think the most important skill you should take away from University is the ability to think and learn. You could learn every language on the planet (you'd have no personal life) but that may not help you get a job if the person you're interviewing with initially is in HR. Learn to sell your skills as opposed to what syntax you prefer. You've covered the basics, so be proud.

  260. Writing secure software by Anonymous Coward · · Score: 0

    If you think learning C will improve the security of the software you write, you are totally misguided.

    In C you not only have memory handling bugs: dangling pointers and memory leaks. You also have buffer overruns, which are even more common.

    Learning to use serious languages like Java that were designed from the start to avoid memory handling bugs and buffer overruns, you can concentrate in avoiding other *more insteresting* bugs. Besides in Java you have tools like JUnit that help write better code, almost bug free, and which is easy enough for developers to learn in a few hours.

    Saying you need to learn C to be a better software developer is like saying you need to learn COBOL to program better business programs. Both C and COBOL are the past. About 20 years ago it was almost impossible to get a job that didn't involve COBOL or FORTRAN. About 10 years ago it was Visual Basic and C++. Today it is Java and C#. Probably in the next 10 years it will be Scala and Erlang.

    Who cares really? You need to learn languages to learn concepts. Learn Smalltalk, Lisp (and its cousins ML and Haskell), Forth and Prolog. All the rest of the languages are just *baggage*.

  261. Simple Answer by Macgrrl · · Score: 1

    If no one else has said it already - the key skills they need are numeracy, literacy and critical thinking. Everything else can be learned later.

    --
    Sara
    Designer, Gamer, Macgrrl in an XP World
  262. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  263. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  264. Don't train yourself to be a monkey... by iwein · · Score: 1

    there is plenty of companies out there that are lining up to do that for you. Try to get skills in modeling, TDD, DDD, some people skills etc (or whatever you think is great). You'll thank yourself after two or three years doing boring courses, getting certified (for crying out loud) etc.

    Really, the last thing you should worry about is basic skills in a specific language or you'll end up like a derailed COBOL programmer in 20 years.

    --
    Show a man some news, distract him for an hour. Show a man some mod points, distract him for the rest of his life.
  265. the fundamentals: from a silicon valley developer by KMonk · · Score: 2, Informative

    I'm a developer in silicon valley working on semantic web applications here at moffet field. I did an MS in CS and engineering from a top school and a math/cs double from a normal state uni. I've been promoted up through my jobs over my few years in industry, moving from the midwest out to here with significant pay jumps each time. First, you need to decide what you want to do: do you want to be a developer or something else? If you want to be a developer, forget about all this low level nonsense about assembly code and C. It's totally useless in today's market. Computer programming is all about adding abstraction layers so that you don't have to worry about low level details. You need to build a coding portfolio so that you can prove that you know your stuff. Write a basic web2 app in ruby or java or whatever you are most familiar with, and try to make it as scalable as possible. Deploy it somewhere and let people poke at it. Check out dice.com and craigslist for silicon valley, and if you aren't in a major city get there as fast as possible - you want to be doing development, not maintenance on old legacy code. That means you need to go where the money is at. Of course, you could always be a sell out and just go work for google... If you are worried about knowing what to do? Study mathematics and algorithms extensively, particularly the Cormen textbook. Udi Manber's book is also very good. This will teach you the computational aspects of CS. Then, read up on RDF and the semantic web to get a background in data management. Then practice, practice, practice.

  266. Re: What Skills Should Undergrads Have? by kafros · · Score: 1

    |33t $ki||z of course

  267. school doesn't matter. by jantman · · Score: 2, Insightful

    Give up on learning anything technical in school. The technology changes too fast for most schools to come up with working curricula in time, and when they do get that figured out, it's not enough knowledge to help with a job. Learn business, management, maybe some financial or accounting stuff in school. In your personal time, try to learn as much as possible. Learn a few things *really* in depth, but also remember that variety is good. If you're mostly a Java person, learn a bit of Python or PHP, and get some Unix knowledge. Take a look at: http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/ Also remember that job experience is good, but personal experience is good too. Make some contributions to F/OSS projects or start your own.

  268. A good education by scott151 · · Score: 1

    You seem to be getting a good technical education. As long as you know one computer language well it is not all that hard to pick up additional languages. Since you already know more than one language I wouldn't be overly concerned about not knowing lower level (closer to hardware) languages like C and Assembly.

    Of course you need a strong grasp of software engineering fundamentals and this should include knowledge of: data structures, algorithms, compilers, operating systems, object oriented programming, AI techniques, architecture (both sw & hw) etc.

    Beyond the standard curriculum here are a few things that I consider important:

    1. Writing Skills: Clear and crisp writing whether it is technical doc or email.
    2. Presentation Skills: Speak with clarity and poise. Be effective in using presentation technology. (A facility with powerpoint, in spite of all its limitations, can be invaluable. It can help organize and the audience understands the approach).
    3. Group Interaction Skills: Can you work effectively in a group? What do you bring to the group? Possible choices: organization, communication, humor, fun ...
    4. Communicational Skills: How well can you interact with your peers, managers, subordindates, customers and others in the environment that you work in.

    I believe that each of these soft skills can be acquired just as well as the technical knowledge that you are picking up. One of the good things about being a student (and as your post indicates) is that you know you have much to learn. If you can maintain this willingness to learn later in life you will have a successful career whatever you do.

  269. elow by lkjklllkkklii · · Score: 1

    hehe

  270. re: what skills should an undergraduate must have by lkjklllkkklii · · Score: 1

    well, me ,as a 2nd year computer science student chose to study those subject which are somehow related to my course.. for example, they taught us database, i studied webpage programming. they taught us java programming, i studied mobile java programming. they taught us c++, i studied symbian c++. they taught us how to create circuits, i studied how to troubleshoot PCs. you should broaden your knowledge about what is being taught to you to the point that it will become usefull. school is just opening the gates, but its up to you to struggle your way in..