I'm on my computer, essentially, every waking hour. I've been this way since I was a boy. I have two passions in life: programming and playing the drums. If I'm not drumming, I'm programming and vice versa. This is what I enjoy and thus I contribute to many OSS projects, manage an Apache project, consult to two startups and have a full time job.
I do all these things because it's what I'm driven to do. I would go crazy without it. There's no shame in not being like me. Do what you enjoy.
Thanks for asking this. I have always wondered the same and I look forward to the answers.
I am not as prolific as many of the people you are probably thinking of but I am slightly above average. Here are a few things that WORKED FOR ME:
- Learn & use GTD - life changing. I use omnifocus but you can do it with pen & paper
- Automate as much as you can - checkout keyboard maestro and many other tools
- Use your calendar efficiently - block time for reading, playing, OSS or whatever
- wake up early
- excercise (i don't do too much but the days I do, I feel great)
- keyboard shortcuts for everything
- look for productivity tips for whatever tools you are using.
- turn off facebook and distracting material
- monitor your time - I use rescue time
- outsource as much as you can. I use fancyhands.com to handle things like calling the phone company, cable company, making appointments and so on. It saved me tons of hours of BS tasks
- I have had some success with the pomodora technique as well, give it a shot.
- Don't work more than 8 hours a day
- Work from home as much as you can
- don't burn out
- for side projects, blogging, oss or whatever it is you want to do, i find it better to do 1 or 2 hours a day than try to crank 8 hours on sunday.
- spend time with friends and family - it's amazing how your productivit improves when you are refreshed
- take a power nap or naps
- sleep well
I am married with infant twins so I try to be as efficient as possible with the limited time I have infront of the computer. 1 hour of highly focused work yields more output than 4 hours of distracted, half-ass work.
forgive the self promotion but I think it is relevant. I put together a free ebook about mac productivity tips - might not be as helpful for techies like you but you might at least learn a trick or 2 or find an app that you never heard off - www.bestmactips.com
I think that prolific devs are the ones who joined a particular community early and were able to ride the wave of success as that particular community grew. They often don't have a day job - Either they have enough savings that they dont need to work or they struggle on a daily basis to make ends meet... Or they are fortunate enough that their employer allows them to work on OSS during office hours.
Being a prolific developer doesn't have as much to do with talent as people might think - Developers become well known by blogging, speaking at multiple conferences or just being in the right place at the right time (whilst making lots of open source contributions).
Also, famous developers tend to own/maintain many (often several hundreds) of different open source projects instead of focusing their energy on just one project. There are rare exceptions like Solomon Hykes of Docker - But if you just made one popular open source project, then that's usually not enough to be known in the community.
Also, where you live makes a difference. Your odds are much better if you live in Silicon Valley. I know a developer who created/maintains about 5 projects each with 2000+ GitHub stars and he is still not well known because he doesn't benefit from network effects like devs who are living in the US.
Maybe you could make some life-style changes to improve your overall energy level and/or cure your tiredness. How do you eat? Do you eat right before you go to bed? Do you wake up with an alarm clock? Do you eat a lot of greasy, processed foods? Soda? Do you exercise?
Other than that, maybe you could try pulling back the number of hours you're at work. I've felt myself getting stuck in that cycle of work, eat, sleep in the past, but I am currently pretty happy with my routine.
If you want to make some life changes, I'd recommend starting small. Pick one thing to improve this week (don't eat less than 2 hours before going to bed). Then next week try adding another thing. Before you know it, you'll be doing these healthier things without even thinking about it.
Not sure if he comes here, but Sindre Sorhus[1] is quite prolific. The answer, though, is not satisfactory: He doesn't work. He moved to Thailand and lives off savings.
Here's the answer you are looking for: https://github.com/sindresorhus/ama/issues/167 and you can search more related questions in the issues.
After reading all the comments I have a few questions. How long have you been programming and what are you running from? Prolific programmers are running from something. Loneliness, low self-esteem, etc. while programming you don't think about life. GTD sounds like a miserable existance to me. I've heard/read countless articles on how to become a better programmer while reading the same amount of articles explaining burnout. How many CEOs practice being a CEO when they get home from work. How many mechanics are being a mechanic for fun when they get home? Programming is a job. Every time I hear learn a new language a year I puke a little in my mouth. How many of you remember your code 6 months down the road. Please don't push being a workaholic on the OP. The OP is normal and all the people trying to convince him/her otherwise are dillusuonal.
Maybe relevant to watch this video for a first hand report of burnout from a coding rockstar: https://www.youtube.com/watch?v=UIDb6VBO9os
From personal experience think that programming pretty much crashes and destroys your personal life when you really, really want to go above the rest.
Everything changes, except you and your computer.
That's how I feel anyways. Don't sleep much and pass every waking hour on and off solving some coding problem.I remember when there was no computers. Existed more beer, fun and happiness. But at the same time didn't felt as happy as getting something epic solved.
Maybe one day it looks as it is all worth. Maybe. Enjoy your life OP, you only get one.
I love programming, really and since i was 6 and now i'm 38. I work as a freelance developer and i love it. My job is passion and then a job. But i know life is not just this so i won't give my life to computer programming: 8 full hours (really full ;) ) a day are enough to be a talented developer, work and create something really important in your job.
But life is not job or software development and you shouldn't sacrifice it to computer programming even if it is a passion and you love doing it.
One day you will leave this world: will you regret you should have worked more or will you regret you didn't live your life?
Sometimes, I get the same urges as well. To contribute to as many open source project as I can; to learn the a new language and be proficient in it; to attend conferences to talk to other like minded folks.
However, I came down to the realisation of several things very quickly.
1) Something in my brain causes me to grasp new concepts quite slowly, no matter how interested I am in the subject. So it takes me longer to work through things.
2) I also enjoy my family life, so it comes down to searching for time after the family has gone to sleep or before they wakeup to do some tech stuff. Kids are still a bit young to do tech stuff together.
3) There are only 24 hours in a day and I wont get any more days after I dead. I want to allocate some of the hours away from tech and experience humanities.
Sorry, I am sorry that this does not really answer your question, but I think that this side of the coin is important as well.
My advice is to find a job that you really, really enjoy doing. Once you have reached there, give it all you have got during the working hours. Your social life will thank you for it.
I've been coding since we considered 8 bits a luxury and I'm still at it (I'm 47 now). I do it because I enjoy it and because I'm pretty good at it, plus it affords a decent lifestyle.
There are a couple of important points I've learned along the way that might help you:
1) Some people can code productively 24/7, but those are very few and far between. For starters, they have the skill to concentrate hard for a long time and work in an environment where that is feasible. It's not feasible if the next cubicle over has a sales person in it who spends ten hours a day on the phone. Second, most of them tend to do it in bursts as it's extremely hard and draining to sustain that level of concentration and effort for hours and days on end. What you see is often the output from the bursts, but you don't see that they're then spending a fair amount of time doing different things so they can recharge their brains.
2) It's easier to do this when you're young and pull a couple of all nighters a week. This makes you a hero, especially in places that thrive on hero-based development, but you have to realize you're burning the candle at both ends. As you age and build up experience, you tend to be more productive simply because of your experience, but you're also not necessarily that willing and suited to pulling 16 hour days for extended periods of time.
3) Most importantly, your brain is a muscle. Exercising it improves its function much like exercising your body improves its function, but it also needs rest. If you look at the way top athletes train, they push themselves hard but they also allow for sufficient rest periods. It's the combination of exercise and rest that leads to the improvement. Take one or the other away and you either overextend yourself (and injure yourself) or you don't grow as much.
Yes, I read about programming and play with languages during my off time, but I try to satisfy my need to build things (which is what initially drew me into software) by working on physical things instead. Things like building/restoring a car or motorcycle, gardening, working on the honey-do list etc. Oddly enough they're not too dissimilar from programming as you still end up solving problems.
TL;DR - find a way to switch off, be it through meditation or whatever else works for you. Get enough rest and exercise the other parts of your body. Learn to recognize the signs of burning out and stop the journey before you get there.
I do not have advice on how to manage your time so you can be prolifically productive, but I do think you've touched upon motivation being one of the main factors for deciding to continue on projects after work, projects that may even become your work. But discipline is the hardest yet simplest piece: you may not always be motivated, by discipline / consistency ensures exposure, ensures you apply yourself to your project(s) very frequently.
I suggest you read Coders at Work if you haven't already. It is a good compilation of interviews with living legends of computer science and famous software projects, and the interviews give insight into how each approaches his/her life. You might find some of it inspirational and insightful.
If you don't feel compelled to code outside of work, it's probably because you don't love what you are working on enough. I find that programming itself is not enough for me to want to work constantly--I have to legitimately love what I'm building.
I've automated large chunks of my life.
I have a JIRA for everything I do with customized workflows, and among many other projects I built this:
to mail me when subjects interesting to me come up on HN.
I recommend reading 'Getting Things Done' and working at your own pace. Focus on the things you're motivated to do, not what you think you should be doing - that's what a paid job is for!
One trick you can do is get a part time job or a consulting job where you can work fewer than 40 hours per week. Then you'll have time where you're not exhausted to work on open source stuff.
Exercising is for sure a net gain in time. It makes you feel healthier, happier about yourself, and helps you think more clearly.
Here's me: https://github.com/andrewrk
We don't spend our time on HN
John Carmack brought along a workstation on his honeymoon so that he could keep coding. I can't find the exact quote, but I recall him saying that he spent so many years coding every day that he was worried he might suffer from withdrawl if he had a week away.
I think the lesson here is that some people put their craft at the center of their life and make it the focus of every single day.
To be a prolific programmer requires time, effort and dedication. You can still be a prolific programmer if you are married and performing your family duties but the level of time and effort to do it would be less. It would require you to work smarter and have a solid-foundation that is built and have learned the fundamentals, before you are trying to dedicate your time to being prolific while slicing your time between work, family, personal, etc.
It is best for the single and young because it requires you to immerse yourself to learning, to solve problems and face difficult failures, it requires routine, and dedicated energy to learn, requires energy to go to the workshops/meet-ups/groups and be updated when new learning opportunity arrives. It requires spontaneity to still be interested in other things in order for you to refresh your energy.
A) Some of them do that until their body gives out and they suffer burn out.
B) Look to your health. If you want to be more productive without "paying for it" later, you fundamentally need to increase your ability to produce. Eat right, exercise, practice good sleep hygiene, etc.
The importance of habits appears essential in order to maximize the available coding time. The modular food idea in one of the replies is indeed a great one that I do apply. Getting enough quality sleep is a must, especially when learning new things. Add at least an hour. Taking 20 min naps works wonders. If course, nothing beats putting in the hours, provided the above is taken care of. One useful thing I do is walk the dog daily without any music/podcast. Looks like it puts my brain in a kind of freewheel that helps me a lot in figuring out solutions. I do that when it is dark outside, stars, moon, night noises seem to have an impact. An additional noon walk doesn't hurt. Being part of an open source (http://pharo.org) community makes me aim for higher than I would on my own. These people are very inspiring and deliver awesome things. So I want do to it too as I see that it is feasible. I am married and having a partner who understands the peculiarities of the line of work helps. We have a huge wall calendar to schedule it all.
I find that for me, coding and writing docs during the work day is enough. I used to spend my evenings coding on my ideas also, but now, married, my wife is not technical so we do a lot of other things. I actually really enjoy a lot of the things we do. I am less stressed and I can give a solid days work the next day.
On weekends, I experiment with making music, reading, playing in the snow, etc.
Three tips come to mind:
1. Get enough sleep. You've only written three paragraphs and there are already a lot of suggestions that you need more ("I don't feel as productive as others", "I just drop dead in bed" when well-rested people usually take 15-30 to fall asleep, "I felt like I was inches away from becoming part of the zombie horde.")
Coding pretty intensively uses your short-term memory: "I need to take this query which I prepared above and execute it on those variables, wait, this key from the database gets renamed to that on the front-end, okay, test it... dictionary does not have the right key on line 189? What's over there? Oh, I forgot to do this critical preprocessing step, jump back to my code, 3 lines before, add the function call, test again -- what the crap is that, switch back to editor, aha, missed a semicolon here...". Each of those actions requires you to not be overwhelmed by the number of details you have to remember, whether it's where your tool for testing is located, or what the preprocessing function was called, or what have you.
When you're even a little sleep-deprived, your short-term memory decreases dramatically -- if most normal humans can only juggle 7 balls (7 big details or crucial tasks occupying their memory), missing a few hours of sleep brings it down to 4 or 3. So of course everything looks two times bigger.
Sleep deprivation also causes you to lean on substances like sugar and caffeine, and those substances tend to cause procrastination "I'll browse Reddit until this kicks in" -- until their effects wear off and leave you right back where you started with a bunch of nothing done. You can mitigate this somewhat by giving yourself a short task to do before the caffeine kicks in, even if it's an asinine one like "write down what you want to do today." Speaking of the which...
2. Write shit down, set alarms, otherwise use harebrained tools.
Those 7 balls that you can juggle need to incorporate just about everything that is happening in both personal and professional life -- not just code. If those things are in the mix, then you're not as effective. Just like how you should set an alarm for "time to start brushing my teeth and getting ready to go to bed" so that you can get enough sleep, you can set an alarm for "at this time I need to stop everything and call the couch company to send someone to fix the couch at home." Write those things down somewhere, set an alarm to look at that list and do the things on it.
3. Kill context-switches. Either lie your ass off about them or say "no" up front or be honest -- whatever is necessary to kill them.
Take your hands, open them in front of you, spread out your fingers, interleave them. That is 8 work tasks spread out over some distance L. Maybe it's 8 hours of the day working on two projects, Right and Left. One gets concluded at 4pm, the other at 5pm. We'll assume you got started at 8am and ignore an hour for lunch.
Now separate your hands and collapse your fingers. Put your right hand above your left hand, touching. Still 8 fingers in a row, but now you notice that your Left project is released at 12pm before lunch, while your Right project is still released at 5pm after. You just improved your average time-to-completion by 2 hours with no stress, and no improvement in efficiency: you just rushed one project out, then focused on the other.
Now interleave your fingers again and remember how each of those switches between projects feels. You've got 7 in there, yes? Each one doesn't feel good, does it? Because you've got to stop juggling one set of balls, put it all down, and slowly start juggling this other set of balls. Each context switch eats up mental energy. (It also eats up time -- if you need 15 minutes to really get up to speed, then the 7 context switches eat up almost 2 extra hours of your day. So there is an undisclosed efficiency gain here.)
If management forces on you to be working on the two things at once with constant status updates, strongly consider lying your butt off. (Of course, first show your boss the trick with the fingers, it usually convinces them.) Because if management is asking you to do worse work slower so that they can be polite to two of their separate clients, then management has failed. They're supposed to buffer you from all of that crap.
If you can't lie and you can't convince your management, try a firm "no." Just say "I'm on this high-stakes Project Left right now, I can't take on Project Right right now, maybe when Project Left is over I can. Fortunately I think Project Left will be done by end-of-day today, possibly before, so if you really can't find someone else, I may be able to start Project Right today." A "no" always goes better with a nice timetable that suggests that the task will still get accomplished in a timely manner.
Similarly, ignore those "trends" when you're coding. Trends are another project with another context switch. Don't interleave it with anything else.
As others have been saying, the "prolific programmers" have a passion to program that doesn't get satisfied by coding from just 9 to 5. Personally I tend to have waves of intense programming around the clock followed by a cooling down period with either part of the cycle lasting days to weeks. Sorry for the shameless self plug but you should start small and try making a "One Hour Side Project" http://kolodny.github.io/blog/blog/2015/03/03/the-one-hour-s...
When it comes to making headway on important projects, there is no substitute for putting in the hours. It requires extended periods of uninterrupted time. Unfortunately, you only have a few hours a day available to you in which your mind is firing on all cylinders.
The answer, then, is to find a way to work on these projects in the course of your job. That's what I do, and my best guess is that that's what the people you've heard of do as well.
Find some project that your employer really, really needs, get permission to open source it, and spend your most productive waking hours on it.
I'm a relatively successful coder and entrepreneur. My one tip for you that can change your productivity by an order of magnitude:
Stop wasting your time reading/posting/liking on sites like HN, Facebook, etc.
You either have to grind it or love it. If you love it, then you don't feel the grind.
Exercise helps like everyone is saying.
Recently I read a book called Pragmatic Thinking and Learning. Great tips in there.
- Work only on what you want, when you want to (as a rule, exceptions have to be made) - No TV, no (general) news - No kids, no girlfriend - Socialize mostly around projects (not neccesarily dayjob related) There are some tradeoffs to the above, one could say. Staying healthy is also a challenge.
But don't worry about 'being one of those people', just try to do what like/love. And if you don't know what that is yet, find out!
I would recommend reading the 4-hour workweek book from tim ferris. http://www.amazon.com/The-4-Hour-Workweek-Escape-Anywhere/dp...
Great advice for time management, works well for IT positions.
I measure my coding time in hours I'm truly concentrated and that's about four hours a day. My main focus is to use these hours as effective as possible and fill the rest with easy tasks. This way my mind stays fresh every day.
And exercise, best way to clear your head!
I am at university and in most part of the year I can't spend how much time I would like to programming. My mind is too tired after several hours of studying, especially during final sessions. Am I the only one?
"like food-to-code machines"
Great phrase - I'll be using that !
Honestly until I met my wife, I spent the majority of my time at home building open source projects I knew would save me time later at work, and probably more time overall because the code will be less specialized to the project. This was almost every single night after work.
My wife came along and showed me though that there is more to life than programming and I have to thank her for that. She's a wonderful gruf woman who changed my life. I still code at night on occasion, but not very often. I've got better things to do. I really believe I am happier for it.
All that said, are you entirely sure programming is what you want to do the rest of your life? After a long day of coding I need to be ripped away from its siren song or I'd simply never stop, and I know a lot of developers that feel the same. The job takes a lot from you, imho, and it sounds like you may not enjoy it enough for it to be worth its cost.