Computer Science Major

I’ve been accepted to many schools as a CS Major. I want to know what you do in the workforce coming out of school. Where did you travel to (if needed)? There’s the programming part but it can’t be just limited to programming, right?

Background of me and my interests

I like to build. I started building when I was first introduced to Legos. Even now, in FRC, I build with wood, metal, anything. But when I build, I don’t visibly use math. I don’t write math equations to calculate anything. At that point, I thought I wanted to do Mechanical Engineering.
The switch from ME to CS happened very recently. Here are some catalysts:

  1. We couldn’t get a programmer for our team, so I thought I would take the reins and try it.
  2. With all the talk about AI and Autonomous robots, software is what makes them autonomous.

While AI and Autonomous are catalyst to the switch, i am not limited to these fields.

My philosophy of Programming is, “You can build whatever you want, but without the software, it’s useless.”

So what am I getting myself into that’s called Computer Science?

My definitions of CS, CE, ME. I am probably wrong.
  • Computer Science is fully software, hardly any building.

  • Computer Engineering is the building part of smaller stuff, the stuff you don’t see often, small electronic pieces (like a circuit board), hardly any software.

  • Mechanical Engineering is the building of anything big, the everyday large machines.

Also, Should i go a 3+2 Masters or just a 4 year Bachelors?

3 Likes

With the starting wage of computer science majors being so high, and the relative small bump that you get from getting a masters degree, I would recommend doing a 4 year Bachelors. The opportunity cost of paying for another year of school, and missing out of a year of income is high.

Computer Science is a great major, and if you make good use of your time in college, by getting good grades, participating in clubs that interest you, and getting internships over the summer, you will have no problem finding a job with a bachelors degree.

Obviously every university is different, but for me:

a. In school, CS was a healthy mix of theoretical concepts dealing with computing and practical programming knowledge/experience. Technically the latter was it’s own major called Software Engineering, but there’s so much blend between the two curriculum at my school. Out of school, you would pretty much just get hired to build software unless you intentionally went in a different direction; there’s just tons of software development jobs still out there.

b. ME is less about building things, and more about “how can I rigorously model how mechanical systems work”. Most of your first 2.5-3 years is spent taking classes such as statics, dynamics, fluids, thermodynamics, etc, that will go deep into how a certain subset of these mechanical systems work. Obviously, understanding all of these areas on a fundamental level lets you build things more robustly, and gives you a better idea of whether something will or will not work before you build it. I found that my ME curriculum was more on the theoretical side of the scale as compared to my CS curriculum. There are a few more practical classes, but those tend to come towards the end of junior/senior year.

Out of school, MEs get hired for a huuuge variety of jobs, as the education you receive is quite a bit more broadly applicable. Some jobs will have you designing things, some are more analysis based, some are only tangentially related to engineering but want the critical thinking skills that MEs often develop.

Personally, I double majored ME/CS. My day job is purely developing software. ME knowledge is mostly just used for robots nowadays.

2 Likes

You might want to take a broad look at a few other engineering disciplines, as well, such as Systems Engineering and Electrical Engineering.

There is a lot of overlap in the different fields. Knowing more about what you’re interested in doing, might help folks help you decide.

Computer Science is just that, a science. There’s generally a heavier focus on theory over practical/hands-on work (not to say you won’t get that too).

Software Engineering is engineering, so there’s a heavier focus on software design/architecture and is much more hands-on than theory.

Computer Engineering is also engineering, so it’s hands-on, but with a focus towards hardware/low-level software over application-tier software (i.e. FPGA, not Windows or web application)

Mechanical Engineering is also engineering, but with a focus on machines and structure, and generally doesn’t get into anything computer related (though yes, you’ll use them for CAD and such)

As for the BS/MS vs just BS, that’s ultimately up to you. Many schools will give you the option to switch one way or the other. Keep in mind, it’s likely harder to get into the BS/MS program, though easier to drop the MS portion.

I graduated with a BS in Computer Engineering from Georgia Tech in 2016.

I ended up taking a few software classes, though the brunt of Computer Engineering focuses more on hardware and hardware-software integration. Our required courses utilized more lower level languages and hardware description languages (or simulated HDL’s) than higher level language. However we were allowed to take CS courses as part of our elective requirements, and the ECE department even had their own software engineering, advanced programming, and embedded systems programming courses that dealt with higher level languages.

The majority of what I took away from my Computer Engineering coursework was how computing hardware is designed, how software runs on hardware and how to optimize software to run on hardware to minimize power consumption and resource usage.

