|
honey the codewitch wrote: ust because you know how to do something doesn't mean you should. I look at that the other way:
I don't know how to do something so I do it. That philosophy is, after all, what makes our world go round.*
Bitterness section - or perhaps just bitter-sweet:
Let the next generation sort it out instead of staring at their cell phones.
*like it or not - and thus giving you the answer to the great philospher's question "Why?"
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
honey the codewitch wrote: Keep It Simple Stupid. The golden rule.
|
|
|
|
|
"Simplify, simplify" -- Thoreau
I totally agree, but I prefer to work alone anyway. I never begin with much of a plan, I simply begin and see where it goes.
Twice I recall being handed a "spec" for something I was to develop, but I ignored them and did what I knew was right -- one of the specs was actually dangerous.
Specs always come from people who have no idea what they're doing, but want to appear smarter than the people who do.
For one personal project, I made kind of a grid to track which features needed to be developed, which didn't, and which I had completed, but that's about it.
|
|
|
|
|
|
(hence) Never use technical words for pictures.
Never tell customers, or developers, that the picture is UML - it's just a picture
Guidance of the wise...
|
|
|
|
|
It takes a certain talent to be able to code like that, and I respect it. Naturally I do, because I'm much the same way when left to my own devices.
It's useful to know architecture, UML and all of that mess just to be able to communicate with people who speak it, and I will concede that huge projects with large teams pretty much demand architecture and pre-planning but otherwise just let me at the code.
Real programmers use butterflies
|
|
|
|
|
This is just as true for "frameworks". When was the last time a generic framework actually did what you wanted it to do?
|
|
|
|
|
Yes. Although I'll grudgingly accept that for its size, Microsoft did a fair job with the .NET BCL
Real programmers use butterflies
|
|
|
|
|
Well, a framework isn't supposed to do anything!
|
|
|
|
|
Like everything in life and art, there are two faces to this coin: at one extreme you have spaghetti code and at the other you have massive libraries of hundreds of classes and structures (I'm looking at you LEDA and BOOST). The golden path is in the middle. Our job is to find that middle path.
I heard someone saying that engineering is the art of finding when one is approximately equal to two and when one is much smaller than two.
I let you with these two quotes:
“Everything should be made as simple as possible, but no simpler.” - A. Einstein
"You should be glad that bridge fell down - I was planning to build thirteen more to the same design" - Remark attributed to I. K. Brunel, addressing the Directors of the Great Western Railway.
Mircea
|
|
|
|
|
Mircea Neacsu wrote: “Everything should be made as simple as possible, but no simpler.” - A. Einstein
I *almost* dropped that quote in my rant, and I bring it up all the time when it comes to software.
Mircea Neacsu wrote: "You should be glad that bridge fell down - I was planning to build thirteen more to the same design" - Remark attributed to I. K. Brunel, addressing the Directors of the Great Western Railway.
Haha it's funny because it's true!
Real programmers use butterflies
|
|
|
|
|
My first recollection of "software life" was 5 years.
The "architecture" issue I see is most are into "piece" work; without caring / knowing / wondering how it fits into a bigger picture. The million (code) monkeys and a million keyboards and eventually we get some useful algorithms / patterns.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it.
― Confucian Analects: Rules of Confucius about his food
|
|
|
|
|
OK, I had to look up UML...heard of it long ago and found it useless. I'd rather keep these diagrams in my head...much easier to update/maintain!
IMHO, a good database design tells the whole story. Most abstraction can be handled in views/procs. (talking lob apps here)
BTW, in 20+ years I've never seen a specifications document/plan. The closest thing might be an occasional UI mockup in a screen grab or worse, scribbled on a notepad. (or even worse, a screen grab of an image of scribbling on a notepad! )
"Go forth into the source" - Neal Morse
"Hope is contagious"
|
|
|
|
|
Yeah it's a little different when you're not doing business apps. IoT devices, developer tools, that sort of thing, you don't have a database to go by necessarily. Although I'd also argue that any validation those procedures are doing in them should be done on the front end as well to avoid bad/spurious network traffic. If they are well designed, hopefully they add to the story.
Real programmers use butterflies
|
|
|
|
|
kmoorevs wrote: TW, in 20+ years I've never seen a specifications document/plan. The closest thing might be an occasional UI mockup in a screen grab or worse, scribbled on a notepad. (or even worse, a screen grab of an image of scribbling on a notepad! )
The last major gig I had had a very good specification plan from which I was to code. As I got into the meat of the task, there were a few items that seemed to be very difficult to implement - i.e., would need to build a new UI control and access 3rd party stuff (YIKES) - that I was able to talk the program manager out of due to the difficulty. The app was meant to be used by the USA military out in the field, so I was able to explain how simplicity would be an asset.
|
|
|
|
|
Quote: decoupling software from itself
I like that phrase!
Though I wish, when it comes to people, some people were more decoupled from themselves, and others less decoupled.
|
|
|
|
|
Upvoted, just because of the endless interpretation possibilities.
|
|
|
|
|
My take on this is that people feel that if they won't "foresee and prevent" some issues like duplication of code they are lesser coders.
I try to explain that we should use rule of 3, so if it is in 2 places that is still not duplication of code. But what I get in code reviews and discussions: "you violate DRY" like it would be some holy grail and you are lesser human if you have 2 lines that look alike.
Reality is, that this emotional problem not technical. Usually people want to do a good job or be better than others in their work. I can point out 10 logical reasons for why those 2 lines should not be changed into single line, but it is still not going to convince someones pride.
|
|
|
|
|
Yeah I hear that. Part of me finds some amusement in this. Humility is the seat of wisdom. Pride makes people do all kinds of foolish things.
Real programmers use butterflies
|
|
|
|
|
I worked on a project where the developer followed a lot of patterns to the point where there just too many layers. It makes maintenance difficult. There's a balance between having a system easily extendable (not a monolith) and having too many layers.
|
|
|
|
|
I totally agree. This is pretty much what i was ranting about.
Real programmers use butterflies
|
|
|
|
|
After 5 years of academic research on the subject and 6 years of commercial R&D as primarly a software architect, my conclusions are very similar to yours.
A low learning curve and straightforward structure that only slowly gains complexity over time, is the best possible outcome.
Now, for the last 2 years of working in an almost-enterprise level company, I also notice that almost no-one correctly values that conclusion.
Some scoff at the simplicity, and take it as a personal challenge of sorts, because they've been openly passionate about more intricate solutions in the past. Some drastically undervalue the effort involved, as they equate "simple" with "not a lot of work" and immediately try to displace it with, somewhat ironically, an off-the-cuff idea that's incomplete and more complex to execute.
Let me give you some advice on how to deal with these people.
Instead of explaining why a low learning curve is an integral part of a good design, let them present a small practical example of their own proposal, and give them an audience that judges them on how easy it is to understand, and how easy it will be to maintain.
In my experience, most people take on the bait in a heartbeat. About half quit once they realize their mistake (they tend to recognize the 1+ pages of "having to explain basic stuff first" as a failure and a lesson in humility) and the ones that do present their solution, often feel embarrassed about the whole thing once they realize no-one really understands the words they are saying.
Lessons will be learned and egos will be bruised. Keep a respectful tone throughout and you'll manage just fine.
|
|
|
|
|
That's some great advice. I'm freelance now doing IoT stuff so there's no room for GoF patterns and UML in my code - simple is king, and I love it but I'll definitely give what you said a try should I find myself in that role again.
Real programmers use butterflies
|
|
|
|
|
"Quote: let them present a small practical example of their own proposal, and give them an audience that judges them
The usual problem is the way those more senior do it to the architect, having set out a basic structure and asking for the gaps to be filled.
But you are right, it's best if you can manage to explain the complexities and difficulties first, before showing the excellence and simplicity of the system design!
|
|
|
|
|
I guess I was an old school architect.
We typically wrote prototype code for how we wanted to interface with the system, then we went back and designed a system architecture that we could use for those things.
We didn't do UML diagrams, or go crazy with patterns, although we had a few singletons. We did use streams between client and server, and that made adding compression a breeze, and later encrypted the compression a breeze. A few lines of code allowed the server to know if the client supported compression and/or encryption. And then it simply constructed the "best" stream object. The clients abilities were known, so it handled what was streamed back. The server was ALWAYS ahead of the client, so it did not have to worry, the old clients NEVER asked for encryption or compression.
But I completely agree to a point. I see these complex designs and I wonder.
Although I am pretty impressed with most of the RESTful style APIs.
QuickBooks Online being the EXCEPTION. Imagine having a Memo Field on an invoice.
Imagine Importing an Invoice, that Identifies the Memo field. Imagine NOW that they put that on the CUSTOMER STATEMENT and NOT on the Invoice. No option given to have it be on both or be on the Invoice.
Worse, if you have a default Memo defined. And you do an import WITHOUT SETTING the Memo, it does NOT use the default value the way it would if a User Created the invoice. But you can use ANOTHER API call, and set the Invoice Memo Field after it is created.
That kind of stuff drives me BONKERS. It's like the programmers have NEVER USED their own system!
Google Tasks. Last I checked does not easily let you move a task from ONE task list to another. How swell... You have to copy all the fields, and create a new one, and then delete the other one. God forbid if they add a new field you forget to copy, or the field can only be set AFTER the task is created. LOL...
I yearn for simpler days in some ways, and at the same time I pray things keep improving...
|
|
|
|