> 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.
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.
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:
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.
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.
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.
> 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.
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.
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.
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.
> 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.
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.
> 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.
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).
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.
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.
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?
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.
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.
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.
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.
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.)
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!"
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
> 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.
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.
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.
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.
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 ;)
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.
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.
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.
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.
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.
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!
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?
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.
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.
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.
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.
`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 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.
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.
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.
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
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.
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.
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".
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.
> 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.
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.
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.
> 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
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!"
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.
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.
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.
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.
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...
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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?
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.
The claim that Subversion or CVS would have killed Linux is rather questionable, given that projects like FreeBSD have been chugging along using them for decades. That's not to say Git isn't a big improvement, but I don't think it's essential.
As much as I dislike ESR on some other topics, in this case I'm on his side. And it seems he convinced Linus, because after this, Linux development moved to BitKeeper, and then eventually to git.
> Linus built Linux. Then git. Track record counts.
Arguments stand on their own. I assume there isn't enough of Linus point of view on this email to make him justice (I'd like to read his response) but ESR seems to be right on this one. He isn't advocating for a specific source control technology just that one is needed.
From the email: I used to worry about what would happen if Linus got hit by a truck. With all respect, 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.
I've been in that situation and it's not pretty, the only thing that gets you by is the believe that you will (conceivably) leave the job before anything bad happens to the project manager.
No, they don't. Arguments can be measured against reality. Let's check the score.
15 years later, Linux has been really smart about where to share code (vfs) and where not to (drivers, subject of this post). Linus was right, ESR was wrong.
Trying to make a framework for everything is the hallmark of the intermediate programmer. Often you increase complexity and coupling in exchange for deduplicating a few lines of code here and there -- in a real system, I often prefer the few lines of duplication and the simpler overall design.
Of course he's changed things about how he works. But ESR was wrong about the specific change he was arguing for (more frameworky code for device drivers) in that mess of musings about maturity and intelligence. See elsewhere in this thread for links to the context.
Ironically, imho, Raymond is the one who's afflicted by a "curse of the gifted" in thinking that one can come up with a future proof abstraction in a domain like that.
That's a bit odd, as there has been a tremendous amount of framework code built for supporting various classes of device drivers since 2000, greatly reducing code you'd write or duplicate.
I'm not very in touch with device drivers, but I suspect 'supporting classes of device drivers' vs 'a framework for all device drivers' is at the heart of the disagreement on frameworks here.
No - not really, they're both significantly changed since the old days of linux, in the sense that many additional abstractions have been created for supporting a framework for all device drivers, as well as adding frameworks for supporting different classes of device drivers.
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.
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.
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.
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? :)
> 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.
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.
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.
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.
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.
"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.
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?
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.
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?
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.