Road to improvement?

Started by
3 comments, last by ApochPiQ 12 years, 6 months ago
This question comes up a lot from beginners, or even competent programmers who want to get to that next level: How can I as a programmer improve?

I've gone through many of the common answers there. I've learned a variety of languages, I've worked in a variety of paradigms, I've worked on hard problems, I've gotten some experience with large systems, and some experience leading teams & mentoring others.

Not to say there's plenty more to learn. I still am weaker on some fundamentals than I'd like, I could use more experience with leadership things, large scale design, and machine interface concepts. And of course there's a ton of libraries that I don't know that would likely provide benefit. But these all seem like relatively little things that I've just missed; things that aren't terribly challenging but simply branches I've not explored.

In the past, I've been along these sort of branches or little incremental improvement and later realized that while useful, they weren't really the big jumps that I got by working on core programming skills and concepts. So I feel like my improvement is a bit stagnated when I look around and only see incremental advancements.

So I expect there's something vital I don't see (or don't consider vital since I don't know enough). Is that the case? Or is there just diminishing returns once you're a fairly skilled developer? Eventually you're just keeping current on technology and honing a specialization?
Advertisement
[color=#1C2837][size=2]Or is there just diminishing returns once you're a fairly skilled developer?
[color=#1C2837][size=2]

[color=#1C2837][size=2]This. It doesn't just apply to developers too, there is a reason why people, even professional people, switch careers so many times in life. When you start out there is so much to learn, but as time goes on the number of "eureka" moments are going to be less and less common. It becomes less about discovery and more about refinement and eventually even that can turn into a general sense of malaise. This is doubly true once you have been doing something long enough you see the cyclical nature in all of it.
[color=#1C2837][size=2]

[color=#1C2837][size=2]As you said, there is always tons more to learn, but the pay-off isn't going to be nearly as substantial.
[color=#1C2837][size=2]

[color=#1C2837][size=2]One thing I have gotten a great deal of enjoyment out of is teaching; it actually makes you revisit things that had long since become completely mundane to you. Looking back at prior knowledge through a new lens is actually a very interesting experience and teaching highly technical subjects in human processable English is actually very refinable skill, that is quite lacking in most of the programmer population. That said, when I worked in a corporate environment I enjoyed mentoring more than any aspect of my job, which included project design my previous favourite task. By your knowledge and output here, I assume you rather enjoy the same thing, perhaps consider writing a book?
[color=#1C2837][size=2]

[color=#1C2837][size=2]Otherwise I would suggest a career change. I did a start-up once I burned out of corporate IT and it was very much a matter of right place, right time ( plus I got to have a heavy hand in raising my newborn child, which was an awesome perk ), but it made me approach tech in a much different way. Downside is, it's extremely lonely. Going from managing a team of 10 to being mostly just me, that was a bit of a shock to the system ( and drove me online more ). If I hadn't gone the route I did, I would have probably tried changing professions or getting my MBA, but the reality is, most other careers didn't really appeal to me ( or the money really sucked ), so you may be in the same boat.
[color=#1C2837][size=2]

[color=#1C2837][size=2]Had I done none of these things, I might have considered language design as my next step, I think by writing my own language it would be that last huge "EUREKA!" moment, but I never got to it and frankly these days I just don't care enough.
[color=#1C2837][size=2]

[color=#1C2837][size=2]So my summary of suggestions, teach, write a book, change professions or write a compiler or OS.
[color="#1c2837"]

[color="#1c2837"]Finally, again, yes, it very much is a diminishing return.

Otherwise I would suggest a career change.
[/quote]

To be clear, I'm actually super happy with my career and programming in general. I'm not really burnt out or saddened that there's less eureka moments. I'm more worried that the lack of eureka moments is a 'learning smell' (for lack of a better term). When I was younger, that was a warning sign and I didn't ask (or listen) to better programmers' advice about what might be a better approach.
The knowledge gaining plateaus alright, but about a month ago I started some add-on work on our new client product and let me say that it is a real long hard struggle for a change. I'm learning or at least getting deeper into so many new things at the same time: MEF, LINQ, XAML, MVP, OPCUA, Asychronous programming, very heavy use of Lambdas, the Reactive framework, and even tuning my rusty C# knowledge. The hardest part is that all the debugging techniques I've ever learnt fall short of being able to debug this stuff. Frankly I'd far rather be programming in Prolog or assembly.

After you think it has all become easy, life sometimes throws a real curveball at you!
"In order to understand recursion, you must first understand recursion."
My website dedicated to sorting algorithms
Two important points:

  • You can't learn what you don't know you don't know
  • You can't learn something until you almost already know it


There's a huge breadth of knowledge out there, and you're never going to even know how much there is - and, by extension, how little of it you know. This isn't necessarily a tragedy; it just means you have to look beyond a narrow field to find new things to learn. The best way I've found to learn new things is to go dive head-first into an area that I've never even considered before: electronics is my current muse. Pick something unrelated to software, or computing, or whatever else, and go do that for a while. Explore until you get bored or discover something that is stimulating enough to continue exploring. In short: the best way to improve your skills in Area X is to learn about other areas of life entirely. Cross-discipline applicability is rampant in today's over-specialized world, and chances are you'll find something nifty just by looking beyond your field for a while.

Secondly: you're not going to realize you're learning things until you're on the cusp of discovery. This is something that took me many years to get into my head, and I've started enjoying the learning process vastly more for having figured it out. It takes practice to learn to recognize when you're up against something you don't already know; sure, some things are obvious (I'm pretty sure I don't know how to speak French) but others are much more subtle and tricky, especially when you're deep into a field of expertise to begin with. You have to hone that instinct that says "aha, there's something to improve on in my skill set over here." For me personally, that instinct is dangerously close in sensation to the one that says "blech, this is terrible code." I know of others whose "I need to learn that" instinct is only motivated by extrinsic rewards; they don't realize there's something to learn until they're offered a material reward for learning it. It all depends on the person.


The combination of these things can lead to feeling stagnant very easily. Just remember, the biggest leaps forward come after the longest plateaus. Think of it as warming up for the jump: you have to spend time consciously not knowing about something before you'll be able to experience that surge forwards.

Wielder of the Sacred Wands
[Work - ArenaNet] [Epoch Language] [Scribblings]

This topic is closed to new replies.

Advertisement