Well, I don’t know how other programmers do things, but what I do is I create models at various levels of abstractions, and play with those models until it occurs to me what ought to happen next. Like, I draw on the whiteboard with someone, and we generate all the known solutions we have and usually a known solution or pattern just needs to be adapted. So we’re copying. Often, the adaptions aren’t immediately obvious when you go down a couple levels and start actually coding it, and so I play around with a couple of different ideas, or maybe I’m guided by theory and just have to think it through and problem solve for this circumstance—which would be copying.
If I’m dissatisfied at any point and have exhausted my search space, what I’m going to do next is enlarge that search space by talking to more people or doing research. Copying.
Every now and then—but pretty rarely - something novel will occur to me that will out-compete all the ideas I already have or can find in research. And so there a new idea made it into the code. And if someone asks me how I came up with, I’ll just describe the problem, and the search space and the research and so on, and then shrug. Because the idea seems pretty obvious in hindsight I just shrug away this question of where the idea came from.
It would be difficult to overstate the power of our abstraction and modeling, because it allows us to quickly test for fitness a rash of approaches iteratively. And in the process of that novel ideas do occur and get worked in and then communicated. But I am not at all certain the genesis of most of those ideas isn’t more or less random, in the sense the author means it. Indeed most engineering work is copying, as the author terms it.
Well, I don’t know how other programmers do things, but what I do is I create models at various levels of abstractions, and play with those models until it occurs to me what ought to happen next. Like, I draw on the whiteboard with someone, and we generate all the known solutions we have and usually a known solution or pattern just needs to be adapted. So we’re copying. Often, the adaptions aren’t immediately obvious when you go down a couple levels and start actually coding it, and so I play around with a couple of different ideas, or maybe I’m guided by theory and just have to think it through and problem solve for this circumstance—which would be copying.
If I’m dissatisfied at any point and have exhausted my search space, what I’m going to do next is enlarge that search space by talking to more people or doing research. Copying.
Every now and then—but pretty rarely - something novel will occur to me that will out-compete all the ideas I already have or can find in research. And so there a new idea made it into the code. And if someone asks me how I came up with, I’ll just describe the problem, and the search space and the research and so on, and then shrug. Because the idea seems pretty obvious in hindsight I just shrug away this question of where the idea came from.
It would be difficult to overstate the power of our abstraction and modeling, because it allows us to quickly test for fitness a rash of approaches iteratively. And in the process of that novel ideas do occur and get worked in and then communicated. But I am not at all certain the genesis of most of those ideas isn’t more or less random, in the sense the author means it. Indeed most engineering work is copying, as the author terms it.