Advice on Computer Science as a Career

I’m currently in the process of applying for a Computer Science degree at a local state university in Florida. Specifically, I’m interesting in pursuing a career in the computer programming field. Are there any software developers out there in Dope Land that can share their experiences in the career field? Do you enjoy the work? How competitive is the job market?

The Florida University that I am applying to offers a bachelor of arts and a bachelors of science in Computer Science. The bachelor of arts degree has less math requirements in exchange for more humanities coursework. Do employers have a preference for one degree over another? Will I have a tougher time getting a job with a BA in Computer Science rather than a BS? :confused:

I’m a senior developer at a small company. I’ve worked for tiny companies and large companies. Ask away.

As far as your actual questions: I do enjoy the work. Some positions, like for Google or Facebook, are quite competitive, others are “we take anyone that applies”, most are not so bad, like 2-3 people for a spot, IME. I think employers would prefer the BS over the BA, but that’s just intuition. The math will help you more than an art history course. The only caveat would be documentation, but even a BS will make you take a course in technical writing.

I hire programmers, computer scientists, engineers, physicists, etc.

A few random thoughts.

  1. The nice thing about computer programming is that A) it isn’t going away anytime soon, B) it is applicable to any specific field and industry.
  2. You will differentiate yourself from other programmers if you do a double major and get another degree in mathematics (often a lot of overlap with CS), physics (same), or some engineering discipline. If you get a degree in mechanical engineering as well as one in computer science, for instance, you will have a tremendous advantage for certain jobs over an ordinary, general-purpose programmer. If any other technical discipline interests you, I would highly recommend a double major.
  3. Taking a B.A. so you can take more humanities when getting a computer science degree is a waste of time. You should not discount humanities - being able to think clearly and logically, and express your thoughts clearly and logically in written and verbal communication is a tremendous advantage in any technical career - but you would be fine just taking some humanities electives while getting a B.S. degree.

It can be a whole lot of fun!

I was in operations (database admin) and for me, the job was often actually exciting. It’s one hell of an adventure when the power goes out and the system crashes, right in the middle of a month-end accounting close! Once you’ve coped with something like that, having users complain about system speeds is nothing!

I grew up on a cattle ranch, and saw what real work looked like. I high-tailed it to college and studied computers.

I second your second point.

As well as helping you get a job, IMO, it also means your employer may push you towards role that are more varied, which many people prefer.

If you are running away from math then you might want to rethink the whole CS thing. CS is math.

Since when? The last math class I took was high school geometry. I’ve been a programmer for 20+ years. Never has been a problem.

Does the thought of math or abstraction frighten you? It seems to frighten the OP. Where would you be without the ability to think in abstractions?

I have been working as a software developer for about 13 years and for me it’s the best job I can imagine. I get to do what I love all day and get paid a very decent salary.

However I really believe good software developers are born and not made. Some people have it, and some people don’t. If you aren’t a good software developer or you don’t enjoy it then you are really going to hate your job. No matter how much they pay you slaving in front of a hot debugger trying to track down a .0001 variation which doesn’t reliably occur is hell on earth unless it’s what you love.

As far as which degree to choose that really depends on where you see your career going. If you see yourself as a hard core coder with a career path from associate developer -> architect then all you need to do is to do as many software and algorithms courses as you can, that sounds like it would probably be the BS rather than the BA.
If you see yourself just generally in the technology field where you might get into management, or analysis or possibly leaving the field entirely then the BA is probably a more robust degree.

I really don’t think any employer will really care about the letters after your degree. I have done plenty of hiring in my time and I can’t think of any time I actually noticed. One thing I do like to see when college graduates are applying for software development jobs is a description of particularly interesting projects they worked on in university. It gives you a chance to show of your skills and more importantly something to talk about in the interview.

Since always. Computer science—not programming, but computer science—is a form of applied mathematics. The kinds of classes one will take in the course of a degree in computer science (like discrete math, cryptography, networking, operating systems, data mining, artificial intelligence, etc.) almost always involve some part of mathematics. Not super-theoretical advanced mathematics, in general, but there are elements of number theory, combinatorics, set theory, statistics, probability, and so forth thrown in.

