Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Eric S. Raymond - The Curse of the Gifted (2000) (vanadac.com)
243 points by vinutheraj on March 4, 2010 | hide | past | favorite | 59 comments


ESR often comes across as unbearably pompous and self-important, but here he strikes a very constructive posture of hard-earned humility and even tough love.


Or alternatively: this was 10 years ago, and the kernel is vastly more complicated now than it was then, running on hardware of a sophistication most of us scarcely imagined. And yet the kernel development model really hasn't changed much.

It may be that ESR was especially humble and constructive in that post. But honestly, I'd argue he was also objectively wrong.


How was ESR wrong? He seemed damn insightful to me. The curse of the gifted is a real thing. We've seen it many times before. Developers that can write 20 times the code of a "mere mortal" but don't think it's necessary to check it back in to version control. Or unit test, or run it through QA, or any of the other things that "mere mortals" need to do.

Sure, you can get away with this when you're operating in "Founder only mode," and you're the sole contributor, but his point is valid. If you don't plan for the point in time when you have hundreds of developers working on several branches of forked code before you reach that point, by the time you do, your project is doomed.


I've been and to a large extent am one of those in some cases and I can't imagine not using version control, or code sharing, or modularity. I also backup my code in several locations across thousands of miles of earth and ocean.

Look, "Founder only mode" is when the practices of these large corporations with lots of people depending on them are the most valuable, because everything depends on you. There aren't other people who can fill in and do your job. You have to be able to do it all. You can't skimp on any of the areas just because you're just you. Not if you expect anyone to depend on you, including yourself 6 months later when you have no idea what the code you wrote there does anymore.

And you don't want to have to repeat yourself all over the place so you modularize. That's how it's done at the big shops too. It's good practice.


"But honestly, I'd argue he was also objectively wrong."

Considering how Linux is being developed today, I think Linus disagrees.


I'd argue that Git greatly changed (maybe more so enhanced then changed) the model of the kernel and it seems that Linus did consider ESR's advice ultimately, and maybe that's what drove him to create git.


Um... no, it might be what drove him to use bitkeeper. Losing bitkeeper is what drove him to create git. This is pretty well documented.


Yeah, that makes a lot of sense... I never ever studied anything before sophomore year of college. And then when faced with serious large-scale programming problems, and 300 level math, I realized I don't know how to study. It was definitely a struggle, but I'm glad it happened to me early, and not when I entered a "real world".


Depending on your career path, it is unlikely you would have ever encountered that math in the 'real world'.


Doesn't matter. He'll run across a problem that doesn't just fall down and surrender in the face of his blinding intellect, and at that point, his studying and thinking skills (not the math trivia) will kick in and allow him to slay the beast.


A trivial tangent: oddly enough I find that, whether I'm programming for distributed applications or animations, it is the number theory, and not (surprisingly) the linear algebra, that I am most grateful for having learned. Boutade's Law: do not underestimate the algorithmic utility of knowing your way around the integers.


This is intriguing. Care to elaborate on a problem you've had and how number theory helped? I did the typical math courses required for a computer science degree (discrete math, linear algebra, diffeq, probability and statistics), but stopped short of the serious math courses (analysis). I've been meaning to start up with analysis (mainly for fun) but I'm intrigued to see how it might help in my day to day work.


Well, unless you're terribly interested in moving on to things like differential geometry, I'd put analysis off a bit longer were I you. If you'd like something stimulating and potentially useful, more advanced combinatorics, number theory, or algebraic geometry might all be good choices. The first two tend to overlap a bit when they are presented in textbooks (with some group theory tossed in as well). If you do crazy graphics programming, or if you program robots' spatial reasoning, algebraic geometry might pay off - though, AG doesn't have as easy an entry. (One exception might be via the book Computational Algebraic Geometry by Hal Schenck).

As far as number theory "paying off": 1) Many proofs in number theory are algorithmic in nature; 2) Computers understand integers with greater facility than they do the psuedo-reals we call floats - often times efficient integer approximations will be more appropriate than slower floating point solutions, and knowing the integers will help you develop/understand these approximations; 3) If cryptography is your bag, number theory is a must; 4) Martin Davis, Yuri Matiyasevich, Julia Robinson, Hilbert's 10th problem, Turing Machines, computability theory, and (the number theory bit) diophantine equations (sorry to be cryptic, this is getting rather long winded).


I would love to hear some of the number theory gems that have been most useful for you.


