Programmers/Software Engineers! Please reply.

But that’s just it - mechanical, civil, electrical etc engineers do get their PE, and it’s an important and (often) legally required element to being able to work as an engineer. I think there is a very valid case to be made that a lot of software should be treated with the same kind of approach. My husband doesn’t have his PE (he’s a jr. Eng though) mostly because he’s lazy, but also because he unfortunately doesn’t see any value to it, even though his work is very much “engineering”.

I did say it was a simple example :wink: The idea, though, is that the history of the computing industry is one of nearly pure innovation, where people just “did stuff” and made it work, or made it work most of the time. We’ve accepted that things will bug up in things like Windows or MS Office, but it really shouldn’t be acceptable in things like pacemakers or flight management computers or nuclear power plant computers. Somewhere between the two, things shift from software programming to software engineering. Optimization, error-catching, documentation, safe/fool-proof usage…these are the sorts of things my husband goes on and on about.

Or at least that’s my understanding of it - I’m willing to admit that I don’t have much idea of what I’m talking about! I get the concept, but can’t really express it!

I know lots of EEs with PhDs, many of them professors. The only one I know who is a PE teaches at McGill. Mechanical and civil engineers in the US get PEs, as do power engineers, but those working in digital design or software do not. And I’m talking world famous people here.

If I got certified when I got my CS PhD 30 years ago, it would be totally meaningless today. The engineering disciplines who get PEs work with well understood and time tested principles. Software engineers don’t for the most part. There is plenty of certification, by the way, but that is for specific applications and tools.

Back when I was a grad student there was a lot of interest in proving software correct. It kind of died, especially after a paper showing that the proofs of very simple programs in the peer reviewed literature were full of bugs. There is a lot more effort, with more success, in proving hardware designs correct, but even they have problems.
The issue is the impossibility of fully specifying both the requirements of the code and the conditions under which it operates. You might be able to prove tiny pieces, but not the interaction between them. Advances in language design and software engineering in the past 30 years have been around defining methods, like object oriented programming, which reduce the opportunity for this kind of dangerous interaction.

Much of the bugginess of Windows comes not from Microsoft hiring nitwits as programmers (they do not) but the business decision to maintain compatibility with an OS designed for single user single process computers which rarely interacted with any other computer except through floppy disks and a modem. Anyone who programs knows that as you add features things become more and more rickety. People doing embedded software don’t have to worry about backwards compatibility, since you are not going to upgrade the operating system of your microwave. And as these systems get more complex, the bug levels go up. I once checked into a hotel and found the TV didn’t work. A guy came and rebooted it. This inspired me to write a column about it, and, asking some colleagues about their experiences, found one person who said that she frequently had to reboot her digital picture frame.

Plus, all of these things are under time and cost constraints. If you want Office to cost as much as software for a nuclear power plant, you might get the same level of quality - though I would not be surprised if the quality level was better right now.

I guess it’s title inflation, but at the place where I’m working at now, all the ‘code monkeys’ are called software engineer, while the ‘big picture’ people who do the high level design and deal with the management and marketing are called the architects.

I don’t think one can generalise too much about embedded programming. Embedded programming is not just for mission critical stuff. Pretty much any piece of electronic device today has embedded programs in it, and I can say with certainty that most of them are written on the cheap by people who have absolutely no idea of what they’re doing. I’ve looked at a lot of embedded code in my previous job, and a lot of them are absolute crap.

With almost 40 years of experience in computer programming, design, management, and hardware design, I can tell you that there are few generalizations that can be applied to computer programming. From job to job the work can vary enormously. Some programmers spend all day coding (and debugging), sometimes on exciting new systems, sometimes just producing variations of the same old stuff. Some specialize in user applications, others in systems and tools. Some work with low level languages directly interfacing with specific hardware, others in high level languages that are platform independent. Some are experts in protocols and communications software, others in languages, databases, web pages, graphics and animation, industrial systems, automation, user interfaces, and the list goes on.

But this is the one thing you should know. You can reliably gain the most job security and highest pay by combining a non-computer related expertise with computer programming skills. Healthcare companies want programmers who already understand billing&coding, pharmacy products, and medical practises. Financial institutions want people who have accounting backgrounds, and so on. It is not only the background knowledge, but the experience and familiarity with software and hardware products, and standards that are common in the particular industry.

One thing you must make sure of is that you want a job as a programmer. What you have done at school may not give you an idea of what a job is like (and that seems to be true in many fields). Only a few programmers are doing the fun stuff of creating new software at any time. Most are modifying and debugging existing packages. Even the most common tasks require discipline, adherence to standards, and the ability to fix the things you’ve done wrong. Finding and fixing a bug, whether you’ve created it, or inherited it, can be a long, mind-numbing, process. And if you are not good at reading code written by others, often undocumented and incoherent, and deciphering how it works, and how to modify it and improve it, you will have a very difficult time. You will also have to work with poorly written, incomplete, and out of date documentation, non-standard terminology, and interface with non-programmers who want you to do things they can’t explain, yet consider themselves experts because they have their own PC.

