I consider myself a high level software developer. I enjoy reading a lot, and it's helped me over the course of my career. I think I am doing well.

Right now, I spend a lot of time learning new things. I don't suck when it comes to writing code right now, but I'm about to start a family, and I regularly see many seniors with 14-15 years of experience who—because they cut back on learning new things—now suck at programming. They were inspiring figures at some point of time, but they are not anymore.

You might argue that basics never change, but it does appear to make a difference when you are coding on Delphi for 10 years and suddenly everyone is using the .NET framework. It's true that an experienced developer will take less time when learning a new framework, but it still does demand time and effort.

How does a software developer manage the demands of the job while still being able to concentrate on things that necessarily take you out of the job, like starting a family?

11 Answers
11

Something you said stood out: "I regularly see many seniors with an experience of 14-15 years... they now suck at programming". That's a pretty broad brush stroke you are using to paint people with experience. I'd like to point out a couple things to consider:

Younger/less experienced practitioners love to point out how their seniors fail to do X or Y, when they fail to understand that experience has shown that those were bad ideas. Yet each new generation of practitioners seems to want to repeat those mistakes. That phenomenon is common to all professions, not just programming.

Not all people who have been working a number of years are experienced, mature, or good. It takes effort to become better. A lot of effort put in when you are younger builds a good body of experience from which you can draw on later.

Perhaps the people you are referring to were never good. It's just as possible that they are looking at you thinking, why do you insist on doing things the hard way?

It is true, however, that as you start a family you have much less time to keep up with new toys. You actually have less time as your kids get older than you do when they are younger. Toys don't make you a better programmer. Neither do tools. What makes you good is the ability to break down problems and build a working solution. What makes you great is the ability to teach others to be good. That's where experience starts to shine.

Care to elaborate on the downvote? You may not like what I said, but it is true.
–
Berin LoritschMar 29 '11 at 13:50

4

The perception that he has is a big part of his conundrum. All I did was to deal with that perception directly. In short, I'm more concerned with the tool chasing than I am his ability to become a seasoned good developer. He may even become great. That's not going to happen if all his experience tells him is that older developers suck. That's a terrible demotivator to put in the effort to get where he wants to be.
–
Berin LoritschMar 29 '11 at 14:24

1

@Berin Loritsch: That's a fair point. Your intent was good. // In the United States, too many people trip overthemselves to scold others for making a generalization. I took exception to your response because it seemed like you were doing this.
–
Jim G.Mar 29 '11 at 14:37

1

Hopefully, what you'll learn over time is when to invest time in learning new technologies and when to ignore them. Bottom line is that time is a precious resource. When SOAP/XML RPC first came out, it was too early to tell what it really would do. Now with a few years on our belts we've learned some painful lessons, and modified the approach with REST based services. Besides, us old guys need the young guys with boundless energy to figure out what's worth putting time into learning. We might be a little slower to pull the trigger, but it doesn't take long for us to get up to speed.
–
Berin LoritschMar 29 '11 at 14:38

2

@Berin Loritsch: Perhaps I do get it now. In fact, I have seen some seniors (including my current boss) who simply rocks when it comes to problem solving. He doesn't jump with joy when I say you can do X easily using this framework but he isn't afraid to use it when he sees it is actually useful. So perhaps other seniors who are not good, are not good because they never were. Not because they are out of touch because of new technologies. I feel a lot better now. (I hope what I have written makes sense)
–
HemantMar 29 '11 at 15:11

Yes, plus the ability/honesty to know when your available tools/skills are not solving the problem. So you go learn some new stuff and then go back to "ability to solve the problem."
–
Peter RowellMar 29 '11 at 16:12

1

eh... This is a bit vague, and tbh, it's a bit of a copout. If a dev is still perfectly happy "solving problems" in vb6... well, I don't really want to work with their code. Staying current is not predicting the future, requires time/work, and there's less opportunity for it when you've got a family.
–
Steve EversMar 29 '11 at 16:25

I wish I had a positive or concrete thought - but I think how a programmer keeps up to date and balances work/family varies tremendously from programmer to programmer.

