3,090 karma · joined August 22, 2007
[ my public key: https://keybase.io/hexstream; my proof: https://keybase.io/hexstream/sigs/LEcxc2CHs5onKwnA7vtRPPYzR00wDTaKI3kCKUhdYXI ]
On the other hand, if you have that kind of attitude it will probably be mutually beneficial if you stay the hell away from him so it's a good strategy.
"We all know that the only mental tool by means of which a very finite piece of reasoning can cover a myriad cases is called "abstraction"; as a result the effective exploitation of his powers of abstraction must be regarded as one of the most vital activities of a competent programmer. In this connection it might be worth-while to point out that the purpose of abstracting is not to be vague, but to create a new semantic level in which one can be absolutely precise.
[...]
Now for the fifth argument. It has to do with the influence of the tool we are trying to use upon our own thinking habits. I observe a cultural tradition, which in all probability has its roots in the Renaissance, to ignore this influence, to regard the human mind as the supreme and autonomous master of its artefacts. But if I start to analyse the thinking habits of myself and of my fellow human beings, I come, whether I like it or not, to a completely different conclusion, viz. that the tools we are trying to use and the language or notation we are using to express or record our thoughts, are the major factors determining what we can think or express at all!"
Make my own versions of these pieces of infrastructure in one or more variants of Lisp, using various novel approaches or combining some "old" approaches that are nevertheless not used as much as they should be today, and comprehensively document it all:
My own web framework (in progress), window manager, UI toolkit and layout system, 3D engine, video editor, image editor, video and sound codec, emacs-style editor, operating system, kernel, Common Lisp implementation, virtual machine, BIOS, OS bootstrapper.
Also, maybe an NES or SNES emulator, for fun and maybe trying to make a full blown modern development environment to make it easy to make whole new games for these consoles instead of just making more or less elaborate hacks to already existing games.
Learn to play the piano, guitar and violin. Learn to compose my own music.
Not that I expect or count on it, but it would be convenient if a treatment to stop aging appeared while it's not too late for me, cuz I'm pretty sure I'll be out of time before I'm doing what I want to do properly...
I spent 4 months, full-time (I think I was a bit depressive and unproductive, though (that might have to do with the difficulty of the problem a bit)) to make a goddamn "error message merging" system where you specify some merge rules for error messages, and then said messages are "merged" efficiently at runtime (with another of my adaptations of the awesome Rete algorithm).
For instance, as a trivial example merging "Please enter your Username." and "Please enter your Password." could yield "Please enter your Username and Password."
Merging error messages efficiently with a great concise syntax looked SO EASY =/ I was wondering why the hell no websites (that I know of) do that because it's a pretty obvious feature to me... Well, now I know. People don't really mind that much about these things (maybe they just have low expectations) AND it's really hard to implement.
I finally made it, right now the implementation is utter crap, with some missing features and some bugs but the general architecture is there and works. I'll clean it up and document it within a few months, probably.
It's one of the hardest things I ever made so far in programming.
Let's not discount the fundamental advances to compilation and performance of "dynamic" languages of relatively recent years. Just look at Javascript.
Dynamic languages look much less amenable to optimization at first than static languages, but many new techniques have been discovered, and sometimes there are even optimizations that are only possible to do at runtime if the environment supports it.
Or are you using some sort of plugin that gives you more info inline?
Sign me up! (Hum. So I'm a bit of a "savings" cynic.)
Press any key to continue.
"If you have a good life, commit suicide. If you have a great wife, leave her. If you have kids, leave them and never return. If your company starts making a profit, sell it at a loss. If you're healthy, recklessly endanger yourself. If people like you, start acting like an asshole. If you have a nice social network, cut off all ties. If you're rich, waste it all and then go live in the street. If you like this article, write me a scathing piece of hate mail."
Not if $DISPLAY is cleared ;P
But those might not be designing hardware either...
Watch your tone. Mindlessly contradicting him in his field of expertise is not advisable.
> No, seriously. Take command line parsing. You want common syntax for options, right? And you want some of them to accept values, right? And those values can be strings, and booleans, and integers, right? And integers can be decimal or hexadecimal, right? And they can be values of user-defined types, right? And they can have help strings, right? And you’d like to generate help screens from them, right? And GUIs with property pages? And read them from configuration files? And check the legality of flags or sets of flags, right?
> Sure. It’s not a big deal. Trivial, even. (If you’re smart, everything is trivial until you fail completely due to exceeding complexity. And admit that you failed due to exceeding complexity. The former takes time to happen, the latter can never happen.)
So-called "opt-out" must DIE DIE DIE!
>> Error correcting codes do exist!
He acknowledged this explicitly immediately after, on the next sentence:
> [For the sake of completness I add that the picture is not essentially changed by the introduction of redundancy or error correction.]
Think of what happens if a single bit is changed in the error-correcting part of the program.
As an analogy (I hesitate to use one because of the article), you could have a high-level representation of HTML that would make it totally impossible to generate <HTML></NOTHTML>, which is not the case if you use a general-purpose system. (not a foolproof analogy but anyway)