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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
"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.
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.
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.
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.
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.
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.
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.
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.
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.
> 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?
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.
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.
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.
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.
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.
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.
Not programming outside of work is an indicator rather than a cause of 'bad programmer'.
Programming outside of work indicates that you like programming. If you are bad at programming you will not like programming, as it will be frustrating.
It also indicates that you are reasonably smart, probably get bored watching television, and are at least a little intellectually curious. If you are specifically programming something 'fun' to unwind after a long day of work, you are clearly comfortable programming, and you have interesting (enough) ideas about what to program.(It also indicates that there are no decent pubs within walking distance).
If you are programming in your free hours because some guy on stack overflow said 'this is what you must do to be the greatest programmer,' you are probably an idiot. No amount of outside work programming will help you.
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.
No, but it probably keeps you from being a great developer.
I've worked with a large number of people at a large number of companies, and the difference between the solid "B" developers and the amazing "A" developers is that the amazing developers are passionate about technology and coding, and always have a side project of some sort going on. They are excited to learn new languages/frameworks/ideas and bring that added knowledge to their day job with great effect.
Back in first year uni, when I felt like everything I was supposed to be learning was a bit of a walk in the park I'd program in my free time a whole lot. later in uni when I was swamped with engineering maths and compulsory management subjects I didnt program in my spare time at all (I suck at analog maths and ROTE learning so it sapped my enthusiasm to do anything in general).
when I finished uni and got my first job, I was back in the position of being given boring menial tasks and I programmed in my spare time for fun again. I left that job for something a lot more interesting and was quickly given enough responsibility that at the end of the day I didnt feel like programming so I didnt. After a few years there I'm on top of things at work again and I'm back to coding for fun in my spare time again.
I dont think that not coding in your spare time is a sign that you're a bad developer; it's more a sign that you're getting enough mental stimulation elsewhere. That said, I think if you've never coded for fun it's possibly a sign you're in the wrong career. You should love what you do enough that you'd do it even if you weren't being paid to do it; not necessarily the exact same work, but at least the same domain. No point spending 1/3rd of your waking life doing something you dont enjoy
I'll preface this by saying that this is my personal opinion.
Github (and the like) are becoming prerequisites. You should have a portfolio of personal code you've done that you can freely share. Stuff you are proud of and passionate about (or not so proud of, but are deeply interested in) and stuff you want to learn more about.
Would you hire a wedding photographer without seeing personal samples and talking to them about their interests and opinions on how to photograph your wedding? You'll interview a slew of photographers who just do it to make a buck (and that comes through very clear), but you'll also find a few guys (and gals) who do it with a passion.
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.
You should never sign an employment agreement that includes that. Never. I've successfully gotten employment contract/non-competes/IP contracts, etc... changed at every employer I've worked at who tried to pull that, from small shops to Fortune 500.
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!
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.
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.
I wasn't really interested if someone programmed in their spare time. I was more interested if they had written a program, at some point in their career, to solve a non-work / non-school problem or scratch a personal itch. I just wanted to know they had used their skills without outside direction. I always wanted people that saw their skills as useful outside the office / classroom.
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.
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.
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.
No of course it doesn't neccessarily mean that. Like most things in life; it depends. If you feel that your day job is fulfilling your interest and happiness as a developer, I'd say you don't need to work on side-projects, you're probably learning plenty during the day.
But if your work gives you restricted oppurtunities to try new technology, or burdens you with outdated tech and boring work, working on a side-project can reignite your enthusiasm in programming, which can never be a bad thing for your career.
Also, theres nothing to say you need to spend huge amounts of time on a side-project, maybe a few hours a month just to try a few new things. Sure, you won't become an expert in those things, but you'll get a feeling of what it's about.
And choose something fun to inspire you, nothing is more mind-numbing that coming home to work on a side-project that actually bores the hell out of you.
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.
I don't think it does necessarily, although it might be a symptom of lack of confidence or dissatisfaction with your work programming. I think having a broad range of interests - reading, playing music, drawing, socialising, sports - makes you a complete human being but programming for yourself, at home, should probably also be something that gives you joy. Rather than asking whether you're a 'bad developer' maybe start from the other end: 'What is preventing me from hacking at home? What spoils it?'
The other thing I recommend is to do the kind of programming that YOU enjoy and NOT the kind of programming that you think is necessarily 'important' or 'difficult'. All you need is that ONE opening, that ONE gap into accessing the joy of programming.
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.
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.
You are not supposed to do programmng all day long, but ifbyou don't feel a need to expand beyond what you do at work its one of the following:
1) you work is so great and diversified that you simply get all the programming you could ever need. For most people it's not the case
2) you are already extremely great. I think Linus probably doesn't need to learn yet enother language/framework (although I wouldn't be surprised if he does sometimes). For most people it's also probably not the case
3) you just don't like it that much
For most people that don't program at home (3) is probably the reason.
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.
I find that the less time you spend programming, more time solutioning the better developer you become. reading and learning how other folk are solutioning is where its at for me. anyone can program, not everyone can design a good solution for a problem.
If you enjoy programming as a job, then in your spare time you allow for tech, take the time to read a couple of pages here and there. If you don't read or get exposed to other talented programmers/architects then yeah, you are destined to be a bad developer!
I've been coding in my spare time in and out since I got my first computer. I didn't do it because I wanted to be a good programmer, but because I love creating stuff and programming is the easiest way I know to create stuff. I'm not happy if I'm not creating something.
Also, a few months ago I quit my job and I'm now making a living teaching people what I've learned during my "spare-time". I now have more free time than I could ever imagine, and the notion of spare-time is starting to disapear.
Programming is my hobby. I work on a startup product in my spare time, one question I'm faced with - is it possible to balance corporate work, startup idea and have time for side (hobby) projects? If startup product is not my main task when out of work, is it a sign that the thing will fail?
I'd like to learn 3d, develop simple games, learn new languages and algorithms while still working on the startup product and maintain my corp job. Do you think it's possible?
do you code for fun? as long as you do, it doesn't matter whether you do it at work or at home. if you can experiment with new technologies and learn new things at work, your skills are going to improve and it's probably healthier to spend your free time doing something other than coding.
if your work is drudgery where you are maintaining old stuff and it isn't helping you keep your skill set current, then you should be programming in your free time as well.
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 think the idea that you must program in your spare time and contribute to open-source has a sociocultural benefit. It might be more 'pure' to devote all of your time to your fellow developers and improving your art.
Yet the quality of your work has nothing to do with the time you spend on it. Quality over quantity, as they say.
Either way, there is certainly some benefit to be had in being passionate about your work and in keeping on the bleeding edge of technology.
Has anyone else noticed that doing totally unrelated activities outside of work often inspires programming solutions? Practicing a musical instrument or other creative activities seem particularly useful to put my brain into a state where solutions or at least new ideas come more freely. This seems more pronounced now that I'm in my forties and I couldn't code the night away even if I tried.
It comes down to caring enough to do it right. You have to love it and be a pedant who pays stringent attention to detail. You can be smart and motivated but unless you really want to know why and how it all works and fits together it's hard to excel.
That type of person will always be reading and writing code and solving problems. Spare time and work time all blurs if you are focused on a problem.
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.
Is there a site where programmers can post their side projects for the rest of us to look through? I am always working on a side-project... usually something built on Facebook platform. I'd love to see what you other hackers are working on in your 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.
Something I've noticed over the years is that my productivity and ability peaks don't correlate with time spent programming, but rather with time spent reading other people's code.
"Poor comment" is very subjective; I think that people are downvoting you not only because they disagree, but because of the type of argument you made: you imposed a value judgment on a certain kind of decision-making without really backing it up. You just said, "People who do X are 'wrong' and people who do Y are 'right'." There was no logical basis or evidence for what you wrote, and on HN, I feel like people value the rationale behind opinions as much--if not more--than the opinions themselves.
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.
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.