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...

Announcing Feet, a Python Runner

I've been working on a problem that's bugged me for about as long as I've used Python and I want to announce my stab at a solution, finally! I've been working on the problem of "How do i get this little thing I made to my friend so they can try it out?" Python is great. Python is especially a great language to get started in, when you don't know a lot about software development, and probably don't even know a lot about computers in general. Yes, Python has a lot of options for tackling some of these distribution problems for games and apps. Py2EXE was an early option, PyInstaller is very popular now, and PyOxide is an interesting recent entry. These can be great options, but they didn't fit the kind of use case and experience that made sense to me. I'd never really been about to put my finger on it, until earlier this year: Python needs LÖVE . LÖVE, also known as "Love 2D", is a game engine that makes it super easy to build ...