Programmers/Software Engineers! Please reply.

I am currently in school for computer science. While it wasn’t my first choice of major (I’d rather do astrophysics/cosmology, but there are several reasons I can’t), I can say that I love the problem-solving plus the fact that coding is equal parts science and art. I’m about two years into my degree and have a few questions:

[ol]
[li]What’s the major difference between a computer programmer and a software engineer? I understand software engineering requires more school and you have to get certified. Why would I want to be a software engineer over a programmer?[/li][li]What is my expected salary when I graduate with a B.S. in Computer Science with a minor in Mathematics? I plan to move to Europe or Oceania (Australia or New Zealand) after I graduate… will I take a hit on my salary if I do that?[/li][li]What professional organizations should I join? Is there any point to me joining IEEE?[/li][li]Finally, how long before I burn out? I am 31 now and will probably be 33 when I graduate. I have heard (from two stepbrothers who are both programmers themselves) that programmers generally have a shelf life of about 10 years before they burn out and move on to management. Is this true?[/li][/ol]
Thanks.

“Software engineer” is just a fancy title, at least in the US. I have no certification and I have worked with software engineers who didn’t have high school diplomas.

I am in no professional organizations. I don’t know anyone who is.

I have been programming professionally for about 23 years. I work with programmers who have been at it for three and four decades. Whether you will “burn out” or not has more to do with you than the job. People can get tired of doing any job.

If the terms are applied correctly, the software engineer is the big picture person. His concern is the way the software interacts with other systems, both hardware and software. He’ll work with engineers from the other platforms and applications to determine how best to integrate them. The programmer is the person that actually takes the engineers specifications and and makes something useful out of them.

The caveat is that the titles are applied correctly. As Gus stated, people will call themselves engineers because it’s a nice important sounding title. I can walk down the street and pick up a pile of steaming poo and drop it into a Ghirardelli sack. That won’t make it fine chocolate.

There is no such thing as a “certified software engineer.” It’s a bullshit title for people who think “programmer” doesn’t sound fancy enough. That’s why my business card says “Senior Software Engineer.” :smiley:

That depends on all kinds of things, like where you live and what industry you’re working in, but as a fresh grad with no practical experience, you can expect to make less than $40,000 a year. Possibly a lot less.

The biggest problem with programming today (IMHO) is that there are no useful professional organizations. IEEE sets industry standards, and ACM is an academic organization. There is no organization that certifies you as a competent programmer and which can be used to separate people who know what they’re doing from drooling script kiddies.

That’s entirely up to you. You won’t accomplish anything useful if you’re focused on where you’ll be in ten years, though. You don’t even have a degree yet.

In the 15 years I’ve been doing it, I’ve heard so many definitions swirling around programming it makes me dizzy. Don’t worry about it.

Everybody’s burnout is different, and some people never burn out. I’ve never gotten tired of designing software and writing code, but the people in this industry can really make life hell. A lot of really anal-retentive types. And micromanagers (i.e., anal-retentive people with power).

Regarding the burn-out aspect - you’ll find that you are constantly (or should be) upgrading your skills, learning new packages and tools, taking on new projects, etc. This keeps it somewhat interesting over the long haul.

The trick is to steer clear of pure “support” jobs. That usually means care and feeding of one system over years and years. You may become the guru of that one system, but you’ll potentially lose out on the stuff I mentioned above.

  1. In theory, software engineers are supposed to be engineers. That means that they have gone through some sort of engineering training and understand basic engineering principles. Programmers, by comparison, are just code monkeys. They aren’t expected to understand the math and science behind what they do, they are just supposed to crank out code.

In reality, though, there really isn’t a distinct line. Some places, like where I work, make a distinction. A software engineer is expected to understand things like feedback control and Nyquist’s theorem. A programmer is expected to understand the most complex aspects of object oriented design. One isn’t necessarily better or more skilled than the other, it’s just that each has a different skill set.

