Live data from Hacker News

A New Software Engineering

queue.acm.org

51–60 of 94 posts

Re: A New Software Engineering

#51
I smell someone trying to make money off of seminars and corporate "re-education". There's no doubt that many of our corporate overlords need re-education on agile software development, but this is not the way to do it. They simply need to engage their IT people openly and collaboratively. Nothing else will work.

Re: A New Software Engineering

#52
What I like about SEMAT is that it's straight-forward and it can encompass waterfall, agile or scrum or whatever. It quantifies what's happening on your project without relying on traditional MBA-type project management processes.

The barrier to SEMAT, as with Agile, is training and leveraging the power that programmers/software engineers have in the economy to get it adopted. We're going to have to wait 5-10 years to see any significant adoption. What would really helped is guides and documents on how to present this to your team or organization and make it easier to get it adopted or at least to trial run it.

Re: A New Software Engineering

#53
post #20
post #16

Earlier quoted context omitted.

Why rust is better? for example, it has generics, which more abstract and offering greater reuse while still being efficient. As for the dream of dropping fixed systems, you can already buy a cheap fast mcu from xmos with 4 cores which you can use 3 to create extra peripherals.Or another cheap CPU with a small fpga. But of course if you're fighting for pennies of cost or power, there might be better fixed alternative…

Sorry, I shouldn't have thrown in the quip on FPGAs. It really is a complete non-sequitor. I think a very neat topic, but didn't belong here. I don't accept that generics are somehow an automatic win for languages. I do like them somewhat, myself, but I don't think there has been compelling evidence that they can be used to great effect in building embedded systems. Consider, at the low level, the majority of the cod…

GCC is moving from C to C++ and from what I can tell GCC developers seem to think it is an improvement, and GCC suffered from inadequacies of C.

Re: A New Software Engineering

#54

Another silver bullet in the making. I don't mean to be rude but to me it's pure BS. A grand plan, a conclusion talking about paradigm shifts, and no substance at all. Seeing the method co-signed by Robert Martin even made me chuckle a little. I guess we're on for a second round. This is clearly meant for management (again) and doesn't give a hint of a clue to what is the practice of software engineering. Won't they…

Your comment is actually one of the best formulations of software engineering I've ever read. However, I'd disagree, at least to some extent, with your conclusion: "This precludes precise estimates or estimates at all..." While we software developers do occasionally solve novel problems that can't be estimated since the methods for implementing them are not currently known (i.e., research problems), most of the probl…

I should have worded it "This precludes precise estimates and sometimes estimates at all", as of course depending on your knowledge of the problem domain and your field experience you can get some degree of confidence.

Re: A New Software Engineering

#55
So the author is basically saying 'we need to improve software development', and trying to use history as an example of 'what we need' in order to improve it.

Back in the day, craftsmen were just people who were so specialized in a trade that they could build amazingly complex and difficult things through example and practice. But it took a long time to learn this craft from another craftsperson, and knowing this one trade so well left them at a loss for other aspects of the thing they built (resulting in things like building collapses).

Modern software developers are the same. Indeed, we're even going through the cultural shift that happens when different civilizations revisit the same things without really looking at how their forebears did it. We're still reinventing the wheel instead of creating a better one, and we're far from creating any new transportation mechanisms.

In order to achieve the kind of evolution from 'craftsman' to 'engineer' that existed for physical architecture, software developers need to learn about things other than software. It's not enough to simply learn how the kernel works, or the hardware works. You have to learn how all those pieces work with other pieces, and the resulting interactions between different natural and non-natural processes with computer systems.

The author gets to those points with his 'essence' of new software engineering. But it gets a bit bogged down by not being generic enough, and not being specific enough. It's simple to see the difference between a craftman's output and an engineer's: the application of scientific principles to achieve an output we can be much more confident in. And that's what 'new software engineering's goal should really be: producing a more reliable, reproducible, safer product.

Are the proposed methodologies going to get us there? I don't think so. I think we need less process, and more science, and to create software which has science as an inherent requirement of its design and implementation, and not merely an afterthought for performance reasons.

Re: A New Software Engineering

#56
Automated tests are the closest thing to actual engineering in software. While communication methods like agile methods are important, to me they still are outside the scope of actually engineering software. I've found that one of most significant factors of the software quality I've produced is the test coverage of the code, and not just lines of code but the different branches of a function, which honestly feels quite impossible especially if you have exceptions or threads involved.

