A novice was trying to fix a broken Lisp machine by turning the power off and on.
Knight, seeing what the student was doing, spoke sternly: "You cannot fix a machine by just power-cycling it with no understanding of what is going wrong."
Knight turned the machine off and on.
The machine worked.
It's often not this dramatic but I see this happen all the time, when someone doesn't know the source of a problem and tries to solve it by brute force (with C, it's usually "adding and removing * and & until it works") when stopping to understand what's going wrong would have lead them to the issue directly.
I didn't see the one that I'd say is the most important taoist teaching for programmers: "Vomit your intelligence" (found in Zhuangzi, not sure how it is translated in English, in French it's "Vomis ton intelligence").
I understand it this way: intelligence in our activities is this kind of explicit cleverness that is usually visible and smells its freshly graduated student eager to use whatever he learnt recently. Look, I can use metabrogramming to avoid duplicating these two lines of code!
Most very annoying landmines I find in refactoring code code are just side effects of this kind of intelligence. And usually "dumb code" work faster, better, is easier to maintain, and, well, requires more (real) intelligence and experience to write.
Please note that this is a point of view from seasoned coders. From the first time php-scripter, using intelligence and moderate factorisation is obviously advised.
A manager asked a programmer how long it would take him to finish the program on which he was working. "I will be finished tomorrow," the programmer promptly replied.
"I think you are being unrealistic," said the manager, "Truthfully, how long will it take?"
The programmer thought for a moment. "I have some features that I wish to add. This will take at least two weeks," he finally said.
"Even that is too much to expect," insisted the manager, "I will be satisfied if you simply tell me when the program is complete."
The programmer agreed to this.
Several years later, the manager retired. On the way to his retirement luncheon, he discovered the programmer asleep at his terminal. He had been programming all night.
It's a bit more contemporary and is still being added to. I can't figure out who the author is though. All I know is they go by the name of Qi https://github.com/QilessQi
The difficult part of programming is programming. I mean just sit and dissolve yourself into the code and it engulfs you in a timeless world. I often feel the urge to be on the email or internet or HN kills this sort of dissolution and very rarely I get this. When you get it, it is absolutely delightful!
I live in dark world of cold steel and dungeons. One have to hack and slash bugs not go easy on those. So this Tao thing is not for me, I am the crusher of users. Behold as I wield their skulls! I only have to hide from manager when I'm posting on HN instead of slashing another bug. :)
Upon my departure from the Marine Corps I received a Ka-bar with "After three days without programming, life becomes meaningless" etched on the blade. One of the greatest things ever.
The points about rejecting fame deserve mention. Not just fame, but the pursuit of it.
You have a finite amount of time in a day. You can allocate it between careful study and practice of programming, or retweeting today's tech groupthink so you can stay relevant.
Fun read. However, it seems to promote a very strict philosophy - the most a novice coder can hope to achieve is the mastering of Programming Tao.
I disagree with this.
Programming is a means to an end, not an end in and of itself. Coding in the shade of a great tree might be all well and good, but how will you ever see the world if you stay in the shade of the greatest of trees?
I feel programming is only an act like painting. The point is when you are fully into something, it does not matter if you are sitting in the shade of a tree or otherwise. You begin to flow.. and outside disappears.
Thus spake the Master Programmer:
"After three days without programming, life becomes
meaningless."
Sounds like the Master Programmer has never worked at a company
that crunched you for 80 hour weeks, for weeks.
8.4
Hardware met Software on the road to Changtse. Software said:
"You are Yin and I am Yang. If we travel together, we will become
famous and earn vast sums of money." And so they set forth
together, thinking to conquer the world.
Presently, they met Firmware, who was dressed in tattered rags
and hobbled along propped on a thorny stick. Firmware said to
them: "The Tao lies beyond Yin and Yang. It is silent and still
as a pool of water. It does not seek fame; therefore, nobody
knows its presence. It does not seek fortune, for it is complete
within itself. It exists beyond space and time."
Software and Hardware, ashamed, returned to their homes.
I don't understand this one. Apple seems like the
embodiment of hardware and software earning vast sums of money. It's worked out well for them.
Maybe they're saying that firmware is an important design consideration that requires careful attention.
To make a hard distinction between hardware and software, and thinking that all problems can be solved by using strictly one or the other, is a mistake. Master Joel wrote¹ that all abstractions are leaky, and so it is with any working system – any system needs to be a meld between hardware and software, where neither can keep its identity wholly intact. (Writers of) Firmware know this well. Therefore, the Tao cannot exist in either hardware or software, purely by themselves.
Firmware is a subtle body,with elements from both worlds ("hardware" and "software"), and a computing system is harmonious when "software" and "hardware" do not step over each others' abstractions, but build a coherent, meaningful system, making the distinction between them relevant in terms of taxonomy, but not disonant in terms of code.
Sadly, there are relatively few well-known examples of this nowadays. I struggle to build such systems every day, but I think I fail most of the time :-).
Sounds like the Master Programmer has never worked
at a company that crunched you for 80 hour weeks, for weeks.
No, that's just a separate problem:
Why are programmers non-productive? Because their time is wasted in meetings.
Why are programmers rebellious? Because the management interferes too much.
Why are the programmers resigning one by one? Because they are burnt out.
Having worked for poor management, they no longer value their jobs.
"Sounds like the Master Programmer has never worked at a company that crunched you for 80 hour weeks, for weeks" - I guess Master Programmer is smart enough to avoid such workplaces.
> Sounds like the Master Programmer has never worked at a company that crunched you for 80 hour weeks, for weeks.
Nor has the master programmer worked for a company populated by utter morons who leave a large minefield in every task where all one-day estimates turn into one week ones the moment you start sharpening your tools...
(that's reality in corporate land)
Too bad I'm sitting here reading HN and playing my piano for a bit between emails...
You're looking at an old text here (even though it was just posted on HN). From the mention of DOS, I'm guessing it was written in the 1980s. Inclusive language was not yet common at the time.
You'd like it to be re-written with inclusive language. It's OK to want that, I guess, but... when faced with a pre-inclusive-language text, what will you do? Accept it for what it is (old, written by people not yet aware of this issue)? Or will you reject it because of what it is not?
Perhaps the best answer is to find the author and gently suggest an inclusive re-write. (And perhaps that's what you were trying to do, but I suspect that the poster is not the author. Finding the author may unfortunately take a bit more digging.)
This is more akin to literature. Many stories are full of men, but this doesn't mean they are irrelevant to women. No one is purposely trying to exclude you.
[+] [-] keithflower|11 years ago|reply
"What are you doing?", asked Minsky.
"I am training a randomly wired neural net to play Tic-tac-toe", Sussman replied.
"Why is the net wired randomly?", asked Minsky.
"I do not want it to have any preconceptions of how to play", Sussman said.
Minsky then shut his eyes.
"Why do you close your eyes?" Sussman asked his teacher.
"So that the room will be empty."
At that moment, Sussman was enlightened.
Hacker Koans: http://en.wikipedia.org/wiki/Hacker_koan
[+] [-] makmanalp|11 years ago|reply
[+] [-] gbog|11 years ago|reply
I understand it this way: intelligence in our activities is this kind of explicit cleverness that is usually visible and smells its freshly graduated student eager to use whatever he learnt recently. Look, I can use metabrogramming to avoid duplicating these two lines of code!
Most very annoying landmines I find in refactoring code code are just side effects of this kind of intelligence. And usually "dumb code" work faster, better, is easier to maintain, and, well, requires more (real) intelligence and experience to write.
Please note that this is a point of view from seasoned coders. From the first time php-scripter, using intelligence and moderate factorisation is obviously advised.
So, to this nice list, I'd add a
[+] [-] cousin_it|11 years ago|reply
A manager asked a programmer how long it would take him to finish the program on which he was working. "I will be finished tomorrow," the programmer promptly replied.
"I think you are being unrealistic," said the manager, "Truthfully, how long will it take?"
The programmer thought for a moment. "I have some features that I wish to add. This will take at least two weeks," he finally said.
"Even that is too much to expect," insisted the manager, "I will be satisfied if you simply tell me when the program is complete."
The programmer agreed to this.
Several years later, the manager retired. On the way to his retirement luncheon, he discovered the programmer asleep at his terminal. He had been programming all night.
[+] [-] gwern|11 years ago|reply
> 56. Software is under a constant tension. Being symbolic it is arbitrarily perfectible; but also it is arbitrarily changeable.
http://www.cs.yale.edu/homes/perlis-alan/quotes.html
[+] [-] tombh|11 years ago|reply
It's a bit more contemporary and is still being added to. I can't figure out who the author is though. All I know is they go by the name of Qi https://github.com/QilessQi
Also, all the koans are on Github and translations can be submitted via PRs https://github.com/alessandro1997/the-codeless-code
[+] [-] teddyh|11 years ago|reply
https://en.wikipedia.org/wiki/The_Tao_of_Programming
[+] [-] _kst_|11 years ago|reply
[+] [-] peaton|11 years ago|reply
[+] [-] thallukrish|11 years ago|reply
[+] [-] _pmf_|11 years ago|reply
[+] [-] ozim|11 years ago|reply
[+] [-] cfeduke|11 years ago|reply
[+] [-] bradleysmith|11 years ago|reply
[+] [-] mattgreenrocks|11 years ago|reply
You have a finite amount of time in a day. You can allocate it between careful study and practice of programming, or retweeting today's tech groupthink so you can stay relevant.
[+] [-] falcolas|11 years ago|reply
I disagree with this.
Programming is a means to an end, not an end in and of itself. Coding in the shade of a great tree might be all well and good, but how will you ever see the world if you stay in the shade of the greatest of trees?
[+] [-] thallukrish|11 years ago|reply
[+] [-] JamesBaxter|11 years ago|reply
"I don't know whether I am Turing dreaming that I am a machine, or a machine dreaming that I am Turing!"
[+] [-] thristian|11 years ago|reply
"Now I do not know whether I was then a man dreaming I was a butterfly, or whether I am now a butterfly, dreaming I am a man."
...so I'm guessing that was not a real Turing quote, but possibly a reference to the Turing Test.
¹: https://en.wikiquote.org/wiki/Zhuangzi
[+] [-] unknown|11 years ago|reply
[deleted]
[+] [-] sillysaurus3|11 years ago|reply
Maybe they're saying that firmware is an important design consideration that requires careful attention.
[+] [-] teddyh|11 years ago|reply
To make a hard distinction between hardware and software, and thinking that all problems can be solved by using strictly one or the other, is a mistake. Master Joel wrote¹ that all abstractions are leaky, and so it is with any working system – any system needs to be a meld between hardware and software, where neither can keep its identity wholly intact. (Writers of) Firmware know this well. Therefore, the Tao cannot exist in either hardware or software, purely by themselves.
1) http://www.joelonsoftware.com/articles/LeakyAbstractions.htm...
[+] [-] weland|11 years ago|reply
Sadly, there are relatively few well-known examples of this nowadays. I struggle to build such systems every day, but I think I fail most of the time :-).
[+] [-] azernik|11 years ago|reply
[+] [-] CmonDev|11 years ago|reply
[+] [-] pling|11 years ago|reply
Nor has the master programmer worked for a company populated by utter morons who leave a large minefield in every task where all one-day estimates turn into one week ones the moment you start sharpening your tools...
(that's reality in corporate land)
Too bad I'm sitting here reading HN and playing my piano for a bit between emails...
[+] [-] dbpokorny|11 years ago|reply
Clearly never used HyperCard.
[+] [-] Sweyla|11 years ago|reply
[+] [-] AnimalMuppet|11 years ago|reply
You'd like it to be re-written with inclusive language. It's OK to want that, I guess, but... when faced with a pre-inclusive-language text, what will you do? Accept it for what it is (old, written by people not yet aware of this issue)? Or will you reject it because of what it is not?
Perhaps the best answer is to find the author and gently suggest an inclusive re-write. (And perhaps that's what you were trying to do, but I suspect that the poster is not the author. Finding the author may unfortunately take a bit more digging.)
[+] [-] csixty4|11 years ago|reply
[+] [-] unknown|11 years ago|reply
[deleted]
[+] [-] hashberry|11 years ago|reply
[+] [-] pit|11 years ago|reply