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

6 of 587 comments (clear)

  1. 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.

  2. 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?
  3. 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.

  4. 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.
  5. 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...

  6. 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