WalterBright 10 years ago

> Your tendency to undervalue modularization and code-sharing is one symptom. 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. And so far, your strategy has worked; your natural if relatively undisciplined ability has proved more than equal to the problems you have set it. That success predisposes you to relatively sloppy tactics like splitting drivers before you ought to and using your inbox as a patch queue.

I hang my head in shame at this. I'm lucky, though, that the other members of the D team talked me into using modern tools like github and bugzilla. I'm grateful for that.

P.S. yes, I really did use email as a patch queue and database.

  • realusername 10 years ago

    You are not alone... on my first internship, we were transferring code by USB keys, I just can't believe I used to work this way at some point.

    • WalterBright 10 years ago

      At least you didn't store the only copy on a floppy in your desk drawer next to your lunch.

      • Vivtek 10 years ago

        Ahem. That brings back some shameful memories.

      • watmough 10 years ago

        We walked a 3.5" disc down to a 'build box' in the basement.

        Happy days.

        • rwmj 10 years ago

          Scarily, I have single, hand-written source files that would barely fit onto a 3.5" disk.

          • rwmj 10 years ago

            Since that was downvoted for some reason, here's the source file I was thinking about. It's 762K, so about half of a 1.44 MB 3.5" disk. The total for the whole directory (itself a fraction of libvirt) is 9.2 MB.

            https://libvirt.org/git/?p=libvirt.git;a=blob;f=src/conf/dom...

            • jsnider3 10 years ago

              Suppose you change one line, how long does it take to recompile that file?

              • rwmj 10 years ago

                That single file takes 0.56 seconds to compile on my i7 laptop. However deleting and recompiling that file triggers a relink of the library, and then a relink of all the utilities using the library, and that takes a bit longer.

            • protomyth 10 years ago

              Technically, that file wouldn't fit on the 3.5" disks I used in college (400K Mac and 720K PC).

  • WalterBright 10 years ago

    BTW, there are over 14,000 commits just on the dmd compiler itself, and 120 contributors. Not using a version control system would have caused a complete collapse.

    • jacquesm 10 years ago

      The CTO of a project I worked on a couple of years ago refused to install a version control system. I basically threatened to abandon ship if he wouldn't relent and eventually he did, but until today I don't think he's fully convinced that it was a good move.

      • arethuza 10 years ago

        In my "big corporate job" of a few years back I introduced a policy of doing due diligence on suppliers who were writing applications for the company - was amazed to find that some people not only don't use version control systems but can argue with a straight face that they are a bad idea.

        • jacquesm 10 years ago

          I just did DD somewhere and the CEO said with a straight face that 'testing is old fashioned' in response to me flagging their test procedures as inadequate. Some of the stuff you come across just borders on the incredible.

          Fortunately most companies have their stuff in order.

          • arethuza 10 years ago

            We did have a salesperson at one company who complained about us testing stuff as "all it did was find bugs". I think he thought that testing actually created bugs and that if you didn't test the product it wouldn't have any bugs.

            • jimbokun 10 years ago

              Sometimes small children will cover their eyes with their hands and say "You can't see me!"

          • lmm 10 years ago

            Manual test cases are old fashioned. Type systems and generative tests are more efficient ways of reaching the same defect rate, IME.

            (I assume that isn't what you/that CEO mean though)

      • GrinningFool 10 years ago

        Minor usage correction, "until today" should be "to this day". "Until today" implies that something happened today that changed his mind, while "to this day" is saying "even now, as of this day".

        (My apologies if this isn't of interest - I'm not trying to be pedantic, but the misusage suggests that English is a not your first language. Most people I know who have learned English as secondary language are interested in these kinds of usage corrections.)

        • jacquesm 10 years ago

          > the misusage suggests that English is a not your first language

          It isn't. I'll try to remember, thank you.

          • Joof 10 years ago

            He's correct, but it wasn't something I noticed until he pointed it out. Your intent was understood.

            • tizzdogg 10 years ago

              The intent was understood, and it's a pretty minor quibble. But I agree that line threw me for a second as well, and I had to read it twice. I was expecting the next line to be "and then today our version control totally saved our butts!"

      • st3v3r 10 years ago

        I honestly cannot understand that mindset. What were his reasons?

    • WalterBright 10 years ago

      Another great advance was the autotester. DMD has always had a test suite, but Brad Roberts wrote a plugin for github that essentially prevents merging pull requests unless they pass the test suite. I highly recommend it.

  • knodi123 10 years ago

    I've seen this sort of version control done twice in a professional setting, and both were by programmers much more gifted than me.

    I once saw a guy who wrote a robust e-store web app in C. Not C++, but C. Tons of complexity, and it worked fine, but then when I dived in to work on it, it was a nightmare. He told me "You want main_app.version3.old.c, That's the one that gets compiled and pushed to the production server. Not main_app.c, that one's old and we don't use it anymore." He built a build system from scratch, did his own version control in his head, and kept everything in one monolithic C file.

    Of course, he was the shittiest software developer I've ever seen. Just a brilliant programmer. He needed a manager the way a jet needs a pilot. Sadly, he was 30 years my senior, and not amenable to being told what to do, so after a long talk with our CEO, we decided to let him go. He was the only one who knew how our system work, but I built a comparable one using best practices and open-source software in less than a month.

    • rwmj 10 years ago

      C isn't a terrible language to write a web framework in. (Not using version control is a terrible idea). About 15 years ago I wrote a simple high level framework in C for writing web apps:

      http://git.annexia.org/?p=c2lib.git http://git.annexia.org/?p=pthrlib.git http://git.annexia.org/?p=rws.git http://git.annexia.org/?p=monolith.git

      It actually does stuff that even current frameworks cannot achieve, such as providing long-lived stateful web apps entirely in HTML (no JS required), although you are entitled to doubt if that matters these days since JS has won and is available pretty much everywhere.

      The best thing about it was that it was so fast, because the code + data of a small web app would fit entirely in the L1 cache of the CPU.

      • kbenson 10 years ago

        > It actually does stuff that even current frameworks cannot achieve, such as providing long-lived stateful web apps entirely in HTML

        What? This was the norm back in the day. It's not like all those Perl programmers writing CGIs or later PHP programmers writing PHP apps were using JS to tie it all together.

        Or am I misunderstanding what you mean?

        • rwmj 10 years ago

          It had two levels of persistence. There was a database layer for long term, persistent storage. But the clever(?) part was that the C threads persisted (in memory) beyond each single HTTP request. e.g. you could create a calculator web app where you would press buttons and have the calculator display numbers, and all that would be handled (across multiple requests) by a single C thread. The calculator display might be stored in a stack variable.

          Of course you can imagine ways for this to fail - restarting the webserver wasn't very nice for your users for example. Also you needed a smart front end which would direct user sessions back to the same web server instance. (And since it used cooperative threads, each core would be running a separate web server -- but this was 15 years ago when multicore machines were not too common).

          • kbenson 10 years ago

            Ah, so this was possible, and occasionally done back then, but the real reason it wasn't was less to do with capability, and more to do with everyone wanting to ride on top of Apache. Apache handled a lot of stuff you wouldn't want to in a CGI (at that time), so it made sense to use it. Apache forked (and/or threaded depending on era), so variables shared in memory wasn't common. That said, people set up shared memory regions, or used file based sessions and /dev/shm, which is functionally the same, and had much the same thing.

            • rwmj 10 years ago

              This is a ground-up web server rewrite, so it didn't use Apache, although we did (sometimes) front it with an Apache-based proxy.

              • kbenson 10 years ago

                Oh, I understand that. I just used Apache as a reasoning for why most in the era weren't using memory based sessions.

                Also I think it's worth saying that I'm not trying to belittle your accomplishment, as it may have come across that way. Writing your own framework in the language you used to handle logic proved to be somewhat prescient of you, it's what numerous other projects ended up doing (Rails, Mojolicious, etc) for multiple reasons, which I'm sure you were able to take advantage of. I remember my own tests using ApacheBench ca. 2005 to test simple CGI performance vs mod_perl performance vs PHP vs Perl's HTTP::Daemon implementation with forking. When the workload is small, and the routing needs are simple, it's amazing how much overhead the webserver includes.

      • pcx 10 years ago

        C is a terrible language to write a web framework in. The kind of high-level constructs modern programming languages provide are just not possible in C. It is also very easy to write buggy code and is too low level for the use case.

        • rwmj 10 years ago

          You should try looking at the code before declaring that. The C used a pool allocator, had some high level structures (vectors and hash tables, basically the same as Perl), loads of safe string functions, try/catch, coroutines, cooperative threads, and other stuff I've forgotten[1].

          It was possible to write safe code in that framework, and in fact we did write a lot of code used daily by tens of thousands of UK schoolchildren until quite recently.

          [1] Invoking https://en.wikipedia.org/wiki/Greenspun's_tenth_rule although I like to think our code was very minimal, elegant and not too buggy.

          • pcx 10 years ago

            > You should try looking at the code before declaring that.

            Attempting to write a web framework in C is great!

            Even though you end up building the high-level programming constructs, C web dev is still just too hard compared to other alternatives. Because of this it is not possible to build a large community around it, which I would say is the most crucial part of today's web framework like Django/Rails.

      • knodi123 10 years ago

        > C isn't a terrible language to write a web framework in.

        Hey, I wrote my first CGI script in Pascal, so I know it's not impossible. And nothing I've written since then has been so fast. ;-)

        But so much stuff like GZIP delivery, POST parsing, cookies, etc will require you to write enormous functions, with countless "gotcha" edge cases, just to reinvent the wheel.

        Using it in production for anything complex (like a web store selling digital downloads), is just nuts.

        • rwmj 10 years ago

          Agreed. This was 15 years ago (although it was in service until quite recently). We used to front the thing with an Apache proxy, so that could deal with more modern web standards.

      • lmm 10 years ago

        C doesn't have tagged unions, which makes it a terrible language to write pretty much anything in. Most of the other pieces you need for good programming you can write yourself in C, but you can't make a safe tagged union out of thin air, and if you rely on helper functions or macros then your tools won't understand them.

        It's also so bad at expressing literal values that I've seen a serious recommendation to write literal strings and parse them instead ( http://www.tedunangst.com/flak/post/string-interfaces ).

        The type system doesn't even do generics, never mind higher kinds. Maybe you could keep a web framework small enough that that wouldn't be too big a deal.

        • rwmj 10 years ago

          These are all valid reasons against using C for anything at all, but they apply to many other languages that people use for web apps too.

          It's worth noting that another web framework I wrote a couple of years later was written in OCaml[1].

          [1] https://savannah.nongnu.org/projects/modcaml - also dead upstream, and there are now much better choices for OCaml web apps.

          • lmm 10 years ago

            People still use untyped languages for some things, but for the rest I don't think so? I mean if you have virtual functions then you can effectively implement (inefficient) tagged unions, and every language I've seen used on the web has a reasonable syntax for basic values.

    • st3v3r 10 years ago

      I don't know about that statement. If someone can't understand basic source control, and the benefits it brings, what else in their software are they not thinking of?

nkurz 10 years ago

Here are a few earlier discussions of this email:

  Curse Of The Gifted (2000) 606 points  
  luu  2 years ago  365 comments  

https://news.ycombinator.com/item?id=7219872

  Eric S. Raymond - The Curse of the Gifted (2000) 243 points
  vinutheraj  6 years ago  59 comments  

https://news.ycombinator.com/item?id=1167754

  The curse of the gifted programmer (ESR's email to Torvalds) 95 points
  semmons  6 years ago  38 comments  

https://news.ycombinator.com/item?id=1221756

It's interesting to compare the quality of discussion over the years. In this case, I think the more recent ones come out looking pretty good.

  • IsaacL 10 years ago

    https://news.ycombinator.com/item?id=1221756

    The first two comments on this thread were definitely snarkier and more aggressive. Part of me thinks there were advantages to the earlier culture of HN, though. People were more likely to be challenged on their statements, and forced to defend their beliefs.

ktRolster 10 years ago

ESR showed his wisdom. That is a nice post. I like this quote:

  > When you were in college, did you ever meet bright
  > kids who graduated top of their class in high-school 
  > and then floundered freshman year in college because 
  > they had never learned how to study? 

Yeap. I also met a few who thought they were smart, then gained a secret terror that they were secretly stupid because they found CS hard.

Some things you have to work at before you learn them.

  • WormyMcSquirmy 10 years ago

    I can relate to this. I'm a SE now but when I was in university I didn't bother studying, especially for an algorithms/data structures class. I did ok in the class (well below my average) and made up for the relatively bad mark in other classes. Now I really wish I had of just worked at it because I'm trying to fill this knowledge gap now after work. It would have been far easier if I had just studied it properly the first time.

  • WalterBright 10 years ago

    I was one of those freshman who floundered his first year because of execrable study habits. It was a good thing my freshman year was pass/fail. I didn't figure things out till the next year.

  • no_wave 10 years ago

    Was he at all correct in thinking that this applied to Torvalds? Time seems to have proven that ESR was completely off-base.

    • ktRolster 10 years ago

      If Linus really wasn't using source control at that time, then yes, he was correct lol

    • girvo 10 years ago

      Linus did change his approach, somewhat, slightly. Linux kernel development is less of the wild-west that it used to be, at least. Heck, Linus ended up writing git!

      • gansai 10 years ago

        almost felt the same thing. Felt as if this mail by Eric kind of subconsciously forced Linus to write git.

        • watmough 10 years ago

          Guilting Linus into writing Git.

          What a thing!

        • iolothebard 10 years ago

          No this helped him move to BitKeeper.

    • toyg 10 years ago

      To be fair, Linus did change. That charge about not valuing version control and systematic release practices? He built git in 2005. Kernel release practices are now a well-oiled machine. And overall the kernel has likely got more modular, not less, over the years (although I have not had a look in a while, but that was the trend a few years ago).

      ESR might have been wrong on the specific item at hand (I have not read the whole thread, and he, ESR was wrong on a lot of things over the years) but some of his arguments are definitely right - at least seen from a "gifted something" who flopped in uni ;)

      • qb45 10 years ago

        But was it due to ESR's ramblings or due to patches overflowing his inbox capacity?

        Personally, for years I had been completely ignoring everybody who framed something as "a better alternative to talent" (wtf?) or said the magic words "you are smarter than me". They correlated too well with "stupid ideas I knew (or quickly checked) to be wrong".

        Nowadays I'm trying to fish for useful information even in messages which push my bullshit-o-meter out of scale, but it takes work.

        If you want to maximize your chance of being treated seriously, stick to constructive arguments about the problem at hand, not some generic unfalsifiable wisdom.

        • lilbobbytables 10 years ago

          The reason for that way of phrasing is because it appeals to ego. If you want someone to do something, particularly someone with a known ego, then this is an effective way to get them to listen to you and not dismiss you.

          Of course, there's a fine line between stroking and patronizing, though.

          • qb45 10 years ago

            No, it's a trap.

            It works until you get to those with really big egos who take pride in dismantling such tricks and gaming others by pretending to fall for their games. These need higher levels of gaming.

            But in the end, if you truly think that something is a good idea for everyone involved, just explain why.

        • jschwartzi 10 years ago

          Whenever someone accuses me of being smart I take it as an insult because they usually mean I'm not communicating at a useful level for them.

      • mcv 10 years ago

        Even before git, he started using BitKeeper in 2002. I guess Linux realized he couldn't continue without some more structure. Even if he didn't need it, other developers do.

        • digi_owl 10 years ago

          Well he did in part because at one point Alan Cox's branch of the 2.4 kernel was threatening to become the de-facto kernel. This because Torvalds had built up a massive patch backlog.

    • Vivtek 10 years ago

      Possibly Torvalds can learn from good advice, then?

    • st3v3r 10 years ago

      Did it? Or was this part of a wakeup call that Torvalds needed to change things?

      If this exchange, or a similar one, had not taken place, would things be the way they are today? Or would the predictions of this email have come to fruition?

  • gpvos 10 years ago

    Yeah, that's me. Even sailed through all years of university with high marks without having to do much. Until the graduation project, which became an utter failure. Ouch.

  • crazypyro 10 years ago

    I managed to get through college keeping the same crappy (read: None) study habits as in high school, but I've always struggled with gaining the work ethic to actually work on side projects I'm interested in instead of coming home from work and playing video games all night or other vices. I've almost gained a secret terror inside myself that I am just not the type of person to have a strong enough work ethic to get into the habit of developing in my free time and its been difficult for me to self motivate, even though once I get started, I tend to enjoy programming outside of work. I get all my work done quickly and efficiently at my job, but I almost wish that I didn't have a high natural aptitude so I would have had a strong necessity to gain these skills for my personal life.

    • ashark 10 years ago

      Wow, are you me?

      I suspect that if I were even a little dumber (and mind you: I'm bright, but not that bright, ya know?) I'd probably be homeless instead of doing pretty damn well as a developer. Then again, maybe I'd be better motivated if couldn't achieve 7-8/10 results on a 5/10 level of effort. Only trouble is when I need to hit 9 or 10 on a deadline...

      Weird thing is, I have a phenomenal work ethic on projects that involve physical labor, and not just the purely mindless kind, provided I'm not the only one working on the project—if it's solely up to me to start it and follow through on my own, it won't happen until I have one of my "I feel like I can conquer the world!" days when I inexplicably feel full of energy and confidence and motivation, and I only get those a handful of times a year. Anyway, point is, that tells me it's not some pervasive defect in my very being. I can have a great work ethic, without even trying, really, under the right circumstances, and I feel good when I do—I don't work grudgingly in those cases.

      Curious if you've observed similar things in yourself.

      As for modifying my behavior and fighting laziness: I've found I've gotten a bit better at this naturally as I've grown older (now early 30s) and sometimes actually win the battle of wills with myself, but my main insight has been that if I'm serious about something I must engineer my environment for success. Sorry to say it, but if other things are taking up time you want to spend on something else, your best solution may be to mercilessly eliminate distractions as you find them while also making it easier to choose to do the things you wish you would do by putting the tools and materials you need (if any) somewhere convenient. Like, sell-your-gaming-computer/consoles—pretty extreme. Or at least put them somewhere really out of the way. Maybe find some way to unplug it all and stick it in a closet, and always put it back when you're done.

      It's tough, but it works.

      Given this discovery, I dream of a world where I can live in one house engineered for learning and productivity most of the time and another with all the distractions I enjoy the rest of the time. If only houses weren't so expensive, heh.

      Short of that, you can commit to only engaging in your distractions in the best possible way. "I can watch movies or TV or play video games, but only ones of high artistic merit or great significance". "If I want to switch windows away from work and read crap on my laptop, that 'crap' must be a classic from Project Gutenberg." "If I pull out my phone for no immediate purpose, the only thing I can do is run through flash cards, or Duolingo". That kind of thing. It's usually harder (though far from impossible) to over indulge with restrictions like that in place, provided you can stick to it—such media is chewier, less addictive. Doesn't make you feel as bad afterward. Steak and asparagus versus cotton candy.

      For my part, HN will probably have to go soon, and I may start unplugging my Internet a few days a week. I'll have to experiment with the latter, we'll see how it goes.

      • nutlab 10 years ago

        Well, are you me?

        Everything you said rings true with me. From the effort/result ratio to waiting for the "feeling" to get things done all the way to the age.

        I've been thinking about ways to fix this, though, I'm more looking into figuring out why I behave this way rather than how I can work around it.

        Seems to me like, this type of behavior stems from the childhood (up until college) where being a relatively smart person allows one to keep afloat (and even shine sometimes) without spending much effort.

        Then you hit college and you face the fact that you have to put the effort in, you can't just get by anymore. You sorta learn to struggle through a bit of "learning how to study" but still not at the level where you feel like you owned your studies, more like enough to get back to that 8/10 result on average. Put simply, you are now doing 5/10 effort for 8/10 results while it used to be 1-2/10 effort for the same result.

        Then you move on to the real world (tm) where the effort is sometimes just as important as the result. Even if that's not the case for you, you just realize 8/10 results are sometimes not enough (for your employer, for personal satisfaction, for whatever reason).

        This, combined with the fact that your pride now firmly lies in your level of intelligence, makes self-improvement really hard. How? First, you don't wanna do the easy stuff, because, well it's not worth your intelligence; so you dream of doing the hard stuff. Reading complicated books, learning a new language what have you. Then, you start unconsciously delaying doing/learning the hard stuff. You only do those if it's part of your job so you have to. You delay it, I think, because the fact that you may not accomplish those deeds in the short amount of time you think you should, proving yourself that you're not as smart as you think you are. That, is like the ghost at the end of the dark hallway. You don't even wanna risk getting into that state of mind. "I just don't have the time" or "I really haven't spent much effort on this" is a much better excuse for you than "I'm just not smart enough. Need to work harder/longer on this".

        Don't know if that's the case for you, but it feels like it is for me. I'm trying to let myself go to fix this basically. It's okay to not be brilliant. It's okay to fail, make mistakes, suck at certain things while being just okay at other things. There is no implicit need to be excellent at everything you do. More importantly, "too proud to be dumb" is a bad mindset to be in. Even if you are as smart as you think you are, you are not fully utilizing your capacity by restricting yourself due to a fear of slightest failure/mistake.

        That said, the ideas that you are trying sound interesting. Maybe they could also help taming this subconscious beast by my conscious idealist.

        • ashark 10 years ago

          Ha! We should form a club.

          > Seems to me like, this type of behavior stems from the childhood (up until college) where being a relatively smart person allows one to keep afloat (and even shine sometimes) without spending much effort.

          > Put simply, you are now doing 5/10 effort for 8/10 results while it used to be 1-2/10 effort for the same result.

          Oof, yeah. It wasn't until years later that I realized my primary and secondary school experiences had led me to categorize having to study to understand something both as a kind of failure and as something akin to cheating, of all things. It's not a way of thinking I'd settled on consciously and not something I'd have framed in those terms until I spent some time reflecting on my thoughts, but sure enough, that was what my stupid, stupid mind had been doing. Totally bizarre.

          > This, combined with the fact that your pride now firmly lies in your level of intelligence, makes self-improvement really hard. How? First, you don't wanna do the easy stuff, because, well it's not worth your intelligence; so you dream of doing the hard stuff. Reading complicated books, learning a new language what have you. Then, you start unconsciously delaying doing/learning the hard stuff. You only do those if it's part of your job so you have to. You delay it, I think, because the fact that you may not accomplish those deeds in the short amount of time you think you should, proving yourself that you're not as smart as you think you are. That, is like the ghost at the end of the dark hallway. You don't even wanna risk getting into that state of mind.

          I get that. I also have to watch myself very carefully or I'll end up making lists and ranking things and researching and never actually do the activity those actions are supposed in service of.

          > "I just don't have the time" or "I really haven't spent much effort on this" is a much better excuse for you than "I'm just not smart enough. Need to work harder/longer on this".

          Bingo.

          > Don't know if that's the case for you, but it feels like it is for me. I'm trying to let myself go to fix this basically. It's okay to not be brilliant. It's okay to fail, make mistakes, suck at certain things while being just okay at other things. There is no implicit need to be excellent at everything you do. More importantly, "too proud to be dumb" is a bad mindset to be in. Even if you are as smart as you think you are, you are not fully utilizing your capacity by restricting yourself due to a fear of slightest failure/mistake.

          My approach to fighting this lately has been to deliberately seek things I know I'm awful at and work on them at least until I see improvement. Pick up a new instrument, write a program unlike anything I'm familiar with, take dancing lessons (coming up this Summer!). Eventual mastery isn't the point—just improvement. I know you're supposed to specialize in this modern economy of ours and just keep improving skills you're already good at, but I need this kind of thing, I think. It's like failure therapy.

        • crazypyro 10 years ago

          I don't have much to add to the conversation, but I would just like to explicitly point out (aside from upvoting) that you and the other commenter, ashark, have vocalized and concretized a lot of nebulous and vague feelings I've been having for many years. I appreciate both of your guy's suggestions as well. Thanks for the wisdom.

cubaia 10 years ago

It doesn't seem like this has anything to do about Linus raw talent, or the "curse of the gifted".

Quite the opposite, it seems it was an opinion evolved through experience.

https://lkml.org/lkml/2000/8/22/52

Linus point was apparently about avoiding crappy interfaces when one goes about having common code just because it looks like they do the same thingy. He seems mindful enough that sharing code is hard.

https://lkml.org/lkml/2000/8/23/47

On the contrary, a raw talented engineer would usually jump into the opportunity to refactor and share common code, without realizing when the challenge is above one's ability.

In this aspect, even a few decades of experience in software (fragmented in many separate projects) can be less valuable than a single 5 year stretch in the same code base.

optimusclimb 10 years ago

What an amazing email from ESR.

I feel like I've had the issue he describes happen to me in multiple facets of life, at different points.

College? Check - There definitely was a point where I couldn't cruise and catch up by cramming. High school was a joke in comparison with some of the learning challenges I finally encountered.

Task management? Hah! Todo lists are for old people. I cruised by on this one for a LONG time due to (at least my own perceived) pretty large short-medium term memory before personal life + work life (and moving up the chain) meant that there's no way I'd remember everything that needed tending to unless I adopted some sort of system.

More guilty one? Tests. For better or for worse, I worked professionally in an environment where we a) had a compiler, b) had a QA group, and c) managed to put out a lot of working software without a test suite. It definitely made me finally give in to "code should have at least SOME test suite, if not a pretty comprehensive one" after much kicking and screaming. To this day, in my mind, I harbor feelings that it's possible to pump out largely working (i.e. with a defect rate not much worse off than any other project, because no software is without any) software incredibly faster and make the users/customers/people who wanted the thing built happy WITHOUT writing tests. That said, I also know it's completely irresponsible and not scalable to do so.

  • mbrock 10 years ago

    With tests, there's also the idea that writing them helps you write better code.

    That's something that doesn't happen automatically. If you approach tests as something you have to do because somebody told you to, and I think this is pretty common, then your tests are probably not going to be great, and it's not going to help your code...

    But if a team really takes to heart the whole principle of testing, and start to design things with testing in mind... then they start to ask questions up front like "how will we really know that this works?" and "how can we isolate this component so that we can test it independently?" and "how can we write fast tests for this?" and "can we make this into more of a pure, simple data structure?" and so on and so on.

    Especially this one: "How can we get the important business logic here to be a clear and distinct module with verifiable correctness?"

    And that's a cascade of wonderful benefits. Enforcing a culture of "you must write tests" might possibly help with QA, especially in the more obvious cases of algorithmic correctness, but the true benefits are so much deeper.

