Live data from Hacker News

Software Architecture Guide

martinfowler.com

271–280 of 303 posts

Re: Software Architecture Guide

#271

Earlier quoted context omitted.

> Even Fred Brooks' Mythical Man-Month - informed by his leadership of the massive bet-the-company "360" project at IBM - lacks data. It's still great though (in, uh... my subjective opinion, I guess). I have just read that book. It is the computer book with most tables pr page of any I have seen. How you come to this conclusion is beyond me.

The "data" in this context is empirical data in support of the hypothesis that the man-month is mythical (aka adding people to a late project makes it later). You also need a control. Similar for other hypotheses, such as a "programming product" and "programming systems" take three times longer than a "program" (written by e.g. a garage duo). BTW Your "beyond me" was unnecessary. https://news.ycombinator.com/newsguid…

Thought I'd better check this. I went through the book's eponymous chapter 2 The Mythical Man-Month (p.14, 1975 ed), and it has not a single table; not a single datum.

It has many graphs, without data points, and the text and their smoothness indicate they are graphs of functions, not data.

I have a disturbing feeling that the downvoters in this thread simply don't know what it means to validate a mathematical model with data.

BTW It's not a criticism of the field that it's not yet an engineering. It's just where it is at the moment.

Re: Software Architecture Guide

#272

Earlier quoted context omitted.

That's a pretty bad example because any good programmer will have at least a rough idea how to profile code in their environment. Can you name any software that's "engineered"? I can't. All software is built by craftsman of varying degrees. Nobody sits down and engineers anything up front. The original point "agile" was that code is an iterative craft, so everybody should get together and work toward incremental impr…

> Can you name any software that's "engineered"? Most compilers. GPS and mapping systems. Basically, software whose core operation founded on well understood data structures and algorithms. No doubt there is heuristic fiddling around the user interface and that's not engineering, but the core of plenty of software ought to be well engineered.

I'm interested. Could you elaborate on "most compilers", with a specific compiler, and how it is "engineered"?

Although much care and thought goes into compilers, and they are related to discrete mathematical models (though, more descriptive than prescriptive for hand-written recursive descent parsers; unlike the central PDEs in some engineering), there is much tweaking for efficiency and especially for helpful error messages. I would describe that as "crafted" (though "engineering" has some crafting too).

Even something like diff, based on longest common subsequence, is full of ad-hoc tweaks to give excellent performance on typical real-world input, much better than theoretical complexity. (I mean the specialization that is in addition to the general optimization in the implemementation of the algorithm.)

I suppose your concept of "core operation founded on well understood data structures and algorithms" is the best we can hope for.

Re: Software Architecture Guide

#273

Earlier quoted context omitted.

There is not such thing is "partial" engineering. Engineering is the creation and ongoing management of any real world object (building, cars, bridge, computer) which has affect on its environment. I.e. they are placed in the real world to achieve some sort of a function. The role of the engineer is: 1) Find out what function a machine should provide 2) Create this function by building the artifact on time, and in co…

I didn't say anything about partial engineering. Just that engineering disciplines are different. If you need to design a column to hold up some load, a set of equations will tell you the dimensions of that column, how much cement, sand, etc to put in the concrete mix, how many steel rebars of what diameter and specification. Designing that column is very different than anything I do as a software engineer.

But, if you need to design a data processing system with a certain throughput, a set of equations can tell you how many servers you will need, how much storage, constraints on latency or network bandwidth, etc. So it's not so different after all.

Re: Software Architecture Guide

#274
post #262
post #258

Earlier quoted context omitted.

And then there are people like me. I've worked in big enterprise software departments (a huge homeowners insurance tech company, big banking, government contractors), "companies" of three people including myself, and some in between. Currently I'm at a 500-ish person company that is not quite enterprise but not really a start-up. My experience is that "Enterprise Architecture" creates as many problems for the busines…

This is where I get confused. Are you criticizing a particular architecture, or architecture in general? Is it even possible to have a system without an architecture?

The Winchester Mystery House does exist in software somewhere.

Re: Software Architecture Guide

#275

Lots of hate in this thread.. People asking for proof: what sort of evidence would convince you? I take these blog posts, apply it to my experience, and take what I think makes sense. Sometimes, an idea will solve an obvious pain I've had. Sometimes, an idea will show me a pain I didn't know I have. Sometimes I disagree with the idea because it won't work for me. That's fine. I'm still much better off thanks to this…

> People asking for proof: what sort of evidence would convince you? I take these blog posts, apply it to my experience, and take what I think makes sense.

I love opinions. But if you provide a plot like the one for software quality, you should provide backing data. OR you should clearly state that such plot is totally made up. Nothing else.

I have a blog where I write about my opinions. But they're CLEARLY opinions, UNLESS I have some backing data.

Re: Software Architecture Guide

#276

Earlier quoted context omitted.

