Interesting Computer Science Jobs?
mattskent writes "I'm currently a junior in college working towards my Bachelor's degree in Computer Science. As such, I'm starting to look pretty seriously at jobs in the IT/Computer Science field. I've spent plenty of time working entry-level IT jobs doing various kinds of help desk type work, and so most of the exposure I've had to the field is related to support of other people's computers. I enjoy helping other people out, but I'd rather not be plugging things in and restarting computers the rest of my life. Although the possibility is growing on me, I don't think I would particularly love to write code all day for a living either. What are some interesting jobs that you've had or heard of that I could look into fresh out of college with a Computer Science degree?"
I enjoy helping other people out, but I'd rather not be plugging things in and restarting computers the rest of my life.
As a junior-level CS major, do you really think that's what CS grads typically do?
Although the possibility is growing on me, I don't think I would particularly love to write code all day for a living either.
Then why are you majoring in CS?
I've been working in the visual effects industry since I graduated (~10 years ago). I started for a small studio writing scripts to automate common tasks. Since then I've:
- built a distributed render system on top of open source software
- written animation tools for artists
- written software for animating, simulating, and rendering fur
- learned Houdini, Maya, RenderMan and many others
- written shaders
- written many, many plugins and tools in various languages
I'm now managing a team and have discovered that it's hard to find talented software developers with a solid grounding in mathematics and computer science who have the skills to work in VFX. There are plenty of hackers who can put together a MEL script, but few who actually understand the underpinnings of the systems involved.
If working on VFX for film and TV shows sounds interesting to you, look into developing your skills as a Technical Director (or TD). The skills I look for in a TD are:
- understanding of the 3D pipeline (modeling, texturing, rigging, layout, tracking, animation, lighting, rendering, compositing)
- technical competency in the software used (Maya, Shake or Nuke, Renderman or Mental Ray)
- solid background in programming (scripting, understanding of OO design, C++ desirable, Python especially)
- solid understanding of Unix as a technical user
- ability to learn and master new technologies quickly
- ability to empathize with artists and understand their perspective as a user
- strong mathematics background is highly desirable
- experience in digital or traditional filmmaking also highly desirable
The people I've worked with in the past usually fall into one of three categories:
- have a degree in computer science (or related), minored in fine arts (or just had the interest), and then took a college program in 3D
- smart people from a completely different background who taught themselves both 3D software and programming
- artists who took a college program in 3D, who then taught themselves programming
I recommend the first option, or if you're persistent enough, teach yourself the software at home and start networking online.
If you have a masters in computer graphics, mathematics, or physics, another job open to you is that of the Shader Writer. Shader writers build either complete shading systems or components that model how light reacts with materials. These models are not usually physically accurate (although that is becoming more of an option now). Things to look into:
- BDRFs
- ambient occlusion and color bleeding
- subsurface scattering
- procedural texturing and modeling
- shader anti-aliasing
- global illumination techniques
- shading languages such as RSL, GLSL or Cg
Competent shader writers are HIGHLY sought after and very well compensated.
Check out the job postings at Pixar, Industrial Light & Magic, Sony Imageworks, Rhythm & Hues, and Dreamworks Animation for more info. Also check out the forums at cgsociety.com and odforce.net.
And my advice to the next-youngest generation is this: Do something you like.... but think for a moment before you do something you really love, because having to do it for your job every day is going to make you a little more leery of it, especially if the Thing You Love isn't really good at making money (like many of the creative fields) and you have to work longer and harder and get yourself more stressed. I know that coding for fun isn't half as fun as it used to be anymore, at least for me. Fortunately, I have a strict 40 hour work week (! and in Silicon Valley at that) and I still have adequate time for doing thing that I love.
That, and as far as employability in and around the computer world: internships, internships, internships. :)
The World Wide Web is dying. Soon, we shall have only the Internet.
On this line of thinking, any deep knowledge in a niche area can be very useful. It's usually rare to come across computer programmers who are also experts in , and as such, in the right place, they are in high demand.
Generally you'll find an expert in a given field, who needs some software to do a task, but has *NO* idea about how to write software, at all. Quite often, these people hire programmers who know basically nothing about the field, and the expert ends up designing the system and being the manager, and often the result is exactly what you'd expect to get when a non-developer designs a system.
Being the person that bridges the gap is incredibly useful. Just make sure that the field is something you have an interest in anyways.
I've personally worked in a few fields like this. To give you an idea, I spent a few years building SCADA software for control systems. This meant I also spent time physically wiring up motors and sensors and such to I/O hardware, and setting up networks and then writing software to communicate with and control all this stuff.
I've also been involved with some open-source voip projects, so a lot of that programming involves talking to voip phones, which meant I had a desk full of hardware to play with, instead of just staring at a screen writing code. It may just be me, but I find a certain satisfaction when I can interact with code I've written using objects in the real world, and not just as interfaces with a screen and keyboard.
Speak before you think
I get quite a lot of money for integrating open source tools to specific client needs. It's much cheaper, and more flexible, to pay my salary to provide access to a huge range of tools than it is to specify, purchase, and implement one closed source project that turns out to be complete vaporware or where the company goes belly up and the software can no longer be supported.
It is a great joy of an open source developer's career when, during the time that a closed source company or consultant is writing their bids and release schedules and Gant charts and Powerpoint presentations, an open source developer has already found a compatible tool, tested it, modified it for local use, and put it in production. This has happened to me repeatedly throughout my career. On occasion, I've been overruled and the closed source tools used for 'business support' reasons, and on several of those occasions I've seen the closed source toolkit thrown out a year later and the entire system rebuilt from my notes.
That is an event to warm one's heart on those long, cold nights sitting in the server room repairing a mess.