hex13 10 years ago

Seeing this post in context of whole conversation will show that Linus' stance was not that bad:

https://lkml.org/lkml/2000/8/22/12 (quote from Linus' post)

`It's true that "simple and tested code means less bugs". And quite often, code sharing will imply that the code gets (a) more complex and (b) has cases that people who make changes will never be able to test.

No, I'm not saying that sharing is bad. Sharing is good. But anybody who makes a blanket statement like "sharing reduces bugs" is full of crap.

Good and clear interfaces reduce bugs. Avoiding complexity reduces bugs. Using your brain before you code something up reduces bugs.

But making a very complex driver that handles ten different variations on the same hardware? No. That does _not_ reduce bugs. It's quite often more efficient to have two people work on two drivers that are independent of each other, than to have two persons working on the same driver. Alan put it well at some point: the way to create working open source software is to minimize the amount of communication needed.</i>`

I think he's veeeeery reasonable in this. This reminds me "Wrong Abstraction" article. https://news.ycombinator.com/item?id=11032296 Sometimes it is better to create two separate things than create some weird obscure abstraction which cover all the cases.

bbtn 10 years ago

I have seen these people who have "curse of the gifted." One of them is me, another is my step-son.

Problem is people's approach to your gifts, first; your parents. If they say continuously that you are gifted, very smart, very beautiful, adorable etc and you can do anything you want because you are so smart, you are most likely doomed later in life.

