News for hackers. Stuff that matters.
Re:Software Architecture Guide by blub on Saturday August 24, 2019 @08:56AM (#20786869)
Whenever I see yet another article by Martin Fowler, Kent Beck, Robert Martin & co I ask myself - where is the evidence for what they are preaching? What are the graphs based on? What is the evidence behind the proposed rules?

These authors are clearly accomplished blog and book writers, but anyone whose software-related accomplishments are not open source or at least well known should have their statements scrutinized more closely.

I don't see any studies cited, case studies presented or concrete examples. All I see is yet another reasonably sounding yet unsupported piece of folklore.

Re:Software Architecture Guide by chrisseaton on Saturday August 24, 2019 @09:00AM (#20786893)
For some of these speakers, I’ve literally never seen any evidence that they’ve written a single line of code. Why should we listen to Fowler? What large successful projects has he created using his ideas are there that I can look at? Where’s the data behind his slides? It’s all just talk talk talk.

I’d listen to someone like Chris Lattner talk about how to design and write software because I can see whatever approach he uses must work well. I should listen to these full-time speakers because... I don’t really know and perhaps we should start challenging their talks by asking for the data behind them.

Re:Software Architecture Guide by rhizome31 on Saturday August 24, 2019 @09:56AM (#20787148)
I don't think Fowler pretends to be much of an innovator. The way I see it his work consists in collecting and documenting existing ideas from the industry. You'll find many instances of patterns listed in PoEAA in open-source frameworks. His "refactorings" are also pretty simple ideas that people generally come up with on their own after a bit of work experience. It's just nice to have a nicely formatted book where they're given a name and they're illustrated by diagrams and examples, especially to help junior developers. You'll also notice that for each pattern or refactoring, Fowler generally tries to show its caveats. So it's not like he tries to sell his ideas at all costs. Note that here I'm talking specifically about Fowler, whose work I have found helpful with my real world projects.
Re:Software Architecture Guide by scarface74 on Saturday August 24, 2019 @09:24AM (#20786985)
Chris Lattner knows how to write system software and compilers which are completely separate beasts from the typical bespoke enterprise or software as a service apps that most developers write every day.
Re:Software Architecture Guide by vfc1 on Saturday August 24, 2019 @10:41AM (#20787370)
Exactly, many times these famous authors advocate for practices that make sense for building compilers and frameworks or libraries, but that make little sense for building applications.

Building applications is very different, because an application is the very end of the software tree dependency. Some practices make sense for both types of software, but many others don't and some of these authors don't seem to be able to make the difference.

Re:Software Architecture Guide by scarface74 on Saturday August 24, 2019 @10:48AM (#20787401)
And sometimes it makes sense to take shortcuts that don’t make sense from a long term maintenance standpoint just to survive long enough to get product market fit. Get funding and survive.

Twitter is a perfect example of this. Everyone agrees that Twitter made some bad architectural decisions that caused the frequent appearance of the “fail whale”. But eventually, they got enough funding via combination of the VC funding and later the public market to rearchitect their system.

Re:Software Architecture Guide by legulere on Saturday August 24, 2019 @10:47AM (#20787396)
System Software isn’t all that different from enterprise software. The business part is simply of technical nature. The biggest difference usually is that the software developers don’t have a deep understanding of the business rules.
Re:Software Architecture Guide by scarface74 on Saturday August 24, 2019 @10:56AM (#20787442)
I’ve had to maintain a bespoke compiler/IDE/VM for Windows Mobile/CE before and have spent two decades writing business software and architecting around the entire stack from networks, to databases, to web servers, load balancers, monitoring tools etc. I’ve also written SOWs, Done project plans, led teams (hated every minute of it). I’ve seen both sides.

The types of optimizations and thought processes around enterprise software is completely different than the optimizations around compilers.

The “entire stack” with enterprise software is much different than the “entire stack” with the compiler. I haven’t had a need to look at the assembly created from my compiler as a business software developer since around 2002.

For context, my first hobby programming was in the 80s optimizing 65C02 programs by using zero page memory access to eke a little more speed out of the 1Mhz processor and trying to use branch statements instead of JMP statements because they were faster.

Re:Software Architecture Guide by legulere on Saturday August 24, 2019 @11:42AM (#20787769)
Of course you’re not looking at generated assembly anymore because that is the business value of a compiler. The biggest difference now is that you’re probably not as big an expert in the enterprise topic as you were about generating assembly.
Re:Software Architecture Guide by scarface74 on Saturday August 24, 2019 @11:50AM (#20787818)
These days - no. I’m nowhere near the business expert in the healthcare industry where I now work as I was in the ins and outs of assembly. That’s not my role. I’m a software developer by title, but I would consider myself an “expert” in both the software architecture and the AWS infrastructure of our (smallish) company.

When I was working for the company where I did have to maintain the compiler/IDE/VM after they forced their founder out. I also had to know the complete business needs of the client that kept us afloat because as they laid off people, I had to interact with the customer and write the SOWs. I saw both sides. The skillset I needed to implement the business side was completely different than the skillset I had to have to maintain the compiler stack.

Luckily I was mature enough (and an MBA dropout) to understand the business end and enough of a geek to understand low level computer concepts and could read assembly.

Re:Software Architecture Guide by EdwardDiego on Saturday August 24, 2019 @11:02AM (#20787486)
https://github.com/unclebob might be a good place for you to start. Fitnesse is probably the biggest one on there.

You can't really hold the fact that most of his working life has been for closed source orgs against him.

Re:Software Architecture Guide by streetcat1 on Saturday August 24, 2019 @09:34AM (#20787039)
So first, you should read their books for concrete code. Martin books, for example "refactoring" or "Enterprise architecture" actually have good code examples.

The same apply for kent beck early work on smalltalk (you can look at Junit) or his early work on the HotDraw editor (which was the source of many of the pattern in the Design Pattern book). Kent was one of the first adopter of smalltalk at the early 80 is techtronix, together with ward cunnighum (the inventor of wiki) and rebbeca swift brooks.

Robert Martin work is mainly driven by his consulting practice and tend to change based on the on going trend. At the 2000's he was working with Grady Booch, preaching UML and design before coding. Later he dropped that in favour of agile and TDD.

You do not see case studies since the industry simply does not really care. It is very trend prone.

Most of the adopted advances were actually "hacks". For example C++ was invented out of necessity to create "C with objects" by a single person in AT&T labs. Unix was hacked in 3 weeks. Java was invented to program toasters, etc.

Any attempt to develop tools and technique based on real research saw not adaptation - for example Ada at the 80s, UML at the 90's and early 2000, functional programming, TLA+ , etc.

Re:Software Architecture Guide by geofft on Saturday August 24, 2019 @09:44AM (#20787089)
The question was about "research" in the meaning of quantitative scientific evidence that these proposed techniques make software delivery better in real-world conditions, not "research" in the sense of new ideas from academics. As a professional, I don't want UML because I've seen no evidence it actually helps. Show me relevant studies that it does and I will absolutely change my mind.

(And there are plenty of things that industry does respect that came from academic research in the sense of new ideas. Rust, stereotypically the language of the trend-prone, draws on everything from Ada to functional programming. But unlike those it actually and demonstrably meets the needs of general-purpose programming in industry.)

Re:Software Architecture Guide by streetcat1 on Saturday August 24, 2019 @10:18AM (#20787252)
Sure. So UML is based on two main research areas - UML class diagram is based on rational algebra theory. A correct UML class diagram should follow the same normalization roles as defined by Codd seminal paper - "A Relational Model of Data for Large Shared Data Banks".

You can ask, how does Prof Codd knows that this is is the correct way to describe and implement data. Well this follow directly from set theory. Again, how do we know that set theory works - well here we are the level of axioms of the set algebra.

BTW, this Codd work was also "hacked" again by system R research which invented SQL.

The other part of UML is based on finite state machine, which originated by Turning, and later refined by the work of David Harel on state charts. Again, those are theoretical CS tools. However, the work of Harel on state charts, was originated from the work on the Israel first aircarft (to be cancelled later), where he needed to define the the missile system.

If you are interested on how those tool originated and later combined see the work of David Hay - "UML-Data-Modeling-Reconciliation"

Those tools are useful in scale. For example, system with 3000 different use cases. Or for example you have 200 - 500 classes, each is a state machine.

Again, since there is no software professional standard (not software engineering bar exam), you can or cannot use anything.

Re:Software Architecture Guide by geofft on Saturday August 24, 2019 @10:25AM (#20787296)
That's, again, not what I'm asking. I'm not asking for the theoretical underpinnings of why this is a good way to represent 200-500 classes. I'm asking why, if I and two coworkers need to code up 200-500 classes by next month to meet a promise to a customer, spending time on UML will make the customer happier. I have a programming language that itself has strong theoretical underpinnings. I also have a pretty good hunch that in about two weeks there will be a last-minute requirement that changes the structure of the data model, and in about three weeks there will be a production outage of another system that distracts my attention.

Will UML help me deliver software with changing requirements faster and more accurately? How does it compare to other options in my toolbox, like using a less verbose language that doesn't have real OO (which in my experience is often the right choice) and because of its conciseness is easier to make major changes to? How do I tie the UML object structure to my programming language, and why is it better than using a strongly- and richly-typed language in the first place? Why do I see many successful software projects that as far as I can tell don't use UML?

Re:Software Architecture Guide by streetcat1 on Saturday August 24, 2019 @10:39AM (#20787362)
First, I must say that the inventors of UML saw it as the last layer. The grand vision was a complete code generation from UML diagrams. And this was the overall grand vision that drove OO in general. I think that this is was happening now with the "low code" startups.

The whole idea is to separate the global decisions (which are hard to change) - e.g. architecture, what classes, what each class do, from the local one (e.g. which data structure to use). So you would use UML for the global decisions, and than make programming the classes almost mechanical.

Of course the customer do not see that. The customer see the user interface, and if the overall use cases are implemented correctly. Hence using those tool might help or not.

Lets take architecture for example, why do people use an architect ?. Why does architect needs diagrams? Will the owner care of the architect use diagrams?

Re:Software Architecture Guide by geofft on Saturday August 24, 2019 @10:53AM (#20787426)
Again, I am not asking how to use UML, or why the inventors of UML designed it in a certain way, or why it sounds like it could be a good idea, or whether there are other systems like UML that are good ideas (I can just use those systems directly then!).

I am asking what evidence there is that UML helps me deliver better products more efficiently. Are there successful software projects that do this complete code generation thing (and how do they compare to directly writing real code in more efficient programming languages with rich typesystems)? Are there development efforts where giving up and deciding that certain architectural elements are hard to change has been the right approach (in my experience it generally never is)? What are their names? Do they have experience reports? Are there numbers?

I am looking for, at the least, a specific name like "The Chrysler Comprehensive Compensation System took these approaches to development." (But hopefully not a massive and expensive failure like C3.)

Re:Software Architecture Guide by streetcat1 on Saturday August 24, 2019 @11:17AM (#20787592)
So you would not find any. You would need to judge those tools based on your specific use cases.

Even if you find such and such project did X and got Y, the sample size is too small.

The issue with software is that each project is different, and hence we cannot generalise from any given project.

Re:Software Architecture Guide by Jare on Saturday August 24, 2019 @06:47PM (#20790181)
> The whole idea is to separate the global decisions (which are hard to change) - e.g. architecture, what classes, what each class do, from the local one (e.g. which data structure to use)

And this would be one of the reasons why UML is objectively a terrible idea for developing great software efficiently. (I assume it is ok for developing poor software at great cost)

Re:Software Architecture Guide by netsensei on Saturday August 24, 2019 @12:01PM (#20787888)
I think the answer to your question would be: it depends on external constraints. How much time do you have? What is the scope of the project? Size of your team? Number of stakeholders? Budget? Etc.

In my mind, the crux of the entire exercise is trying to translate a complex murky real world problem domain into a mental model that can be expressed via a shared language describing properties, aspects, processes, concepts, etc.

The challenge is getting that translation done in a timely, secure, efficient, performant, maintainable manner.

Quantifying that translation into a comparable measure? That's where you'll find your in the same boat with many other project managers who make guestimates and hope that everything pans out in the end.

Trying to see it as a purely computational problem will confront you with that other evergreen: the P equals NP problem.

My point is that trying to find a hard model that answers your particular question pertaining to UML is very hard since there is no neat general foundational model here that allows you to compute hard, quantifiable predictions about the usefulness of a given tool.

I suppose it's like with so many trades. It depends on the experience of the expert to assess what strategy is best. It's okay to question that experience in hopes of avoiding all too human biases that cloud our view from what we are actually trying to solve. Even so, questioning any and all statements because you can't boil it down to hard data equally might threaten to narrows one's view.

If your experience tells you that UML works for you as a tool, then, by all means, stick to UML. Even when there is more then one approach to a solution. If you use pen and paper to quickly draw stuff, well, that's equally valid if that works for you. I just wouldn't dismiss an approach because its usefulness can't be measured up front. Reality is far too complex and sometimes there's simply no point in dwelling too much upon all of this in the first place.

Re:Software Architecture Guide by ori_b on Saturday August 24, 2019 @12:43PM (#20788145)
> I think the answer to your question would be

Yes, that's the problem. The pixels spent here are based on hypothesis, not experiments. You think one thing, I think something else, and not a joule of effort is spent measuring.

Re:Software Architecture Guide by netsensei on Saturday August 24, 2019 @01:13PM (#20788352)
Ah yes, that would be Karl Popper's concept of Falsifiability of a hypothesis.

https://en.m.wikipedia.org/wiki/Falsifiability

That's what we are debating here: is this claim that use of UML is always markedly better when modelling any problem domain is true as observed through a sufficient number of data points?

I'm poking holes in that hypothesis because there's always n + 1 conceivable use case where the opposite is true. And I'm basing myself on set theory and computational algebra.

The crux is 'sufficient' because all use cases that could be moddeled with UML being equal, prove to me that there is a finite amount of use cases. Hard answer: you can't.

Moreover, there is no way you can prove to me that each and any use case is solvable with UML in an efficient way without actually solving said use case.

Check Hilbert's Grand Hotel paradox. Perfectly applicable to this question. https://en.m.wikipedia.org/wiki/Hilbert%27s_paradox_of_the_G...

Re:Software Architecture Guide by ori_b on Saturday August 24, 2019 @03:20PM (#20789127)
> I'm poking holes in that hypothesis because there's always n + 1 conceivable use case where the opposite is true.

And it's conceivable that the sun will not rise tomorrow, or that the law of gravity will pass an inflection point and reverse itself. Also based on "set theory and computational algebra", and the impossibly of testing each possibly.

What's your plan for tomorrow, and does it depend on gravity?

Re:Software Architecture Guide by netsensei on Saturday August 24, 2019 @03:35PM (#20789218)
I'll take logical fallacies and rethorical devices for 200, Alex.
Re:Software Architecture Guide by ori_b on Saturday August 24, 2019 @07:34PM (#20790366)
And what logical fallacy was Hume committing when he explored the limits of inductive reasoning with that example, precisely?
Re:Software Architecture Guide by traderjane on Saturday August 24, 2019 @10:28AM (#20787309)
geoftt isn’t asking whether metaphorical TLA+ is academically fruitful. He’s asking if Amazons et al. have _continued_ to use it, and whether there’s some volume of evidence attesting to this.
Re:Software Architecture Guide by streetcat1 on Saturday August 24, 2019 @10:59AM (#20787460)
Sure. So if amazon did not continue to use it. Does TLA+ suddenly become not useful?

My point here is that those tools are theoretical CS tools based on the underlying nature of computers - which are a discrete digital state machine.

Why do you even use high level languages, why not just program in assembler?

Re:Software Architecture Guide by traderjane on Saturday August 24, 2019 @11:01AM (#20787481)
If the Amazons of the world tried and dropped TLA+, that is signal to people who were on edge of technological adoption. If we received data on its efficacy during its trials, we'd be even more informed, as people are interested in more than the internal consistency of a system.

Right now some people have a theory that Uncle Bob is noise in the sea of architectural opinion, and we can't move forward because we don't have enough data. The call for more data is welcome by me.

Re:Software Architecture Guide by spenczar5 on Saturday August 24, 2019 @06:23PM (#20790093)
Amazon continues to use TLA+. I work there. It's not a tool needed every day, and it's not needed by everyone (really, not by almost _anyone_). But sometimes it's the best tool for the job.

You won't be getting much data on this because companies are secretive.

The way it's used is to ensure correctness of distributed systems. A classic example might be ensuring that a model for backing up customer data is unable to get into indeterminate state. It's important to get the model right. But the model isn't code - TLA is not a programming language, it's a tool for modeling state machines; yes, of course, one needs to also write software to deliver value.

Re:Software Architecture Guide by geofft on Saturday August 24, 2019 @11:28AM (#20787676)
> Sure. So if amazon did not continue to use it. Does TLA+ suddenly become not useful?

Yes. (Or more precisely, it never was useful.)

Zero part of my business requirements involve anything about discrete digital state machines. If I could deliver business value more efficiently with pen and paper, I would. If I could deliver business value more efficiently with Excel or a shell one-liner, I would (and do). If I could deliver business value more efficiently by singing my harmony into the Music of the Ainur, I would. I write software because it's the tool we've found that is most efficient at delivering business value, not because the software itself has value.

So I use high-level languages because they are demonstrably more efficient. (And I frequently write sloppy code in Python or awk because it helps me answer business-relevant questions like "why is the site slow" quickly, without demanding I be rigorous about my software engineering in the process of answering the question.) don't use UML because I have yet to see evidence that it will help me deliver business value more effectively.

(I do also enjoy writing software as a practice, and I do that on weekends. That's the time to make code for code's sake.)

Re:Software Architecture Guide by jhayward on Saturday August 24, 2019 @01:09PM (#20788327)
I would be interested in a list of the tools you use daily and your list of research publications that prove that those specific tools improve productivity, reliability, or whatever metric you have named in selecting them.
Re:Software Architecture Guide by geofft on Saturday August 24, 2019 @02:33PM (#20788853)
That's a fair question, and it is absolutely fair and correct for you to imply that I don't have any.

However, the comment above (which was not me) said "studies cited, case studies presented or concrete examples," not just studies. I was taking objection to the claim that merely coming out of academia counts as a "study" in this sense. I don't need an experimental study (though I would love to have one), a body of anecdotes of successful uses of a tool is sufficient.

I can name countless case studies, concrete examples, and anecdotes of people using the programming languages and software environments I use successfully. There is a large body of evidence that, say, Linux works fine, whether or not a paper says as much. (And, in particular, there is a sizable body of anecdotal evidence that OpenStack does not work fine, and I've been pushing my team to find a migration strategy out of OpenStack for this exact reason.)

Also, I think the burden of proof is on someone advocating for change. When I am delivering software successfully, and someone else comes in and says "You need to be taking this approach," I think it's fair for me to say "Why?", and that that's very different from staring blankly at bash and saying "Why?" and refusing to type anything.

And finally I would actually be delighted to have real metrics for my tools. I do want to know if, say, enforcing style checks via pre-commit hooks makes development velocity faster and avoids annoying developers! It certainly seems like it would but it sounds like an easy enough thing to test, and I wish we as an industry (and more specifically people in either academia or industry who see their work as advocating for better software development practices, not developing software) would spend the time to test it.

Re:Software Architecture Guide by chrisseaton on Saturday August 24, 2019 @09:46AM (#20787100)
I can see 'before' and 'after' code in their books.

How do I know the 'after' code is any better in practice?

Re:Software Architecture Guide by streetcat1 on Saturday August 24, 2019 @10:29AM (#20787315)
I think that the main issue here is to define what is better. For example. If I am creating a new startup and have money for only two months - "better" in this case is rushed out code (whatever that means). I.e. the software have no future in any case, if it is not delivered on time.

However, if I develop radiology machine. Better in this case is very exact state machine description, otherwise I can kill patients.

In those author specific case, we are talking about business system in the enterprise. The "better" here is how fast and easy I can change those system, since I get new requirements every week.

Re:Software Architecture Guide by rhizome31 on Saturday August 24, 2019 @10:13AM (#20787219)
You use your best judgement based on the context, as you usually do when developing software. The only thing you've gained by applying a documented pattern is a bit of help to write your commit message :-)
Re:Software Architecture Guide by chrisseaton on Saturday August 24, 2019 @10:14AM (#20787225)
> You use your best judgement based on the context

This isn't how science is supposed to work.

I work on programming language performance - when I say something could be implemented in a faster way, people don't just say 'yeah using my best judgement that'll be faster', they ask me to prove it. Otherwise I'm laughed off the stage. Why is it different for these people?

Re:Software Architecture Guide by rhizome31 on Saturday August 24, 2019 @10:29AM (#20787310)
I might be wrong, but did Fowler pretend to follow the scientific method?

I work on developing business web applications and Fowler's work has been very helpful to me, especially when I was a beginner. I still sometimes refer to PoEAA when picking up a framework that implements a pattern described there. However I'd be surprised if Fowler had anything useful to teach to someone working in your field.

Re:Software Architecture Guide by chrisseaton on Saturday August 24, 2019 @10:32AM (#20787332)
> did Fowler pretend to follow the scientific method

His company calls him a 'scientist' - a 'chief scientist' no less - https://www.thoughtworks.com/profiles/martin-fowler and presumably bills accordingly.

Re:Software Architecture Guide by rhizome31 on Saturday August 24, 2019 @10:59AM (#20787465)
Oh I see, that looks like marketing BS indeed. Not cool that he agreed with this job title. But to be fair, these days you also see a lot of 'data scientists' whose 'scientific' work consists in putting some statistics together and plot them with Python.

Anyway what I was saying was based on reading his books, which again I think have real-world value for some areas of software development. As I said in another comment to me his work consists in collecting and documenting existing practices. I don't think he pretends to teach magic recipes. Each technique is usually presented with potential drawbacks and context where it might apply. That's why I was telling you to use your judgement because these techniques are not supposed to be one-size-fit-all silver bullets. The point is more to identify and describe recurring patterns so that we can communicate more clearly, hence my light-hearted joke about how it helps writing your commit messages.

I agree that it would be great to have strong scientific studies showing that such practice works better than such other practice and I bet Fowler would agree too. In fact I watched a talk recently where he advertised a book called "Accelerate" (not by himself) where apparently the authors attempted to evaluate the impact of practices associated with DevOps based on statistical data.

The thing is it's much easier to demonstrate or measure the performance of an algorithm than the impact of a code change on the whole life-cycle of a software project. So we resort to experience and intuition not because we don't value the scientific method, but because the scientific method is too difficult to apply in this context.

Re:Software Architecture Guide by blub on Sunday August 25, 2019 @03:28AM (#20791833)
I read parts of the refactoring book (1st edition) when it came out to see what kind of refactorings the author mentions. Since I didn't remember much from it, I decided this year to take a look at the 2nd edition, which to my amusement is written in JavaScript. After reading the example refactoring at the beginning I abandoned the book, because it champions the "code as prose" idea, which is rightfully contradicted by Ousterhout in his "A Philosophy of Software Design".

"Enterprise architecture" was not relevant for me, I wasn't doing any EA when I started reading it and quickly lost interest. The only potentially engaging topic was concurrency, but there are much better books available about that topic.

"Pattern-Oriented Software Architecture" (I am only familiar with vol 1 & 2) has wider applicability and is more compelling in my opinion. And they have references and examples. For instance the Pipes & Filters architecture patterns gives UNIX [Bac86], CMS Pipelines [HRV95] and LASSPTools [Set95] as examples and references "The Pipeline Design Pattern" [VBT95].

I do see case studies and references, but not from these authors I mentioned.

Re:Software Architecture Guide by manojlds on Saturday August 24, 2019 @10:33AM (#20787335)
I used to work at ThoughtWorks and Martin Fowler's inputs are based on his interactions with many many ThoughtWorks' project teams.

When he visited my team for one of those learnings discussions, I was amazed with the way he was able to absorb and present the same things we were learning in a much different and easier to understand manner.

Re:Software Architecture Guide by millerm on Saturday August 24, 2019 @09:04AM (#20786908)
I have had this thought for many years. Where is all the perfectly designed, bug free, maintenance-bliss, fully documented, fully tested, future-proofed code located so we can all marvel at its glory?
Re:Software Architecture Guide by mirceal on Saturday August 24, 2019 @09:19AM (#20786959)
> All code is bad. Every programmer occasionally, when nobody’s home, turns off the lights, pours a glass of scotch, puts on some light German electronica, and opens up a file on their computer. It’s a different file for every programmer. Sometimes they wrote it, sometimes they found it and knew they had to save it. They read over the lines, and weep at their beauty, then the tears turn bitter as they remember the rest of the files and the inevitable collapse of all that is good and true in the world.

from: https://www.stilldrinking.org/programming-sucks

Re:Software Architecture Guide by michael_j_ward on Saturday August 24, 2019 @10:16AM (#20787239)
I haven't gone through this yet- but my understanding is that there are some examples of this here "The Architecture of Open Source Applications" [1].

[1] http://aosabook.org/en/index.html

Re:Software Architecture Guide by mobjack on Saturday August 24, 2019 @10:54AM (#20787431)
You are comparing the perfect against the good while Fowler is likely comparing the good against the bad.

Taking an extra week or two to clean up bad design decisions early in a project can pay dividends in the future.

Spending months extra trying to do the perfect architecture is harder to justify.

Re:Software Architecture Guide by pjmorris on Saturday August 24, 2019 @10:21AM (#20787264)
To take the other side of this coin, where is the evidence that evidence makes a difference? At least, where is the evidence that evidence is what convinces a software developer or manager to change something about their process?

There are entire conferences [0,1] where hundreds of researchers present peer-reviewed studies, case studies, and concrete examples, evidence for various software engineering claims. Thousands of papers have been published at these conferences over time. Usually when those papers are linked here, they don't get much attention, e.g. [2], [3], [4].

As a rule, industry doesn't pay attention to them, except to hire the grad students out of academia. At these conferences, they spend a lot of time discussing how to get more industry participation. But the things they try haven't really worked so far.

To go to all the trouble of generating peer-reviewed science only to have it ignored may not be the best trade available for how Fowler, Beck, et al spend their time. There are doubts about whether it's the best way for academics to spend their time.

[0] http://www.icse-conferences.org/

[1] https://www.esec-fse.org/

[2] https://news.ycombinator.com/item?id=20064211

[3] https://news.ycombinator.com/item?id=20575415

[4] https://news.ycombinator.com/item?id=19714085

Re:Software Architecture Guide by Chris_Newton on Saturday August 24, 2019 @11:16AM (#20787586)
There’s nothing wrong with just suggesting reasonable ideas that might be useful. If everything needs to have a solid evidence base or rigorous supporting arguments before we talk about it, it becomes too easy to shut discussion down prematurely without ever discovering whether an idea does have value for someone, particularly in an industry like ours where much of what we do is hard to measure objectively.

It’s helpful to be clear about whether an idea being presented is just someone’s personal thoughts or anecdotal experience or whether it does have a stronger foundation. If something is presented as a firm recommendation of good practice then it’s fair to expect the latter. But it’s also dangerous if we reflexively disregard any idea that doesn’t already have robust evidence behind it.

Re:Software Architecture Guide by jmartinpetersen on Saturday August 24, 2019 @09:55AM (#20787138)
Robert Martin seems to cherry pick stats and trends and whatever that fits his world view. In Clean Architecture he cites a study with N=1 as proof TDD works. I have no hope for him.
Re:Software Architecture Guide by sooheon on Saturday August 24, 2019 @01:10PM (#20788335)
I'm genuinely curious what the stats backed world views you hold are.
Re:Software Architecture Guide by billfruit on Saturday August 24, 2019 @10:15AM (#20787228)
I generally dislike building arguments on top of statistics, rather than on theory which to my eye almost always looks more convincing. With statistics it is as if the burden is passed on to the reader to check the veracity and validity of the said numbers, where as if it is an argument constructed out of theory, the whole of it is present there for the reader to judge intrinsically on its own merits.
Re:Software Architecture Guide by gunnihinn on Saturday August 24, 2019 @10:23AM (#20787287)
That restricts you to mathematics, logic or philosophy. Engineering, or the rest of the world, operates _at best_ on statistics.
Re:Software Architecture Guide by billfruit on Saturday August 24, 2019 @10:31AM (#20787326)
Programming in general and Software correctness does not depend upon statistical arguments, so perhaps such a view could be taken for software engineering too.

Also even considering aesthetics and elegance, I find use of statistics to power a reasoning, ungainly, compared with other means of arguing the same thing.

Re:Software Architecture Guide by crimsonalucard on Saturday August 24, 2019 @12:50PM (#20788195)
You're right. Why are you voted down. Programming doesn't need to be based on statistics it's largely a deterministic system amenable to proof and logic.

This application of "engineering" onto programming is largely the result of people not truly understanding the system they are dealing with. The system isn't some sub-sonic jet that will be subject to unknown turbulence, it's just axioms and rules.

Re:Software Architecture Guide by meowface on Saturday August 24, 2019 @04:35PM (#20789550)
Ideally you'd have some of both.
Re:Software Architecture Guide by randomcarbloke on Saturday August 24, 2019 @09:08AM (#20786916)
Thank you.

If I want to design excellent architecture I will crack open SICP and transpose it to the fabric of modern computing.

I also take issue with much of what Fowler et al say, but that's another conversation.

Re:Software Architecture Guide by charlieflowers on Saturday August 24, 2019 @05:43PM (#20789886)
I think one of the notions behind the Fowler criticism is something like this: "Early on, a bunch of people got famous as programming thought leaders, but later we all found out there were much deeper, smarter thinkers who didn't get all the buzz."

So the "early" ones might be Fowler, Uncle Bob, Beck, Grady Booch, Evans (DDD), etc.

And the "deeper" ones would be the authors of SICP, or Peter Norvig, or Chris Lattimer.

I can see where this sentiment is coming from, and there's no doubt truth to it.

I'd say SICP is _without a doubt_ deeper and more insightful than most or maybe all of what Fowler has written. From that standpoint, SICP should be more famous than Fowler, but it doesn't seem to be the case. It definitely was not the case 10 years ago.

Still, let's not throw the baby out with the bathwater. Fowler's writing has explained some difficult concepts very clearly. And he chooses topics wisely (but not perfectly in hindsight).

So yes, there are two "tiers" of "experts" about building software. Clearly there is a "tier 1" that is better, more proven, deeper, than Fowler/Martin/et al.

That puts Fowler and some others at tier 2 (or lower, all subjective of course).

That doesn't mean tier 2 is entirely worthless though. IMO far from it.

Re:Software Architecture Guide by notus on Saturday August 24, 2019 @10:26AM (#20787300)
SICP isn't going to teach you excellent architecture for large systems, it's going to teach you excellent architecture for small programs.
Re:Software Architecture Guide by crimsonalucard on Saturday August 24, 2019 @01:00PM (#20788265)
The design of small programs is isomorphic to the design of large programs at all levels.

You're just referring to real world caveats and details, but the overall concepts taught in SICP apply to all layers of programming from assembly to the architectural level.

Small programs:

   Q =  A -> B
   W =  B -> C
   R =  C -> D
   T =  D -> E
Large Programs

   L = W . Q
   K = T . R
Architecture

   M = L . K

The above description works at every layer.

SICP deals with abstraction and architecture at all layers of programming. It does not talk about real world idiosyncrasies of the system. For example it won't talk about whether the assembly instructions of the small program being executed is efficient and it won't talk about network latency.

Re:Software Architecture Guide by dwaltrip on Saturday August 24, 2019 @01:35PM (#20788481)
> The design of small programs is isomorphic to the design of large programs at all levels

Good software design is not scale invariant. Significant scale deltas change things in fundamental ways. Designs that work and are maintainable, from a human perspective, at one scale often will fail at a larger scale.

Some designs scale better than others, this is true. But no design scales infinitely, and the vast majority of designs would start performing poorly at scales that are still relevant to human concerns

This shouldn't be surprising. Most things (nearly everything?) that we care about are not scale invariant.

Re:Software Architecture Guide by AnimalMuppet on Saturday August 24, 2019 @01:48PM (#20788548)
I seem to recall something like the "rule of 10" - for every factor of 10 in scale, a new set of problems dominates. And, from experience, there's some truth to it.
Re:Software Architecture Guide by crimsonalucard on Saturday August 24, 2019 @03:14PM (#20789089)
The concept of abstraction and process IS scale invariant.

What is not scale invariant is the real world details like I mentioned above.

1. What assembly language instructions a language compiles to

2. Network latency / topology / etc..

Scheme or other programming languages hides real world detail #1 so we don't have to deal with it (as much).

While there is a lot of work done for #2. we currently do not have as good abstractions for #2. as we do for #1. Therefore usually a programmer must exit the abstraction and deal with the real world issues. Hence the confusion. You usually don't have to deal with assembly language or even know about it because a good abstraction exists but you do have to deal with "network architecture" and know about it because no good abstraction exists (yet). This is what is actually going on. You are dealing with real world details because those details change. But the concepts of abstraction that SICP talks about remain invariant.

That being said my statement about SICP is correct. My diagram that illustrates abstraction and design from a high level point of view the way SICP does is correct. Even with real world details in mind there is nothing about my diagram that is incorrect. The diagram I drew IS scale invariant. SICP teaches such concepts and is thus in itself a good book that is also "scale invariant."

If you feel there is something about that diagram that is incorrect please point it out. If you can find a flaw without going into lower level details like network topology or assembly language then you can prove my statement definitely incorrect. But as such my statement is correct and the diagram is still correct.

The ideal is to come up with a language that can compile down into both applications and a network of computers with minimal leakage. The concept of abstraction that SICP introduces remains applicable to all layers even if we currently lack the technology to stay within the abstraction.

I think what's going on is you're just mistaken. You think that abstraction is not scale invariant simply because of the way we deal small programs and large programs is different. Actually it's the same, we just don't currently have the tech to hide the details for large architectures like we do for small architectures... work is being done on this front though... Terraform, docker, cloud computing all these things move it in the right direction but we don't yet have an abstraction over this area like we do for single applications.

This does not mean it's impossible. Who's to say I can't write an entire web app in one language and it compiles down to server app, networked physical servers, cache and database automatically? This is a very viable architecture. Why not let a compiler tune network topology like it tunes assembly instructions? Of course, it's not viable yet, but definitely in the realm of future possibility.

Re:Software Architecture Guide by hliyan on Saturday August 24, 2019 @09:45AM (#20787094)
I agree. These theories should either be based on empirical evidence, simulations or built up from first principles in a rigorous manner. Otherwise they are about as concrete as philosophical treatises. Which is to say, not very concrete at all.
Re:Software Architecture Guide by mirceal on Saturday August 24, 2019 @09:13AM (#20786941)
all these people have some experience in the field and they did put some things out that gave names/spread practices in our industry. is that enough to take everything they spew as the truth? far from it.

you should probably take a look and filter it through your experience.

Re:Software Architecture Guide by notus on Saturday August 24, 2019 @10:20AM (#20787262)
They are speaking primarily from experience and I think they are pretty transparent about that. We're not in a field where many studies even exist on these types of processes. It is up to you as a developer to try them out and assess their merit.
Re:Software Architecture Guide by tootie on Saturday August 24, 2019 @10:44AM (#20787386)
It's good point, but most of what I read on his blog feels like a distillation of best practices that I've seen mature in the industry. It all rings true and matches my experience of what works best. But can I prove it? No, not really.
Re:Software Architecture Guide by hacker_9 on Saturday August 24, 2019 @09:59AM (#20787163)
Agree. They talk the talk but don't walk the walk.
Re:Software Architecture Guide by crimsonalucard on Saturday August 24, 2019 @12:02PM (#20787892)
I agree with you. There's another angle to look at it though other then "evidence based" or scientific.

In the field of engineering a large portion of it has to do testing to verify systems that are unpredictable or not modelled by theory. For example: building a plane involves testing it a wind tunnel.

The thing with computer systems is that computers are deterministic math machines. You don't need to test a computer system because it's output is 100% consistent and bounded by theory (most of the time). Thus you can use axioms, theorems and proofs to build your systems. This is not an "evidence based" or scientific approach to architecture this is within the realm of math and logic.

Unfortunately a large part of software is still an art and we still treat a huge portion of it as if it was a physical unpredictable system with unit testing. Theory is a bit underdeveloped in computer systems. Where it is underdeveloped is: any engineering problem that sports the term "design" is a problem space where no theoretical basis exists (or is known to exists by the user of the term). For example the "design" of "system architecture"

Amazingly such a theory sort of actually exists in Computer Architecture but is relatively unknown. It's newish, not concrete and it's not fully fleshed out in the context of computer system design. It's called Category Theory and it's mind bending because it turns this vague concept of "design", "architecture", "abstraction", "composition" and "process" into a language that is formal and well understood.

Though I don't think it's part of category theory yet, and I'm still a bit of beginner, but a formal language for system architecture at every layer allows for a different way of solving problems. Instead of "designing" solutions adhoc, we could be able to "derive" solutions. Given a problem you would be "deriving" a system architecture as a solution rather than designing one.

This is what I see missing from every single one of Martin Fowlers lectures. He treats this stuff like it's 100% art, and while it largely is, the overall goal of architecture should be an application of Theory, Science and Art.

Theory is priority, it says definitive things about a system, Science is secondary as it gives quantitative probabilities about things not described by theory, art is tertiary as whenever you employ art or your "design" chops you are admitting that you are operating in an area where no theory or science exists (yet). Martin Fowler treats architecture as if it was 100% in the domain of art, when the reality is it's actually the amalgamation of all three concepts.

Re:Software Architecture Guide by sooheon on Saturday August 24, 2019 @01:22PM (#20788408)
> He treats this stuff like it's 100% art

Is this true? I'm just picturing in my mind juxtaposing Fowler's writings and I dunno, an art critic's.

Category theory is cool and important, but to insinuate that all design problems can be "derived" by it sounds like a mathematician declaring that the work of all civil engineers as just "applied math".

Re:Software Architecture Guide by crimsonalucard on Saturday August 24, 2019 @03:36PM (#20789227)
>Is this true? I'm just picturing in my mind juxtaposing Fowler's writings and I dunno, an art critic's.

He does. The language is different. He uses technical buzz words from the tech industry rather then the jargon from the art industry.

A paper with science will have data and statistics. A paper with logic will have formal descriptions, axioms and theorems. Martin Fowlers papers contain little of any of these things.

>Category theory is cool and important, but to insinuate that all design problems can be "derived" by it sounds like a mathematician declaring that the work of all civil engineers as just "applied math".

I never said that all solutions can be derived from category theory, I meant that the current state of category theory hints at a possibility that this could be possible in the future.

Civil engineers do a lot of similar things to what a proper Software architect should do. They use science, theory and art to materialize their ideas. I'm saying category theory COULD be pointing at way of making that "art" section smaller or eliminating it all together. Though total elimination is IMO unlikely I think making it much smaller is very viable. This process is even more amenable to computing systems as the solution space is much smaller. For computing systems, I think it's more reasonable to say that it may be possible in the future for "art" to be completely eliminated from this field, still unlikely imo, but definitely more likely then other types of engineering.

Re:Software Architecture Guide by sooheon on Saturday August 24, 2019 @07:17PM (#20790301)
> I never said that all solutions can be derived from category theory

But I think what you're saying is that they should. I don't understand how this is possible or desirable.

However formally described the internals of a system are, it must interact with the world, and designing those boundaries depends entirely on what you want your system to do, which is an art. Just like you can't get an ought from an is, you can't derive a solution to "will this satisfy the user" or "will this be done in time for market" from correctness proofs of code.

You might be referring purely to the computational soundness of a system, but that is to system design as the structural soundness of concrete is to the architecture of a bridge.

Re:Software Architecture Guide by crimsonalucard on Saturday August 24, 2019 @07:35PM (#20790370)
>But I think what you're saying is that they should. I don't understand how this is possible or desirable.

Definitely not possible (yet) but this may be possible in the future. Whether it should be or not is not something I talked about. But since you brought it up, my opinion is that if there exists a function that can definitively derive the best possible system for a problem given a set of requirements then YES absolutely I would use it rather then design a system myself.

Whenever we design a system we have no idea whether that system is the "best" possible solution. Better to derive the best then to "design" or aka "estimate" a solution.

Anyway this stuff is mostly speculative not entirely worth debating over speculation. If it never happens what's the point?

>However formally described the internals of a system are, it must interact with the world, and designing those boundaries depends entirely on what you want your system to do, which is an art.

This is true. Designing the specifications of a system is largely an art because you could be trying to satisfy a customer who needs and wants are unknown and varying. This is not what I am referring too.

I am talking about implementing a solution to MEET those specifications. This part unfortunately is also largely an art. I'm speculating about a function that can potentially FIND the BEST solution to meet a specification and therefore eliminating the artistic portion of this part of the problem, not the specification part.

>You might be referring purely to the computational soundness of a system, but that is to system design as the structural soundness of concrete is to the architecture of a bridge.

The architecture of a bridge is different from software architecture. I am talking about the "architecture" of a system to meet the high level needs of a specification.

The product designer translates the world of vagueness and opinion into a set of exact specifications.

The software architect builds a system to meet those specification or potentially changing specification. I am referring to the process being implemented by the software guy, not the product designer.

The bridge architect usually is a hybrid role he does a bit of translating requirements and implementation as well. It's less clear cut.

To fit your analogy lets use a designer instead. The designer gives me a shape he wants the bridge to be in, and how many people are going to walk across the bridge per day. The civil engineer builds the bridge to meet that specification using the cheapest materials possible. The civil engineer is not concerned with whether or not the shape of the bridge is pleasing to the people who walk over the bridge. That part is the responsibility of the designer.

Think about it, even for systems implemented by the software architect today, even when the architect has knowledge about the EXACT specifications needed to be fulfilled by the system he is largely doing a lot of design work. He has no way of verifying whether his design is the best way to do things.

Re:Software Architecture Guide by fogetti on Saturday August 24, 2019 @10:21AM (#20787270)
I don't really understand your comment. Shows your ignorance to be honest: have you ever heard of active records? Or optimistic locking? Because these are VERY tangible software constructs and Martin Fowler for example wrote a whole book about them.
Re:Software Architecture Guide by nafey on Saturday August 24, 2019 @10:26AM (#20787303)
The GP was about software architecture styles proposed/endorsed by Fowler et al and not their general contribution to software. Keeping this in mind its fair to ask for data/studies backing their claims.
Re:Software Architecture Guide by afpx on Saturday August 24, 2019 @11:44AM (#20787792)
The evidence is out there. If you look at successful libraries and applications, they almost always gave well-defined design and architecture guidelines. In fact, I can’t think of a good software library out there that doesn’t have a solid design and architecture. On the other hand, I often see big piles of mud that have to be re-written over (and over), because people believe architecture takes too long or they believe it’s unnecessarily complex.