I'm inspired to write this post because Someone Is Wrong On The Internet. Of course a more accurate statement would be "I disagree with some aspects of what someone on the internet said, even though they have an entirely valid point of view". But that's less catchy.Continue reading "Reading Code is a Skill"
Mandatory initial exclamation about how little I have blogged here lately. Over a year without updates, oh dear! But a) I have been blogging quite a lot for the IntelliJ IDEA and Upsource blogs, and b) I had another baby, which kept me quite busy.
So on that topic (more or less) I get a lot of questions about my job: what’s involved in the job, what’s it like working for JetBrains, what does a Developer Advocate do, what’s it like working remotely etc etc. Given I also rather generously1 recently offered to answer people’s questions about my job, I thought the most scalable way was to write-once-read-many, i.e. write it in a single blog post for everyone to read.Continue reading "Being a Developer Advocate at JetBrains"
So I came to the blog to update my upcoming events (at least something stays up to date) only to find it's been nearly a year since I last blogged! This is terrible!
It's not that I haven't written anything in a year, it's that a lot of my writing energy goes into stuff for the actual day job. Which is good, because that's pretty much what I wanted from the day job, but the blog makes it look like I don't write any more.
So I'm going to cheat. Here's the stuff I've written in the last 12 months.
- A whole series of articles off the back of last year's Java 8 in Anger talk: Five Java 8 Features That You Won’t Be Able to Live Without, Why Java 8?, and Java SE 8 in Practice.
- A tutorial on TDD in IntelliJ IDEA. I have video clips to turn this into a screencast as well, but that's Yet Another thing I didn't get around to.
- A tutorial on how IntelliJ IDEA helps you migrate code to Java 8. This evolved into the other thing I've been working on this year, my latest live demo presentation, Refactoring to Java 8.
- A whole series of blog posts on "What to look for in a code review". This was fun and satisfying to write.
- ...which got turned into a book. Yes, I'm finally the author of a book!
- Java 8 Top Tips, with a bunch of IntelliJ-specific tips
- I've taken over Java Annotated Monthly, so at least you get to hear from me once a month with that. I try really hard not to be too sarcastic, jokey or British when I write the newsletter. I don't always succeed.
Oh yeah, and I had a baby. I'm contemplating blogging about being a working parent, but I'm a bit concerned that Of Course a woman is going to blog about Being A Mother, when previously I just blogged about... well, come to think about it I blogged about all sorts of things, including haircuts and hangovers, so I guess I could probably get away with it.
So, I get asked a lot about how I got into technical advocacy / evangelism1, so it seems like the most cost-effective way to answer this question is to write a post about it. Warning: it's a long one!
Just over two years ago, I embarked upon a journey as a developer / evangelist for a company who was then called 10gen (who got fed up of saying "the MongoDB people", and transformed into MongoDB Inc). My goals for this role were: to learn what it was like working for a company that produced a technology product; to discover what impact working in an open source fashion has; and to level up my advocacy skills. I have met all these goals, and more - I met some fantastic people; learnt different approaches to software development; discovered my new favourite database for creating applications; moved to Spain; started both a MUG and a JUG; worked to understand the value of community and evangelism, and to help create a strategy for these areas; and my evangelism efforts and open source work earned me the Java Champion title. I'm extremely proud of what I've achieved over this period, and very grateful to MongoDB for giving me these opportunities.
But now, a new adventure is about to begin. If you've seen my live coding demo this year, you'll know of my love affair with IntelliJ IDEA, a tool I use daily (even for blogging). Well, now I'm joining the team at JetBrains, where I'm going Full Advocate. I hope this means I get to carry on doing more of what I love - presenting, writing, and working on demos to help developers become more productive. I hope this will give me opportunities to stay ahead of the curve in the Java/JVM world.
And yes, in answer to the Most Frequently Asked Question, I am staying in Spain. I've fallen in love with Sevilla and I'm not ready to leave yet.
I shall leave you with my somewhat disasterous "Top Ten IntelliJ Tips" from GOTO Aarhus, which is worth watching just to see Dan North save me from the curse of the live demo. Things can only get better from here, right?
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?
I was flattered a couple of weeks ago to be interviewed by Google as part of their women techmaker’s series, as it moves over to Europe. In this video I talk about going to Mars, education, planning your career, being a developer, and the impact of technology on our lives. So, not much…
I had an interesting discussion last night at the LJC developer sessions, and it’s a topic that comes up again and again:
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 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”:
- To be more effective in your job
- 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 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.
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:
- 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.
Read if you’re a developer and wondering what’s missing from your job.
Read if you’re a manager and you’re looking to recruit the right types of developers. In particular be honest with yourself over whether your organisation is more aligned to "hygiene" or "motivation". At least one of the poor job decisions I have made is because the role was mis-sold as one and turned out to be the other.