how much do programmers earn? i just got out of college with a bachelor’s in physics. looking for a job.
My SO says the following (paraphrased):
This sounds a little like my SO (and I ) are belittling those of you who have an enginnering-like job - this is not our intent. The example is exagerated somewhat to try and accentuate the differences, even though the differences are not cut and dry. Clearly those of you who feel your job is engineering-like think out what you want to do, and are likely very good at what you do, and obviously acheive results. As was quoted, the difference really lies in the PROCEDURE, and although in the end something might be virtually indistinguishable to a lot of people, the fact is one way followed engineering standards and the other didn’t. The engineering standards are certifiable and in some cases, the development might even be faster.
Some shops at least try to make software development into an engineering discipline. Whether or not someone understands those principals, works in that type of organization or even has that job function they may or may not have the title of Software Engineer.
I don’t think there is a universally accepted understanding of that term and how it differs from “programmer”, “developer” or “coder”. Actually, just reading this entire thread from top to bottom provides a reasonable amount of evidence for this assertion.
Certainly, if someone tells me they are a <programmer|coder|developer|engineer> I don’t assume anything about their level of skill, their ability to learn new toolsets and choose the best ones or their knowledge of managing the software process.
I’ve worked with some astoundingly incompetent Engineers (with engineering degrees) who were very well thought of, not only by themselves (every programmer thinks very well of themself) but by many others. I don’t find titles very useful - in order to find out what someone is capable I’ll at least have to speak with them - then I’ll need to see some solutions they’ve built and understand how they designed and built them.
A bit off topic… but don’t forget the organizations with “Software Architects”… and that many in the software industry (PC in particular) feel that software involves individual artistic expression, not just engineering …
I once tried to explain the PC software development process to a commercial building contractor/civil engineer.
He was appalled and said that in HIS engineering discipline the software approach was a guarantee of failure and bankruptcy…
(but then, civil engineers have been around, putting brick upon brick, since the pyramids. Perhaps in 5000 years principles of Software Engineering will be as advanced
I think mnemosyne’s SO’s comments are correct, but I’d point out that you can apply engineering discipline to software design, it’s just not usually done. There are several reasons why most commercial companies skip it:
- it’s expensive because it takes longer
- it’s expensive because you need more qualitifed personnel
- consumer’s don’t demand it because they’re used to software failure
On the other hand, there are situations where failure is not an option and the coders rise to the challenge. NASA’s control software is one such project:
http://www.fastcompany.com/online/06/writestuff.html
NASA’s software team is divided in half - coders and auditors. Every line of code is reviewed multiple times both for line-by-line correctness and overall architecture. There is no off-the-cuff hacking like occurs in commercial software when you try to pop in a few features to please marketers. This approach puts software development in the same realm as more traditional engineering, but unless you have the processes in place to guarantee this kind of quality control and accountability, you’re not an engineer.
Most of the title nonsense is just that, IMO. There was an article in Wired magazine a while back (no cite) where the author joked about overhearing an indignant techie complaining “And that’s not my job. I’m an information architect, not a knowledge engineer.” Huh?
mnemosyne, your SO’s comments are one interpertation of Software Engineering. I’ll quote from the fifth edition of Software Engineering by Ian Sommerville for another:
Quoting from the fourth edition of Classical and Object-Oriented Software Engineering, by Stephen Schach:
Big Design Up Front, as your SO advocates is one way to achieve these goals, but not the only way. I’d also caution him/her that there are far more options that BDUF and “hacking something together.” Excluding the middle is a great way to be misunderstood.
I’m just establishing my credentials with the foregoing, because it’s not relevant to the OP, which is:
“The title nonsense” is the point. What distinguishes engineers from other developers is what’s on your business card. It will vary from company to company. In time, I expect the definition to evolve to something closer to the textbook definitions, but we aren’t there yet.
Hal
Software Engineering is the rigorous application of certain engineering principles and methodologies to the creation of software. In theory, the application of Software Engineering leads to bug-free software, so the field is particularly important for embedded controllers where fault-tolerance is zero (or close to it). Of course, for important projects there will be always be built-in fault-tolerance (used in the sense of a Software Engineering branch).
Analogy time -
Programmer - Car mechanic.
Software Engineer - Car designer.
(Peter Lobley BSc Software Engineering)
My SO doesn’t disagree with these definitions. What I wrote above was paraphrased from an earlier conversation, and since I am no where NEAR to being an engineer myself, things do need to be dumbed down a bit for me to be able to express them.
I think the whole point is the quality issue. As micco pointed out, consumers and companies are “used to software failure”. In a Micro$oft-controlled world, yeah, failure occurs all the time, and it pisses people off, but people just assume it’s normal. It doesn’t have to be that way, and that is why the Software Engineering discipline was created and being taught as a full degree - to produce people who have a better approach to software design and implementation.
Also, this doesn’t have to be a more expensive or more time-consuming approach, because if you get it right the first time, you save a lot of money on bug testing once your product is out. I understand that many MANY programs arent all that critical if they crash once in a while, but there are times when it could be. For example, the McMaster graduating class this year has as their thesis project to design a control system for a nuclear power plant. You want that to work, and you want it to ALWAYS work. Or a project that was being done at my school, where one computer was being used 24/7 for 7 months to calculate something-or-other (the grad student told me about it last year - I don’t remember details). If that computer had crashed 6 months into the project, that would have been a LOT of grant money wasted.
Software engineers want to produce better software, and the way to do that is to “engineer” something from the ground up, rather than taking an approach that might get the work done, but which won’t be as good.
As I said earlier, I am not an engineer, and so things are dumbed down a bit in my examples…to be honest, I don’t know what the “other” approaches are, but I can imagine ways in which a more systematic approach would be better.
I think that’s what I was trying to say in one of my posts further up - that because there are now actual Software Engineers out there, the title is going to shift to describe them, rather than being the free-for-all title it is now.
I don’t think many people use the term programmer that way - a Car mechanic would be equivalent only to someone who is strictly a maintenance programmer.
Maintenance programmer is a subset of programmer. Many people who are called and call themselves programmers will gather specifications, design and code an entire new system.
I won’t bet on it. My employer outsources some work to consultancy firms that have been certified as CMM level 5 organizations by the Software Engineering Institute. This is the highest level of proficiency an organization can be assessed at, and means that a true engineering discipline has been instituted and all process are documented, followed,managed, measured and continually optimized.
These companies, while they are significantly above average, still have schedule slippage and deliver software with lots of bugs that have to be ironed out in an iterative test cycle. At the end of each project we have billing disputes.
My point is that regardless of the reams of literature being written about SE practices and the degree programs that are being offered software development is still a mess. The “actual” Software Engineers out there cannot all be relied on to always deliver a product on time that is free of defects.
Maybe not right now, but that is the ulitmate goal, I think. I mean, the McMaster program is only 6 years old -there have only been 2 graduating classes to date - the first two in Ontario. They want to CREATE situations in which rigourous software engineering practises are used, and they are AIMING for effective, relatively bug-free software design, etc. It is a goal, not an actuality, but like any other new discipline, it will take time before any real effect is noticeable in the “real world”, however I can imagine that it WOULD become noticeable, in time.
I mean, barbers used to be surgeons, too, but when medically trained surgeons arrived on the scene, there was probably some resistance to that, and some people might have thought it would never work. And look where we are now - you can’t perforn surgery without years and years of specialised training, and although it’s not 100% perfect, its a hell of a lot better than it used to be. Sure, this analogy isn’t quite perfect, but I think (I hope) you can get what I’m trying to say…
Ok…
Programmer : Builder
Software Engineer : Architect
Better?
I used to love programming. Then I did a University course. Since I left Uni I haven’t programmed at all. I hated all the obscure, obsolite shit we had to learn that wasn’t programming. All I wanted to do was program. University killed that desire.
Obscure, obsolete stuff like data structures? Memory architecture? What to put on the stack vs. the heap? Compiler design? I, too, used to think this stuff was obscure and obsolete, until I had a few years programming under my belt. Then I realized that knowing and understanding this stuff was what made the difference between being a programmer and an engineer.
No, none of that. Actuall obsolete obscure stuff. That stuff you described couldn’t be further from what we learned. I can’t think of any examples right now because it’s been so long and I have repressed a lot of Uni from memory.
Anyway, the point was that it wasn’t programming. It was incredibly boring. I am lucky I managed to pass the course, because I had no enthusiasm/motivation at all. I can surprise myself when I am motivated, I can do almost nothing when I am not. So it’s amazing I passed the course (I was actually the best in the ‘class’ at programming, but the shortage of dependance on programming on that course meant I couldn’t capitalize on my natural skill)
I’d like to talk more about what programmers (I can’t find an appropriately neutral term) do at different companies, but don’t want to hijack this thread further. here I’ve started an “Ask the Engineer/Developer” thread that I’d like to see the other programmers participate in.
Hal
But most application software development is done in a high-level language like Java or Visual Basic. While it may be helpful for me to know how a quick sort works or what a hash table is, its not necessary because all the basic algorithms and data structures are built into the SDK. Where the platform is ambiguous there are best practices and design patterns that show me the path of enlightenment. I think the best thing I can say about my computer science education is that its made it a little bit easier to learn new languages, platforms and patterns because I’m more intimately familiar with the problems being solved and the basic strategies employed.
I agree more with previous posters that if there can be a distinction between engineer and programmer it has more to do with managing the development process than with technical knowledge - I would expect every programmer and engineer to know as much as about their language and platform as they need to.
JASG - Maybe you could ask your engineer friend how many of his project finished on time and under budget.
There are many levels to this issue of who is a software engineer and who is a programmer. In one sense we are all engineers and in another sense we are all programmers.
If you look at the web as a city, and pages as buildings, then anyone that puts up a functional page is an engineer. Some pages are more developed than others, and some don’t work at all, but it is engineering to add to the structure.
In another sense we are all programmers, using tools to get a job done.
I tell people that I work with computers. It’s vague enough to sound important and allows me to avoid answering window’s installer conflict issues, “I don’t really work with that.”
Bill Gates has actually, IMO, done more to make computer programming more difficult, out of greed, than was necessary. Instead of making an operating system, development tools, and applications to run on the system, he could have made a more inviting scheme of providing basic tool groups and allowing each individual user to use what they wanted and leave out what they didn’t want.
For example, instead of having individual applications for word processing, presentations, and etc., the system would provide text tools that a user could assemble how they wanted to.
Instead we have monster applications with tons of features that few people can use in totallity. If you want a database, you have to create it in one application. If you want to share it with other people, they have to have the exact same application to view it. Or you can export the data into a standard format, possibly losing some data, and then the other person has to import that data, possibly corrupting it or messing it up.
Now, in the 21st Century, the future, where everything was supposed to work, we have to take MicroSoft to court cause they have their own version of Java, that is incompatible with Sun’s version of Java. Was their motivation a better world, or were they greedy, or were they stupid? We may never know.
Anyway, got into a bit of a rant there, but making computers simpler would be an example of Software Engineering. As computers are now very complicated to get working how you want them to work is bitter-sweet. Sweet in that it gives so many people jobs, bitter in that people have debates about classifications of people that work with computers.
I work and play on/with computers. They are a big part of my life. If you go by some peoples definitions, I am a Software Engineer, documenting, designing, coding, testing, and burning releases. Now I am at a small company where there is only one Software Engineer, me. The guys that do the embedded stuff call themselves Electrical Engineers, and the mechanical and other electrical guys look down on the Software guys. Mostly, I think, is when Software is the last stage in the development, and that is where all the bugs get found, in the mechanics and electronics. Also, as Software is taking the most time, as the project is in software, but waiting for the mechanical and electrical bugs to be fixed, it looks like the hold up is in software but it’s not.
My business card has said many things at different stages in my career, Systems Engineer, Software Engineer, Software Programmer, System Integration, and now back to Software Engineer…
As a garbage man can be called a sanitation engineer, does it really matter the difference between a programmer and an engineer? I think it is all a matter of title, and acording to the story told by ZenBean, we should all have “Lead Software Engineer” on our cards!
I also have a degree in Computer Information Sciences. That definately helped in getting jobs, but it was my ability to learn new platforms and languages quickly that kept me employed.
Sometimes I think I could be a good lawyer having to figure out what the rules are when it comes to compiling code and using system calls.
Sometimes I think I could be a detective solving mysteries and hunting down bugs.
Engineer, Lawyer, Detective, user, abuser, bit twiddler…
Good LUCK!
Visual Basic? Com’on, that’s not a real language. Besides, a lot of Software Engineering are done for embedded controllers - the highest level you go is C. Assembler is the usual way to go.
They do? Like what?
IIRC, Software Engineering is an old, old discipline. Back in the bad old days of Big Iron, operating systems didn’t crash - or at least not often, not a few times a day. Of course, some blame it on the complexity of PC hardware, which is at best a tangental cause. The root cause is MS designed their operating systems arse backwards.
Hm, that certainly is a laudable goal, but problems can creep up anywhere. That’s where the concepts of “fault tolerance” and “redundancy” come in.