March 15, 2017
The time has come. You have landed your first job as a developer, you've worked so hard for it. But now that hard work to find a job can give way to new feelings. Nervousness, possibly anxiety. What can you expect from this new job? How do things work in this new career?
First things first, don't worry, these are very normal feelings. As you will know from your study and learning, being a developer is not an easy job, so to help you ease through that, here are some things that you can expect as you get started with your new career writing code and building software.
There are going to be moments when you just don't know what a concept is, how it works, or why you do it that way. Why don't people do it this way, it seems like it should be obvious? That's ok, though, you're coming on as a junior, if the company that has hired you is serious about having a junior you'll have room to learn and grow as you go.
As a result, you will:
And don't feel bad that you have to. Of course, you won't want to interrupt people right in the middle of an important thing. Try not to interrupt people when they have their headphones on unless it is an actual emergency, but send them a message on Slack (or insert team communication medium here) and mention that you are trying to work out X problem and would like some help when they have some time to spare for you.
It is commendable to attempt and work out things on your own, and you should look into them first before you decide that you need some help, but timebox it. Decide what you think is a reasonable amount of time to research/figure out a solution to your problem. Don't forget, though, you are working with people that have more experience than you, and while you can't magically catch to them in that regard, you can leverage their experience to get pointed in the right direction and when needed, be told explicitly how things work and why. The more senior members of your team have been around the block, they've seen stuff, soak up every piece of knowledge from them that you can. Listen and learn.
This will happen a lot, especially if you are a self-taught programmer and feel a bit light on the theory side of things. I had to look up so many things, especially in my first few years on the job. Smart, experienced developers know things that you just haven't encountered yet. They will talk about things, maybe just in passing, maybe not even directly to you, but if you haven't heard of it, go look it up and find out what it is. Some of it will end up being things that become essential parts of your developer's toolkit. Some it will be things that don't interest you, and some will be things that you don't use directly but influence how you think about and build software. All these things will help you in some way.
I do mean everything that is not just a text or link change on a web page, especially when you are starting out. In this job, we are constantly doing things that we have never done before, or failing that, in ways we've never done before or with a library or technology that we have never used before. As a result of this, estimating how long something will take is very very difficult. One way to deal with this is giving estimates of how hard something seems like it will be rather than mostly guessing how long it will take. Don't feel like you need to give an estimate the moment you are asked to build something. Saying that you need some time to look into how difficult that will be is a valid answer to "How long will this take". Timebox an investigation and then report back what you think is involved. Learning how to find this information and manage your stakeholder's expectations are just as important a skill as your tech skills, if you can build your expertise in this area you will go far.
Since everything is going to take longer than you thought it would, one of the most effective ways of keeping momentum and seeing some results is breaking down the work that is to be delivered into smaller pieces of, hopefully, self-contained shippable work. This will be a constant struggle of what is the right size of tasks, and it will vary on a task by task basis. If a task feels like it is large and handles several things or if it will take a very long time, look to work with your senior developers to figure out how that piece of work can be made into several smaller pieces of work. Then you can still make progress on the bigger picture of what is being built while still shipping some work and feeling like you are making progress, this will help immensely.
Since there will be plenty of times that you are working on something that you haven't done before, there will be times while you are solving a problem when you realise that this is not the way that you want to solve it. That is perfectly ok. If you realise that what you are doing isn't working, take the knowledge you have learned from trying this approach and redo the parts that are not working, in the long run, this will be better for the code base and the developers that have to work on it. Don't get married to a mistake just because you spent a long time making it.
All of these potential obstacles make it sound like you have a tough road ahead and if you want to improve and learn, it will be. Programming is hard, especially when you are building things that people actually use and aren't going to be thrown away in 3 months when you can just move onto the next shiny greenfield project. Don't be discouraged, though, the other side of this is that when you figure out how to do something, especially if you thought you would never be able to understand/build it, you will feel incredible. At that moment you will realise why you love the job and wanted to be a developer in the first place despite the job's ability to make you feel stupid on a daily basis. Don't just build big long running features and projects. Get some quick wins as well by shipping small features and fixes. These quick wins will contribute to a feeling of momentum and achievement, and nothing fuels a developer's morale better than this, especially when you are still finding your feet in your career. It will whet your appetite and spur you on to greater bigger challenges with confidence.
Programming is a great career. It is challenging and rewarding, and I love it. I love working with Ruby and Rails every day, and I hope that it can give you the same joy and challenge it has brought to my life.