I have written a few 300k lines+ applications from scratch, worked on a few larger ones, and countless smaller ones. I don't think size makes much difference to the way that I work.
I think, for me, I am compulsively creative. Or obsessively creative. Or some combination. Not in a, 'oh, look at me, aren't I wonderful, look at my sparkly stuff!' kind of way, it's more a 'can't sleep, must *do* stuff, or I will really hate myself' thing. I get ratty and irritable if I'm not working on something. It doesn't really matter if it's a piece of art (photography, graphic art, music, writing, whatever), mathematics or programming -- they all scratch essentially the same itch. I don't seem to have a lot of choice in the matter. I actually can get quite depressed if I've not created something that I cared about for a while. This doesn't sit well with a lot of commercial programming jobs, of course, but I've been quite lucky in that I've generally managed to avoid run-of-the-mill jobs.
For me, programming takes the same kind of thing as shooting and processing a good photograph, or laying out a PCB, or inventing mathematics. I haven't any idea how I do any of those things in any detail. I just 'know' what is right, and go with it. Usually, the gut feeling works out. Sometimes it needs correction, though this is rare. I couldn't hope to explain it. I use C++ a fair bit, and have done so for about 15 years now, so I know the language pretty well. I still have to look up the occasional obscure bit of syntax, but generally I don't need to these days. My code doesn't tend to contain many bugs, but I think that's more due to 30 years of programming time than any particular technique I might happen to use. I like small programs (or, at least, parts of programs) that look beautiful, work perfectly and do useful things, in the same way that I enjoy well designed furniture or a classically good piece of typography. Or some Bach. I suppose this sounds a bit big-headed, put this way, but I don't intend it to come across like that -- it's about as close to describing the way I perceive the world as I can manage.
Goodness me. 300k outclasses me by some distance, and several 300k programs even more so! My biggest work is PuTTY, which currently weighs in at about 100k but only because of significant contributions from other people. (In particular, that's counting all the OS-specific subdirectories, one of which – the Mac OS Classic port – I didn't write a single line of.)
So now I think it's only fair that I turn my own question round, and instead of asking why many people haven't written anything as big as I have, ask myself why I haven't written anything as big as you have. Hmmm.
Certainly the biggest reason is that I've never encountered a problem which I felt motivated to solve and which needed a program that big to solve it. I'd be interested to know what yours were, in fact.
But also, I think scale does affect me in a way which you say it doesn't affect you. The bigger the program, the more aware I am that I'm gradually losing track of how the details of it work, and the more mistakes I make along the way. It's entirely possible that 300k might be beyond my capacity (although, having never tried it, it's a bit hard to tell). Then again, it might be that I could have hacked a 300k-line program in my prime (loosely defined as age 20-21ish, when I had less experience but vastly more energy and a much better memory) but am past it now.
I may be limited, it occurs to me, by the fact that I rely heavily on my intuition rather than formal reasoning. I had this in maths: I blazed through school maths lessons without slowing down, tackled first-year university maths with no difficulty at all, did nearly as well in the second year, and suddenly came up short in the third year when I discovered that the levels of abstraction had suddenly reached the point where my intuition wouldn't quite encompass them any more, which meant that suddenly I only had formal reasoning and algebra to work with. I think up until that point I'd been relying on an unusually good intuitive grasp of the concepts to do most of the work, and then going back and filling in the details of the algebra and the proofs once I knew where they were headed, so when I suddenly had to rely solely on nonintuitive methods I found it much harder. It wouldn't surprise me to find that the same sort of thing happens to me with programming; I know I do a lot of high-level design, for example, entirely in my head, which is bound to mean it's limited by the dimensions of my skull...
I think, for me, I am compulsively creative. Or obsessively creative. Or some combination. Not in a, 'oh, look at me, aren't I wonderful, look at my sparkly stuff!' kind of way, it's more a 'can't sleep, must *do* stuff, or I will really hate myself' thing. I get ratty and irritable if I'm not working on something. It doesn't really matter if it's a piece of art (photography, graphic art, music, writing, whatever), mathematics or programming -- they all scratch essentially the same itch. I don't seem to have a lot of choice in the matter. I actually can get quite depressed if I've not created something that I cared about for a while. This doesn't sit well with a lot of commercial programming jobs, of course, but I've been quite lucky in that I've generally managed to avoid run-of-the-mill jobs.
For me, programming takes the same kind of thing as shooting and processing a good photograph, or laying out a PCB, or inventing mathematics. I haven't any idea how I do any of those things in any detail. I just 'know' what is right, and go with it. Usually, the gut feeling works out. Sometimes it needs correction, though this is rare. I couldn't hope to explain it. I use C++ a fair bit, and have done so for about 15 years now, so I know the language pretty well. I still have to look up the occasional obscure bit of syntax, but generally I don't need to these days. My code doesn't tend to contain many bugs, but I think that's more due to 30 years of programming time than any particular technique I might happen to use. I like small programs (or, at least, parts of programs) that look beautiful, work perfectly and do useful things, in the same way that I enjoy well designed furniture or a classically good piece of typography. Or some Bach. I suppose this sounds a bit big-headed, put this way, but I don't intend it to come across like that -- it's about as close to describing the way I perceive the world as I can manage.
So now I think it's only fair that I turn my own question round, and instead of asking why many people haven't written anything as big as I have, ask myself why I haven't written anything as big as you have. Hmmm.
Certainly the biggest reason is that I've never encountered a problem which I felt motivated to solve and which needed a program that big to solve it. I'd be interested to know what yours were, in fact.
But also, I think scale does affect me in a way which you say it doesn't affect you. The bigger the program, the more aware I am that I'm gradually losing track of how the details of it work, and the more mistakes I make along the way. It's entirely possible that 300k might be beyond my capacity (although, having never tried it, it's a bit hard to tell). Then again, it might be that I could have hacked a 300k-line program in my prime (loosely defined as age 20-21ish, when I had less experience but vastly more energy and a much better memory) but am past it now.
I may be limited, it occurs to me, by the fact that I rely heavily on my intuition rather than formal reasoning. I had this in maths: I blazed through school maths lessons without slowing down, tackled first-year university maths with no difficulty at all, did nearly as well in the second year, and suddenly came up short in the third year when I discovered that the levels of abstraction had suddenly reached the point where my intuition wouldn't quite encompass them any more, which meant that suddenly I only had formal reasoning and algebra to work with. I think up until that point I'd been relying on an unusually good intuitive grasp of the concepts to do most of the work, and then going back and filling in the details of the algebra and the proofs once I knew where they were headed, so when I suddenly had to rely solely on nonintuitive methods I found it much harder. It wouldn't surprise me to find that the same sort of thing happens to me with programming; I know I do a lot of high-level design, for example, entirely in my head, which is bound to mean it's limited by the dimensions of my skull...