views:

412

answers:

9

My guess is that many of us would count ourselves among a particular sort of group -- developers interested in become better developers. I'm interested in getting a better sense of how you approach your continuing education.

Our field is evolving at a ridiculous pace. Just taking the statistically likely example, if you happen to work in .NET, you know what I'm talking about: .NET, by itself, is huge, effectively beyond the ability of any one person to know completely -- and it's ever-growing. For my part, in addition to .NET, I do a lot of rich-client work in Flex, which is a nascent sort of beast in its own right; after a year or so with it, I'm only beginning to feel like I get it -- and it's about to undergo a major release as well. And now, of course, there's WCF, which, if you're doing any sort of Web stuff inside the Microsoft stack, it'd probably be good to at least know and explore, if only for the awareness of its being an option, if and when a project happens to come along that might benefit from it. Which in turn implies educating oneself in SOAs, in order to see how WCF fits into that particular picture, and which in turn implies reading up on ... etc., etc.

All this to say nothing of maintaining competence in core CS concepts and practices, which many of us haven't really revisited since college.

Obviously we need to draw lines; we can't know everything. But at the same time, to keep pace with our industry, we also have to keep learning, while working to achieve balance with the rest of our lives. (I'm an engineer, but I'm also a husband, a dad-to-be, etc., and I do like to get out once in a while to breathe the fresh air.)

So with all this in mind, I guess my questions are basically these:

  1. How do you keep from becoming overwhelmed by the volume of information out there and its expansion, and
  2. Assuming you do have a system in place for continuing your own education, what is it?
+2  A: 