I have to agree with BorgHunter that software development and mathematics are pretty closely aligned. I have lately been working implementing user interfaces and the amount of mathematics I use day to day is pretty minimal. So I’m sure it’s possible to have a job as a programmer and not to do any math above a 12’th grade level, but if you dislike mathematics it is pretty unlikely that you will be happy as a software developer.

If the OP is in 12’th grade and dislikes math then I wouldn’t read too much into it, high school math teachers don’t always engender a love for the topic. If the OP has an open mind and is willing to work hard a the math courses then it is an excellent start. However if you are starting a CompSci course with a phobia of math where you believe that you are not good at math and you never will be then just give up now.

There is math and there is math. I suck at differential equations and am mediocre at best in calculus, but it has never been an issue in 40 years. A math degree or double major is going to require stuff that you most likely won’t need. Statistics and linear algebra however are very likely to be useful.

I definitely agree with this. Though my degree was pure CS, back when I took it there was a lot of digital design also, and my PhD is in computer architecture. I’ve never had pure CS or programming jobs, always stuff that applied it to things like EDA (electronic design automation) and now data mining.
Today more than 20 years ago fewer people in other fields know how to program. I run into people who bump up against the limits of spreadsheets and the like, and who consider a 20 line Perl script to process millions of lines of information as something miraculous.

One non-academic thing. If you go into CS as a career, you really should like to program. I love to program, and almost every day of work is a treat.

I’m going to vote the other direction. I’ve had a long career in software engineering and computer science, and at numerous promotion points I’ve been told that my advantage over others in my field is my ability to communicate technical information to non-technical people. People, especially technical people, tend to specialize – but the world needs a few generalists: people who can straddle the boundaries between disciplines or even jobs. I credit the humanities portion of my undergraduate degree for probably a third of my salary. But whichever path you take, remember you’ll need to be good at the technical side first and foremost.

The computer field is younger than most disciplines, and we don’t have the nomenclature worked out well yet, but as a rough guide:

Computer Science: The math-and-science branch of the field. Very academic, tends to be about the limits of what can be computed, artificial intelligence, performance optimization, and algorithm design in the abstract, language design, and similar topics, often applied to “idealized” theoretical computers. Very math focused.

Computer Engineering: The other extreme: very real-device-focused, usually hardware centric and concerned with characteristics like heat, power consumption, chip design, microcode, firmware, networking protocols, etc. Basically in the range from a specialized electrical engineer to a hardware-focused programmer. This is the “softest” of the titles; folks sometimes use it for much broader categories.

Software Engineering: In the middle, generally concerned with the design, maintainability, and performance of real world software systems. This is what most “computer programmers” either are, or are working toward becoming. Things like user interface design, software metrics, modularity, design patterns, that sort of thing are the specialty here. Can be very mathematically inclined (moreso as you tend toward UI and graphics) or not (although dealing with abstract ideas is always required). A lot of programs consider this a sub-specialty of Computer Science (my graduate program did), but in many ways it’s more of an engineering (rather than an academic) discipline.

Not sure how that works if you have a CS degree.

Most (all?) university computer science curricula are very heavy on the math, and math-like courses.

For example, mine required 3 semesters of engineering calculus, a semester of discrete and combinatorial math, and my choice of differential equations or linear algebra.

Then we had to take operations research (math intensive- 3rd semester calculus and some linear-algebra like stuff), analysis of algorithms (math intensive- lots of proofs) and database theory (math based, but more in the realm of set theory than calculations).

Pretty much any non-programming or non-networking course was heavily math-oriented in some fashion- it’s how the concepts are denoted.

Back in the day (mid-late 1990s) at my school, here’s how the Computer Science / Computer Engineering degrees broke down. They were both in the College of Engineering, so there was a sort of engineering mentality regardless.

Computer Science- what **TimeWinder **describes.

Computer Engineering had 2 tracks- hardware and software. The hardware track was effectively an electrical engineering degree with a minor in computer science, minus a couple of analog EE courses, and plus a couple of CS courses. The software track was basically a CS degree with an EE minor, but with tightened up rules on sciences and math; CS majors just had to take a certain number of science courses and had some choices in the math categories, but the CE-Software people had to take physics, chemistry and differential equations.

