Correlation does not equal causation. Asking whether not programming in your spare time makes you a bad developer is the wrong question. The right question is, What is it about certain/many good developers that leads them to program in their spare time?
Pursue that something and you may end up programming in your spare time. Or starting a company such that your side project is your job. Or finding something really exciting to do at your current job. Or whatever. In words much older than our civilization: "Do not follow in the footsteps of the Sages. Seek what they sought."
The right question is, What is it about certain/many good developers that leads them to program in their spare time?
This is a good question, but it does lead me to a thought... why does it seem like most side projects are done by people for whom the predominance of their work appears to be side projects? Let me explain.
Most of the programmers who produce large products, don't do much in the way of side projects. Carmack seems to be heads down on Rage. I don't see a Carmack GitHub project. Nothing from Tim Sweeney either. I don't see anything from the devs that did GTA or Halo or RDR or the latest Mario game.
What about David Cutler? Linus -- he did Git, I guess a side project(?) -- other stuff? Any of the iOS architects have GitHub side projects? WebOS architects?
It seems like we have two classes of devs. Those that ship large products. Whether its iOS or Grand Theft Auto 5. And devs that ship little projects. Small startups, little tools here and there. The overlap between the two seems rather small.
I'm not sure you can count those as side projects (the games, not the aerospace company, which is a side project -- but it is an actual company!). Those are products shipped by some of the biggest publishers in the world.
That would be like someone at MS saying that their side project was a new feature in Word.
But that's not how a side project is typically defined. Again, if I did a new feature in IBM DB2 that took me a day, would you consider it a side project?
The issue at hand is if someone doesn't program in their "spare time" or have "side projects" are they a bad programmer.
So what is a "side project" and when people ask you questions in an interview like, "what are some of your side projects?", what are they asking?
They're not asking what did you ship as part of a corporate entity in most cases. They want to know, specifically what did you do outside the context of your job. If you work for EA, its hard to claim that an EA game is your side project. Just like someone at MS isn't likely to claim that a new Word feature is their side project, even if they did all the coding for it over the weekend.
And if he ported Emacs to the iPhone that would be a side project, by most measures. He'd have to release the code since its GPLed and ID is not likely to sell it.
Wolf3D for the iPhone was supposed to be programmed by a different team. He simply found it to be a poor port when they presented it and wrote his own version in a couple of weeks. Seems like a side project to me, regardless of its distribution.
Linus cooking up Git - that's not a side project; that's what he does for earning a living. They needed Git as a replacement for BitKeeper. I do admire Linus, when he sets his mind on something, he gets things done.
But, about people working for big companies, since you are talking about iOS / WebOS, etc... these people do many times have side projects, but they are internal and in the context of the company they work for, not public. And the cool thing about a big company (versus a startup) is that deadlines are more relaxed (you do have more free time) and you can switch projects when bored to death.
Git is Linus's real job? Slacker. He needs to do an HTML5 app some weekend, and put it on GitHub, to show he has actual dev chops.
these people do many times have side projects, but they are internal and in the context of the company they work for, not public
I don't think most ppl would consider them side projects, at least not in the discussions ppl typically have. For example, I've seen people say that it literally has to be on GitHub.
It seems like your point is that if you have side projects, your job is probably not hugely fulfilling. I can sort of go along with that, but that's going to be true for the overwhelming majority of jobs. For every Carmack or Linus, there's hundreds of developers doing necessary but unglamorous and non-cutting-edge work like B2B SOAP services or SAP integrations or yet another J2EE storefront. It's not reasonable to expect that most intellectually curious developers will be satisfied with their day jobs.
Side projects are not a matter of "having an unfulfilling day job". A side project is simply scratching an itch.
That itch could be something that bothers you, or it could be simple curiosity.
I have a very fulfilling day job (I'm a co-founder of an awesome startup, which makes it more of a fulfilling day&night job), but that doesn't mean I won't explore other things, try out new technologies, find something that sucks and make it better, latch onto an idea and build it while thinking "how hard can it be?" (Answer: it can be VERY hard)
Side projects are an outward expression of people who are hopelessly creative and just can't help themselves. The CONTENTS of those side projects demonstrate how organized, focused, and disciplined they are.
why does it seem like most side projects are done by people for whom the predominance of their work appears to be side projects?
It's easy to see why most side projects are done by people for whom the predominance of their work appears to be side projects: This is a trivial consequence of the fact that the vast majority of the software developed on this planet is "dark matter." It's developed inside companies, and even if you know I work for IBM on DB2, it's hard to see from the outside whether I'm a coding machine by day or whether I write emails from 8-5 and code side projects from 5-8.
In the universe of software projects, we're mostly talking about side projects that are visible things like Github repositories, and mostly talking about day gigs that are invisible. If we want to drop the word "appears" from your first statement, we need to include side projects that aren't on Github (like startups being developed on nights and week-ends while the authors go to work "for the man" M-F 9-5).
We then need to compare all of the side projects to all of the code these people write during their day gigs, whether it's highly visible stuff like Linux or "invisible" like the internals of an ATM locator for an online bank.
If we don't include all of the side projects and we don't include all of the day gigs, it is very easy for our skewed sample to have many examples where the authors appear to do most of their work on their side projects.
Please don't assume from this that I disagree with where you seem to be taking the conversation. If we see that things are not always as they seem, we also must accept the idea that even if people with side projects appear to be good programmers, it might be that the high-profile examples we find on HN or who blog are not representative of programmers as a whole. It is very dangerous to draw conclusions about the correlation between a side project and talent based on an incomplete sample. I think we agree on this here and in another thread elsewhere.
As they say... The plural of anecdote is not "data."
If we don't include all of the side projects and we don't include all of the day gigs, it is very easy for our skewed sample to have many examples where the authors appear to do most of their work on their side projects.
Absolutely -- I think that's where I was trying to go, but not as eloquently. If you look at the thread, I define "side project" in, what I consider, an odd way. Basically something that is on GitHub, because that has become what so many mean by side project.
In a roundabout way I was trying to say that people learn and grow in ways that are less visible. And while others may question your programming skills as a result -- you shouldn't.
"The right question is, What is it about certain/many good developers that leads them to program in their spare time?"
I think there's another way to look at this.
The fact is, programmers who program in their spare time are usually better than average (). That doesn't mean a programmer can't be just as good if he/she doesn't* program in their spare time. It doesn't even mean that programming in their spare time helps these programmers get better, or that better programmers tend to program in their spare time. It's the other way around - programmers who program in their spare time tend to be better (and one direction being true doesn't mean the other direction is true).
The only reason people care about whether others program in their spare time, is because this correlation exists. If I know someone programs in their spare time, that's a positive signal that they are a good programmer. And it's a perfectly legitimate shortcut, when interviewing someone, to see whether they're good. People take offense at the suggestion that they're "worse" because they don't program in their spare time, when in reality, it's just a shortcut.
* I think most people will agree, at least in terms of averages. Nothing about any particular programmer.
I used to code the night away. Then be unable to sleep too excited about what I was doing.
Now I have a fiancee and we live an exciting new city (Brisbane, AU).
I've just outgrown it. I think both ways are normal. However, the dude that doesn't program during the day and yet paid to do so IS WRONG... Whoop, that would be me. Back to work!
when i'm working a 9-5 job, the last thing i want to do is go home and program more. i'd rather throw the ball around with the dog or rock out on my guitar.
in my experience the people who say "you have to have side projects to be a good developer" are either people who do program in their spare time, or people who want to hire the type of programmers who voluntarily chain themselves to their desk.
this is one myth i'd really like to see die. good accountants don't balance checkbooks in their spare time, do they? lawyers don't hold mock trials, doctors don't do surgery on their friends as side projects, and construction workers don't pour concrete for kicks on the weekend.
All those activities in other professions don't involve learning. Presumably, balancing a checkbook is a solved problem but an enthusiastic accountant may have brushed up on Sarbanes-Oxley legislation to learn how their craft would get impacted. Lawyers may not hold mock trials but they may read journals in their spare time which cover interesting precedent-setting cases. Doctors don't do surgery for fun but they may read up on newly discovered surgical techniques for reattaching severed nerves. And someone in construction might read up on new, energy-efficient construction techniques and materials... but odds are good they don't lay bricks at home.
So yeah, don't go home after work and write Hello World or re-implement bubble sort yet again. But do keep up with developments in your craft. If you don't have this opportunity at work, hopefully (for your own sake) you still do take the opportunity outside of work. Software changes so fast that most don't have time during work to keep up. If you let your knowledge get too out of date, your value diminishes rapidly. I think this speaks for a need for more work-sponsored learning opportunities, whether that's courses, conferences, or Google-style 20% time.
Personally, I wouldn't want to be operated on by a doctor whose knowledge of surgery stopped in 1960.
I find it much easier in the evenings to read about programming than to program. For me that is not the same, although it is very useful also, on a bit different level.
I can't speak for developers but almost all of the best designers or creatives I know experiment a lot outside of work. Myself, I do interactive side-projects all the time as I can execute sites that I would simply not be able to do in my full-time job.
Regarding medicine: My Dad is a doctor and spends a lot of time outside of work reading dense materials about certain diseases or findings, which is definitely not light reading nor recreational. I also have had friends who've volunteered their medical expertise to aid the homeless or less fortunate.
> good accountants don't balance checkbooks in their spare
> time, do they?
How much did balancing checkbooks changed compared to that of 20 years ago?
> lawyers don't hold mock trials
IANAL, but I assume a big part of lawyers work is that would be considered "side project" in programming, namely going through different cases and looking for stuff that can be useful.
> doctors don't do surgery on their friends as side projects
Doctors don't experiment easily on one hand, and on the other hand, if I am not mistaken there is some mandatory training once in a while to ensure that doctors are
informed of the latest best practices in the field.
> construction workers don't pour concrete for kicks on the weekend
Are we talking about code monkeys there?
The thing is: software development is still young and evolving field. Unless your employer sends you to the training courses, conferences, and has some kind of "20% for own project" rule the side projects is pretty much the only way to learn new things and experiment.
Not to nitpick, but lawyers are a special case. Lawyers don't do side projects because they can bill clients to do that research. Assuming they can find an excuse as to why it's relevant to the client.
> Lawyers don't do side projects because they can bill clients to do that research
This is actually true of software engineers as well. Sometimes you can convince management/clients. But you may have a hard job on your hands because people have come to believe that this sort of thing will be done on your own time.
> when i'm working a 9-5 job, the last thing i want to do is go home and program more. i'd rather throw the ball around with the dog or rock out on my guitar.
Just my two cents: I don't see programming in my spare time as, well, just programming. I see it mostly just as a tool that helps me with my hobbies. I like to read history very much, especially about my city, then why not build a heat-map based on the constructions years of its buildings? (thanks, gheat! http://code.google.com/p/gheat/). And how to get said constructions years? By just writing a small Python script that parses some big real-estate agent website.
And you can do the same thing if you like sports, going to the theater or if you like Medieval history (I have a home-project for each one of these domains). And while you're at it, why not learning a new language/technology when trying to implement them?
In California, physicians are required to put in 50 hours of continuing education every two years (http://www.medbd.ca.gov/licensee/continuing_education_option...). Let's call that 25 hours/year. That's something you can accomplish by going to seminars.
By contrast, a software developer who codes recreationally for 5 hours a week, 50 weeks out of the year, is spending 250 hours per year coding outside of work. That's 10 times as much "continuing education" as the physician. If 10 hours per week, that's 20 times as much as the physician.
Of course, a good doctor probably reads medical journals in addition. But a good developer reads blogs, websites, SO, HN, etc. as well.
So does a software developer really need to spend 10-20x as much time as the physician in continuing education in order to be considered "good"? Why?
To look at this another way, a developer who wants to structure their life to match a good, passionate physician, would probably:
- Work 45-55 hours per week (and be on call for occasional emergencies)
- In the evening/weekend, spend some time reading blogs, journals, books on programming languages and software development, etc.
- Go to one week-long conference per year (e.g. WWDC)
And that's it. No github account. No contributing to open source.
Yet there are apparently a great many people on HN who would not consider the above developer to be good, who would not hire such a person, and would question their devotion to the profession.
But does a developer really need to spend 10x the time a physician does in continuing education in order to be considered good?
A physician is not generally creating new stuff, just using stuff that is created by someone else. Programmers create, and creation requires a much deeper understanding of a subject than just using.
I find your comment profoundly unappreciative of the skills needed for a good physician. I really hope you never get treated by an idiot with equivalent expertise to the one expressed here.
Doctors do not blindly apply "stuff that is created by someone else". For the most part, they use known techniques within the context of each individual patient and each individual ailment. The techniques are mere tools, used to diagnose and treat cases. Some cases are routine, but some others are really challenging.
Programmers, not surprisingly, use known techniques writing the context of each individual project and each individual requirement. The techniques are mere tools, used to design and implement projects. Some projects are boring, but some others are really challenging.
A minority of physicians or programmers develop a career in research, where they push the limits of their respective professions. But most people end up working on operative, day to day, jobs. And the skills are not transferable. Excellent researchers do not necessarily make excellent practitioners, and viceversa.
The best lawyers, I would expect, read about law in their spare time, debate their friends on legal issues, and keep honing their skills. The best doctors, I would hope, keep up with medical literature, reading up on the latest advances and changes in their spare time. The best artists, I am fairly sure, will continue to sketch and paint in their spare time. The best carpenters, cabinetmakers, etc will continue to work wood even when they're not on the job.
No, it's not restricted to programmers, although continuing to focus on honing work does seem to be far more prevalent in the creative professions.
Let's say you and I started writing code at the same age or time, and you code only 9-5, whereas I code an average of 15 hours a week more than that in my spare time. Two years later, I've gotten as much experience (or at least put in as many hours) as would take you >3 years to gather. Five years after we started, I'm 3 years your senior in terms of experience.
It's not that you won't be a good developer if you don't work on side projects; it's that as compared to anyone your own age who codes in their spare time, you're going to have less experience. You'll probably be way better at the guitar, or taking care of your dog, or whatever else you're doing instead of coding, but they'll be a better programmer.
Actually, that's not true. Their is a limit to how much each day you can "practice." I believe the number is 4 hours. Putting in more time doesn't mean you are learning more. It simply means you are putting in more time.
Experience != skill. You can spend 10 hours a week doing project euler questions, or hacking together whatever CRUD app sounds cool. But that doesn't automatically increase your skill at all.
Sure, the more time you spend practicing, you will likely be better than had you not spent that time. But to compare it across people is meaningless. There are countless numbers of those who have spent decades in the grind and aren't much better than they were when they started. Compared to someone fresh out of college who can code circles around most.
Experience itself means little, if anything at all.
Programming isn't like any of those examples, though. Try making the same argument but use 'painters' and 'musicians'. Code is an art-form. I experiment in my spare time because I enjoy it.
I don't actually think not programming in your spare time will make you a 'bad' programmer, though. Only that being interested in it hobby-wise is a good sign. Practice helps you get good at anything, for one thing, and keeping up with the industry/etc is a big deal.
Unless you have a super-awesome job (and lots of people do), programming in your own time may be the only way to discover and play with new things. If you work backend at a C# shop but would like to start writing Ruby, you're unlikely to get the opportunity to learn unless you do it in side projects.
Practically, you may be totally happy in your current niche, but you're at higher risk from technological obsolescence unless you diversify.
This is as much an argument for '20% time' as it is for programming at home.
What about the auxiliary scripts that need to be written for some tasks to automate some task that is ancillary to your product? If you are writing a ruby script for those tasks that are useful but could be done by brute force methods I don't see a problem with that.
Automation of deployment or some menial task, sanitizing test data, gleaning statistics from a csv dump of the database, cron jobs, etc... I'm sure you could come up with more.
>What about the auxiliary scripts that need to be written for some tasks to automate some task that is ancillary to your product? If you are writing a ruby script for those tasks that are useful but could be done by brute force methods I don't see a problem with that.
Pfft.
Any semi conservative workplace, anywhere: "What? No, who the hell would maintain it? Stick to <tools of choice>."
Although I like to think I'm a bit cooler and down with the times and the hip words the kids use would probably say something like, "So help me god, if I have to learn Erlang at three in the morning to fix some bullshit you cobbled together I will fucking end you".
I didn't mean anything that other people use. Just scripts that help you out; those scripts are for you and you alone. They help you do you job more effectively but do not require you to install them on other machines. It depends on the size of the company for where the level of latitude stops though.
Actually this is where we let our developers experiment a bit. Obviously nothing too out there but just because you're a Java shop it doesn't mean that Java is the best tool for everything you might do so it can make sense on a few levels.
You don't have to have a super awesome job, for example one company I worked for went through a phase where they didn't have enough coders to cover support and development for about 9 months.
We spent 95% of our time fielding calls from users (no first line, management's bright idea) and fixing bugs on old legacy code (vbscript when everyone else was on C#).
There were some developers who got a lot more support calls done than the others.
And then there were some developers who would refactor the code, write tools and other little programs and upgrade the in-house support system to make everyone's life easier and quicker to fix the bugs, learning while they did it.
It probably won't surprise many that those two sets comprised of exactly the same developers.
but you're at higher risk from technological obsolescence unless you diversify.
For the same reason that a developer can produce something using a new technology on spare time, the same developer can pick up a new technology, at work, in a brief period of time.
In other words, I think it's largely B.S. to talk about 'obsolete' developers. You could only be obsolete if you entirely forgot how to learn, which I think is impossible, barring something like singularly maintaining the same COBOL system since the 70's.
When I look at resumes and talk to candidates, seeing that they don't at least read about programming outside isn't an automatic no-go but as natch says, it's a red flag. I've worked with people who have no interest in programming, they just do it because it's what they do and they need a paycheck. Not programming or showing an interest outside of work is an indicator of this kind of person to me. Of course it's not 100% but it leads me to ask other questions to make sure they will want to learn. That said, there are plenty of corporate places that are perfectly fine with this kind of person, I just don't work at those places anymore.
For my internship this summer, I actually write code!
I've found that I do little to no non-work programming during the week. However, I do spend a lot of time during the weekend programming.
It is very hard to push your skills forward without side projects. Do accountants balance ledgers in their spare time? No. But good ones do read up on their craft and push their knowledge forward off the clock. It just so happens that pushing your knowledge of code forward usually involves coding.
As long as you re learning, be it newer technologies, languages, frameworks, patterns or whatever it is that interests you most during work time, spare time, any time, you would always be a better developer today than you were yesterday.
I could see someone who only programs for work or school becoming a competent developer, and a good employee.
So, do you have to program for joy to not be a bad developer? No. But if you don't love what you're doing, it's unlikely you'll ever be great. People who are the best at anything reached that point through a combination of natural talent and vast amounts of work. Chris Broderick ( http://www.youtube.com/watch?v=xkpZ645ztl0 ) wasn't born this way... when everyone else was hanging out with high school buddies or going to college, he had a guitar in his hands 4-8 hours a day. Loving what you do is more powerful than desiring the rewards. If you love what you do, learning to do it better can feel effortless.
On the other hand, having a passion for a topic to the extent that it consumes your work and personal time isn't always a good thing. When you do it in lieu of things friends, a romantic life, spending time with your children or simply resting your mind, you may regret that later on.
I mentioned to someone that in my spare time I made iPhone games. They asked, "as a hobby or you trying to make money?" I replied that sure, I'd like to make a few bucks. He said to me "If you let your hobby become your job, what will you do for a hobby then?"
At that point, I realized that making a distinction between a hobby and a career path is a good move, and you have to know what you are pursuing. For example, I tinker with arduino in my spare time, as a hobby, and I don't intend to sell or make money off anything I make with arduino. There is nothing wrong in learning, say, Ruby in your spare time because you know that it will come in handy and that you could make money with it. But that's not a hobby.
Doing iPhone development (among other things) is my full-time job, and I am loving it -- mobile app dev was never my hobby, but a career choice, and I'm ok with that because I am happy at the place I work.
I get it, you should be free to enjoy your hobby without money clouding your thinking. Totally agree with that.
On the other hand, I think a hobby that could be something more is totally legit. For instance, I am learning Haskell as a hobby. I'm not really sold on it as a great language for business (yet), but I realize that if I get good enough at it I may be able to shift my career in that direction.
To answer the original question you were asked: If that happens I'll get a new hobby.
I think the real point of "what are you going to do for a hobby" isn't the fact that you can get a new hobby. The point is, you like your hobby (you find it relaxing and stimulating at the same time). When you make it a job, it ruins that experience. So back on point, if you're programming as a hobby -- great! But if you're constantly looking at the screen just to get ahead... that can't be healthy.
I just tell people I have a great job because I'm basically being paid for doing my hobby (web development). Been doing that for ~15 years now and I've still haven't felt any diminished desire for my "hobby", despite it now being my "job".
There are days of frustration, sure - but those pertain more to the business aspects of "monetizing" this hobby (such as dealing with clients when doing contract work), than to the art & craft of the hobby itself.
I don't think a hobby necessarily has to be less enjoyable just because you've made it your job.
"I don't think a hobby necessarily has to be less enjoyable just because you've made it your job."
This may be true in some rare exceptions. However, hobbies have no deadlines, no schedules, no management, no commute (ok, maybe not if your hobby is somewhere else), no feeling of "I have to do this", etc. All these reasons take away from the pleasure of doing your hobby, add to your stress -- which is the whole point of having a hobby in the first place, to take your mind off of stress of daily life.
I have hobbies outside of my "job" too, and perhaps sadistically, I give myself schedules & deadlines there too. I feel that if I do this, I can keep myself on track and even record my progress to a certain degree. I tend to get great satisfaction in a completed project, hobby or job. And I find the pressure of a deadline gives me this strange "high" - kind of like a runner's high - right before I hit my deadline and/or complete the project.
I totally hear you though. I can certainly understand how such pressure can totally take the joy out of a hobby for most people. And I never try to force anyone on my teams to think or behave this way, unless they naturally do already.
Most developers I know - in real life - don't program in their spare time, never mind going to conferences or evening meet ups. If you work as a developer and your hobby is developing then there's a good chance that you'll burn out.
That's not to say that it is bad for people who do it, just try to expand your hobbies to something outside of technology.
If you work as a developer and your hobby is developing then there's a good chance that you'll burn out.
People are allowed to have more than one hobby. And I'd think that if your paid job is writing and maintaining boring internal enterprise apps, hacking on fun projects could prevent you from getting burned out.
I've been on guilt trips because of the social aspect I'm missing (dojos, hackatons, weekly meetings in bars), but I've come to terms with it. I have a wife with whom I'd rather be, movies to watch and books to read. It's a tough balance, and ego-wise it can be brutal, but I'm aware now that after my commute home, I want to point my brain at different things.
The way I see it, the ultra-passionate, sleeps-eats-drinks code programmer is usually one who hasn't: a) learned to use his time parsimoniously; b) accepted there's a limit to how much you can do in one day; c) yet built a family. The last one, especially, if approached with gusto, will automatically make you ponder and weigh things -- and will also limit your time, fixing a and b if you don't fight it.
A good programmer should wake up at 6 am in the morning get a solid 2.5hrs of coding done by 8:30 am, at 8:30 leave for work, work till 6 (it goes without saying that the lunchbreak must be spent trying to learn the Haskell or if you are feeling lazy answering questions on stackoverflow). Commute from 6 to 6:30 (it's a bonus if you listen to a technical podcast during this time and no stuff like TWIT does not count, perhaps audio lectures from the Advanced Algorithms course on MIT OCW). 6:30 to 7:00 time for supper and excellent time to catchup on r/programming and hackernews. 7-8:30pm is the time for relaxation by doing some recreational mathematics, doing problems from project Euler and that proof from The Art of Computer Programming excercises which you have been itching to get a go at! 8:30pm to 1 am code contribute to that open-source project, write patches for the Linux kernal and continue working on your startup.
Anyone who does less programming that what is mentioned above cannot call himself a "good programmer", I would have serious reservations in calling that person even a mediocre programmer.
Then you're an expert. For about three months. Meanwhile while you're up to speed, things outside your organization are changing. If you're not paying attention, you end up with the proverbial "10 years of experience" comprised of 10 years of the same experience. I've seen several of my friends who just coded at work find themselves without jobs when times got tight, and unable to find a new job because they had out of date skills.
Investing in my skillset on my own time with my own rules is an investment in me. I don't particularly care if it makes me a better programmer - it's a contingency plan to make sure I can support my family in both good times and bad.
I think it varies wildly upon the situation. I've had 3 full time corporate jobs and not one of them required enough depth of knowledge to become an expert at anything besides SQL. I've pretty much learned all that is necessary to add any random feature requested to the codebase I work with so I could let my skills stagnate for years here and be no worse off at this job. IMO, doing so would eventually make me a bad programmer.
Sarcasm is a form of irony - one meaning of irony is saying one thing, and meaning another. "Sure, that's a great idea" is both sarcastic and ironic (although not ironic in the sense people most commonly use the word, which non-ironically, is not that ironic).
I catch the irony, but I'm not confident that it really contributes to the discussion here. Look at the comment thread it's produced: practically nothing of any consequence or interest.
It doesn't mean you are a bad developer, it means you are a satisfied developer. Some people however have so many things rattling around their heads that not exploring those ideas makes them unsatisfied.
Nope. But coding in spare time make you better developer. And.. If you do not like coding - it's wrong career.. But who knows, code monkeys useful sometimes too..
I am a research mathematician. I work hard, but I also spend a lot of time pursuing other interests such as yoga, swing dancing, and improv comedy. This takes away from the time I do math.
Does this make me less of a mathematician? Of course it does. This is a tautology. I am a mathematician to the extent which I devote my time and energy to learning and doing math.
Sometimes I feel guilty about this, but on reflection, this is a sacrifice I am willing to make. We only get one shot at life, and we have to balance all of the activities we find valuable.
Totally agree. And I believe those other interests may make you more valuable in some other context (such as a business owner, people manager, parent or spouse, etc).
I once heard the terms "T Person" and "I Person" as ways to represent a person's skills (though I don't find any info on it with any Google searches; maybe I'll write about it someday).
An I Person is someone whose skills are very narrow (vertical). This person is a specialist and probably spends the majority of his/her time perfecting that skill.
A T Person is someone who also has a predominant skill, but it's perhaps not as deep as an I Person. However, a T Person has a horizontal bar that stretches across a range of skills.
I don't recall hearing about a "- (Dash) Person", but if I were to continue this analogy, that would be a jack of all trades, master of none.
Society needs all types of people, but I suspect T People are especially desirable in a startup. You want a person who can do a little of everything, but excels in one particular area.
>Does this make me less of a mathematician? Of course it does.
I disagree. Burn out is a real thing and once it happens your capacity is drastically reduced. I suspect you've probably found the maximum output you're capable of producing long term.
It's possible you're right. In my case I rather doubt it -- especially considering the late nights I've been out -- but at the very least I agree that this kind of thing is often true.
For me it is the other way round. When I program in my spare time, I do it because I need a certain piece of software and no one else (I know of) is building it. I even switched jobs to become better at a specific platform because I was frustrated how slow I am programming for it only in my spare time.
Interesting post! I posted one not long ago saying the opposite. The reactions were staggering and felt the need to update my post to clarify my point.
Regarding your post though, i think that no one is assuming extremes - you can easily manage a few hours a month to do some mad science experiments. You might even surprise yourself with the outcome or renew your passion that made you take up development in the first place.
You also don't always get the full perspective in your day job - even if you work at an amazing place.
Development isn't a music skill. It isn't about repeating a piece over and over to train your mind, motor skills, and dexterity until you can reproduce it perfectly.
Every day people are pouring tons of new and interesting ideas into this discipline and more often than not, they have excellent ideas which can be shared and studied to your benefit. Take advantage of it.
The software craftsmanship / hacker dojo people would argue your point that about needing to repeat over and over again.
Example: I probably need to sit down and actually practice, over and over again, certain Regex concepts, because I need them at hand immediately.... which is what habit does.
Totally, and thats pretty much all that can be said. If you program more, you're likely going to be better than had you not (by how much is another question).
Using this as a way to compare different people, on the other hand, is foolish. Just spending time coding is going to do little to improve your skill assuming you're past the stage of just starting out. It's how much you're challenging yourself, and how you handle that challenge that makes a difference.
After a period a couple of years back when I didn’t have spare time to program within I felt that I was slipping behind. I simply wasn’t evolving. I was stuck in a mindset that was very tightly coupled to the tasks I did at work and programming was getting less and less fun. Once I began working on projects in my spare time I quickly remembered why I love it so much. The problem now is that I feel that work is detracting from the joy I feel when programming, which makes it hard for me to remain in this business.
Most of my friends are indians who are programmers - none of them code outside of work. And I mean none. I'm indian - I code outside of work as I'm trying to start a company.
Indians look at programming as a great way to make good money. And a way to move up to management after that. Thats about it.
Sure there are programmers that don't program in their spare time that are great programmers, but I think the general theme is that doing side projects in your spare time is generally a strong signal you're adventurous, self-reliant, eager to learn, interested in broadening your skills and have a strong desire to get better -- all very important things in anyone hoping to get better at your craft.
When I'm interviewing people, side projects (especially successful ones) are _strong_ signals of a candidates value as a good programmer. This doesn't mean I won't want to hire someone without side projects, but candidates having them 90% of the time are very strong.
To continue coding in your spare time, you must have a real exciting project to work on: to learn a new technology, or to build something you really love. Without that passion, you won't have the extra energy to do that and it won't necessary to be beneficial.
So try follow your passion. If your passion is to write a novel, play guitar, do that. If your passion is to build a new web app, do that. Don't code just for the sake of coding. You cannot lie to yourself.
If you enjoy programming do some development in your spare time. Find a project that interests you. Programming is a tool, master it by all means if that is what you want. However, don't lose grasp of the fact that there are numerous other pursuits you can take up. Learn a language, build a house, learn chemistry, send a rocket into orbit, make an erotic film, excel in martial arts, whatever it is that you want to do, do it. Have a diverse range of experiences and regret nothing in life. Don't just be a developer.
155 comments
[ 0.26 ms ] story [ 177 ms ] threadPursue that something and you may end up programming in your spare time. Or starting a company such that your side project is your job. Or finding something really exciting to do at your current job. Or whatever. In words much older than our civilization: "Do not follow in the footsteps of the Sages. Seek what they sought."
This is a good question, but it does lead me to a thought... why does it seem like most side projects are done by people for whom the predominance of their work appears to be side projects? Let me explain.
Most of the programmers who produce large products, don't do much in the way of side projects. Carmack seems to be heads down on Rage. I don't see a Carmack GitHub project. Nothing from Tim Sweeney either. I don't see anything from the devs that did GTA or Halo or RDR or the latest Mario game.
What about David Cutler? Linus -- he did Git, I guess a side project(?) -- other stuff? Any of the iOS architects have GitHub side projects? WebOS architects?
It seems like we have two classes of devs. Those that ship large products. Whether its iOS or Grand Theft Auto 5. And devs that ship little projects. Small startups, little tools here and there. The overlap between the two seems rather small.
That would be like someone at MS saying that their side project was a new feature in Word.
So what is a "side project" and when people ask you questions in an interview like, "what are some of your side projects?", what are they asking?
They're not asking what did you ship as part of a corporate entity in most cases. They want to know, specifically what did you do outside the context of your job. If you work for EA, its hard to claim that an EA game is your side project. Just like someone at MS isn't likely to claim that a new Word feature is their side project, even if they did all the coding for it over the weekend.
And if he ported Emacs to the iPhone that would be a side project, by most measures. He'd have to release the code since its GPLed and ID is not likely to sell it.
But, about people working for big companies, since you are talking about iOS / WebOS, etc... these people do many times have side projects, but they are internal and in the context of the company they work for, not public. And the cool thing about a big company (versus a startup) is that deadlines are more relaxed (you do have more free time) and you can switch projects when bored to death.
these people do many times have side projects, but they are internal and in the context of the company they work for, not public
I don't think most ppl would consider them side projects, at least not in the discussions ppl typically have. For example, I've seen people say that it literally has to be on GitHub.
That itch could be something that bothers you, or it could be simple curiosity.
I have a very fulfilling day job (I'm a co-founder of an awesome startup, which makes it more of a fulfilling day&night job), but that doesn't mean I won't explore other things, try out new technologies, find something that sucks and make it better, latch onto an idea and build it while thinking "how hard can it be?" (Answer: it can be VERY hard)
Side projects are an outward expression of people who are hopelessly creative and just can't help themselves. The CONTENTS of those side projects demonstrate how organized, focused, and disciplined they are.
1. http://git.kernel.org/?p=linux/kernel/git/torvalds/tracker.g...
2. http://git.kernel.org/?p=linux/kernel/git/torvalds/pesconver...
3. http://git.kernel.org/?p=editors/uemacs/uemacs.git;a=summary
Annoyingly enough, he has the same day job as me. My side projects don't get used across the internets :(
It's easy to see why most side projects are done by people for whom the predominance of their work appears to be side projects: This is a trivial consequence of the fact that the vast majority of the software developed on this planet is "dark matter." It's developed inside companies, and even if you know I work for IBM on DB2, it's hard to see from the outside whether I'm a coding machine by day or whether I write emails from 8-5 and code side projects from 5-8.
In the universe of software projects, we're mostly talking about side projects that are visible things like Github repositories, and mostly talking about day gigs that are invisible. If we want to drop the word "appears" from your first statement, we need to include side projects that aren't on Github (like startups being developed on nights and week-ends while the authors go to work "for the man" M-F 9-5).
We then need to compare all of the side projects to all of the code these people write during their day gigs, whether it's highly visible stuff like Linux or "invisible" like the internals of an ATM locator for an online bank.
If we don't include all of the side projects and we don't include all of the day gigs, it is very easy for our skewed sample to have many examples where the authors appear to do most of their work on their side projects.
Please don't assume from this that I disagree with where you seem to be taking the conversation. If we see that things are not always as they seem, we also must accept the idea that even if people with side projects appear to be good programmers, it might be that the high-profile examples we find on HN or who blog are not representative of programmers as a whole. It is very dangerous to draw conclusions about the correlation between a side project and talent based on an incomplete sample. I think we agree on this here and in another thread elsewhere.
As they say... The plural of anecdote is not "data."
Absolutely -- I think that's where I was trying to go, but not as eloquently. If you look at the thread, I define "side project" in, what I consider, an odd way. Basically something that is on GitHub, because that has become what so many mean by side project.
In a roundabout way I was trying to say that people learn and grow in ways that are less visible. And while others may question your programming skills as a result -- you shouldn't.
I think there's another way to look at this.
The fact is, programmers who program in their spare time are usually better than average (). That doesn't mean a programmer can't be just as good if he/she doesn't* program in their spare time. It doesn't even mean that programming in their spare time helps these programmers get better, or that better programmers tend to program in their spare time. It's the other way around - programmers who program in their spare time tend to be better (and one direction being true doesn't mean the other direction is true).
The only reason people care about whether others program in their spare time, is because this correlation exists. If I know someone programs in their spare time, that's a positive signal that they are a good programmer. And it's a perfectly legitimate shortcut, when interviewing someone, to see whether they're good. People take offense at the suggestion that they're "worse" because they don't program in their spare time, when in reality, it's just a shortcut.
* I think most people will agree, at least in terms of averages. Nothing about any particular programmer.
Now I have a fiancee and we live an exciting new city (Brisbane, AU).
I've just outgrown it. I think both ways are normal. However, the dude that doesn't program during the day and yet paid to do so IS WRONG... Whoop, that would be me. Back to work!
in my experience the people who say "you have to have side projects to be a good developer" are either people who do program in their spare time, or people who want to hire the type of programmers who voluntarily chain themselves to their desk.
this is one myth i'd really like to see die. good accountants don't balance checkbooks in their spare time, do they? lawyers don't hold mock trials, doctors don't do surgery on their friends as side projects, and construction workers don't pour concrete for kicks on the weekend.
So yeah, don't go home after work and write Hello World or re-implement bubble sort yet again. But do keep up with developments in your craft. If you don't have this opportunity at work, hopefully (for your own sake) you still do take the opportunity outside of work. Software changes so fast that most don't have time during work to keep up. If you let your knowledge get too out of date, your value diminishes rapidly. I think this speaks for a need for more work-sponsored learning opportunities, whether that's courses, conferences, or Google-style 20% time.
Personally, I wouldn't want to be operated on by a doctor whose knowledge of surgery stopped in 1960.
I can't speak for developers but almost all of the best designers or creatives I know experiment a lot outside of work. Myself, I do interactive side-projects all the time as I can execute sites that I would simply not be able to do in my full-time job.
Regarding medicine: My Dad is a doctor and spends a lot of time outside of work reading dense materials about certain diseases or findings, which is definitely not light reading nor recreational. I also have had friends who've volunteered their medical expertise to aid the homeless or less fortunate.
The thing is: software development is still young and evolving field. Unless your employer sends you to the training courses, conferences, and has some kind of "20% for own project" rule the side projects is pretty much the only way to learn new things and experiment.
This is actually true of software engineers as well. Sometimes you can convince management/clients. But you may have a hard job on your hands because people have come to believe that this sort of thing will be done on your own time.
Just my two cents: I don't see programming in my spare time as, well, just programming. I see it mostly just as a tool that helps me with my hobbies. I like to read history very much, especially about my city, then why not build a heat-map based on the constructions years of its buildings? (thanks, gheat! http://code.google.com/p/gheat/). And how to get said constructions years? By just writing a small Python script that parses some big real-estate agent website.
And you can do the same thing if you like sports, going to the theater or if you like Medieval history (I have a home-project for each one of these domains). And while you're at it, why not learning a new language/technology when trying to implement them?
By contrast, a software developer who codes recreationally for 5 hours a week, 50 weeks out of the year, is spending 250 hours per year coding outside of work. That's 10 times as much "continuing education" as the physician. If 10 hours per week, that's 20 times as much as the physician.
Of course, a good doctor probably reads medical journals in addition. But a good developer reads blogs, websites, SO, HN, etc. as well.
So does a software developer really need to spend 10-20x as much time as the physician in continuing education in order to be considered "good"? Why?
To look at this another way, a developer who wants to structure their life to match a good, passionate physician, would probably:
- Work 45-55 hours per week (and be on call for occasional emergencies) - In the evening/weekend, spend some time reading blogs, journals, books on programming languages and software development, etc. - Go to one week-long conference per year (e.g. WWDC)
And that's it. No github account. No contributing to open source.
Yet there are apparently a great many people on HN who would not consider the above developer to be good, who would not hire such a person, and would question their devotion to the profession.
But does a developer really need to spend 10x the time a physician does in continuing education in order to be considered good?
Doctors do not blindly apply "stuff that is created by someone else". For the most part, they use known techniques within the context of each individual patient and each individual ailment. The techniques are mere tools, used to diagnose and treat cases. Some cases are routine, but some others are really challenging.
Programmers, not surprisingly, use known techniques writing the context of each individual project and each individual requirement. The techniques are mere tools, used to design and implement projects. Some projects are boring, but some others are really challenging.
A minority of physicians or programmers develop a career in research, where they push the limits of their respective professions. But most people end up working on operative, day to day, jobs. And the skills are not transferable. Excellent researchers do not necessarily make excellent practitioners, and viceversa.
No, it's not restricted to programmers, although continuing to focus on honing work does seem to be far more prevalent in the creative professions.
I've worked for a law firm, they get round this problem by not giving their lawyers spare time if they can help it.
It's not that you won't be a good developer if you don't work on side projects; it's that as compared to anyone your own age who codes in their spare time, you're going to have less experience. You'll probably be way better at the guitar, or taking care of your dog, or whatever else you're doing instead of coding, but they'll be a better programmer.
Sure, the more time you spend practicing, you will likely be better than had you not spent that time. But to compare it across people is meaningless. There are countless numbers of those who have spent decades in the grind and aren't much better than they were when they started. Compared to someone fresh out of college who can code circles around most.
Experience itself means little, if anything at all.
My father was a contractor (now a building inspector) and over the last 20 years he has rebuilt his house one room at a time.
He gets excited when a new dumpster is delivered so he can start tearing another room apart.
I don't actually think not programming in your spare time will make you a 'bad' programmer, though. Only that being interested in it hobby-wise is a good sign. Practice helps you get good at anything, for one thing, and keeping up with the industry/etc is a big deal.
Practically, you may be totally happy in your current niche, but you're at higher risk from technological obsolescence unless you diversify.
This is as much an argument for '20% time' as it is for programming at home.
Automation of deployment or some menial task, sanitizing test data, gleaning statistics from a csv dump of the database, cron jobs, etc... I'm sure you could come up with more.
Pfft.
Any semi conservative workplace, anywhere: "What? No, who the hell would maintain it? Stick to <tools of choice>."
Although I like to think I'm a bit cooler and down with the times and the hip words the kids use would probably say something like, "So help me god, if I have to learn Erlang at three in the morning to fix some bullshit you cobbled together I will fucking end you".
Ok,it's menial.
We spent 95% of our time fielding calls from users (no first line, management's bright idea) and fixing bugs on old legacy code (vbscript when everyone else was on C#).
There were some developers who got a lot more support calls done than the others.
And then there were some developers who would refactor the code, write tools and other little programs and upgrade the in-house support system to make everyone's life easier and quicker to fix the bugs, learning while they did it.
It probably won't surprise many that those two sets comprised of exactly the same developers.
For the same reason that a developer can produce something using a new technology on spare time, the same developer can pick up a new technology, at work, in a brief period of time.
In other words, I think it's largely B.S. to talk about 'obsolete' developers. You could only be obsolete if you entirely forgot how to learn, which I think is impossible, barring something like singularly maintaining the same COBOL system since the 70's.
So, do you have to program for joy to not be a bad developer? No. But if you don't love what you're doing, it's unlikely you'll ever be great. People who are the best at anything reached that point through a combination of natural talent and vast amounts of work. Chris Broderick ( http://www.youtube.com/watch?v=xkpZ645ztl0 ) wasn't born this way... when everyone else was hanging out with high school buddies or going to college, he had a guitar in his hands 4-8 hours a day. Loving what you do is more powerful than desiring the rewards. If you love what you do, learning to do it better can feel effortless.
On the other hand, having a passion for a topic to the extent that it consumes your work and personal time isn't always a good thing. When you do it in lieu of things friends, a romantic life, spending time with your children or simply resting your mind, you may regret that later on.
At that point, I realized that making a distinction between a hobby and a career path is a good move, and you have to know what you are pursuing. For example, I tinker with arduino in my spare time, as a hobby, and I don't intend to sell or make money off anything I make with arduino. There is nothing wrong in learning, say, Ruby in your spare time because you know that it will come in handy and that you could make money with it. But that's not a hobby.
Doing iPhone development (among other things) is my full-time job, and I am loving it -- mobile app dev was never my hobby, but a career choice, and I'm ok with that because I am happy at the place I work.
On the other hand, I think a hobby that could be something more is totally legit. For instance, I am learning Haskell as a hobby. I'm not really sold on it as a great language for business (yet), but I realize that if I get good enough at it I may be able to shift my career in that direction.
To answer the original question you were asked: If that happens I'll get a new hobby.
There are days of frustration, sure - but those pertain more to the business aspects of "monetizing" this hobby (such as dealing with clients when doing contract work), than to the art & craft of the hobby itself.
I don't think a hobby necessarily has to be less enjoyable just because you've made it your job.
This may be true in some rare exceptions. However, hobbies have no deadlines, no schedules, no management, no commute (ok, maybe not if your hobby is somewhere else), no feeling of "I have to do this", etc. All these reasons take away from the pleasure of doing your hobby, add to your stress -- which is the whole point of having a hobby in the first place, to take your mind off of stress of daily life.
I have hobbies outside of my "job" too, and perhaps sadistically, I give myself schedules & deadlines there too. I feel that if I do this, I can keep myself on track and even record my progress to a certain degree. I tend to get great satisfaction in a completed project, hobby or job. And I find the pressure of a deadline gives me this strange "high" - kind of like a runner's high - right before I hit my deadline and/or complete the project.
I totally hear you though. I can certainly understand how such pressure can totally take the joy out of a hobby for most people. And I never try to force anyone on my teams to think or behave this way, unless they naturally do already.
That's not to say that it is bad for people who do it, just try to expand your hobbies to something outside of technology.
People are allowed to have more than one hobby. And I'd think that if your paid job is writing and maintaining boring internal enterprise apps, hacking on fun projects could prevent you from getting burned out.
The way I see it, the ultra-passionate, sleeps-eats-drinks code programmer is usually one who hasn't: a) learned to use his time parsimoniously; b) accepted there's a limit to how much you can do in one day; c) yet built a family. The last one, especially, if approached with gusto, will automatically make you ponder and weigh things -- and will also limit your time, fixing a and b if you don't fight it.
Anyone who does less programming that what is mentioned above cannot call himself a "good programmer", I would have serious reservations in calling that person even a mediocre programmer.
When you're 30 and you're seeing the same thing with a new name for the 2nd or 3rd time it takes a lot less effort and time to keep up.
Investing in my skillset on my own time with my own rules is an investment in me. I don't particularly care if it makes me a better programmer - it's a contingency plan to make sure I can support my family in both good times and bad.
Funny story - Bill Gates' first question to his wife was said to be "What was your math SAT?"
PS Would that work?
You should already know Haskell (and ML), and be writing your own research language.
Does this make me less of a mathematician? Of course it does. This is a tautology. I am a mathematician to the extent which I devote my time and energy to learning and doing math.
Sometimes I feel guilty about this, but on reflection, this is a sacrifice I am willing to make. We only get one shot at life, and we have to balance all of the activities we find valuable.
I once heard the terms "T Person" and "I Person" as ways to represent a person's skills (though I don't find any info on it with any Google searches; maybe I'll write about it someday).
An I Person is someone whose skills are very narrow (vertical). This person is a specialist and probably spends the majority of his/her time perfecting that skill.
A T Person is someone who also has a predominant skill, but it's perhaps not as deep as an I Person. However, a T Person has a horizontal bar that stretches across a range of skills.
I don't recall hearing about a "- (Dash) Person", but if I were to continue this analogy, that would be a jack of all trades, master of none.
Society needs all types of people, but I suspect T People are especially desirable in a startup. You want a person who can do a little of everything, but excels in one particular area.
EDIT: Found a reference to this concept - http://en.wikipedia.org/wiki/T-shaped_skills
I disagree. Burn out is a real thing and once it happens your capacity is drastically reduced. I suspect you've probably found the maximum output you're capable of producing long term.
Regarding your post though, i think that no one is assuming extremes - you can easily manage a few hours a month to do some mad science experiments. You might even surprise yourself with the outcome or renew your passion that made you take up development in the first place.
You also don't always get the full perspective in your day job - even if you work at an amazing place.
Development isn't a music skill. It isn't about repeating a piece over and over to train your mind, motor skills, and dexterity until you can reproduce it perfectly.
Every day people are pouring tons of new and interesting ideas into this discipline and more often than not, they have excellent ideas which can be shared and studied to your benefit. Take advantage of it.
Example: I probably need to sit down and actually practice, over and over again, certain Regex concepts, because I need them at hand immediately.... which is what habit does.
-------------
Just about sums it all up
Using this as a way to compare different people, on the other hand, is foolish. Just spending time coding is going to do little to improve your skill assuming you're past the stage of just starting out. It's how much you're challenging yourself, and how you handle that challenge that makes a difference.
And a lot of them are good at what they do.
Could you elaborate?
Indians look at programming as a great way to make good money. And a way to move up to management after that. Thats about it.
When I'm interviewing people, side projects (especially successful ones) are _strong_ signals of a candidates value as a good programmer. This doesn't mean I won't want to hire someone without side projects, but candidates having them 90% of the time are very strong.
For example, the programmers that http://www.fastcompany.com/magazine/06/writestuff.html talks about are neither (at least not when on the job). They do have a strong desire to get better, though.
So try follow your passion. If your passion is to write a novel, play guitar, do that. If your passion is to build a new web app, do that. Don't code just for the sake of coding. You cannot lie to yourself.