Lately I’ve been making lists of ideas. These ideas can be about anything. My target this week has been to create a list of ten ideas around a central theme every day. Today, I made a list of ten ways to become a better software developer. I will present the list with a brief summary of ways to go about each item, or why to do it. At some point I might have to explore some of the items further in dedicated posts.
Ten Ways to Become a Better Software Developer
Learn a New Language
The book, Pragmatic Programmer, says to learn a new programming language every year. This is great advice. Learning new types of programming languages that are built on entirely different ideas, like learning a functional language (i.e. lisp) when you only know object-oriented ones (C#, Java, etc.), helps to greatly expand problem solving ability. Learning a new language can also help reframe your perspective on the languages you already know.
Read Source Code
Everyone has an idea for a small product or tool that will make their life easier. Block out some time and implement a piece of software that solves the problem. Building things will force you to learn enough to create a working piece of software. In addition to improving your skills, when it’s complete you’ll have something to scratch your own itch. This is a true win-win situation.
Take a Course
The internet is full of high-quality learning material. Coursera, EdX, Udacity, Codecademy, and Pluralsight are among the sites I’ve used to learn new material or reinforce concepts. It’s amazing how many courses learners have to choose from these days.
Read About Software/CS Ideas
Books, blogs, and question and answer sites are all wonderful sources to glean new techniques to enhance your skills. Read about a subject you’re curious about. There are resources for any sub-subject imaginable. You can read about something practical like Clean Code or something a little less practical, like The Little Schemer. In either case, the reading would be time well spent.
There’s always people around who want to learn something you know! Share your knowledge. Help out a coworker, friend, or anyone else who is interested in learning how to make software. You can also answer questions on sites like StackOverflow or Quora. Giving back to the community is a great way to improve the software development community.
Contribute to an Open Source Project
Find a project you’re interested in and contribute to it. Some projects are more open to new contributors than others. Definitely research the project you are wanting to contibute to before you get too deep into the changes. Make sure that the maintainers are open to your contibutions. You can also create your own open source project, maybe it’ll be the next big thing.
Record Your Ideas
Write about the ideas you have. These ideas can be kept privately or shared in a blog. Recording your insights can really improve your thought process and help clarify ideas that need further examination before solidifying.
Solve interview problems, work through problems in textbooks, or create your own problems to practice programming. There are so many ways to practice programming. Websites like HackerRank and Topcoder offer up programming challenges and have interactive leader boards. Solving any problem that requires you to think can be effective practice.
Gratitude is a powerful tool, one not normally associated with software development skills. Through practicing gratitude, all of our skills are amplified and we generally become happier. Developing gratitude can impact every part of your life.
There are so many ways to get better at software development. This is just a simple list I put together in a few minutes, largely centered around techniques I’ve used or have read about. Everyone’s path to greatness is a little bit different. Some of these techniques will resonate with you more than others, find whatever works for you. The important thing is build skill consistantly, regardless of how the skills are built. What are some of the methods you’re using to improve your software development skills?