7 ms·
"Computer Science" is Not Science and "Software Engineering" is Not Engineering
- currywurst 14y agoMy favourite quote from the article "... studies suggest that the paradigm or language that a given developer is most comfortable with is the one that makes them the most productive. This would mean that to get optimum productivity, hire a bunch of like-minded developers who are fanatics of a given language or tool."
- robocaptain 14y agoI only clicked on this link because I saw the geocities.com. I was expecting more BLINK tags and animated gifs :(
- manuscreationis 14y agoI was hoping I wasn't the only one who got excited to see a geocities link.
- jabiko 14y agoI assumed all geocities.com sites have been deleted. How is this possible?
- Auguste 14y agoMost are gone, but there seems to still be a few left up. No idea why.
- sp332 14y agoSeveral geocities archive projects have collectively been hosted at reocities.com. A bit redundant in this case but for example http://www.reocities.com/tablizer/science.htm http://www.reocities.com/tablizer/science.htm
- alter8 14y agoThis is not an answer, but there is a previous discussion in a submission of mine: http://news.ycombinator.com/item?id=4136682 http://news.ycombinator.com/item?id=4136682
- vandershraaf 14y agoI thought i was the only one. I'm just so excited to see this ancient site got surfaced again.
- foldingstock 14y ago"But we don't have this in software designs for the most part. We have the requirements, such as what the input and output looks like and the run-time constraints which dictate the maximum time a given operation is allowed to take. But there is much in-between these that is elusive to objective metrics. " I pretty much stopped reading here. Elusive to objective metrics? I agree that you can't measure a program like you would a bridge, using physical laws such as physics and chemistry, but you very well can measure many aspects of it such as: efficiency, size, required resources, relative ease of use, etc. Just because it is not a physical thing doesn't mean we can't use a "scientific method" approach, we just need to be open to using metrics that exist in the digital realm.
- polshaw 14y agoAll of your points could be applied to, say, a manager in a business, but nobody would call them a employee engineer or business scientist.
- vonmoltke 14y agoThe world does have, rightly or wrongly, "process engineers" who use metrics to modify and optimize processes, physical or business. Just look at how widely the attempts to employ Six Sigma have been. That said, being able to measure something isn't sufficient; one also needs the control to modify the thing being measured in a way that has deterministic effects on the metrics. GP's metrics have that feedback loop with respect to software, which pushes it towards engineering. Process engineers have that feedback loop, even on business processes. Your manager does not; most of their actions do not create deterministic results.
- deleted 14y ago[deleted]
- nialo 14y agoThe reason people say silly things like this is that "software design" is used for slightly the wrong thing. What is called a "design" in software is much closer to a relatively low level specification in physical manufacturing, while a completed mechanical design can just be handed to a factory for production, and is much closer to source code for software.
- Juniper 14y agoReminds me of the statement by I think H. Abelson though it might have been Sussman (from their SICP video lecture 1)that goes something like : Computer Science is not a science and it's not about computers. Computer science is only about computers in the same way that physics is about particle accelerators. That was the gist of it anyway
- deleted 14y ago[deleted]
- polshaw 14y agoAs someone with an engineering degree, it does irk me to constantly hear programmers referred to around these quarters as 'engineers', it's extremely introspective, and IMO a little disrespectful. Similarly to the 'are you technical?' thing, why is there such an aversion to the term programmer or software developer? I have no problem with the term 'software engineers', as i do seem some parallels, and it is clear what you are talking about, but please leave the straight up 'engineering' term to those dealing with the physical world. E: most replies and downvoters seem to have missed that I have no problem with the term where it is unambiguous. You wouldn't call a software architect simply 'an architect' (would you?).
- brianto2010 14y agoSo, are you saying that a discipline that does not involve the physical world cannot necessarily be an engineering discipline? Personally, I don't usually see people favoring the word "engineer" over programmer or software developer. As for myself, I see them as synonyms.
- rimantas 14y agoYeah, and leave the "web" for spiders, correct? Engineering was long before software appeared, but is this a good enough reason not to reuse the word? Some software just happens (alas), but some is engineered—that is thought upon, designed; time is spent thinking how different parts are put together and how they will interact.
- Wohlf 14y agoI never really liked the term software engineer, and I think by the very definition of engineer it doesn't work. I've always refered to myself and others as a programmer, coder, or developer.
- colkassad 14y agoHacker, engineer, ninja, rock star...these terms are bandied about in this community and I don't have a problem with it, it's just part of the lingo. Anyone stumbling on this community who may get confused with the term "engineer" (for example, in a HN job posting) would figure out pretty quickly that that they mean someone who makes websites. It's not like a company really wants a rock star or someone trained in martial arts, or someone with a P.E.
- nlz1 14y agogeocities.com sites are still there???
- Wohlf 14y agoExactly what I was thinking. It must be a graveyard of autoplaying music, hit counters and flashing graphics.
- warmwaffles 14y agocame here to say this. The article was good, but geocities?
- TazeTSchnitzel 14y agoI thought Yahoo took it down a while ago?
- valdiorn 14y agoAs a trained electrical engineer, working as a software "engineer", it is my opinion that those quotation marks I just used are necessary. I may be an engineer, but I'm not employed as one, even if it says so on my business card.
- benthumb 14y agoIf this isn't engineering, I'd love to know what it is: http://techcrunch.com/2012/08/07/google-cars-300000-miles-without-accident/ http://techcrunch.com/2012/08/07/google-cars-300000-miles-wi...
- icegreentea 14y agoThere are software engineers, and then there are software "engineers". Just because because of their jobs involve programming does not make them all the same. Just like how using CAD doesn't automatically make you an engineer. There are definitely software endeavors and jobs that can be called works of engineering. And then there are those in the grey areas, and then there are those which are not.
- espeed 14y ago"Underlying our approach to this subject is our conviction that 'computer science' is not a science and that its significance has little to do with computers. The computer revolution is a revolution in the way we think and in the way we express what we think. The essence of this change is the emergence of what might best be called procedural epistemology the study of the structure of knowledge from an imperative point of view, as opposed to the more declarative point of view taken by classical mathematical subjects. Mathematics provides a framework for dealing precisely with notions of 'what is.' Computation provides a framework for dealing precisely with notions of 'how to.'" -- Preface to the First Edition of Structure and Interpretation of Computer Programs (http://mitpress.mit.edu/sicp/front/node3.html http://mitpress.mit.edu/sicp/front/node3.html)
- deleted 14y ago[deleted]
- ten_fingers 14y ago> Mathematics provides a framework for dealing precisely with notions of 'what is.' Computation provides a framework for dealing precisely with notions of 'how to.'" But some parts of math deal "with notions of 'how to'" and there commonly do so more "precisely" than computer science. There are such parts in optimization, control theory, statistics, and numerical analysis. E.g., numerical analysis says how to (1) solve systems of linear equations numerically exactly using just single precision arithmetic, (2) solve systems of linear equations with accuracy guaranteed by error bounds from condition number, (3) solve systems of large, sparse linear equations where the matrix is large, positive definite, and diagonally dominate, (4) how to solve ordinary differential equation initial value problems, e.g., for space flight trajectories, and (5) how to solve partial differential equations of heat flow, fluid flow, and electromagnetic fields, and (6) how to do discrete Fourier transforms of positive integer n points in time proportional to n log(n) instead of n^2; statistics says how (1) to get minimum sufficient statistics in the Gaussian case, (2) how to design a most powerful statistical hypothesis test, (3) how to pick a survey sample size that will give desired accuracy, (4) how to get minimum variance, unbiased estimators in multivariate statistics, and (5) at a Web site with users arriving at a rate of 10 a second, how to find the probability of a minute with arrival rate of over 20 a second; control theory can show (1) how to execute best possible decision making over time under uncertainty, (2) how a rocket can reach orbit for minimum fuel, (3) how an airplane can climb to a given altitude in least time; and optimization can show (1) how to find least cost flows on large networks while avoiding cycling in the network simplex algorithm, (2) how to assign interceptors to targets in the best possible way in guaranteed execution time, and (3) how to assign signals to satellite channels to minimize the worst case of signal interference.
- fiatpandas 14y agoAnd, software architecture is not architecture. ;)
- padobson 14y agoSo, building a bridge is an engineering endeavor. Does this mean that drawing blueprints for the bridge is not engineering? What about working a crane? Laying brick? Sealing pavement? Sweeping the bridge? Could you say that an AWS datacenter is not a feat of engineering? Certainly writing the software that powers it is as important as any other discipline, and every piece of its execution has definable metrics to measure performance. I've known janitors who sell accounts and measure their foot steps to find the fastest cleaning path. If you sell janitorial services for $2000 a month and it only takes you 2 hours a night to do a job, then you'll make as much money as some engineers. Not that salary is the measure of an engineer, but using math and science to maximize favorable outcomes should be. Or maybe thats just the measure of a hacker.
- thomseddon 14y agoWhilst I don't necessarily disagree with the point you are working towards, I don't follow your pedantic breakdowns of various endeavors. "Drawing" the blueprints would be done by a draftsman not necessarily an engineer, working a crane is a skilled job done by crane operators (again not necessarily engineers), and brick laying/pavement sealing/bridge sweeping is again not necessarily done by an engineer. In building a bridge, the "engineering" is done by the civil engineer who designs the bridge, chooses and calculates its construction: "applying scientific knowledge, mathematics and ingenuity to develop solutions for technical problems." Similarly, a datacenter may be considered a feat of engineering, but the construction (read: design) of the datacentre is done by civil/structural engineers and is separate from this argument (although this may not have been what you were getting at, my interpretation was that you were initially including the building in your point). I would argue that if a janitor was to optimise his/her route by counting steps, this is not a technical problem and so doesn't make him an engineer.
- erichocean 14y agoI would argue that if a janitor was to optimise his/her route by counting steps, this is not a technical problem and so doesn't make him an engineer. Doing so is called "industrial engineering".
- 14y ago
- t_lark 14y agoThe cross discipline Engineering workflow is: 1. define metric of success 2. fiddle with system till metric is high enough. 3. <optional> research alternative 1.s and cheaper 2.s Real software engineering, e.g. profiling optimization, is definitely a branch of engineering. Research into software architectures, is not. Science is about disseminating the unknown. You do not do science in most software jobs. You are doing science if you publish your results in scientific journals. An example of real computer science is understanding how discrete systems (such as DNA or CPUs) can turn into complex systems (such as life or A life). The author of this article has very little understanding of engineering or science. From a Engineer/Scientist
- stephengillie 14y ago"Computer" science is more like "computational" science - reducing everything to numbers, using logic to make safe assumptions and find paradoxes, etc. Humans can't compute as well as transistors so we use them for all of the heavy thinking. It's engineering in the same way that constructing a stainless steel table is mechanical engineering (buy a sheet, cut it, put 8 bends in it, weld corners, grind corners, polish corners with acid, weld legs on, grind leg welds, polish leg welds)
- Xyzodiac 14y agoTry telling that to my university, the majority of my non CS classes that are required are suffixed with "for engineers".
- webcowboy 14y agoAlso, Political Science.
- yanatan16 14y agoQuote from http://wikipedia.org/wiki/engineer http://wikipedia.org/wiki/engineer "An engineer is a professional practitioner of engineering, concerned with applying scientific knowledge, mathematics and ingenuity to develop solutions for technical problems. Engineers design materials, structures and systems while considering the limitations imposed by practicality, safety and cost. The word engineer is derived from the Latin roots ingeniare ("to contrive, devise") and ingenium ("cleverness")." Software engineers definitely fall under this definition.
- stephengillie 14y agoEtymology is one area where I know not to trust Wikipedia. I'm pretty sure an "engine-er" maintains an "engine", in the act of "engineer-ing".
- Cyranix 14y agohttp://www.thefreedictionary.com/engineer http://www.thefreedictionary.com/engineer || http://www.merriam-webster.com/dictionary/engineer http://www.merriam-webster.com/dictionary/engineer On what grounds were you "pretty sure"? Etymology is one of the easier things to corroborate online.
- steverb 14y agoWould you trust dictionary.com? It agrees with Wikipedia. Origin: 1350–1400; engine + -eer; replacing Middle English engin ( e ) our < Anglo-French engineor Old French engigneor < Medieval Latin ingeniātor, equivalent to ingeniā ( re ) to design, devise (verbal derivative of ingenium; see engine) + Latin -tor -tor http://dictionary.reference.com/browse/engineer http://dictionary.reference.com/browse/engineer
- stephengillie 14y agoThey both probably have the same incorrect source. I trust the OED.
- ten_fingers 14y ago
- OlivierLi 14y agoIn Québec Software Engineering is covered by the "Ordre des ingénieurs du Québec". Software engineers have to come from accredited engineering schools and take the same exams as engineers from other fields. They are also required to follow the same code of conduct.
- jiggy2011 14y agoDoes this mean that in order to charge money for any programming work at all (even VBA) you have to have an accredited qualification, or can you do so but not call yourself a software "engineer"?
- OlivierLi 14y agoNo it doesn't. But the term Engineer is protected. You cannot legally call yourself an Engineer if you don't have the degree.
- snowwindwaves 14y agoI am not able to call myself an engineer unless I am a professional engineer, until then I am an 'engineer in training' EIT. I think engineers should come up with a better term for this 4 year period before they can become professionals.
- betawolf33 14y agoThe contention that Computer Science is not a science because on opening a CS textbook you get confronted with a number of mathematical concepts seems a fairly ridiculous one. The same argument could be made to say that Physics is not a science, after all. The problem is that there's a conflation in most people's minds of the terms 'computer science' and 'programming'. Computer Science courses teach you how to program, so this is understandable. But the research that goes on in Computer Science departments is not all about 'how to program'. Hypotheses are generated and tested for specific end-goals. Sure, CS is highly mathematical in its execution, and the introspective areas of research are thus mathematical. Some of the research in the Algorithms areas is probably best published in mathematical journals. But that's not the whole science. What about measurements of routing efficiency in Networking? What about HCI? What about Ubicomp? What about NLP, or even AI in general? Even if they are using mathematical principles in forming their systems for experimentation, they're still doing science. Hell, all sciences rely on maths somewhere.
- SeanLuke 14y agoI think that this is basically saying "Computer Science is science because it uses science." But Electrical Engineering uses just as much scientific method in its research papers as CS does. Does this make EE a scientific field? To my mind, every engineering field has researchers who use the scientific method every day to produce stuff for the engineers to use. The field is not defined by those researchers -- it's defined by the users (engineers). EE researchers often publish stuff based on the scientific method, or by proof, but the end product is meant to be used by engineers. CS researchers often publish stuff based on the scientific method, or by proof, but the end product is meant to be used by ... well, we call the "programmers". But they're engineers of software.
- betawolf33 14y agoInteresting perspective. My thought is that CS is what we call what those researchers do to differentiate it from what the users do. Creating a new tool through the scientific method would be the science, whereas implementing a system or product would be the 'software engineering' - the application of the science. I don't have a good basket term for both research and application, but I'd probably go for something like 'Computing'. This could be applied to any engineering field as well, it's just a matter of naming practices. I'd be happy to admit that 'electrical engineering science' existed (though the name is horrible) to refer to the research in electrical engineering.
- philhippus 14y agoThe software "engineering" argument is debatable, but computer science certainly implies some classical scientific principles. Areas such as quantum mechanics, relativity theory and thermodynamics are relevant in computer studies. The subject of "Computer Science" is vast, at least equalling the scope of more accepted scientific disciplines and probably stretching beyond.
- acheron 14y agoI don't know anyone who especially disagrees with this, but etymology is not a consistent process. The term "software engineering" evolved for various reasons; whether the discipline is actually covered under "engineering" is as relevant as whether or not you're actually killing 1/10th of a population when you "decimate". Also, reminds me that my favorite description of my school (http://www.wpi.edu http://www.wpi.edu) was that it specialized in "science, engineering, and computer science", since of course CS is neither science nor engineering.
- amykhar 14y agoI never understand how such old content suddenly becomes popular around here. This article is from 2005.
- brandontreb 14y agoI can't trust anything this guys says since he's running on geocities.
- m0skit0 14y agoI almost do not agree with anything you say in this article, and I'm not entering the details since most of them has already been commented here, but just a point I feel like missing: software IS bound to laws of physics and chemistry, because it runs on hardware, which is bound to such laws. Most of the time, when engineering software (which is NOT the same as coding/programming) you must take into account the hardware limitations, and on last instance, test that software on some hardware and do optimizations where needed.
- mahmud 14y agoAhhh yes, tablizer. He is still around I see.
- SeanLuke 14y ago> Some suggest that instead it is "engineering", not "science". But engineering is nothing more than applied science. This seems to be an entirely self-serving and arbitrary definition on which to base his argument.
- deleted 14y ago[deleted]
- ten_fingers 14y agoFor computing being 'engineering', that is an old sore point with me. I believe that computing should be engineering but so far really misses some key points. Here, close to the article, is an example of some of what is missing: In engineering for, say, a bridge, the design engineer can get quite comprehensive data on the 'engineering properties' of the materials, components, and processes he is intending to use. E.g., he knows the stiffness of steel beams, the tensile strength of steel cables. and how much weight a reinforced concrete column can carry. Now in computing, for an algorithm, what do I know about the resources it requires? E.g., I just wrote a Web site session state store using TCP/IP for communications, my own code to convert the TCP/IP streams to the 'messages' I needed, and Microsoft's .NET collection class SortedDictionary to store the pairs of session keys and session values. So, how do I know fast my code will be and how much storage it will need? That is, could I get data on TCP/IP and SortedDictionary so that I could tell before writing and running the code? That is, do I have solid engineering information about the components I used that will let me know, before writing and running the code, the final performance of my software? NO!!! Instead, about all I can do is run the code and measure the execution time. For the storage needed, I don't have a good solution even given the running code. So, by analogy, if bridge building was like software writing, then a bridge engineer would not know how strong his bridge was until he built it and tested it with loads. So, net, the bridge designer can 'engineer' his bridge just on paper before any construction has started, but I can't do the same for my session state store. Again, a big difference is that the bridge engineer has detailed engineering information on his components and I do not.
- davidcuddeback 14y agoYou make a very good point. I had to do a trade study of different microprocessors (for embedded software) when I worked at a more engineering-focused organization, because one of our requirements was that a certain algorithm had to complete in under 30 seconds (or something like that---I don't remember the exact time requirement). One of the things we had to do was try to quantify how fast the algorithm would run on each processor, which as you mentioned was nearly impossible. We ended up looking up the MIPS [1] and FLOPS [2] for each processor, whether it supported SIMD instructions, and how many pieces of data its SIMD instructions could process in a single instruction. Some processors didn't support floating point math, so we had to estimate how fast it could be emulated with integer registers. Then we had to have some formula to estimate the run time based on this data and the nature of the algorithm (what percentage of the code uses floating point vs integer instructions, what percentage can take advantage of SIMD, etc). The problem with this is that even the published performance data, such as MIPS, aren't a measure of a single attribute that we can apply in any meaningful way. For example, MIPS is affected by clock speed, which instructions are executed (some may execute in a single cycle, others take several cycles), branch prediction, and cache coherency. How do you quantify stalled instructions? The final execution time is a result of an interplay between the hardware's characteristics and the algorithm's characteristics (as compiled by a certain compiler) over time. Perhaps a more appropriate approach for software engineering would be statistics. Given normal distributions for MIPS, missed branch predictions, etc, similar characteristics of an algorithm, and perhaps the language and compiler used, then maybe we can give a confidence interval for an algorithm's run-time. But like you said, in many cases it's probably easier (and cheaper) to just build the algorithm and then measure it. [1] Millions of (integer) instructions per second. [2] Floating point operations per second. [3] Single instruction multiple data. [4] Not to down-play the difficulty of that task. I'm sure it's very complicated as well.
- vampirechicken 14y agoA chickpea is neither a chick nor a pea.
- eswangren 14y agoI am first and foremost a software guy, but I work in a systems group. I write hardware device interfaces. I solve problems in the physical world. Motion control, digital imaging, electronics. Many of the problems I solve on a daily basis are problems of physics, yet I solve them (mostly) in software. I think the term "software engineer" applies here. Let's not forget that there are many, many engineers just like me who do not write CRUD and web apps every day.
- dromidas 14y agoThis article truly deserves 'TL;DR'. BUT, having lightly skimmed it, I get the general idea because "real" engineers have been whining about the Software Engineer title since nearly the first day I was at college like 11 years ago. Oddly, perhaps, I haven't ever heard scientists complain that computer scientists aren't scientists. I can't speak so much about software engineers as that is not really what I do, but as a computer scientist I can say without reservation that it is indeed a science. Research and experimentation is a core part of a lot of what computer scientists do. Solving problems that had no solutions until you came along and invented them.