I hold a bachelor's in math. In my current job, I use basic algebra and trigonometry on a regular basis, and occassionally basic calculus.

I have never had to use the theoretical information or complex analysis directly, but the practice gained in studying the theory and the proofs has helped me indirectly many times in programming. For most people. in depth knowledge of mathematics is of limited use, but in depth knowledge of problem solving gained by studying math can be invaluable.

As you mentioned, it varies wildly by your career path of course.


Actually, for the last two years before striking out on my own, I ended up working on a project involving complex calculations with credit derivatives. And before, I created a side project implementing risk models such as Black Scholes, Monte Carlo, etc. So the math ended up being useful after all.

But yeah, I think even none of the things you learn in college end up being useful to you in "real world", it's all about problem solving techniques you master that apply in any situation.


Here is the post in the context of the original thread http://lkml.indiana.edu/hypermail/linux/kernel/0008.2/0240.h.... There doesn't seem to be a reply from Linus.


No, and I don't know if he split that driver, but I like to think that Linus took the message to heart (regardless of how he felt about it). The two+ years that followed saw the arrival of a lot of "meta" structure fixes, like bitkeeper (and then git of course), etc. that address many of ESR's concerns.


I love that Linus did what brilliant people do, which is modify the world to better fit how they want to work. I'm sure he modified his own practices somewhat, but he also modified the world by creating Git to enable his preferred workflow.


You're forgetting history- BitKeeper, mostly. The way I heard it told, Larry McVoy sat down and showed it off to Linus, who finally said "ah yes, this is a tool and model that would improve my life."

git didn't come along until Bitkeeper withdrew their support, after a prolonged series of arguments with kernel developers mad about a private company owning the code repository.

I guess I'm saying you should give credit to Larry McVoy for showing the way.


Torvalds sort of addresses the issue, http://lkml.indiana.edu/hypermail/linux/kernel/0008.2/0241.h...

"On the whole, people tend to _want_ to share, because it ends up being the easier "quick hack" in many cases. So I'm not worried about that part overmuch. I'm worried about people who share even when it doesn't make sense. And I'm worried about people having bad interfaces, which makes even sensible sharing end up as a experiment in horror.

That's why I'm so un-interested in the "let's share" argument. I don't think that is where the problems are. "


His reasoning smacks of a religious/political debate: given two complementary destructive human tendencies, we should direct all our concern and condemnation at one, because the one is a seductive vice that threatens to run disastrously out of control, while the other is not so seductive and can be safely left to human judgment. See priggishness vs. debauchery, meanness vs. gullibility, paranoia vs. complacency, etc.



I think it's worth saying that it's not just that gifted people don't need to learn study skills to get through school. They can be actively prevented from learning them by being forced to focus on a curriculum for which they don't need them. Denying gifted people the opportunity to take on real challenges while they are still at school when their mistakes are not too critical, which happens all too often, is worse than not recognizing their gifts, it is actively denying them the opportunity that others are given.


You guys are all talking about the burden and challenge of being gifted, but really, being gifted is awesome. I would much rather be gifted than not be. And if you are truly gifted, and not just talented with a tendency for the grandiose, you can rise above this challenge too, and become wise as well as gifted (after the necessary trials that any worthy endeavor entail, of course). It can happen, despite the happy mythos espoused here by our dear friend ESR. I am skeptical of cursing any specific group of people, unless the point is that every person or "type of person" has a curse that must be borne. If so, being gifted is hardly one of the worst. "Oh noes, I must deal with my constant state of amazingness! How will I cope!"

Others must deal with you though I suppose. That must be rough for them.


> you can rise above this challenge too, and become wise as well as gifted

That's the essence of what ESR was saying.


I'm so very lucky that a) I just happened to major in math and CS, not just CS and b) my 'giftedness' was only enough through calc 1 in the math program. My foreign language and gen eds were easy, and the CS program didn't expect much of us, but I had to actually try in the higher-level applied math classes. Without that, I'd have been in for a rude awakening when it came time to work for real, and it would have cost me much more than re-taking calc 2 did.


