Follow Slashdot blog updates by subscribing to our blog RSS feed

 



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 Yold ( 473518 ) on Wednesday January 09, 2008 @03:26PM (#21972518)
    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.
  • by Capt James McCarthy ( 860294 ) on Wednesday January 09, 2008 @03:27PM (#21972534) Journal
    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."
  • Personal View (Score:2, Informative)

    by RockedMan40 ( 1130729 ) on Wednesday January 09, 2008 @03:29PM (#21972584) Journal
    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.
  • Database (Score:3, Informative)

    by flymolo ( 28723 ) <flymolo@NOspAM.gmail.com> on Wednesday January 09, 2008 @03:38PM (#21972770)
    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.
  • by MosesJones ( 55544 ) on Wednesday January 09, 2008 @03:38PM (#21972778) Homepage
    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.

  • Comment removed (Score:3, Informative)

    by account_deleted ( 4530225 ) on Wednesday January 09, 2008 @03:49PM (#21973026)
    Comment removed based on user account deletion
  • by TheRaven64 ( 641858 ) on Wednesday January 09, 2008 @03:53PM (#21973134) Journal
    These are the six programming languages I think everyone should know. [informit.com] 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.
  • by Agoln ( 869166 ) on Wednesday January 09, 2008 @03:54PM (#21973140)
    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.
  • You should be good (Score:4, Informative)

    by tritonman ( 998572 ) on Wednesday January 09, 2008 @04:15PM (#21973558)
    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.
  • by snowwrestler ( 896305 ) on Wednesday January 09, 2008 @04:17PM (#21973590)

    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.
  • by januth ( 1000892 ) on Wednesday January 09, 2008 @04:19PM (#21973658)
    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...
  • by Soskywalkr ( 617860 ) on Wednesday January 09, 2008 @04:39PM (#21974038)
    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
  • by jimicus ( 737525 ) on Wednesday January 09, 2008 @04:49PM (#21974182)
    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.
  • by LithiumX ( 717017 ) on Wednesday January 09, 2008 @05:01PM (#21974390)
    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
  • by evilmousse ( 798341 ) on Wednesday January 09, 2008 @06:16PM (#21975612) Journal

    indeed. so he should get a bunch of cats, and practice herding.
  • by Anonymous Coward on Wednesday January 09, 2008 @06:35PM (#21975852)
    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.
  • day to day workflow (Score:1, Informative)

    by Anonymous Coward on Thursday January 10, 2008 @03:23PM (#21988350)
    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.
  • by KMonk ( 612700 ) on Friday January 11, 2008 @05:59PM (#22005984)
    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.

He has not acquired a fortune; the fortune has acquired him. -- Bion

Working...