Eric S. Raymond - The Curse of the Gifted (2000)
vanadac.com
vanadac.com
It may be that ESR was especially humble and constructive in that post. But honestly, I'd argue he was also objectively wrong.
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.
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.
Considering how Linux is being developed today, I think Linus disagrees.
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).
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.
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.
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.
"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. "
Others must deal with you though I suppose. That must be rough for them.
That's the essence of what ESR was saying.
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.
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.
You'll be sorry if you don't learn calculus, though!
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.
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).
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.
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.)
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.
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!
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.
Whether they are boring or not doesn't matter. They are all boring at some point.
A warning, more than advice.
-----
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.
> "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.
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.
"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.)"
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.
I'd say he came around on version control with git - five+ years later.
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.
Life is about goals in so many ways that for many it's hard to avoid getting there as quickly and efficiently as possible.