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

16 of 587 comments (clear)

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

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

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

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

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

  10. 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
  11. 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.

  12. 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.
  13. 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".
  14. 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