6 areas to improve as a developer
I love learning new stuff. There are tons of things I’d like to read, understand and remember. I’m sure such attitude helps me to constantly improve myself and grow professionally. A lot of developers share my point of view, and these who don’t, probably should.
I created a list of 6 areas that I personally need to constantly improve. If you find yourself lacking even basic knowledge in any of them, I strongly recommend taking some time to fill the gaps. Some of them relate to fundamentals, while the others are hot and trendy. All of them are important in their own ways.
The first and most obvious, but not necessarily the most important, and for sure not the only one to learn. We all work with technology, and we’d better know something about it.
Programming languages are often considered the core of every developer. You know, when the first thing they ask you is “What language do you program?” You definitely need to learn programming languages. The Pragmatic Programmer book suggests that you learn one new language every year. Martin Fowler wrote about it as well. Besides just learning languages, you should be familiar with the ones you don’t need to use right now. If you used Objective C for iOS development, but didn’t bother to explore the more recent things, you’d probably be in a much worse place right now than you are (as an iOS developer that cares about herself). Never used go, but need to develop a small microservice with great performance? That’s great that you heard all these good things about it, now you won’t use PHP like your colleagues suggest.
Databases and data technologies
A lot of code deals with data manipulation. You should know where and how can it be stored, and why to prefer one technology over another. You don’t have to master any of them unless you really do; it’s enough to be familiar with them to some level. You should know that there are SQL and NoSQL databases, in memory storage and storage like AWS S3 or Microsoft Azure storage. There is more to that, just keep digging. You’ll read about memcached and will save your start-up money when they’ll want to double the size of your DB cluster to handle the load instead of just having a cache layer above it.
Libraries and frameworks
You have to be familiar with popular frameworks and libraries that exist in your field of expertise. If you are a web developer, you have to know that frameworks like express, django or revel exist. If you are an Android developer, you might want to at least once see the names like glide and retrofit. Don’t get me wrong; you don’t need to become a guru at these or other libraries. You don’t even have to use them at all. But you’d better know their names and have a basic idea of what they do, how do they compare to others and what are the main points that are raised in related discussions. You’ll need that knowledge when your colleague suggests using something that you know for sure sucks. Or when you’ll have to choose between vue and angular for your next project.
Security and privacy
(Almost) All software has to deal with security and privacy issues. Again, you don’t have to be the best security specialist if you are not supposed to be one. You don’t want to store your users' passwords in plain text, no matter how much you don’t care about security. You probably won’t be happy to find out that your users' data was leaked from an unprotected API endpoint. Your code can be vulnerable even if it is not web based. There is more to that than attacks. What about scrapers? Tracking?
If you are dealing with the citizens of EU, you’d like to hear about GDPR long before May, 2018. Your business might depend on that. As for security, you may want to follow owasp recommendations to build safer software. These are only two examples that I personally met recently. There is much more. You should always keep it in mind and use every opportunity to learn something new about security or privacy.
Patterns and concepts
I couldn’t build anything usable without having some fundamentals. I had to know a little OOP to write Android applications in Java. I needed to grasp testing and TDD to build testable, and therefore better software. A lot of people talk about functional programming, so maybe it’s a good idea for you to become more comfortable with it? You should look for concepts that are discussed with no particular tech/language attached.
It doesn’t matter what you develop, it’s pretty likely that patterns like producer/consumer will come handy some time. Such patterns remain the same, although their implementation changes depending on a language. Just like concurrency and parallelism: these are just ideas that are conceptually the same, and yet different if you use them in node.js or go. For any technology that you work on, it’s nice to remember that floating point operations are hard. Look for tech agnostic knowledge just like these few examples. It’s extremely helpful.
Tools and skills
Just as patterns and concepts, your skills stay with you no matter what your project is. Just like the tools that you use daily. Touch typing, for example. If you type fast and easy, it doesn’t matter if you are a freelance front-end or a game developer. I would say that this is definitely the number one skill that you should master. It’s also pretty important to do it right, turns out there are rules.
Even if you are super fast at touch typing, you can get a lot faster and more efficient. Just get to know the editor or IDE that you use. There usually are many shortcuts to automate common tasks. There are features that make development a lot easier. Print yourself a cheatsheet of commands that you could use.
Get out of your comfort zone. Learn a new editor. I recently decided that I wanted to be fluent in vim. Now I’m writing this post in it, and it feels great to finally be able to use it.:w
Learn the OS you are working with. Learn shell commands, get some productivity software, if you like. Try to become as effective at your routine as possible. Save the time and energy for the real challenges.
Do yourself a favor: learn git. Learn how to use it properly. Get comfortable with git CLI. Many developers have pretty basic git knowledge. You can easily become the one that your colleagues call for help when they mess up. Read about git workflows. This thing will be your friend no matter what your specialization will be. This is something that you need for any job.
Learn about continuous integration. It’s something that modern companies do. Understand why it matters. When your build fails on something that you think is not important (code style?), fix it and be thankful that something else noticed your mistakes, if you don’t have enough self-discipline.
These tools and skills will remain with you at every job. They are widely used across different industries. Keep looking for tools that make you more productive, I gave just a few examples.
Moving away from technology, there is another important thing you should bring as close to perfection as you could: your style. The way you write code and build projects. Something that makes your code more than just text that makes your program work. A thing that improves your work aesthetically. I strongly recommend reading this book to understand while style matters.
I think that code has to look good. It needs to be clear, well formatted. Consistent. It should read like a book. Becoming good at it takes a lot of discipline, and it’s easier if you have someone who could make sure you follow the right way via code reviews.
You want your homework for your next interview look good, not only correct. And if you become used to the right way of writing code, you’ll be able to concentrate of that correctness and efficiency. Better start now.
And now to the main important part: community. This is what is going to make you better at all that stuff that I mentioned before. You’ll learn a lot of the things you need to succeed from the community.
Create an account on stackoverflow, if you don’t have one already. Visit it regularly, read through popular questions, read through some new ones. Add some tags to your favorites. When the time comes, you’ll start seeing questions that you can answer. So answer them. If you have a question yourself, ask it after you’ve tried every other option of finding an answer yourself.
Create an account on reddit. Follow the subreddits that you find interesting. Reddit has tons of content, and some of it is very good. One of the reasons I think reddit will help your improvement is the discussions that are sometimes started. If the content that was posted is not very good, somebody will point that out. If it is falsy, somebody will notice it. You’ll see different points of view regarding many topics, and you’ll be able to use these points of view later.
Read tech blogs. Follow the major industry players' blogs. At minimum, you’ll see the headlines of their posts like Announcing Go Support for AWS Lambda. You don’t have to read the whole post to get an idea of what’s going on. Sometime later you’ll remember this headline at the right time in the right place.
Try contributing to open source projects. I know everyone is suggesting that, and I know that it might be extremely hard to start. I personally started working on an open source project only recently.
For me, being an active member of the community is a thing that helped me the most recently. I think you should try too. Community is going to help you be better in all five areas that I mentioned before. You will find community-approved resources to learn new languages and technologies, you’ll lean which solutions does the world have to offer for some of the common problems. You’ll eventually read a post or two about security, and learn on others' mistakes. You’ll learn that privacy matters, and see how other members of the community solve the issues for themselves. You’ll read through the discussions of different technologies, and see that there are some things that are being repeated again and again (like DRY). You’ll find some cool examples of peoples' vimrc files. All of this you’ll be able to learn for free. You’ll get inspiration to build new things and advice on next things to learn. As I see it, you’ll grow professionally, and hopefully hep others grow.