Other places though don’t really make a distinction like that. Some places call all of their programmers “software engineers” whether they have any sort of engineering background at all or not.

  1. I have no idea what starting salaries are these days.

  2. An ACM membership does give you access to online books and training materials. Overall though I didn’t find it very useful. I’ve also been a member of IEEE in the past and didn’t get much benefit from that either.

  3. If you like what you do, there is no reason to ever burn out. You do have to constantly improve your skills though. When I started out stuff was programmed in Fortan or assembly code. Then most stuff moved to C. After that, C++ became the big thing. Now C++ is obsolete and everyone is doing .Net stuff. 10 years from now I don’t know what the “in” thing is going to be but I guarantee you it won’t be what you are learning in school now.

Exactly. A software engineer is concerned with the architecture of a system. Best if the concerned party is also a programmer.

My title is also Senior Software Engineer; I have degrees in both Electrical Engineering and Computer Engineering. What makes me valuable to my employer is I can talk both Object Oriented programming with the CS guys and hardware stuff with the EEs. Add to that the ability to debug code and hardware on my own.

From where I sit, a software engineer is someone who can do disciplined development while simultaneously understanding the code effort, the target hardware environment, and the end user environment; the Big Picture Guy as previously stated.

Apologies is this sounds pompous, but to me, the difference between engineer and programmer is the difference between professional and amateur.

Any clown can program - the basics aren’t difficult. I’d expect a software engineer to be able to display the discipline and rigour to produce well-designed, maintainable, relatively bug-free code.

Unfortunately, many people who work as software engineers do not fit this description, and this is one of the reasons why software is expensive to produce.

Oof. It sounds like maybe I didn’t choose the best major. I do love coding and am completely open to learning the “next big thing”, but a starting salary of $40,000 a year? That’s less than I make now. :frowning:

That’s a lot closer to reality. Software engineering is not the same as architecture, it is the application of engineering principles to software development.

Here is some history, since I started programming 42 years ago and got a PhD in CS 30 years ago, and was in grad school when software engineering was just beginning. In the old days (and maybe still in some places today) there was a division between analysts who would understand the problem and lay out the solution, and programmers, who’d get detailed instructions, maybe flow charts, and do the coding.
But when I was an undergraduate I learned about the software crisis, and people realized that even the small projects back then were late and failing. Dijkstra and Wirth and others realized that software can be written with some structure, using the basic blocks so familiar today, and that software would be easier to maintain. They were right - maybe some software is crap today, but given the size and that there really aren’t any more people doing it than 30 years ago, if we used the same methods as used in the early '70s we’d be in a big mess.

As a specific example: a programmer knows how to write code, but a software engineer has a set of data structures he or she is familiar with, and knows how to choose the right one for the right application. As I understand it software engineering today also include project management and the like, code complexity, and things like that, but I think the distinguishing factor is the study of how programs are put together.

Just programming leads to bad habits. 25 years ago professors I knew dreaded the crop of new freshmen who wrote Basic on their C64s and thought they knew everything there was to know about programming. When we taught assembler, the first program was a simple Pascal program which we graded the hell out of to scare students out of bad habits learned in the Programming 101 class. (We threw out the grade later.) We found that structured programming was even more important in assembler than in a HLL.

IMHO, it’s not that you sound pompous, it’s that you don’t have sufficient granularity. A “programmer” should exhibit all the qualities you’ve expressed. The appellation (to me, anyway) signifies more than just a “code monkey” or, even worse, a “cargo-cult coder”.

IEEE does a lot more than just set standards. There are a wide variety of conference and publications. The IEEE Computer Society is now 98% software, which I say as one of the last hardware oriented people involved in it. It is probably worth getting a student membership and browsing Computer and related magazines, and seeing if one is interested. These are reasonably academic too, though there are lots of reports from industry, but not much stuff that a lower level working software engineer can use. (Though there are tutorials and work on education.)

The problem for all these things that anyone with enough time to do the volunteer work for any professional society is either going to be an academic or a reasonably senior industry person. We’re all reasonably far away from the grunt coding and designing people do.

Like others have said, they’re supposed to be the difference between small and big picture guys with different skill sets, but often, they just call everyone a Software Engineer because it’s a better sounding job title. IMO, anyone going into the field should have at least some education on both ends, figure out which one is more to their liking, and then go that way. Either way, because of that, you’ll need to read a lot more about specific jobs to know what they really want you to do.