Now, my step-son about to finish high school. His mother, always complimented him starting from kindergarten. He was smart all along, did all problems from his mind easily without much effort. His parents and teachers complimented him everyday. He was happy, and proud of himself to be smart, his parents were also proud.

High school required more disciplined work. He couldn't make it, too many distractions around. He was thought to be a very special person when he grow up, but now, he is below average, and sadly, he accepts that even though he had the potential. I see how he will fail more in college, and can't help.

My only difference from him was that he is failing in high school, I failed in university.

I have a small daughter, 4 years old, and I am afraid as hell not to spoil her. She looks very smart and gifted. I always say she is not gifted, she is just normal. I don't want her to be very special person when she grow up, I want her to be happy and healty, that's all. Only thing I am trying to do is not to say her that "she is gifted, she is very smart".

I don't know how to solve his brother's problem. Looks it is very late.

  • ktRolster 10 years ago
      >  I see how he will fail more in college, and can't help.
      >  My only difference from him was that he is failing in high school, I failed in university.
    

    Help yourself first, man. Figure out how to beat your own distractions. Reach your potential. You can do it, and then your example will inspire him (or at least show him the way). You owe it to your son, and you owe it to yourself.

  • zelos 10 years ago

    I believe there's a fair amount of evidence that praising effort, not cleverness or 'being gifted', is much more productive for children in the long run.

    • Jemmeh 10 years ago

      Yes, this! Praise effort. Tell them it's okay to fail, heck it's even GREAT to fail because each failure puts you closer to success.

      It's not a "You are talented or not". Sure some people start out with an advantage but everyone has to hone their skills through practice and effort.

  • 50CNT 10 years ago

    This may be a bit rude, but seriously, what the hell?

    It sounds like the kids hit high school, and you're already like "it's too late for'im, he's doomed!" That's quite the rough judgement to pass on someone who is still happy about growing some pubes. That has happened to me, and I'll tell you, it's no fun.

    Second, academic skills aren't all that different from any other skills. Some people have picked them up by accident, some got them from their parents, and some idiots thought that gifted kids don't need these things, and we didn't protest either, because we were smart beyond our years, not wise. Thing is, you look at what the kids that get it right do, and you can pick them up within a couple of months. Cal Newport[0] wrote some decent books on it, mostly based on studying honours fraternity students and their study habits.

    Third, don't make the kid feel inadequate because he lacks those skills. Being treated as the prodigal prodigy isn't a fun place to be, and really, what is he missing? Educational pedigree isn't all what it's hyped up to be any more. Tech people are increasingly self taught, and other industries that still rely on degrees to do the weeding are cutting left and right. Paralegals? Poof. Traders? Poof.

    So what's there to be afraid of? Challenge your step-son, demonstrate to him the need to pick up those skills, and he'll probably figure it out. Show your support for him. You've already singled him out from the other 90% of kids, might as well help him get to the fun end of the bell curve.

    [0]http://calnewport.com/books/

  • _nedR 10 years ago

    I don't know whether drilling down the message that "she is not gifted, she is just normal" is the right way to go. Maybe she will the get idea that she is not talented enough to try something so why bother. Alternatively you could reframe the message as "You are as gifted as anybody, hardwork is what matters".

    A book won't change a person's life, but https://books.google.is/books/about/The_Adventures_of_Johnny... is a short manga (might not be suitable for the 4-year old but maybe the university student). Lesson 4 is "Persistence trumps talent.".

    A summary of the lessons in the book : http://www.danpink.com/2013/05/the-6-essential-lessons-of-a-...

  • Ntrails 10 years ago

    I wrote a really long thing supposed to help but it ended a bit self indulgent.

    Short version: I failed my "high school exams" after coasting for so long I didn't know how to learn. I became afraid of trying in case I failed. So I didn't try and embraced failure. Worked as a chef for long hours and little money.

    Turns out it's never too late to take control of your life and do something else. I went to uni at 23 via a foundation course (requiring no exams). I got a good job, am working towards a professional qualification and was sponsored through an MSc.

    It's never too late, but it is often to early to reach your potential

  • lordnacho 10 years ago

    Don't lose hope, but be realistic. The kid needs to disabused of the notion of innate skill.

    My brother's a smart kid too. He ended up getting the lowest grades in living memory at our school, totally bombed high school.

    Now he's finishing a CS degree at Columbia.

    Going over it, he told me he never saw me study anything. I went off to Oxford before him, and he figured he'd do what I did. (What he didn't see was my late night homework sessions.) Only after many years did he get his act together.

    Learning is really only about effort. You get a lot of people pretending it's easy so they can get that "smart" label, even through college. Don't let them fool you. Remember there's nothing at all, all the way through college, that isn't public knowledge that you can acquire just by reading and trying for yourself.

  • bproctor 10 years ago

    It's never too late. I was a D student through most of high school, just barely graduated. I didn't care. Drank through three different colleges without getting a degree and spent most of my twenties bumming around. It wasn't until I was nearly 30 that I started getting my life together. I'm 38 now and feel quite successful and happy with where I'm at in life. I'm sure from my parent perspective, I was pretty hopeless.

  • nibs 10 years ago

    My brother said this one time and I think it applies here. In terms of career success, IQ is the Y Axis you start out at, but hard work is the X axis representing how far you get in that field. It is the responsibility of those high on the Y axis to push just as hard along the X axis. What is success for one person is not success for another, so just set expectations based on things that take hard work as opposed to brute force intelligence. School isn't really an indication either way of future success, of my smartest friends, they typically end up closer to the top of their field, but many failed at school/academic pursuits and got into other lines of work, creative endeavors, etc.

  • st3v3r 10 years ago

    Don't drill the message that she's "not gifted" into her. Drill the message that she works hard into her.

