Revenge of the Nerds
paulgraham.com
paulgraham.com
"If you start a startup, don't design your product to please VCs or potential acquirers. Design your product to please the users. If you win the users, everything else will follow. And if you don't, no one will care how comfortingly orthodox your technology choices were."
at about 2/3rd into the essay.
What does one do in that case? Keep going (bleeding money) or give up? Lots of startup ideas are so bold that they're clearly early for their time.
And not having enough users is just as much a reason for failure as having dissatisfied ones.
The market is ready alright, it's just that as a third party add on offering a payment service you have to cross one more hurdle.
I'm pretty sure if the tipjoy principle would be implemented from within the network that it would be an instant smash hit.
Oops. My bad. Pre-edit: "so why post this and why now? :)"
Too many startup start out trying to be the perfect bride instead of simply focusing on their users and making a great product. VC capital and other 'good stuff' is so far down the line when you set out that you do not need to spend an ounce of thought on it.
Concentrate on your users, that's where they key to any kind of success is. Once you've done that, no matter how exotic your tech choices were you're halfway there. Better to go off the beaten path and make a stellar product than to end up in mediocrity for playing it safe.
EDIT: parent has been edited, this reply now makes little sense.
Bah. I almost wish this place didn't have points, or at least didn't have them so visible. Just knowing they exist weighs on me, and discourages me from saying what I really think, towards what would be popular. I can't help it.
I wonder if the poster really would feel better with nickb's user id, after all he wouldn't actually be nickb...
Still, the system does seem to work(1). Perhaps this eternal fight with the inner "karma farmer" demon is the price we have to pay for effective group moderation.
(1) Unfortunately, there is only one data point, insufficient to form any firm conclusions
"Dynamic typing. In Lisp, all variables are effectively pointers. Values are what have types, not variables, and assigning or binding variables means copying pointers, not what they point to."
They are even more fundamental to LISP. Also if dynamic typing is good and most posts seem to claim it is, and dynamic typing more or less equals pointers which is what this seems to be saying, doesn't that mean using pointers is good? Also, I have seen frequent complaints about C's "static typing", but if using pointers results in dynamic typing, doesn't that suggest that static or dynamic typing is a stylistic choice in C programming?
def foo(n): lambda i: n += i
Give me two powerful languages with the same features and I'll pick the latter for its syntax.
So no, lisp may be the best right now, but it won't be the best forever, its syntax is its best friend and worst enemy.
Something lispers will never understand. Love is blindness.
I'd like to know, though: is that true? Is an abstract syntax tree the only good way to represent programs as data? Has any other expressive way to do this been invented, or do programs always boil down to an AST after the syntax has been stripped away?
I say "expressive" because I can think of at least one other code-as-data representation: binary. But that isn't suitable for programming. If there is another representation that is suitable, but isn't isomorphic to a parse tree, then presumably one could derive from it an analog to Lisp that doesn't simply reduce to Lisp. Until then, though, I think the point that PG made semi-jokingly in the essay, that any language as powerful as Lisp will be a variant of Lisp, has to hold true.
Some day I'd like to research this question (or better, someone on HN could just tell me the answer). If other meaningful representations are possible, surely some must have been invented by now. And if they aren't, then the AST is a considerably more remarkable discovery than people realize.
What would really interest me would be exploring that if human logic fundamentally reduces to a parse tree because of something to do with the language faculty of the mind, and the programming languages that we create tend towards that just because programming languages are built out of the same logical faculty.
That is actually an excellent question.
Now, say I fork lisp and change one little thing:
(defun foo (n) (lambda (i) (incf n i)))
to this:
[defun foo [n] [lambda [i] [incf n i]]]
or even this:
{defun foo {n} {lambda {i} {incf n i}}}
or how about this?
<defun foo <n> <lambda <i> <incf n i>>>
Hmm, trees are powerful, no matter how they are expressed huh?
What if we can represent the same trees using colons and commas as delimiters?
:defun foo:n, :lambda:i, :incf n i.
Maybe spice it up a bit using periods as recursive closing delimiter.
See? still powerful trees!
Between common lisp and colon lisp, I still use the latter.
Love is blindness.
Ergonomics win.
I don't see what you're trying to claim. Initially you seemed to be saying that you preferred conventional sytax to sexprs. I pointed out that this meant you had to give up macros. You reply that you could use other characters to delimit sexprs. Sure, but so what?
The syntax in that first example you quote isn't arbitrary. It's essentially the only notation that exists for representing the structure of a program explicitly in language. Is that valuable? Uh, yeah. It's incredibly valuable. It's worth a lot more than syntax in many cases.
By contrast, the syntax in the second example is arbitrary: the delimiters and operators could just as easily be organized differently. Perhaps this particular organization makes certain programs clearer, but it loses the ability to represent programs in general.
If that doesn't make sense, think of the fairy tale of the goose that lays golden eggs. Everybody's obsessed with their particular golden egg. Lisp - precisely because of the difference visible in those two examples - is the goose.
There's nothing in this that PG didn't already express in his comment. But what you wrote deserves more than one protest :)