Dear new developer,
Right now you’re probably a bit frustrated and confused. You’re learning a lot of things and you don’t really understand everything. Sometimes things click and it all makes sense, other times you’re confused and staring at what feels like a brick wall. Perhaps you just want to make things work and they won’t.
I say that not because I’m a sadist or dislike you. I say that because I hope you’ll remember the frustration you are experiencing right now. I think that will make you a better developer.
Because that is the state of 99% of your users. Whether they are a business employee or a person trying to use your app for personal reasons. They are just trying to finish a task and get on with their life. The software you are writing is the tool they are using to do that.
- They don’t care about elegance of code.
- They don’t care how much you love to develop.
- They don’t care if you are learning and growing.
They just want to finish their job, complete their task, do their thing.
And, honestly, the tools we provide are frustrating. They’re buggy. They’re slow. The fact that they are amazing compared to what we could create a few years ago and that they are better than the alternative is beside the point.
I don’t write this to cause despair, new developer. Progress is being made. But it’s made one person at a time. Each person has to act with empathy toward their frustrated users. Understand them. Care about them.
And if you can remember the frustration you are currently encountering, perhaps you’ll have just a bit more empathy toward your end user, who is just trying to use your work product to get something done.
Dear new developer,
I suggest that the first job you take be the one with the highest learning potential, not the highest earning potential. (This post contrasts the two, in the context of entrepreneurship.) This can vary depending on your skills and needs, but I’ve seen over and over again that you learn more with one or more team members than you do alone. Other technical people working on the same problems, even if they are new as well, will elevate you.
They’ll bring a world of difference that you can learn from, including (but not limited to):
- technical tools
- understandings of the problem
As you work with them, try to understand where they are coming from and appreciate it, especially as it relates to solving the problem. Building this empathy for others is really really important.
Now, what can you do if you get hired and are the only technical person on staff (either as a contractor or employee)? Luckily, understanding others and building empathy doesn’t just work with developers, so you can work on that aspect, even though the problems and language may be a bit further from your comfort zone. As far as learning differences in technical tools, I suggest you join a meetup or an online community or both.
Dear new developer,
You have a portable skillset; most every company needs software, just like everyone needs accountants.
You have a “means of production” that only costs a few thousand dollars: your laptop.
You are in demand (as long as you have the right skills, experience and salary expectations).
Please take a chance during the first decade of your career and try contracting.
There are two paths to contracting. The first is where you go through an agency and they place you. The second is where you contract directly with a client. Each of these paths is different.
The agency path is easier. The agency finds the work, treats you as essentially an employee, and sends you to client work. However, you’ll get paid by the hour and you’ll have the chance to see into a number of different companies without making the commitment of being an employee. (It’s been a few years since I did this so the model may have changed slightly.). This can be a good experience, but it can also be frustrating as you will likely not be treated as well as a full time employee (FTE) while on this contract. This treatment is assuaged by more money and freedom.
The direct to client path is harder, but worth more. Here you will learn all kinds of skills not directly related to development. You’ll learn about sales, about customer support, about requirements gathering, about invoicing and getting paid. All these are fantastic additions to your toolkit. If nothing else, they’ll give you an appreciation for all other company departments, because when you are a client facing contractor, you have to perform all their job functions for yourself. Getting this business running will take longer than just calling an agency, passing their interview, and getting placed at a client. The plus is you’ll have a lot more control and you will likely have more income.
Even if you want to stay a full time developer for the rest of your career, a stint as a contractor can expose you to new ideas, let you gain new skillsets and give you an appreciation for the work that other departments do (man, sales is hard!).