TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

A software epiphany

121 pointsby jwhilesover 1 year ago

35 comments

dasil003over 1 year ago
Title is a bit overblown for the actual epiphany which is more about the necessity of programmers having a robust mental model of a system to be able to maintain, let alone improve the system. I don&#x27;t see anything particularly unique to software in this thesis, as complex physical systems also have the same characteristic.<p>I also think this is way off base:<p>&gt; <i>It means that the code base we create is not the true product of our work. The real product is the mental theory of that code base which</i><p>This is manifestly not the case. The value of computers is that you can write code once, and the computer can execute it repeatedly ad infinitum. As a programmer, your mental theory of the code base has value to its owners, but it&#x27;s not the product. The code base is also not the product. The product is whatever output is created and consumed by the relevant stakeholders.
评论 #38326378 未加载
评论 #38325606 未加载
评论 #38327780 未加载
评论 #38330655 未加载
评论 #38332762 未加载
评论 #38340857 未加载
评论 #38325694 未加载
deely3over 1 year ago
&gt; The paper also talks about what happens when all the people who have a theory of a given program stop working on it. It dies. Yikes. It’s claimed that we can’t rebuild a theory from code and documentation.<p>In the text above word &quot;theory&quot; are used instead of &quot;understanding&quot;. Not sure why. Anyway, what exactly the hell Im doing in the last 10 years supporting legacy system mostly without documentation...
评论 #38326547 未加载
评论 #38328070 未加载
评论 #38351838 未加载
评论 #38336150 未加载
评论 #38325408 未加载
评论 #38338357 未加载
评论 #38331210 未加载
评论 #38326207 未加载
gregfjohnsonover 1 year ago
The “software as theory” idea is helpful - thanks OP. Right now I’m dealing with some devilishly difficult GPU code, and I now understand that I’ve been working to reverse engineer the authors’ theory from their code. With much effort, I achieved a gratifying epiphany, and the code suddenly became clear! (Perhaps I developed a theory related to but not identical to that of the original authors.) Fortunately, I have an enlightened manager, and he was patient with the “theory building” process. Software degrades to garbage when a series of successive developers apply changes to it without a cogent theory. The process is self-reinforcing; the more degraded it becomes, the harder it is to develop a useful and accurate theory.
评论 #38331778 未加载
jwhilesover 1 year ago
Hello! I wrote this article.<p>I want to say something about the pop-ups, which to have been much more discussed than what I wrote. (UX disaster as engagement bait?)<p>My desire in showing was to make the site feel more “alive” and to make the reader aware that other people had been there. I was trying to build a vibe of website as public space. Clearly this was not an approach that handles hacker news traffic and attitudes very well.<p>Secondly, I wanted to make readers aware of how much data is visible about them just from visiting a website.<p>I wanted it to feel like when you land on a drop shipping site that occasionaly tells you “Alice in Norwich just bought a widget. They&#x27;re selling fast!”. You slowly realise that the data is real, and that the site actually can see where you live, who provides your internet. Etc. It was meant to be creepy.<p>Anyway, I&#x27;ve removed the feature now. It was clearly causing usability issues for some people, which was not what I intended. I&#x27;ll think about other, better ways to get the effect that I had hoped for.<p>Finally, I&#x27;ll say that it was at least interesting for me to see things like<p>“Someone else just connected to Johncom. They&#x27;re in Kansas City, US, 64121 and are connecting with Spectrum”<p>“Someone else just connected to Johncom. They&#x27;re in Cape Town, ZA, 8001 and are connecting with airmobile.co.za”<p>I got to learn about some new places, postcode formats, and ISPs.
评论 #38340663 未加载
doctorMover 1 year ago
For reference I think this probably partly explains my reluctance to use A.I. to help me code.<p>If I ask e.g. ChatGPT to just code something for me then the code it outputs is a black box, and there is no &#x27;theory usage&#x27; in the parlance of the article. [Or I guess I&#x27;d have to recover the theory from the code it writes].<p>I&#x27;ve accepted by now that I&#x27;m putting myself at a disadvantage by not using A.I. at work however. Maybe another way to think about it would be that A.I. allows us to use our higher level theoretical understanding when we interact with codebase.
评论 #38338468 未加载
评论 #38325594 未加载
LoganDarkover 1 year ago
&gt; The closest we can get to transferring a theory is to demonstrate the expression of the Theory to someone over and over again until they build their own theory. That theory won&#x27;t be the same as ours.<p>This already has a term: &quot;derived meaning&quot;. Derived meaning is what&#x27;s actually created and stored in your head, and represents your particular brain&#x27;s understanding of... something. It could be a thought, it could be a procedure, it could be a memory, it could be an emotion. But it can&#x27;t be transferred to other brains; you can only hope that, by communication, you can reach some form of mutual understanding that at least fits the communication.
gavinhowardover 1 year ago
I appreciate the author explaining this.<p>I have had a Theory of what software is myself, mostly based on &quot;Programming as Theory Building,&quot; but it is good to see it put into words.<p>I struggle to build &quot;theory of mind,&quot; which means I can&#x27;t read code written by other people.<p>This means I can&#x27;t get or keep a software job, so it sucks.<p>At the same time, it is a superpower in personal projects because I can somehow document my own theory of mind. It&#x27;s counterintuitive, but my inability to build a theory of mind about other people causes me to assume less about what they know, which translates into good Theory docs.<p>My best example is [1].<p>[1]: <a href="https:&#x2F;&#x2F;git.gavinhoward.com&#x2F;gavin&#x2F;bc&#x2F;src&#x2F;commit&#x2F;22253a3a64db1870ef1befac4dc09b52f079cd44&#x2F;manuals&#x2F;development.md" rel="nofollow noreferrer">https:&#x2F;&#x2F;git.gavinhoward.com&#x2F;gavin&#x2F;bc&#x2F;src&#x2F;commit&#x2F;22253a3a64db...</a>
评论 #38345424 未加载
nighthawk454over 1 year ago
You&#x27;ll get a lot of out systems thinking then! Essentially the formalization of thinking in parts (&quot;theories&quot;) and their interactions<p><a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Systems_thinking?useskin=vector" rel="nofollow noreferrer">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Systems_thinking?useskin=vecto...</a>
评论 #38328626 未加载
评论 #38331246 未加载
sneakycr0wover 1 year ago
I tried reading this but the pop ups are so annoying that I couldn’t get past the first paragraph.
评论 #38329319 未加载
FrankWilhoitover 1 year ago
If it becomes, or is deemed, necessary to have, or recover, a theory of an implementation of an automation, then you have already lost. What is necessary is the theory of the business. If you do not have that -- and practically no one has that -- then your automations are towers of guesswork, and there is no way to determine whether they are correct.
eternityforestover 1 year ago
To me, programming is all about designing things in such a way that the &quot;theory&quot; (using this particular meaning of the world) mostly already exists.<p>I see a lot of programmers start with an idea, and then they implement it. I prefer at least a little bit of cargo cult approach.<p>I don&#x27;t re I start researching what tools are already out there and what others do in similar cases before I have any more than a vague idea of what I want to do.
onlurkingover 1 year ago
There&#x27;s this seminal paper by Peter Naur called &quot;Programming as Theory Building&quot; that arrived at the exact same conclusion when it comes to programming:<p><a href="https:&#x2F;&#x2F;gist.github.com&#x2F;onlurking&#x2F;fc5c81d18cfce9ff81bc968a7f342fb1" rel="nofollow noreferrer">https:&#x2F;&#x2F;gist.github.com&#x2F;onlurking&#x2F;fc5c81d18cfce9ff81bc968a7f...</a>
评论 #38340602 未加载
zubairqover 1 year ago
I agree with the programming as theory building. Not an epiphany for me but it is something I realised for the last 20 years. I am however glad that other people can explain it better than myself. For another good explanation of this read “founders at work” where Steve Wozniak talks about how fast it is to develop when you keep all the code (theory) in your head
User23over 1 year ago
Just a quibble, but that usage of “theory” is entirely correct. Nevertheless the point is taken that often in general usage “theory” means “scientific theory.” Anyhow, with some small consideration it should be clear that the latter is merely a subset.
namariaover 1 year ago
I find the relationship between software, code, computers and humans endlessly fascinating. The epistemological discussion here is incredible in both substance and in noticing how fast some people derail it into semantics.
dkjaudyeqooeover 1 year ago
If he replaced the word &quot;theory&quot; with &quot;model&quot; it would be much easier to understand the point.<p>(I think I&#x27;m the only on-topic comment so far.)
评论 #38325222 未加载
评论 #38335389 未加载
评论 #38325217 未加载
评论 #38328086 未加载
评论 #38325191 未加载
renoxover 1 year ago
Replace theory with abstraction&#x2F;mental model&#x2F;concept and then the blog becomes quite obvious.<p>Yes, grokking code is hard, especially low level code where the WHAT to do is intertwined with the HOW.
htkover 1 year ago
Very interesting article, thank you for sharing your epiphany. The only thing missing was an attempt to come up with a better term than &quot;theory&quot; ;).
nurpleover 1 year ago
Nuked the notification stream with UBlock: `##section &gt; ol`<p>It&#x27;s an interesting observation on the reason behind something that&#x27;s understood fairly well in management circles from its impact: Retention of software engineers is really important!!!<p>I never really had a conceptual model for the period in a project where I can&#x27;t really effectively write code outside of exploratory exercises. Building a theory of the solution to a problem is absolutely the most difficult part of any project that I&#x27;ve worked on.<p>In brownfield projects I will usually start out with a manual linting pass. I read code deeply enough to understand it to a point where I feel like I can make delinting changes to it. This helps me build up a theory of the solution space that those who came before me, the act of delinting, commiting, and pushing stands as something of a mental proxy for having written the code myself.<p>Greenfield projects are much more difficult as you have to synthesize this theory from whole cloth rather than learn it by reading the musings of coders that came before. IMO, this is incredibly valuable as very few devs I&#x27;ve met have the capacity, even if they have the experience.<p>In many ways I think that past successes in founding companies is used as a proxy signal for this skill by investors when making a bet on a venture by tenured tech founders.
评论 #38334131 未加载
评论 #38326379 未加载
评论 #38327321 未加载
gnatolfover 1 year ago
What an incredibly annoying popup. Sorry, can&#x27;t read that.
评论 #38325032 未加载
评论 #38325045 未加载
评论 #38325000 未加载
评论 #38325155 未加载
评论 #38325042 未加载
评论 #38325079 未加载
评论 #38325158 未加载
评论 #38325093 未加载
评论 #38325171 未加载
Michelangelo11over 1 year ago
Well, this is a rare case of a professional-looking site rendered completely useless thanks to a single design decision made for no apparent reason at all.
评论 #38325177 未加载
codetrotterover 1 year ago
For everyone talking about the notifications at the bottom:<p>After the page has loaded, use “reader mode” in your browser. Most browsers have this. That shows you only the text of the post, and not the notifications on the bottom.<p>Or, read a copy of it here:<p><a href="https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20231118211242&#x2F;https:&#x2F;&#x2F;johnwhiles.com&#x2F;posts&#x2F;programming-as-theory" rel="nofollow noreferrer">https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20231118211242&#x2F;https:&#x2F;&#x2F;johnwhile...</a>
评论 #38325119 未加载
评论 #38325210 未加载
评论 #38325226 未加载
评论 #38325122 未加载
评论 #38325199 未加载
_jsdwover 1 year ago
Top tip; I used my thumb to cover up the bottom part of my phone, which allowed me to read it!<p>I expect that 99% of the time it&#x27;s a perfectly fun little pop up, but right now with the post on HN it is amazingly annoying
评论 #38325254 未加载
评论 #38325232 未加载
评论 #38325183 未加载
ok_dadover 1 year ago
Look the popup is bad, but consider he probably usually gets way less visitors, so in testing it’s probably not that bad for him. Maybe a few per article usually, but with hacker news it blows up.<p>Let’s not roast the guy too much, we’re all human and like cool stuff. This would be cool with a little more work, I think.<p>Also, the article is great. It puts together a definition for the theory of what software is in a succinct way. Software is code, but any specific software is an artifact of the theories in the developers brains. Makes a lot of sense to me.
评论 #38325193 未加载
评论 #38325267 未加载
评论 #38325168 未加载
codingdaveover 1 year ago
I got here, read the comment threads and thought, &quot;Why is everyone going against HN guidelines to toss out low effort comments about the site design? How bad can it be?&quot;<p>Then I went to the page. So distracting. I just closed it and agree with everyone else. I&#x27;d recommend the author get rid of that.
评论 #38325179 未加载
twicover 1 year ago
Good outline of the idea of theory building. I especially appreciated that the author has added a feature to scare off simpletons.
评论 #38325246 未加载
ianwalterover 1 year ago
This is actually a great article even though the popups are terrible and I found the first sentence very off-putting.
评论 #38327323 未加载
humbleharbingerover 1 year ago
What the heck are all the notifications on this site?
评论 #38325218 未加载
评论 #38325241 未加载
redundantlyover 1 year ago
You might understand software, but you clearly don&#x27;t understand web design.
评论 #38325187 未加载
hmottestadover 1 year ago
Made with PartyKit if anyone wants to make their own :P<p><a href="https:&#x2F;&#x2F;www.partykit.io" rel="nofollow noreferrer">https:&#x2F;&#x2F;www.partykit.io</a>
评论 #38325330 未加载
mattnewtonover 1 year ago
what in the world is going on at the bottom of the site, it’s crazy distracting.
评论 #38324992 未加载
评论 #38325026 未加载
评论 #38325259 未加载
gardenhedgeover 1 year ago
OP, I bet that popup is turning away traffic
评论 #38325249 未加载
hyperthesisover 1 year ago
Copyright law protects computer programs as the <i>expression</i> of an idea. One idea has many expressions. If you want to modify or extend it, you need to know the idea.<p><pre><code> [webpage text follows] </code></pre> Even though I don&#x27;t respect podcasts as an information delivery system, I recently listened to a podcast that felt like having an epiphany.<p>The podcast in question was episode 61 of Future of Coding. It is essentially a read-through&#x2F;review of two papers with which I was unfamiliar, but which I believe are actually quite famous and influential.<p>Why did listening to this feel like an epiphany? Well, I suddenly felt like I understood what the deal is with software. Why is it that when you join a company, the engineer who&#x27;s been there for years seems like an incredible genius? Why do some teams that I&#x27;ve been on struggle while others manage to get everything right? Why is everyone always so keen to rewrite things?<p>The two ideas that the podcast expresses are:<p><pre><code> The concept of what a “Theory” is, according to Gilbert Ryle. That being a programmer is doing “Building theories” in the Ryle sense of the word. </code></pre> Having these two ideas explained together was really helpful. If I had read Ryle by himself, I would have thought, “interesting and useless”. If I had read Programming as Theory Building without knowing the theory concept, I would just not have understood.<p>I recommend listening to the podcast and reading the paper. But if you don&#x27;t want to do that, I&#x27;m going to try and explain the two points.<p>strange What is a Theory, According to Gilbert Ryle?<p>When Ryle says theory, he doesn&#x27;t mean anything like what other people mean when they say theory. Annoying. He should have just come up with a new word. What he means is the thought object that exists in our minds which allows us to do things.<p>I, for example, know how to cook pasta. When I cook pasta, that&#x27;s a certain expression of this knowledge. When I try and explain to you how to cook pasta, that&#x27;s a different expression of it. Neither of those expressions contains everything I know about cooking pasta. And in fact, there are parts of what I know that I can&#x27;t really express in any way. This knowledge is what Ryle would call a theory. I have a “Theory of how to cook pasta”. This theory is not something that exists in language or action - it’s a something that we can never fully express. The closest we can get to transferring a theory is to demonstrate the expression of the Theory to someone over and over again until they build their own theory. That theory won&#x27;t be the same as ours. What Does it Mean that Programming is Theory Building?<p>It means that the code base we create is not the true product of our work. The real product is the mental theory of that code base which:<p><pre><code> Allowed us to create it in the first place. Allows us to diagnose problems with it and fix them. Allows us to modify it easily. </code></pre> If I think about times when I&#x27;ve worked on a team that works well and gets stuff done, it&#x27;s been a team where:<p><pre><code> Someone has been there for a long time, since the start of whatever code base&#x2F;feature we work on. Other team members have joined slowly, and had a chance to work with the people who know more. The area of focus does not change. We haven&#x27;t been reassigned to a random existing project, or asked to fix some other team’s work. </code></pre> The paper also talks about what happens when all the people who have a theory of a given program stop working on it. It dies. Yikes. It’s claimed that we can’t rebuild a theory from code and documentation.<p>This model explains a few curious phenomena:<p><pre><code> What “legacy code” actually is - it’s a code base which is no longer maintained by people who have a theory of it. The solo engineer who can make a better product than a team of equally competent professionals. The solo engineer has spent the time to build a complete theory of their program, the professionals move between projects regularly - and only have theories of what they&#x27;ve worked on. Why getting up to speed with unfamiliar projects is so much harder than just rebuilding the thing. To truly build a theory, you need to mentally rebuild the existing code base anyway.</code></pre>
评论 #38325326 未加载
pixelbathover 1 year ago
Holy crap, I tried to read this article but could not get over the constant motion in the corner. Can you please add a way to suppress this?
评论 #38325253 未加载
shmdeover 1 year ago
Epilepsy warning.
评论 #38325272 未加载