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?"
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.
Playing a good game of Golf will do more to further your career than most anything else.
Other than that, the only skills you need are
The hard part: once you learn a thing or three, you need to go back and do #1 and 2 again. Forever.
Yeah, right.
Practice saying "Would you like fries with that"
I wish you the best of luck but unfortunately you're going to see a lot of really good answers and they're all going to be right. Personally I would do whatever I like to do but become more robust with it. Knowing six languages on a beginners level isn't as good as knowing one ot two in-depth.
Dedicated Cthulhu Cultist since 4523 BC.
You will likely get both good and bad opinions in response to this question here on slashdot, but my best advice would be to ask this question of employers that you might be interested in working for.
Spelling, grammar, basic math, an understanding of economics, and a knowledge of the outside world.
Slashdot: Playing Favorites Since 1997
Learn how the hardware works. The concept of code portability is limited. Compilers on diferent architectures do not always convert intergers, floats and strings the same way. Also memory structure can bite you real hard.
The more you know about what is under the hood, the more likely you are to craft code that is actually portable and that will be useful for more than just one generation of processors.
To increase your marketability, take as many business/mgmt classes as possible. Also, get a part time job or internship so you can network. Knowing things besides how to code (and building a good network) will likely be the most important factors in you getting a job.
Ask not what you can do for your country. Ask what your country did to you
For what it's worth my relevant advice to somebody planning to migrate from student to employee status would be: With great compensation comes great responsibility. (to paraphrase Spiderman, Pres. Kennedy & Pres. Lincoln) In my experience the biggest disconnect between an employer and a fresh out of school developer is that they expect high compensation but often aren't open to taking what an employer bundles with that (ownership, initiative, responsibility, etc). As far as specific topical areas? I think that depends on what kind of developer you want to be. Opportunities seem to exist no matter which environments you choose to familiarize your self with; as long as you have the theory down and aren't looking for a joy ride, you'll can make your way along a variety of paths.
If you want to be a software developer, and don't particularly care in which language, it would be a good idea to do a project in your spare time, in one of the main languages (C++/java/C#) used. Java seems to have the most jobs available, of couurse, that may vary in your area. The thing you need to be getting out of your education is understanding the basics, that transcend all languages. Rhe difference between C++, java, and C# are made to be a bigger deal than they really are. You should be able to program in any of these without to much effort. I think the best advice is to be smart, and take what you read here on /. with a grain of salt, as people here tend to overreact to almost everything.
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
If you really want to be a good developer, you have to be able to learn how real people work and how to run a project. That's tough - I'm not sure if anyplace has classes on this. But - everything you write fits into a workflow of some sort, and if you can understand the context in which your stuff runs your software will be better for it.
Project Management is almost a must, esp. since you're in the business program too. Projects that come in on time are better than ones where you have to do a "death march" to the end. They make everyone happier, and makes everyone look good. A good PM is usually the difference between 4 80 hour weeks at the end of a project that fails and a nice, 9-6 project that cruises to delivery.
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.
Monstar L
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.
They dig knowing how to carry a conversation and how to make eye contact (i.e., not staring at their breasts) a whole lot more.
"I'd rather be a lightning rod than a seismometer." -Ken Kesey
...stop me if you have heard this one.
A man learns that his very wealthy father is going to die in just a few years. Knowing that he will inherit a fortune, he decides to try to use his wealth-potential to get a wife. After some searching, he meets a strikingly-beautiful young woman, introduces himself, and explains, "In just a few years my father will die and I will inherit millions of dollars!" Impressed, she goes home with him.
A month later, she marries his dad.
My point?
I am a working programmer. I am not going to reveal to you the skills I have aquired which, I believe, give me a competitive advantage against other programmers. Think about that before taking too much advice from strangers on a web forum.
Take as many development internships as possible. It doesn't matter how little the pay you. Take them. It's job experience that you can start out with that a hiring manager will look at your resume and go "ah, this guy isn't just a worthless, theory-ladden undergrad."
You'll learn a lot of skills that way, and you might get paid to do it. Chances are, you'll learn a lot of basic skills that are applicable to your job market.
This is the advice that I always give to people who are going to be graduating. Look at the skills that employers want where you plan to live. It doesn't matter whether you can code the best embedded systems in C and ASM on Earth, if there are no jobs for that where you want to live. If you want to get skills that aren't purely work-related, then study just what interests you.
Where I live, Northern Virginia, the job market is primarily for Java developers. I don't waste my time learning languages like C++ on the grounds that someday I might need to learn them, when I can quickly pick up the basics when I need to use them at work. I keep up to date on Java for work, and learn Perl and stuff like that for my own enjoyment.
He's right that most graduating students don't know how to budget, plan, save for their toys or balance their checkbook. Learn these BEFORE graduating and practice every month. Keep in mind that budgeting doesn't mean denying yourself. It means making sure that you CAN have the toys/fun you want while staying warm, dry and well fed.
Second is confidence. Be confident that you know what you know. But also keep the willingness to acknowledge what you don't know and then learn it. The phrase "I don't know" is rarely spoken by computer professionals. The phrase "show me how" is even rarer. Keep both handy and you'll be regarded as someone who knows a lot but doesn't seem arrogant. Try not to feel threatened by someone who seems to know more. If they do know more, learn from them. If they really don't know more, others will figure it out around the same time you do.
The only other thing I can suggest in general is to take ownership of your own career. Don't expect your employer to train you or keep your skills fresh and new. That's your job. Also, keep asking yourself "what are you doing this year that warrants a raise from your employer?". If you don't want to pay your cable company more this year for the same service you got last year, your employer feels the same about their developers and administrators. Upgrade the services you provide, then ask for a raise knowing you deserve it.
And lastly, HAVE SOME FUN! LIFE IS TOO SHORT NOT TO.
Hope this helps...
Ididn'tdoitnobodysawmedoityoucan'tproveanything!
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.
Computer Science is a very general field with many specific applications of that knowledge. The skills needed to excel in one instance might be completely wrong for another instance. You should really evaluate what area you want to work in and learn the skills needed in that area.
Games programming? C/C++, understanding of 3D space, understanding of low level hardware (consoles), etc.
Embedded programming? Tuning, tuning, tuning, and some C/C++
Business Apps? Database skills (Oracle or SQL Server would be my first stops, DB2 a close 3rd), Java or
etc.
The other skills you need you can't learn from a book. You need to learn to integrate with a team. You need to learn how to write a good design spec (and not for a semester long "project", but for a real application that takes upwards of a year to work on). You need to learn to accurately estimate. etc. To learn these, I recommend that you find a very good mentor at your first place of employment and absorb from them.
Layne
Learning skills that apply all over, and get expressed as 'targetted' skills, is worth much more over time. The ability to read, write, speak, manage time, and finally, learn and adapt...
Its amazing what sort of monstrosities can develop when a programmer at my company attempts to set something up and then calls me for help when it "just won't work". I'm not saying you need to know how to completely configure a cisco router with advanced features, but understanding general concepts like ip addresses, host and network portions of an address and how that relates to the subnet mask as well as the basic principal behind how a packet gets from point A to point B would do wonders.
As someone who graduated college only a few years ago (2004) and as someone who has a career in the software industry and as someone who is responsible for hiring delevopers, let me offer you the following:
1) I don't believe in CS programs. I feel that they fail to prepare students for the real world. Engineering is one of the few educations which should provide students with pratical experience that prepares the student for 'the real world'. You have learned a lot of therory. In my experience good grades has no corrilation to good developers.
2) College, in general, is important for 'nerds, geeks, engineers, etc'. Sterotypically this group has poor social skills. This can hinder your professional development, as these skills are required in almost any business. Focusing on developing social skills, time management, and group collaboration will pay off.
3) Therory isn't a complete lost cause. Focus on learning how to think, regardless of course of study, college should train you on how use your brain.
4) Be passionet. College can be a great demotivator. I wouldn't be suprised if you loved computers a lot less today than the first day you stepped onto campus. Find time to utilize computers in a way that inspires you. Google Mircosoft's "Coding For Fun". Not only should you find something there that intrests you, it will help guide you into some self study of programming that is applicable to today's business world, which brings me to my next point.
5) Focus on increasing your marketable skills. The utopian academia [and dare I say slashdot?] breeds a lot of technical fringe support. While being a hotshot ruby developer might be cool in this circle, it's not as marketable as being a profficient VB.net/C# web developer. Polish your skills in using technology that is common place, you'll need it being entry level in the job market.
6) Experience is golden. Work for minimum wage, work for food rations if you have to! Finding internships in related industries will give you pressious contacts, and valible work experience to put on your resume.
Your mammas flamebait.
Absolutely. I interview/hire a lot of software developers, and if you show up with a poorly-written resume, you're toast. If you can't be careful with the most important language in your arsenal (the one you use to communicate with other humans), how can I expect you to be careful with programming? other advice: whatever you do, do it well...even if it's something you're not interested in. The worst thing is to give someone some grunt work, have them to a lousy job, and then have them ask for more interesting work. Kiss of death. Don't sweat about the particular languages you're studying. Many of the best developers I've worked with didn't even have degrees in computer science or software engineering. I majored in Russian, and I've done ok... Do study something besides computers. I work in finance, and if a person comes in with programming experience AND an understanding of finance, they immediately go to the head of the class. It sets that person apart from the pack. Make yourself unique, and chances are your job won't get outsourced.
You're talking about Software Engineering, "the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software".
Knowing languages is good. Theory is good also. But to make a working product you need much much more. From the inital vision, to project planning, choosing the appropriate tools (language, platform, etc.), and matching features to business process requirements, you have a lot of work ahead of you. Of course, actually writing the code is a challenge in itself, but in a lot of small- to mid-sized businesses, the "developer" is also the project manager, the analyst, the senior developer and the IT manager all at once. Careerwise you CANNOT go wrong having at least rudmentary (such as Quick Kill) and probably at least a familiarity with development methodolgies. There is no one leader, agile was big for a while but it was too cult-like.. There's a million of them, you have to match the right one to the job. People who do this are software engineers.
Wow, you know a language. Most working coders know 10. It's applying that knowledge to make or maintain software that gets you a job.
Cool! Amazing Toys.
Actually...this isn't a bad idea. One skill you need (if you're a guy) is HOW to get laid.
If you're good at talking up women, and can get laid a decent bit...you're not gonna be tempted to get married by the first girl that lays you. You won't be tempted to get married too soon right out of school.
If you don't do that...you can concentrate on your career early. You can enjoy some of that money that is coming in (and hopefully saving and investing some of it). You won't be burdened with kids before you're ready.
These won't directly affect your getting a job, but, they will help you keep and advance....and you really should have some "fun" out there before you settle down to a family if that is what you decide.
So, guys....work on your women skills, learn how to get laid on a regular basis with a number of them. It will benefit you greatly...and in the end, you'll make a better informed 'consumer' in which one you choose to hook up with on a more permanent basis. That, and you'll have some funds saved up and be making a bit more $$, which also has the benefit of attracting better looking ones.
Light travels faster than sound. This is why some people appear bright until you hear them speak.........
Can this stereotype please die already? Most engineers that i know love parties and women, sometimes even more so than their fraternity dwelling counterparts.
Engineers are usually the ones who throw the illest parties anyhow since we tend to have way more lights, and sound equipment (half the engineers I know are DJs) than anybody on the block.
So please...stop using this stereotype....its really stupid.
NewslilySocial News. No lolcats allowed.
absolutely right. Communication skills are the crux of any job. Take more than one speech class and writing class. Excellent communication skills can land you a job even if you dont have a lot of experience. When I was in school I took a business oriented writing class, that one class alone has really helped me to communicate with the business dweebs in my life over the years. Think about it, sure your boss and fellow workers will most likely be techies, but everyone else in the business is probably not a techie. It is only to your advantage to learn to communicate technical issues with non-technical people. In fact I have seen people with less than stellar technical skills who are absolutely loved within a corporation just because they are able to explain what is going on in non-technical terms, of course these people usually become managers/executives. If you have excellent tech skills and excellent communication skills you will go very far in this industry.
Very well said. For a bit more academic piece of advice: get all the math you can handle.
I am not your blowing wind, I am the lightning.
It sounds to me like you've worked at places that aren't compatible with your talents. Am I wrong in assuming that you've worked predominantly in very large companies? A Jack-Of-All-Trades isn't as valuable in a larger organization as there tends to be a correlation between headcount and specialization. You should probably look for work in smaller organizations or startups, where being a Jack-Of-All-Trades is extremely useful. In these type of environments, the organization usually can't afford a body for every single role, so being competent in a lot of different areas is key. Although job security may not be as great in a smaller organization, if you work for a startup, you may be able to get stock options or equity of some kind. It depends what you're looking for. One other poster mentioned consulting, which could also be an attractive alternative.
You sound like you are in the wrong type of company. I believe that most every startup company would be looking for somebody who can wear many different hats and be proficient at each hat. You should consider sitting down and thinking through problems that you could solve that will make you money and start pursuing that after finding a buddy or two to go down that route with you...
One of the most important things about startup employees is the ability to do many different things well, not to be a specialist.
Sleep: A completely inadequate substitution for Caffeine.
Get some SQL under your belt, and maybe take a databases class. Its everywhere in the job market, but schools don't usually promote it.
Also, learn the LAMP stack if you want to be a developer. Statistics knowledge is very marketable. Take some classes.
Most important: make sure you enjoy what you're studying / doing. It doesn't have to be your ultimate passion of the moment, but have long-term goals that fulfill your passions, dreams, ideals, etc.
Try going from C++ to Ruby or JavaScript. Possible, but there's a lot of things that it will take a long time to wrap your head around. (Closures being a simple example...)
But for a real challenge, try going to Erlang, Haskell, or Lisp. Of those, Haskell is probably going to be the weirdest, but I don't have a truly thorough understanding of Lisp yet.
Don't thank God, thank a doctor!
But excellent points overall... there are very different niches available, and it's a waste of effort to try to prepare yourself for all of them. Get some exposure to the gamut, then narrow down and get some experience *at depth* if at all possible -- i.e., working on a big project with other people with source control, collaborative design, testing, bug triage and debugging.. all that stuff that you'll never see on 2-week individual projects.
Don't panic if there's an acronym or two that show up on job listings that you're missing. You will be learning new stuff throughout your career.
I also want to emphasize that "people" skills are extremely important, no matter your niche. If you're a wreck in basic conversations, practice with your cat, neighbor, anyone. Memorize a list of fallback "small talk" questions you can ask if you're lost, and learn how to listen and ask follow-up questions. You have to get to know people, you have to gain their trust, and you have to learn how to work anyway with people who fail to gain yours. You have to know how to stop your client/boss/coworker when they're explaining something and you lose the thread. You have to know how to ask questions. You have to learn how to offer criticism without offending, and how to just shut up sometimes. You have to know how to tear your own suggestion to shreds and decide on someone else's as the better solution, plus how to null route someone else's suggestion without bruising their ego.
Sometimes someone else will make a mistake that costs you hours of time (and sometimes you will make that mistake). Someone will send an email out to the entire team that contains an obvious error that makes you look bad (or perhaps you will send this email). There's a serious problem in the code, and you think you know who did it. How you handle this stuff will make a huge difference in your quality of life.
you get paid like crap, it's really hard, schedules are very tiresome/stressful.
you do it because of all the really cool shit you learn, and the opportunity to hang with artists.
since there's artists, you can snag a really cool wife, before you burn out and quit the industry.
that said, i'm still there, and like it. it is really interesting.
music - http://www.subatomicglue.com
Also be sure to be attractive and bring your checkbook. Knowing how to carry on a conversation and making eye contact without at least one of the previous requirements will land you happily in the "Friend Zone", where you will get to listen about her sex life with a string of guys who don't punch her that often.
I just left Irvine this past October. Why did I leave? The cost of housing out there is ridiculously expensive. I would strongly caution you against locating there unless you are well paid and are ALSO married to a well paid spouse. Otherwise, you'll get by but never be comfortable.
There was one place I turned down that did embedded work (the salary was only 75K -- in Irvine that's low), it was Geotest. They sell automated test equipment and market a matlab-like language. They were very pleasant people. Look them up.
-- Posted from my parent's basement
1) Learn how to manage conflicts. They are guaranteed to come up. 2) Communicate technical ideas well to non-technical people. Will your manager understand the technical details of your job? What about his manager? 3) Lean to present well. What better way to impress many people at once? 4) General Problem Solving Skills. A competent technical interviewer is likely to test you on this and be more interested in your performance than he is in you remembering the exact syntax in some language or some details of some library (although you should know those things to some degree). 5) Be generally eloquent and friendly The social aspects of work are often ignored
http://yetanotherpoliticalrant.blogspot.com
I'd concur with a lot of the sentiments here:
1) read stuff outside of the field. Find some *good* fiction, (I spent a while reading the classics of the 20C), read the Art of War, read Machiavelli, read a Brief History of Time. Anything, but make sure it's not trash.
2) Sit in on any lectures that interest you. Both in and out of your field. You won't get a chance to do this for a little while.
3) Spend some time learning different types of language - imperative languages is probably all you'll ever probably be paid for, but knowing about functional programming, logic programming, type systems, etc is invaluable. A course on Principles of Programming Languages is something I wish I'd done.
4) Don't forget to see people outside of the labs. Your social network is quite important, especially when you leave.
Give up on learning anything technical in school. The technology changes too fast for most schools to come up with working curricula in time, and when they do get that figured out, it's not enough knowledge to help with a job. Learn business, management, maybe some financial or accounting stuff in school. In your personal time, try to learn as much as possible. Learn a few things *really* in depth, but also remember that variety is good. If you're mostly a Java person, learn a bit of Python or PHP, and get some Unix knowledge. Take a look at: http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/ Also remember that job experience is good, but personal experience is good too. Make some contributions to F/OSS projects or start your own.