henrik_w 10 years ago

Previous discussion (632 points, 2 years ago, different URL):

https://news.ycombinator.com/item?id=7219872

And here is a good comment:

https://news.ycombinator.com/item?id=7220508

From it: "Eric writes using vague generalizations about age and experience; Linus writes with specifics about his experience with the kernel."

And: "Also, compare this message from Linus earlier in that thread https://lkml.org/lkml/2000/8/22/52 with a post of his from yesterday: https://lkml.org/lkml/2014/2/10/575, especially regarding abstraction."

  • icebraining 10 years ago

    Sounds like his position hasn't changed, despite the tremendous growth of the kernel since then. Maybe he was right after all.

taneq 10 years ago

I don't know about the specifics talked about here, but he's absolutely right that no matter how much raw talent you have, eventually you will find yourself facing a challenge that you can't beat. And at that point, if you want to keep improving, you will have to start learning the same kinds of engineering discipline and using the same kinds of external aids that everyone else has had to use all along.

I've seen a few people go through this process (and experienced it myself) at various stages in their careers and everyone has a rough patch after hitting that wall. Eventually they admit that what they've been doing is no longer working, and they become better engineers because of it. But it's tough when you're in the middle of it, and for a while your work definitely suffers.

  • linuxkerneldev 10 years ago

    > I don't know about the specifics talked about here

    The specifics matter a lot here. ESR was trying to get his patchset for his rather complex configuration/menu language into the kernel (to be used to configure kernel configs/options) which seemed to have to do more with ESR's need to be perceived as a "kernel hacker" rather than any concrete problem. Fortunately, Linus said no. ESR responded with some weird tirade which had nothing to do with the matters being discussed. Luckil

