3 ms·
One essential part is managing complexity. With a mechanical part it often is obvious to see and easy to understand what this part does. A lot of engineering g
by static_noise 9y ago
One essential part is managing complexity.
With a mechanical part it often is obvious to see and easy to understand what this part does. A lot of engineering goes into finding the right materials, the best shape and processing tools. But the finished part is easy to understand.
With software engineering we have abstractions like "sort algorithm" that are easy to understand but many things have so many cross-connections to other parts that in order to understand what is actually going on you have to get really deep into this stuff. Changing a detail in one implementation may lead to unforseen consequences on other, seemingly unrelated, parts. You may rely on undocumented features without even knowing that.
How many cables do you see when you cut a boeing in half? How many of them are essential to operating the plane? How many dangling pointers do you get if you cut your main memory in half? How many of them are of system components?
Whatever technique we have to cut down complexity, hide implementation details behind clear interfaces, separating stuff into easily-to-combine modules makes managing projects easier. I think that the main success factor of python lies in this area.
Then imagine a project that does not have all those modules readily available. That does not have engineers who know it all (and really do, not just pretend) in charge. They rough out a plan and start working on many ends that - when they meet - do not fit together. Add in organizational, personal, psychological problems and the structure wraps in on itself, turns on itself in infighting about how-to-do-stuff, career postions, blame, praise, just surviving or just passively standing by fulfilling orders on paper waiting until everything collapses.
- konschubert 9y agoI always say that building software is like building a house, in the dark, with flashlights. This also makes it immediately understandable why throwing more programmers at something doesn't always increase the development speed.
- csydas 9y agoInteroperability and dependency also tends to play a very large part of why IT projects are notorious for getting side tracked, to jump off this post; at my last place of employment, the first major project we tried to tackle was finally migrating off of a legacy server which touched virtually every other piece of software and hardware on the campus due to how the infrastructure had grown over time. Every project was stalled largely due to the fact that everything was so dependent on this one system and the system itself was a complete unknown as it more or less was script-soup written by one guy over the course of 20 years. Detangling and decoupling everything took years, and was only finally completed when the server's mobo went belly-up on us and we weren't able to scavenge a new part. With a lot of infrastructure projects, you can fairly easily route around dependencies since, luckily, in many cases modern cities have planned for it, or there are natural detours built in, but dependencies in IT can be literally hard-coded, and replacing then is not a minor task.
- panic 9y agoPlus you can see the dependencies directly in "real" engineering. In software it's all completely invisible.