As for me, I eschewed the applied topics (no ODE's no PDE's) in favor of the "pure" (algebra, analysis, topology, etc) only to discover that, because I had little interest in becoming a professor, most of it would only serve to keep my happily diverted on what are now ridiculously rare lazy Sunday afternoons. In these topics, so long as one is interested in the propositions in need of proof, real study is relatively useless. I first learned what it meant to study in the "real world" - in the lowly field of IT - when the fiat came down the line to transform format X into formats Y and Z, and ensure that changes to one translate to the others, keeping in mind that simultaneous changes may occur, in which case on the 'right' change should be kept. The old dictum is true: there is no substitute for experience.


Similar for me. School was easy, I only learned to really work for something at the university.


I didn't get what this sharing code was about until I read the earlier post: http://lkml.indiana.edu/hypermail/linux/kernel/0008.2/0201.h...

I think this is a typical engineering argument and its got nothing to do with curse of gifted etc. If you share code and they divert later on, even if to a small degree, it gets harder and harder to maintain them. That's what linus says, and I do think that is simpler. Linus (and a good engineer) always favors the simpler solution. The more gifted, the more simpler. So ESR is just arguing the other way around.

I see this all the time in hot lkml discussions. It's often the more gifted who sees through to the simpler solution, but others can't. Don't know if it is true for all gifted, but definitely for the best software engineers.


Anybody have good advice for a first year university student who slept through most of high-school, got good grades, and then failed his first calculus exam because he was reading "Practical common lisp", instead of studying? How do i learn to study if i find the subject boring? How do i get disciplined? I know a lot of you have been here, how did you handle it?


No, I do not have any good advice to give you. I had the same problem, and never figured out the answer.

Instead, I was able to squeak by with C-minuses in all of the subjects I found horrendously dull, and make it up with A's in my senior and grad level computer science and psychology courses.

I graduated a month after I turned 21; I think my final GPA was 3.02/4.00. Microsoft hired me a few months later to work on Visual Studio. They never asked about my GPA. In fact, my first manager was a college dropout.

I hope you figure it out because I absolutely do not recommend this path, but it is workable.


Um, keep reading PCL?

How about writing programs to implement and demonstrate the calculus principle du jour?

You have to do a certain amount of grinding. For school, optimize around what grade you'd like to get (the answer shouldn't always be "A") and how grades are calculated. Then optimize around whatever least amount of work gets you that grade.

If it's something important but boring, first build a story about why it's important to you. Then find an interesting way to solve it (whether by writing a program to show it, forming a study group with a hot girl, reading background information on blogs or library books, etc).


It's not hard. Just choose to do your schoolwork BEFORE you have fun reading your lisp book. Then you can truly enjoy reading it because you know the b.s. schoolwork is done for the day.

Here is your new mantra: "What is the most PAINFUL thing I have on my list of to-do's?"

Figure that out every hour or so, and go get it done.

(It helps to realize that four or five years is a really short time. I know it doesn't feel that way when it is like 25% of your current lifespan, but really.. it will be over before you know it. And what's more - you'll actually get to enjoy it because you're not flunking out.)


There is only one way to handle it if you want to graduate. Grit your teeth and do it. Take it from a guy who's like you and spent 6.5 years in university because he refused to study. I graduated in the end by becoming a sort of hermit before exams. No meeting with friends, redirecting all the non-productive sites I frequented to 127.0.0.1, not going out except when foraging for food, etc. I wish I'd done it sooner, because 1) 2.5 years extra was a bloody waste of youth, and 2) I racked up more debt than my peers, which I am still paying for.

Besides, if you're really smart, you should be able to pass everything just by starting the hermit routine about 2 weeks before your papers. Take that total of 16 weeks (if it's a 4 year course with two major exams per year) as a temp job that makes you ~$12000 - if you take my figure of an extra 2.5 years at $5k per year, which I'm pretty sure is less than what your education is costing you (I'm Singaporean). :)

Don't make the same mistakes I did!


In my case, it was the reverse. Loved Mathematics, shunned everything else. They had something called a "Distinguished Scholar's Program," which meant I was basically able to design my own curriculum. By the end of the first year, when I'd figured out just how much latitude that afforded me, I was taking only Math classes. Now, I think that left me with a somewhat unbalanced view of the world, and I paid for it later. But if you go and talk to your professors about how much flexibility there is in the degree requirements, you might be pleasantly surprised.

You'll be sorry if you don't learn calculus, though!


Tell yourself you're going to do it, trick yourself into thinking you're going to do it, and then actually do it.

I get the most work done when I feel like I "fit the bill" for what someone who is about to get a lot of work done is like. Sort of like "Well, gee... I've got a clean room, and a clean desk, and I got a good night sleep, no distractions, had some caffeine, wont be hungry for a while... There is no way I'm not going to get some work done!" Then I just do it.