V-2 10 years ago

This letter reminds me of a historical anecdote (I read about it in some history book, it could be apocryphial though) in which Hitler's generals were faced with some ludicrous strategical concepts of his. But, of course, noone really dared to speak up. And finally one gray-haired general clears his throat and says "mein Fuhrer, I'm afraid you are mistaking Stalin for a genius equal to yourself!"

onion2k 10 years ago

The greatest realisation I've had as a developer is that no matter how much I learn and how clever I think I'm being, I'm always going to be limited by the number of hours in the day. If you want to build brilliant, audacious, complicated applications then you simply have to work with other people because you physically can't do everything yourself.

If you're a "lone gunman" you'll have to accept you're limiting yourself to things you can make in your available, very limited time.

  • marktangotango 10 years ago

    To me this is where the allure of the 10/100x developer myth comes in, if I were truly gifted I would build tools that multiplied my ability, so I could do more. But I haven't so I must not be. Is it a myth? I don't know.

jacquesm 10 years ago

Thinking is like 4 wheel drive. You still get stuck but in harder to get out of places.

  • nowarninglabel 10 years ago

    Which is why you learn to install a winch or have a friend handy with a 4-wheeler to pull you out. Having the right tools or right people to turn to for help can get you out of almost any situation.

    • taneq 10 years ago

      Precisely, and this is all the email is saying; that it's better to learn how to use a winch or a snatch strap before you get yourself fully bogged.

      • protomyth 10 years ago

        Side story: My Dad once worked for Pacific Bell in the 70's and they had International[2] trucks with a winch. One night they need to go up an Oregon mountain road in a blizzard to fix something[2]. They got stuck in the 4 wheel drive and basically hauled the truck up the mountain road by using the winch to pull it up. One would walk to the next pole or tree and then they would pull the truck up. I guess they really needed to fix that thing right then.

        1) A truck that was as impossible to destroy as it was hated

        2) I never really heard what they were fixing, I did hear a lot of cuss words referring to said item.

    • lmm 10 years ago

      But also you don't push the very limits of where you can go, or you won't be able to get unstuck. Like the Kernighan quote.

    • st3v3r 10 years ago

      So would the winch or the 4-wheeler be source control in this analogy?