But back to your OP. The term Software Engineer is a job title, and it does not now, nor has it ever meant anything in particular except in the minds of the people who have the title. There is no expected salary for an entry level job. It will tend to be higher than the average non-technical job, but it will range all over the place depending on the industry you are working in, the location, current employment conditions, and any other factor that could apply. There is currently no shortage of entry level programmers in most sectors, and someone can be found in the right price range for any position. Those doing the hiring may not appreciate or care about the difference in results produced by the people who can demand more money. There is not much value in joining professional organizations that do not apply to a niche or specialty. IEEE publications can be interesting, but totally useless in many areas. A small organization of golf course technology professionals will do much more for your career if you are working in that niche. And when will you burn out? That’s up to you, and no different than any other job. Burnout occurs most frequently in high pressure jobs, poor working conditions, and certain personalities. You have to take advantage of your first job to understand what you can do, and what conditions suit you. I think I would have become a total burnout case if I had not taken time out to work in other unrelated fields, and several different specialities within the field. In addition, even though I have spent large amounts of my ‘leisure time’ creating hardware and software for my own personal satisfaction, I have also pursued non-work interests that were unconnected to technology.

You wanted to know about moving elsewhere and the effect on your salary. The greatest feature of computer programming as a career is that in many cases you can do it from anywhere. Once you prove your ability to produce, you may be able to work from anywhere, for an employer located anywhere else. You may be able to set your own hours and terms, and you can work as an independent contractor, or for contracting firms for fixed time periods. And it is often easy to find additional work to supplement your income, or create your own products to sell. You are also more likely to find a job where you can go to work in casual clothes, take extended time off, or select working environments. There are programming jobs where you can work alone most of the time, or on teams most of the time, or change that environment frequently. You will no have no problem changing jobs frequently, and the variety of that experience will more readily be considered an asset instead of a sign of instability.

Finally, I will tell you something that many well educated people will dislike. Computer programming is a skill that you develop yourself. The level or quality of your education has little relationship to your ability. The experience and skills you gain on the job will far exceed anything you learn in school. And the experience and skills you gain from your own desire to develop your abiliity will exceed those you learn on the job. You can also learn a great deal from working with skilled and experienced people, or just studying their code.

Best of luck to you. And despite the previous paragraph, stay in school, you don’t want to end up like that college drop-out Bill Gates:)

Salaries are dictated by what industry you are coding for. My pay almost doubled going from a small software house to a mid sized financial institution though the job wasn’t that much different apart from longer (though by no means twice as long) hours.

Programming is a young man’s game like sports. There are some old guys who hang in there. I myself am doing some coding partly for survival right now, but also partly to bootstrap a startup that I think is worth doing.

I suspect your longevity is going to be related to the intensity of the work you are doing to be doing, your willingness to retrain rapidly as shit changes without getting tired of it, and your interest in other opportunities near and far.

I’d be really surprised if it is the consensus that being a certified anything in the delivery of software reduces the risks of failure, even catastrophic failure.

I say this in part because any significant software project, and even almost all insignificant ones are going to sufficiently complex to be organizational and collaboration exercises as much as anything else.

No certification at the individual level could possibly account for allaying the risks introduced there.

I say this as a member of the team that wrote the original scientific image processing software at the Hubble Space Telescope Science Institute. Regardless of our processes making the software, you may recall that there was a pretty serious hardware glitch with the Telescope, certain testing equipment for the mirror having been installed in reverse.

Nothing we could have done could have prevented the re-engineering that needed to be done. Nor could any certification have helped in any project on the sw or hw side where we were pushing the state of the art.

For some projects, the right amount of engineering vs. flying by the seat of your pants might not be what a certification would require. In my world at the very bleeding edge of things, I would think a resume that claimed a software engineering certification would scream “Toss me aside!”. Other application areas might differ of course, but those are boring (to me) things where everything is rote and ripe for automation and outsourcing anyway.

This should go without saying, but another skill that will make you more valuable is the ability to communicate, especially written communication. It’s a real pain to have to explain something to management so that they can turn around and explain the same thing to the client or upper management. I was always surprised how few people came into the market with the ability to write a well constructed English sentence.

I started at almost $40K, and that was in West Virginia, soo… depends on the cost of living where you work!

This thread has been extremely helpful! I’m so glad I created it.

