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?"
The only that really counts (Score:5, Informative)
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.
A couple of things... (Score:5, Informative)
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)
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)
Learn some SQL. I've never seen a programmer job where Databases skills were a negative.
Communication and Theory (Score:3, Informative)
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)
Re:Repeat after me... (Score:3, Informative)
Re:Learn the low level things. (Score:2, Informative)
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)
Information Interview (Score:5, Informative)
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.
Re:Requirements lacking in most graduates (Score:2, Informative)
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...
Read Joel on Software (Score:4, Informative)
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
You're already ahead of 90% of your peers (Score:3, Informative)
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.
Re:You should be good (Score:5, Informative)
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
Re:Don't overlook people skills (Score:3, Informative)
indeed. so he should get a bunch of cats, and practice herding.
mix activities and align with goals, interests (Score:1, Informative)
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)
Learn the tools
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.
the fundamentals: from a silicon valley developer (Score:2, Informative)