When I worked in industry I ended up having to learn some languages that I wasn’t taught in coursework (C# and Python), though this will likely be the case at any software job you work at; no one joins a job with all of the knowledge to perform at 100% on day one.

If you’re in it for the money, it’s often better to get a few years of experience and learn some upcoming software technologies and jump from one position to another. Master’s degrees are great though if you’re trying to learn more in a specific domain or the field you’re entering often requires Master’s degrees for available jobs.

This is actually the biggest misconception I hear about mechanical engineering - that it’s building things. YMMV since every job and every school is different, but in my experience working with and having a lot of friends that are MEs (I’m personally not one), ME is largely about design and modeling, and less about doing the actual building. Sure, there are some jobs out there where they are looking for an ME that can both design and build things, but that is not the majority. Having experience in fabrication will be extremely helpful, because when you design something you have to keep in mind how it’s going to be made (just like in FRC!), but many programs will give you zero instruction on this. You may not have a class that teaches you how to swing a hammer, use a lathe, or weld. If someone’s dream job is to just build things all day, without having to do any design or modeling at all, a ME degree is likely not what they are really looking for, and I would point them to skilled trades.

5 Likes

This is highly dependent on specific field and company, and is not true across all industries. I went 5 years for my masters… and the increase I got because of it (as explained when my internship between years 4-5 turned into a full time offer) paid for the extra year after a single year of working. Sure, I missed out on a year of income… but the increase probably made that up 2x by now. That extra year was also a lot of fun, with a lot of great memories - I wouldn’t trade it for anything.

Another option to consider, however… go for the BS, then a few years into working you could consider going back to school. I know plenty of people that went back for 1-2 night courses a semester (and got work to pay for it!) to get an MBA and move over from engineering into management. It’s not for everyone, and you won’t really know if you want that path until you’ve been working for a few years, but it is an option.

I majored in Computer Engineering, because I was already fairly good at software and wanted to learn more about hardware. It was a great experience. Since graduating, though, it’s been 100% software, almost all of it web-based. No work on hardware, everything runs on standard equipment. There’s some level of configuration work to be done, specialties in front end vs back end, stuff like that… it can be a differentiator in the job descriptions, but it’s all really software based.

Aside from moving to Minnesota after graduation, I haven’t personally had any significant travel. Some people I worked with in my first job did some trips to India to work with some off-shore resources there, but not very much of that. My travel really just consisted of attending a few conferences for continued education/training. No big deal, almost more of a vacation than anything else.

As for definitions… CS is software, with no real distinctions. CE bridges the gap between CS and EE - it’s kind of a low-level software specialty, so you have to know the hardware side of things to be able to do it. EE is electronic hardware. ME is mechanical hardware. There’s no difference in scale for any of this stuff. I know plenty of ME’s that work for medical device companies on parts that are tiny.

I think a lot of this is from the way people say that every role in FIRST is said to prepare you for being a different type of STEM major, which implies (at least to a lot of people and FIRST alumni I’ve talked to) if you like build/design then you’ll like ME, which is very far from the case as I learned when I started out as an ME major. (I remember thinking, “I don’t want to be learning about all this theory all the time, I want to learn what I’m actually going to be doing day-to-day, like when I was in FIRST in high school!”, hence why I switched majors to Computer Science because I felt that was a lot more actually learning what you’ll actually be doing on the job). I will say that I felt a little disgruntled towards FIRST after going to college as an ME.

Basically the point I’m getting at is, if you like build, do not just assume ME is going to have a lot of stuff you used/learned in build.

1 Like

So what do you do outside of FIRST in the real world?

I’m still in college, but basically I’ve been able to use the stuff I’ve learned in about 1.5 years of my computer science major for personal projects, a scouting app for my team, as well as making programs/games on my own time just for fun. I’m not sure what I’m going to do yet, but I’ll probably end up working on developing programs front-end for a company eventually. Still really early on for me to absolutely decide, but I actually always feel like I’m learning something useful in my CS classes, especially because I’m someone who learns a lot better by doing rather than just having to memorize theory or listen to theory lectures, while in my ME classes I felt sometimes I was wasting my time sitting through some of the ME classes.

Edit: I’m not saying don’t go into ME, I’m saying it might not be exactly how you expected it if you were involved in build in FIRST, and wanted to share my experiences. My experience won’t always apply to everyone else.

1 Like

@Aaron_Li, you are doing the right thing by asking advice from those who have gone where you are considering going.

If you enjoy building things and want that to be part of your day job, Computer Engineering or and some areas of Mechanical Engineering may be a good fit for you. Having said that, whether you will actually build anything on your job depends a lot on the particular employer. At some companies my friends worked at, the EE’s were not allowed to pick up a soldering iron to install a part on the circuit boards due to the technicians union trying to protect their jobs. At other companies making the same types of products, the engineers are free to do any construction work they feel is necessary. Some engineers I have worked with just don’t want to get their hands dirty. I don’t understand them.

Boundaries are quite fluid now days. One of my coworkers has a physics degree and has been writing software that runs on a PC for over 20 years at this company. One of the staff scientists did his PhD in optics and is now working on acoustics. I think for many employers, they are looking for fit more than an exact match with the piece of paper and they consider that “you were smart enough to learn X so you can learn Y and be productive for us”.

Computer Engineering jobs are sometimes advertised as Firmware Engineer. Their work is intimately intertwined with the work of the Hardware Engineer that designs the circuit board that their firmware is deployed on. Sometimes I have had conversations with the firmware engineer regarding which of us should implement a particular (part of) feature or function. The firmware engineers I work with have as many circuit boards, power supplies and oscilloscopes on their desk/workbench as I do.

Several people mentioned money. It is important but don’t sell your soul for it. If you do want higher pay at a new job, check it out thoroughly. Some of those jobs have to pay more because they are located in places with high costs of living. Two industries that seem to “pay more for the same work” are the Oil and Gas industry and investment banking. Both of these industries are quite regional so you may want to consider living in Texas if you go into O&G. It is also very cyclical. Investment banking mostly jobs will mostly be located in NYC near where you are now. One of my wife’s coworkers at the boutique investment banking company she worked at was the highest paid, salaried EE I had ever met. He did no engineering work. He used his math and programming skills to develop algorithms and software to simulate parts of the financial markets.

Lastly, developing skills in two complementary fields, like @Anthony_Galea, will elevate you above many of your classmates and coworkers.

2 Likes

I started in CS a long time ago and switched to the physical science of Meteorology (study of weather, not meteors) after a year or so, but I think I can speak for all of the sciences: if there is an area of science that interests you, you can double that up with a CS minor and you will be a top candidate in your field coming out of college.

Everyone needs people who can code well.

We develop machine learning models and other complex algorithms to predict tornadoes and other severe weather events, and to do that we need people who understand the physics but can also program. Those people are hard to come by. We are lucky to get even one good candidate, sometimes.

1 Like

That’s the college head fake we all joke about. That you don’t use what you learned in any of the classes in college for your job. The head fake is that you actually go to college to learn how to learn.

The FIRST head fake is that it’s not about the robot. You are actually learning to follow engineering processes. These processes will be similar to what you see in your first job.

As to what OP is interested in. Since you are interested in AI and Autonomous, I’d look at what majors and skills that companies that specialize in AI and Autonomous are looking for. Then look through the course curriculum and see if those skills are even taught in the college. Another thing to look for is if the college has a RI3D program or there are some colleges that participate in the DARPA challenge of a self driving vehicle.

You may find that what you are interested in is only taught your junior or senior years. Your first two years might be full of classes from a variety of engineering departments. It’s a way to broaden your learning and if you do happen to start out as a CS and later find out that you like CE classes more you can change majors without wasting a year.

It’s also how one keeps up with changes in technology. Most of the core technologies related to the products I have worked on were not even a glimmer in some researchers eye the year I graduated from university.

If one goes into computer engineering, it would not hurt to take some EE courses relating to basic electronic circuitry in areas covering digital design and simple transistor theory. No need for the electromagnetics and deep circuit theory. There are a fair number of jobs where the projects are too small to justify assigning a EE and a firmware engineer so the employers assign it to someone who can do both. I missed out on several jobs because I did not have current software skills even though I had the circuit design skills.

Thanks, I will tell that to my daughter who is planning to major in CE next year!

No, I’m not looking at these specifically. They were the specific catalyst that helped my transition from ME to CS.

When I graduated, CE wasn’t even offered. I, and a lot of other students, really liked the digital electronics classes which led to a few microprocessor classes. It was the old school EE classes, transmission waves (power), motors and some class about energy that I’m glad I don’t remember the name that I had to suffer through to get the degree. Of course a few years later the school offered CE degrees.

What you do in CS is so wildly variable from school to school, that it’s almost a question that is not worth asking…however in the spirit of what you are asking I will give you the two cents from my life experience which is only predictive of your experience if you have a time machine and go back to my school, with my instructors.

I got my BS in Computer Science from a school that had 2/3 of the CS instructors that were mathematicians by their own professional experience. Therefore, that CS department was heavy on theoretical concepts, and proving algorithmic complexity, etc. Frankly, not the kind of stuff that I’m super interested in, I’m more of a practical problem solver than theoretician. There were some nuggets from my very mathy CS curriculum that have saved multi-million dollar projects where things were going wrong, or just weren’t flat working where I stepped in and said “I think insert school topic would work here.” So I’m not saying it wasn’t valuable, just not what I wanted.

My master’s degree was in the ECE school, which is the school of Electrical and Computer Engineering. In that curriculum I focused on more practical concepts like Wireless networks (not home Wifi), where we had to implement modulation and key sharing algorithms, and learned the what the guts of the cellular networks are. We also focused a lot on security, and cryptography. In my line of work, my cryptography expertise from my Master’s degree has opened a lot of doors for me in the real world.

Computer Engineering could have been about FPGA or circuit design, but there was also another track that was more practical questions that were less embedded-systemsy and more broad topics, but topics at a low level.

Lastly, as a person that hires people for a living, it’s highly likely that whatever you have studied in school isn’t going to directly apply to anything I need, so really what I’m looking for is someone that I know I can work with and has a demonstrated ability to learn on their own. The truly successful FRC students are auto-didactic (example of those here on CD asking questions) so that is really what is going to help you.

Now the practical advice:
If you understand lower level programming languages, you will be able to transition to higher level languages a lot easier than the reverse.

Easier to learn Javascript when you know C than it is to learn C if you know Javascript. (in my opinion). So my practical advice would be to learn the lowest level language possible, and focus on new and popular topics out there now (Security, Machine Learning, Image Processing, AI, etc).

Take whatever track gets you down those roads, and you’ll have no issues trying to find a job after college.

1 Like