1,169 karma · joined July 27, 2010
Hi, my name is Tim Sally. I'm a programmer, security researcher, and Lisp hacker. Also an unabashed fan of theoretical Computer Science (join us at: http://cstheory.stackexchange.com/). :-p Graduating this year with a BSc in CS from UIUC.
Advice: Most people who fail in graduate school fail because they never experienced research before graduate school. Consider whether it's a good idea to take funding before ever building or selling a product.
Elsewhere: ----------
Web: http://stack.io.
Email: 'poet' at the above domain.
Code: http://github.com/poet/.
Twitter: http://twitter.com/__poet__.
Previously: http://news.ycombinator.com/user?id=tsally.
You aren't limited to Lisp-style grammar in Lisp either. You can write reader macros if you have to. The point is, that on a basic level manipulating s-expressions is far easier to think about than manipulating the syntax of whatever the flavor of the day language is. You're essentially trying to invent reasons why macros in other languages are the same as Lisp macros and it's simply not true.
Also, it's not like anyone should be using the system Ruby anyway. That's really bad practice in my opinion and there's no excuse when rvm exists.
I'm not saying this to quibble about whose job is more important or serious. It's just that I would volunteer as a firefighter or an EMT in a second, but I would have to think very carefully about how working in law enforcement would affect me.
This simply isn't true. In fact it's so far from the truth it hurts my brain. Well written Lisp applications are in large part (and sometimes mostly) macros. PG once mentioned that the ITA guys said over half of their codebase is (was?) macros.
"(1) It just turned out that when Google was started, the core programmers were C++ programmers and they were very effective. Part of it is a little bit of culture. (2) Early Lisp programmers (Erann Gat) at Google actually noticed that other programmers were equally or more productive. It has more to do with the programmer; we're getting to the point where language choice is less important (as opposed to 20 years ago). (3) Lisp is optimized for a single programmer or a small group of programmers doing exploratory work... If I want to make a change in a weekend I'd rather do it in Lisp than anything else, but by the time you get up to hundreds of programers making changes are not a language problem but a social one. (4) Libraries."
Paraphrased from: http://www.youtube.com/watch?v=hE7k0_9k0VA#t=03m20s.
An analogous situation is your average first year PhD candidate. Initially making some sort of contribution to the field feels overwhelming and almost impossible. But once you've spend a year or two reading papers and having coffee with the leaders in the field, everything comes together. That same PhD student starts to churn out quality papers every 6 months or so.
I think back to what it was like watching my dad program in Scheme when I was in high school. I got the same curious and overwhelming feeling then as I do now when working on certain areas of distributed systems. There's no reason to believe that the barriers that grownups face are any less insurmountable than the ones children do. :)
Ten days to implement the [Javascript] lexer, parser, bytecode emitter (which I folded into the parser; required some code buffering to reorder things like the for(;;) loop head parts and body), interpreter, built-in classes, and decompiler... Ten days without much sleep to build JS from scratch, "make it look like Java" (I made it look like C), and smuggle in its saving graces: first class functions (closures came later but were part of the plan), Self-ish prototypes (one per instance, not many as in Self).
That's from Brendan Eich, the guy who created Javascript. Guess you never know when your 10 day project might go big and become something like the assembly for the web. Release early and iterate often seems to hold up quite well here....
You can see how the above could snowball into a huge advantage upon graduation from college. Any correlation you notice between high tests scores and successful people is most certainly a result of this property of our system and not from tests themselves. The tests could be targeted towards an arbitrary skill set and those who did well would still be more successful because the system values those who do well.
I mentioned this in my post. Geeks are rude and arrogant in conversations for the same reasons. I don't think it's a net win for any of the parties involved.
--
One reason technical people don't dress well is because they never learned how. Another reason is that techies are unconventional and don't place a high priority on mainstream standards. That being said, I've been fashion hacking for half a year now and the results have been great. Here's some concrete advice based on my experience. Note that I'm 21; people who have been professionals for 15 years and have kids probably dress differently. I'm also average height and average weight, so you'll have to make adjustments if you are tall/short/whatever.
Tshirts. Fitted solid color shirt with jeans that fit and shoes that impress = coffee shop, homework at the library, class. Easy as pie, and if you get the fit right and are in decent shape you look good.
Casual collared shirts. For general wear get bright, solid color fitted ones. Bar, restaurant, class, whatever. It's a very flexible look because you can switch in/out jeans and slacks. Express's 1MX shirts are a solid choice (http://www.express.com/1mx-modern-fit-stretch-cotton-shirt-1...) and very popular for this type of role.
Collared shirts for your suit. Go to a tailor. Get measured. Go to a store that sells suites like Men's Warehouse. Get two white shirts, a powder blue shirt, and a light gray shirt and you are done. Don't complicate things with stripes or harder colors if you are just starting. If you want to add personality to your shirt you can do it with a tie You're going for these kinds of looks: http://4.bp.blogspot.com/_dM4F-K2W4sA/SmnPxKOASGI/AAAAAAAAAo..., http://0.tqn.com/d/mensfashion/1/0/P/k/BrianKersey-Pool.jpg. Hoodies. Buy two solid color ones, one navy and one grey. No branding, no weird details, no nothing. Solid color only. You can't really improve your look with hoodies, but you can really mess it up by buying one that isn't a solid color. Example (from JCrew): http://images.jcrew.com/erez4/cache/images_eiec_25_25050_250....
Graphic Tees. These are hard. You have to be younger to pull off a graphic tee and even then the single to noise ratio in terms of nice/ugly graphic tees is really high. You're probably better off avoiding them
Polos. it's very tough to find ones that fit well. I've had decent success with the custom fit from Raulph Lauren (http://www.ralphlauren.com/product/index.jsp?productId=25928...). But please, don't buy a polo with a huge logo on the front. Examples: This one from Raulph Lauren (http://stores.gameentertainment.org/catalog/Ralph_Lauren_men...) and this one from Express (http://www.aldikkan.com/online/published/publicdata/ALDIKKAN...) are both BAD choices. A big logo just doesn't look good, and it makes it seem like you are brand dropping. Something for parties. Something that's a little different. Do not buy this until you are ready. Go with your graphic tee or a regular collared shirt until you are confident enough to pick something cool. Example (from Express): http://s7d5.scene7.com/is/image/expressfashion/20_552_5196_8....
Jeans. Don't get designer jeans. Don't get them torn. Don't get them baggy. Regular or slim fit only. Get them in colors ranging from dark blue to blue/gray. Do not get light blue. Do not get jeans that are too long. They should never, never touch the ground and they should cover 1/4 to 1/2 of your shoe laces when you are standing.
Casual Shoes. Women notice shoes. Seriously. It's really interesting how much they look at your shoes. You can have everything else right, but if your shoes are big blocky white gym shoes, you have failed. I say this as someone who bought big blocky white gym shoes from freshman year in high school to sophomore year in college. The good news is that you can crowd source style selection by looking at Zappos's most popular (http://www.zappos.com/search/shoes/filter/productTypeFacet/%...). Once you have the style selection, just make sure you get a decent color. I own a pair of these (http://www.zappos.com/multiview/126799/14074).
Boots. Get something that looks good but does what it is supposed to do (stand up to the elements). I've had a good experience with Red Wing. The company used to make the shoes for the US Army during WWI and WWII, so they make a quality, durable product. I own a pair of these (http://www.amazon.com/Red-Wing-Shoes-Gentleman-Traveler/dp/B...) and they are awesome (but really expensive :-/ ). I've used them constantly in the snow and hold up great, plus they look good too.
Coat. You should get a wool pea coat. You should stop wearing your Northface that is the size of a small tent. Example (from J Crew): http://1.bp.blogspot.com/_rTdnjj_0uYM/StUedrqnCGI/AAAAAAAAAk.... Peat coats are a proven style that have been around forever. A nice coat is a really expensive investment and you don't want to buy one that will look bad when your style changes as you get older. Sunglasses. Authentic aviators that have frames that fit your face. Done. Like the pea coat, aviators have been around for a long time and there are only a few people who truly don't look good in them.
Also, a few general tips:
Fit is the key to everything. It doesn't matter how much you spend on clothing or how well you match your colors. You will not look good if your clothes don't fit. Period. Everything you get should be slim fitting. Odds are 10 to 1 that the jeans you are wearing right now are far too baggy. Loose clothing was one of my most difficult habits to break.
Do not accept anything less than exactly what you want. Settling for clothing is the worst thing you can do. The legs on the pants you just bought half an inch too long? Return them. The collar of the shirt a little too tight? Return it. There are billions of styles and billions of fits out there. Taking a shortcut to save some time is not the road to success. You have to keep searching until you find a fit and a brand that you really, really like.
Focus first on making choices that don't look bad. It's actually really difficult to develop this skill. Once you can consistently make choices that aren't bad, you can start being more risky and shoot for things that look good.
One more thing. The first rule of fight club is you don't talk about fight club. Wearing nice clothes is something you do, but it's not something you brag about. Your clothes and brands don't define you and they don't change who you are. The only things clothes do is get in the way (if they are bad) or complement what you already have (if they are good). It's like being rude or polite in a conversation; it doesn't change the content of the conversation, but things can be really ugly or really pleasant depending on the choices you make.
SICP is like a deep philosophical work: you need to study philosophy and read a lot of primary and secondary works to truly understand it's references and implications. To most people, it is not useful as a guide to writing DSL's.
This is a fair point and worth talking about. When I read SICP I already understood Lisp macros, which is a major conceptual leap. So I will admit that I cannot provide a datapoint myself to support the idea that Chapter 4 is stand alone. However, the text itself was used in MIT's first computer science course for many years and they did teach through Chapter 4. Many other schools have used SICP in the past as well (http://mitpress.mit.edu/sicp/adopt-list.html). I think the fact that college freshman are capable of grasping it in a semester provides some evidence against your claim that you need "much, much more knowledge of all kinds of things". Hell, even spending a year to learn it would be fantastic.
Look, I'm with you on the fact that SICP is hard. But let's just reflect on the fact that Chapters 4 and 5 in a book written 26 (or 14) years ago give you a strong foundation in programming languages and compilers. There's tons of stuff you can do with this foundation, including writing DSLs. It's a pet peeve of mine that we seem to be constantly rehashing various ideas in SICP, except that we need to write thousand page books on how to express these ideas in languages like Java or C#. Based on a quick glance of the book draft, this bloat is immediately apparent! For example, the distinction between internel and external DSLs? Completely unnecessary. With an understanding of Lisp the idea of an internal DSL disappears; it's just a natural part of the language. And when you think about it, the idea of external DSLs isn't useful either. If the external DSL is expressive enough, it's just like an internal DSL; simply an extension of the language you implemented it in. If not, well then you're parsing am external file format and not a language.
So yes, to reiterate, teaching SICP is hard. But we'd be better off just biting the bullet to avoid all the bloat and repetition that results from not teaching it.
I think if you actually read Chapter 4 you would have a much different opinion. There's nothing "simple" about it. If you actually grok Chapter 4 then you grok Lisp. After that, it becomes apparent that the phrase "Domain Specific Language" is really just unnecessary terminology.
In no other creative or engineering profession is there this expectation that the most advanced tools are shrink wrapped together. Who gives a shit if you can buy paint together with your brushes? Just buy the best damn paint and brushes you can find, regardless of who sells them.
It's patently false that the profiling and system monitoring tools you can get on Windows are years ahead of anything you can get on a different platform. In fact, it's the opposite [1, 2]. And I wont even get into the fact that we're still catching up to 30 year old Lisp machines in the areas of editor integration, debuggers, and code assistance.