> I believe programming, in this regard, can learn something from writing: when writing the first core of a new system, when the original creator is still alone, isolated, able to do anything, she should pretend that this first core is her only bullet. During the genesis of the system she should rewrite this primitive kernel again and again, in order to find the best possible design. My hypothesis is that this initial design will greatly inform what will happen later: growing organically something that has a good initial structure will result in a better system, even after years of distance from the original creation, and even if the original core was just a tiny faction of the future mass the system would eventually assume.
I thought this paragraph had an interesting point. Does anyone have experience with testing this hypothesis?
I can totally relate to that. That's how I arrived at Abstraction Logic [0]: Banging my head against the wall (no, not literally), until something gave and I could suddenly see the most simple and powerful logical kernel possible.
This kind of development must be carefully balanced though so that you don't forget why you are making your system in the first place. You need to resolve the tension between your user requirements and your simple kernel, and that's hard. It is maybe even impossible for the particular project you are working on, because of economic constraints, time constraints, or because you don't know enough.
Furthermore, the comparison here with writers is very apt: Following this style of development, you are becoming an artist, and you will probably experience the need to shape your work environment accordingly.
That section stood out to me too. I ended up doing this a few months back while working on the playback system in my video editor Recut. I ended up rewriting that system at least 5 times. I was also learning Rust at the same time, and I had little knowledge of video going in. So it was a loop like: build something, get it working, realize I designed myself into a corner and couldn’t handle some important scenario, go back to the drawing board.
Stuff like dealing with the threads and queues, playing streams from multiple files in sync when they have different frame rates, and managing playback of multiple tracks that each have lots of cuts were some of the things that tripped me up and led to redesigns.
It ended up being a good learning experience and I’m glad I spent the time to rewrite instead of trying to forge ahead with broken abstractions. It’s still not perfect but it’s miles ahead of those first few iterations.
I’ve always found that starting a new project works best when I build the baseline alone, after some design discussion. If it’s too complex a problem to build that way, the fewer and more focused the team, better the baseline is. Once you start adding more and more people to a system, things start going down hill in proportion to the number of parallel work streams. Of course, this depends on how “big” a problem you’re working on and how the problem can be broken down. (i.e divided areas of responsibility in the code base with clear contracts between them). It’s way too easy to lose focus on design philosophy and structure as more people are involved in the actual development/coding.
The huge help that programming gives to a novelist is the practice of breaking down huge, sprawling problems into smaller, manageable, interconnected pieces. As a programmer/writer, you also learn to keep the big picture in mind, so the pieces naturally assemble back into a whole.
Programming may be related to one half of fiction writing - the structural and logical facets. There is a whole other half of emotional authenticity and character building that make it far broader and more difficult than programming.
That is, if you want an effective product.
The thing is in programming there is no such “Mom” whose approval will validate the program. It will either run and do it’s job or not. Whereas in writing, you will at least always have your mother in the audience that will say “Sure sweety That’s a novel”
If you're writing a video game for example, the emotional authenticity and character building would be equivalent to cohesive mechanics which work well together, graphical quality / aesthetics, even story and level design all require programming to one degree or another. The same can be said for other types of programs like meeting business needs, but I think the video game analogy illustrates the point best.
In other words, the authenticity and character building is how well you're fulfilling the purpose or goal that you set out to accomplish.
The mom is not too different from one's wife who does not code, but always will look at the husband's poorly written code in spare time with awe and love.
Programming is just writing... No difference whatsoever...
Is there any word when programmers engage in some other activity and then realize and rationalize that the said activity has a lot common with programming.
Sometimes I wish books and movies were a bit more like software. We have all read or watched something as version 1.0 and thought "that chapter or scene needs to be rewritten". Some things need big changes and not just minor edits.
It would be cool if version 1.0 would be released and get user feedback on what works and what doesn't and then the author or director would make big changes and release a version 2.0.
In some way, that kind of happened with the "Snyder cut", although the story is more complex, in that the original version of the movie never happened, a different movie was made, and the original one ended up being done, but it was also influenced by what was done for the first release and the subsequent reviews.
OP, I always thought the 2 processes, writing code and writing an dissertation, where the same activity. Both must be written clearly enough for a HUMAN audience, even though coding is supposed to be read by the compiler / interpreter.
A good text flows in the mind when read, and the reader builds a story in their minds. Of course coding is more complex, because sometimes there is a story inside a story, but... it is always a story.
When asked (usually by students and junior engineers) which class helped me most with my career, I always cite Senior Year High school English (American 12th grade). Mrs. Scott taught me more about organizing my thoughts and structuring a paper (and program) than any CS class I took ever did.
It's quite something to denounce the arrogance and pompousness of others while proclaiming that they "haven't seen the light" and declaring they've taken the easy path in life.
> No other profession does this kind of pompous comparisons.
Learning from other disciplines is an incredibly common practice across many professions and often leads to insights as people discover new perspectives and ways of working.
>It's quite something to denounce the arrogance and pompousness of others while proclaiming that they "haven't seen the light" and declaring they've taken the easy path in life.
I said that because the parents comment was just plain rude. It really pissed me off. It's like "News Flash: Something obvious you should know". So my response was basically, "No bro, you're wrong." with a bit of rudeness injected in.
Still what I'm referring to is legit. The sheer amount of programming analogies on HN is through the roof. I see one every other day. Sure other careers like to do comparisons but the amount is nowhere near the volume of programming analogy blog posts.
There's definitely a sort of intellectual arrogance programmers have and you can feel it on HN. A lot of articles related to IQ and intelligence always get voted up and the comments become littered with self affirmations. No doubt in my mind this blog post and other programming analogy blog posts is related to this.
You did piss me off with your above comment. It did trigger me. But my response is still valid.
I just looked at your profile and responded to a couple threads. That's all. I'm not trolling you, those comments are legit and they aren't an attempt to be rude like you were. Feel free to ignore them, I don't really care.
But maybe I suggest you be less rude with your asinine comments next time.
I thought this paragraph had an interesting point. Does anyone have experience with testing this hypothesis?