I find that starting work is a lot harder than sticking with it, as well. Once I get in to some problem or homework then I find its pretty easy to keep going. So, this thought is good to keep in mind when I'm having trouble starting because I know if I start I wont feel so bad.

I think the most important part is tricking yourself into thinking you're going to do it. For me, it was having a desk and clean enough room that I felt "studious"...but it was also reading books about how to get work done. The advice in the books didn't work for the most part, in my opinion, but because I felt like I was really headed towards "being able to buckle down and get stuff done" and had examples in mind of how I was headed there, I tricked myself into doing it. Then once I actually started doing it, it because easier because I could say "well, I've done it before!"

One last tip: I like reading biographies of impressive, academically accomplished people. Being inspired by other people helps me stick to things I find boring because I want to be like them, and having a good GPA certainly isn't going to hurt anything in my goal of achieving greatness!

Ok, seriously one last tip: listen to music without words. Words distract my thoughts, but I really need to have some music on to keep me from being distracted by all the noises outside my room.


Advice. Review early. Review often. Don't review for too long at a time. If you've done it right you won't need to study for the exam.

The key to math is that it builds on itself. If you miss one thing early on, you may not notice then but you'll get killed later. So you need to not just learn the facts, you need to internalize them. Luckily internalizing them is not that time consuming, but it does require being exposed to the same idea multiple times over a period of time.

One thing that I did, for instance, was routinely attempted to prove random theorems from scratch. Any time I failed I tried to figure it out. If I had to I went to the book, but I would mark it down as something I had to review again not too much later.

I figured that if I could write down a proof of the product rule from scratch, I could probably remember the rule. I was right. And not only did I remember the rule, but when I took differential equations a couple of years later I was the only person in my class who could recite off all of the definitions from memory.


Set a time when you are going to do something, then arrange things so as many distractions as possible are eliminated during that time so you have no other choice but to study, or whatever your goal is. Without distractions, you will eventually get bored enough that you actually work on what you are supposed to be working.

If you failed your first exam, that indicates it is not as boring as you thought. Calculus, specifically, comes up constantly now that I'm trying to understand Machine Learning, for example. Whatever you are studying, if you can figure out what some real world applications are, it should become much more interesting.


I was in the same situation. Not reading PCL, but Actionscript. Starting the work is harder than the work itself. The best grades I had were when I wasn't distracted by my PC. My mom was starting her company and needed a PC. I gave her mine and relied on the computer labs. The time restrictions because of lab hours meant I had a real deadline to get work done. I went in knowing I had 2 hours to allocate to one project, 2 hours for another, etc. When the lab closed, I left feeling confident that I did what I needed to do and could get some rest, finally.

Whether they are boring or not doesn't matter. They are all boring at some point.


Well to be honest... just do the homework. My experience was that profs are lazy, and recycle a lot. So if you do the homework, you will know how to do the exam. It sucks, some of it won't make sense for ages, I honestly didn't understand what the limit definition of a derivative actually meant until 2 years after I got an A in calc.

Some really good advice, hang out with people you know are smarter than you. They will get off on flaunting their intellect, and you'll get taught by some truly brilliant people... everyone wins?

Finally try and have fun. I found a strong positive correlation between having fun and my performance in my undergrad.


I basically didn't, and ended up going to school for an extra year and a half from all the failed classes, which added quite a bit onto the student loan total. In the end, the degree doesn't even matter, because I'm doing startup stuff.

A warning, more than advice.


Edit the title to include the year (2000) ?

-----

The overall point is solid. Many times, the "gifted" have sufficient brain capacity to be able to track or process fairly complex problems. As such, they see no need for the sort of support structures and habits others use to solve the same problems. Therefore, they don't develop those things in the "natural" way, piece by piece. Instead, they finally run up against a problem too big for their brain, and have to develop those habits all of a sudden.

For some people, that's an obstacle they never overcome. For others, once they realize the problem, they're quick to get advice, research solutions, and develop those structures. I hope this letter served its purpose by giving Linus the motivation and information he needed to overcome the curse of the gifted.


Isn't hindsight grand. I never had to study, take notes (or write anything down for that matter), or do homework to get through highschool. College wasn't too difficult, but it was too much of the same, and I couldn't keep with the grind.

