Skip to main content

Becoming a Better Developer on Purpose

I’ve become a much better developer than I was when I began working professionally a decade ago. I feel confident enough in my abilities to recognize that I have improved the breadth of my skill set and the depth of understanding I’ve built in the areas I have poured the most focus into over the last few years, especially. One of my strongest, most developed abilities is the ability to recognize and pick apart my own skills critically. I feel good that I can say this is not Impostor Syndrome, something that has certainly afflicted my professional career for most of the years I’ve been at this. What this is, rather than irrational undervaluing of my skills, is finally getting to the point that I realize I’ve spent years getting better passively and accidentally, and I need to develop my skills into the future actively and intentionally.
So to start this new focus on developing my skills, I’m writing this as a starting point, an exploration, and an invitation to anyone who identifies with the intent.
I can characterize the path I took from fledgling to, I believe, experienced developer as passive with more accuracy than any other single word. Passively developed skill happens when you absorb through experience, colleagues, and material that comes your way without specific and focused intent on what you’re getting better at. I’m better today than I was ten years ago, largely, because it is nearly impossible to do what I do for this many years without learning something. I can say with confidence that I’m a much better developer today, but I cannot say that I had much of a hand in that.
The past ten years of experience were littered with an almost obsessive absorption of material from the wider programming community. I’ve dozens of programming texts, listened to many podcasts, and read what must be thousands and thousands of blog posts that simply drifted my way through feeds and social media. With such a huge amount of material I’ve sifted through over the years it is inevitable to accept a distressing outcome: the majority of programming material I’ve consumed has been completely forgotten. There might be a book or two I still remember and can recommend, and I can recall and find you a link to maybe ten blog posts that actually stick out in memory. There are probably hundreds of posts I’ve read from which I’ve integrated some information from. I am sure I’ve learned from this flood of programming material, but I can’t say the ratio is very impressive. To be honest, I can’t say the pay off for the time and effort I put into finding, tracking, and consuming all the fascinating things I’d like to learn.
This has also been one of the most useful ways I’ve randomly come across ideas and technologies that have changed the course of my interests and even my career. I’m distressed over this for two reasons. First, I’m pretty sure that I can trace many of the major turning points in my career to things I came across entirely by accident. Second, there has been awful lot of equally fascinating things I’ve encountered and dived into that, today, do not really have any value to me as a developer. With a lack of direction I have wasted an immeasurable time on interesting development topics that I’ve walked away from with nothing of value. This isn’t something I can allow to continue. I don’t have the time or energy to continue being so ineffective with my self-improvement as a developer.
My new effort is to both spend less time and get more out of my self-improvement as a developer. I don’t want to rely on stumbling across the important things I need to learn and I don’t want to coast through self-improvement as a by-product of habit and the ingrained interest in the newest and greatest developments in the field. Instead, I want to be an active participant in my own self improvement. I want to rely on actively made plans and goals rather than passive habits. This means reading less random posts shared on Twitter and found on RSS feeds, and more structured learning and practice.
Active self-improvement has to replace the casual accidents of discovery.My hope is to replace what is moved me along at a casual pace with setting goals to learn things intentionally and making hard choices about not only the next topic, but precisely what I want to get out of it.
I’m not sure, yet, exactly what form this change in focus will have. I expect I’ll need to figure that on the way, and see what works and see what slows me down. I know my more immediate intentional improvements will be expanding my knowledge and experience with the wider ReactJS ecosystem, but soon it will go beyond that to other endeavors.
The thing I can say with confidence is that I expect to feel better about the progress I make in the next year than i do about the progress I’ve made in the past ten.

Comments

Albert said…
This was a good read, although admittedly I found it from a "random" RSS feed. Anyway good luck with your journey.

Popular posts from this blog

CARDIAC: The Cardboard Computer

I am just so excited about this. CARDIAC. The Cardboard Computer. How cool is that? This piece of history is amazing and better than that: it is extremely accessible. This fantastic design was built in 1969 by David Hagelbarger at Bell Labs to explain what computers were to those who would otherwise have no exposure to them. Miraculously, the CARDIAC (CARDboard Interactive Aid to Computation) was able to actually function as a slow and rudimentary computer.  One of the most fascinating aspects of this gem is that at the time of its publication the scope it was able to demonstrate was actually useful in explaining what a computer was. Could you imagine trying to explain computers today with anything close to the CARDIAC? It had 100 memory locations and only ten instructions. The memory held signed 3-digit numbers (-999 through 999) and instructions could be encoded such that the first digit was the instruction and the second two digits were the address of memory to operat...

Statement Functions

At a small suggestion in #python, I wrote up a simple module that allows the use of many python statements in places requiring statements. This post serves as the announcement and documentation. You can find the release here . The pattern is the statement's keyword appended with a single underscore, so the first, of course, is print_. The example writes 'some+text' to an IOString for a URL query string. This mostly follows what it seems the print function will be in py3k. print_("some", "text", outfile=query_iostring, sep="+", end="") An obvious second choice was to wrap if statements. They take a condition value, and expect a truth value or callback an an optional else value or callback. Values and callbacks are named if_true, cb_true, if_false, and cb_false. if_(raw_input("Continue?")=="Y", cb_true=play_game, cb_false=quit) Of course, often your else might be an error case, so raising an exception could be useful...

How To Teach Software Development

How To Teach Software Development Introduction Developers Quality Control Motivation Execution Businesses Students Schools Education is broken. Education about software development is even more broken. It is a sad observation of the industry from my eyes. I come to see good developers from what should be great educations as survivors, more than anything. Do they get a headstart from their education or do they overcome it? This is the first part in a series on software education. I want to open a discussion here. Please comment if you have thoughts. Blog about it, yourself. Write about how you disagree with me. Write more if you don't. We have a troubled industry. We care enough to do something about it. We hark on the bad developers the way people used to point at freak shows, but we only hurt ourselves but not improving the situation. We have to deal with their bad code. We are the twenty percent and we can't talk to the eighty percent, by definition, so we need to impro...