Agreed. But that's a fault of content consumers not producers, no? I have read SCIP (in college), Code Complete (first book I got in my first job), Gang of Four (2nd book), Clean Code, etc. Unfortunately we are in an age where blog posts and videos are a lot more accessible than dense books. That sucks, and means we all have to expend extra energy to find a mix of good and diverse ideas and thoughts.

> But that's a fault of content consumers not producers, no? Yeah, mostly. But at least a little is that Fowler writes and presents pretty authoritatively. And he should, because that's what consultants do, but we should remember that he's a consultant for a very niche area of software ("Enterprise") whenever evaluating his advice.

But then, very often, he also make notes that there is no one good design and, when presenting an ideas, he also presents pros and cons of given solution.

Re: Software Architecture Guide

#277
post #158

Earlier quoted context omitted.

If you want to see how a properly referenced text looks like, pick any of the following: * Code Complete - McConnell * The Economics of Software Quality - Capers Jones * Facts and Fallacies of Software Engineering - Robert Glass * Making Software - Oram & Wilson ... and there are many others. Not all references have survived the test of time, L. Bossavit describes in his book " Leprechauns of Software Engineering" ho…

>Your objections are invalid; one does not need to be better at a task than an individual in order to criticize them. Asking for references and proof is perfectly legitimate, at least if we want to approach our discipline more as engineering and less as "Strunk & White" as someone comically suggested in another comment Software development, as often as comparisons are made to engineering or science is neither. It's a…

Software development is indeed not "engineering or science";

But that doesn't mean it has to be "craft" or other highly subjective fields, nor that we can't aim for similar standards as other engineering disciplines.

> Writing code is more like being a blacksmith than being a scientist ... a lot of software development is fundamentally subjective.

But writing code is more like engineering than science, so why not compare those? There is subjectivity to engineering design too, but plenty objectivity in the constraints - what make something "fundamentally" subjective versus some other kind of subjective?

Is it possible we don't need to compare programming to any other profession? We can instead identify there is subjectivity in software development, and that some (but maybe not all) it it could be more objective for a benefit.

Re: Software Architecture Guide

#278
post #234

Earlier quoted context omitted.

Please detail your understanding of what philosophy is and how it resembles what such teams are doing. My gut feeling is that they're quite different, but I could be missing something...

I don’t reward sealioning.

> Sealioning is a type of trolling or harassment which consists of pursuing people with persistent requests for evidence or repeated questions

Asking what you mean by what you wrote in a public discussion forum isn't seasoning. You aren't being asked for evidence for you opinion, but what that opinion is, and the context of a discussion forum implies you mean to discuss the topic. Also, I can't see the "persistence" or bad-faith that would make it trolling.

Re: Software Architecture Guide

#279
post #248

Earlier quoted context omitted.

Are you applying the principle of charity when reading Fowler? The quote about performance seem totally sensible and basically akin to Knuths "We should forget about small efficiencies, say about 97% of the time...". Focus on maintainability and only sacrifice clarity for performance when you know there is a performance problem. What part of this do you honestly disagree with? You can pick any writing apart by being…

> Are you applying the principle of charity...? Well, when I read that passage, I tried to figure out what he might mean. And mostly I distilled it down to what I wrote: "clarity is more important than performance, and will usually lead to better performance". So even though he's lacking a lot of specifics, sure I think I get his meaning. > "That's basically exactly what Knuth said" No Knuth said "ignore small ineffi…

> clarity is more important than performance,

But he does not say that! You are deliberately misrepresenting the meaning of the quote. He says he focus on clarity first and only optimize for performance if absolutely necessary. You can disagree with that, but it is a totally different thing.

If you have legitimate disagreements which his viewpoints you should be able to state your argument without needing to misrepresent what he says. Then we can have a conversation and maybe learn something.

Re: Software Architecture Guide

#280

Earlier quoted context omitted.

> Can you name any software that's "engineered"? Most compilers. GPS and mapping systems. Basically, software whose core operation founded on well understood data structures and algorithms. No doubt there is heuristic fiddling around the user interface and that's not engineering, but the core of plenty of software ought to be well engineered.

I'm interested. Could you elaborate on "most compilers", with a specific compiler, and how it is "engineered"? Although much care and thought goes into compilers, and they are related to discrete mathematical models (though, more descriptive than prescriptive for hand-written recursive descent parsers; unlike the central PDEs in some engineering), there is much tweaking for efficiency and especially for helpful error…

CompCert is the most extreme example of course given it's fully verified and the strictness required entails a high level of attention to details. Almost every compiler will be based on graph or tree transforms; Haskell and Rust are both engineered around reduction to intermediate, lower-level languages.

I don't think the tweaks you mention necessarily negate the core engineering, unless the system is completely unusable without them or they define more of the behaviour than the core itself.

Edit: for an analogy, consider whether the ergonomics of where buttons are placed on the dashboard of a car suddenly negate the fact that the car is engineered. That seems silly right? Any number of performance or other tweaks can be made to a car and not negate its engineeried quality, until you start compromising the actual operation of the car itself, like swapping out wheels for a tank track, or something like that.

Post reply on HN