A software engineer is one employed to solve problems by the application of information technology. ---- If you can't measure it then it can't be called engineering. -- IvarJacobson. I can measure software. I can provide BigOh measurements of algorithms. I can run a performance monitor to measure the relative CPU usage of my procedures. I can run "top" or open the TaskMonitor to view memory usage. I can run a test client to measure maximum throughput or determine the maximum number of simultaneous clients a server can handle. As an engineer I can try to improve these measurements by modifying my software design. I can then measure the new design to determine if my changes actually did what I intended. -- ChrisHines ''I don't think performance is only what they had in mind.'' ---- Interesting, because my job title says I'm a software engineer. When I'm doing what I call software engineering, I'm designing and implementing code to run in deeply embedded automotive control systems. It's software that's closest to what non-engineers consider engineering - I actually make things happen in real time in the real world. I suppose I solve engineering problems by the application of control theory through information technology (although I'm not sure about the IT bit). ''PaulTiplady, 12th July 2000'' ---- PaulTiplady sounds like a FirmwareEngineer, which is my (current) job title. Of course, as processors get faster and more powerful, and more consumer products contain processors (and thus software), the line between a firmware engineer and a software engineer blurs. This is also true with hardware (or electrical) engineers when you consider that some EEs write a great deal of Verilog and thus behave like firmware engineers. ''BrianStPierre, 29 Mar 2001'' '''I HaveThisPattern.''' I am an embedded systems guy, but most of my work in recent years is in code design and hardly anything in designing electronic hardware any more ''''. However, my skills and abilities are such that I am a lot more valuable to a client in the area of creating architecture and command & control structure rather than the actual coding itself. I still write code, but there aren't too many clients willing to pay my freight these days to have me coding something that can be done by lesser mortals. '''' Still, I'm an EmbeddedSystemsEngineer versus a SoftwareEngineer, I guess. -- MartySchrader ---- What about ProfessionalSoftwareEngineer ProfessionalEngineer (P.E.)? ''That's easy. A ProfessionalSoftwareEngineer is a SoftwareEngineer that belongs to a ProfessionalAssociation. The only difference is that there is usually a legal exclusivity to ProfessionalEngineer (actually also for Engineer in some cases).'' "Professional" usually indicates chartered status, in this case i.e. IEE C.Eng. (http://www.iee.org/Membership/CEng/index.cfm). Though an un-chartered engineer could still be professional. '''Ho, ho, ho.''' Just as a "chartered" engineer can be quite very unprofessional. Thank goodness for that, or else a lot of my work would go away. ''Part of the problem is that unlike other disciplines, there doesn't seem to be consensus among the software engineering community as to what specifically a ProfessionalSoftwareEngineer should know and do. This may be partly because our discipline is less mature than other engineering disciplines, such as mechanical, civil, or chemical engineering, and partly because the stuff we do is much more dynamic and malleable than these other disciplines. When was the last time you saw a building or a bridge clone itself?'' Well, the IEEE Computer Society has begun to take a stab at the task of defining what a Software Engineer is. The society introduced the Certified Software Development Professional (see http://www.computer.org/certification/) Program. I think it's a good start on a definition of a Software Engineer. -- JohnPfersich That is tough to do without emphasizing or endorsing specific methodologies. Even if the exam says things like, "According to Dr. Foobar, what is the best way to...", it is still selecting which authorities to be on the exam and which to exclude. Besides, a lot of that stuff should be taught in a regular university degree program. Is this meant to replace degrees? ''I suspect it's meant to augment degrees rather than replace them. It's harder to define exactly what is taught in a particular college's degree than what is tested in a professional certification.'' ---- ''According to a couple of Computer Science Dictionaries...'' Software Engineer (noun): A programmer. The term implies that the individual is more involved with design and management than with actual coding. But in reality, every good programmer is a software engineer because software engineering is required in all aspects of program development. Large applications, however, generally require more emphasis on software engineering aspects than small programs. ''Do get real, please. Good programmers aren't the same as engineers -- they aren't even in the same phylum. Engineering involves a'' lot ''more discipline and introspection than simple programming ever will. The demands are simply different.'' This is basically true. The only problem is that true software engineers don't exist (yet). When there is a good theoretical background for the field, we can talk engineering. Until then, all you get is programmers, and the odd "cargo-cult" engineer with delusions of rigour. ''But you're presuming (a) that there is a theoretical background to the field that is simply undiscovered and (b) that when this theoretical background is discovered that it will be like the theoretical background to electrical engineering. Isn't it possible that both these assumptions are false?'' (a) is not an assumption, it is a prerequisite for having an engineering field (i.o.w, if we never have such a background, we will never have a software engineering field in the same sense that we have EE's, ME's, civils, etc.) (b) doesn't make a lot of sense. The scientific understanding of physics which supports EE's, that of ME's, and biology+chemistry supporting biochemical engineering are all quite different. However, the common point is that there is a theoretical and empirical structure that underlies the field. No such structure exists for software, regardless of how alike or dislike it is to the E&M + quantum theory that supports EE's. If no such structure exists, the implication is simply that software is not something we can engineer. There is no reason to assume this given current knowledge. : "When there is a good theoretical background for the field, we can talk engineering. [...] theoretical and empirical structure that underlies the field. No such structure exists for software" It does. It's called mathematics. To learn more, see ComputerScience, GeorgeBoole, DeMorgan, ClaudeShannon, AlonzoChurch, KurtGodel, AlanTuring, EwDijkstra For further study - ProgrammingIsMathematicalEngineering, LambdaCalculus, TuringMachine, RelationalAlgebra -- AmitNaidu "more involved with design and management..." Do you mean people management, project management, or managing the technical aspects of creating software? I hope it's the latter, because the others are the roles of the Software Manager. -- ''PaulTiplady 13th July 2000'' ''That's probably for you to decide. This is just the usual ComputerDictionary definition of SoftwareEngineer.'' ------ Reflecting on (b) when this theoretical background is discovered which I agree ''doesn't make a lot of sense''... Given that * Traditional Engineering is based on proven human factors, newtonian, or quantum-mechanical precepts, e.g., inviolate rules of the universe * Software engineers define and re-define the behaviors of machines to meet (ideally, to exceed) the expectations of people. * The expectations of people constanly evolve as they accumulate experience (with people and machines) So... we can state that act of creating and maintaining software is inextricably linked to human psychology and patterns of thought. I daresay that the evolution of human thought cannot be reduced to a set inviolate rules. Ergo, to imagine that software is an engineering discipline is fun, but ultimately, fruitless. Naturally, the practical bits still require discpline and rigor to get the job done. We use machines extensively in this work, and there are firm rules to follow there. But, it seems that much of the discussion centers around project mangement, not software per se. Note also the interplay between psychology and project management which further confounds the definition. Software Engineering is an intersection of many disciplines rather than a field unto itself. It will defy concise definition as long as we humans have the ability to think outside of the box. -- ''R Taggart May 2009'' ------ It appears to me that in larger organizations, a "software engineer" is an experienced programmer with decent-enough people skills to be kind of the liaison between coders, users, and managers. As the size of a project grows, then "software engineer" may be further split into "architect" or "business analyst" (BA), and "project manager". A project manager is more like a "code and schdule accountant" while the architect or BA focuses more an user requirements, frameworks, etc. It seems to grow like this and be dependent on the project size: Small: * Programmer/analyst Medium: * Coder * Software Engineer Or * Programmer * Analyst Large: * Coder * Architect (requirements and frameworks) * Project Manager Really Large: * Coder * Framework Analyst (Architect?) * Business Analyst (heavier customer interaction to understand requirements) * Project Manager (scheduling, staffing, version management, build process) ---- Engineers think about correctness and workability. Correctness means knowing how it helps to have somewhat artificial, but understandable, subgoals (for instance NaturalDivisions), and it is one of the main parts of workability, but also an end goal for the finished product. -- SteveWitham ---- I have a BSEE with a minor in computer science and a Master's in Software Engineering. I can say that my engineering curriculum was much more difficult than computer science and...I use little of what I learned in college these days. Hey yall! The key is to keep learning, growing, etc. Don't get too caught up in labels...be a LifeLongLearner!! -- ChadSteele ---- A SoftwareEngineer is somebody who applies a formal or structured approach to the development of software. -- MartinSpamer A SanitationEngineer is somebody who applies a formal or structured approach to the collection of garbage. [My point? Forget about terms and trying to use them to imply some personal message. Express your concept fully and clearly and don't play word games with phrases.] ''But you're absolutely right - it's the "formal or structured approach" bit that separates a SanitationEngineer (someone who analyzes and addresses the procedural and technological issues surrounding the collection of garbage) from just a plain ol' garbageman (or "Sanitation Technician" - i.e the guy who collects the garbage).'' ;-) -- MikeSmith * Those formal structured approaches should be based on the ScientificMethod. -- MartinSpamer * A professional is one that not only executes, but also one that makes sure he is doing the RightThing. An engineer is the kind of professional who measures first. By this definition, before using a compiler, I should measure how it behaves. Before using a tool, measure it. I've never seen that attitude in a SoftwareEngineer. Tools are not measured for capacity, so how can we be engineers? -- GuillermoSchwarz '''How many Engineers measure their tools and/or materials? Civil Engineer don�t measure their cranes load or the Electrical Engineer the worlds power supplies. In most cases they accept the published specifications. A Engineer measures and tests their own work not the work of others.''' You have to be kidding! The first, middle and last thing you do is ''calibrate''. Some years ago, I ran an ISV. We benchmarked and characterised every development tool we bought. This was when C++ came out of preprocessors; we had a couple of them and, for any particular purpose, used the one our generated-code inspections showed would be best for the job. Because we were developing both hardware and software, we had an unfair advantage: real engineers on staff who found this discipline normal. But GarbageCollection is an important problem in computer science; which SoftwareEngineer''''''s need be concerned with. I wouldn't trust recycling the unreachable objects in my program to a mere technician. '''An Engineer should certainly measure his materials. Though that raises an interesting question of what are the Materials of a software engineer. Libraries, ---- ''An engineer is someone who can do for a quid what any idiot could do for a fiver. (Source Unknown, but definitely British)'' [See BritishCulturalAssumption if you don't know what a "quid" is...] ---- Am sure someone wanting a proper definition of SoftwareEngineer would be going to more formal places instead of this wiki. A good definition of a SoftwareEngineer is that he or she cannot define himself/herself. I am a SoftwareEngineer. heh..heh..I came up with one more below. A SoftwareEngineer is a very complex organism which bewilders another very complex organism called a ProjectManager. Sometimes both organisms are also very simple. :-) ---- A SoftwareEngineer is a "professional" SoftwareDeveloper who follows EngineeringPrinciples to deliver and develop a product. I say "professional" because I there is no (?) professional association. I would say that a ProfessionalAttitude is sufficient along with EngineeringPrinciples and a good understanding of the implications around the principles with a strategy to ensure them. Training and various qualifications could typically provide the developer with the background and frame of mind to become an engineer. -TimTwelves ---- Just a thought: Is the realm of software too large to actually have only one body of knowledge? I mean, (and pardon the Micro''''''Sloth reference) Do we need to break this down in to different categories of engineers such as System Engineer, Network Engineer, Realtime Engineer, etc? I believe that a System E. would require a different set of knowledge when compared to a Network E. or Realtime E. because they deal with different scopes but they all have in common general practices. * Ouch! Last time I thought about this, a software engineer was a type of systems engineer (specialising in software systems). I'd hate to think it was the other way round... just can't get my head around that at all... ''My view is that an engineer follows certain principles, coupled with strong knowledge and skill in a certain area. For this reason you can get a network engineer, software engineer, realtime engineer, electronic engineer, etc. The common thread is principles + knowledge. The different titles may purely be a specialisation of the systems engineer coupled with particular knowledge. To answer your question more directly, yes. To provide an example: compiler construction and application development are two fields that could have a specialist yet both are software engineers but their skills are typically not transferable other than standard programming practices. --TimTwelves'' ---- A mathematician, George Boole, the inventor of Boolean logic has been immortalized for this work. He described the rules for the Boolean operators and, or, and not. An engineer, Nikola Tesla, has been immortalized for developing the Tesla coil, which today is primarily used for entertainment and educational displays of high voltage alternating current. A computer science student, Linus Torvalds, developed the Linux operating system, and has become famous. Which is more prestigious mathematician, engineer, or programmer? “A rose by any other name would smell as sweet.”—Shakespeare --EdwinEarlRoss ---- See: JustAnEngineer, AfterTheGoldRush CategoryEngineering