Career Advice for Programmers (YOW 2013)

Since I have a tendency to bang on every now and again about how we, as developers, could do better in managing our careers (for example, by creating CVs that don't suck, and by staying ahead of the curve), Dave Thomas asked me to speak for a mere 50 minutes on the subject at GOTO Aarhus, a talk I wasn't enormously happy with as there was no way to cover a lifetime of hard-fought experience in such a short time. Dave seemed to like something in it though, as he gave me the opportunity to present the topic again at YOW last December, and this time I think I managed to distill the important points into the (still ridiculously short) time allotted.

See the video here, and please give me any feedback you have.

I recognise there are many many more topics I could cover, so I'd better start making a list. Suggestions?

LinkedIn Etiquette

For no reason other than LinkedIn communications are starting to irritate me, here’s my personal LinkedIn Etiquette guide. Feel free to disagree with it all.

  1. I’m not going to accept invitations from recruiters. Not just because I’m not looking for a job (who knows what the future holds?), but because I believe it shows a lack of respect to my network to bring recruiters one step closer to being able to contact them all. It’s not about Evil or Good recruiters, but I really don’t want to make it easier for lazy recruiters to spam people I respect (caveat: there are people who are technically recruiters who I have added into my network, either because I know them personally or because they have proved their worth).
  2. If I get an invite without an introduction message from someone who’s name I don’t immediately recognise, I’m going to check out that profile to see if we have employers in common or common connections, but usually I won’t accept that invitation. I know LinkedIn makes it easy to click one button and request a connection, but I think my LinkedIn network is valuable and made up of people I know (even if I only met you once at a conference), and a short introduction reminding me of where I know you from (or why you’d like to connect) is going to help my poor, beleaguered memory.
  3. Endorsements - almost a total waste of time. People I have worked with and respect have accidentally endorsed me for things they know I’ve never worked on, simply because LinkedIn makes it too easy to click a button and endorse someone for two things they’ve already been endorsed for and a third thing which, through some LinkedIn magic algorithm, is probably related to what you’ve done before and LinkedIn hopes is only accidentally missing from your profile. If recommendations were too easy to game (and they were), endorsements are almost entirely valueless.

However, I do find LinkedIn enormously useful. I value it more than I think many others do for a few reasons:

  1. It encourages you to keep your CV/resume reasonably up to date. I personally believe everyone should do this, not because you might want to hop jobs at a moment’s notice (although it’s nice to be able to do that), but because a) it’s really difficult to remember what you did over the last 12 months, never mind a longer period - keeping your profile up to date means you can truly highlight the good stuff you’ve worked on, and b) if you’ve got nothing to add to your resume from the last 12 months, that’s a good sign that you’re not growing and your career needs a bit of love (if you think investing in your career is a Good Thing).
  2. It’s enormously useful for retaining a network of valuable contacts. This is why, in my opinion, one needs to be reasonably selective about who one adds to that network. If you were looking for a new job, for example, and you’d been selective about the recruiters you’d added to your network, those would be the first ones you’d contact, and you’d be reasonably certain of a quality service. But regardless of that, because not everyone is constantly job-seeking, if you’re looking for a specific person (for example, someone comes to interview for your company; or you’re looking for a great speaker for your conference/event; or someone approaches you about a job or an event to go to; or someone randomly e-mails you out of the blue and you’re not sure who they are) and they’re either in your network or are connected to someone in your network, you know that you either know them or someone you know knows them. That makes them a Real Human and not a spam-bot or someone who wants something from you without giving value in return.
  3. It’s not Facebook. Related to point 2, I am happy to add people I know only professionally (i.e. are not yet friends) to LinkedIn. I’m even happy to add people I don’t know personally if they don’t fall under rules 1 and 2 in the “I won’t add you if…” section. In Facebook, I have two (main) rules: I have to have met you in person (there are one or two exceptions but those are people I have known for a long time only over the interwebs); I have to have spoken to you in the last year, or want to speak to you in the next 12 months. This is for two reasons: 1) I want to keep my Facebook network relatively small so it’s more intimate, and therefore 2) I can share more personal things on there without feeling self conscious or wondering who’s going to see it. I have to be able to speak honestly on Facebook. On LinkedIn, I don’t need to be so fussy - I can add you to my network if I like you but you haven’t (yet) crossed into friendship; I can add you if I think I can be useful to you, or you to me; I can add you if I want a way to contact you (or want you to be able to contact me) but don’t have a pressing need to stay in touch frequently.

