My Roommate's a Genius
farhadg.com
farhadg.com
I was living in a small rectangular room at Caltech, with the door on one of the short sides and a window and radiator on the other short side. My bed was a rectangular framework that the mattress sat on top of. The long sides of the bed were parallel to the long sides of the room, said orientation being forced by the narrowness of the room.
The pillow side of the bed was toward the window and radiator. I decided I'd rather sleep with my feet on that side and my head on the other side.
One afternoon, I set about reorienting the bed to accomplish this. Because of the narrowness of the room, both horizontally and vertically, it was quite a challenge to flip the bed around, but after quite a struggle I accomplished it. While I was doing this, a small crowd had gathered to watch (but not help...the bastards).
After I finished, the spectators pointed out that the bed frame and mattress were symmetrical, and the sleeping orientation was determined entirely by what side you tucked the sheets under and where you put the pillow. Flipping the sleeping orientation would have taken a normal person 10 seconds.
Doh!
A buddy of mine lived in one of those extra cheap campus dorms where each room is a mirror image of itself with a bed and desk against each wall with a bookshelf bolted to the wall above. I was hanging out on the evening when he decided to take down one of the bookshelves.
I never got a chance to ask quite why he was unbolting the thing from the wall, because no sooner had he removed the 3rd bolt than there was this enormulous crashing disaster in the room next door.
Sure enough, glancing across at the opposite wall, the bookshelf on that side had a washer and a nut threaded onto the end of a bolt.
These 'Doh' situations happen to everyone. I once carried large heavy wheel for about 50 meters before I realized I could just roll it on the ground :)
Regarding to hacking around I think almost everyone could do something if he just stop and try to think what could be done. We often don't notice opportunities right before our noses because we simple don't focus on trying to do something with it. I myself enjoy that type of hacking. Recently we had some reconstruction at home and we had some leftover materials in garbage pile ready to be thrown away. So I grabbed one leftover ceramic floor tile, couple of stair wooden balusters and some thin plywood. I sawed each baluster in half (they had central symmetry), screwed them to plywood on both sides, glued ceramic tile to plywood from one side and small pillars to the other side and then painted wood. Couple of hours of work and got myself a pretty slick looking side table, which I needed at the time :) The only thing I bought were small silver pillars which cost couple of dollars.
Here's photo: http://i.imgur.com/6OsLDPu.jpg
Bender's picture is also some kind of hacking, I printed picture at the local photo workshop and made the frame from a very cheap plastic ceiling plinth.
I wish I could reduce it to some algorithmic problem, but by the end of the day, I look like someone wrestling an alligator, as I struggle to put it on.
This one took me a while to figure out, but was proud when I did. :)
Doh!
On a related note, I wish my wife was with me at the time. I often tell her she's the smart half of the couple, since I repeatedly have these "Doh!" moments but when she's around she is able to correct me and show me there's a simpler way :)
Anecdotal but surprising, my fellow musician friends are more prone to what I believe to be the hacker thinking than most of the software programmers I work with. Maybe it is because of some unfortunate psychological barrier, or the result of a strong focus on computer related things and discard for the rest, I honestly don't know.
Anyways, what this roommate did is super cool, and I'd suggest everyone here to start hacking outside of their comfort zone, it can be very rewarding for some. Building things feels great, and being able to apply your hacker thinking to various things is a very useful skill to have.
I wonder what makes them tick like this!
Music, at its heart, is the ultimate in making do with what you have - I just think that folkies are more likely to admit it!
It's not so much that your teachers were crazy imaginative, it's that most people today are so freaking lazy and rich (while claiming overwork & poverty).
In fact, a lot of us probably under-perform when it comes to real-world hacking because we're so caught in the virtual. I know that's true for me.
This did give me a bit of a new perspective on things, and makes me wonder if I should start some more real-world hacking...
That's what I think as well, and for me this mindset is a defining characteristic of hackers. Most of programmers nowadays are not hackers. They used to be, but then programming went mainstream and attracted people without the hacker mindset.
Also the term hacker got terribly diluted recently. Now everyone and their dog is a hacker just because they know that JavaScript is something that is used 'on the interwebz' (cf. "growth hacking"). I guess we need a new term for people like OP's roommate.
That takes a hacker. Everything else is just a builder (be it building code, or cabinets, or robots). The core ideology of being a hacker is seeing beyond the normal functionality of the item like this roommate has seen. He looked at the wardrobe and saw a sliding table. That is hacking.
Unfortunately, I think my developer mindset actually makes physical hacking a lot harder due to 2 phenomena:
1. Code is cheap. Materials are not. I'm used to being able to churn out additional code with basically no cost to get things done, not to repurposing existing code (this is different from refactoring to abstractions).
2. Laziness is a quality in software development, but a major obstacle in physical development. I'll quickly abandon physical projects because I can't find an optimally efficient hack to finish things in minimal time.
I'm wasting wood! OMG! But I've made progress. Watching contractors has helped. I was astonished how much they waste, treat things as disposable. My father (a hardware guy) certainly would not have approved.
I'm framing a new closet with bypass sliding doors. I really have no idea what I'm doing. I knocked apart the first two attempts and hope the third works better. And I'm now okay with it. It's been kinda fun.
While software can't be perfect, it has to be as flawless as possible. Code isn't cheap, it takes time. Who knows what else you could've built/made/learnt instead of fixing something cuz it costs "nothing"
That's an absolutely terrible approach to software development. You can test a program as many times as you want before releasing it, but there's no equivalent iterative process for making a house.
If you develop with that attitude, you'll never get anything of real value done. After all, "le mieux est l'ennemi du bien."
An algorithm has mathematical underpinnings and can be created entirely on paper first. Turning ideas into applications however is drastically enhanced by prototyping extensively.
This is pretty much why real engineers scoff at the title 'software engineer.'
Unless they program in Ada.
It was probably a root barrier which was put there for the sole purpose of stopping the trees from growing and destroying your house.
Framing lumber is cheap, but that's no excuse to waste so much. Contractors do it because they are charging other people for materials :)
In your case, if you are going to be remodeling your house and doing structural carpentry, i'd recommend "Renovation 4th edition" by Michael Litchfield as a starter book.
Also if you start doing something with more expensive lumber, like say, very high end woodworking, you will see nobody treats stuff as disposable.
I've read the books, watched the videos, read the codes, helped my handyman friends. There's no substitute for DIY.
For the closet, I make a lot of little "learning opportunity" mistakes. I didn't make sure one of the header boards was truly true. I put 3-1/4 inches nails clean thru. Lots of trial and error with my spiffy new nail gun. Etc.
As for the software, I must be doing that wrong too. I'm always rewriting my own stuff.
I guess I disagree. Without trying to sound like an elitist, my father taught me that doing this kind of work is not "brainy" work, but it is labor intensive and requires careful thought. With no offense meant (really!), it sounds like you are skipping the last part :)
Every book I have tells you to make sure header boards are true. Nailing schedules are often controlled by building code (though maybe not in this exact case, dunno where this closet is :P). Unless you are building a house from scratch, a framing nail gun is probably overkill, etc.
These things you call "learning mistakes" sound like "not being careful" to me. I see this often with software dev friends I helped. Because they are so used to throwing stuff out, they almost try to "incrementally" frame a window or whatever until they get one that works, rather than carefully think about where they are putting nails, measuring, marking, leveling, etc, before doing anything.
Remember that the contractors and handymen you watch have done this all a long time, and can probably do things like simply look at a frame and tell whether it's true with high accuracy. They also don't need to think as much about how to put nails in.
Again, i'm really not trying to tell you "you are doing it all wrong", just offering an opinion :)
1. Materials are cheap, how much did the roommate spend?
2. Laziness in code and physical is exactly the same psychological fuel: being bored doing always the same annoying task (eg remove the things to make room for the pizzas) is a strong incentive to find a hack to avoid the bore (add a contraption on the side of the table).
A former colleague was a great hacker, and he also did his own rollerblades, and built a part of his house.
I am some kind of software hacker too (daylong in python internals) and I did fix a car with a stone, I did elevated bed on two shelves, and currently I'm transforming a dead pot plant root into a nice piece of arte povera.
Another way for software and physical world hacking to be similar: in both cases, many people believe it to be hard, are afraid or somewhat restrained, but nearly all it takes is to just say to oneself "it's easy, let's try". While there are a few people with a brain that is no fit for fiddling with computers or screwdrivers, most of them who think they can't do it just never tried.
1. I've gone into hardware stores for small DIY tasks and parts/materials are not stuff you can buy with spare change. Tools and equipment are even more expensive.
2. Getting up and doing something physical for some of us takes a lot more effort than a mentally strenuous task.
For me digging deep into some code base, grepping the docs, reading some code in language I am not familiar with or that I dislike is exhausting, mentally and physically. I actually sweat a lot doing that, and it is the kind of sweat that stinks. Doing some woodwork is often less tiring, and the sweat it produces does not smell that bad.
But the point is only that he only had one door. No room for trying it, breaking the door, and then trying again (your door is broken). Coding is the opposite: you get infinite retries.
> For me digging deep into some code base, grepping the docs, reading some code in language I am not familiar with or that I dislike is exhausting, mentally and physically. I actually sweat a lot doing that, and it is the kind of sweat that stinks. Doing some woodwork is often less tiring, and the sweat it produces does not smell that bad.
I envy you. I love everything on a computer (and never exhausting). Doing anything physical makes me completely miserable (possibly because I'm in terrible shape).
Shape: not sure it can be helpful but you could try to convince yourself that it's only in your head. I have seen very fat people doing physical work and enjoying it, maybe needed more frequent pauses, and but quite able to do anything except crawling under the table.
First of all, the materials were "free" because they were already bought & paid for. Second of all the more important observation is that even though that first closet door was "free", he didn't have an infinite number of doors to mess up, throw out, and start from scratch.
You see some of this sort of thing from the blue collar part of society in the US - "yankee ingenuity" is what it sometimes gets called here.
This is an essay by Tom Wolfe about Noyce and Intel that has similar overtones:
But, noticing extreme lack of interest in modifying your enviroment in a practical way (or lack of perception that your enviroment can be easily improved) amongst the general populace, yeh. He's an outstanding dude. These things tend to be uncommon.
It's not genius though. Far from it. Don't devalue genius.
As a side note, I value even more geniuses that make models of the process of modelling. Meta-geniuses, so to speak. Not many of those though. One needs only to see into our progress concerning artificial intelligence to confirm that.
EDIT:
I'm curious about something else... Sentences starting with "I'm curious" usually present an attack in a form of preparation for the punchline upon the expected answer. Not a general rule, but I'm usually right interpreting them as such in both cyber and real world. Was yours one? What did you think I was to answer? If 'yes', what was the presupposed killer line or were you to improvise? Was it premeditated at all?
I am genuinely curious. :)
I'm not sure if I even know what it means to be a genius, in literal terms. I use the word "genius" all the time, and your reply made me think about how generously I use it.
About your parent post, maybe the poster was simply trying to start a constructive discussion. It is HN, after all.
As a programmer and lifelong STEM person, I could be biased. Even though I hold that everything is subjective, it's a spectrum and art is just so subjective. How do you even begin to quantify the level of genius of a musical composition?
From what I know, he was well trained from early childhood, had talent to boot, and lucky enough to end up composing on the court. Being a workaholic helped too.
I'm almost refraining from making a judgement, but if I had to force it - no, he's no genius in my book. Once again, I really could be right as well as wrong about that. That doesn't prevent me from having a pet hypothesis that him, being labeled as prodigy right off the bat, got him into a situation where he was allowed to compose tunes that would appeal to many, as opposed to your generic court composer, who bows to kings wishes. Which is a sort of little revolution right there - court approved pop music. For all I know, he's the 18th century's Lady Gaga.
But not to stop your point right there, I can say that Frank Zappa would qualify as genius for me. I can really follow his music and feel his firm grasp of rhythmic patterns along different sections as well as his control of general timbre. He even called his process of music composing/performing as "sculpting the air". I can sense him creating a quite literal model of reality right there. And, unlike for Mozart, I kind of have much more information about the current state of the matter when Zappa came in.
Amongst other musicians I consider genius - Iannis Xenakis, Arnold Schoenberg, John Cage, Edgard Varèse... You'll find them usually labeled as experimental or avant-garde. Many quacks in that genre though.
About the general population I call social bias: its not cool to do these space-saving hacks, people think you are being cheap and unfashionable, they will rather work themselves to death to afford a bigger place that ironically they now can't enjoy than deploy one of these solutions.
Same with cars: $500 can get you a nice DIY carputer that blows 99% of all factory equipment out of the water, but most people will approve the POS $2000+ optional you get from the dealership while talking smack about the system you built yourself.
Not sure where he got his ideas from. His front door could be turned into a cash register + counter + door at the same time.
The store was full of furniture hacks.
Edit: Cut down the snarkiness.
The OP's openness to criticism is appreciated.
For me they don't, not the arrow keys, not PgDn or PgUp, not Vimium compatible (j,k,g,d,u), and since no scrollbar to click only the scroll-wheel allowed me to see the rest of the article. (Chromium 30.0.1599.114 on Ubuntu 13.04)
(Oh, I forgot that the web browser is not an application, but a platform and an OS in its own right, and has replaced the native OS. Silly me.)
Or the laptop, with it's silly form factor?
But sure, everyone that publishes some text better make sure they account for every context that it might get viewed in.
In the spirit of offering solutions, here's some code you can use to add a 'Narrow' button to your browser:
I thought it was bizarre that you thought having every author of a webpage put some noise in their code was the right place to fix your technology stack.
Visual presentation is a hard problem, has been ever since the tele-type days. You're always going to need some "noise". I'm not saying you have to go full-hog with design bling, but you should at least learn enough about responsive CSS so that your site is usable across the three main types of screen it will be displayed on.
Also, I'm pretty sure that (at least for simple pages) styling the body element will work just as well.
That way content can handle all the edge cases that different screens can throw at them. And different browsers can handle things like text sizes the way they want to.
You don't want to have to make individual websites cater to individual screens or browsers. There's just too many of both. The interface between them needs to be a loose coupling.
This way a page with no extra width styling still gets presented to the user in a sensible fashion. It's probably a looser coupling than insisting that every page anticipate and handle the screens it might be viewed on.
The (technically) ideal place to solve this is in your browser's user stylesheets (then you can have the page look however you like!), but that's a bad solution right now for obvious reasons (how many people even know that they exist?).
The right way to do this would involve an evolution in the community where you could easily get the content you need in JSON format or similar. Then you can create your own presentation, or, more likely, subscribe to a site/service that collects user-created presenters.
When user stylesheets were conceived this is what HTML was.
You do if your data is a document.
And after CSS was introduced, HTML was definitely not supposed to be presentational.
A document mixes information with presentation. It's not data. Because it mixes information with presentation, you have to re-prepare it for each medium you intend to display it on.
HTML is a poor document format. If you store your document as HTML, then you also have to store the CSS along with it or it won't be a complete document. Unless you want to include the styling in the HTML file, a kludge which violates the Single Responsibility Principle.
There are plenty of document formats out there that don't have this issue, like PDF or RTF.
If you want your document to look more like data, then what you do is factor out all the atomic bits of information into values that you can then input into a database. Then write code to present it. Works well for structured documents like orders, invoices, or reports, less so for unstructured information like blog posts. For these, mixing presentation with information is unavoidable, just adding bold-face to a word means you'll need to store presentation information in your data. The "semantic web" is intended to address this.
> And after CSS was introduced, HTML was definitely not supposed to be presentational.
Presentation involves more than just style. CSS handles the style of web content, HTML handles the structure.
HTML is emphatically not a poor document format, but it satisfies different requirements than PDF and RTF do. The weak connection between structure and what you call "style" (what I would call presentation) is a feature; it allows clients to modify the presentation to suit their needs. If I want a bigger font or higher contrast or a smaller column width, I'm able to do that because of the separation between structure and style.
But (as you rightly pointed out) this is a lot harder than it should be (and harder than it used to be). As a result, when an HTML document doesn't work for someone (due to its presentation) they have to complain to document creators instead of merely configuring their client (once) to suit their needs. This sucks.
It's hard because doing this is moving in the wrong direction concerning the intended abstractions.
As I said earlier, a document combines unstructured information with presentation, and you have to re-do the document every time the presentational logic changes. This is necessary because the information in the document is unstructured, it's not like an order form.
Because you cannot predict what form unstructured information will take, the presentational logic is necessarily strongly coupled with the information. That's why it's hard to do what you want. You can pop open Dev Tools and manually do it, but you can't write a program that will take _all blog posts_ and restructure them the way you want to, because _all blog posts_ is impossible to reason about.
No amount of evolution to the HTML or CSS standards will work out this particular bit of complexity. If you could standardize a blog post, then you could write a program to do it. But it would only work on posts that meet the standard.
Say you made it so every blog CMS out there stored the text in the DB in Markdown format and provided an API so you could get at the Markdown. Then you could do what you say, provide your own styling. What this would be doing is introducing a separation of concerns. You push most of structure out of the data, and divide up styling duties between a base level (Markdown) and an upper level. (whatever you're using to display it) You may not even need the API if the CMS doesn't screw around too much with the presentation by putting, say, ads, in the middle of the content. Then you could screen scrape and convert the generated HTML back into Markdown, but again, this is the wrong way to go, (depending on concretion rather than abstraction) and prone to breakage. You really need the API layer to do this properly.
But you can't hope that one day HTML and CSS will make sense again like the old days and that user-styling will work again. It only worked before in the very early days of the web because everything was super simple and people could live with the edge cases that cropped up, not because the underlying domain changed. That solution was always brittle, and it broke the second people wanted greater flexibility in presentation.
This is exactly what I'm saying.
> Then you could screen scrape and convert the generated HTML back into Markdown,
Why do you want the Markdown at all?
Because you always want to depend on abstraction, not concretion. If you have a whole bunch of data, and you know that all the data has 7 fields and none of the entries in field 3 are null, then that's much easier to work with if you don't know how many fields are in your data at all, or if some of the data has 9 fields and some of it has 3. If you have this situation, then you have to take an extra step to clean your data before you can reason about it properly.
The HTML you get when you go to a web page is anything but an abstraction of a data type. If you want it to get that way, now we're back to telling the whole web how to make web pages.
You don't think that "this is an article", "this is a paragraph", "this is a link", "this text should be emphasized" are abstractions? And how is Markdown different, when it describes exactly the same elements of a document?
> now we're back to telling the whole web how to make web pages.
Telling people how to make web pages isn't a problem - that's what the HTML standard is. Depending on the whole web to make their pages suit your individual needs is a problem.
It's not. There's many different ways to do this with HTML/CSS. You can use bold tags or spans. If you use spans, then you have to understand the class and the CSS before you can tell that this text is supposed to be bold-faced rather than colored differently.
Links can be specified in the HTML or added in with jQuery. An article can be described with a semantic HTML tag or a div with a class. If it's the latter, you've got to parse the class and figure out what it means. If you're lucky it will be 'article'. But you probably won't be.
HTML cannot be looked at as a data type. Markdown specifies one and only one way to do all of the above. That's a proper abstraction.
> Telling people how to make web pages isn't a problem - that's what the HTML standard is.
You can announce a set of 'best practices', but that's not a standard. A standard is an abstraction that you can rely on other people using because otherwise the vast majority of software won't work with it. Best practices cannot be relied on, you follow them for your own benefit, not others.
The HTML standard is insufficient for this kind of use. And it will remain this way because HTML isn't intended the way you seem to think it is.
This situation can be improved (and is being improved). If we treat HTML as nothing but a display language, then it will become one - and if that's what you want, then you should just be using PDF, PNG or SWF.
> And it will remain this way because HTML isn't intended the way you seem to think it is.
I guess we've reached the root of our disagreement. It's exactly how it was intended to be used historically, it's how it is still used for the most part (with webapps being a notable exception), and I think it's the best way to use it going forward.
You're right about the environment. Creativity often isn't well-aligned with traditional learning patterns.
At least that is how it works for me most of the time. Although I guess I do take direct inspiration from the things themselves sometimes.
When I solve problems like this I typically get a vague sort of vision of what the final solution is going to look like in my head (possibly the innate part). Then I take all the little things I know about and slowly build up something that will perform the action I want. After which it becomes a task of optimization by combining and changing things until the final solution falls out (the experience part). When you have 2 or 3 people working on the same problem using this process some really special things often come out of it.
Some other guy said design is editing: it's about removing all the ugliness so that only beauty remains.
It details ways to innovate and create original products/services by narrowing or constraining ones options for solving a problem.
I think we are all capable of this type of "genius" and the book's authors describe a simple process for achieving it.
http://www.amazon.com/Inside-Box-Creativity-Breakthrough-Res...
But did he extend your bed to make you happy, or to score those free extra parts?
I suppose I will have to go to my grave never knowing for sure.
Although it looks like your bed is a little saggy, right in the lumbar...
I imagine that if the mattress were removed, the modification would become more apparent. Alternatively, a "before" picture would also probably make it more obvious. But, who takes a "before" picture of their bed?
Thanks for pointing them out.
So I went to Lowes and got a bunch of PVC pipe and angle couplings. I built a 5x5x6ft enclosure and threw a bunch of blankets/sheets on it to make a little room inside a room to hold my desk, me and my space heater. I was nice and comfy all winter.
Another time I needed a desk for my computer and didn't have much money to work with. This was around the time that whole "FedEx box furniture" thing hit the Internet. I worked at a little pack-and-ship place and we had a bunch of extra UPS boxes so I nabbed them and some tape and went nuts. It took some tweaking before it would accept the weight of my CRT, but eventually it did.
That's all he did. It's awesome, though. Awesome things usually can be described in simple terms.
Meanwhile: http://www.instructables.com/
In my family, we had this unspoken contest for the best ways to fix things. My Mom would use coat hangers, toothpicks and glue like they were going out of style.
Doesn't help the argument that I have an autographed photo of MacGuyver.[1]
As a developer I feel I can apply these skills, but to code, whereas they're physically able to see an object or an end result.
I wish I could!
Creativity isn't so much about making pink patterns on the wall as it is about solving the problem at hand using the available time, tools and materials.
OTOH: If that means splashing pink paint on the wall, that will do as well.
Talk about a work-from-home desk...