Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Education Programming IT Technology

What Skills Should Undergrads Have? 587

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?"
This discussion has been archived. No new comments can be posted.

What Skills Should Undergrads Have?

Comments Filter:
  • by GenKreton ( 884088 ) on Wednesday January 09, 2008 @03:23PM (#21972458) Journal
    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.
  • by MrCawfee ( 13910 ) <mrcawfee@yahoo . c om> on Wednesday January 09, 2008 @03:25PM (#21972492) Homepage
    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.
  • by epiphani ( 254981 ) <epiphani@@@dal...net> on Wednesday January 09, 2008 @03:26PM (#21972512)
    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.
  • Self Taught... (Score:2, Interesting)

    by BigDogDoug ( 1216184 ) on Wednesday January 09, 2008 @03:28PM (#21972554)
    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.
  • by neapolitan ( 1100101 ) on Wednesday January 09, 2008 @03:30PM (#21972608)
    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!
  • by YutakaFrog ( 1074731 ) on Wednesday January 09, 2008 @03:35PM (#21972704)
    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!
  • by kudokatz ( 1110689 ) on Wednesday January 09, 2008 @03:48PM (#21972986)
    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.
  • by rucs_hack ( 784150 ) on Wednesday January 09, 2008 @03:58PM (#21973256)
    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.
  • by Digicaf ( 48857 ) on Wednesday January 09, 2008 @04:02PM (#21973328)
    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.
  • by EastCoastSurfer ( 310758 ) on Wednesday January 09, 2008 @04:04PM (#21973366)
    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.
  • by 0100010001010011 ( 652467 ) on Wednesday January 09, 2008 @04:06PM (#21973416)
    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.
  • by Deanalator ( 806515 ) <pierce403@gmail.com> on Wednesday January 09, 2008 @04:22PM (#21973722) Homepage
    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.
  • by lgw ( 121541 ) on Wednesday January 09, 2008 @04:37PM (#21973994) Journal
    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?
  • by EastCoastSurfer ( 310758 ) on Wednesday January 09, 2008 @05:09PM (#21974526)
    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...
  • It's easy (Score:3, Interesting)

    by Pointy_Hair ( 133077 ) on Wednesday January 09, 2008 @05:31PM (#21974918)
    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.
  • by anaesthetica ( 596507 ) on Wednesday January 09, 2008 @05:48PM (#21975206) Homepage Journal
    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.
  • by philipgar ( 595691 ) <pcg2 AT lehigh DOT edu> on Wednesday January 09, 2008 @07:22PM (#21976556) Homepage
    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
  • by Anonymous Coward on Wednesday January 09, 2008 @11:06PM (#21979146)

    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.
  • by dannys42 ( 61725 ) on Wednesday January 09, 2008 @11:13PM (#21979212)
    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.

No man is an island if he's on at least one mailing list.

Working...