So, that’s an unnecessarily deep dive into my attitude towards LinkedIn. It’s probably not going to change anyone’s behaviour, but I feel better for at least explaining why I won’t necessarily add you back - all you need to do is type in the little invitation box to explain why we should be connected.

I value my connections, and I want to see that you do too.

Staying Ahead of the Curve

I had an interesting discussion last night at the LJC developer sessions, and it’s a topic that comes up again and again:

How do I stay ahead of the curve? There are so many technologies out there, and more coming along, I can’t even keep up with Java, let alone the other JVM languages, HTML5, JavaScript frameworks, NoSQL, Big Data…. argh!

Technology, particularly development, seems to move at an ever-increasing pace. Sure, the Internet makes it a lot easier for us to get access to information than in the Olden Days, when people probably had to read papers and books, and physically meet up to share knowledge, but that just makes the sheer volume of information even more overwhelming.

So how do you keep on top of all those technologies?

You don’t.

You can’t. If you devoted yourself to learning the same way you did at university (pfff, well, theoretically you devoted yourself to learning…), you could still never master every technology out there, and every new language and framework that pops up daily. Even people who pick a technology stack that’s suitable for purpose (let’s go with the old favourite Spring/Hibernate combo) can’t read every blog post about those technologies and see every conference talk that was ever videoed. To be the best even at Just Java, you’d have to be a master of concurrency, understand garbage collection, have read all revisions of Effective Java, know every detail of all versions of Java, including all the changes coming in Java 8, be aware of all the JSRs in progress. They’d have to have read about waterfall development, the Mythical Man-Month, XP, Scrum, Lean, Programmer Anarchy, so that they could know they are working in the most effective way for the business and team they are in.

All that as well as working 40 hours a week on the day job.

So to expect to know the ins and out of all current (and maybe dated) technologies, and all upcoming ones - not knowing which are just fads and which are going to be the Next Big Thing - is impossible.

But don’t you ask candidates how they stay current when you interview them?

Yes I do. And actually it’s their willingness to at least try, and their ability to filter out and select the things to investigate or be aware of that interests me, not their deep understanding of Scala when they’re working in a Java EE environment (for example).

There are two reasons that I can think of to “stay ahead of the curve”:

  1. To be more effective in your job
  2. To get your next job

If you’re aiming for point one, it’s a little easier to filter out the noise and focus on what’s relevant. In your place of work, there are going to be hard limits on new stuff you can use. For example:

  • Your systems guys will not allow new languages, even JVM ones, in a production environment. In which case, you don’t need to worry about learning them in any detail.
  • Your company has paid a heavy subscription fee for their existing database, therefore they will not be trying out funky NoSQL solutions. Fine, you don’t have to research them.
  • You’re working on a messaging system with no UI. In which case, you can let the new JavaScript frameworks rise and fall without worrying too much about them.
  • You work for a consultancy that specialises in government work, and documentation is sacred. So, don’t worry about going to a bunch of agile/lean conferences, you probably won’t be able to sell it to your customers.

Now I’m not saying these circumstances apply to everyone. And I’m not suggesting these are necessarily the best situations to be in.
But you can look at your current position and, if you intend to stay there, it might rule out a lot of the technology/process learning that’s available.

Point one suggests good places for research. For example:

  • You’re using Spring dependency injection and you don’t speak XML fluently. So you might research Spring wired up via Java and annotations, or you might look at Guice, or you might do a bit more reading around good practises in XML, or tools you can add to your IDE to make your life easier (Eclipse and IntelliJ both support XML refactoring).
  • Your Ant scripts are killing you, and you don’t know where your library jars should live. You could read a lot more about Ant, you might look into Maven, Ivy, and Gradle (hint - gradle is awesome if you don’t like programming in XML).
  • You spend all your time coercing objects into something Hibernate-shaped, and not actually delivering new functionality. Maybe you could become a Hibernate guru instead of just poking at it like most of us do, or you could investigate different persistence frameworks or mechanisms.

You get the idea. If you feel pressured to keep learning and you’re not looking for a new job, there’s plenty you can be doing within the framework of your day job. The best thing about this is that you might even be able to persuade your boss that you need to do some or all of this learning on work time, leaving you more time for your kids/spouse/drinking/XBox.

