Originally posted at Jump Start Blog
I worked as a software developer using only Java tech stack for over five years. And I'm pretty comfortable with any Java code. I started playing out with JavaScript, namely node.js, just recently. JS is similar in many ways to Java but it's different. As Java dev, I've seen JS as quite a dirty front-end tool. Using node made me appreciate the language and shift my thinking processes. And the more I used it the more fun I had. And now I'm using MEAN stack at work. And it's soooo exciting :D
I wasn't comfortable with using node at first. It made me anxious. I struggled with expressing my thoughts properly in JS. I wasn't sure if the code I wrote follows good practices or any architectural standards. It was outside my comfort zone.
And you also have one. A comfort zone.
The comfort zone
The comfort zone in a place where you feel safe. Comfortable. It's where many people operate.Â
Everyday activities that you’re used to or that don’t make you feel anxious and uneasy are part of your comfort zone. It’s the location of the skills and abilities you’ve acquired. You're pretty productive in your comfort zone.
So why should you step out of your comfort zone?
You're safe. You're productive. You don't feel anxious or stressed out.
But then you're bored. You don't feel challenged. You can’t make progress or build skills in the comfort zone since it consists of the abilities we can already do easily. It's a stagnation.
And as a software developer, if you're not moving forward it means you're already moving backward.
The biggest benefit of stepping out of your comfort zone is your personal growth. When you decide on a task that's outside of your comfort zone and then complete it, your confidence will grow. You'll feel accomplished.
Outside of comfort zone
Just outside the comfort zone is a learning zone. The skills and abilities in the learning zone are barely out of reach. They’re neither so far away that you panic nor close enough to be too easy.
Since a person can only make progress by choosing activities in the learning zone, it’s important to be able to find your learning zone. The learning zone may be wide for some and thin for the others. But as you start to challenge yourself you begin to extend that zone.
How to know you're moving forward
If you don't know where your learning zone is, try testing yourself. If the task at hand is challenging enough to have you engaged (and not bored), but not hard enough to discourage it means you're in the learning zone.
Here are some examples of some task you can try to challenge yourself (bigger and smaller):
- learn another IDE (try Visual Studio Code or IntelliJ if you're using Eclipse)
- use different OS (for example try Linux when you're used to Windows, or Fedora when you're used to Debian based OS and don't feel like working on Windows)
- use command line instead o the user interface
- use vim instead of notepad/scratch
- learn a different programming language (like JS when you're using Java)
- learn a programming language that uses different programming philosophy (for example if you're used to object oriented languages try something functional: Clojure when you're programming in Java, C# & Objective-C)
- if you read only technical books try reading some fiction (really)
Don't get yourself into panic zone
Outside of a learning zone is a panic zone. Like the comfort zone, you can’t make progress in the panic zone. Activities in the panic zone are so tough that you don’t know how to approach them. Instead, you become so anxious you can no longer think. Or you're uncomfortable and possibly discouraged.
For example, if you only used object oriented Java over your entire programming life and have no idea how to approach Haskell try learning .net first. Or try using lambdas and learn functional programming in Java.
Stay in the learning zone
As you operate in the learning zone, you will get more comfortable with the current skills and they’ll start to move into the comfort zone. As this happens, tasks that were once a part of the panic zone will move into the learning zone and the cycle will continue.
Good luck in your learning endeavors!
Top comments (18)
Thinking in terms of skillset breadth only makes sense if you see yourself as 'solving Java problems', 'solving Node problems', etc. I just see my myself as solving (ever more complex) (business) problems, most frequently with Java.
To put it another another way: programming languages are just tools. A small amount of experience with lots of tools isn't necessarily better than a lot of experience with one tool, all else being equal. This also somewhat relates to what they say about having 10 years' experience versus having 10x one year's experience.
Programmers love uncomfortable zones. Companies love comfortable zones. We should take seriously the need for learning if we like to have a job in 2023. We programmers tend to overestimate the need for fun and new stuff.
Some of us, particularly those with mortgage, car and health bills for a handful of dependents, along with ungodly amounts of midnight poop and vomit cleanups behind us, just don't have the time to get out of comfort zones anymore by eagerly rubbing our hands together with glee at 1AM while navigating to the reference website for Node JS... after firing the software developer's proverbial starting gun, the sound of cracking open that heavenly can of diet coke. To be more accurate, I don't think such folks, as myself, actually have or remember what comfort zones are anymore. I have to force myself to learn what's new(er) by shoehorning it into my every day work. My position description is one of a software developer. But, by the nature of my workplace, I do devops stuff on a fairly regular basis. I have to script. But I've been forcing myself to stop using bash so much, and, oh God forgive for admitting it, Perl, when I just need to wade through some log or other data file. Instead, I forced myself to learn Python, instead of at 1 AM, on an as-needed basis. I think I hate Python as much as I eventually learned to hate the Medusa-like ugliness of Perl. But hey, it's what all the cool kids use and, you know what? Getting Python to interact with the likes of databases and networks, among other things, is just a dream compared to Perl, let alone CLI binaries + bash. The moral of my addition to your story is, even if it seems like you don't have the cycles to break out of your comfort zone, it will be worth it, and more than just for the sake of some existential exercise. Imagine the joy of adding yet another buzzword to your resume!
It's about getting better, not about running after every hype.
Or imagine all those ugly things getting faster as you can deal with them faster after a little bit of a hurdle.
Good post, it gets a conversation going!!
Continuing to learn is never a bad thing. I spend a lot of time exploring new technology. I like Python and NoSQL. The POC's always seem so clean and elegant compared to the final product.
But it takes more than a 'bit of a hurdle' to get good enough at something. I have been involved with a number of projects where someone knew something about a new technology. In the end, the promise of faster and better is just that.
I work with folks who are all in for going to the cloud(AWS in this case). For me, studying for the certification exams was a process (excuse) to learn. A new DynamoDB project falls over after a few months and folks wonder why its just NoSQL after all! In the end, they blame the technology and find something new. In fact, it was their lack of knowledge that doomed the project.
The work of software development is difficult, get over it. No new process, framework or methodology is going to make life unicorns and rainbows.
Jason Gabler: I feel your Perl pain...even after years of therapy
It's a good advice. Besides my web dev skills, one day out of the blue I started learning R, it was really fun experience with some enjoyable challenges. This is all good, however, one must not get too adventurous in all sorts of different tech. There are simply too many things to learn now a days and all are interesting.
So overtime if I find something very interesting, that I don't have enough time to explore, I readily save it to my Read Later list. To comfort myself, I literally have the following note pinned on top of my Read Later list:
I've definitely felt in my learning zone when working with Ember and Rails as of late. It's a mix of challenges I've never faced before and knowing I can almost always overcome them once I do enough research and a little trial-and-error. That's where all the magic happens!
To me, the most difficult thing is to find the sweet learning spot. Challenged to a point where I can learn, but not too much where I’m only guessing.
I've been for 4 years in the same company doing basically the same thing, and he felt an anxiety that did not know of where it was, and also was afraid to leave the company, some events have made me open my eyes and realize that what hurt me was the comfort zone that I found myself, I took courage and go out from there to work in a more challenging place, I feel anxious yet, but a "good" anxiety, why when I can make things work, I feel very good and confident. Thanks for sharing this
Good advice and good read!
But also:
Nice read it's about all days challenge for a software engineer, we have to challenge ourselves even when we are in our confort zone by reviewing code quality .
Or by adding new tools/scripts/frameworks etc. that will help us be more effective in the future ;)
Oh that panic zone, been there and you are totally right, it's needed to step out of there in order to continue learning and enjoying.
Awesome article Aga, thanks for sharing!