At the end of last month I turned 35 years old and I realised I have been a developer for about ten years. I began coding when I was 21 and I got my first coding job, building email templates, when I was about 23. But it wasn't until I turned 25 that I got my first development job, writing Visual Basic and SQL for an email marketing company.
So I feel like it is an appropriate moment for me to reflect and share some of my learnings from the past ten years of work. And I hope this will help new developers, and even old developers like me, progress with their careers.
It is hard to learn to code, so hard you never cease to learn nor face challenges. This can intimidate new developers, but the best piece of advice I can provide is, don't give up, you will get there in the end. When I began to write Object Oriented software I found it really hard. I learnt HTML and CSS quite quickly, it wasn't very complicated 15 years ago. But I had no background in computer science, I have a degree in history, so OOP and SQL were difficult to learn and there were points when I thought I should give up.
I didn't though and this was in part due to a great piece of advice I received from a Senior SQL Developer, a guy called Owen. The advice was simple, continue to read, listen and practice, and eventually it will click. One day in the office Owen called me over to his desk and said to me, "Rob, I want you to sit with me and I'm going to talk to you about SQL. You probably won't understand most of it, but if you just listen it will go in your head and one day in the future some of this stuff will begin to click."
Owen talked to me for an hour about topics like joins, inner queries, indexes and all sorts of stuff, which at the time went over my head. But he was completely right, about six months later I faced a SQL issue and some of the stuff Owen mentioned began to make sense and I solved a problem I never thought I could. Owen's point was it takes time to learn, but if you keep at it eventually you will get it. So don't give up and look for great mentors like Owen to help you along the way.
I've done a lot of different things in my career, but the most important was my decision to start a business. I was 27 and I decided social media marketing was going to be a big thing, and I would try to do something with social media analytics.
When I began my business I did everything wrong. I quit my job, I had no capital or savings to begin with, I was paying rent I could not afford, and I had no real plan. I wasn't even that good at coding. But what I did was start working, really hard. I worked very long hours and scraped by for quite some time.
After about 18 months one of my old work contacts put in touch with a company who were interested in what I was doing. The initial idea was for them to invest in my business and become part owners. Sadly once again I had no idea what I was doing and in the end we could not agree an investment strategy that would work. So after two years of struggle I decided I'd just sell them the social media marketing tool I'd built.
By the time I was 29, I was nearly bankrupt, the relationship I'd been in had fallen apart, mainly due to me, and I had no business. At this point you may be asking, why on earth did you do this? The answer is simple, it was one of the best experiences of my life, and fast forwarded my development career. I learnt more than any classroom or book could teach me about the business of technology and I became a much better software developer.
There were also some fun parts, I wrote a Twitter analytics algorithm that got me into Mashable and on to CNN News. And I got a free trip to LA to speak at a marketing conference about social media analytics. And overall nothing really bad happened, I tried something, it didn't work out, I went back to what I was doing, but I was earning a lot more money.
If there is something you want to try or do, just give it go, see what happens. It might not be for you in the end, but at least you'll know and you can easily go back to what you were doing previously. And it doesn't have to be as mad as starting a business, it could be to try free lance work, or remote work, or a role in management, or a contribution to an open source project. Just give it a go, you've got nothing to lose and you won't regret it.
Over the years I've learnt a great deal about myself, I can be arrogant, blunt, loud, dismissive, aggressive, single minded, difficult, selfish and worse. And I have to try and control these traits as much as I can. But the most important thing I've learnt is I am ignorant. As I've learnt more and gained experience I've come to the realisation I don't know much. This isn't a new concept I've stumbled upon, Socrates spoke about man's ignorance 2,500 years ago.
But it is a really important life lesson to understand your ignorance, or what you actually know. For instance I can code in numerous languages, but I only know PHP well. But even within PHP my areas of expertise are limited to Test Driven Development, Code Quality and JSON Web Tokens. I don't know a great deal about any of the PHP frameworks, I'm certainly not a Laravel Expert.
My advice to all developers is accept your ignorance because it is not a bad thing, it is natural. If you know a little about something it doesn't mean you understand it well or are an expert in it, so don't pretend you are. It's ok to say, "I don't know, I'll have to look into that." In fact, it's the mature and sensible thing to do. And if someone reprimands you for saying it then they are an idiot.
It can be difficult to work with those who have not come to this realisation. But one tactic which can help is the Socratic Method, which means ask lots of questions, all the time. Your aim should be to minimise confusion among team members, as confusion is one of the horsemen of the software development apocalypse. It should be avoided at all costs.
And finally, love your QA! A developer who accepts their own ignorance understands it is far more likely there is a fault in their code than their QA is wrong. So don't argue with them, work with them to understand and solve the issues they raise.
This is simple, avoid stress, like it were the plague, but like a worse plague, where people's heads explode. Stress adds nothing to your life, it's not a motivator, it doesn't make you more focused, it's just a life negative. And the consequences of stress can be significant, it can ruin your life.
The solution to stress is relatively straightforward, stop doing the thing that causes you stress. This is easier said than done and requires you to have a good understanding of yourself; who you are as a person; what your strengths and weaknesses are; and what you like and what you don't like.
I've realised I'm a bad employee but a good contactor / consultant. My main skill is analysis, which I believe comes from my degree in History. This means I am very good at spotting problems and defining solutions. I'm a bit like a problem seeking missile, I almost can't help myself, I just have to look under the rock in the dark corner.
The issue is, once I've found the problem I want to solve the problem, and the reality is many companies are not interested in solving problems. Their attitude is, "Has anyone died yet? No? Well carry on then..." When I've been an employee of companies like this it causes me enormous frustration and therefore stress, because I can't do the thing I enjoy and I hate doing things badly. Whereas when I'm a contractor or consultant the relationship is more like, "Here's a list of your problems, would you like to fix them? No? Ok, pay me, see you soon." I can detach myself from the issues emotionally, because it's their problem not mine, and this reduces my stress levels dramatically.
The point I'm making is stress is a unique experience, I know developers who cannot fathom the concept of contracting. They can't do it because it would just stress them out, "Where's my next pay check coming from?!" Learn who you are, and create a work life situation that minimises your stress levels.
Alcohol is fun, there is no doubt about that, and I've had lots of great times on alcohol. But I've also learnt I probably have a drinking problem. Not a, I need a drink to function kind of problem, but a drinking problem nonetheless. I'm not going to write about it in detail now, I'll do that another time.
But the point is you should be very careful with alcohol as it can have serious consequences. I've helped fire people because they drank too much and became violent. I've also seen even worse things happen as a result of alcohol, and all in a work setting. I also know, from my own experience that consuming lots of alcohol on a regular basis can seriously effect your work performance and your home life.
The combination of stress and alcohol is even worse, an explosive mix. I for a long time self medicated stress with alcohol, and it's not a good thing as alcohol seriously effects your judgement, behaviour and often brings out your worse traits, see above.
You should also be careful of companies who have drinking cultures. I used to think drinking cultures were fun, and I played my part in them, but they usually exist to hide a company's demons. Which more often than not is people are under too much pressure and stress levels are high.
I'm not saying don't drink or don't enjoy a drink with your work colleagues, just be careful. If you're drinking to help with stress; or you drink large amounts often, once a week or more; or you drink more often with work colleagues than friends and loved ones; you probably need to get some help, or make some significant work life changes. Don't let the demon drink take a hold, as my mother likes to say.
To finish on a positive note, despite the many challenges a career in development can present, I truly believe it's a great job. And I wouldn't change what I do for all the Burger Kings in America... ;). I enjoy learning new things every day and there is no feeling like writing good code. I hope the above notes are helpful and no matter where you are on your career path keep plugging away, it will all be worth it.
As software gets more and more integrated into our lives, the industrialization of its crafting process becomes inevitable. But the over-generalization of software engineering can be crushing the creative side of programming.