5 ms·
I'm not convinced. Care to make a case?
by AndyKelley 13y ago
I'm not convinced. Care to make a case?
- adamconroy 13y agoWell it is really just semantics, so there is no right or wrong, and anyone can define what particular words mean to them. But there are a couple of things that make me personally think software engineering is a misnomer. Firstly, traditional engineering disciplines are generally pretty black and white. It is applied maths and science. If you build a bridge, you can use physics and maths to pretty much prove that it will handle a particular weight/load and so forth. Software development is rarely like that, and even if you are writing software for an engineer and therefore you could argue that you can prove the calculations the system is generating, it is really the problem domain that is engineering but the way the software is put together is not so easy to prove. Secondly, I think the term actually does us a disservice. Software development requires intuition, craftsmanship, pragmatism, determination, adaptability, artistry. It also often requires understanding human nature, empathy for users, being able to learn and understand endless problem domains, an eye for the aesthetic. All of these things aren't generally required for traditional engineering disciplines.
- Daniel_Newby 13y agoThe distinctions you are making are mere tendencies. Automotive engineering, for instance, requires everything on your list of software development traits—in spades. I would say that the essence of engineering is a devotion to verifying that the design works like you think it works. Software development often lacks this devotion, but when it is there it is entirely proper to call it software engineering.
- chii 13y agoi suppose there aren't very many software engineering fields (and most of them really are just computerized extensions of physical engineering). That's why i call it software development, and i m a software developer.
- nostrademons 13y agoThere are plenty of different software engineering fields, it's just that it's usually just called "domain knowledge" and nobody outside the field makes the distinction. One of my internships was at a company that did avionics software. Avionics is about as different from Web 2.0 startups as you can possibly get and stay in the same industry. There are very rigorous traceability metrics that pretty much dictate exactly what can go in the software. Every line of code has to be traced back to a particular paragraph in the design doc, which has to be traced back to a particular numbered requirement. Oftentimes garbage collection or even heap allocation is banned to avoid unbounded pauses in execution time. So the behavior of the code is fully specified under all conditions, and often formally verified. This was the one place I've ever worked where I'd hear "So we should write it in Ada then?" I've also worked in the financial industry. Little known fact about the financial industry: it's not one industry but many. The code that you'd use to build a quant trading model is very different from the code you'd use to build a retail banking portal. The former actually tends to look a lot like academic research code (i.e. a software engineer would consider it shitty, but it has impressive math and gets the job done). I work in consumer web now, but at Google. We actually do care about latency, and CPU load, and memory consumption, and developer productivity. And so it actually ends up being a lot like real engineering, where you perform experiments to measure the performance of the building blocks you're using, carefully consider goals and trade-offs, make estimates and back-of-the-envelope feasibility studies before implementing, and then rigorously test that solution. This is in complete contrast to when I had my own casual gaming startup, where neither performance nor reliability mattered all that much, the only thing that did was the user interface.
- consultant23522 13y agoI think the big difference is that the civil engineer doesn't actually lay the cement himself, but the software engineer does. This has a lot of ramifications about how each approaches the problems and sees themselves in context.
- Dewie 13y agoSome would argue# that the compiler lays the cement. #have argued, actually
- kabouseng 13y agoIts rather a case of each engineering profession is a regulated industry with an accreditation body, that certifies you as an engineer. Mechanical, electrical, electronic, chemical, industrial, civil, all have standards organisations, usually different ones in each country. See IEEE for instance... Also the engineer term is a protected designation in many countries, just as doctor and laywer is...
- weland 13y agoI am a programmer, but my diploma says Electrical Engineer. I actually majored in EE because I thought it would help me be a better programmer (and I think it did, but that's a story for another time). I actually did EE work, too, and continue to do so sporadically, but I only tackle tasks where I can't screw up any actual EE's work. I know my fundamentals and have some design experience, but since I spent most of my career doing (admittedly, low-level) programming, I'm no match for someone who spent most of their career doing circuit design. The whole frame of mind in which I do EE is incredibly different from the one in which I do programming, to the extent that, for much of my early career, there was simply no way I could do both of them efficiently during the same day. The time of context switching was, literally, a good night's sleep. There are marked differences; the ones that spring up immediately are: 1. I spend a lot of time doing actual computation, optimizing my design on paper and attempting to predict interactions that occur due to reality not being quite like its ideal model. Some of the younger engineers frown upon this (mostly because they suck at math and think theory is for bookworms), but it's very productive once you manage to do it right. 2. Even when specifications are complete and respected to the letter, there are still differences between what you specify and what gets built. There are technological variations you must account for. 3. Better yet, you always need to bear in mind the limitations of the manufacturing process for what you design. When I think about how I'll write something, my own ability to code is literally the only limit I have to deal with. There are, of course, hard limits due to the constraints of the platform you work on (e.g. there is some hard limit to how much code you can fit in 16K of flash), but these are of a very different nature compare to manufacturing constraints. Designs must account for the limits of your technological process (e.g. you may not be able to mount some types of components on a PCB), and they must also ensure manufacturing is feasible and scalable (something called DFM -- Design For Manufacturing -- which I have screwed up a couple of times, due to my inexperience). Overall, there's a huge gap between how much intuition and craftmanship I put in each activity. I'm not saying this disqualifies programming as an engineering discipline; such differences may also exist between other engineering disciplines I have no idea about. I, for one, tend to frown upon it being called "software engineering" though, mostly in virtue of these differences. I don't consider the term "software development" demeaning -- in fact, I prefer it, and I always present myself as a programmer and my job title as "software developer", even though I'm legally allowed to call myself an engineer.
- briancpotter 13y agoThe degree of responsibility is vastly different. Engineers are licensed, and can (and often are) sued for professional negligence. Failing to do your job adequately means you'll be stripped of your license and prevented from practicing engineering.
- hackula1 13y agoNo, only certain fields of engineering are licensed and regulated. Those include Structural, Chemical, Mechanical, etc. Others are less rigorous, but can still are the practice of engineering. Software Development is one of those.
- dsuth 13y agoThis is the best answer I've seen (speaking as a control systems engineer who develops industrial software for a living), and a big part of the reason I'm not keen on software developers calling themselves engineers. When your software crashes and causes $XMM worth of damages, injury or death, and you're held personally liable for that in a court of law due to your status as an engineer, then I'd be willing to accept the Software Engineer title. The title implies a certain amount of rigour and due diligence being applied at all stages of a design, as well as compliance with all relevant standards and regulations. This is audited by certification bodies and explicitly stated by your signature on any document or code you sign off on. Personally I think this is somewhere that software development could head in the future, but there seems to be too much disagreement on coding best practices to standardise them, and anyway I doubt most people would be willing to pay the cost associated with this, for the majority of software.