arethuza 10 years ago

I knew an incredibly gifted developer who was CTO of a company I joined as VP of Engineering. He was a genius level developer but didn't believe that any of the normal rules of software development applied to him - so no backups of product source code (which of course he wrote all the complex bits), no revision control, no build process, deployments by RAID...

Just before I joined, the CEOs nerves had taken a bad hit when CTO had power cable to only laptop with source for product stretched out at ideal tripping height, he runs to get something, trips over cable, smashes laptop...

Mind you he destroyed my nerves as well... <sigh>

Edit: Prize to anyone who can guess how "Deployment by RAID" worked...

  • lmm 10 years ago

    Stag machine has a raid1 setup, when it's time to go to prod you take out one of the drives and put it in the prod machine? That would actually have some quite good properties.

    • throweway 10 years ago

      Staging?? What Bureaucracy!

      • arethuza 10 years ago

        More like "spend money on a server that just sits around not earning money?"? This was in the days before VMs or the cloud.

        What if you only have on site production servers? :-)

  • throweway 10 years ago

    Pull out a disk from array, put in caddy to laptop, copy new source code, plug back into array?

  • anton_gogolev 10 years ago

    > Deployment by RAID

    1. Upload files/binaries/assets to a single server 2. Yank out one of the hard drives from the RAID array 3. Insert new HDD and wait for the array to rebuild 4. Goto 2

  • draw_down 10 years ago

    Who would call this person gifted?! It's idiocy.

    • arethuza 10 years ago

      The observation I would make is that even if you are a genius at designing and writing software it does not imply that your gifts extend to other domains - even if they appear to be very closely aligned.

  • st3v3r 10 years ago

    I have a hard time thinking that anyone would would say that they don't need stuff like source control, backups, etc is a gifted developer. Sure, they might be able to sling code, but the days of that being the main part of the job, especially for someone called a CTO, are long since over.