As others said, location is really important. In this area, DC metro, you can expect to start well above the 40k number given upthread, but that doesn’t really mean much because cost of living his higher here too. Computer Science isn’t like nursing or teaching or whatever where there’s more or less a steady demand anywhere. In general, if you want to make a decent living at it, particularly while you’re fresh out of school, you’ll want to be near one of the areas where the field is hot and demand is higher. I don’t know off the top of my head, but I suspect that demand is lower in a place like Australia or New Zealand, so chances are your salary would also be lower.

I’m not a member of any. As part of my dissertation, I’ll probably end up joining a couple, but that’s more of an academic sort of thing. Depending on what sort of systems you’ll want to work on, there may be some certifications or organizations that are relevant to particular field. Personally, I kind of like this aspect because, by the nature of the field, there’s a huge quanitity of resources available through the internet so I’ve never felt hindered by not being a member of any organizations.

It depends. As others said, you should be constantly learning new systems, new languages, new skillsets, new technologies, and if you do, you shouldn’t have any problems with burn out. I think burnout comes from the people who end up programming in mostly the same language for their careers. For instance, I’ve heard plenty of rumors about programmers in the video game industry burning out quickly because there isn’t a whole lot of variation in the type of programming they do and they have tight production schedules with results in long hours.

OTOH, I know plenty of people who have been at it for quite a while who don’t express any burnout precisely because what they’re doing is changing often enough that it stays fresh and interesting.

As others have said, right now there’s not much of a difference in practice. There should be a distinction, and there’s movement in that direction, but it’s not happening quickly. I think there will be some kind of professional organization for software engineers sometime in the next sixty years, and I very strongly expect it to get started in CMU’s Software Engineering Institute. They have a couple programs–the PSP Developer certification and the Master’s in Software Engineering–that really define what I see as the distinction between a programmer and a software engineer.

It varies a lot by company, location and your specific expertise. You should plan on learning how to do something other than programming if you want to command a higher salary.

If they do stuff that interests you. The ACM is probably the better general-purpose organization.

It really depends on your career path. I lasted five years before I decided that I’d had enough, but I have no idea what would have happened if I had been at a different company. I think the most important decision you’ll make is whether you go to work for a company whose primary product is software, or who makes software to support their primary product. That’s going to have a huge influence on how your career goes.

I don’t think you should necessarily resign yourself to that salary. It’s certainly possible to make much more than that with a CS degree, if you’re smart and capable enough and get the right job.

To make the point clear, that’s a starting salary. I don’t have a CS degree (or any degree) and I make a lot more than that. But I’ve been constantly learning new skills and working my way up through various positions for 11 years now.

My husband has a degree in Software Engineering…it is a B. Eng, not a B.Sc and is certified by IEEE and other engineering certification boards the same way a B. Eng in Mechanical Engineering is certified, and he is eligible to become a Professional Engineer.

He’d be better off explaining the difference between that and someone with a BSc in Computer Science/programmer, but I’ll go so far as to say that he wishes the title “software engineer” was protected like “civil engineer”, “mechanical engineer” (and heck, “registered nurse” and “doctor”) are, because there are a lot of people using the title without having the actual engineering knowledge to really be called one.

I hope it eventually becomes a distinct and regulated profession, especially given how prevalent software is becoming. As a simple, cliché example he gave me years ago, would you really want the guys who programmed Windows to also code your pacemaker? BSOD? A software glitch contributed to the uncontained engine failure last month on the QANTAS A380. A software glitch was involved in the fire on board the Dreamliner that’s causing Boeing problems right now. Naturally a certified Engineer isn’t less fallible than a programmer, but applying engineering standards to programming is, IMHO, something that needs to become much more important in today’s world.

I know that in Canada Professional Engineer certification is very important. I know of no one in the US in the software field who is certified. IEEE tried to push it a while ago, but it seems to have fallen flat, and I haven’t seen anything about it for a long time.

There is almost no similarity between the code for Windows and the code for an embedded system like a pacemaker. Embedded code is pretty small, and works in a reasonably constrained environment, and does not have to worry about people adding new peripherals. However, I have seen the netlist for a chip that goes into a pacemaker, and let me tell you that was the best incentive to go on a heart-healthy diet I ever saw.