I don’t have a CS degree, but I’m hardly alone in that. Everyplace I’ve worked has a mix of software engineers with CS degrees, degrees other than CS, or no degree at all. I’ve worked at more than one place where one or two of the highest level engineers - the guys who knew everything about the product and were called on to do the trickiest work - had no degree at all or degrees other than CS. Hell, I’ve worked with software people who used to be lawyers. My current gig has one guy with an MD.

Sure, you have to understand logic, abstraction, a bit of algebra, and be able to think through algorithms to be a coder. But beyond that, not really. The one place I worked that had a bit of very heavy math focus (writing code to calculate gas flowing through a pipe) hired a math major to do that work. None of the rest of us - even the guy with the master’s degree in EE - felt qualified to do it.

My two cents: to be a professional software developer (as opposed to a computer scientist) does not usually require a lot of actual math, but it does require one to be able to think like a mathematician.

In my career as a software developer, I have very rarely needed to use maths above high school level, and in fact I didn’t even need all of my high school skills – I don’t think I’ve ever used calculus in my professional work, for example. (There are some math-related topics which you don’t necessarily get taught in high school, such as binary and hexadecimal notation and big-Oh complexity, but those are not particularly difficult things to learn.)

On the other hand, the relatively basic math and logic skills which I do need, I need all the time. Every time I write an algorithmic function, it’s like proving a little maths theorem – perhaps not a particularly difficult one, by the standards of a maths PhD, but it’s what I do for many hours per day, every day. If you want to work as a programmer and you don’t have an intuitive knack for that kind of logical problem-solving, you will either deliver crappy code or have an unacceptably low productivity. (You also won’t enjoy it very much, unless you manage to gravitate towards a role which does not involve too much actual programming.)

To be a good programmer, you need to be able to look at a piece of code and understand, almost instantly, not just what it does but also what are the edge cases which require special attention, how efficient it will be on unusually large inputs, etc. When reading through a piece of code which does something with a list of elements, you should be verifying without even consciously thinking about it, whether it will do the right thing for a list with zero elements, whether it doesn’t loop over the list more often than neccesary, whether it could happen that new items get inserted into the list while you’re looping over it, and if so, whether the code will handle that correctly, etc.

Understanding such things usually does not involve particularly sophisticated mathematics. But a large real-world software application consists of many, many thousands of such little informal theorem-proofs, all interconnected, and in order to be able to understand how the whole thing hangs together (and especially in order to figure out what’s going wrong when it doesn’t quite work correctly!) you need to be able to look at any of those individual little pieces of code and grasp what it does almost immediately, subconsciously, because otherwise you will miss the forest for the trees.

Which means that, even though you may never need to use any mathematical concepts which a reasonably smart high school student would be unfamiliar with, you still need to have the same kind of brain structure which is needed to become a good mathematician.

This is my perspective from someone from the USA.

I have a bachelors and a masters degree in information systems. From my perspective Computer Science is frequently from the science/math college at a university. whereas Information Systems (or Management of Information Systems) is frequently a degree out of the business college.

In my experience the CS degree is a lot more focused on the technical side as opposed to the IS or MIS degree includes more of the soft skills such as more project management, etc.

To answer the OPs question; based on a research paper I did back in grad school; IT type jobs can be very rewarding; but one of the biggest challenges you face is breaking through the experience barrier. The fact is, a lot of the beginning to mid level jobs are outsourced across the pond which is cheaper; but it’s created a learning gap to get experienced IT people in America. My own experience with outsourcing is that it can be good if you have really clear directives of what you expect. Otherwise you can easily get lost in a quagmire of miscommunication.

Can we cut this tangent out by noting that the OP did not express an opinion on whether she would avoid or embrace math? She just noted that the difference between the BA and the BS was that the BA track had fewer math requirements and wondered whether employers would care.

So, while we’re all straining to pat ourselves on the back for our ability to abstract inferences from given data, howzabout we get back to answering the questions posed in the OP, and not debating further the misperceptions that appear to have been formed about what the OP is about.

Thanks in advance,

Kimmy_Gibbler, B.A. (philosophy), J.D.

The only math you need to know is how to count from 0 to 1. You need to know it really well though. Like how to do it recursively.