> "For some people, that's an obstacle they never overcome."

It's amazingly difficult to create these habits. I often struggle with large projects, where it's impossible to keep it all in my head. The urge to take notes happens too late, or I don't know what to take or how to take it.

A recent project where I'm learning a new codebase and language simultaneously is forcing me to reevaluate how I work. It's almost more than I can mentally handle at once, and even still, I'm brute-forcing it by internalizing everything. I'm taking notes here and there when I think of it, trying different methods; wikis, textfiles, carrying a notepad; but it's slow going.

Parents, teachers, mentors - do your best to make sure your kids are challenged. Praise them for succeeding, but don't let them ride that success through life, because it does end.


> "... do your best to make sure your kids are challenged. Praise them for succeeding..."

I especially agree with those two thoughts. I might be inclined append the the caveat that giftedness qua giftedness does not constitute an achievement - does not constitute a success. It is doing, and not being, that counts. While Socrates was surely a brilliant fellow, we'd know almost nothing about him or his philosophy were it not for his equally brilliant but vastly more dynamic pupil. Without the doings of Plato the wisdom of Socrates would have amounted to little of consequence.


"Praise them for succeeding"

Praise them equally for failing, if they worked hard, learned something, and are willing to keep trying.


"Praise them equally for failing, if they worked hard, learned something, and are willing to keep trying."

I Agree. I guess I was lucky in this regard - I learned to love failing, and saw it as a challenge. One of my favorite pastimes, chess, was taken up because I was so bad at it, yet saw that it could be a master-able skill.


You need to be careful about the praising for trying bit, especially as they get older:

"Treating like an adult: You're fucking up. Here's how to fix it. Now fix it.

"Treating like a child: You're trying really hard! Good job! It's not the result that matters, it's just that you try!

"(That's actually a functional way to deal with children up to a point. In most cases they can't do a real job. But when they get to the point they can, when they're ready to learn to be adults with adult responsibilities, "it's a good try" should never cut it.)"


Another thing that can cause a problem is having to stop work on something for an extended period, then come back to it. I learned, working for an architect, to always take notes on what I was working on. I am plenty smart enough to keep the details for a large remodeling job in my head while doing the drawings, but recreating them after being diverted to a different job for 6 months was a royal pain. So I learned to make notes of every idea I had, rather than just adding it to the next revision of the drawing. And the more literal point ESR made about disciplined study skills has also bitten me several times.


"Your tendency to undervalue modularization and code-sharing is one symptom [of the curse]. Another is your refusal to use systematic version-control or release-engineering practices. To you, these things seem mostly like overhead and a way of needlessly complicating your life."

I'd say he came around on version control with git - five+ years later.


At the time I think CVS was the proposed system. Linus said he preferred patches. I'm not sure he was wrong. AFAIK, bitkeeper was designed (not sure to what extent) when Larry got together with Linus and Linus explained how he wanted it to work.


I've heard it told the other way around. That Larry had worked on Teamware at Sun and he showed Linus how distributed SCM worked. Linus said "if you build that, I will use it" and Larry built it.


Dang. I should have submitted http://news.ycombinator.com/item?id=1167649 rather than just including the link in a reply that got ignored.


Just the dose of practicality that my senior year at university needed. Makes me feel I can actually accomplish something with the right mix of communication, tools and team.


This is a very helpful post. How often do we run into people who are headstrong, and probably even right when we disagree with them, but who ultimately will benefit from a slightly more humble and careful way of working.

Clean coding is as much about the social skill of communicating in code as about the raw ability to hold the problem in your own head.


While I hesitate to call myself gifted I can recognize some of that. I never really studied in high school, the only homework I ever did was hand ins. University came as a bit of a shock really, and taliking to friends, I know I'm not alone in this. I really wish they had done a bit more to prepare us for higher education, and I suspect dropout rates would go down if they did.


I think it would be useful if you put the year [2000] in brackets after the title. For some reason I read the e-mail thinking it was contemporary!


the more gifted you are, the more you can get away with. but that doesn't mean you should be taking the easy path.


The problem is, society as a whole is concerned with the outcome less than the path taken their. If you are able to get an honest A, does it matter that you didn't have to study? If your client asks for X, Y, but not Z, then you give him X and Y, and get paid and move on. After all, you don't want to spend your life working.

Life is about goals in so many ways that for many it's hard to avoid getting there as quickly and efficiently as possible.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: