Live data from Hacker News

Uncle Bob and Silver Bullets

hillelwayne.com

111–120 of 228 posts

Re: Uncle Bob and Silver Bullets

#111
post #95

Earlier quoted context omitted.

Isn't the PM the one who leads project? (I don't work in a team that uses these terms so genuinely asking.)

A product manager generally owns the spec for a product, but doesn't lead development of it. (Microsoft has a more complicated PM scheme with I think two different kinds of PMs? So I can't speak to exactly what Spolsky's role was there. It wasn't a small role, but no, I don't think he led Excel development.)

Spolsky's role is addressed in his blog post about The Time That Bill Gates Reviewed His Work. It's an interesting read itself, I recommend it.

https://www.joelonsoftware.com/2006/06/16/my-first-billg-rev...

tl;dr He wrote the spec for VBA, aka Excel Macros. It's not being in charge of all of Excel, but I would call that a pretty substantial contribution.

Re: Uncle Bob and Silver Bullets

#112
post #45

Uncle Bob's true value to me was to teach me how bad of shape the software world really is in. Look at any engineering discipline. There are standards, there's a rigorous design process, there's checks from more experienced engineers, there are best practices, etc. Software is like the wild west, and if people don't realize that and try to create some sort of standard than eventually someone with no knowledge of the…

> if people don't realize that and try to create some sort of standard than eventually someone with no knowledge of the field will. I don't think so... No one's hunting down and calling to account the engineers responsible for the Equifax breach, and nor should they. The problem is blatantly a leadership and resource-allocation issue, and is being treated as such.

Bad software has done worse things than release private info. Just a few worse things: failed space missions and cost NASA credibility, killed hospital patients, bankrupt Knight Capital, almost caused World War III due to a false-positive nuclear-launch warning, caused wide-spread blackouts, killed people (lookup Patriot Missile).

We as developers are just waiting for something so terrible to happen that someone is forced to take notice.

Re: Uncle Bob and Silver Bullets

#113

Here is the post this post is in response to: http://blog.cleancoder.com/uncle-bob/2017/10/04/CodeIsNotThe... I don’t interpret the original piece as saying any of these tools and techniques are not useful. I interpret it as saying average developer mindset needs to shape up. I tend to agree. I work with guys who believe in formal reasoning tools (we collaborated with Amazon’s ARG for example[1]), and use all these t…

> First, do no harm, then use like Light Table, Model Driven Engineering, and TLA+. Looking at some of Uncle Bob's other posts linked from this article, I don't think that's what he's saying. He (Uncle Bob) goes on and on about discipline, but at the same time dismisses anything that might actually force programmers to be disciplined, like type systems that force you to check references for null before dereferencing…

Indeed, for any reliability tool not named "unit tests" he comes off as saying "Just write better code!"

It really feels like someone peddling their pet diet, and when confronted with other ways of managing weight they just say "You don't need to do that, just eat less food!"

Re: Uncle Bob and Silver Bullets

#114
post #111
post #95

Earlier quoted context omitted.

A product manager generally owns the spec for a product, but doesn't lead development of it. (Microsoft has a more complicated PM scheme with I think two different kinds of PMs? So I can't speak to exactly what Spolsky's role was there. It wasn't a small role, but no, I don't think he led Excel development.)

Spolsky's role is addressed in his blog post about The Time That Bill Gates Reviewed His Work. It's an interesting read itself, I recommend it. https://www.joelonsoftware.com/2006/06/16/my-first-billg-rev... tl;dr He wrote the spec for VBA, aka Excel Macros. It's not being in charge of all of Excel, but I would call that a pretty substantial contribution.

It is definitely not my point that Spolsky's role with Excel was unimportant. Hopefully, none of my comments can be taken as minimizing his role at all. I'm just saying he wasn't an Excel dev lead, which is a distinction that is relevant to this thread.

Re: Uncle Bob and Silver Bullets

#115
I think Uncle Bob is way off the mark here.

In Clean Code he hammered in the idea that unit tests form an automated specification of some software system under development. This was a decent idea at the time. So why on earth would he tell people not to use type-safe languages or tools for defining better, formal specifications?

Probably because he has something to sell?

We need better tools, processes, and "disciplined" methods to writing software if we're going to tackle complexity and produce systems that can be considered robust, reliable, and safe. Unit tests alone are never going to cut it. There's a reason Microsoft Research has been heavily investing in formal methods: imagine the only specifcation for CosmosDB existed as a unit test suite. It'd have data-losing critical errors in it for years to come.

I liken Bob's post on discipline to be much like the snake oil used to sell Christian religions: you were born sick, but if you believe in me only I can make you whole. What a crock. There are plenty of smart, capable people out there writing perfectly good software. The problem in the industry isn't that developers aren't writing unit tests the way Bob Martin prescribes: it's that a great deal of hand-waving is done to following the state of the art and establishing processes for developing robust, reliable, and safe code.

The entire aerospace, space, and safety-critical systems disciplines in software development have been making huge investments in tools and languages to make managing the complexity of these requirements on software systems to be manageable, correct, and reason about. TLA+ is only one such tool and I think Hillel is right to point it out: you need more than one tool. Your entire process has to be built around avoiding errors.

There's a reason why engineers designing roads stopped calling vehicle collisions "accidents." Once you start looking for the real root of the problem, the system itself, you start to optimize for different goals in order to reduce the negative outcomes in the design of the system. Vehicle collisions still happen because of human error but a great deal more happen because they were enabled by the system: the roads, the vehicles, the by-laws.

In a similar fashion errors in software systems are enabled to happen by different choices we make: stakeholders, deadlines, requirements, time to market, etc. The ISO/IEC/IEEE 29148 guidelines on requirements engineering encourage you to consider these factors as part of your specifications. If the operation of your system will only cause nuisance or interference with the business' goals then the risk is quite low and you might put more priority on time to market. However if there's more risk to harm people like say, losing their personal information and putting them and the insurance industry at greater risk, then I'd say you need to put in the effort to avoid those risks into your processes: use more formal specifications, use statically typed languages with sound type systems, write property-based as well as declarative tests, etc, etc.

If you start treating software errors like we started treating auto-accidents then you'll start to see where you can reduce the negative outcomes. Stop calling software errors as bugs just like we stopped calling collisions, "accidents." See errors as risk and look for ways to reduce your risk. Know where some risk is acceptable.

Uncle Bob is only calling programmers "undiscplined" because he has a few more books to sell to help them get better.

Re: Uncle Bob and Silver Bullets

#116

Discipline is a good thing, but it does not scale. I work on a tool for mutation testing for C/C++[1] for a few years now. During this time I was thinking about tests, tools, people, etc. a lot. Here is the summary of my musings: Quality of software depends on several factors such as hardware, operating system, programming language and tooling used to build the software in the first place, etc. For decades we try to…

Or alternately: we can improve developers, but doing so is hugely expensive and time-consuming, and while we can improve them we can never make them perfect. So making tools that can be used safely by imperfect developers is always going to be simpler and more cost-effective.

Re: Uncle Bob and Silver Bullets

#117
post #47

Here is the post this post is in response to: http://blog.cleancoder.com/uncle-bob/2017/10/04/CodeIsNotThe... I don’t interpret the original piece as saying any of these tools and techniques are not useful. I interpret it as saying average developer mindset needs to shape up. I tend to agree. I work with guys who believe in formal reasoning tools (we collaborated with Amazon’s ARG for example[1]), and use all these t…

> People who believe correctness is important, and people who think continuous deployment I don't see why these exclude each other? You can easily have both, through e.g. powerful type systems (a la Haskell) and still use continuous deployment. > I interpret it as saying average developer mindset needs to shape up. I think you're giving Uncle Bob too much leeway. If you go through his other posts it should be a bit m…

Plus, there are systems like quickcheck that can greatly simplify the act of writing tests.

Re: Uncle Bob and Silver Bullets

#118
post #18

Here is the post this post is in response to: http://blog.cleancoder.com/uncle-bob/2017/10/04/CodeIsNotThe... I don’t interpret the original piece as saying any of these tools and techniques are not useful. I interpret it as saying average developer mindset needs to shape up. I tend to agree. I work with guys who believe in formal reasoning tools (we collaborated with Amazon’s ARG for example[1]), and use all these t…

> I don’t interpret the original piece as saying any of these tools and techniques are not useful. I don’t even know if that is up for interpretation, > I have nothing against tools like this. I’ve even contributed money to the Light Table project. I think that good software tools make it easier to write good software. However, tools are not the answer to the “Apocalypse”. If this is indeed the article OP is respondi…

I had luck to work on some projects without time pressure. Some people still produced low quality work.

Re: Uncle Bob and Silver Bullets

#119

From the original post that is being replied to- "The author did not interview software experts like Kent Beck, or Ward Cunningham, or Martin Fowler." I mean no slight, but are Beck and Fowler really the experts of the field? This is akin to the relationship guru who has been through three divorces -- often just declaring yourself an expert fools enough people into thinking you are.

Fowler wrote some good books ten to twenty years ago. Today he writes as if he is not sure if he gets microservices or not, which might prove he is honest, but he is not giving the bold prescriptions which will make money.

Beck is up there with Tony Robbins so far as I am concerned. Cunningham is famous for running a Wiki which was down for two years.

Re: Uncle Bob and Silver Bullets

#120
post #6

The problem is that the more tools you add, the more mistakes you make in the tools. This is the same debate we had previously about formal methods. They don't eliminate errors, they just move them to the testing systems and where there are several the gaps between them. Communication becomes more difficult between the people involved and you rapidly start looking for the Chief Programmer Solomon who knows everything…

Formal methods, in theory, don't eliminate errors. In practice, though, they do, as dramatically demonstrated by fuzzing CompCert C compiler.

IIRC they were actually able to get CompCert to generate incorrect code when fuzzing due to a bug in a system header file.

Formal methods do (both in theory and practice) eliminate errors that can occur within the scope of what they cover. If there is an error in your model for the underlying system, then formal methods don't save you, but it seems obvious that eliminating one source of bugs reduces overall bugs.

Furthermore, if there is an error for your formal model for the underlying system, there would also probably be an error with your informal model that your programmers would have in their head while developing software without formal methods, yielding similar bugs.

All software should be tested; that doesn't mean formal methods have no value.

Post reply on HN