Welcome to the latest entry in the Self-Taught Developer's Survival Guide! This entry was heavily delayed by a surprise bout with the flu, but it's finally live! Today, I'm going to discuss some of the attributes that are common to successful developers. Something to keep in mind: this is not an exhaustive list, and you don't have to be born with these qualities in full bloom, you can get better at all of these! I'm also excluding "soft" interpersonal skills here, and will touch upon these at a later date. So without further ado, let's dive in!
Software is a means to an end, and that end is the specific problem it's designed to solve. Take Uber or Lyft as a example; the problem they address are the inconveniences that came with traditional taxi service. It's not that those apps are technologically innovative the same way that something like Google's PageRank algorithm was, but that they are ideally placed to provide a technological solution to the problem of getting around.
Because of this, problem solving is one of the most important "hard" skills a developer can have. Once you are comfortable with the basics of a language, you can hone algorithmic problem solving skills on sites like Codewars or HackerRack.
There are also plenty of great blog entries like this one that discuss approaching software engineering problems.
Coding is a discipline that will test your patience and your willpower at many points in time. Learning how to code is hard, especially when you're getting to know your first full language. Web development moves quickly, and you'll need to keep current. Writing programs and hunting down bugs is mentally taxing. Searching for your first job will likely be a long process that will test your resolve. All of the above is why tenacity is a quality you'll want to have in spades. Keep in mind that there will be times when walking away from something temporarily (when you are stuck on a problem or debugging) or dropping something entirely (Learning a framework or technology that isn't clicking for you) will be the right thing to do, but not giving up is one of the most useful qualities you can cultivate. Getting and giving support can help strengthen your resolve, so definitely avail yourself of resources like the You Got This! section of the freeCodeCamp forum.
They say that God is in the details, and that is definitely true with development. You have many things to weigh when developing (such as the need for authentication or authorization, design, architecture, ......I can go on and on here), and getting programs to run involves spelling variables correctly, not forgetting to add semi-colons or closing brackets, etc. There are ways to make dumb mistakes a lot less likely (particularly linting), but when you develop an eye for mistakes, you will make them somewhat less frequently, and resolve bugs much quicker.
When it comes to learning and mastering new skills, devs with the attributes of curiosity and initiative will do a lot better with their peers who don't exercise these. The reason for that is that much of real learning comes from experimentation, as opposed to being walked through something step by step. Digging through documentation and trying to break something or make something work in a non-standard way might sometimes be a more frustrating or uncomfortable way to learn, but you WILL learn faster.
I've previously mentioned learning and the fast pace of development tools several times here, and it's that fast pace that makes the ability to learn new things quickly a must-have skill for developers. I wasn't great at learning when I started learning web development, but I'm a lot better at it now. For a good overview of this topic, I recommend listening to the Syntax.fm episode about learning quickly, and John Sonmez's Soft Skills book, which has a chapter which details a formal approach to learning new technologies.
Coming in two weeks: An overview of popular online learning resources for self-taught developers!