Do you spend your working hours learning new stuff, reading tech blogs, books on programming etc.? What's your opinion on it? Can an employer have benefits allowing developers to spend about 1-1.5 hrs a day on learning. Will it be repaid in future (with better productivity etc.)?
I am of the mindset that it is essential for a good development environment to allow for an hour or two at most for exploration and learning, barring when it's "crunch time" on an application of course.
An environment which doesn't do this is a red flag in my book because it tells me they don't value improvement.
Worst of all is the place that reprimands it's developers for reading blogs/technical sites instead of "writing code". That, to me, indicates an environment that doesn't care about it's developers beyond what they can squeeze out of them.
I think that almost all employers end up paying people for about 1 - 2 hours of learning at least a few days out of every week. Even if you are just searching documentation, you are still learning something that you didn't know before.
I personally dislike setting up 'slices' of time for others, it feels a little too much like managing someone else's time. If I hired you, I did so because I have a pretty good feeling that you know how to manage your time better than I do. You set productivity goals and the occasional deadline, but other than that, let the employee do what makes the employee most productive.
If you need to spend six hours figuring out how to best approach a problem by studying several different algorithms, that's fine. If you need to spend 20 minutes going through a reference of a language implementation, that's fine.
In short, just encourage people to learn and get better as they see the need and opportunity to do so. Pay for training when it makes sense and don't cheap out on books. That usually ends up in great productivity and keeping great employees.
I spend a few hours each morning focusing on learning something new. This can be either something related to my main technology stack (.NET, WPF, ASP.NET MVC, Linq, etc.) or I will play around with new languages, web frameworks, or even do some calculus and other hard math to keep the mind limber. Of course, I get to work at 6:30 AM and do this until 9:00 when the work day starts. When you have small kids at home like I do, you have to do your work early in the morning away from the house so you can totally concentrate. This also leaves my evenings open to be Dad. So, yes I think its important for an employer to give time to its knowledge workers to attain new knowledge. I always tell my developers to take time to learn new stuff and even encourage them to attend conferences and seminars to always keep their mind limber. Even if they don't write anything in Erlang, it may possibly manifest itself somewhere conceptually later and prove to really useful in another project.
That's why it is called the "Reading Room" :) Set up an RSS reader or whatever you like that can aggregate postings from various places that you find valuable and then print off a few articles per day and take them with you.
But beyond that, if you are doing something that you already know the answers to and are not spending at least part of your day tracking down the answer to something (which is also learning) then you need to change jobs. Complacency is a killer in this profession.
I commonly didn't really get into writing code until after lunch. Commonly my days would go something like this:
9am-10am: Stackoverflow(including interesting blog links, etc), email, maybe review some of the recent changes in source control to get a feel for where the project is headed as of late.
10am-12pm: usually spent doing "light" coding. Refactoring, small bug fixes, and designing how the implementation for whatever will work, with sometimes a bit higher-level designing when needed
1pm-3pm: usually heavy coding. Tedious coding fits in here.
3pm-3:30/4pm: A bit more learning as a "break".
4pm-?: If I was really in the zone, I'd be known to stay an hour late or so. This is oddly probably the most productive time for me. Namely because usually I get left alone after 4pm, and I'm a natural night person so anything before 12pm seems "early" to me.
Now, I say it's unfair for the company to pay you for writing blog posts and such. This includes Stack Overflow answers sometimes.
Learning, eh? I'd say I do that most of the time at work. To me, learning is the core essence of programming, and a natural corollary of the fact that you're always solving new problems (i.e. not doing the same thing twice).
If you are not learning during your working hours, you're either doing it wrong or you should look for a way better work environment.
(That said, for blogs and books I mostly tend to use my free time, except when it's closely related to the work at hand.)
From a management point of view, employers generally do want their employees to be constantly learning. This could be formal classroom training or e-learning, catching up on your RSS feeds, reading technical journals, watching videos, having a mentor, mentoring others, etc.
The rub comes when
- your manager thinks you should know this stuff already
- you've got a deadline on a project
- you start forcing your new-found learning on business without it going through the proper channels (e.g. I just learned all about ObservableCollections and think it's great so I'm going to start doing that in my part of the codebase.)
All of that said, the general expectation is that you need to drive your own learning against the 70-20-10 model
- 70% should be on-the-job learning, like fixing your code with something more efficient
- 20% should be informal learning, like being mentored and reading blogs or attending a conference
- 10% should be formal training, like a 2-day classroom event or e-learning modules with SCORM tracking
If your company doesn't have the 10% formal training portion, ask for it.
For me, programming is learning. Every time I write a method I can learn something:
- Is this the best way to do this?
- What is the memory/CPU usage?
- What are the trade-offs?
- What are the potential problems that could make this method fail? (deadlock, dropped connection, etc.)
- Does this method need to be part of a library so I can reuse it later?
- How can I explain this system in non-technical terms so that anyone can understand it?
- How will I remember and organize everything I just learned?
Every time I go on Programmers.SE or Stack Overflow I learn something.
I think that being a programmer is all about learning. And, everything that we learn can be used to make us better programmer and help make the projects that we work on succeed.
I'm spending around (of working hours):
- ~5% of time to write code
- ~10% of time to watch Starcraft2 videos on YouTube and drink coffee
- ~20% of time to think about current problems project is facing
- ~65% of time to learn new and exciting stuff
Reading technical articles on web has been a habit for me for the past 2 years. Everyday, I spend at least one hour or more jumping through articles. In the beginning, I used to hop on every article and try to learn. That was my interest and it seemed unproductive due to the vast amount of articles and topics that one could go through. Probably, "Jack of all trades, but master of none" fits this situation. Over time, I have found many good resources and identified my interests. Post that, I have narrowed down one the topics and started to be selective.
What I gained from all the reading is finding about good resources like stack overflow, Y Combinator, smashing magazine, etc. What I will gain is expertise in the topics that I am reading. So, my point is that one should also be selective about the reading. Reading is always a good habit. Selective reading is a great one.
Also, one other observation is that almost all the people around me that I feel are good programmers, keep reading and pointing me to great stuff. It is like our reading helping others become better - The social part.
I prefer the learning time in the morning. I start the day by learning new stuffs that have been in my mind and/or read tech news feeds I follow in Google Reader. Sometimes I also spend some time after lunch. If I feel to learn anything new which is not blocking my current task, I put it up for the following morning.
Well, I also avoid writing blog during working hour since it may take more than the estimated time. The best time for writing blog or participate in the community (for me) is after office hour.
one can find the problems around or from the projects he is working on. Just create or device some problems for your karmic endurance. Look deep as much as you can. One will find his way to the glorified paths of autodidactic work-life. When one become more productive, one will find time to learn to become more productive than he is. Evolutionary intellectual nourishment of oneself, i say, is always do good even if you are not a programmer. It just enhances the thinking process. There are different ways to approach the problem. Go for the option to dig more. Never be satisfied with the solution. Even after the committed delivery, one can review the output again. One has to do sharpen his tools. Better place for developing your own flying saucer, is definitely at your own personal dark room!