Random thoughts:

Not every software project or company needs the absolute latest technology - even in software. The change is most dramatic at the bleeding edge - companies that run slightly behind the bleeding edge often have plenty of opportunities for growth and change, but not the widespread urgent demand for constant change immediately.

The more experienced a programmer gets, the more they should be able to leverage experience in place of the latest/greatest buzzword. I've noticed the people I most admire with 20+ years in the industry have tons of metaphors for how the latest C# thing is the perfect answer to the problem they had in the late 80s with C. By leveraging previous problems and solutions, they bring more understanding to the table with less research.

Every time I've had to rate programmers on the team, ability to get things done and play well with others has trumped the range of technologies that the programmer came to the job with. Although the industry will evolve many, competing, new languages, APIs, and tools, chances are good that the project will only use competitor at a time. But getting things done, and helping others do the same never goes out of style and how it's done evolves much more slowly -- not that IM, social media, smart phones and everything else in the digital age isn't changing that aspect of programming, too.

It can also be interesting to work at a company that runs a bit furthur behind the bleeding edge, say 3-4 years. You can see more clearly the mistakes others have made, and have the advantage of more mature tools and implementations.
–
Michael KMar 29 '11 at 14:28

I agree. I actually work a bit behind the edge myself, and I like knowing that others have batted their heads against it for a bit before I have to try it. :)
–
bethlakshmiMar 29 '11 at 21:11

First, Microsoft is in the business of selling software development tools and platforms upon which to run that software. This incentivizes them to make changes whether they are needed or not. That's not to say all their changes are useless, just that there are a lot of areas in our profession that are much more stable. With experience you are better able to discern which bandwagons are worth jumping on immediately, and which you can wait to mature.

Second, experience just requires time. Most developers with 15 years of experience who are bad now were bad 15 years ago. Don't misattribute to age what can be adequately explained by incompetence.

Third, don't confuse having outdated knowledge with being unable to use the latest and greatest when the need arises. It's usually enough just to know what's out there. For example, until recently my web programming knowledge was vintage late 90's, but when I wanted to build a web site for my brother, I knew enough to check out "newfangled" technologies like CSS, jQuery, and content management systems, and was fairly up to speed in a couple weeks. In other words, if you haven't needed something in the past 10 years, you're unlikely to have an emergency where you wish you were up to speed right now.

Finally, being a parent indeed is a big time commitment, but less time than a lot of childless people seem to think. Parents still manage to read books, watch TV, play games, surf the web, and even take classes on occasion. Shocker, I know. You just do it in smaller portions and make priorities. About the only thing I've given up completely is watching reruns.

I can assure you that people who exhibit poor programming skills after ten to fifteen years never really internalized software development. Mastering a tool set is not the same as mastering the art of software development.

I have been writing code for over thirty years. I have gone through several periods where I had to put my career on autopilot due outside obligations and/or interests. What one has to learn to do as one ages is to avoid jumping on a technology bandwagon early. Most technologies fail to live up to their hype. As an older practitioner with obligations outside of work, one has to be stingy with one's time. An experienced practitioner can afford to wait a couple of years for a new technology to mature because he/she has already mastered the art of software development.

So you don't find it difficult to remain updated with new technologies when they mature?
–
HemantMar 30 '11 at 1:58

1

This industry is cyclical. Most new technologies are little more than repackaged old ideas. If one's fundamentals are strong, one will not have a problem keeping up. Remember, one does not have to be on the cutting edge of technology to earn a decent living as a software engineer.
–
bit-twiddlerMar 30 '11 at 3:36

The range of problems which can be practically solved has grown (somewhat faster);

The size and complexity of the solutions has increased (relatively quickly);

There has been something that is the flavor of the day (sometimes good, often bad).

As noted on a discussion on patterns, the gang of four did not invent patterns. They came up with terminology and templates for solutions which where already being applied.

