Fabrice Bellard: Portrait of a super-productive programmer (2011)
blog.smartbear.com
blog.smartbear.com
For me, the LTE/4G base station running on a PC that he did is mindblowingly amazing: http://bellard.org/lte/
I mean, if thousands of people know you, 3 thinking you are a jackass isn't bad.
For example, I hate it when people spend a long time deciding where to eat. It drives me crazy. So if it goes on for more than 5 minutes, I'll say "I'm going to (insert restaurant here.) Anyone who wants to join me should come" and leave. Some people love this, some think I'm an arrogant prick, and most are just happy they don't have to wait 45 minutes to eat.
So really, you should ask why people think you're a jackass. I know some people hate my tendency to unilaterally make lunch decisions, but I have no intention of changing it.
That's a nice one, have to remember that :-)
There are a lot of those kind of people, from all walks of life. They're just not on HN.
I am sure there are more such people. Can you please point to some that you know of?. It is inspiring to read bios/accomplishments of such super productive programmers.
Ricardo Quesada: https://github.com/ricardoquesada
- Cocos2D for iPhone (more used 2D game engine)
- Cocos2D Javascript Bindings
- Cocos2D for Python
- SqueakNOS: http://wiki.squeak.org/squeak/5727
- Driver for an obscure wireless Lucene device (new protocol reverse engineering)
- TEG (Tenes Empanadas Graciela)
- Batalla Naval
http://www.amazon.com/iWoz-Computer-Invented-Personal-Co-Fou...
It's hard to think of many others who are as unequivocally good-natured as Woz...accomplished or not.
Arrogance is generally a hindrance to learning. If you already know the "best" way to do something, your less likely to learn a better one. If someone shows you a better way of doing a thing, you're much more likely to take it as a challenge (someone is showing you that you don't know everything) and get defensive about it, instead of being receptive to improvement.
If you take a generous view of those around you, you're much more likely to be able to learn from them. If you are kind, people are much more likely to give you assistance. If you are willing to teach, you end up learning more, as having to explain things also forces you to clarify your own thoughts.
And it's not just a uni-directional relationship. The more secure you are in your own accomplishments, the less feel the emotional need to tear down others. The more you can honestly see that you've been helped in your intellectual endeavors (through advice, teaching, resources, etc.), the more you feel motivated to give back.
Being kind and humble isn't the only path to accomplishing great things, of course, but I've seen enough examples of it to conclude it's a very viable path. And it has the added benefit that if you don't quite make it to greatness (most of use won't), you won't have a whole bunch of people thinking that you're an egotistical jerk.
It is a very viable path and on top of this, they naturally create little coves of open-hack spaces where like-minded geeks hang out :) I was lucky enough to have met a few and spent time in their company. They were all very accessible, if not shy at times. Visibly detached from the career path concerns and fully immersed into technology, building and tinkering.
On the opposite side, I had a misfortune to meet less talented types, yet with egos only matched by the senior management. They fervently protected their turf and enjoyed dispensing condescending remarks.
I will never forget as a junior dev, I was trying to understand how a piece of the system works and in my search came up to a stellar DBA asking about a stored procedure of interest. After a couple of minutes of witty pokes at my expense, he concluded: "Listen, you don't need to know this. It's not your concern. Go away."
Well, eventually, I got access to the guarded secrets and figured it out :)
Imagine a world where hackers, artists and artisans could follow their passions and could chase crazy ideas without a risk of losing the roof on top of their heads and butter over their bread. How many Bellards, we as a humanity, would have running around flinging great code, solving great problems and giving away the fruits of their hard work?
I think we could afford it if we really wanted. If the world just accepted that because of automation fewer and fewer people are needed to work in production (food, items etc.) a huge untapped innovative potential is waiting to be unleashed. In playing Civilization this would be easy, just a click and your society has changed the emphasis of it's production to sciences and art. But how to do this in real life?
I guess I just have to wait and see if the government of Finland gets around and issues citizen’s income as propagated by the Green party. That would be a start and the consequences would be really interesting to see.
Employers like these because they do not build up vast reserves of free days. If you collect four hours off each week for 36 weeks, you have collected four working weeks of holidays. Add the regular 4-5 weeks of holidays and some national holidays, and you can almost take a three month vacation.
Check his webpage notes regarding the 4G LTE implementation. Its commercialised to a company called Amarisoft and it appears Fabrice is involved in that.
Look at their client list...government and telcos. I'd speculate its quite a profitable enterprise.
The only thing is, I actually work harder on my freelance projects and have less "idle time" than in permanent positions, so I am a bit more tired during projects.
Us mere mortars have bills to play and children to support. It makes us unable to take on the challenges that could potentially lead to huge gains because the short term rewards are not guaranteed.
Also measuring every step of progress with monetary value does not work. New discovery (or project, or tool, whatever) may be the first step required on a long path to a great discovery, but by itself, worth €/$ 0 to everybody.
Mormonism prescribes an entire system for this called "The United Order", if you're really interested in a unique answer to that question. Happy to field your questions about it.
Edit: spelling (iPad use in a pub is highly discouraged)
Control is very local, administered by bishops who supervise a few hundred people. Unless there was blatant misappropriation or significant credible protest, a bishop's dispensations would likely go unchallenged. Broad centralized programs that cause trouble for some unforgotten little guy are not plausible in a scenario where control is so widely dispensed and so locally focused.
Of course, there's a religious element to this. We believe the bishop has the right to be led by revelation in these duties, so that dilutes a lot of otherwise intractable social ramifications of such an organization. If a man has been ordained by the prophet to do a thing, tolerance is much, much higher than otherwise, and peace is much more likely to be kept despite individual disagreements.
By extension, Mormons further believe that those who accept the judgment of the bishop with the recognition that their bishop is the authorized representative of God in that matter, even if it opposes their personal judgment or opinion, will be lead and blessed such that they become the wealthiest people on earth many, many times over, incomprehensibly more wealthy than contemporary Western nations. Mormon eschatology, in fact, indicates that a society operating under these conditions will be the only place of prosperity on the whole earth for a time, and everyone else will be at war and unable to cooperate sufficiently to sustain any significant productive output.
And I respectfully call bullshit on mental exhaustion. The true burnout comes after juggling your personal work and your day job, which you can fix by throttling back your personal work. Unlike your day job, you can control the pressure there.
I don't know, that's my experience.
There really is truth in this, most people (myself included) often lose confidence and motivation when thinking too much about the amount of work to complete side-projects, but you only have to remember there are over 300 days in a year, and you can get a lot done in 150 hours of work.
Don't set hard deadlines for yourself as if you're working for someone else, and don't get lost in minor details. Just maintain slow but steady progress, and chances are progress will accelerate when projects start to get closer to completion.
It's nice that you're able to do it like this, but your approach won't work for everyone. People have different capacities for doing organized stuff. My limit is at about 8 hours a day, five days a week.
My biggest two tips are to wake up early and get things done before work, and truly love what you are working on. I wake up around 4 am and go to sleep around 9 pm most nights, and that is a pretty reasonable schedule for me now. It didn't start out that way, but you would be surprised what becomes normal when you push yourself. I would wager you are capable of a lot more then 8 hours a day, five days a week.
I am not doing it again. It doesn't work for me. I have worked more than 40 hours a week for periods of time, up to 6 months. But it is not sustainable. There are individual differences here that a lot of people with very high capacity for work do not understand.
This is one line that you should take away from the article. Most of us think that highly productive programmers are magicians but we forget that they are just like us, just hard working and disciplined.
Did he bang out LZEXE the first time he sat down at a terminal? Probably not. But over time, through pursuit of a passion and hard work, his skill has progressed incredibly.
We can get there too, with persistence. And we can have fun on the way.
This is as much a reminder for me as anyone, I have a tendency to compare myself to amazingly talented and productive people and get discouraged with where I am now. But you know what? I'm farther along than I was a few years ago, and that ain't nothing. :-)
One of my favorite quotes on the subject:
"Never compare your beginning to someone else's middle."Perhaps the plasticity of our brains is reduced, but that alone doesn't mean you have no brain power.
If you think of learning as "leveling up", you may stop increasing in level at some point, but you are still very powerful and productive.
I do agree with the sentiment of your last sentence however. We should endeavor to make our "leveling up" years count, and who knows, maybe you level up for the rest of your years.
Who knows. Maybe I have 40 years to go.
Whatever, I am fed up with looking back and thinking "if only" - so I shall try and minimise those by 60.
Nothing personal. Seems like a very common mistake, but I can't figure out why. I also see this mistake when people mention Sal Khan as Sal Kahn.
Hint: the two distinct prime factors of my current age add to 16 and I'm over 50
In the meantime I have to monetize the brainpower of the next twenty years to be able to retire :-)
But I would like it if I could make some cash by or along with contributing something worthwhile.
Yeah, I hear you about the "if only" thing.
This guy is amazing and I am truly envious.
EDIT: Looks like there is no iface though. I guess that shouldn't be a surprise. I didn't catch that until I tried to wget bash and see how long it would take to compile.
https://github.com/ewiger/jsmodem
Yeah, that was my reaction as well.
It is open source, available at http://www.ubercomp.com/jslm32/src/
I did both an interpreter and a (much faster) dynamic code generator that generates blocks of code in Javascript so it doesn't have to decode every instruction over and over again.
Oh, and before doing the project, I sent Bellard an email, and he was very polite and helpful. Even sent me some compliments after I was able to optimize it to run at a decent speed. A true master!!!
Other students went to the same school I'm sure. Why are we not seing the same results from all of them or at least from the majority of them? The question whether you should get university education is not an easy one. I'm strugling with it all the time and I am going to an university.
The point isn't that Fabrice Bellard isn't special. It's that even a special (clearly brilliant and self-directed) guy like him can arguably benefit from the systematic learning of domain specific information that happens at a university.
It could be the case that had Bellard not gone to university, he would have gone to the library and learned all those things on his own, and still built all the things he did. Or, it could be the case that the university exposed him to a ton of readily digestible theoretical knowledge that he wouldn't necessarily have stumbled upon on his own.
He's a counter point to guys like Zuck. You don't really need any theoretical knowledge to build something like Facebook. You need a lot of theoretical knowledge to build something like FFMpeg. A university education not only provides a way to learn the necessary theory, but exposes you to a lot of domains of theory which can inspire you to solve problems you might not have thought to tackle, because you find out that there are theoretical tools to help you tackle those problems.
You still have to work to benefit from a university. They don't inject knowledge directly into your brain. You have to consciously put in hard effort to learn the material and retain it, instead of making extra room upstairs doing keg stands for a few years.
I never attended college. I'm entirely self-taught. I've had a successful career.
For the first two-thirds of my career I was awfully satisfied with my own ability to assimilate and apply books, docs and discussion to my work - seemingly much faster than anyone I worked with.
Eventually, I found myself working on big, unique, urgent problems with a guy who was both college educated and had exceptional ability.
For the longest time I'd had ideas without the words to describe them. I could run something past this guy and almost always get a response like "What you're describing here is a..."
We ended up having hours of discussions that amounted to a crash course in computer science, all sorts of higher math, history and philosophy. Our talks didn't just teach me directly, they gave me conceptual footholds to make the next logical leaps - completely expanded my horizon.
I suddenly realized just how much I didn't know and how hard it is to even know where to look in order to learn.
I didn't need a structured education to be effective, but I can certainly see how it would enable an exceptional person to be that much better.
I don't think anyone would argue that college cannot expand the mind and enable brilliant people to do even more brilliant things. The argument, however, is whether that leads to increased income and access to jobs. The data, even outside of the popular anecdotes, seems to indicate generally not.
I've found that in (music/audio) signal processing software, the backgrounds of the programmers are almost more erratic than in more general software like mobile and web apps. Many were drop outs and people with degrees in seemingly unrelated subjects, like music or biology. That said, one constant I noticed was that a high percentage of them were from Europe.
But the thing is, the issue of college in the US is very different from the issue of college (or equivalent) in other places, and notably France. One significant difference being that Ecole Polytechnique and most high-profile French engineering school are free or almost so (automatically for French students, it's a bit more varied for international ones). Consequence is, most of the points revolving around "should I go to college and put myself in a huge debt" don't apply to us. In France, you should study at least until master level, given the opportunity, because it gives a very big edge afterwards.
Corollary: nobody (or almost nobody) would hire someone without a degree here. Emphasis on diplomas seems even higher than in the US.
I'm not saying one is better than the other (we have our own issues), but the situations really aren't comparable.
I was going to report it on their main website so I looked for a good way to get in touch with them and found a contact form which seemed to be geared towards sales and had a number of (unrelated to my task) required fields. I'm too lazy to fill out something that is going to get routed to the wrong place and requires me to enter my phone number, position, country, and area of interest on top of my email address and name.
So, I thought I'll just call them.
I called the main phone number and had no way to speak to someone there. The phone prompt simply diverted me to email sales. Heh.
There was a brief period of time where I wondered how a link could remain broken in an otherwise good quality article for over a year. That mystery has been solved.
[1] https://www.destroyallsoftware.com/
[2] http://rudairandamacha.blogspot.com/2012/09/writing-simple-r...
Other programmers who seem super-productive to me include Julian Seward (bzip2 and valgrind), Larry Wall (patch, rn, and perl), Ken Thompson (Unix and substantial parts of Plan9 and Golang), Aaron Swartz (web.py, Open Library, Demand Progress), Steve Wozniak before his accident (Apple I, Apple II, Integer BASIC, a hardware video game, SWEET-16), of course Bill Gates (BASIC-80 and various other early Microsoft products), Niklaus Wirth (Pascal, Modula-2, Modula-3, Oberon), and maybe Darius Bacon, although none of his free-software projects are widely used.
None of them approach Bellard's level.
I think Bellard has another important thing going for him, beyond discipline and followup: he tackles important and difficult problems, things that are barely within anybody's reach. He's mostly not working on another text editor, another online chat system, or another casual game.
Who are your candidates?
For me, it's magical!
(I'd never heard about DOSBox, and now that I installed it, just seeing the initial window threw me right back when I got my first 486 (and would connect to local BBSes using bananacom).
I wonder how many people have started their programming experience on a TI calculator. I had the same way in with a TI-85.
I can't speak to the TI series, but one nifty thing about RPN is that where 80s-style microcomputer BASIC tends to afford spaghetti code, the RPN afforded breaking your program down into functions. If you didn't break it down properly, your program turned into a series of hundreds of DUP DUP + SWAP3 DRAWLN 73 SWAP DUP - DRAWLN 0x838AFE7E8A9E 3 4 108 93 BLITPIX etc etc in an undifferentiated mass. (Those aren't the real opcodes, I've long since forgotten them and won't look them up, but that's sort of trying to compute where to draw two lines then dumping a pixmap to the screen.)
Interesting that beyond the TI calculator, there are a few other parallels with Bellard: I studied in one of the top French engineering school (Mines de Paris), wrote a 3D program as a student (Alpha Waves, Guiness book for first 3D platformer), an open-source compiler (XL, http://xlr.sf.net), a machine emulator with dynamic translation (HP Integrity Virtual Machine, a VM for Itanium), worked on a C++ compiler (HP aC++), dabbled in Emacs (e.g. first graphical Emacs for MacOSX back in the Rhapsody days), designed or wrote some code used all over the world (e.g. modern C++ exception handling), I sometimes took really new and "minimal" approaches to old and complex problems (e.g. the scanner and parser for XLR total 1500 lines of rather simple C++ code). I keep studying physics like Bellard kept studying math, and came up with my ow wild ideas (e.g. I'm delusional enough to believe I know how to unify GTR and QM).
But there's a couple of pretty major differences as well. Bellard's work was always freely available. Except for XL, mine was mostly proprietary (and XL, an exception to the rule, was a resounding flop as far as community involvment was concerned). Alpha Waves was a commercial product. HPVM was a commercial product. aC++ was a commercial product. And today, they are all dead or dying. As for fame, I'll let you judge of Bellard's fame relative to mine ;-)
I think that there is a lesson here about the strength of openness. If you start your career, making your stuff open and sharing freely may be a pretty good move...
The next one was a CASIO PB-700.
- Edi Weitz - http://weitz.de/ - Lots of Common Lisp libraries (cl-ppcre)
- Mike Pall - http://luajit.org/ - luajit off course
I like the bulleted conclusions at the end, but this nugget in the middle is my favorite:
"While he moves every few years into new and fertile unconquered territory, he exercises patterns that have served him well over and over: cleanly-styled C, data compression, numerical methods, signal processing, pertinent abstractions, media formats, open-source licensing, and “by-hand parsing.”"
I think sometimes for me I tend to wander from one technology and field to the next, but there's definitely something to be said for focusing a bit more on certain languages/technologies and what you're interested in.
> "Richard Feynman was fond of giving the following advice on how to be a genius. You have to keep a dozen of your favorite problems constantly present in your mind, although by and large they will lay in a dormant state. Every time you hear or read a new trick or a new result, test it against each of your twelve problems to see whether it helps. Every once in a while there will be a hit, and people will say: 'How did he do it? He must be a genius!'"
In my opinion, that's the key.
Getting famous, comes in the way of a lot of people, whether they are a scientist or a programmer.
Read at some place, that many popular scientists, once they do something great and get popular, just have to interact with other people so much, that they don't get the time for doing something great.
Recently, on HN, there was a 'letter of note' by some famous author of why he was going to stop replying to reader letters. As that left him no time to write another novel/story[1].
Of course, for mere mortals (who don't taste that level of famousness) there are mundane hindrances like Facebook ;-)
[1] Discussion on 'The morning mail is my enemy' http://news.ycombinator.com/item?id=4409363
Update: Added reference
I look at that and... I just want to know: how?