For me and my work, I have little business need to keep up with the cutting edge, but its in my personal interest to know new things which I read or hear about at work or on the internet (eg, I'm looking into linq a lot and trying new things out).

I have a simple plan (which isn't working so well recently, as I'm at work more than I used to be) to code at home to try out new things and to keep skills up so I can apply them at work when I need it. My justification for that is simply, I want to ensure I'm above the rest.

simonjpascoe
+3  A: 

How do you keep from becoming overwhelmed by the volume of information out there and its expansion

They say that reading the internet is like "drinking from a firehose".

I don't try to read everything. I try to do work (programming), and as part of that process I learn what I need to that seems relevent to what I'm trying to do.

A large part of programming is information hiding: being able to ignore what you don't need to know now.

Assuming you do have a system in place for continuing your own education, what is it?

Two or more of the following:

  1. Read a forum like this: I'll see questions on topics that I didn't even know existed
  2. Have an at-home programming project (study whatever I want)
  3. Have paid employement (in order to keep, over the years, employable skills)
ChrisW
+2  A: 

I feel your pain. Luckily, my employer is very understanding with regarding to R&D time. I try to stay fresh by doing a lot of reading. And I always try to do at least a few demo projects with new technologies (MVC, Silverlight, AJAX, etc.). If applicable, I try to incorporate the newer stuff in my latest projects.

And of course at home, I have various books in almost every room of the house, haha.

alex
Same here, piles of them! Crazy.
Christian Nunciato
+2  A: 

It is a tough balance. The first thing for me when it comes to new technology is, to be honest, wait a little for the "bleeding edge" folks to take a stab at it. Those are the ones that either work at the vendor or pretty close, and have a vested interest in promoting the various technologies. Then I start reading their blogs, maybe go over some examples, and get a feeling for if it will "stick" or not - vide LinqToSql versus Entity Framework debate.

After you evaluated as carefully as possible, try in a small but meaningful project - for example I tried ASP.NET MVC in a small reporting site.

The thing to remember, IMO, is that being a good programmer is more important than just learning cool new things. If you are, it makes your job a lot easier. In summary, put family first, and make sure you have some quiet time to learn. In regards to training, so far I found little value - training classes are in general geared towards a level lower than I would expect - YMMV.

Otávio Décio
I totally hear you about the "bleeding edge" stuff; couldn't agree more and that's my approach as well. Thanks.
Christian Nunciato
+8  A: 

Obviously, you can't learn everything out there. My big tip is not to chase after every fad that comes around. Wait and watch. The lame ones die off, and the good ones stick around. Quite often its after someone I respect reviews a new technique/technology that will get me interested in it. Or I might just investigate it myself and make my own mind up about it and communicate my thoughts on my blog... Just don't stress on it.

As for how I continue my education, this is how I've done it, and it works great for me:

  • Read blogs
    • I keep about 20-30 code blogs of people and projects I admire and who I believe are on the cutting edge of software development today. I read what they say, and when I don't know what they're talking about, I read up on it. I do this every day.
  • Read books
    • While books aren't exactly the cutting edge, they are the primary source for in-depth information about a subject. The internet is good for skimming the cream off, but if you want to get down into the smallest details you have to read books.
  • Teach
    • One of the best ways to learn is to teach. Giving presentations, writing on your own blog, answering questions on SO... There are lots of different ways to teach. The best thing about teaching is that it highlights the holes in your understanding of subjects. Often, when I'm preparing to expound on a subject, I find myself going "blah blah blah BECAUSE... Crap, I have no idea."
  • Learn
    • When somebody else is explaining something to you, listen. Even if you think you know what's going on, you might catch a tidbit you've never come across before. Don't be quick to pass on a forum or talk because it covers what you already know.
Will
I like what you said about teaching -- I've found myself in that position many times. :) Totally true. Thanks.
Christian Nunciato
+1  A: 

The trick is to find sources of information that suit your style of learning and then consume them as much as possible. I find that not only does this site answer questions but it also brings to light areas where I think "ah, that's interesting" and then go off and investigate more of them.

I spend a lot of time commuting (2 hours a day) and always have some sort of "techie" book on the go. I work with Windows technology and subscribe to the MSDN magazine, even though it's available on line, so that I can read it whilst commuting.

Every now and again I buy a book which covers a technology I've not used and read up on it. The Amazon marketplace is a good way to pick these books up cheaply, so if you end up not finding it too interesting then you've not wasted too much money.

Sean
+1  A: 

I am just starting to break into the professional tier of developing. I have been going to school for about 3 years to earn a software engineering degree, and I have observed some of the same things that you have. One of the main things that I realized right off the bat was that my degree program is pretty much not going to be sufficient for me to get a good job in the field. Most of the classes only scrape the surface of the various languages, such as C, C++, Java, etc. The web developing classes were even outdated! They mentioned AJAX, but didn't take the time to explain how it is done or even how to get started.

So what I realized is that I was going to have to spend a lot of time learning on my own. In order to avoid becoming overwhelmed, I have tried to make developing as fun as possible. When I am enjoying what I do, I learn a lot faster and it doesn't seem like work. It also feels like I am absorbing the information more quickly and I understand it better because I am enjoying what I am doing.

My system for continuing my education has been driven by analyzing the technologies that I feel are more valuable in the workplace and learning those technologies. I set goals for learning them and spend time each week learning those technologies in order to meet my goals. This helped me learn PHP, JavaScript, SQL, ASP, AJAX and some other technologies which appeared to me to be in high demand.

Shane Larson
+2  A: 

I occasionally search for the most obscure stuff (like languages, frameworks, libraries) on wikipedia, google, sourceforge or package repositories of several linux distros. There are a lot of interesting things which people haven't heard of several times a day from sites like reddit, slahdot. I take a look at, if it really interests me I download the source or binary and play with it some. I stop fiddling with it after about a day and go on my daily work. If it pops up somewhere while doing my work in a year or so, then I immediately know that I got a potential winner and a starting point of great ideas to research.

Think of BeanShell for example. You don't hear it three times a day, heck, not once for six months but it is a really nice scripting environment for jvm and it is quite nice to have alternative languages for jvm which are more suitable for scripting. The winning idea here is, rapid prototyping for jvm using an alternative to java or completely ditch java.

The advantage of this approach is, you get to invest time on only what really sticks and have the potential of being popular before it really is. You will, then, have some head start if it makes sense to use it in your daily work.

This is quite different than reading books or blogs passively. You find what is relevant to yourself, examine it yourself, dismiss it yourself.

Not everyone needs doing much research for their work though. But everyone can find something worth examining, like products similar to what you work on, alternative libraries and tools that you use. I think everyone is frustrated with their tools and looked briefly for an alternative sometime. Digging a little deeper, you can come up with a gem.

artificialidiot
+1  A: 

I find it useful to maintain an actual written plan/roadmap of your personal education.

In my case, I have an electronic mindmap of topics, technologies and projects I'd like to spend time on in the future. Every once in a while I revise it; sometimes things that I haven't got to yet bubble up or down in priority depending on the direction the industry takes.

thomanil