Some celebrate TDD, but to me it just has appears to help people not dropping out the tests.

Automatic static analysis with compiler warnings or pure static analyzers is a really good and quick solution for it, but what I'm really hoping is a fully automated dynamic analysis solution. What's really exciting is that there already are some dabbles with that approach, like the american fuzzy lop (http://lcamtuf.coredump.cx/afl/) which actively tries to find new branches from the application being tested.

Re: A New Software Engineering

#57
There are many hard problems in computer science and software engineering. As it turns out, the solution to these problems is spider charts.

Finally, we'll be able to write distributed low-latency software that interacts with both legacy systems and browsers with complete end-to-end type safety, provable correctness and fault tolerance! In half the time, at half the cost!

With spider charts.

Re: A New Software Engineering

#58
post #20
post #16

Earlier quoted context omitted.

Why rust is better? for example, it has generics, which more abstract and offering greater reuse while still being efficient. As for the dream of dropping fixed systems, you can already buy a cheap fast mcu from xmos with 4 cores which you can use 3 to create extra peripherals.Or another cheap CPU with a small fpga. But of course if you're fighting for pennies of cost or power, there might be better fixed alternative…

Sorry, I shouldn't have thrown in the quip on FPGAs. It really is a complete non-sequitor. I think a very neat topic, but didn't belong here. I don't accept that generics are somehow an automatic win for languages. I do like them somewhat, myself, but I don't think there has been compelling evidence that they can be used to great effect in building embedded systems. Consider, at the low level, the majority of the cod…

If you look at surveys ,c++ ,as shitty as it may be, is used a lot around the industry.And the fact that ARM have chosen it for the mbed on which they plan to build an operating system around for IOT chips, shows it's value for mcu's, at least in some segments.

The other data point regarding rust is the huge excitement in the embedded community.

Re: A New Software Engineering

#59
Software engineering was taken more seriously 20 years ago than it is now. There have been some notable successes of rigorous development, but they're not well known. Here are two in wide use.

The first is the operating system kernel in the air link processor of mobile phones. In most current phones, that's an L4 kernel with a full proof of correctness. Since any mobile phone can potentially knock out all phones for some distance around if it doesn't follow the sharing rules for the air link, this is important to carriers. They got it right. Nobody talks about this much, but if that layer had problems, there would be regular cellular blackouts.

The second is the Windows Static Driver Verifier. This has been used since Windows 7. It verifies that kernel drivers don't crash, clobber memory or call the driver APIs incorrectly. Before the Static Driver Verifier, drivers accounted for more than half of Windows crashes. Now, crashes from signed drivers are very rare, and usually involve getting the driven device itself to do bad DMA operations. (IOMMUs are coming along to stop that.)

This shows the right direction for software engineering. Some software really matters, and has to be engineered properly. Most software doesn't matter all that much. Engineered systems should separate the two, develop them in different ways, assume the low-grade stuff will crash, and architect systems so the low-grade stuff can only do limited damage. We're seeing architectures like that in the mobile world and in server-side systems. In the mobile world, "apps" run in relatively contained environments. In the server world, things seem to be moving towards containerized "apps" in systems like Docker, running on some minimal glue layer inside a container running on a secure microkernel such as Xen and talking via message passing.

That's software engineering.

Re: A New Software Engineering

#60
post #47

Earlier quoted context omitted.

The best way I've heard this described is this: Engineering has a well-defined constant you're always building against: gravity. In software, you choose your gravity, and it changes all the time. Sometimes there are twelve gravities. Sometimes there are different types, and they interact in complex unpredictable ways. In short, it is a much more difficult problem. But personally I believe we can reach a meta-engineer…

Engineering is not as simple as building against gravity. There are a lot many things that "engineers" (non-software) have to take account of, even in something as mundane as laying out a road. In this example, you not only have to build the road within the area; you have to build it so that it has the right curvature so that vehicles can make the turn etc. You have to make sure that the road you're laying out has a…

A road is a bad example. The only reason a road is required is because of gravity.

I disagree with your hand wave of "software = art". Software is also bound by many constraints. Time (as you mentioned) is not trivial because it's the difference between useless and useful software. Memory also puts limitations in that can't be ignored.

Useful software runs on real machines bound by physics. Theoretical computer science can disregard the constraints to see what's possible, but that's CS and not SE.

Post reply on HN