TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

Why Software Engineering Isn’t Engineering

23 点作者 josep2将近 10 年前

20 条评论

kgrin将近 10 年前
&quot;Software engineering estimates and plans often fail to live up to the reality that follows. It seems to be the only engineering discipline in which this is regularly the case.&quot;<p>Is it though? I live in Boston, home of the notorious* Big Dig[1]. While particularly egregious, it&#x27;s far from the only large-scale civil engineering project that&#x27;s gone off the rails. In fact, I&#x27;d argue that until fairly recently, many more public works projects shared the &quot;surprise factor&quot; of software projects. I&#x27;d recommend Caro&#x27;s &quot;The Power Broker&quot;[2] for a fascinating history of NY-area public works (among other things - great book all around), including how much of that process was about adapting the plan to new things the builders were learning along the way (&quot;oh, turns out that soil is <i>completely different</i> than we planned...&quot;)<p>That&#x27;s not to say that there aren&#x27;t particular features that make software engineering its own special snowflake - as there are meaningful differences between how civil, structural, mechanical, etc. engineers operate. But spend some time in another engineering organization and you&#x27;ll find it&#x27;s different, but not as different as you think it is.<p>(And FWIW, even civil engineers sometimes follow &quot;agile&quot; concepts - a company I once worked for was contracted to design a highway, and even after the construction started, engineers were &quot;embedded&quot; with the builders to make on-the-fly adjustments based on the environmental factors they discovered throughout the process... I wish I could find their project write-up, but it was a while ago and the company has long since been gobbled up by a bigger company).<p>* As a (subjective) kicker, I&#x27;d add that the Big Dig, over-time and over-budget as it was, was ultimately quite worth it... much like many software projects!<p>[1] <a href="http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Big_Dig" rel="nofollow">http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Big_Dig</a><p>[2] <a href="http:&#x2F;&#x2F;www.amazon.com&#x2F;The-Power-Broker-Robert-Moses&#x2F;dp&#x2F;0394720245" rel="nofollow">http:&#x2F;&#x2F;www.amazon.com&#x2F;The-Power-Broker-Robert-Moses&#x2F;dp&#x2F;03947...</a>
评论 #9674702 未加载
评论 #9674750 未加载
jasode将近 10 年前
<i>&gt;projects delivered precisely what they said they would, and in the timeframe they originally promised.</i><p>Those factors are &quot;<i>project management</i>&quot; which include concepts like &quot;scope&quot;, &quot;budget&quot;, and &quot;critical path&quot;.<p>It&#x27;s arguable if those are &quot;engineering&quot;. They certainly <i>affect</i> engineering. (And likewise, some engineering constraints can feed back into project planning and feasibility.) In any case, project planning is a separate area of study. Using the author&#x27;s strange definition of &quot;<i>engineering</i>&quot;, it means the NASA Space Shuttle is &quot;not really engineering&quot; because it didn&#x27;t deliver to the specifications of 50 launches per year at low cost.<p>A more reasonable definition of engineering that most could agree on would be, &quot;<i>the study (or art) of balancing technical tradeoffs against real-world constraints</i>&quot;.
评论 #9674712 未加载
falcolas将近 10 年前
You see this sentiment come up about every few months here. We&#x27;re not rigorous enough. Or we can&#x27;t estimate our build time well. Or we don&#x27;t have any liability. Or we don&#x27;t have a codified set of morals that govern us.<p>BS.<p>We&#x27;re still exploring the space, and most of the time the things we build are good enough to work - just like the first wooden planks across streams were good enough.<p>We also do have the capability of designing and building the software equivalent of suspension bridges across the bay, using tools and processes like Ada, Coq, formal software proofs, etc.<p>Most engineering projects don&#x27;t live up to your high standards, either. I knew a Blacksmith who would make circular staircases, and would regularly have to work around floors which were 4-6&quot; higher or lower than specced. Or bridges which were put into earthquake zones, but not designed to withstand earthquakes. Or highways built with inappropriate foundations that buck like a bronco with frost heaves after the first winter passes. Or cities built under the freaking water table.<p>Ease up here folks. Our tooling and processes are still undergoing growth, as we take in the incredible scope of what we are capable of. Rome wasn&#x27;t built in a day, and the understanding of stoneworking, woodworking, and city planning which enabled the building of Rome certainly took more than the &lt; 100 years we&#x27;ve had.
评论 #9674985 未加载
评论 #9674923 未加载
评论 #9674980 未加载
评论 #9674993 未加载
评论 #9674830 未加载
JoeAltmaier将近 10 年前
Building a bridge of a million bricks - most of them do the same thing. A software project may have a million moving parts, all of them doing different things. The comparison is silly.<p>I&#x27;d use the original moonshot as a better example. It was hugely complex, unpredictable, late, had a large number of last-minute problems. They essentially used Kanban to solve it - hanging a drawing of the rocket on a large conference room wall, and taping notes to each place where there was a problem; reviewing each note at a &#x27;scrum&#x27; meeting each morning.<p>So Engineering has been working this way for at least 50 years. There&#x27;s nothing to see here folks; move along.
iancackett将近 10 年前
Wow, so, Hacker News... didn&#x27;t see that coming. Thanks for the comments, good and bad, folks.<p>One thing I certainly agree with: Regular physical engineering isn&#x27;t entirely free of many of the problems I mention with software engineering, but the ability to understand and plan more effectively does appear to be there. The complexity in physical engineering does seem to be a little more tangible. I know a few civil and mechanical engineers, so I&#x27;m not plucking this from my behind ;-)<p>In terms of the definition of engineering, and the argument that software engineering isn&#x27;t &quot;engineering&quot;, I was taught this way back at university (City Uni, London), in their Centre for Software Reliability, and it&#x27;s something I&#x27;ve largely agreed with. However, I think it was mainly used as a warning mechanism for newbie software &quot;engineers&quot; like me, to let us know that what we do is significantly different from other forms of engineering, in terms of the rigour. Perhaps it still deserves the title, but I guess that&#x27;s a longer discussion.
penprogg将近 10 年前
So I decided to search the definition of engineering on the internet because I&#x27;ve heard this whole &quot;software engineering is not engineering&quot; thing before:<p>&gt; Engineering (from Latin ingenium, meaning &quot;cleverness&quot; and ingeniare, meaning &quot;to contrive, devise&quot;) is the application of scientific, economic, social, and practical knowledge in order to invent, design, build, maintain, research, and improve structures, machines, devices, systems, materials and processes.<p>So, software &quot;engineering&quot; definitely involves the use of scientific, economic, social and practical knowledge to build, maintain, research, and improve devices, systems, and processes. So that, in my lowly opinion, makes it engineering &quot;in the strictest sense of the term&quot;.<p>Arguing about semantics is extremely stupid if you are not a PHD in linguistics.
评论 #9675002 未加载
nickpsecurity将近 10 年前
I like that he included the counterpoint to his position early on in the article (Cleanroom etc). The article is correct that our type of engineering is a bit different with all the interactions between components and the fact that they&#x27;re often different. Yet, there&#x27;s a subset of the field that counters these problems through choice of development style (eg Cleanroom) with well-understood components with consistent interfaces. The style is fairly easy to pick up but the good components are built up incrementally over time.<p>Truth is, manager&#x27;s and developer&#x27;s choices are why most of this isn&#x27;t the case. Management might push use of a problematic technology, give too little time to assure quality, and so on. Developers might care little about making things maintainable, prefer a style which impedes it, or use fad technologies with tons of unknowns. The combination led to pervasive issues in the industry the article references.<p>The solution is for quality-centric IT shops to differentiate by going in the opposite direction. The same for FOSS projects. Fortunately, we see a little bit of this here and there. Altran-Praxis was delivering engineered software via Correct by Construction methodology. One student&#x27;s combination of Python and Cleanroom was promising. Ada and Eiffel communities are using Design-by-Contract to aid predictability&#x2F;maintenance. So, we see pieces of how vanilla IT shops &amp; FOSS can raise the bar closer to engineering. We just need courageous groups to jump and grab it.
rb2k_将近 10 年前
I don&#x27;t have a particular dog in this fight, but I thought this is interesting:<p>The last O&#x27;Reilly Software Architecture Conference had a talk by Glenn Vanderburg titled &quot;why software development is an engineering discipline&quot;:<p><a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=zDEpeWQHtFU" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=zDEpeWQHtFU</a><p>I think the author of the blogpost does a lot of the things discussed in the talk (e.g. comparing it mostly to civil engineering as opposed to all the other engineering disciplines).
评论 #9674833 未加载
makeitsuckless将近 10 年前
&gt; &quot;Software engineering estimates and plans often fail to live up to the reality that follows. It seems to be the only engineering discipline in which this is regularly the case.&quot;<p>Yeah... nearly stopped reading after that opening statement. There are many reasons why software engineering is different from other forms of engineering. And maybe those reasons are enough to not call it engineering. Personally, I don&#x27;t think that&#x27;s particularly relevant.<p>But wildly exceeding estimates is definitely not something that distinguishes &quot;real&quot; engineering from software.<p>Real world engineering often has the advantage of working almost exclusively with known quantities. But add a variable, like digging a tunnel through an unpredictable underground, and sometimes projects go off schedule by <i>years</i>.<p>No engineering discipline can predict the unpredictable. Some disciplines are just younger than others, and therefor have more unpredictable elements.<p>The big difference with software engineering is that the costs of failure are so relatively low that we prefer to go full steam ahead instead of trying to find ways to reduce uncertainty.<p>This makes software engineering an outlier. Everything else is just semantics.
评论 #9674853 未加载
评论 #9674771 未加载
j_m_b将近 10 年前
I think &quot;Software Engineer&quot; is just a title given by a place of employment. However, for those who genuinely believe themselves &quot;Software Engineers&quot; I would ask: What was the outside institute that certified your software engineering program? What professional exams did you take in order to be licensed as a software engineer?
评论 #9674835 未加载
评论 #9674715 未加载
评论 #9674786 未加载
graeham将近 10 年前
I think the biggest difference is tradition engineering systems are mostly linear, while software rarely is. Even non-linear mechanical or electrical systems can typically be modelled.<p>Modelling is a key activity of engineering - it allows predicting the behaviour of a final system. Linear systems are handy because they are scalable. A bridge to hold 10 people can be scaled to hold 100, 1000, or 10,000 people (usually) quite easily. A software processing scaling from 10-&gt;10,000 will often fail in all sorts of interesting ways in the process.<p>Software often fails silently. In mechanical systems, there is often noises, vibrations, or yielding to give warning and insight to where problems are happening. Software often doesn&#x27;t have this inherently, but can be overcome with debugging and testing.<p>I think a large part of this is the newness of the field. People were building bridges, houses, and carts long before Newton. But after we had the modelling tools and theory, we were able to go much further.<p>(I&#x27;m a mechanical engineer, who tends to do a lot of software for controls and models, and increasing web development)
评论 #9675006 未加载
taylodl将近 10 年前
We&#x27;ve been talking about this for over forty years now and it just hit me - engineers are categorized by what they <i>build</i> whereas software engineers are categorized by what they <i>build with</i>. If you asked an engineer who&#x27;s an expert at building bridges to then build a skyscraper, they&#x27;re likely to have estimates that are off-base. Meanwhile in the software world we say we&#x27;re Java developers or Ruby developers or Haskell developers are whatever. The field is only now starting to really mature to the point where we can start categorizing different kinds of software projects and specializing in different practices.
评论 #9674746 未加载
评论 #9675009 未加载
akgerber将近 10 年前
A couple counterexamples from civil engineering: <a href="http:&#x2F;&#x2F;www.businessinsider.com&#x2F;why-the-7-line-extension-still-isnt-open-2015-4" rel="nofollow">http:&#x2F;&#x2F;www.businessinsider.com&#x2F;why-the-7-line-extension-stil...</a> <a href="http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Line_C_%28Rome_Metro%29" rel="nofollow">http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Line_C_%28Rome_Metro%29</a>
websitescenes将近 10 年前
Software engineering is not engineering, yet you call yourself a software engineer?
sebnap将近 10 年前
I think this is one reason why you don&#x27;t get an engineering degree in Germany, after completing computer science studies. It is more seen as math or physics, just a natural science.
shogun21将近 10 年前
His argument against calling it &quot;engineering&quot; is because we don&#x27;t properly estimate our time?<p>To me, engineering is a way of thinking, it&#x27;s all about problem solving.
评论 #9674865 未加载
评论 #9674699 未加载
tsunamifury将近 10 年前
This guy seems to be stating a made up tautology due to the fact that he is redefining eng.<p>According to this guy we do mostly design and specification. Of course then you could say the Bay Bridge, the Space Shuttle, the 787 and every product that requires a long design and exploration pathway is not engineering. I don&#x27;t know of anyone at Google who considers dev the same as mechanical engineering. It&#x27;s more of an exercise in managing complexity, mathematical optimization, social science and design theory. But we sure as heck aren&#x27;t designing for the knowns required to do what this guy defines as engineering.<p>But so what?
评论 #9675015 未加载
wai1234将近 10 年前
This is possibly the silliest post I&#x27;ve ever read. Apparently you don&#x27;t know the definition of engineering and, most astonishing, claim building projects are always perfectly estimated. I doubt ANY building project ever finished on time or under budget. If everything were tidy and well understood, it wouldn&#x27;t be engineering. Stick to software, Ian.
评论 #9674697 未加载
mikekchar将近 10 年前
In my opinion, software, if it is a form of engineering, is a very strange form. A mistake in one part of the code can potentially affect any other part of the code. Not only that, but the effect it has is practically unbounded. If we were making a car, then it&#x27;s a bit like putting in a cup holder causing the fuel tank to explode.<p>We can&#x27;t efficiently reason about our designs because we can&#x27;t efficiently build from reusable parts that are known to work. Sure that cup holder works in every body else&#x27;s car, but it makes our fuel tank explode. There is no equivalent to things like &quot;tensile strength&quot; that we can calculate to say, &quot;This will be good enough for this project, but for a different project we should use something else&quot;. We just shut our eyes and pick our components based on what the most annoying person in our team wants to use.<p>Many organisations make the mistake of thinking of software development as if it were like building a bridge. We think that we can choose a framework and it will <i>reduce</i> the amount of thinking that we have to do. Then half way through the project we are madly trying to hire Rails experts because nothing works right and it has something to do with the internals of Rails (which we were trying to avoid understanding).<p>Putting aside the gargantuan task of gathering requirements for a second, building software sometimes has the feel of building something physical. Because software is seen as a thing that people utilise, they think that we will eventually use the same techniques that we use for building physical object&#x2F;systems. The reality is that software does not follow laws in the same way that a bridge or a car must follow physical laws. You make up your own laws in software and the only thing that is important is internal consistency.<p>It&#x27;s a bit like creating a universe for your bridge to live in. The success of your bridge depends on whether or not you chose sane rules that other people could understand. If we were to think of it as engineering, we would need &quot;engineers&quot; who studied every software system so that they could understand the &quot;laws of physics&quot; (which explains why Rails developers get paid so much!).<p>BTW, I&#x27;m picking on Rails for no good reason. You can insert whatever framework&#x2F;library&#x2F;language&#x2F;system you currently hate because it really doesn&#x27;t matter all that much. Each one encapsulates it&#x27;s own universe and requires us to study it to understand how it works. Our ability to extrapolate from one system to another is dependent upon whether or not the developers actually chose to imitate each other or not.<p>On the other hand, we have some advantages over engineering. Our universe is made up. If we choose we can limit the rules to only things that we understand very well. We also get to see the source code (unless you work with proprietary systems, in which case you have my undying pity). We don&#x27;t have to discover the laws of physics by experimentation (hmm... it doesn&#x27;t stop some programmers, though...). The laws might change from day to day, but we can even write so-called &quot;tests&quot; to alert us when some idiot has inadvertently changed the gravitational constant and caused the universe to implode.<p>Personally, I think the differences between programming and engineering are big enough that we lose a lot by hoping that it will become engineering. For some reason there seems to be a desire to call programmers &quot;engineers&quot;. I hope this trend reverses and we embrace a new discipline that is more suited for our needs.
mpdehaan2将近 10 年前
Estimates aren&#x27;t so much of a concern for me as quality.<p>While bridges can fail after 50 years, the general state of many software applications (particularly in enterprise software) is seemingly less good.<p>I primary issue is lack of standardization and rigor in the field that allows for quantifying allowable defects, test coverage requirements, and understanding of failure scenarios. Simply put, so much is played very fast and loose. Fragile systems are sometimes built in haste on fragile foundations.<p>In say, electrical and building codes for houses (not engineering so much, but applicable), there are established standards for protection of consumers and standardization of work. In software, usually these don&#x27;t exist - or they exist in small legal areas like PCI or HIPAA, and don&#x27;t really explain how the software is built either, but only some of the properties. Not only do building codes exist, but the similar codes and standards exist for the parts the technicians install.<p>Rather than codify the practices of the craft that firm things up, everybody&#x27;s still trying to figure out what those practices are. And maybe that&#x27;s ok. Bridge building has been done for thousands of years, and software has been done for far less than a century.<p>We are still figuring a lot out. Yet, at the same time, I don&#x27;t think we remember much from history, software that has &quot;nailed it&quot;, and analyze what works and doesn&#x27;t.<p>Software is also kind of not engineering because it&#x27;s an expressive medium to some, kind of an art, hence the application of &quot;craftsmanship&quot; frequently applied. We are sometimes inventors, sometimes engineers, sometimes sometimes carpenters, sometimes plumbers.<p>These are all valid fields, but I do want for greater engineering rigor over the long haul. I think it would make things less stressful. But right now, we (as the people in the industry) are doing all these breadth first forays to figure out how software is built - sometimes getting stuck in local minima and maxima until we can upset an ideology enough to try something new - and that&#x27;s partly why it feels like it does. We have a lot of people with different experience levels and different specializations, and often conflicting opinions, where sometimes none are clearly right or wrong.<p>On the other end, business also needs to change. A bridge is never &quot;sold quickly&quot;, it is sold and then takes as long as it takes. Electronics can be pitched heavily, but the cost of field replacement is so remarkably large it must be gotten right the first time. However, software can quickly be replaced on the fly. More so a problem if you are working on a .com than on firmware, the need for rigor is reduced and engineering deliverable is more controllable by the desires of the business side.<p>Ultimately, it&#x27;s still a remarkably new industry, and it itself is able to evolve quickly, as we are not realing dealing with the rules of chemistry, but rather conceptual ideas and logic. Logic and ideas are fuzzy complicated beasts.
评论 #9674719 未加载