Remix.run Logo
gherkinnn 3 days ago

https://danluu.com/cocktail-ideas/

Here are the cocktail ideas. Hits the spot.

bryanrasmussen 3 days ago | parent [-]

>No one thinks about moving the starting or ending point of the bridge midway through construction.

it is a common rhetorical device to phrase something as an absolute when the negation of it is only an edge case.

hence

>Hillel interviewed a civil engineer who said that they had to move a bridge! Of course, civil engineers don't move bridges as frequently as programmers deal with changes in software but,

fluoridation 3 days ago | parent | next [-]

Not to be that guy, but where can I read those interviews? I got as far as the blog (https://www.hillelwayne.com/) and looked around October of 2019 and can't seem to find anything. As it stands this isn't even anecdata, this is some guy saying some other guy said he talked to a few guys who say something happens from time to time.

bryanrasmussen 3 days ago | parent [-]

no idea but it stands to reason people will need to move bridges at times, we're in the middle of building a bridge, earthquake happens, stuff no longer like it was, gotta move that bridge is just the initial obvious situation that I can imagine from outside. Similar other natural disasters would also affect it, flash flooding etc.

fluoridation 3 days ago | parent [-]

I'll grant that, but that's not a "they don't do this as often as that, but", that's a "it's not unheard of". That was meant to be a response to a Tao of Programming-like post about why programming work has so much improvisation.

godelski 2 days ago | parent [-]

Well the reason you don't move a bridge is because it's really hard and really expensive. Just like you don't build an airplane while it's flying because it couldn't be flying if it wasn't built.

The analogies seem to just be missing the point. There's constraints, so what?

I've worked in hard science, engineering, and software. No one is omniscient, so the goals evolve and pivot during the project. That's pretty standard practice. You can't just plan and execute unless you're omniscient. Honestly, the big differences I see is that programmers spend less time at the drawing board and engineers and scientists spend much more time there because working in physical space is very costly and time consuming. But there's a lot of similarities. Programmers would be more effective if they spend more time at the drawing board and engineers would be more effective if they could hack on their tasks more cheaply (which is why sim has had such an impact for them)

fluoridation 2 days ago | parent [-]

>Programmers would be more effective if they spend more time at the drawing board

Would they, though? As you've correctly pointed out, design goals in software engineering get shifted by decision-makers because its cheaper than in civil engineering. The whole point of the ToP article is pointing out that software engineers have to account for possible future radical changes that in other branches of engineering are at most exceedingly rare. Any time you spend on initial planning beyond a bird's eye view may be time wasted.

godelski 2 days ago | parent [-]

Yeah. I find it weird to think not. Many problems are found during those planning stages. The process is iterative. Like I said, no one is omniscient. So that also means you can't just figure out everything during the planning stage. If that could be solved there then no one would ever pivot and frankly, that'd be a pretty strong case for planning in the first place lol.

But think about it this way, how do you plan a vacation? I'll tell you how I do it and you'll tell me if you're different, which is okay. There's no "right" or "wrong" way. I'm sure some things will be different and it's going to change every vacation, but bear with me here, since this is more of a communication aid than telling you how to vacation lol.

Prior to the vacation I plan out the major things, like how do I get there, how do I get back, the lodging, and so on. I'll have some key things planned out that I want to do. But I won't ever have everything planned out in detail. I actually do not like having each day scheduled unless that is more tentative and and acting as a stand in. Then after traveling my schedule changes, especially in the beginning. Things are different than I expected, so I'll learn that I'd have more fun doing X instead of Y. Or I find that I really like Z so I want to allocate more time to that. Maybe the weather changed and so I can't do P, and I instead do Q. I'll ask locals and hotel staff what their favorite places are to eat and go there. I'll likely have had a few more famous places to eat laid out, but definitely not every mean. Fuck, some days I'm just tired and would rather call the day early and do takeout. As the vacation closes, things become way more "stable". If I go to the same place in a second vacation I'll definitely lean on my experiences and do things very differently, usually with less flexibility (depending how much I was ale to discover what I like doing the first time around).

The point is that no matter what you're doing, there is exploration and exploration is coupled with the doing phase. It'd be pretty fucking exhausting to plan out the vacation at the airport. I mean people do do this and I'm sure you could still end up having a great time. But a little planning can really go a long way, right? That's the planning. Just like when you get back to your hotel at night and modify plans. That's a planning stage too. The logistics of a vacation almost force this kind of behavior on people. But in programming it is much easier to pivot, almost to the degree that you can be mid meal at a restaurant and decide you want to eat somewhere else. Being able to pivot like that is an incredibly powerful and useful feature, but this doesn't mean that planning still doesn't provide major benefits. Going in blind is crazy! If anything, it makes it more important. In both physical and software you still are time limited and unable to brute force all paths. In physical you can't jump mid meal and even if you pivot as soon as you get a good look, you're much more limited to what you can pivot to because you can't teleport across town. But in programming, you can. You can brute force sometimes, but that clock still ticks forward and you're still going to benefit from planning. The real difference is in physical I might be able to consider 2 dozen places to eat but in software I might be able to try a few hundred. Still need to plan if there's a few thousand, right?

You need to balance these things: the planning, exploration, and execution. Working in physical forces a dominating planning stage and more careful exploration stage, because execution is so costly. But in software execution is cheap. That doesn't mean we should throw out the planning stage, it means we can exploit it much more effectively!

fluoridation 2 days ago | parent [-]

I don't mean to be dismissive of the effort you went to in writing all that, but nothing you've said argues why software engineers would benefit from more planning. It argues for some planning, sure; I never said no planning whatsoever is good. If you intend to build, say, a website, that presents a very different set of challenges and usable tools than if you instead intended to build a microcontroller's firmware. But you seem to agree with me that in software you can turn on a dime, yet you don't don't offer any reason why more planning than what is already done would be beneficial.

godelski 2 days ago | parent [-]

  > I never said no planning whatsoever is good
Nor did I say programmers do no planning.

  > yet you don't don't offer any reason why more planning than what is already done would be beneficial.
You're selling high precision, which is impossible in this discussion. I don't know you and thus can't adapt my message to your specific needs. You'll need to think carefully about what I've said to see if it applies to you or not. Look carefully at that vacation scenario. How does it differ from how you go about solving a programming problem? Why do you think I'm stressing so much about how the ability to turn on a dime is an entirely different dimension?

You're a programmer, so I'd expect this to not be too difficult since you deal with deep levels of abstraction every day, right? You know how to generalize functions? You're aware of anonymous functions? Functors? Templates? And many other such generalizations? Why are you seeking such high precision when you can write down a function that automatically adopts to a wide range of cases and situations?

fluoridation 2 days ago | parent [-]

Buddy, you're the one who originally made a specific claim.

>Programmers would be more effective if they spend more time at the drawing board

If you want to retract it then that's fine, but don't act like I'm being unreasonable for asking what reasons you have for making it.

godelski a day ago | parent [-]

  > don't act like I'm being unreasonable for asking what reasons you have for making it.
 
You are though. You never had any intention of talking in good faith, and it was my mistake for engaging.

You've constructed a setting where no matter what level of planning I suggest you'll be able to say that this already is performed.

You've constructed a setting where I must make a suggestion for YOU, when I've made a note about a generalization I've observed. Did I say "all"? Of course not. I'm a programmer too, right?

You've ignored my generalization while attempting to weaponize it against me by seeking high precision.

You then use precision to argue the variability and importance of adapting to differing settings.

You've moved the goalpost multiple times.

You've actively worked against requests to help refine the conversation to settings more appropriate for you, to determine if you are included in the initial generalization or not.

So yeah, you are being unreasonable. I see that all you wanted to do was pick a fight. I want no part in your dumb game.

godelski 2 days ago | parent | prev [-]

It's hard to infer what you're exactly saying here, but I've worked in physics (my undergrad), aerospace engineering (first job), and programming (my phd and onwards), so I think I can bridge whatever gap is being discussed here.

In programming, engineering, and hard science your goals evolve during development. There's always discovery during the doing process that necessitates pivots, and sometimes hard pivots. The main difference I've seen is just how much time goes into planning. Software has an advantage in that when working with physical things mistakes are incredibly costly both in money and time. You fuck up a tolerance and you might need you wait a few weeks for the part to be remade and you might have an expensive paperweight (hopefully you can use for some testing).

So what that leads to is more planning stages. That's not just make a plan and go, but make a plan, go, regroup, replan, go, repeat. It often means gathering people who are the owners of different parts of a project because you can't just duct tape things together and the most permanent solution is a temporary solution that works. This greatly affects how I go about programming and is something I notice I do differently from my peers. I spend a lot more time at the whiteboard while most people I know never visit one. I'm not spending all my time there, or even most, but I couldn't do my job without "pen and paper".

In programming the "laws of physics" aren't constantly changing and you're not "building a plane while flying it" (how would it even get off the ground lol), but your requirements are constantly changing. That's... normal engineering and normal in both experimental and even theoretical science. That's because we're not omniscient and you don't know the full answer from the get go lol.

This isn't to say in trad engineering and science we doing also "move fast and break things". Just like in programming you'll build toy models or scaled down versions. But I do think programmers could benefit a lot more and make a lot fewer mistakes (substantially reducing future workloads) would they spend a bit more time at the drawing board. It's great that in programming we can jump in and poke around and experiment so much faster than the physical world allows us, but it seems that this feature is overused instead of being used in addition to planning and designing. That's what actually made me come over to this side, was the ability to iterate faster. But sometimes you gotta take a step back and look at things. Sometimes you gotta move the bridge. Sometimes you gotta tear it down to build an entirely new one. The latter is actually much easier in programming and honestly I feel like it's used less frequently. But that's like being unwilling to throw away your first draft when writing a report (or anything). Why hold on? The first draft's job is to get the stuff out of your head and see it in a more physical form. It's so easy to rebuild, magnitudes easier than doing it the first time, but it always hangs on as if losing it is losing work.