7
votes
Do these two design philosophy conflict with each other?
No approach can be said to be "better" without the context for which it is chosen. If you have a problem to solve, be it a business requirement or whatever, you choose the approach that ...
7
votes
Why aren't all method virtual or why doesn't have each class at least one interface?
As Anders says, its partly about performance and partly about locking down poorly-thought designs down to reduce the scope of trouble caused later by people blindly inheriting things that were not ...
6
votes
Why aren't all method virtual or why doesn't have each class at least one interface?
There's two elements to your question, so I'll try and address them in turn:
Why aren't .NET methods virtual by default?
Inheritance, in practice, has many problems. So if it is to be used as part of ...
5
votes
Accepted
What is the (lowercase 't') true definition of "support" (to a computer scientist)?
If you want to know the true definition to a computer scientist, I suggest you ask on the Computer Science Stack Exchange. We are software engineers here, and so will have a very different take on ...
3
votes
What if after some time when I learned more, I realized that I did some things wrong in past projects?
We all make mistakes, and feeling bad about them is quite normal. However, at some point it is better to put the bad feelings aside and look at this from a professional point of view.
Do you have ...
2
votes
Accepted
How to introduce Cloud and DevOps in an organisation that is conservative in nature?
You introduce it by doing it.
Now that it's done it needs support. Who's ready for a new toy?
engineers' initiatives were not really encouraged or wanted
Stop expecting to get rewarded by ...
2
votes
Modern Interpretation of the Unix Philosophy of "Rule of Generation"
In “modern” C++, the manta “don’t write code — use algorithms.” is the same general idea. The “generation” is done with templates and reuse, so you don’t touch manual looping and elementary code ...
2
votes
Why "mainstream language" is so opposed to "built on a small core of orthogonal features"?
Because reducing the feature set of a language requires a compromise. Taking a feature out of the language means either:
the language no longer has that feature, so people who need/value that ...
2
votes
Writing extensible versus deletable code
I think layering is undervalued. I wish there were more texts talking about that as a design point. Layering means placing an abstraction on top of another abstraction (without allowing the ...
1
vote
What if after some time when I learned more, I realized that I did some things wrong in past projects?
I wouldn't worry.
If you hired a person to design say a biscuit production line, you wouldn't typically expect that person to involve themselves in the problem of what happens if someone feeds ...
1
vote
Java OOP Philosophy/Design: Mutable classes
Immutability is more about our relationship with memory than with the real world we're modeling. Specifically it's about shared mutable state and the ability to update that in an atomic way.
For ...
1
vote
Java OOP Philosophy/Design: Mutable classes
The goal of object-oriented design is to model abstract behaviors and business processes, not real world things.
That being said, a vehicle is mutable in the real world. Any single vehicle is a "...
1
vote
Accepted
The problem of letting the receiver instead of the sender generate an ID
This is a common problem in distributed systems. The issue is that you have two competing requirements:
the server wants a globally unique ID (and is in a position to enforce it)
the client wants a ...
1
vote
Writing extensible versus deletable code
Should we be thinking about a style of writing code that is better suited to the contemporary software design and architecture of being agile and user-centric (hence evolving faster compared to ...
Only top scored, non community-wiki answers of a minimum length are eligible
Related Tags
philosophy × 35design × 7
java × 3
design-patterns × 3
programming-languages × 3
unix × 3
c++ × 2
programming-practices × 2
c × 2
open-source × 2
concurrency × 2
c# × 1
architecture × 1
object-oriented × 1
python × 1
unit-testing × 1
object-oriented-design × 1
.net × 1
functional-programming × 1
language-agnostic × 1
language-design × 1
exceptions × 1
libraries × 1
solid × 1
learning × 1