Skip to content

Instantly share code, notes, and snippets.

@Gowiem
Last active June 20, 2017 03:07
Show Gist options
  • Save Gowiem/27e20bbfb62dcbaff19130978be9f235 to your computer and use it in GitHub Desktop.
Save Gowiem/27e20bbfb62dcbaff19130978be9f235 to your computer and use it in GitHub Desktop.

Leveling up as a Software Engineer

Intro

I was recently having a conversation with a good buddy and former co-worker of mine about a side project that would be good for him to work on so he can improve his software dev skills. This got me thinking about the handful of folks I have mentored or helped with engineering work over my career. I figure it'd be good for myself and others to try to distill some of the lessons that I've tried to teach folks into a post to help those who are new to the software development career path. We'll cover some cool stuff like finding a mentor, involvement in the community, side projects, what to read, and soft skills.

Finding a Mentor

One of the best ways to grow as a programmer is by attaching yourself to someone who knows vastly more than you do. There is no substitute for pair programming with or getting a solid code review from a senior engineer. Doing this allows you to tap into the way that they think about solving problems, understand their opinions, and watch their programming workflow. These are the things you want to absorb into your own routines as these aspects are critical to getting the job at hand done.

I'm sure a lot of folks reading this are probably thinking "Well of course I need a mentor. That'd be great. But I don't know where I can find one." That's totally valid as it is hard task to accomplish depending on your situation, so let's talk finding a mentor.

First, I'll say that the mentor mentee relationship doesn't need to be an explicit, signed document that says "So-and-so will mentor me for a period of six months and nothing more". It can and likely will be just an informal relationship that you have with someone you interact with regularly. It's as simple as you asking them questions about code or problems you're struggling with, getting back their opinions or answers, and then you growing for the next time.

Secondly, there are a lot of places you can look to find a mentor. Here is a quick list:

  1. A co-worker. This is the most likely scenario. Someone working on the same codebase as you or at the same company that you are is your best bet for being your mentor. They should want your code to be better because it'll make their lives easier or the company better as a whole. Ask someone. It won't hurt.

  2. A friend. You've got that buddy you know who graduated a few years before you did, knows all the ins and outs of X framework, and is working at that rad company. Ask she/he if they would look at your side project or want to work on a project together so you can learn from them.

  3. Online. There are a few services out there that offer to pair you up with a mentor who you check in with regularly. This costs money, so it may not be for everyone, but it's a good route to go if you want an explicit mentorship. Some websites which offer this service are bloc.io and Codementor.io.

Involvement in the tech Community

Getting involved in discussions about tech and asking questions to the community is key to growth as an engineer. This is where you'll learn important best practices, find help debugging that awful bug that is stumping you, and grow your network. Here are the best places to jump in:

  1. Join a Slack community. There is a Slack community for everything nowadays. Almost all languages, most frameworks, and general things like code cleanliness have a Slack channel. Join one. Talk with people. Ask questions.

  2. Jump on Twitter. You might not be interested in tweeting, but joining twitter just to follow folks in your specific area of tech is a smart move. Got a favorite open source library that you work with everyday? Follow the person or team who wrote it. They'll likely be tweeting interesting conversations that will help you grow with that particular library or language.

  3. Meetups. There are tons of meetups and talks going on about software dev in every city around the globe. This is where folks from all levels of experience get to meet and learn from one another. Go to these events for your particular corner of software, grab a beer, and talk with people. You'll definitely learn something new and you'll probably have fun.

Reading

Reading and growing your knowledge of your field is another important aspect to leveling up. Got time on the bus ride to work or have trouble falling asleep? Don't keep playing Clash Royale during that time. Pick up a book or read that blog post by Jeff Atwood that's been on your todo list.

My suggestion is to read broad first. Books that cover software development generally like "Clean Code by Uncle Bob" are great because the lessons they teach you will apply even if you have to pick up $NEW_LANGUAGE_X 6 months from now. If you've read enough of those then start reading about your language or framework of choice. Always be reading the blogs of the folks who are at the cutting edge of the technologies you're working on.

Side Projects

The only thing I have to say about side projects is that you should have one. At least one per year that you actually ship (the hard part) at a minimum. If it doesn't get finished then it doesn't count. This is where all the knowledge you've acquired from reading, talking with the community, and getting feedback from your mentor really gets used in a way that you can show off. You're not going to be able to bring that elegant bit of functional code with you from your job and show it on your GitHub, so having some public repos to show off is important in letting others know you know what you're talking about.

Soft Skills

Lastly, but probably most important is your soft skills. Working with others within and outside of your team is really crucial to being a good engineer. You can write the cleanest, most beautiful code in the world and yet if nobody wants to work with you it doesn't matter. You won't have a good time in your career and the folks around you won't either. My suggestion on this is to always be looking for feedback. Have a manager? Ask them how you could interact with your team better. Tell them that you want that as feedback during your review. You freelance? When you're wrapping up work for a client, ask them how your communication could have gone better or if anything bugged them about your process. These are hard conversations to have a lot of the time, but they'll pay off in the long run.

Wrapping Up

Software Development is hard. You have a constant need to ship, to be learning something new, and react to the fast pace of the industry. But having a positive mindset and following the suggestions laid out above will help you grow and stay sane. Know that this growth takes time, but you'll get there. Good luck on the journey!

Did I miss something? Feel free to ping me at matt@masterpoint.io and we can discuss!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment