What Skills Should Undergrads Have? 587
kramed8 writes "As a student myself, after reading the recent 'Slam' article on Java I really began to be concerned with the path of my education. I am currently attending a small Canadian University as a 3rd year Computer Science and Business student set to graduate next year. What seems to have troubled me from reading the article and user comments is that I do not feel as confident as I want to be in C, ASM and other related low-level programming topics. I was taught C++ in my introductory courses, with subsequent classes using C# or Java. My education has not been particularly difficult or time consuming to get good grades, so I have spent my free time dabbling in topics and languages that interest me (ie Multiple GUI Toolkits, Python, Linux). How can I spend my free time in the next year to prepare to enter the work place with a proper toolbox of skills? From what I have been told, there are more jobs for Java and Data Warehouse development teams compared to lower-level programmers. As an undergrad, what skills should I be trying to attain now to further my employability in the future?"
Free Time at School (Score:5, Funny)
You should be good (Score:4, Informative)
Re:You should be good (Score:5, Interesting)
If you want to do "business" programming: inventory, payroll, CRM, SCM, vertical apps in a variety of fields, than by all means learn Java. But it's your business skills that will make you stand out, and as these jobs are largely outsourced, you very much need the people skills to work as a consultant, or manage consultants. If your problem domain is business operations, you had better understand how a business operates.
If you want to do "embedded" or "realtime" programming, again the low-level details are important, but I caution you that these jobs pay significantly less than infrastructure jobs (despite often being harder). Also, non-realtime embedded programming is shrinking as a field, as the cost of hardware needed to run a full Linux or BSD OS install goes down every year. The world will always need realtime programmers, however.
If you want to do "games" programming, I have no idea what skills you'll need, but you'll be paid crap and worked until you burn out and quit the industry, so do you *really* want to write games?
Re: (Score:3, Insightful)
If you want to do "infrastructure" programming, such as OS development, language development, clustering, virtualization, storage, etc, [...]. In my experience most jobs in this broad area are still done in-house.
Wait... isn't this exactly the stuff that most companies do *not* do in-house ("Hey, boss -- I'm thinking we should design a new programming language and OS for this next project")? Only companies like Google do any of this kind of stuff in-house.
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., work
People Skills (Score:4, Insightful)
Re:You should be good (Score:5, Interesting)
However many of these devices are starting to resemble more "traditional" computing platforms. They run a full OS, have virtual memory support, FPUs, etc. However one thing they do have in common is that they run on a limited set of hardware, and often have strict memory, performance, and power constraints. The skill set does not really need to include knowing more than basic ASM programming (if you used SPIM in a computer architecture class you should be okay). You need to know the fundamentals of computer architecture, and a class on OS is very important (you must understand some of the different memory models etc).
But, as a CS student, your job is not to know the details. Your job is not to know the languages and the tools, your job is to learn the algorithms, to learn the thought processes, to learn how to design. What tools you know how to use aren't very relevant, and will change over the next couple years anyhow. Being adaptable, and knowing the fundamentals, and having strong problem solving skills is far more important. The rest will come. Any company that won't hire you because you don't know their specific languages and tools is either not looking for a student out of college, or is looking for an IT monkey to write code for them. If they don't want a CS student, beware, as the job is likely quite boring anyhow.
Phil
Re:You should be good (Score:5, Informative)
However, here is another piece of advice. You'll hear many advising you to maintain a wide array of general skills, and they're absolutely right. On the other hand, I've been a programmer for about a decade, as well as an administrator (win and unix), graphic artist, management, and a wide array of other job descriptions - each of which I am well above average in, but none of which I specialize in (though my resume paints me as primarily a programmer). I'm well versed in more languages than anyone I know (including assembly language for four different chipsets), and I'm at least somewhat experienced in an even greater number. I'm able to easily install, configure, troubleshoot, and often hack many different operating systems. I'm also known at my job for being able to pick up almost any skill quickly, as-needed (such as studying for a CCNA, my most recent hobby) - I'm the resident fix-it-all here, especially when the task requires knowledge that none of us have at the time, or would normally require experts from a number of different areas. I have a range of experience that, in my line of work, is more comparable to the 50-something old-school techies that are inevitably found in this industry, than it is to my peers (who are in their late 20's and early 30's, have some range, but are usually unfamiliar with subjects outside their specific skill set).
I'm not bragging though, and here's why.
For all my wide range of skills, I've found I have been valued less in the corporate world than those more limited specialists. True, I can complete projects that normally take a whole team to do - and often faster. True, I've shown time and time again that I can find solutions and create software that even our better-paid experts haven't been able to seriously attempt. That doesn't matter, though, because as an accomplished generalist at a (large and growing company) I've found myself sidelined over and over, forced into a job of very limited scope that is filled with specialists (in ASP.Net in this case) who I now have to compete with (in the one area I was always weakest at - web design). I've had the empty pleasure of seeing my old tasks pulled away, one by one, so they can be moved into specialist departments (with the end result apparently being the same quality of work, but requiring a much larger work force). This wasn't due to overload (I can automate almost anyone out of a job) or poor work on my part, but simply a matter of corporate architecture. All of these skills I have, all of these years of experience, are now going utterly to waste, not because I have an inflated ego and believe myself to good for my present task, but because all I can do now is advise others on how to do the jobs I used to do, while I perform a now-monotonous role where quantity of output is the only way you're judged. That sort of thing, though, doesn't attract much attention or pay. If only I'd spent more time on one of those many subjects, mastering it more completely, because total mastery over one subject is eventually more useful than significant proficiency in many subjects.
The long and short of it is... expand your horizons. Learn new skills, and maintain the habit of studying, even long after you're out of school. Grow and adapt, and become at least marginally familiar with as many areas of technology as possible, because th
Re:You should be good (Score:4, Insightful)
Re: (Score:3, Insightful)
It won't teach you high-level (Score:3, Insightful)
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.
Re:Free Time at School (Score:4, Funny)
Re: (Score:3, Insightful)
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
Don't overlook people skills (Score:5, Insightful)
Re:Don't overlook people skills (Score:5, Insightful)
Re:Don't overlook people skills (Score:5, Interesting)
1) Remember names!
2) Be genuinely interested in other people. Everyone has something interesting about them. Figure out what it is and then let them talk about it. Remember, whoever talks most in a conversation is generally going to think it was a good conversation.
Re:Don't overlook people skills (Score:5, Insightful)
It adds
1) Smile the first second when you meet someone (tho tricky if you are a very pretty female).
2) Imagine you MUST say "yes" 9 times before you are allowed to say "no" to a co-worker. This does many wonderful things. a) respects their opinions b) lets them do things their ways c) you are perceived as likable and non-critical d) when you do rarely say "no" folks stop and listen because you respected them and you only say "no" when it is really important.
Re:Don't overlook people skills (Score:4, Interesting)
You're right about smiling, also look them in the eye.
And while we're adding more items to the list, Chris Rock had a good one on how to make women happy. Just ask "How was your day?" I first did this with random girls I met as a joke, but then realized how right he was when he said that that one question can lead to a 45 minute conversation. I wasn't even aware that much 'stuff' could happen in one persons day lol...
Re: (Score:3, Insightful)
I disagree entirely. Most people are dreadfully boring and stupid.
Figure out what it is and then let them talk about it. Remember, whoever talks most in a conversation is generally going to think it was a good conversation.
But this part is exactly correct, which is why it's important to develop your acting skills so that you can act interested in other people and get what you need from them, even when they're dreadful
Re:Don't overlook people skills (Score:5, Insightful)
Short Answer: yes.
Long Answer: Many technically adept people are often misunderstood, uncomfortable around people, and unfamiliar with the rules of social conduct. It has little to do with being sleazy, and more to do with trying to improve your communication skills. What you take as a given is a learned skill for most of us.
Think of the people you've met you you've thought were assholes, arrogant, insecure, and fake. Chances are, they were none of the above; rather they just came off that way because they didn't know how to properly handle the nuances of social behaviour.
Aiming to rectify that is never a bad thing.
Re: (Score:3, Insightful)
Re: (Score:3, Informative)
Re:Being able to talk to/analyze the customer espe (Score:4, Insightful)
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.
Re: (Score:3, Interesting)
Social life is important, yes, but after a year of this I was so far ahead of my fellow students that while the course was really hurting for them, I was having the time of my life, and I ended up actually teach
Re: (Score:3, Insightful)
Make sure that when you are (say, in your 40's at least) you can still evaluate them in the same way you're doing now.
I would talk to those in their 40-50's to get an idea of what you may think when you are that age.
Re: (Score:3, Informative)
indeed. so he should get a bunch of cats, and practice herding.
Re:Too much free time? (Score:5, Insightful)
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
Re:Reminds me of a joke... (Score:5, Insightful)
School is about a foundation. You're worried about what you know about C? You may never in your life program in C. Or you may program in it every day. Either way, you're not going to get your first job based on your college programming experience, not unless you did something so wildly off the charts that you could have programmed it in RPG and people'd still be lining up to hire you.
What you need most to remember is that it's your work once you're out in the world that will define your career. It's a hell of a lot more important to buckle down and learn in the real world, than it is to leave college thinking that you "know" how it's supposed to be.
If you want to be a developer (Score:5, Insightful)
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.
Can't Resist... (Score:2)
Wind.
Dude.
Re:If you want to be a developer (Score:5, Insightful)
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 (Score:4, Insightful)
Re: (Score:3, Interesting)
College doesn't teach you everything you need to know in the workplace. I'm a Mechanical engineer and I work
Repeat after me... (Score:5, Insightful)
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... (Score:5, Insightful)
Re: (Score:3, Informative)
Re: (Score:3, Interesting)
Ask prospective employers (Score:5, Insightful)
Re:Ask prospective employers (Score:5, Insightful)
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
Good luck!
Re: (Score:3, Funny)
No, wait...
Information Interview (Score:5, Informative)
How to find folks to interview? Networking. Work your contacts. Good sources include friends of your parents, your friends' parents or their friends, people your professors might know, etc. Or, find local events or societies or clubs that attract folks from your target industry. Or just call up companies you admire. This aspect of the information interview is great training for later in life, when you really want to get a job.
Re: (Score:3, Insightful)
I'd suggest to the original poster to just mess around with anything that catches their eye. The more, the better. That way, he/she learns what he/she likes to mess around with and gets exposure all over. After that, I'd suggest finding some technologies that reall
Personal finances and Confidence are the two (Score:5, Interesting)
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 (Score:5, Insightful)
Re: (Score:2)
Re: (Score:3, Interesting)
Learn how the hardware works. (Score:2, Insightful)
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.
Re: (Score:3, Insightful)
The best programmers are the ones who are able to think at all four levels (and some sub-levels) at the same time. In many ways the language is the least important of these, it only exists to allow you to write the kind of thing humans think about (the algorithm) in something that is easy to turn in to something the machine understands (
Party more! (Score:2)
Business classes (Score:4, Insightful)
I wouldn't worry about the job aspect. (Score:2, Interesting)
You got free time? (Score:5, Insightful)
my $0.02 US (Score:4, Insightful)
Learn the low level things. (Score:3, Interesting)
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: (Score:2)
Re: (Score:2, Interesting)
From a strictly job-search prospective, I must a
Re: (Score:2)
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 (Score:5, Informative)
The article yesterday I think was more aimed at people who don't understand that basics of whats going on behind the scenes. For example, its expensive to convert between formats of numbers (int->double etc), or how to use bitmasks/shift bits.
A couple of things... (Score:5, Informative)
You can also look up some open source projects that need assistance (there are many of them that do) and see where you can help on them. Open source projects are a great way to get experience and critiquing your own skills.
You can also learn these three words:
"Hello. Geek Squad."
well, what do you want to do? (Score:2, Insightful)
Re: (Score:2)
WE DO NOT!!!
Self Taught... (Score:2, Interesting)
Personal View (Score:2, Informative)
What do you *like* to do?
I could not stand to write program code all day long, as it would drive me insane, BUT - for whatever reason, I don't mind writing in php and working with web-based programs. I know there are others that feel just the opposite. So, while you will see plenty of good answers on 'you have to know ' and they will be right, cull it down to what leads you into a career y
Don't forget "Engineering" skills (Score:5, Insightful)
Because girls dig it. (Score:2)
Re: (Score:3, Insightful)
One thing to consider (Score:2)
Brett
A few projects good for ANY programmer! (Score:4, Interesting)
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!
Remember these words.... (Score:2, Funny)
"Do you want fries with that?"
Learn about workflows and project management (Score:3, Insightful)
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.
If you are thinking of technical skills only (Score:2)
Outside of technical skills, political theory through the 300 level, some literature, and economics through th
Student's Perspective (Score:2, Interesting)
get into real projects ASAP (Score:2)
What *KIND* of programmer? (Score:2)
If you feel that your foundation isn't as strong as it should be and you feel like you're missi
Two answers (Score:2)
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
Don't focus too much on the technical side (Score:5, Insightful)
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.
Database (Score:3, Informative)
Learn some SQL. I've never seen a programmer job where Databases skills were a negative.
Communication and Theory (Score:3, Informative)
The number 2 thing is the theory. Most new technology trends boil down to new applications of well understood theories. If you understand about distributed computing then you know the problem domain and just have to learn the detail of Web Services/REST/CORBA/.NET etc, if you don't know the theory you are stuffed.
Communication and Theory matter. The programming languages don't. After graduating from a good university that gave me that base I went to one interview and said "yes I know C", one week later I had to do a programming test... I had to learn C in that week and still came top out of the interviewees. That was the theory helping. Today however I find more and more that its the communication part that is important both in communicating with the business and explaining the theory to those who don't understanding it within IT.
Doesn't Matter (Score:2)
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 prepar
The rule of thumb (Score:2)
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, a
For four years I learned to program COBOL... (Score:2)
Depends on what you want to do (Score:2)
Haskell! (Score:2)
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 hel
The primary skill of any undergrad (and above) (Score:2)
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 (Score:2)
Unpopular on /. but... (Score:2)
Bring on the boos and hisses. It brings me home a very comfortable paycheck and I enjoy my job.
Few major things (Score:2)
My 2 cents (Score:2)
I'd get familiar with
I'd read about XP and other agile methods, and mybe some of the older texts, such the My
Relational databases, SCM, practicality (Score:2)
Do a real, honest to God, project (Score:2)
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 d
Comment removed (Score:3, Insightful)
Critical thinking and logic (Score:2)
Thoughts (Score:2)
- 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
Think in algorithms, not in syntax. (Score:2)
Writing (Score:5, Insightful)
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.
Basic switching/routing (Score:4, Insightful)
Read Joel on Software (Score:4, Informative)
Could recommend this book more highly to an up and coming programmer.
This is the first book that we ask our interns to read.
The second book (for those pursuing management positions) is
"Leadership and Self-Deception"
ISBN-10: 1576751740
You're already ahead of 90% of your peers (Score:3, Informative)
1. You recognise that there are serious gaps in your experience and understanding.
2. You are clearly motivated to do something about it.
3. But you also recognise that your inexperience means that you're not entirely sure which gaps you should be plugging first.
This puts you way ahead of a lot of computer "scientists" who are still in university.
Please, please, please do the entire industry a favour and work to maintain that passion. People who've lost their passion,who don't really care as long as the next paycheque comes in seldom make top class IT professionals, and frankly are ten a penny.
College Experience (Score:3, Insightful)
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.
It's easy (Score:3, Interesting)
1a. Communicate well. If you're sounding like an illiterate teenager (in person, e-mail, it doesn't matter) that's what people will think you are. Maybe it won't be kewl and l337 to your peers, but the old people that write the paychecks seem to like it. If you're working internationally at least be functional in the language. Being in a meeting while natives are jabbering away right in front of your clueless face is not fun. The look on their faces once they discover you understood all the foolish American remarks and offer to buy them a beer is priceless.
2. Always be able to articulate the value you add to whatever you're working on. Currency value is best since even the dumbest managers are keen on money. Understanding the business need behind the technology will help.
3. Choose a technology that's interesting to you and that you like to work with. It doesn't matter if it isn't in the top 5 in last week's Network World. Even if it pays less than the skill-o-the-day. Nothing sucks the joy out of life more than a job that you hate. You'll also find that your natural enthusiasm for whatever it is you decide to be good at adds to the credibility you get from 1 and 1a.
Not true (Score:5, Insightful)
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.