The latter part of 2014 wasn't so great for me, but it did give me the motivation to pursue something that I always wanted to do. In hindsight, quitting my job and dropping out of college to dedicate myself to web development seems crazy and risky - and it admittedly was - but it was one of the smartest moves I've ever made. January of 2015 I sent out some e-mails to some web design companies in my area, a few days later I met with Create the Bridge, and a week after that I started my internship.
That was a year ago now, and I've since moved up the ranks from intern, to paid intern, to getting hired as a full-time full-stack junior developer. To say that I've learned a lot in a short amount of time is an understatement. I am writing this with the intent of sharing some things I've learned along the way, that will hopefully help out other green developers.
1. Get comfortable with failing
You know that thing you call an ego? Get rid of it. You're probably not going to be good at writing code from the get go, and that's ok. Ain't no shame in your Google game. You'll still be using Google and StackOverflow at the senior level, so don't beat yourself up over constantly having to do a Google search to solve something. Chances are you're not the first person to have the problem you're stuck on, and chances are someone else has already found a better way of solving it. Study (not copy) their code and learn from their problem solving. Think better.
A month into my internship I thought I was doing such a horrible job that I decided to quit before I got fired. I was so afraid to fail that I wanted to beat them to the punch. Imagine my surprise when I got pulled into a meeting and was told that I was actually doing really well and encouraged to keep at it. If you're the type of person who is drawn to development, you're probably also the type of person who likes to solve things and doesn't like the feeling of being bad at something. That's ok. But don't get in your own way.
I had no way of gauging my performance, and I had a huge case of imposter syndrome. Check in with others more experienced than you - ask them how they think you're doing. Not just in your first month, but whenever you start to doubt yourself and your abilities. You might be surprised to hear that you're doing a lot better than you convinced yourself of. And if you're not, then ask for constructive criticism and work on being more efficient. I cannot stress enough how important it is to drop your ego and just focus on being better and more efficient.
2. Define your problem before attempting to solve it.
A well defined problem is most of the way solved
A huge pitfall for me at the beginning was attempting to solve something that I hadn't thought through all way yet. I'll use an example that I heard on a podcast and funnily enough, was actually a problem I had already stumbled upon about a month before listening to this particular episode.
Say you are trying to validate e-mails against a regex. So then the goal is: I need to come up with the correct regex to validate an e-mail. However, if you take a step back and get to the root of what you're trying to accomplish, your goal then is: I want to prevent someone from signing up with a fake e-mail address. Once looking at your ultimate goal from this perspective, a more efficient way of solving this problem would be to send an e-mail to that person, and having them click a validation link.
Don't overcomplicate what you're trying to solve. Get to the root of what you want to do and figure it out from there. A good way to help you get to the root of your problem is to articulate it to someone else. Even if they don't have the answer, usually defining your problem to someone else will help you better understand it and ultimately solve it.
3. Documenation. Documentation. Documentation.
Documentation was written for a reason. Read it. There are times when you'll come across some poorly written documentation, but honestly, that is rare. I've only come across that once in an entire year.
4. Don't stress yourself out.
Take inventory and get organized
Knowing everything you have to get done on a project can be stressful if you look at it as a whole. Break up all those tasks into smaller tasks and start there. We use Trello to stay organized throughout the lifecycle of a project. Add a card to the board per task. It makes a difference when you can visually track your progress and know that you're crossing things off the list.
Treat each day as a fresh start
Didn't crush it yesterday? That's ok - there's always tomorrow. It can be really discouraging if you're behind on a project and it's all you can think about. While it's good to ask yourself what you can improve on and try to diagnose where you lost time - don't dwell on it. It can linger in your mind and really hinder your productivity. Just trust that you'll do better tomorrow.
5. Take breaks.
This one seems simple and maybe obvious, but it's a lot easier said than done. If you're hacking away at something for 12 hours with little to no breaks, chances are you could've gotten the same amount of work done in 8 hours if you would've just taken more breaks and let yourself recharge a bit.
It's happened to me several times - I'll be stuck on a problem for a while, finally just give up, and as I am walking away from my desk I solve it. Or I'll literally have a dream about the problem and solve it in my sleep. If you're burnt out all the time, then you're not going to be very productive. If your mind is focused on something else, you're also not going to be very productive. It may seem counterproductive to take a break instead of putting more hours into solving something, but just trust the process.
Get meta with your productivity
I am a data nerd. Numbers, data, stats - these things don't lie! I've recently started tracking my progress when working on tasks. I'll record the complexity of the task, and a start and end time. Some questions I ask myself after: Why did this take longer than expected? Did I have anything else other than work on my mind? Did I get distracted or waste time at any point? What was my mood/energy level during this time of day and during the task? Once you look back at the data, you'll usually notice patterns and be able to adjust. I found out that I was least productive after taking a long lunch, and when there was a lot going on in the office (Skype calls with clients, loud phone conversations, etc.). So I adjusted by taking shorter lunches so I wouldn't completely lose focus, and if need be, step out to lunch somewhere quiet where I could recharge in silence. Now I've noticed that I actually get more work done in a shorter amount of time. Adjust. Adapt. Profit!
You don't have to get really anal about tracking and recording your work habits, but at least take a step back and try to see any patterns in your productivity.
6. Start a passion project.
If you have time, build something on your own time and revisit it every few weeks or months. Refactor your code and see what you've improved on or picked up in the past week(s).
7. Follow other developers on social media
Some people I recommend following on Twitter:
- Eric Meyer
- Brad Frost
- Trent Walton
- Paul Irish
- Jeffrey Zeldman
- Chris Coyier
- Dave Rupert
- Ethan Marcotte
8. Share what you know.
One thing that I love about the industry is that it is built on a foundation of sharing knowledge and resources. If you're just starting out, you are (hopefully) literally learning something new every day. Document this, no matter how small you may think it is. Explaining what you learned will only help you understand it more yourself and might even help out others. It's a win-win for all. (I am actually really bad at this one, but one of my new year resolutions is to write more blogs and be more active on social media.)
9. Have fun!
Kinda cheesy, but also true. You get to sit at a desk, put on headphones, and solve problems using code. How cool is that? It still blows my mind that I get paid to do this, when truthfully I'd be doing it for free anyway (just don't tell my employers that). And it definitely doesn't hurt that I'm part of a team that creates some really amazing work.