Unlike many other fields there is still a lot that is not common practice. I have seen lots of cutting edge stuff come and go. Many of these were rephrasing of techniques already in practice, and those usually succeeded to some extent. Others have more or less gone away, and most where new approaches. (Anyone seen a 5th generation language lately?)

The programmers I have seen who are most effective can select and assemble proven components into a working solution. This rarely involves anything cutting edge, which generally would increase the project risk. The ability to build on work that has already been done, allows us to increase the scope of what is possible.

Programming languages tend to fall into relatively few families. Familiarity with one language in a family makes working with similar languages easier. Understanding the libraries available in the language and leveraging them can greatly increase productivity and reliability. In general, I would choose an older language with appropriate libraries over a newer language without appropriate libraries.

When applying new technologies is important to avoid the Because We Can syndrome. Adding a new technology because it is the flavor of the year, tends to cause more problems than it solves. Knowing when the technology will solve a real problem, and when it will just add complexity is a useful skill.

A really good programmer will solve the new problems, and use existing solutions for the rest. Few companies need bleeding edge technology, all need solid solutions.

I usually regret sliding down the razor blade. I don't recall ever regretting using a proven technology. However, a lot of what is described as new is repackaging of something existing. Usually, this repackaging makes things easier to understand and apply appropriately.

No one can keep up with everything. You have probably been pretty busy keeping up with Microsoft offering. Have you looked at Ruby on RAILS and Python and NoSQL databases and Hadoop and mobile app creation and CSS and HTML5 and jQuery and ExtJS and ... ?

I've been in software quite a while. I try to keep up with really new technology, like the new ideas for massively parallel databases, and ignore the ugly (e.g. MFC, WinForms, SOAP, XML, EJBs) and the trivial as much as possible. Mostly we just see great old ideas repackaged and finally adopted. Functional programming? I was using INTERLISP in 1977. Mobile phone apps? It's the same event-driven UI and 2D graphics we've been doing for at least 30 years. Sure, there's an art to designing a usable app for a small touch screen, but the programming is not new at all.

I agree with @Amir that your skill is problem solving not your lanaguage domain, but I do appreciate your concern, so :

If you have the freedom to pick you current lanaguage then pick one that is as close to the first prinicples as possible ( ie a C++ type lanaguage ) so that when you job pushes into a new domain the learning curve is less - since it is just abstractions above you. If you currently invest only in high level languages moving down an abstraction is much harder ( even if only in perception ).

If you dont have that feedom then simply make full use of your 8 hours at work.. if you passion is high you won't get "stuck", and you will always find interesting problems to solve with will naturally lead you to learn more.

It will depend on your job and the jobs you want. There are positions where the developers are still using older technologies. Still lots of COBOL to keep going (I'm sure something has changed.).

Working at a company that does a major switch like you described can put some people out of work. Sometimes the company makes an investment in getting training instead requiring you to learn it on your own time.

Having a family can limit your job choices. Can make you less mobile. Can you go work at a start up for half your salary in hopes of a big payday - maybe not with kids and mortgages.

I'm not in the medical field, but how about an analogy between a developer and a doctor? Both fields have seen tremendous changes in the past 20 years and the pace of change is ever faster. Do all doctors keep up? No. Do all developers keep up? No. Can you make any generalization about developers or doctors with 14-15 years experience? More experience means you have a greater set of answers to similar problems. Does experience trump interest? Not in the long term.

Think like a shark who has to keep swimming or die. Keep learning or die (or move into management, which is where most go as the development career line peaks at about 10-15 years).

I'm not sure about the situation where you live, but in Australia there is a requirement for medical professionals to engage in ongoing education and examination to retain their registration (and hence ability to practice medicine).
–
Sedate AlienMar 30 '11 at 23:36

I have the same concerns in the back of my mind, but my recent thinking on this is to stop trying to predict your own ability to adapt and just adapt. I find that if I assume I can keep up, I usually just do. If I fret about getting outdated, that can make it a self fulfilling prophecy.

As you said, remain on your toes. And if you can't keep up, don't sweat it too much. Technology has a funny way of coming round full circle, and you might find yourself right back in the mainstream performing excellently.