I’m really much more motivated to learn skills to find that great new job

Point two is a bit more tricky. When you’re looking for a new job, it seems like every job description contains all technologies under the sun; it seems like interviewers expect you to be an expert in all sorts of different areas; it’s impossible to tell which jobs are good and which are poor, so you apply for everything and try to learn everything to get to the interview.

Now if you’re already at the applying-for-a-new-job stage, you might not actually have time to learn everything under the sun. And if you’re still working at the current place and just looking around to see what’s out there, you might not have time to train yourself up on all those great new JavaScript frameworks while doing the day job.

How on earth do you pick which things to focus on?

Well, it’s surprisingly easy. Just pick the ones that interest you.

But what if I’m falling behind on technology X and it turns out to be The Next Big Thing?

Well, by the time it becomes the next big thing, you’ll have heard enough about it to know whether or not you care - either because it interests you or because it’s so big you should care. And by then, there will be plenty of knowledge out there (blogs, courses. conferences, books…) so you’ll be able to pick it up much easier than when it was at the embryonic stage and no-one really knew what to use it for. Java is, what, 17 years old now, and people are still starting to learn it now. No-one said you had to have coded with Java 1.0 in order to be effective in a Java 8 lambdas world. In fact, you could argue that those who learnt it early on might be less able to adjust to the current state of play.

So. Learn something because it interests you, or it’s fun, or you personally can see the value of it. Even the process of learning something new is valuable, even if the thing you learnt is not - it exercises those brain-muscles so they’re used to picking up something unfamiliar and playing with it.

But I see a thousand jobs for Scala/HTML5/<insert tech here>! Should I learn that?

Have you looked at Scala? Do you like it? Do you want to learn a whole new language? Do you want to spend the next two years of your career working in Scala? Because if you learn it to find a new job, and you do find a new Scala job, then you’re going to have to use it, and to continue to learn it. And if you don’t really give a crap about Scala, then why bother? Have you looked at the types of companies that are advertising jobs for Scala? Do you want to work there? Again, if not, don’t bother.

In our industry, particularly if you live and work in places like London, New York, Silicon Valley, there are lots of jobs, even in these Tough Economic Times. You don’t need to take any old job (unless you need a job Right Now, in which case I would advise you take Any Old Job and work on the side to find The Right Job to move to imminently).

The point is, you’re freaking out because there are all these different technologies and all these jobs that are looking for different combinations of all these different skills, and this is a Good Thing. You’ve been looking at it wrong - you think you need to be everything anyone wants, so that someone out there will pick you, like some sort of school sports team selection. But it’s not like that - the selection power is in your hands. You can wade through those millions of job postings and find the ones that interest you. You can invest in becoming skilled at the things you like, the things you enjoy, the things that scratch your intellectual itch, and you can then find a job that matches those skills. Even better, if you’re active in learning those skills, and visible at it (stack overflow, your blog, communities…), you’re going to improve your chance of getting a job in the area that fascinates you.

You don’t have to be good at everything. Just find the things that interest you, stuff you feel motivated to learn about, and then when you find a job that uses those skills, you know you’re in the right place.

So in fact, there is only one reason to stay ahead of the curve:

  1. Because you want to.

So it’s much easier to figure out what to spend time learning and what to ignore for now.

You don’t have to stay ahead of all the curves. You just have to stay within tolerance of your own curve.

Are you an awesome developer?

We are hiring!

If you think we’re doing something interesting, or if you think you can help us do our thing even better, come join us.  Your boss will be the dude who wrote Continuous Delivery, you’ll get a chance to experience what Danny calls meta-Agile (or Agile Agile), and you’ll really start to care about Domain-Driven Design<img alt="" border="0" height="1" src=";l=as2&amp;o=1&amp;a=0321125215&amp;camp=217145&amp;creative=399377&#34; style="border: none !important; margin: 0px !important;" width="1" />.

Ideally we’re after Java people, but at the heart of it we want people who are dead passionate about development.

Apply via the Stack Overflow Careers advert (you get extra brownie points if you mention my blog).

Job Hunting

I’ve learnt a lot professionally and personally during my time here in New York, but the time has come to go back “home”.

I’ll be relocating to London in September. I guess it won’t hurt to mention on here that I’ll be looking for an exciting new job when I get back there. Check out my LinkedIn profile if you are in the market for a Java tech team lead.