I’ve worked in healthcare for years, so I know billing, coding, and supply chain management. I had never thought of getting a healthcare administration degree, but maybe it would be a good pairing with a C.S. degree?

Excellent idea. You would be in high demand. Working for a hospital will establish a career that gives you great flexibility, there are hospitals everywhere, and it is growth industry here and overseas. Once you’ve established yourself with experience in a hospital IT environment, you will never have to establish your technical qualifications in that type of position again.

Sadly, this is a problem in every technical field. It’s depressing to see people who’s first language is not English, have better communication skills than Americans who are alleged to speak at least a dialect of the language.

A student in my CompSci class tried to recruit people into an Intro to Bioinformatics class a week ago. I just read the curriculum and it looks very interesting. I can do another semester or two of courses shared by both majors before I have to decide. I think I’d get bored very quickly being just a code monkey or support coder.

Thank God I took so many math courses at community college… it really opened a lot of doors for me. :slight_smile:

I’m yet another person saying this is absolutely true.

In my own case, I’ve had a very successful career as a software engineer working in the GIS/digital mapping/navigation systems area. I originally got a job when I was able to show that I was not only a competent programmer, but I also had a deep knowledge of geography.

With the push to automate patient records, I think this is going to be a growth area.

I understand. I’m saying you can make more than $40k starting.

Yeah, $40k was my starting salary as a software engineer right out of college more than 15 years ago. I don’t know what it is now, but it’s got to be higher than that.

Agreed. Any effort at health care reform is going to result in not only new products and services, but issues around standardization and interoperability for a long time to come.

This is partly why Repubs are assholes in the health debate - there are seriously large amounts of private sector innovation that are going to be sparked, and they are usually all for that. Now we know it is just lip service. They don’t like the public or private sector equally. Makes you wonder what they really want doesn’t it?

You will probably be worth more and have more interesting work if you develop skills in physics in addition to programming skills. I think this echoes a point TriPolar made.

I graduated 30 years ago with a degree in physics and astronomy, and have worked in industry doing R&D. I do some programming. The people I know who are just coders seem to have a hard time - so many companies kind of abuse them, try to work them too hard, and consider them replaceable. But the people I know of who have made the best career of programming do so with some other skill too. I know somebody who is unusually skilled with applying and solving differential equations who has a very successful software business, and somebody else who made many millions by early adulthood by understanding programming needs of graphical artists.

I wanted to make a comment on this. I am a support developer, because that is what I am best at.

The comment is absolutely true. It is one of the downfalls of the job. You have to become an expert in every little nuance of the system you are supporting. And your expertise grows in that little area, rather than on IT skills in specific. When the job is over, or you start to get bored, and you find a new support position you are largely staring over at square one with a huge new learning curve. And it does limit the top starting salary you can get compared to nuts out Java security programming expert for example, who can always get better at it, and command more money.

I have tried the code monkey position in a regimented arena. Where you get a detailed design document, code it to perfection, pass it off to systems testing, and get the next requirements. It’s just not for me. It gets a bit repetitive and anonymous for me, I lose focus and don’t work as well after a time.

I am personally suited for support. One week I code my ass off on Java or J2EE. The next I tune materialized view sql. The next I sit with the users and create my own requirements document, which I then either code myself, or pass to a pure developer while managing their progress. Some times I write a hardware requisition document and propose and defend why we need 2 more Terabytes of mirrored data storage. Then I may go to a class to see if the new context based security manager is a direction we should take.
But I will admit the best part for me is to feel appreciated. Turning out code as developer number 101 where I only exist as a resource on a gateway spreadsheet gets me depressed eventually. I do like the fact that the user community knows me by name and loves me. I love the fact that someone freaked out over a huge problem and a dead line comes to me and I can save the day. To see the expression of gratitude on their faces helps keep me motivated and interested. To have people from the hourly call center to the CIO pass me in the hall and smile and say ‘Oh hey wolfman thank you so much again for the hard work you did on X’ makes me happy. I like the ego stroke, it’s just my nature, and by far the best position for me to be of use.

I didn’t want to turn this into a brag session. I just wanted to make the point that support is not a no-talent no-respect helpdesk position. Excellence and respect can be achieved, like they can in any other area of IT.

Its a true jack-off-trades, master of none position. There is the downside, as I compare what I make to what some of my friends who specialized, and can constantly grow and transfer to new position immediately contributing make, and I get a little frustrated.

And the IT downturn really hurt, I have been unemployed too many times in the last 6 years. People who are watching their budget carefully don’t want to pull the trigger on a position that will require 4 months to learn well enough to really fix things. Hiring a support professional is really a 2 year minimum commitment, vs hanging on with short project based band-aiding, and organizations are still pretty leary.

But I know it’s where I am best, and feel most useful and happy. Support is right for a lot of people.