Slashdot Mirror


Define -- "Software Engineering"

2nesser asks: "How do you define the term 'Software Engineering'? Some see it as the implementation of the theoretical world of Computer Science, but isn't there more to it than that? Social responsibility, documentation, a program that works under precise, known conditions? Can you compare Software Engineering to other disciplines? What sets a 'Software Engineer' apart from the rest of the crowd?"

29 of 118 comments (clear)

  1. Repeatability and Predictability by the+eric+conspiracy · · Score: 3, Insightful

    Software engineering is about being able to perform software development with repeatable and predictable results.

    1. Re:Repeatability and Predictability by Glonoinha · · Score: 3, Funny

      >Software applications aren't experiments to be repeated.

      No, we software engineers do not make the same mistake over and over. We make different mistakes each and every time.

      --
      Glonoinha the MebiByte Slayer
    2. Re:Repeatability and Predictability by the+eric+conspiracy · · Score: 4, Insightful

      No it isn't since you never repeat writing the same software no more than an architect or engineer builds more than one of the exact same building

      Think like that and you will never be a software engineer. Every bridge, building and program is assembled from components with common structures. Bulidings have foundations, walls, support beams in the walls, windows, HVAC, etc. An architect can put these together, predict how they behave as a whole and estimate how much the assembly will cost time after time in a repeatable fashion, even though no two final buildings are the same. Software engineering is about the same thing - assembling a program from commonly used components and being able to predict the cost and operational characteristics of the final product even though no two such products are the same.

    3. Re:Repeatability and Predictability by JimMcCusker · · Score: 3, Informative

      First Axiom of software engineering:

      That which is repeatable and predictable is automatable.

      Go ahead a credit me for that one. I don't remember if I got it from anywhere. The whole point of writing software is to releive people of tasks that are tedious and error-prone for people. If there are predictable, repeatable steps to produce something, then a program can be written to perform those steps. The worst term I've heard for the act of actually writing software is "software construction." Ugh. Compilers and project tools construct or, as most of you are familiar with it, build software. Does an author construct a book? No, the printer does.

      What we do as developers is to design software. The design spec is the source code itself. We just have the privilege of having tools that construct from that design specification directly.

      Architects (real ones, not the ones in software) will actually work on many levels in a building, not just the highest levels. There's the lead architect that figures out what the main uses of the building will be, and comes up with a general vision of how that building will work. Then, if he's lucky and has other architects working for him, he enlists their help in fleshing out the details, and designs the building down to the last sink faucet. Doesn't this sound familiar?

      At this point, software and building engineering diverge. It's impossible for a architect to build functional experimental copies of their buildings, so they settle for models. They will design and build over and over (like how we write and compile over and over) until they get what they like. And then they hand it off to the construction workers, who are usually supervised by the architect during construction, because details usually crop up then.

      Does anyone see the parallels between the two? We, the software engineers, are the architects. The build tools are our construction workers and model-makers. We are all designers, just at different levels, and don't let anyone try to equate you with a construction worker. You are a skilled professional whose insights and knowledge are useful to the outcome of software development.

  2. working definition by rawgod0122 · · Score: 2, Informative

    Software Engineering is about designing and specifying how a software system should work. A good Software Engineering process should be repeatable and reduce the amount of restructuring needing to be done later in the projects life time.

    1. Re:working definition by pauljlucas · · Score: 4, Insightful
      Software Engineering is about designing and specifying how a software system should work.
      No, requirements specify how a system (any system) should work. Engineering is the act of constructing a system to meet said requirements.
      --
      If you reply, do so only to what I explicitly wrote. If I didn't write it, don't assume or infer it.
    2. Re:working definition by sql*kitten · · Score: 2, Interesting

      Engineering is the act of constructing a system to meet said requirements.

      You are mistaken. Civil Engineers design a skyscraper, construction workers construct it. Mechanical Engineers design a car, assembly line workers construct it.

      A software engineer spends 80% of his time on requirements capture, analysis, design and documentation and 20% of his time coding. A programmer gets his instructions from an engineer and spends 95% of his time programming (and the rest goofing off on /.).

      In any mature industry, actual implementation is semi-skilled labor at best.

  3. P.Eng. certification by Robbat2 · · Score: 2, Informative

    From some takes on it, mainly the P.Eng. (http://www.peng.ca) certification for engineers is what it takes to be a software engineer. Ergo by that all the requirements and responsibilities of a P.Eng. are involved.

    --
    ICQ# : 30269588
    "I used to be an idealist, but I got mugged by reality."
  4. abuse of the work "engineer" by Anonymous Coward · · Score: 3, Insightful

    I always thought the term Software Engineer was a term akin to Sanitary Engineer.

    The word Engineer used to connote quality, rigor, someone who builds things that last. Engineers design buildings, and bridges, heavy haul trucks. Things that last for 20 years or more. As software developers we are more like artists. We design the tools that suite the latest fashion. Most software is trash in less that 3 years.

    Prove me wrong.

    1. Re:abuse of the work "engineer" by toast0 · · Score: 2, Insightful

      While it is quite true that often software developers are called software engineers, there is actually such a thing as software engineering.

      As others have mentioned software engineering is about developing and using an engineering process when developing software. Just as in the beginning of engineering bridges, many people who 'engineered' bridges did not practice what we would consider to be anything near engineering today; there will (hopefully) be a time when we will look back at the present (and the recent past) with awe that so much software was made without sound engineering practices.

      The goals of any mature engineering discipline include providing complete designs, reasonably accurate forcasts of time for development, safety considerations, and generally some sort of societal good.

      Software Engineering is still very much in its infancy, ABET, the organization which accredits engineering schools in the united states has yet to accredit any software engineering programs, but that will probably change within 2 to 3 years. Additionally, only one state, Texas, recognizes and licenses Software Engineers. I expect that within 10 years, most states will license software engineers.

      I also expect that within the next 10 years, software engineering as an engineering discipline will grow in recognition, as its benefits become redily apparent by prominent examples of software engineering (for example, when some major company starts following its forecast timetables and its software is not terribly buggy). I imagine that while use of traditional software development will decline, it will continue for many years to come.

      For further information on software engineering, look at Watts Humphrey's A Discipline for Software Engineering or google on 'CMMI'.

      (ignore the sig, this is not a troll)

  5. Re:Yeah that is easy. by aoteoroa · · Score: 3, Funny

    Can you imagine if car designers were held to the same standards as web programmers?

    • The car would have to be impenetrable.
    • The windows would be made of bullet proof glass.
    • Every car would have a chasis that can handle a 10 cylinder diesel engine because you never know when you might need to scale that car's requirements and make it tow 5 tonne trailers.
    • And if someone figured out a way to pick your car's locks you would have to recall every one of them for upgrades.
  6. no such thing by Anonymous Coward · · Score: 4, Insightful

    I'm sorry, but there's no such thing as Software "Engineering".

    I have a EE degree but I work as a programmer now. Writing software bares only a superficial resemblence to any other engineering discipline.

    Other engineering involves solid, proven, time-tested formulas and patterns, and can almost always be stripped down to "first principles" like the laws of physics.

    Writing software involves re-inventing the wheel for every project, constantly changing it, and constantly changing methodologies to try and put out software that actually works for a change (where are the books on "Extreme Engineering"?).

    In 100 years, Software may be specified, designed, built, and maintained just like bridges or radios, but not now.

    Right now Software is more like some kind of creative art merged with mathematics. "Design Patterns" is the only thing I've seen in computer science that takes a step toward being more methodical, like other disciplines.

    Not trying to insult folks who write software, I just think it's such a new and changing field, the methodologies havn't crystalized yet.

    1. Re:no such thing by the+eric+conspiracy · · Score: 2, Insightful

      and can almost always be stripped down to "first principles" like the laws of physics.

      Engineers existed long before any laws of physics were codified. In Fact, the first formal mathematics was invented as the result of studies of the methods Egyptian Engineers used to construct pyramids. For example the Egyptians used 3-4-5 triangles to lay out right angles.

      Engineering does NOT requires ANY proof of anything, merely a well structured set of rules that works. Over time Engineers have fould that there are good uses for things like mathematics and physics, but for the most part the rules that engineers have used to build things over the past 4000 years were codified into the laws of physics and mathematics as an afterthought.

      Writing software involves re-inventing the wheel for every project, constantly changing it, and constantly changing methodologies to try and put out software

      That is not software development, that is Calvin Ball. Take a look at the Software Engineering Institute's Capability Maturity Model and you will immediately recognize your description of software development as CMM Level 1, i.e. chaos. The only reason your method ever succeeds is through the heroic efforts of a few talented individuals. This is the reason so many software projects fail, are late, and are over budget. Random actions are not a fundamentally sound way to build products.

      Other organizations have better ways - for example the Loral Space Shuttle Software Group operates at CMM level 5 and produces the code with error levels on the order of 0.5 errors/KLOC where good quality commercial software runs at an average of 20 errors/KLOC.

      In 100 years, Software may be specified, designed, built, and maintained just like bridges or radios, but not now.

      Some places do that now. Unfortunately about 90% of the software industry is operating at the level of Calvin Ball.

  7. Just like any other engineering by Mr.+Shiny+And+New · · Score: 4, Insightful

    Engineering is about designing/implementing a product that meets certain criteria, with certain resources.

    It's about getting it done for a certain cost, in a certain time. It's about making sure that certain saftey considerations are taken. It's about making trade-offs.

    In the end, the software engineer has to be able to deliver a product and stand behind it. He or she is responsible for the quality of the product. If a bridge falls down, the engineers are blamed. If a car breaks down (due to bad design), the engineers are blamed. Similarly, if a program fails in some critical way, the engineers should be blamed.

    From a software point of view, that means that we need to be able to accurately predict the behaviour of software. We need to be able to quantify things about programs. But we also need to be able to trade-off the cost of development with the savings. For example, it's silly to spend millions of dollars to protect a $10 asset.

    We also need to be able to make guarantees about the safety and robustness of the software. This, I think, is going to be one of the biggest challenges as more and more life-critical systems become computerized with common-off-the-shelf components.

    Just think of a project like the Ariane rockets... They are great achievements in mechanical, chemical, and electrical engineering. Yet the maiden voyage of the Ariane 5 blew up because somebody re-used software written for Ariane 4. The failure had to do with a floating-point error that was impossible on Ariane 4 but that happened on Ariane 5. (Well, it's more complicated than that, but this serves my point). The blame for the failure lies squarley on the shoulders of the sofware "engineers". Now, current software engineering techniques make it difficult to verify that a program can not be re-used in a new environment. But when the discipline matures, it will be Software Engineers, and their tools and tricks, that ensure that mistakes like Ariane 5 don't happen again.

  8. What an ominous question... by neitzsche · · Score: 5, Insightful

    When I worked for a large government contractor, there was intense interest in having our division become SEI level 3 compliant (then level 4 the next year, then level 5 the next year.)

    This question was one of the ones asked by management at the time. They knew then that they were are the mercy of the 80/20 rules:
    80% of the code takes 20% of the project time
    last 20% of the code takes 80% of the time

    80% of the staff does 20% of the work,
    20% of the staff does 80% of the work.

    etc.

    So they tried to reign the "heroes" in. They did so by trying to adapt the over-performing 20% - by limiting what and when they could do, so as to:
    A) bring the 80% along and
    B) make the 80% not look so bad/suffer from low self esteem.

    That division of that company reorganized itself into non-existence in the last few years (it had 1,200 "engineers" when they started in on the SEI stuff.)

    --
    In my opinion, programming is most efficiently done by individuals, when they are properly motivated. Much of the discipline of "software engineering" practices are VERY good but tend to be taken too far the instant politics are involved. For example, code reviews are essential for production quality code, yet when they become required for the tiniest change they become bureaucratic nightmares.

    In my experience, the term 'engineer' has only been thrown about as a political buzzword; sometimes to justify higher education requirements, other times it is used to scare end-users out of filing formal complaints and other times it was used to raise hourly billing rates.

    But whenever the term was used, it meant someone was planning on having programmers (ahem, engineers) program less. :-(

    --
    "God is dead." - Frederik Nietzsche
    1. Re:What an ominous question... by neitzsche · · Score: 2, Interesting

      Dear AC,

      Please don't post as AC; I almost missed your reply.

      That is a good point. I wasn't trying to go in quite that direction but now that you mention it...I do think that programming naturally progresses to engineering. That is, a person will either 'get it' or not. If not, then they will not be programming long. But if they do, then they will accumulate their own bag of tricks over the years, and gradually appreciate and adopt engineering principles.

      So in that context, yes, I would consider a senior programmer equivalent to an engineer trainee.

      I was trying however, to point out that the term engineer is more often used as a cludgeon by bad managers.

      --
      "God is dead." - Frederik Nietzsche
  9. According to the HR director... by stefanlasiewski · · Score: 4, Funny

    I have been looking for a job for the last two months, and having dealt with several HR staff and recruiters, I can tell you that software engineering means you have an MCSE and can help the marketing director figure out how to get Powerpoint Presentation to "Open the internet".

    It also has something to do with like .NET, Web Services and eXtreme Programming.

    --
    "Can of worms? The can is open... the worms are everywhere."
  10. My definition by pauljlucas · · Score: 3, Interesting
    Software enineering is designing a software system. It need not only be the "big picture," but can also be the design of concrete things like classes, APIs, file layout, protocols used, etc. Contrast this with programming which is the mere coding of a design.

    The term developer was coined (IMHO) by programmers who didn't like being referred to as programmers because it has an implied "lowly" in front of it or comes off as generally nerdy.

    Going back to the rest of the original question:

    ... a program that works under precise, known conditions?
    It would be a minor miracle to know conditions precisely. What you do know are expected conditions and you want the software to work under them. But there are an infinite number of unknown conditions. What you would like to happen is that the software either flag the conditions as inappropriate and refuse to act or fail gracefully.
    --
    If you reply, do so only to what I explicitly wrote. If I didn't write it, don't assume or infer it.
  11. I'll try by WolfWithoutAClause · · Score: 2, Interesting
    Software engineering is when you are consciously having to trade things off; and you do it (mostly) successfully.

    The things you typically trade off are speed, manpower, memory, diskspace, cost, delivery, algorithms, complexity etc.

    If you're not trading things off, then you are a technician, not an engineer.

    --

    -WolfWithoutAClause

    "Gravity is only a theory, not a fact!"
  12. Honestly though by Glonoinha · · Score: 4, Funny

    >What sets a 'Software Engineer' apart from the rest of the crowd?

    A good start, of course, is a four year degree from the department of Engineering at an accredited university. BS Computer Science under the Department of Engineering. Not those wannabe MIS punks in the business college with their accounting and management classes, but pure hardcore unadulterated comp/sci classes including compiler design, queue theory, three semesters of calculus, two semesters of differential equations, some statistics, numerical methods, logic classes, maybe some physics (statics and dynamics) while they are at it.

    Second, a touch of autism never hurts. Real hackers can read 700 page technical manuals over the course of a weekend and remember the location in the book of any topic.

    Be able to express yourself in strange languages - real software engineers can think in incredibly abstract ways, seeing things in ways that others competely miss. See 'A Beautiful Mind' for more complete information. Real software engineers write recursive code, self modifying code, and can think in six dimensions without breaking a sweat.

    Finally, the ability to empathize with the machine is essential. Feel what the computer is going through, understand why it is working or not working, understand where in the system the bottleneck is and fix it to make your computer all better.

    Offer your employee his choice between a raise and a new computer and the software engineer will pick new hardware any day.

    --
    Glonoinha the MebiByte Slayer
    1. Re:Honestly though by Detour_82 · · Score: 2, Informative
      Offer your employee his choice between a raise and a new computer and the software engineer will pick new hardware any day.

      I would hope that the employee would consider the cost & availability of said hardware, vs. the dollar amount of raise before making that decision. If not, I would certainly question their ability as an 'engineer'.

  13. With All Due Respect.... by Dr.+Bent · · Score: 5, Informative

    Maybe the reason that you don't seem to think that software development can be stripped down to "first principles" is because you don't have the educational background to know what those principles are. The basic principles taught to Computer Science students around the country are as mathmatically verifiable and repeatable as any other scienctific system (including physics).

    Thinks like "Big O" algorithm analysis, data storage techniques, and compiler theory form the basis of Computer Science and provide the structural underpinnings for most of the software engineering methodologies out there today.

    I consider myself a software engineer. I certianly do not re-invent the wheel for every project because I have been using the same methodolgy ever since I started programming professionally (OOP). While I am constantly learning new tricks, techniques and technologies, the "first principles" that I learned in school have not changed over the last 50 years of computing history, and they will never change, because they have a firm foundation in mathematics.

    1. Re:With All Due Respect.... by Dr.+Bent · · Score: 2, Informative

      How do you apply big-O and all the other CS stuff to "real" code?



      Want a real-world example? Here you go:

      I once wrote a rendering engine for a GIS data viewer. GIS (Geographic Information System) data, in case you're not aware, is huge. We're talking gigs and gigs of data in some cases. Because of this you can't just use a regular old 2D rendering system to draw it all on the screen because it won't scale up to be able to handle all this data. So when I was writing the replacement rendering engine, I make sure that all the lookup algorithms we used were O(log(n)). This is what makes rendering all this data possible, becuase you can find what you want to draw in logrithmic time (instead of linear time). I was able to establish this standard WAY before we wrote a single line of code. I could have just built a hashing system to look up the data in O(c) [constant time], but because of the algorithm analysis techniques I learned in school I knew that O(log(n)) lookups would be sufficent for the task (and save memory). So how many times did I have to re-write this rendering engine? Zero. I did it right the first time because I could prove the way I was doing it was performant enough to meet the spec before I wrote any code.

      The reason that most of the code out there is terrible is because most programmers don't have (or don't use or don't remember) any formal computer science or sofware engineering training. Because of this, too much time is required to write really good code, so corners are cut. Software Engineering is not about establishing a draconian process to force developers to code a certian way, it's about providing tools and tricks to help them solve problems and prevent bugs with the least amount of effort.
  14. Software Engineering... by Quantum+Skyline · · Score: 3, Interesting

    ...is the application of engineering principles to software design and computer science problems.

    Software Engineering != Computer Science.

    My university [which will remain nameless] supposedly got in trouble with Professional Engineers Ontario because its Computer Science grads were calling themselves "Software Engineers" when there was a Software Engineering program running. After that, computer science was forked into computer science and "Software Design".

    In Ontario, its illegal to call yourself an engineer of any kind without going through an accredited program. MCSEs are allowed to call themselves "MCSEs", and not "Microsoft Certified Systems Engineers".

    Software Engineering != Programming.

    The reason why it gets no respect is because its new, hence the earlier post that it is simply "akin to sanitary engineering" is just dead wrong. The argument that software engineers are sloppy "because if we built bridges the way we build software" is also useless for the same reason. Let the practice of Software Engineering mature.

    Regulations are less than 10 years old. Imagine what Mechanical Engineering or Civil Engineering was when it began. Does anyone remember the building that twisted when subjected to wind?

    Software Engineers != Programmers.

    The bastards who wrote Slammer, Nimda, SirCam, Code Red, Klez (need I go on?) are programmers. Anybody who writes a program for release is a programmer. Software Engineers are obligated to produce good code (and other design documents) because they are subjected to a regulatory body (similar to the Bar for lawyers). This is at least true in Ontario.

    So what is Software Engineering again? Take computer science, programming, engieering principles, legal obligations and ethics and combine them.

  15. zerg by Lord+Omlette · · Score: 3, Insightful

    Locate, if you will, the Mythical Man Month by Fred Brooks. Laugh as you read about how you had to pay money to reserve 4k of memory. Cry as you realize that what was true about Software Engineering 25 years ago is still true today.

    Management does not like cowboys. When they say "BUILD ME SOFTWARE RAAWR" they usually want some sort of estimate of when the software is built, but more importantly they want to know what the likelyhood of it being built is. Single programmers cannot build large software on their own, so (large) teams of programmers must efficiently work together to get things done. Software Engineering is the who/what/where/when/how/why of building large software with large numbers of people.

    --
    [o]_O
  16. Software Engineering is... by trentfoley · · Score: 2, Insightful
    ...what you get when you take a stimulating, wonderfully enjoyable hobby and turn it in to a mind-numbing, horribly exhausting career by stuffing your resume with fancy titles designed to make you feel better about working 60+ hour weeks.

    No, really, I loved my job so much I retired early. Now, computers are fun again.

  17. Re:More Precise by moncyb · · Score: 3, Interesting

    I think you are wrong. Remote root exploits are caused by much bigger errors than "0.1 degrees". Oversimplifying, such security bugs can be set into two classes:

    1. No bounds checking. Buffer overflows and unknown strings in printf's format parameter are more like the architect is off by 45 degrees, assumes the beam can take twice it's rated load, and only takes the building's weight into account. So if a cat jumps on the roof, then the whole ceiling will collapse.

    2. Silly stupid mistakes like "off by one" errors. This is the same as if an architect made a single beam 1 foot shorter than it should be. Assuming redundancy and an otherwise good design, the cat jumping on the roof probably won't cause a problem. There may be a problem if someone places an object that weighs the same as the architect designed for, but if she overcompensated on the design such that, say the roof was rated for 2200 lbs, but designed for 3000 lbs (as should be done), then there may not be a problem. These errors will cause problems (like crashing after a syscall is made 2 billion times), but are not nearly as bad.

    The first problem should never happen with an experienced and competent programer. That kind of "mistake" is reckless programming. The second does happen, but designing the entire system properly will minimize the damage these errors can cause.

    The heap and stack pages should not be allocated executable by default. If a special program needs the ability to write and execute code itself, it should use a special memory allocation routine. Executable code pages should not be marked as writeable. All programs should not be run as root, or if need be, run as root and drop to normal user status as soon as possible. For those programs that do require root, the kernel should be evaluated to see if a permission system can be used to eliminate this need. That way, a program which needs raw access to the video card can't mess with critical files or deactivate the door locks to your top secret room.

    The kernel needs similar checks. High level things such as the TCP/IP stack should not be able to modify any I/O ports or hardware memory, only the network card driver should. If possible, hardware drivers should not be able to access any device they don't cover. For example, the network card driver shouldn't have access to video memory. In fact, a permission system should be applied to parts of the kernel. TCP/IP, network card drivers, video card drivers don't need to access hard drives, filesystems, or door locks at all, therefore they should be denied access wherever possible.

    Architects and various engineers all design so that one minor mistake or unexpected event will not cause their building/device/whatever to come crashing down. Sometimes a manufactured part doesn't exactly conform to spec, many engineers know this. If your calculation shows a point will have 100lbs of stress, you can't expect a bolt rated for 100 lbs to be good enough. It may have a defect where it will only hold 90 lbs. Someone may put 110 lbs of stress on it. All sorts of variables can and do happen. That is why a good engineer will design beyond the spec. Software needs to be the same way. Yes, doing these precautions will cost extra memory, cpu time, and coding time, just like these precautions cost extra money, space, and design time in other fields.

  18. As a legal term by Lumpish+Scholar · · Score: 2, Interesting

    To call yourself an "engineer" in several of the states in the U.S., you must pass two licensing exams. Texas in particular has been known to come down hard on people who use that title without taking the exams and being a licensed engineer. That's why I call myself a "software developer" instead of a "software engineer" if I can help it.

    First, a software engineer must be an engineer. I have a bachelor of science degree in physics and master of science degrees in mathematics and computer science. In most states, I cannot even take the licensing exams and never will be able to unless I go back to college and get a bachelor's degree in some engineering field from an ABET-acredited school. (In some states, anybody can take the exams. Either way, my "liberal arts" degrees don't count for anything. Some other states consider math, physics, and chemistry bachelor's degrees acceptable, but not computer science degrees.) At any rate, the exams cover general engineering: electrical, chemical, civil, mechanical, industrial. The goal is to ensure you're a well rounded engineer.

    Second, some states (at the urging of the local professional engineering societies) think any "engineering" effort must have at least one licensed engineer. This is a bigger deal than it might first appear.

    Sure, I'd like to see someone who knows civil engineering involved with every non-trivial bridge that's built, and if Union Carbide built a chemical plant next door, I'd like a chemical engineer to be checking things out. (See also below.)

    However, sometimes (Texas again) embedded software development projects are considered close enough to "engineering" to require, under law, at least one licensed engineer to be involved. Those civil and chemical engineers are considered qualified; with a master's degree and twenty years of experience, I am not.

    There are a handful software professionals who are licensed engineers. (Want to guess what state they're in?)

    Having said all that, let me say this. All the traditional engineering fields have universally understood, univerally accepted bodies of knowledge, usual captured as some kind of code (as in "building code"). That's why I feel the way I do about bridges and chemical plants. On the other hand, while most individual software engineers think they have such a body of knowledge, no two agree on what it is. There is an effort to define this; a draft version "is ready for field trials for a period of two years."

    Even a school that offers a "software engineering" degree says, "There is no universally accepted definition of software engineering, though there are elements of a forming consensus."

    My humble opinion? Engineering disciplines have with good mathematical foundations: here's the equation for the tensile strength of steel, here's the formula for voltage as we increase power. Software development efforts do not have such a foundation. Some attempts have been made to provide one, but they're almost never applied.

    P.S.: I do not live or work in Texas.

    --
    Stupid job ads, weird spam, occasional insight at
  19. Software engineer vs programmer etc by StarBar · · Score: 3, Insightful

    While some educated folks seems to dislike natural talents and vice versa there are clearly room for both. The last 20 years has been a party to all people with natural programming talent since the sallary you'll make widelly exceeds what the engineering folks in other businesses gets. I do have some academic experiences but the equipment available and the things taught at the time fifteen years ago were far from 'bleeding edge'. However some understanding about algorithm mechanics and the mathematical backgrounds is very interesting but phew so theoretical. I quit the class after a year and I do call myself a 'programmer' and is proud of its labour status. :-)

    Software engineers, if we define them as academic folks, do praise prediction and development processes. My experiences are that some of them do not consider development time as a valid design criteria. For them there are only one way to make the solution, the 'right' way. Often this means that they run out of budget or miss their time-to-market window.

    Programmers on the other side, as I see myself, are often tied to a delivery time, a black box definition and some constraints in terms of design. A programmer can vary from 0 to 100 times in effeciency depedning on talent and circumstances. Given an algorithm, tools and a reasonable deadline a programmer will deliver. Any obscticle on the way is a challange and makes a thrill. A delivery is good fun!

    A software engineer doesn't vary as much as a programmer in skills/talents and does often know how to work in teams better. Facing an obscticle may sometimes ripple down to massive re-analysis and re-designs to get it 'right'. A delivery is a scary thought, since most time have been spent analysing the problem and understanding the design, not coding, so ofcourse there will be bugs, but where??!!

    A 'hacker' is a talent and a 'cracker' is a prank.