draw_down 10 years ago

It is, shall I say, suspiciously easy to recognize oneself in this piece. In doing so, you get to be gifted at the small psychic price of being cursed. (For a narcissist, that's actually a win-win.) I submit as evidence most of this comment thread.

Maybe not every one of us is a hugely gifted reserve of untapped potential. Maybe some of us are just people with shitty habits and a reluctance to change.

hnhamdani 10 years ago

This rings bell to me and I tried to applied it myself. "The importance of fundamentals". Some of the hard parts are be honest to myself and admitting it, then re learn everything from scratch. I used to be able to get away with "instinct" but fundamental theory/knowledge is important too.

Pete Carroll preach about it and emphasize it in his team. Elon Musk also talked about the usefulness of sound fundamentals when it comes to learn about any fields of knowledge.

isomorphic 10 years ago

Linus' gifted-child problems aside, calling Linus out over a refusal to use "systematic version-control" might have had some small role in causing Linus to write Git, if for no other reason than spite. That alone makes this an amazing email.

  • Terr_ 10 years ago

    I think it's unlikely: The 5-year gap between those two events seems a little long, and during that BitKeeper was used for a few years so it's not like alternatives hadn't worked.

  • amboar 10 years ago

    It was more that Tridge "reversed"[1] the Bitkeeper protocol, leading to licensing issues and the eventual separation of Linux from Bitkeeper. The need for a high performance, distributed replacement motivated Linus to write a git.

    [1] https://lwn.net/Articles/132938/

    • lmm 10 years ago

      The license issues were there all along. Tridge just made it harder to ignore them.

ktRolster 10 years ago

Does anyone know how Linus responded? I can't find it anywhere after a quick search, and it doesn't seem to be on lkml.org

  • kluck 10 years ago

    It seems that the contents are copy/pasted from a bunch of different messages. Here is the list of messages from that day: https://lkml.org/lkml/2000/8/22 . Torvalds's responses are in there as well.

    • ktRolster 10 years ago

      Thanks. Here are some fun Linus quotes from that day:

        > It's a stupid lie, and one we should ignore at all times it comes up.
      
        > Make good interfaces. THAT will reduce bugs.
      

      Showing that Linus is abrasive, but he's also right.

      • 0xdeadbeefbabe 10 years ago

        I disagree it shows abrasiveness. Saying the same thing in one paragraph would be abrasive.

      • jack9 10 years ago

        Making "good" interfaces is subjective.

mianos 10 years ago

> "I still worry about what will happen if the complexity of the kernel exceeds the scope of your astonishing native talent before you grow up."

It never did and he never grew up. LOL.

  • insulanus 10 years ago

    This is the true ending to that fairytale.

    • st3v3r 10 years ago

      Is it? The kernel now has comprehensive version control, and is arguably more modular.

ryan-allen 10 years ago

That was an epic read. I've only ever known ESR from his 'edge' opinions but this email feels like a pearl from the wise.

He mentioned code sharing and using his inbox as a queue, was this pre-source control? Stupid question, but does anyone have any context to what it was like when this was written?

  • varjag 10 years ago

    No, things like SCCS were already around in the 80s but not in the PC world. At the time of writing though, it was common to use CVS, or if you were a Windows shop, the soul crushing MS SourceSafe. Distributed version control systems would not appear until BitKeeper.

known 10 years ago

Both of them have tons of ego.

0xdeadbeefbabe 10 years ago

Man they ought to call it the curse of the stupid everyone else.

pklausler 10 years ago

That's just one weird e-mail message, a mash-up of Uriah Heep and self-aggrandized condescension.

jorgecurio 10 years ago

This kind of toxic snarkism fueled by fratboy within insecure adults produce toxic working culture. Like literally shitting on anything the other person says or does, makes a pretty tough environment to work together.

  • rjknight 10 years ago

    Sadly, "toxic", "fratboy" and "insecure" are a long way from being constructive criticism either.

    • lmilcin 10 years ago

      I would +1 as much as possible if I could.

      I would also point that people focus on snarky comments but forget how much value the commenters bring. If you can't equal that just shut up and listen.

      • rjknight 10 years ago

        "Toxic" is a particular bugbear of mine. I often see references to toxic individuals, or toxic cultures, which seem to use the word as a way of avoiding having to explain what is disagreeable about these individuals or cultures. GP is arguing that toxic individuals make toxic cultures, which is almost tautological and doesn't really explain very much about why this is a bad thing. If the Linux kernel is "toxic" then it would appear that toxicity is no barrier to success in terms of adoption, or benefit to humanity in terms of the quantity of free software distributed to the world. This doesn't appear to make sense, possibly because "toxic" just isn't a great metaphor for whatever GP wants to describe.

        • jorgecurio 10 years ago

          If people refer to individuals as toxic, then there is high chance they really are toxic to teh team. It's devastating when these type of high egoistical engineers just cannot find any civilized debate.

          There's a reason why women are leaving tech in droves and why there aren't as many African or Latino engineers. The very people who are toxic are often blind to the fact themselves. How many more fine African American engineers being driven out because they couldn't bear the micro-aggression from caucasian workers?

  • hellofunk 10 years ago

    I think you are looking for a different website, called reddit.

    • sweezyjeezy 10 years ago

      Not helpful to respond to name-calling with more name-calling.

      • drjesusphd 10 years ago

        Do you know what name-calling means?

        • hellofunk 10 years ago

          I am compelled to agree that I did not call anyone by any names.

          • jorgecurio 10 years ago

            You just serve as an example of what I mean by 'toxic' behavior. You shouldn't be browsing reddit or tumblr by any means when you are working.

            • hellofunk 10 years ago

              Hopefully, you are recognizing your own contributions to this thread as toxic.

          • st3v3r 10 years ago

            No, but you didn't do much better.

    • golergka 10 years ago

      Tumblr or Twitter, probably.

  • ktRolster 10 years ago

    It didn't seem very toxic to me, ESR seemed very respectful of Linus. Here are some things he said about him:

      > You are a brilliant implementor, more able than me
    
      > the best one in the Unix tradition since Ken Thompson himself
    
      > genius that you are
    
      > You're our chosen benevolent dictator and maybe the second coming of Ken
    
      > we respect you and like you
    
    

    If someone said things like that about me, I would be very, very happy.

    • GFK_of_xmaspast 10 years ago

      Really? Because I'd just think they're brown-nosing me in order to get something they want.

  • lumpypua 10 years ago

    I really dislike the sensitivity to negative feedback that has become more common over the past ten years. It used to be possible to communicate that someone's behavior is harmful without being accused of literally shitting on them.

    ESR's email conveys strong negative feedback—as Linus needed—and in the most deeply respectful and complimentary way I've ever seen in an "email rant". Especially from ESR lol. It's very clear that he means it from a heartfelt place and intends it to be productive.

    If you read that email and feel snark from it, that's projection on your part, and it speaks to an uncomfortability with criticism in your world view. You might find life happier if you see that people give negative feedback not to shit on you or snark, but because they care and want to see you succeed.

    • giancarlostoro 10 years ago

      It's really hard to give any kind of critique that benefits someone without them and everyone around them being offended. I always try to give advise about what should be done instead of what is currently being done when I find someone's done something highly inconvenient, sadly a lot of people take my comments as "pooping" on them. It is not easy trying to help people who think they're fully entitled to be higher than you no matter what. They would be too good if they did receive feedback for self-improvement though I suppose? :)

      • humanrebar 10 years ago

        > It's really hard to give any kind of critique that benefits someone without them and everyone around them being offended.

        These days, now that people define themselves, people will have their identities wrapped up in the things they make and do. In that case, I'm not sure there's a simple way to keep things from getting personal. That's a job for a rabbi, priest, pastor, mentor, or counselor, not a boss or coworker.

        See also: discussing politics, money, diet, weight, etc.

        And, yes, I'm disappointed to come to that conclusion. It seems to mean that we have to continually "handle", patronize, and manipulate people for the greater good. I'd rather treat everyone with respect and transparency. I also think I'm not particularly good at dissembling.

      • jorgecurio 10 years ago

        The only projection is really yourself by writing that. You made all these wild assumptions about me based on two sentences, which shows that you are a judgemental person and not fun to be around at parties.

        I do have a large development team I'm overseeing and every fucking time it's some old dinosaur on the team saying shit like Linus , 'back in my day you werent even born'. Well of fucking course. This just shows how out of touch the previous generation of developers are with the newer generation. I'm glad that 50+ old engineers are no longer around and have tough time getting hired. Frankly people born out of post-Sputnik all share this kind of high mightyness I'm seeing in the industry, shunning all new conventions for rigid old values.

        Software is about concensus folks, it's not a follow the leader to the cliff. That's North Korea.

    • jorgecurio 10 years ago

      He is shitting on them. He can't get off his mighty throne. Big fucking deal he's responsible for Linux. Let's not forget the thousands of other committers who have to put up with linus's bullshit.

    • aninhumer 10 years ago

      There are two sides to any communication, and when an attempt fails to convey the intended signal, in almost all cases both parties share the blame. One can argue about degree, but that's rarely productive.

      I think in most cases like these, where people are offended by criticism, the problem is primarily a mismatch of social expectations, rather than either party being obnoxious or thin-skinned.

      That said, in this case I tend to agree that ESR is doing an fairly good job at presenting his criticism in a constructive way, and it's certainly not too aggressive for Torvalds of all people.

  • douche 10 years ago

    I find it hilarious that people have hit on this meme of programmers being fratboys.

  • bitwize 10 years ago

    Don't throw around the word "toxic" unless you are sure it is the case that the behavior in question is toxic -- and not that you are simply allergic.

    Eric wasn't shitting on Linus. He was damning with high praise -- telling him that he was so damned smart, eventually it would bite him in the ass unless he adopted practices that normal programmers needed just to manage. Were I to receive such a message I would feel simultaneously chuffed and challenged.

    Anyway, Linus could take it -- he's certainly dished out worse.

    Tumblrina culture has made it taboo to actually criticize anyone with stern words -- unless you are calling them out for perceived racism, sexism, or some other breach of political orthodoxy.

    • GFK_of_xmaspast 10 years ago

      ESR toxifies any community of which he is a part.

    • jorgecurio 10 years ago

      Yeah it is toxic. You can tell he's being sarcastic by praising Dear Leader. Just read back on the mailing list and you will find plenty of back and forth that quickly gets out of control. You don't even need to venture out far to find this kind of toxic culture in SV.

      So, criticizing people based on sex, race, and politics shouldn't be perceived as taboo? We blame Marissa for buying Tumblr? What kind of logic is that?