Comment by necovek
16 days ago
It's great when you make a general statement about somebody you are conversing with without really knowing their background.
As Dan notes himself, even scenarios which are simpler than this (moving a bridge, moving a building) are done much more rarely compared to similar requests in software. I did not accidentally use "modify something in a dimension that's really hard to modify in civil engineering" as an example — perhaps your response was a cocktail party response of someone not understanding either civil or software engineering?
IMHO, it is all about costs (which I start off with being small in software — comparatively): traditional engineering doing changes like these is extremely expensive and thus they don't (it's usually cheaper to demolish and rebuild).
I really think you should read Dan's post in full. Because you really did make the error him and Hillel discuss. I think it'll also help interpret my point and the gp to my comment. We're not thinking in a framework where CS and Eng are all that different.
Or skip to this part of Hillel's video[0]
I've been an aerospace engineer. Worked there before coming over to CS. And I can certainty tell you that yes, someone may ask you to split a floor in half. There's nothing really preventing you from doing this. There's buildings with more levels than there are ordered floors. It's a 15 floor building, but you label your floors 1-14. Such an area can be used for things like running conduit or even just as a fire break. Hell, there are even split level homes, you know those ones where you walk in the front door and either go up or down? There's also things like scissor flats.
So yeah, you are making the mistake because your example belies you. It illustrates that you aren't aware of the complexities and abstractions in the engineering job. It's okay to have only a rudimentary understanding of engineering, you've spent your time learning other things that are more valuable to you. But that doesn't mean you should assume things are simpler than they are.
The truth is that any job, has depth and far more complexity than appears at the surface. While in many jobs you can get away with only doing the simple part, there's still more depth than is actually being utilized. Likely for the same common error. You are right about cost being a big factor, but this is also a very different argument than the one about floor 8 and a half.
https://x.com/danluu/status/1484268111687663620
[0] https://youtu.be/3018ABlET1Y?t=920
Again, you are making assumptions: I have read it in full, and I have experience with construction as well.
> someone may ask you to split a floor in half
Yes, I've seen it done plenty times. It's especially common with old houses which might have 4-5m high ceilings around here and people do introduce new floors in between.
Similarly, with pillars being carrying structures, it is feasible to go and turn 3 floors which are 4m high each into 4 floors ~3m high.
But while that's a way to interpret my "original ask" (and all of your examples like hidden floors and such), my intent was clear — in software, you literally go and introduce a whole new thing between the two things that were tighly coupled. Like actual structures above a certain floor.
If your implication was followed in software (i.e. try to predict the future and introduce hidden floors, service floors and such) — and it sometimes is — we really end up with worse, more complex software that has technical debt built in from the start. IOW, that's exactly not the way to build software.
Again, this does not discount the complexity of civil engineering — it is freaking hard! But my point is that it is DIFFERENT and that same approaches do not necessarily work.
Just so we're clear, construction isn't engineering[0]. The difference does matter specifically in what we're talking about.
But again, I think this belies you. Yes, I've made the assumption that you either didn't read Dan's blog in full or listen to Hillel's video, but can you blame me? This sentence is something they both explicitly discuss. You don't have everything figured out in engineering. Frequently you are doing your designs and then get them built by a manufacturer and then reiterate. This is very much akin to writing code, running tests, and rebuilding.
Hillel discusses this right here[1] (this also addresses your last line)
Or from Dan, not far in he says
I'm not interpreting your point too directly, I'm interpreting your point how you're asking I do in the followup. I am telling you the same problems happen in engineering. It is *all* about uncertainty. You are constantly doing new things that people haven't done before. In fact, the entire field of statistics is centered around uncertainty. Randomness is literally a measurement of uncertainty. Yes, it is true that in CS we don't have as formal of a base to derive complex equations and better (but not completely!) account for that uncertainty, but Dan also addresses this immediately after my quote.
In fact, let me quote from a footnote of Dan's. #2
(Emphasis my own.) Does that not sound extremely familiar? Rushing for the sake of rushing? That this rushing just incurs technical debt and more surprises? There's surely the constant of management wanting things to be done faster and not recognizing that this creates future trip-ups that create more anxiety to rush and just perpetuates the problems in the first place.
So I hope you can understand why I had thought you didn't read their arguments. I referenced the timestamp in Hillel's video[1] too. The next part of Hillel's discussion is literally about how much more predictable and consistent SOFTWARE is. *Their entire thesis* is addressing your point.
I'll leave you with Hillel again[2]
[0] I must stress that I'm not trying to say one is more important or better, just that they are different.
[1] https://youtu.be/3018ABlET1Y?t=1085
[2] https://www.hillelwayne.com/post/are-we-really-engineers/
3 replies →