Beta
×

Welcome to the Slashdot Beta site -- learn more here. Use the link in the footer or click here to return to the Classic version of Slashdot.

Thank you!

Before you choose to head back to the Classic look of the site, we'd appreciate it if you share your thoughts on the Beta; your feedback is what drives our ongoing development.

Beta is different and we value you taking the time to try it out. Please take a look at the changes we've made in Beta and  learn more about it. Thanks for reading, and for making the site better!

What Skills Should Undergrads Have?

timothy posted more than 6 years ago | from the seduction-is-a-good-one dept.

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

cancel ×

587 comments

Sorry! There are no comments related to the filter you selected.

Free Time at School (5, Funny)

Njoyda Sauce (211180) | more than 6 years ago | (#21972410)

Parties and Women right? Oh.. forgot this was /.

Don't overlook people skills (5, Insightful)

TechForensics (944258) | more than 6 years ago | (#21972414)

People skills should not be overlooked. It is important you be able to get people to like you.

Re:Don't overlook people skills (5, Insightful)

keenada (1018094) | more than 6 years ago | (#21972612)

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.

Re:Don't overlook people skills (1)

AndGodSed (968378) | more than 6 years ago | (#21972816)

Yes. And good writing skillz. And talking good also helps. Then personal hygiene skills. LPI and RHCE as well...

Reminds me of a joke... (1, Insightful)

Anonymous Coward | more than 6 years ago | (#21972844)

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

Golf (2, Insightful)

UncleWilly (1128141) | more than 6 years ago | (#21972424)

Playing a good game of Golf will do more to further your career than most anything else.

Re:Golf (1)

Spleen (9387) | more than 6 years ago | (#21972732)

It's so terribly sad that the parent is right.

Re:Golf (0)

Anonymous Coward | more than 6 years ago | (#21972836)

People don't play golf like they used to. 20 years ago it would have made a difference. Now, not so much.

If you want to be a developer (4, Insightful)

Safety Cap (253500) | more than 6 years ago | (#21972428)

Then read "The Pragmatic Programmer," especially "GOALS" on pages 14-15.

Other than that, the only skills you need are

  1. The willingness to admit you don't know jack, and
  2. The desire and commitment to learn.

The hard part: once you learn a thing or three, you need to go back and do #1 and 2 again. Forever.

Can't Resist... (1)

Adambomb (118938) | more than 6 years ago | (#21972508)

The willingness to admit you don't know jack
Dust.

Wind.

Dude.

Re:Can't Resist... (1)

davecrist (711182) | more than 6 years ago | (#21972852)

If I only had mod points. Best B&T reference I've heard all day... :)

Re:If you want to be a developer (0)

Anonymous Coward | more than 6 years ago | (#21972806)

I can't imagine programing in Fortran or Assembly now. Learning how to learn is the most important thing.

Re:If you want to be a developer (5, Insightful)

sm62704 (957197) | more than 6 years ago | (#21972938)

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

Re:If you want to be a developer (1)

markgaudreau (958147) | more than 6 years ago | (#21972940)

That is one smart comment, especially the "hard part" thing. It's so easy to just settle and think you know all you need to know.

Repeat after me... (4, Insightful)

east coast (590680) | more than 6 years ago | (#21972430)

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.

Re:Repeat after me... (4, Insightful)

ari_j (90255) | more than 6 years ago | (#21972592)

Better yet, learn at least three vastly different languages at at least a high intermediate level, or even master them. When you are confronted with a problem and immediately see its solution in, say, C++, Lisp, and Ruby, you will be able to quickly choose the right tool for the job (where "tool" could mean "closures" or "objects" just as easily as it could mean "Lisp" or "C++"). Even if you don't have that tool available to you (if your employer requires you to use Java, for instance), you will still be able to solve the problem faster and more elegantly.

Ask prospective employers (4, Insightful)

Dragonshed (206590) | more than 6 years ago | (#21972450)

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.

Re:Ask prospective employers (5, Insightful)

StaticEngine (135635) | more than 6 years ago | (#21972672)

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!

Personal finances and Confidence are the two (5, Interesting)

GenKreton (884088) | more than 6 years ago | (#21972458)

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.

Requirements lacking in most graduates (4, Insightful)

MSTCrow5429 (642744) | more than 6 years ago | (#21972462)

Spelling, grammar, basic math, an understanding of economics, and a knowledge of the outside world.

Re:Requirements lacking in most graduates (1)

seconddevil (583791) | more than 6 years ago | (#21972520)

You mean there is a world outside!?!?!?

Re:Requirements lacking in most graduates (1)

at_slashdot (674436) | more than 6 years ago | (#21972756)

Bizzaro Slashdot?

Re:Requirements lacking in most graduates (0)

Anonymous Coward | more than 6 years ago | (#21972974)

I haz a crehdit kard wif $500 limit, I can haz new ps3 (is $499.99 befour taxez!)?

Learn how the hardware works. (2, Insightful)

Anonymous Coward | more than 6 years ago | (#21972468)

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.

Party more! (1)

motek (179836) | more than 6 years ago | (#21972478)

This should give you a proper outlook on what is important in life. If you still have some time left over, I suggest you learn a foreign language of your choice. Better even - learn two. Or maybe read some philosophy. There is more to being a good carpenter then knowing how to hold a plane.

Low level languages (0, Flamebait)

Reverend528 (585549) | more than 6 years ago | (#21972480)

Well, you know Java. That's pretty low level. It doesn't even support the functional paradigm (one of the oldest in computer science).

Re:Low level languages (1)

arotenbe (1203922) | more than 6 years ago | (#21972920)

It doesn't even support the functional paradigm (one of the oldest in computer science).
If I understand you correctly, you are trying to imply that the older a given paradigm is, the more useful it is. Allow me to paraphrase you:

It doesn't even support the spaghetti code paradigm (one of the oldest in software engineering).
Java has its uses, just like any other language. Don't criticize a language based on what features it has. You should only look at how suited the language is to the task at hand.

Business classes (3, Insightful)

EveryNickIsTaken (1054794) | more than 6 years ago | (#21972490)

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.

I wouldn't worry about the job aspect. (2, Interesting)

MrCawfee (13910) | more than 6 years ago | (#21972492)

Yes there are alot of those jobs, but many of them will take a skilled programmer of any kind even if they do not have the specific experience in the toolset. With that being said, i believe it is more important to focus on some aspect that you really enjoy more than what you think will make money, especially out of college the better programmers are the ones who did it because they enjoyed it not because they are tailoring their skill set to a particular part of the nerd market.

You got free time? (5, Insightful)

techpawn (969834) | more than 6 years ago | (#21972498)

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.

my $0.02 US (3, Insightful)

psbrogna (611644) | more than 6 years ago | (#21972510)

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.

Re:my $0.02 US (1)

ducatier (669395) | more than 6 years ago | (#21972674)

The number one skill you need to have is a willingness and flexibility to learn and improve yourself and your business. That alone can keep you and your business compeditive

Learn the low level things. (2, Interesting)

epiphani (254981) | more than 6 years ago | (#21972512)

C is definitely a starting point - you need not concentrate on ASM (since C is effectively macro assembler), but get used to memory management and handling basic structures. The functional flow and practices that you learn through requirement in C becomes hugely relevant in higher level languages.

Also, linux or some type of posix-based system. C and Linux go together nicely, and most things for linux are written in C. Get out of the IDE environments as well - they're good tools, but they're tools that should be used after you're comfortable elsewhere. I suggest learning and using vim.

Few people these days in an engineering organization have a good understanding of filesystems and underlying technologies. Someone capable of identifying and handling performance issues in applications are highly valued. Linux and C will force you to learn these things. Do GPL work, join some linux kernel lists - even watching these lists for purely curiosity reasons gives you an excellent method of peer review and gives you a good understanding of how development SHOULD work in an organization, even though it doesn't often happen that way.

Re:Learn the low level things. (1)

$RANDOMLUSER (804576) | more than 6 years ago | (#21972760)

Agree completely. Learn pointers, pointers to structs, SQL and regular expressions. Write practice programs to read & parse CSV or other flat ASCII data files - XML isn't everywhere yet. Become competent at a Linux command line.

Re:Learn the low level things. (1)

hibiki_r (649814) | more than 6 years ago | (#21972874)

Those things are really important for becoming a great programmer. Are they the best use of someone's time that just wants to be easily employable? No.

In my region, good knowledge of SQL and a passing familiarity with persistence libraries will get someone with no experience much closer to a job than more C experience and knowledge of the Linux Kernel.

The only that really counts (4, Informative)

Yold (473518) | more than 6 years ago | (#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.

Google (0)

Anonymous Coward | more than 6 years ago | (#21972524)

Knowing how to search the web would be good. You could start by looking for the last forty times that this question has come up on Slashdot.

Re:Google (1)

Grundlefleck (1110925) | more than 6 years ago | (#21972690)

Knowing how to search the web would be good. You could start by looking for the last forty times that this question has come up on Slashdot.

And what the hell are you going to university for?! You could have searched the web for books on every topic then just bought a degree!

A couple of things... (5, Informative)

Capt James McCarthy (860294) | more than 6 years ago | (#21972534)

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

well, what do you want to do? (2, Insightful)

gangien (151940) | more than 6 years ago | (#21972542)

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.

Re:well, what do you want to do? (1)

mkiwi (585287) | more than 6 years ago | (#21972664)

as people here tend to overreact to almost everything.

WE DO NOT!!!

Self Taught... (2, Interesting)

BigDogDoug (1216184) | more than 6 years ago | (#21972554)

You're really going to have to teach yourself. Remember the college only prepares you with the basics. If you want to really impress your potential future employers you really need to know the stuff cold. You can't expect some over-paid college prof regurgitating text from a book to properly teach you anything. Join a group, network and get ideas from other people.

Real advice (-1, Troll)

cashman73 (855518) | more than 6 years ago | (#21972568)

You should learn Hindi or Telugu,... because your job will probably be going over to India at some point,...

Not true (5, Insightful)

ShatteredArm (1123533) | more than 6 years ago | (#21972768)

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.

Personal View (2, Informative)

RockedMan40 (1130729) | more than 6 years ago | (#21972584)

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.

Don't forget "Engineering" skills (5, Insightful)

SpuriousLogic (1183411) | more than 6 years ago | (#21972588)

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 [depaul.edu]

Learn how to get past the HR dragons (0)

Anonymous Coward | more than 6 years ago | (#21972594)

HR departments get lots of resumes. When they look at yours, they're looking for reasons to toss it in the trash.

Your resume has one purpose: get you an interview. It's not a biography or someplace to show off your creative writing skills. If something is on that doesn't fulfill that purpose, take it off!

Because girls dig it. (1)

DarthVain (724186) | more than 6 years ago | (#21972596)

nunchuck skills, bowhunting skills, computer hacking skills...

Re:Because girls dig it. (2, Insightful)

winkydink (650484) | more than 6 years ago | (#21972786)

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.

One thing to consider (1)

Brett Buck (811747) | more than 6 years ago | (#21972600)

I know why you are asking these questions, but I think you are missing an important point. You are looking at college like a vocational school - not a chance for a rounded education. You will do FAR better in the long run if you learn fundamental knowledge in many areas, and not spend a significant amount of time on specific training.

          Brett

A few projects good for ANY programmer! (3, Interesting)

neapolitan (1100101) | more than 6 years ago | (#21972608)

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!

Neopoleon Dynamite quote: (0)

Anonymous Coward | more than 6 years ago | (#21972618)

I dont know about on the job skills but apperently girls only want boyfriends who have great skills.... You know, like nunchuck skills, bowhunting skills, computer hacking skills...

Keys to success (1)

jbottz (708060) | more than 6 years ago | (#21972622)

The biggest thing I've found in 10 years in the IT sector is that just like in any other career path, networking (and not the cisco kind) will get you further than any other single thing. The old adage that "It's not what you know, it's who you know, and what they know" still holds true. Never burn your bridges, and remember that the people asking you for that emergency favor are people that you might in return need a favor from someday.

Remember these words.... (1, Funny)

slashname3 (739398) | more than 6 years ago | (#21972636)

Make sure you have a firm understanding and be able to deliver the following words:

"Do you want fries with that?"

Learn about workflows and project management (2, Insightful)

mveloso (325617) | more than 6 years ago | (#21972638)

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.

We work in a perpetually young field. (1)

jockeys (753885) | more than 6 years ago | (#21972668)

So, it pays to stay sharp. What do I mean by that?

Simple. I got into the software business because I love learning new stuff... and I will spend the rest of my career doing just that. Everything we are doing will be useless 5 years from now, and we will get to learn a new batch of skills. Sounds fun? Then you might have the right stuff to be a developer.

Individual skills are good... but the one defining skill of a good programmer is the ability to learn.

Get an internship (1)

mcsqueak (1043736) | more than 6 years ago | (#21972686)

If you have a decent amount of free time and good grades, try to get an internship or get involved with some sort of mentor-type program. I did that my senior year of university and was offered a job by my mentor before I graduated.

The stuff you'll learn being exposed to the "real world" is much more valuable then what you learn in the classroom.

Don't wait too long.. usually you need to apply during your junior year for any sort of senior-level internships (at least the ones I remember reading about).

It Depends (1)

Ohio Calvinist (895750) | more than 6 years ago | (#21972694)

It really depends on what you want to do. If you want to be a DBA or a high-level programmer, I'd say you're on the right track (though, low-level code experience will make you a better high-level programmer). However, one thing I see lacking, amongst programmers I work with, is a real understanding of the platform they are developing for. I am kind of in an odd position where I'm programmer 50% of the time, and server admin the other 50%, and I see lots of instances where having more OS-specific knowledge would make the developers more effective. I think the same is true for databases-server products. I'm shocked with developers don't know general Windows OS stuff that all desktop support entry-level techs do. I've seen professors write dissertations on neural nets and call tech support (my first job) with the most assinine questions about how to configure Eudora.

I think the converse is true as well, if you are a server administrator, being able to look at developer's code when windows flips out or you run into a performance issue makes a huge difference. (e.g. is this process slow because someapp.exe is single threaded, or is it slow because it is multi-threaded but generating many-many inefficent threads.)

By your 3rd year of university, you should probably have at least a general direction toward what you want to do, so I'd say pick coursework that will work toward that goal, and if possible, pick up a complmentary course or two in System Administration and Oracle (as most folks can figure out MySQL/MSSQL if they have some SQL knowledge, but Oracle experience translates to dollars as most less folks have less training or self-taught experience with it.).

If you are thinking of technical skills only (1)

sphealey (2855) | more than 6 years ago | (#21972696)

If you are thinking of technical skills only, then a deep and thorough understanding of relational databases in both theory and practice will serve you well. If you haven't already taken a class in Engineering Probability, that too. And take some 300 level classes outside the CS world (say, Mechanical Engineering) so you get some experience in solving problems that aren't within your comfort zone.

Outside of technical skills, political theory through the 300 level, some literature, and economics through the 300 level will be of more value to you than additional programming languages when you are in the 30-50 age period.

sPh

Student's Perspective (2, Interesting)

YutakaFrog (1074731) | more than 6 years ago | (#21972704)

I live in a place where the computer industry is doing well, and programmers seem to be in high demand, admittedly. But I'm also a Jr. in CS right now, and here's what I've observed so far between my own job experience and those of my other friends in school: Find something you enjoy and do it well. One of my friends got into ASP and C# real heavy, and is now the lead dev of a team working on his university's intranet. I'm very detail oriented, and got a job documenting an undocumented system, for which now I'm pretty much the sole dev type person around here, and I don't think they would dare to fire me, even though my school schedule's a pain in the butt. The point is, there is such a plethora of work available, you won't know ahead of time what you need. You just need to get all the experience in _something_ that you can. You'll find a way to use it, somewhere, sometime. If you learn it, they [jobs] will come? Good luck!

You may never catch up. Get experience. Self Edu (1)

FromTheAir (938543) | more than 6 years ago | (#21972714)

It could take 7 years to acquire all the diversified, cross discipline, base knowledge and understanding to be well rounded.

Of course during those 7 years, there will be 7 years of new knowledge and technique produced.

So it is almost impossible to catch up and be equal to those already having spent 10 years acquiring the skills and knowledge.

So there will always be a declining number of advanced cross discipline IT technical professionals.

The other thing is that technology changes weekly so fast much of it cannot be taught from a text book or university curriculum and theory doesn't always fit reality.

The good news is those that come after you, may never catch up to you.

The real education comes from direct experience, in doing.

There may be exceptions to the above but in general I think it is accurate.

get into real projects ASAP (1)

bryanthompson (627923) | more than 6 years ago | (#21972720)

If you have no real-life experience, you will join the legions of other just-out-of-college programmers that have no practical skills or real knowledge. The answer is to write programs RIGHT NOW that you think are important, fun, useful, marketable, etc. Join another project if you want, but whatever you do, it needs to be something you can be passionate about. The more experience you have with real products that people use, the better. /self-taught programmer with college education. The self-taught was worth 10x the formal education.

What *KIND* of programmer? (1)

erroneus (253617) | more than 6 years ago | (#21972724)

Unfortunately, "being a programmer" is about like "being a medical professional." There are all sorts of functions in the realm of being a programmer that require wide varieties of skills and no one person will have them ALL. So just as in the "medical profession" where you can be anything from a nurse to a brain surgeon, a pharmacist to a psychiatrist, you simply need to choose the skills that match your goals.

If you feel that your foundation isn't as strong as it should be and you feel like you're missing out on something because you have to experience in writing assembler or some other low-level language, then you should at least satisfy your curiosity so that you know what it is and all that. (But I warn you, if you mess with assembler, you will find that the "magic" that computers run under will disappear and you will doubt your machine a lot more than you ever have in the past... it really spoils things for you.)

But as far as I can tell, if being marketable is what interests you, do not put anything but relevant skills on your resume. "Overqualified" will not pass well through "HR" department filters and "too many skills" makes people doubt that you know any of them particularly well. Are you Indian or Pakistani? If not, things are not getting any easier or better.

here's some others might not mention (0)

Anonymous Coward | more than 6 years ago | (#21972730)

hygiene and social skills. practice them and you'll be in the top 10 percent in managements eyes regardless of your technical skill.

Pole dancing ? (1)

Qwrk (760868) | more than 6 years ago | (#21972740)

Pole dancing maybe?

No, just kidding. Me thinks 'Safety Cap' is quite right stating;

1. The willingness to admit you don't know jack, and
2. The desire and commitment to learn.

Once you learn a thing or three, you need to go back and do #1 and 2 again. Forever.

Two answers (1)

wonkavader (605434) | more than 6 years ago | (#21972744)

"As an undergrad, what skills should I be trying to attain now to further my employability in the future?"

I'll give you two answers. Both are smart-ass and both a TRUE.

1. Interviewing. Read "Sweaty Palms" by Anthony Melody.

2. Learn how a computer works. Dimes to donuts nobody's made any attempt to teach you this. Read history books on computers. Read about old machines, where systems were simpler. Read older microprocessors spec sheets. Then ask questions about everything you saw. When you understand why people created mercury-delay memory, you'll begin to think about what having memory means, what speed in memory demands, and that will lead you (ultimately) to cache-hit ratios and paging systems. You're probably only learning things which isolate you from how things actually work, and thinking that that's reality. It's not. You'll be interviewing with people who are older than you and they'll know how much you don't. Remember: "Those who do not study history are doomed to not knowing it."

Don't focus too much on the technical side (5, Insightful)

antifoidulus (807088) | more than 6 years ago | (#21972750)

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 [iaeste.org] 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.

Job skills can wait (1)

geo-geo (33913) | more than 6 years ago | (#21972752)

You're in school. You will get a job and you will learn on the job. A degree from a University is gonna help a lot in getting your foot in the door, not the number of computer languages you know and how well you know them. I'd love the chance to be back in the situation you're in. Enjoy your time. Don't feel you even need computer related (summer) jobs to gain experience, you'll be doing those jobs for the next 40 years. With good enough people skills and a willingness to learn quickly you should be able to land a job soon enough without spending your free time now learning even more.

Do the things you want, party and have fun. Real life will come along quicker then you think and you'll be kicking yourself for not doing the fun stuff when you had the chance. I haven't had that kind of life for nearly 15 years now and although I don't regret the path I'm on, there are things I know I'm not going to get the chance to do but I had the chance back when I was finishing school...

Undergraduates should not be specialized ... (1)

Thomas M Hughes (463951) | more than 6 years ago | (#21972758)

I made a version of this post in the previous thread, but some form of it should probably make an appearance here as well.

Undergraduate education is not about developing skills, job training, making you a better employee or things of that sort. The proper way to learn new specialized skills (like new programming languages, techniques, or the like) is to either go to a trade school, pick up a book and start teaching yourself, or (heaven forbid) require your employer to train you for the job he wants you to perform. Skills are nice to have, no question. But specific skills are not the goal of an education.

If you want to understand the point of an undergraduate education, look at the overall structure of the program. Notice how the University has a general education requirement where you take a bunch of classes that you thought you had no interest in? Anthropology? Philosophy? Literature? Humanities? Math? Foreign Languages? Okay, keep that in mind. Now look at your chosen major. Notice how it has you take courses from a number of different fields in your chosen major? (I'm not in your major, so I can't tell you what these are, but I suspect 10 minutes with a course catalog would make them clear pretty quickly). When you see this structure, it should be clear that the goal of an undergraduate education is not specialization; it's a degree of educational breadth more than depth.

Why breadth? Part of the belief is that by having a small bit of understanding of a large amount of subjects, you as a person will be better suited for dealing with a large number of diverse circumstances. It's significantly easier to go from your own pet Instant Messenger program project to writing drives for hardware devices if you've at least had some exposure to them before. It's also easier to go from you drivers to writing video game physics if you've taken some physics classes. And it's easier to go from your video game physics to being a lead designer, if you have some background in literature, film, and the like, to provide you with some resources to make a really great game. The assumption in University education is that an individual with a wide breadth of knowledge will be smarter, wiser and more adaptive than a highly specialized individual.

And this gets me back to my previous post about the point of education. The point of a university education is not because it leads to wealth, power, or even happiness. The university as an institution that stems from 2,500 years of intellectual history, dating back to ancient Greek civilization. For the Greeks (and the Romans, and then the Christians, all of who were the champions of education), the goal of education was to make you a better person. For Plato and Aristotle, the goal was that by understanding the world around you, you would be striving towards a form of excellence that is only available to human beings. This was similar for the Romans. The Christians modified it claiming it was to get you closer to God. The point is such that, when your life is examined, it's possible to say "That is a good life."

So, I've rambled a bit, and I don't think I've answered your question. What skills should an undergraduate have? No skill is essential to an undergraduate education. What should an undergraduate have? They should have a wide array of experiences and exposures to different aspects of the world. If you leave your university with this, you may not find a job, but your life is going to end up being a lot better than the guy who's only concern was building a resume.

COBOL (1)

TheGrapeApe (833505) | more than 6 years ago | (#21972764)

Trust me, it's going to be huge.

Database (2, Informative)

flymolo (28723) | more than 6 years ago | (#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.

Competence, Communication, and Passion (0)

Anonymous Coward | more than 6 years ago | (#21972772)

Interviewing loads of new college grads, my personal checklist is Competence, Communication and Passion. ( in order of importance ).

Competence : Do you know what you are talking about, when talking about things you should know about.

Communication : Can you clearly express what you do and do not know. No one expects NCG's to know everything, so be up front if you don't know the answer, but try to say how you would go about solving a problem even if you don't know how to do it.

Passion : Are you doing engineering, software / hardware / whatever, because that is the path that was selected for you ? Or do you have some passion for it ? Have you gone beyond the scope of your learning to be interested in the field you are working in?

Many people have the first two qualities, but it is the third one that will set you apart from a field. Any activities or projects that aren't required by your studies show that you have interest in your subject. That can make a difference when deciding between two competent candidates.

firmware - C and asm (1)

freshfromthevat (135461) | more than 6 years ago | (#21972774)

There are those that will tell you that C and asm jobs are much more rare than C++, C# and Java. They may be right. I can tell you, as director of Firmware Engineering of the company I'm with, that it is MUCH MUCH harder to find unemployed C and asm 8/16-bit micro engineers than it is to find MSWindows, Linux, big system, C#, java and etc programmers.

My recommendation would be to go to http://www.ti.com/ez430 [ti.com] and for $20 buy yourself a eZ430-F2013. That comes with a MSWindows GUI demo package of a C compiler, assembler, simulator and debugger, with the real TI CPU. With this you can get your hands dirty writing firmware for your own application. It's worth it. It will really enhance your resume going into many lines of work in the embedded/firmware engineer lines of work.

Communication and Theory (2, Informative)

MosesJones (55544) | more than 6 years ago | (#21972778)

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.

Doesn't Matter (1)

26199 (577806) | more than 6 years ago | (#21972780)

Nobody hires graduate/inexperienced programmers expecting them to be good; some things only come with experience.

Which is why lots of places don't hire graduates. The ones that do are more likely to be looking for people skills and problem solving than specific experience.

The best CV for a programmer is one with >5 years of directly relevant programming experience on it, in a position of responsibility. You can't compete with that, so don't worry about it. Just do what interests you ... and be prepared to be persistent in the job hunt. Once you get into the game you will hopefully have the opportunity to prove that you're a good bet. After a few years in one job you are much more hirable and can move on if you want to.

Don't tell them what you don't know. (0)

PhearoX (1187921) | more than 6 years ago | (#21972782)

At my last interview I was asked the following questions:

"Do you have experience in cgi?" Answer: yep.
"Perl?" A: sure.
"C#" A: yep.
etc etc etc. ...all lies. I had never even cracked open a book about any of these topics, let alone dabbled in these areas. However, I was applying for a job that had nothing to do with these things.

Be sure you are answering questions within the context of the job you are applying for. You are applying for a web design job. Will web designers be familiar with backup utilities? Hiiiighly doubtful, but if you are asked, say yes. You are likely smart enough to figure out any backup tool they sit in front of you should the occasion ever arise. At least, as good or better than any other web developer on your future team.

I did end up doing quite a bit of coding in the languages I just mentioned, but programming is such a simple thing to do, any fool can muddle his way through it. If it's a programming job you seek, just learn the basic highs and lows of all the popular languages, then make it very clear that you have "some" experience with however many languages it is that you looked into. Also make it clear that you can learn ANY language to some degree of proficiency in less than 24 hours, which is a perfectly acceptable amount of time to pick up a new language. They're all nearly identical, of course. A for loop is a for loop... Just syntactical differences in a few cases, which are easily googled in seconds.

Unfortunately for those of us who have been doing it for a long time, programming is no longer the un-tamable beast it once was. These days my 6-year old son writes programs in VB to catalog his Pokemon card collection in one weekend. Tell them you know, even if you don't. Then when you need to apply the skills you lied about, google your heart out and come out smelling like a rose.

RELATIONAL MODEL (0)

Anonymous Coward | more than 6 years ago | (#21972820)

Please be sure you understand databases.. the way DBA's do, NOT the way programmers do. PLEASE. I'm so tired of the "Javafication"/"Railsification" of databases. Languages come and go, frameworks come and go, but we have to put up with shit DB designs for years and years.

The rule of thumb (1)

apankrat (314147) | more than 6 years ago | (#21972822)

As one of our instructors back in the Uni used to say - "we don't teach you THE language, we teach you how to LEARN the language". That's pretty much the most important SKILL anyone should master in the college. CompSci or not.

As far as the actual knowledge goes, I have always been of an opinion that a graduate that knows 5 types of balanced trees is worth a bunch of dodos that "know" 5 languages. In the end the CompSci is all about an abstract thinking ability. Therefore the foundation - data structures, algorithms, db principles, grammars, etc - needs to be there and the rest will follow.

Feel free to disagree :)

For four years I learned to program COBOL... (1)

mdm-adph (1030332) | more than 6 years ago | (#21972824)

...on big iron. Then I graduated and got a job in web design. (A real job, not "making websites for people I know.") So, I guess... uh... keep your options open?

Depends on what you want to do (1)

Tmack (593755) | more than 6 years ago | (#21972828)

If you just want "a job in programming", concentrating on Java will get you that. If you plan to build your career on programming, and do more than simply hold down a job, dig deeper into C, asm and other lower level languages so you can learn how the different logic bits actually affect the system as a whole. Java is so popular because it abstracts alot of the fundamentals and routine stuff such that you can get away with not worrying about it. The problem with it tends to be coders relying too heavily on Java doing the right thing, rather than knowing what their code actually does. Sure, you could get a job doing java, but if you want to really go somewhere and advance in the field, you need to have a firm grasp on reality, ie: Java isnt magic, it is still bound by the system (sry for the matrix-ish quote, but it applies here) and thus what it abstracts, like garbage collection and var management, still affects the system. With a better fundamental knowledge of how such things work, you can better control those effects.

Aside from that, study the different OS platforms as well (Linux, Windoze, Solaris, BSD, etc). Even though Java itself abstracts that for the most part, there are still differences in the way it behaves and the tuneability and availability of certain functions on each. If nothing else, it will help immensely when working with an Ops team or when troubleshooting issues that might be platform dependant, and is good stuff to have on a resume.

Tm

Learn a Declaritive/Functional Language (0)

Anonymous Coward | more than 6 years ago | (#21972834)

Invest time in learning a Declarative or Functional Language. http://en.wikipedia.org/wiki/Declarative_programming [wikipedia.org]
Languages like C and Java are Imperative and require a different type of thinking. Imperative languages have proven practical... but articulating algorithms/data structures in a declarative form is very powerful and making a come back.

A declarative language like Haskell may be a good start, even though it likely will not become mainstream. But I'll wager that the things you'll learn in Haskell will make you a better programmer, and will be applicable to knew languages/toolkits of tomorrow.

Haskell! (1)

mstahl (701501) | more than 6 years ago | (#21972848)

Ok maybe not, but seriously programming in high-level functional languages like lisp, haskell, ML, etc., lets you really explore the abstract nature of computer science. That way you can become a computer scientist rather than just a computer programmer. Concepts like recursion, functional mapping, and—in the weirder languages—lazy evaluation and functional currying are really useful to at least be aware of, and they can help you write more efficient programs in other languages as well. Most helpful for me, at least, is that Ruby supports many of the same functional constructs that exist in Haskell (map, called "collect" in ruby; fold, called "inject" in ruby; etc.). The advantage here is that you can really prototype your algorithms in code and see, conceptually, what they do without being bothered with the nuances of a language like C++, which tends to slow down that process a lot with the constant compiling and mysterious errors.

I was initially taught Java, then C, then C++. When I learned lisp, I never went back. And yes, my pinkies [google.com] still hurt.

Disclaimer: Watch out, as languages like PHP and Python do not support tail-recursion, a vital requirement for efficient functional programming. Without it, you're stuck with stacks and while loops.

It depends on what you want to do. (1)

jareth-0205 (525594) | more than 6 years ago | (#21972856)

If you want to go into application / web programming, then stick to the high-level Java / C# / PHP stuff. Even though a good proportion of /. seem to be obsessed that you must know about *everything* in a computer, for many programming tasks this is not necessary (else why was high-level programming invented in the first place?), and it's not practical for you to know everything.

Give yourself a project to complete in a particular language and work through it. It's much better to talk about real completed tasks in an interview and it's very useful to have seen things through from beginning to end. You'll learn alot about how not to make the mistake you make on those projects again...
Read about design patterns *and use them*. Being comfortable with a language and how to structure code is very important, they'll be looking for that.

Course, if you're looking to go into embedded or kernel lowlevel stuff then the rules are different, and you should ignore everything I've said...

Don't worry (0)

Anonymous Coward | more than 6 years ago | (#21972868)


I spent days upon days in a top-notch CS program learning all sorts of issues in what is being clumped together here on /. by the term 'low level programming', I have been programming since I was a child in the days of the Atari 400 and Commodore 64. I have advanced degrees in the foundations of computer science. AND I have not used hardly any of it in my professional life. I Do Java, MySQL, etc. There are plenty of interesting well paying jobs. There are innumerable companies slavering at the mouth to have you come work for them. Most of what you'll need to know you'll learn on the job.

I'm a big fan of Computer Science and computers and have a masters in the field- don't get me wrong. But the vast majority of the 'professional programming world' isn't computer science. I think Math, logic and the foundations of computation are far more important to understand than whatever particular 'low level' language is 'ubergeek' this week.

Of course, there are exceptions. Want to do Kernel code? Embedded devices? Sure. But if thats not a prerequisite for you to be happy in your career. Meh. Take a humanities course. Read up on the French Enlightenment. Chase after that awesome hottie in the third row back. Enjoy college.

On Java, and on most things, /. has been about as right as the hardcore 'warhawks' were about Iraq back in 2001. /. has been declaring Java dead since I have followed /.. There have been so many high-pressured vomitous ventings of geek spleen about Java here that they have become comical. Something almost of a parody of itself. Java is a fine language for most things. Java has many great features. Java isn't new, nor were most of the ideas behind Java new, nor were they really awesome or complete implementations that fulfilled the promise of those ideas. But so what? It works, its Object Oriented enough. When well coded and well designed its reasonably efficient for most applications. Its going to be around probably decades, and it will be a great tool for you to add to your kit when making your career. Perhaps even a central tool.

The primary skill of any undergrad (and above) (1)

malkavian (9512) | more than 6 years ago | (#21972870)

Should be Research. Knowing how to get the right answers (and not just trusting to an "I feel lucky" google run), or find the right information.
Once you know where to find the latest information, coupled with the theoretical knowledge you've gained through your Uni years, you'll find that you're able to keep current (or at the bleeding edge) of your chosen path, once you've tinkered about with various roles in "The Real World", and found one that fits you.

Necessary undergraduate skills (1)

sm62704 (957197) | more than 6 years ago | (#21972878)

  • ability to slam a six pack in less than five minutes
  • ability to wear a toga
  • ability to use a bong correctly
  • ability to (if white) excrete a rebel yell or (if black) yell "muthafucka!"
  • ability to ingest lethal amounts of various illicit substances without untoward effects
  • Ability to do without food for prolonged peroiods of time
  • ability to do without sleep for prolonged periods of time
  • ability to bullshit instructors into thinking you've actually absorbed the material you're clueless about
  • ability to reed and right
  • basic numeracy (ability to count past six)
  • lacking any other abilities, an undergraduate should have the ability to excel at some sport or another (does not apply to this discussion)

For further study see my journal,How to succeed in life if you've been unfortunate enough to graduate from college [slashdot.org]

Personality (1)

obduk (1154583) | more than 6 years ago | (#21972900)

I left university 6 mounths ago, and got a very good job before I left. I spoke to the person who employed me, and he said the main thing they were looking for was someone who would fit in with the team. The most problematic people they've had over the past few years have been people who have been anti-social, create code on their own that only they understand, and not be able to communicate with customers and other employees.

Pick one (1)

larryau (983008) | more than 6 years ago | (#21972908)

Diversify your toolbox of course, but pick on thing and become real good at it.

Unpopular on /. but... (1)

RandoX (828285) | more than 6 years ago | (#21972918)

Look at the want ads. Around here it seems to be almost exclusively .Net. Primarily VB.Net or C#. You can work on whatever you'd like to, but I'm assuming you're interested in learning some skills that have the best chance of landing you a job. Your area may differ in what they're looking for.

Bring on the boos and hisses. It brings me home a very comfortable paycheck and I enjoy my job.

Few major things (1)

Sycraft-fu (314770) | more than 6 years ago | (#21972924)

First is understand how to program. By that I mean actually understand how one uses a programming language to command a computer to do what you want. Nothing worse than a "programmer" that can only program in one language because all they learned is that language, and not how to program. If you actually learn how to program, how a computer works, then you should be able to program in any language. You'll have to learn that language's syntax and such, of course, but you'll be able to do that if you need to. You won't be stuck programming in just one or two languages you know.

The next would be learn the MS tools. You might not like Microsoft, but you have to accept that they are a major force in the industry and that you may end up with a job developing for Windows. Learn Visual Studio and be comfortable with it. Be able to write a basic program in it (it makes that pretty easy).

However, learn non-MS tools too, GCC or something like that. Don't be one of those programmers who can only write code if there's a nice development environment holding their hand. Even if that's what you mostly want to do, designing GUI apps for Windows, you don't want to be a fish out of water if there's a job that calls for you to write some code on a server using nothing but a text editor and a compiler.

Do those things, and I think you've got as good a general skills as you are going to get for an undergraduate type of education. You can't expect to master everything, and they'll always be jobs with particular requirements. Best thing you can do is get a good set of fundamental skills so you can be flexible and learn what a specific job requires.

My 2 cents (1)

Alpha830RulZ (939527) | more than 6 years ago | (#21972932)

I'd try to learn one of the container environments and web development frameworks, just to show that you can. Tomcat and Struts would be good. Try to do a project for a charity using one of these environments, which demonstrates a lot of good things to a prospective employer

I'd get familiar with .Net. Like it or not, that drives a lot of work these days, and even knowing why or why not you'd like to use it will be good.

I'd read about XP and other agile methods, and mybe some of the older texts, such the Mythical Man Month, DeMarcos' Controlling Software Projects, and Code Complete.

I'd take economics and accounting, if you think you want to work in environments that handle money. If you want to do device drivers, then maybe not so much.

Last, I wouldn't worry about it. The fact that you're asking this question probably indicates hat you're the kind of person who will do well.

No worries... (1)

LuisAnaya (865769) | more than 6 years ago | (#21972936)

Do not get discouraged, you'll get employed if you know java and data bases technologies and data warehouses. The problem is overall lack of knowledge of fundamental software design and methodology, and computer hardware architecture. Those are things like: data structures, basic IPC programming, algorithm analysis, Functional Algebra for databases, all that boring stuff. This is what separates the real computer scientist than those who merely memorize to obtain a certificate of sorts. If you know your stuff, you know your stuff. If you have a good grip on the fundamentals, you'll be ok.

Please, do not feel that you're wasting your time, but just be aware that your education is not done, you'll have more stuff to learn as you go along, and as long as you are having fun, you'll not mind.

Relational databases, SCM, practicality (1)

Reality Master 201 (578873) | more than 6 years ago | (#21972944)

Having worked with a large number of undergrad and recent graduates in computers, here's what I'd want to see more of in a candidate:
  1. Take the time to learn about relational databases. Not just SQL. Learn why there's a relational model and why it was developed (yes, pedantic shitheads, there is no widely available pure relational database; eat a dick). Learn what normalization is. Also, shoving everything into the database isn't always the best idea, and some stuff doesn't need a db behind it.
  2. Learn to work with an SCM -subversion, CVS, whatever. Understand branching and merging, and how you'd maintain a product over time. It's handy and there's tons of developers that have worked for years and don't get it right.
  3. Don't try to optimize stuff up front. The algorithm you pick typically doesn't have to be the fastest, nor do you have to do everything the most efficient way the first time around. Do something that's clean and easy to make changes to. That's an art, and it takes practice. Too often, I see people worry about making things fast before making them right. Don't do that.
  4. Learn how to do testing. Not just quickly clicking through shit. Learn to be through, use unit testing when appropriate.
  5. Do the simplest thing that could possibly work. Don't add features for the future, etc.
There's plenty of other stuff. Don't depend on code generators, don't try to use every single new thing that comes down the pike, XML doesn't belong in 95% of the places you find it, most of the time the programming language you pick doesn't make that big a difference, etc. I like people who understand how to use Unix shell tools, mostly because you can get some simple tasks done quickly by stringing them together.

Do a real, honest to God, project (1)

Buzz_Litebeer (539463) | more than 6 years ago | (#21972950)

The best class would be a hybrid class where they get people wanting to major in business together with students in CS and they do a god damned project together.

I was very good at college programming courses, only to get tossed into the "real" world where everyone does projects doing things that no one even approached having to do in an honest to God working environment.

My ability to write a house emulator using X10 using Python on Linux was a FUN project but had no real world applicability.

What should be done is get a group of business majors who approach their IT department from the point of view of their "client" their "Client" being the business classes instructor who never talks to IT directly except through scheduled phone calls.

The business majors spend a period of time getting project requirements together, and during this period of time technology on how to approach the known problem is taught in the class on the IT side(takes first half of the semester), as well as meetings with the business group (possibly last 20 minutes of every class) to soften the overall proposal, discuss layouts, designs, feasibility etc...

Then the second half of the semester the functional requirements and implementation stage for the program done by IT while the business group sets up meetings with the client when requested as well creating documentation of the work and trying to stop scope creep.

If done right you could implement the completely dysfunctional work environment that people have to work in every day, and get a product that meets most of the requirements out the door by the deadline. The teachers would grade on work done, how close to requirements it met, then grade on the following basis.

The "client" (business teachers) score would mean 20% of the overall grade of the IT group after reviewing performance reviews from the business students and IT documentation created for him to see, and 80% of the business students based on their performance and responsibilities, and IT instructor would give 80% for the IT students based on their code, cleanliness and following of some standard, and 20 % on reviews by the IT students and documentation provided to the IT students.

This way both groups "grade" each other.

Another good class (say part 2 of this thinking) would be having the students do a series of "real" upgrades and code management of legacy systems that people want to add features too.

if they could pass both of those then they are ready for the regular grind of work.

My $0.02 (1)

PontifexMaximus (181529) | more than 6 years ago | (#21972954)

While you can get a good overview of the languages/tools you will use in the real world (what's that?) It seems to me that only by getting a job out here in said world will you really get the skills you need. Tinker all you want, every little bit helps, but very little I learned as an undergrad really prepared me for the corporate world. The whole 'college teaches theory, not application' is pretty accurate in my opinion. College (and school in general) tends to have a curriculum that's a mile wide and an inch deep. Lots of subjects covering very little in depth. I certainly think you should go with what you enjoy the most, not where the money is. I've found I'm a much happier person in a job I like making less money than getting 6 figures thrown at me and hating the job. If you don't enjoy what you are doing, none of your skills will matter much, as you'll be less interested in really using them.

My biggest 'wish list' item for undergrads, especially in an IT related field, is a little more concentration on public speaking and people skills. Being a geek really is its own culture,but that doesn't mean you have to be a social retard. I've seen many a great coder fired for lack of tact/ability to dress properly. I think this is becoming a little less of an issue, but that's still one of my pet peeves.

College can only get you so prepared for ANY field, the rest is a trial by fire. Be confident in what you DO know. Just out of school, don't oversell yourself to prospective employers, and you should be just fine.

The best thing you can do (2, Insightful)

MikeRT (947531) | more than 6 years ago | (#21972962)

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.

Critical thinking and logic (1)

Urban Garlic (447282) | more than 6 years ago | (#21972964)

The most important thing you need to know is how to think about complicated programmed systems. They're deterministic and logical, but can be quite subtle sometimes, and appreciating how apparently non-logical behavior can arise from logical rules is extremely useful. Knowing the command-line switches of a specific compiler is nice, but it's not as important as being able to think critically about what's going on in a complicated system, and being able to convey your thinking succinctly in code that other people can read and maintain. Most Algol-like languages are pretty similar, so if you're proficient in one, you can probably shift to another fairly quickly, much more quickly than starting from scratch.

You should probably try to position yourself to take advantage of the coming era of shared-memory multi-processing on cheap multi-core CPUs. Then when that era fails to arrive, you'll have examined the programming problem from two angles, and will have the mental flexibility to deal with whatever actually does happen.

Here's what I look for... (0)

Anonymous Coward | more than 6 years ago | (#21972966)

Hiring a new grad is both easy and hard.

Easy - You need to have the standard toolkit of skills, primarily the language(s) that we use for development.

Hard - I want to know that you can (and are able to) work on a wide variety of types of jobs. If you only want to do Java work and nothing else, good luck to you wherever you may end up. Versatility (and a WILLINGNESS to do a variety of thing) is critical.

Things that would be useful for new grads is configuration management in large development teams (ClearCase experience is awesome), requirements (requirements tools like RequisitePro and DOORS is valuable), development processes/tools (Rational Rose experience is a differentiator), and an appreciate of the value of quality assurance methods (peer reviews, design reviews, etc.).

Graduate studies (0)

Anonymous Coward | more than 6 years ago | (#21972972)

Graduate studies isn't a skill, but getting an MSC will give you a leg up in the job market. It will also give you a chance to pick up on a few choice skills you feel you have missed as an undergraduate. A word to the wise: Pick your supervisor carefully! A negligent supervisor can leave you floundering for guidance, hold you up every time you need them to do something for you, and add academic terms to a grad degree. This can cause you a great deal needless anguish, and it is awkward to complain about a bad supervisor once you are at their mercy.

Thoughts (1)

HunterZ (20035) | more than 6 years ago | (#21972980)

- If you have an opportunity to get a decent internship, do it. If nothing else it'll look good on a resume.
- Learn C/C++.
- Get comfortable using Linux/Unix, at least to the point of being able to write some simple utility/test programs/scripts.
- Take a software engineering class if your college has one available.
- Expose yourself to some SQL and writing web-based frontends in one or more server-side scripting languages (PHP or whatever).
- Get a good grounding in general programming concepts (how computers actually work under the hood, algorithms, data structures, object oriented design, etc.).
- Look at job listings for stuff that looks interesting and see what qualifications they're looking for; explore the related technologies and concepts.

Fortunately I was able to do all of those in college except for the internship.

Also, it's true that college only prepares you so much; you'll have to spend a lot of time getting up to speed.
Load More Comments
Slashdot Login

Need an Account?

Forgot your password?