Cass Everitt, a Class of 1990 alum, completed the following Q&A on being a software engineer. It's an interesting glimpse into the career field. He is a software engineer with Oculus and previously worked at NVIDIA.
What specific degree do you hold and where are you currently employed?
I have a BS in Electrical Engineering and an MS in Computational Engineering from Mississippi State University. I am currently employed at Oculus, which is now a part of Facebook.
Describe your engineering field.
The field I have worked in for most of my career is real-time 3D computer graphics. The chief objective in this field is to synthesize digital images (called "rendering") of 3D scene descriptions as fast and with as much fidelity as possible. Fidelity (the quality of the resulting image) is important, but the critical aspect of real-time is that you need to be creating these new images very fast. Typically that's 30 to 240 new images created every second, depending on the kind of system display.
In order to achieve these rendering rates, special hardware must be employed. The common term for this hardware is a graphics processing unit (GPU), and you can bet that there's at least one of them in every smart device you own that has pixels (phone, tablet, notebook, pc, set top box, game console). Understanding how these devices work in addition to the conventional CPU based programming environment is key to the engineering that I do.
What is your current job title?
Software Engineer, I think. I've had various titles throughout my career. Some companies care about them, some don't. Generally speaking, I don't. What's important is that the things you are working on are challenging and rewarding, and that the people you work with and for value your contributions and you work well together. In some places I have worked, they let you make up your own title. In others everybody that programmed went by "programmer". In yet another, they were fairly rigid in their titles, and would not let me have "graphics" in my title despite that being one of their limited options and it being my field of expertise. So I try not to worry about it if I don't have to. I develop graphics and related software. That's short enough that it doesn't really need a title.
What duties do you have daily?
I work on the Oculus Mobile team, developing software for the collaboration Oculus has with Samsung to support Gear VR. Since consumer mobile VR is a new product category, there's a lot of variability to what I do. Sometimes I work on low level system software that every Gear VR app calls into. This software is critical for making sure that new pixels show up on the VR display every single refresh cycle (60 times per second), and that those pixels correspond to the virtual world around you. This is a harder problem than it might seem at first blush because a display mounted to your head moves around a lot, totally unlike a conventional computer monitor or phone, tablet, or laptop display. Getting this timing right is tricky, and requires hardware to be programmed in ways it previously did not need to be.
I also interact regularly with hardware vendors to communicate the needs we have with them, and to provide feedback to the solutions they provide. Sometimes this is one-on-one with individual vendors, and sometimes it is in the context of industry standards groups like the Khronos group.
Often I do fairly routine feature rework and maintenance of our existing VR apps and samples. Sometimes it's just working on our build system, which includes some python scripting among other various strange build environments. The Android development ecosystem can be weird!
Less regularly, I spend time on further out, somewhat research-like tasks, like exploring computer vision options that might be feasible in a mobile environment or enhancing the quality and/or efficiency of 360 video streaming formats.
There's lots of different stuff to do in my current job. I've had jobs where I worked on one tiny block of a chip for over a year without working on anything else. That was a fun job, and very satisfying, but I prefer to have some variety.
What is your average work schedule?
Mostly normal, though I do work from home a lot. I get up in the morning, I start working. I will occasionally meet friends for lunch, but usually I just grab a bite and keep on going. I'll stop working in the evening usually by 6pm, but if I'm in the middle of something, I don't mind working late into the evening. There's a lot of flexibility in my job. The key is to balance getting the work done that I need to while not neglecting the important things outside work. For me that includes time with family, time with friends, unwinding, and (recently) brewing beer. Work / life balance is something my company takes very seriously, and I do think that happy employees are generally more productive employees.
Describe your educational background from high school on.
My 11th and 12th grade years in high school, I went to a newly created residential school called the Mississippi School for Mathematics and Science. I was in the first graduating class. I didn't have much advanced educational opportunity at my home school, so MSMS was a terrific opportunity for me. I got to take advanced classes in calculus, chemistry, biology, as well as learning about computers for the first time.
Probably due to laziness more than anything else, when I graduated, I went to the nearest university to where I lived. The choice of EE was the result of poor / non-existent strategy on my part, but it turned out to be a good decision anyway. I got an IT job in the department, and that is where I really started learning how computers worked. After a couple of years of that, a professor who did 3D graphics happened to be in with an IT issue, and I asked him if he had any openings for programmers. He hired me on the spot, with no real experience in programming or 3D graphics. But it turned out to be pivotal for me, as I've done that work the rest of my career.
The formal education I received was valuable, but my real education has always been on the job, doing things, and learning things as I go that help me do the things I'm trying to do.
If you had to do it over (education or career) would you change anything?
I can't think of any monumental changes I'd have made. In hindsight there are some decisions I might have made earlier for greater financial reward, but just about anybody can say that.
This wasn't "the perfect career for me". But what made it so rewarding was and is that I always liked what I worked on. A lot. And it didn't hurt that the pay wasn't bad. But there are tons of interesting things to work on. A lot of them pay well. I think I'd have had a good chance of being just as happy and successful in other fields as long as I found the work rewarding and engaging, and as long as I could pay the bills with at least a little left over.
I'm glad I never realistically considered being a doctor or lawyer. Those were the "gold standard" professions that parents hoped for their kids when I was a kid, but it turns out there are a lot of negatives with those professions that I'm sure would have been showstoppers for me. Not least that the hours are less flexible and the tasks less "fun".
What advice do you have for someone pursuing a similar career path?
Figure out what a) you're good at, b) that you enjoy, and c) that there's a solid, ideally growing, job market for. This may take some time, but take the time, because it's important. There will hopefully be more than one thing, but realistically, you'll have to pick one initially.
Learn all you can. Not just from traditional courses, but get a job doing that kind of work if you can. Get a tangentially related job if you can't. Find a way to move closer to the work that you want to do - sometimes this means doing non-assigned tasks on your own initiative. Entry level is great when the job is teaching you valuable things or gives you access to people you'd never come in contact with otherwise.
Don't stop learning. Find new challenges, unsolved problems, things to keep you engaged and invigorated. Keep it fun.