One option: use your entrepreneurship and management training to figure out the answer to this question: what could someone with your skillset, who didn't need to otherwise work to support themselves, and was willing to devote 100% of their time, do that would have the maximal positive impact on the world?
Then live frugally, like a college student. The 100K will support you for the next four years. To be able to devote 100% of four years of youthful, intelligent energy towards one of the world's problems without other major life distractions (school, job) would be an amazing resource and you could have a tremendous impact. (An important component of this should be finding something that excites you, rather than just responding only to a feeling of guilt).
I disagree with the commentors who suggest you should invest your money. You're an entrepreneur. If you want another 100K, you can go out and do something to make that. (I would however recommend never, ever, going into debt: never spend money you don't have on the assumption that you'll be able to make more later; this is a powerful reality check that ensures that you really are doing what you think you can).
I expect other commentators to voraciously disagree with my suggestion that you spend the money supporting yourself instead of saving it; I'll just note that in advance so I won't feel like I need to respond to any of the responses.
In his book The Millionaire Course, Marc Allen writes that "Your business goes through the same three stages that all living things go through: infancy, adolescence, and maturity".
"When your business is in its infancy, have you to care for it constantly. You expect nothing from it, and have to support it completely. Care for your infant business as you would care for your infant child -- with loving attention, with no expectation of any reward... your infant grows at its own pace; sometimes slowly, sometimes instantly, in a quantum leap. As James Allen says, Be not impatient in delay, but wait as one who understands. Your infant business will soon grow to adolescence."
"The adolescent business can take care of itself, but it certainly can't take care of its owners. In fact, the owners may still need to come in with some additional support if the adolescent stumbles for some reason, maybe because it's trying something unproven or risky or new..."
"If you keep focusing on your dreams, and if you're patient and persistent, your company will grow into maturity and be able to support you and many others abundantly."
In the comments people are doing the math to calculate that you need 2K a month to live on. Whatever the amount is, it is then your job to provide yourself with that income to support yourself, separate from your business. You shouldn't expect or depend on your infant business to provide you with that 2K, because you don't know how long it will take for your business to grow up. That your infant business isn't yet supporting you isn't a reason to give up, it just means that your business hasn't grown up yet.
In http://www.paulgraham.com/relres.html Paul Graham writes: "A couple days ago I finally got being a good startup founder down to two words: relentlessly resourceful."
Being relentlessly resourceful means that you come up with the 2K a month. Get some investors. Do some contracting work. Work nights and weekends. Hold a yard sale. Deliver pizza. Do whatever it takes to make 2K a month, separate from your startup.
Your other question was should you sell your 10K of stocks to support yourself. Because you're in the B2B space, you're doing sales. Dave Ramsey notes that people don't buy from a desperate salesperson. Desperate salespeople smell bad. People buy from relaxed, confident salespeople. So, the answer is, in your particular situation, you should start making the 2K a month to support yourself before you need to sell the 10K of stock. Because, with the 10K in reserve, you won't be feeling desperate, you'll be feeling confident. And with that confidence you'll be able to make sales.
How to succeed in your business is fairly simple :-) do what your business needs you to do. If your business needs you to make 2K a month to support yourself, then go do that. If your business needs you to make sales, then do the things you need to do for yourself so that you can be a confident salesperson. And sooner or later, your business will grow up, and you'll reap the benefits.
Each element of the returned list represents one way that the parser can "succeed". For example, if your parser is for the regexp "a+" and you give the string "aaabc", then the parser can return (("a" . "aabc") ("aa" . "abc") ("aaa" . "bc")] to say that it can interpret "aaabc" in 3 ways. You can transform this into the "longest" parse by filtering this list for the shortest "remaining string".
If your parser returns [] it means it cannot parse the string, so it all fits together. I don't know if I can find the time to rewrite the code to show you explicitly how this could help, but looking at Parsec (in Haskell) will give you a good idea of what I'm talking about
My comment wasn't JSON specific. After all, the JSON spec was designed to support simple parsing logic from the start. My comment was more oriented towards generalization.
OK, I have a HN etiquette question. I don't post much on HN, and I wasn't the one who posted the link to my thank-you here on HN. I've had a HN account for a while, but I'm still pretty much a newbie to HN.
I have a desire to not just stand here and take it on the chin as mahmud publicly proclaims that I'm pandering, a Lisp newbie, irrational, a blind fanboy, hypocritical, dismissive, and unfair. On the other hand I don't want to waste everyone's time with a tedious flamewar.
He was surprisingly nasty about it, but I wouldn't bother fighting back. A lot of the people who voted up his comment didn't do it because they agreed with him so much as because they're worried you'll start a trend of people posting stuff trying to suck up to us. Which is actually a reasonable thing to worry about, considering that a significant number of HN users think they might one day apply to YC. So you were basically just unlucky.
It happens to us all I guess, sometimes it's too much coffee too early in the day or someone hits a soft spot.
It's easy to misinterpret what people say on the net.
FWIW I too had a very positive superficial read of Arc when it was first published and I'm neither a fanboy nor a Lisp newbie. Scheme is one of my true loves.
For me it's a cost/benefit analysis. Programming in MzScheme or Arc has a cost to me in that the libraries I typically use for my projects are mostly available in other languages, so they are harder to get to. I may decide to program in a language despite such a cost if it has other benefits for me that I find outweigh the cost. While I liked MzScheme, I didn't find its benefit to me great enough to outweigh the inconvenience of the library issue. The scale tipped in the other direction for me with Arc, where I'm happy enough with the benefits I find in Arc that they outweigh the other disadvantages for me.
Your article doesn't list any of the library features that tipped the scale in favor of Arc. It's unfair to the MzScheme developers and users to dismiss their platform without telling them what's lacking. Please revise the article and flesh it further, if you have the time, because as it stands, it doesn't stand well under scrutiny.
Public technical rationales aught to be a little more than "just cuz" and personal preference. If you wanted a discussion that is ..
I'm sorry but this seems an aggressive comment to me. CatDancer did mention the preference of simple macros over MzScheme's more complicated hygienic macros. Beyond that, Arc is different from Scheme and everyone knows it. The differences are documented and they are the reason why Arc is not Scheme. You do not have to challenge the piece just because you don't particularly like the changes Arc made in comparison to Scheme.
Your article doesn't list any of the library features that tipped the scale in favor of Arc.
The features of Arc are well described in the Arc tutorial, http://ycombinator.com/arc/tut.txt would you recommend that I include a link to that?
it doesn't stand well under scrutiny ... public technical rationales aught to be a little more than ...
Well, I had posted it to the Arc forum, where people are already familiar with Arc. I expect that your criticism is valid if it had been intended to be a technical article.
Hmm, I don't know if I'm going to be able to explain it very well without an example. My general experience was that I'd start with syntax-rules, which would turn out to not be powerful enough for the particular macro I wanted to write, so I'd turn to the more complex but more powerful syntax-case. Which then might turn out to not be powerful enough either, or else it might be powerful enough but I'm struggling to understand how to implement my macro using it, plowing my way through pages of documentation and reading examples.
Then there's a macro in Arc, for example,
(mac awhen (expr . body)
`(let it ,expr (if it (do ,@body))))
which, on the one hand, yes it is true it's not hygienic. But, on the other hand, I can bang out in seconds. So now I'm moving ahead writing my program instead of struggling to write a macro. And the lack of hygiene has never been an actual problem for me in practice.
I imagine that a Scheme programmer who was experienced in writing hygienic macros and so could write them quickly, and who was more bothered by the lack of hygiene than I am, could well reach a different cost/benefit decision than I do and decide they'd rather go with hygienic macros.
Appreciated. BTW I thought that was the only part of your post that was putting down another language. But it didn't seem deliberate, just a casual and unconscious going-with-the-flow put-down of java. As axon said, many people do it. I was struck by your preface + the following statement:
My statements that I prefer Arc for the kind of programming I do was not intended to be a put-down of other languages.
If you should be so unfortunate to be stuck trying to write good code in Java, ...
One solution is to remove the connotations, eg:
If you are writing code in Java, ...
Note: this version is more concise :-)
But please keep the factual points, such that Java's verbosity can mean that removing duplication doesn't make it shorter. I thought that was an insightful and pithy expression of the idea. But I also note that that's not the only benefit of removing duplication.
np :) and apologies for taking the comments off topic.
Do linguists agonize over language efficiency as much as some programmers do? For example, writing English is maybe far more letters/strokes than Japanese (idk), but we don't all start learning Japanese and bash English.
If the Sapir-Whorf hypothesis is true, then they should if they don't already. If the Sapir-Whorf hypothesis is true for programming languages, then our agonizing is perfectly reasonable.
I often get jumped on for my views, but S-W is true, and untrue. Untrue in that absence of a direct expression implies absence of concept; true in that absence of a direct expression impedes such an expression, such that it is less likely to get used, and hence, less efficient, and less likely to be conceived.
And I certainly agree that S-W applies for human and computer languages alike.
From what I have seen (not much, but probably more than most programmers), they don't. I suspect the reason is because everybody has at least one native spoken language, but programming languages are not native in the same way; they are acquired, and so are not perceived as a necessity.
And as such, for most people it is much harder to have a "favorite spoken language" that they can use as a platform to bash other languages. The way that programmers, text editor users, and coffee drinkers bash each other is bashing someone for an acquired taste. Bashing other languages is almost like bashing someone's physical appearance, and the immaturity becomes very obvious a lot quicker.
Also, regarding compactness of the spoken language, on average, English is longer than, say, Chinese. But brevity is NOT the goal. The tradeoff is redundancy, which English has much more of (e.g. parallelism and verb/plurality agreement). Old Chinese, with all its homophones, has plenty of texts written so compactly that if you don't read the text you will not understand it (at least for modern pupils).
I'm just imagining an anti-English troll, extolling the virtues of Japanese. Actually, Outliers makes the point that Korean has logical words for numbers, which makes maths a bit more accessible. I have to agree, I mean "eleven, twelve". I was irritated with the nonsensical naming of numbers as a child, especially when people said that mathematics was logical.
So it's a personal-preference choice made after sufficient deliberation and experience in all the options on the table, I hope.
Ok. I will accept that.
Here is my take on your personal essay, it's also a matter of personal opinion made after sufficient technical evaluation of the matter: I think you need to be a little more critical of your own reasoning, specially when writing for programmers. The spirit of your essay has been largely positive, IMO, but go easy on the snide remarks and the dismissive attitude of other technologies you have very little experience in (yeah, it shows.) Otherwise a much less sympathetic reader than I, and a far more competent one, will come aboard and tear your argument to pieces.
A better way to frame your enthusiastic writing would be "I can do X in Arc, I really wish ${LISP_DIALECT} would let me do the same". This is both curious and also accepting of one's own self-limitations. Someone will come aboard and show you what you have been missing, and you might as well get pointers to the literature that further your understanding of Arc or whatever other technology.
Can you give me an example of a snide remark that could be rewritten?
(I appreciate your suggestion to say that I wish another Lisp dialect was more like Arc, but I'm not sure how I'd choose one since I don't really have a favorite aside from Arc).
> Can you give me an example of a snide remark that could be rewritten?
Here is a quick list of what I think needs further deliberation and scrutiny on your part.
> I’ve long liked Lisp, but hadn’t been programming in Lisp for a long time because I hadn’t found any features in Lisp compelling enough to overcome the advantage other languages had in having large libraries available and such like.
[You came to the wrong Lisp then, as Arc has no libraries compared to all the mainstream lisp dialects]
> I found the [Scheme] rationale of hygienic macros -- avoiding all possibility of conflicting identifiers in macro expansions -- to be compelling. After all, who would want to write a macro that breaks just because the user happens to be using a variable of the same name as one used in the macro?
[Actually, scheme's hygienic macros shift the burden of capture-avoidance to the compiler. It's CL that has to use gensym.]
>I now understand that all these language features that people work hard to create solve some problem, and it can be a useful and important problem to solve, and yet it can be a problem I don’t care about, a problem I don’t have. That doesn’t necessarily make it a bad language feature, but it can make it one that I don’t want to pay the cost of using.
[This is fraught with reasoning errors. If you want a language that only has the features you want, create your own DSL. And even after that, you might apply that a la carte reasoning to the runtime and question why you might need a certain garbage collector, if any at all, or why you might need your runtime to have bindings for the OS system calls when you don't use them. Slippery slope. Richness is usually a good thing, not bad.]
>Yet in Java, it’s hard to get anything shorter than ten or twenty lines of code. See some code duplication, and by the time you’ve written the classes and interfaces and methods you need to write to remove the duplication, the code is just as long as it was before.
[A personal opinion that will send java programmers in uproar. not that java doesn't suck ;-]
>Languages written by hackers for hackers like Perl and Ruby and Python are lots better (and, I find for myself, a lot more productive for me for the kinds of projects I work on), and I can write shorter programs in them, yet they don’t help me go further
[and now the Perl, Python and Ruby programmers feel trolled and will jump at your neck. You requirements are of the DWIM kind.]
>they don’t help me make my program shorter.
[Yes, and an Aston Martin can't tow a boat. Right tool for the job]
>Now I see some pattern in my code, if I’m doing more typing than I want to be doing, BAM I write a macro and use it. Just like that
[and the Lisp programmer collective is surprised by your surprise.]
[You came to the wrong Lisp then, as Arc has no libraries compared to all the mainstream lisp dialects]
I'm not saying that Arc has better libraries than other Lisps, I'm saying that for me the advantages of Arc outweigh for me the disadvantages of not having the libraries that other languages do.
[Actually, scheme's hygienic macros shift the burden of capture-avoidance to the compiler. It's CL that has to use gensym.]
Yes, what I was saying was that when I learned about hygienic macros I thought they were a good idea for that reason.
Richness is usually a good thing
If I can choose to use a feature or not (as it typical with libraries: I can choose to use a library or not) then the cost to me of a feature that I don't want is zero; if I have to use a feature or it is harder to avoid then it matters to me whether the cost to me of that feature outweighs the benefit to me.
A personal opinion
Not at all. While it wasn't the purpose of my thank-you to do such a demonstration, it's easy to compare the relative length of code needed to do a particular implementation in different languages.
feel trolled
Yes, perhaps it is common for people who like X to be mad if I say that I prefer Y.
DWIM kind
I'm not following you.
and the Lisp programmer collective is surprised by your surprise
Perhaps they have had better luck than I have at writing hygienic macros.
His intent has been "largely positive", but what do you expect people to say after his "Perl, Python, Ruby, Java, Scheme and Common Lisp suck because they didn't allow me to write compact code" remarks?
Here is what will happen: Perl and Ruby programmers will ask you to show code and they will rewrite it in one-liners. Java and Python programmers will stuff code into packages/modules and write a tiny 5-line "client" for it. And Scheme and Common Lisp programmers will take absolute pleasure in skinning your argument about macrology and hygiene, the Common Lispers keeping a bucket of salt nearby for the rubbing.
"Yet in Java, it’s hard to get anything shorter than ten or twenty lines of code."
I am a Java programmer, I find much to like about Java, and I agree totally with this statement. I tried writing some functionality in Clojure, then re-writing in Java. It was a factor of 2 or 3 increase in lines of code.
The assumption of school is that you don't want to learn and so you need to be forced to. For all I know this may in fact be true for most kids, and so school is necessary for them. However if you are self-motivated to learn then school is massively inefficient.
There is no need for you to waste the next two years. You can, if you wish, undertake a self-learning program (home school yourself). While it is true that there are things that will get by staying in school, it does not mean that you cannot also get these things outside of school, especially with a little planning. You will still get into a good college, have friends, develop your social skills, keep your future options open, and so on. The book I mentioned explains how.
Then live frugally, like a college student. The 100K will support you for the next four years. To be able to devote 100% of four years of youthful, intelligent energy towards one of the world's problems without other major life distractions (school, job) would be an amazing resource and you could have a tremendous impact. (An important component of this should be finding something that excites you, rather than just responding only to a feeling of guilt).
I disagree with the commentors who suggest you should invest your money. You're an entrepreneur. If you want another 100K, you can go out and do something to make that. (I would however recommend never, ever, going into debt: never spend money you don't have on the assumption that you'll be able to make more later; this is a powerful reality check that ensures that you really are doing what you think you can).
I expect other commentators to voraciously disagree with my suggestion that you spend the money supporting yourself instead of saving it; I'll just note that in advance so I won't feel like I need to respond to any of the responses.