Software Engineering is a Joke
dewitters.koonsolo.com
dewitters.koonsolo.com
Engineers solve problems. Understanding physics is a means to solving some problems. That's it.
"The application of scientific and mathematical principles to practical ends such as the design, manufacture, and operation of efficient and economical structures, machines, processes, and systems." http://www.thefreedictionary.com/engineering
Software and the process of building software can't be measured because it's not physical?
"The confusion of software engineering probably comes from the fact that programmers often have the same intelligence as engineers, and most of the time share the same interests."?
One of the few things I dislike about news.yc is that something like this, an hour old with 3 points and one comment can make it to #8 on the front page. Programming.reddit actually seems more discerning.
Unfortunately my main thought always seems to get lost. Maybe I should try to make it more clear in the article. In my opinion the core focus of software development, and therefore also the most difficult part, is to create an image of the real world (both in source code and the program). An engineer's main focus is completely different.
Software is simply a layer of abstraction on top of this. For instance, when the USAF wants software for the F-22, you better believe there are requirements and processes just as stringent as Intel's process for designing/developing a CPU. And the people producing that code, imho, are every bit as much engineers as the EE's.
But there is plenty of software out there (maybe most software) like ERP/CRM, desktop/web applications, games, etc ... , where the technical parts are not that important, or aren't really the main problem. The main problem is to try to create the most clear representations of real life items (customers, business processes, human resources, etc.), and make them clear to other programmers in the source code, and to the customers (who most of the time aren't technical).
It's probably true that my theory doesn't make much sense for lower level/close to the hardware software development. But for high level things I still think I'm absolutely right ;).
If you want to develop software without strict practices, that's just dandy, and you don't have to refer to yourself as a software engineer. It does not follow that software engineering is a joke: http://news.ycombinator.com/item?id=132640.
On the other hand, if you do want to be a software engineer, these practices can be applied to all projects, no matter how small or high-level. I think this may be what your professor was trying to say.
"First of all it's not a science. It might be engineering or it might be art. ...has a lot in common with magic."
So, who knows what it is exactly.
Truly, one of the lamest things I've read all year.
"Unfortunately . . . software development and engineering are, even at the most fundamental parts, completely different. Engineering is the practice to develop something touchable, something that obeys the laws of physics."
That premise is flawed and leads to misguided conclusions. Engineering is the application of technical knowledge to solve problems. There are tons of ways to say this, depending on who defines it, but no reasonable definition prima facie excludes software from being an engineering discipline.
This implies that the product produced can be evaluated with the laws of physics. You can make all kinds of statistics, strength calculations, etc on the product. . . . . Software on the other hand, doesn't obey the laws of physics, by the simple reason because it can't be touched. Sure, it has physical parts, but those physical parts are not that important.
Let's forget for a second that all software can be specified in hardware. There are still important "physical parts," constraints, and metrics applicable to the design of software. For instance, one would be hard pressed to argue that physical constraints of RAM and processor speed are completely irrelevant to software. In addition, much of software engineering actually turns out to be how to optimize output of teams with finite amounts of man-hours available. This is non-trivial and subject to a wealth of metrics, experimentation, and methodologies.
But let's go even further and put all of that aside. The argument still doesn't hold up. Even if software could not be touched, it could still can be engineered. Disciplines like process engineering and human factors engineering are examples of rigorous practices applied to seemingly abstract implementations. Useful software engineering principles such as modularity, coupling, cohesion, reuse, interfaces, specifications all come directly from other "traditional" engineering practices and have been shown to improve the quality and speed of software development.
Look, I appreciate the art of software development; that's part of what I love about it! And there's certainly a point to be made about focusing too much on process over creativity at the wrong stages. But that point wasn't made. The article seemed to suggest that we just throw up our hands and give up trying to do anything rigorous with the products we design because it's all an illusion anyway. I think we can do better than that. We need to do better than that.
"Engineering is the application of technical knowledge to solve problems.", therefore, engineers try to gain as much technical knowledge as possible to solve their problems. In my opinion software development should evolve to require less and less technical knowledge, that way we can spend more effort on the real problem: mapping the problem domain into a clear software representation. Developing software should evolve closer towards the human side, and not towards the technical side. And so far, programming languages for example have evolved in that direction.
that doesn't stop people from trying to engineerize software development, for worser or worse
Obligatory beautiful bridge link: http://www.joelonsoftware.com/items/2006/12/15.html
In nearly all forms of engineering, it can be far to tell exactly how close to completion you are. And there are no qualitative aspects of other forms of engineering?