Jack Shirazi is the founder of fasterj.com which publishes the popular JavaPerformanceTuning.com website and newsletter; he’s also the author of the successful book “Java Performance Tuning” and is an elected Java Champion. Prior to his career in Java Performance, Jack trained in Theoretical Physics and was a published researcher in the field of protein structure prediction.
Title – What is your job title?
I don’t have a formal title, I can choose whatever title I want as I run my own business. I’m considered to be a Java Performance Expert. I’m also a Java Champion, which is a formal accolade; you have to be voted on to the Java Champion list by Oracle. There are a few hundred of us Java Champions globally.
What is your role about?
I can choose where to focus my skills, and that changes over time. For a while I focused on short-term consulting, which meant you have to use your contacts and your online presence to generate customers who want you to consult about various aspects of Java performance: it can be very low-level implementation, or it can be troubleshooting their current performance issues, or reviewing the design and architecture of their systems. For a while I focused on training, which means building your own training courses and advertising to gain customers and provide those courses.
Right now I’m focused on long-term consulting assignments, which means I will be at a customer site from half a year up to several years, working on the performance of a specific project and seeing it through to the deployed production system. That tends to involve a lot of performance monitoring of the system, a lot of performance testing (it’s part of non-functional testing that is increasingly recognised as crucial to the success of a project), and often tuning and troubleshooting. I also spend a proportion of my time researching and writing for my newsletter (published every month without fail for more than ten years) and occasionally writing for other publications.
What are the best/most positive parts of the job/industry?
I love the troubleshooting and tuning – you have challenging problems which need all your skills and experience to figure out and fix, and then the outcome of seeing things running smoother, faster, smaller and trouble-free after fixing is very gratifying. Most software developers seem to prefer developing greenfield projects (i.e. helping build a system from scratch), but I love being thrown into already existing projects and fixing other peoples code. It’s probably important to enjoy that aspect if you want to be a successful roving troubleshooter – fixing other people’s code is quite different from fixing your own and many people find it difficult to get into. You need to be quite non-judgemental, it doesn’t matter about the existing code quality or whether or not you feel it
lines up to good coding practices, your only target is to fix it so it achieves the performance targets, leaving maintainable code.
My favourite issue is a concurrency bug in using HashMap which randomly results in infinite loops occurring. Because almost all developers use HashMap as their default map, and it is used so extensively in code, it can easily get used in multi-threaded code by accident (it is not supposed be used like that, HashMap is not thread-safe, you should instead be using something like ConcurrentHashMap). When this happens, there is a small chance that the concurrency bug will get hit, and it’s not obvious when analysing what is happening that it has been hit. I’ve fixed more than one production system where they were previously having to bounce a service because of occasionally hitting this bug.
What are the negative parts to the job/industry?
I don’t like the constant language wars we have in our industry, I have an opinion that you should use whatever is appropriate for the job, and the almost religious devotion to a particular programming language that many in our industry have is quite annoying. I also don’t like the wasteful way we keep re-inventing every aspect of the software industry. For example remotely executing procedures across machines has been re-invented again and again (RPC, CORBA, HTTP, REST, and those are just the most popular, there are hundreds of less popular ‘standards’).
On the “running your own business” side, don’t underestimate the amount of effort you need to put into generating business, doing the admin, avoiding messes. The buck stops with you; you gain the rewards of your own work, but you also have to deal with every aspect of running a business and that takes a lot of effort.
What is the standard career path/qualifications?
You don’t get to be an ‘expert’ in anything without first becoming very competent at it. There are no formal qualifications – when I’ve interviewed for people to do similar work as I do, I don’t care about what qualifications they have, I’m looking for an in-depth understanding of how and why programs are behaving and misbehaving. You need to understand which tools let you see what is happening in a running program; how to interpret the output of those tools to infer what is happening and why, and then understand how to test changes to fix the issues you identify.
My experience is that developers who are considered competent by their peers, and who have
worked for a while in some specific area, have been highly interested in that area, and are willing to focus in that area, are then capable of becoming an ‘expert’ in that area. To extend that to become recognised as an expert by more than just your colleagues, you have to then disseminate your expertise to many organisations, possibly by publishing written work that people read, or some software that becomes widely used, or some techniques that are followed by many in the industry, etc.
What are the prospects?
If you become someone who is considered an expert in any niche IT area, you can usually choose what you want to do. You can focus on training, consultancy, working for an organisation or for yourself, speaking at conferences, these and more options are all open to you.
What was it like coming into the industry?
I didn’t realise at any stage of my career what I was moving into. Each time I shifted up my career path, I was open to new options, and willing to take the risk involved – sometimes monetary risk, sometimes the serious risk that you might dead-end by not having relevant or recent experience for your next role. It can be pretty scary to just stop money-earning work and spend time developing something different (as I have done several times such as when writing my book, when developing training courses, etc.). My advice – always be open to potential new things, investigate them when they crop up, and be prepared to be adaptable. Sooner or later options come your way, and it’s better
to have the choice to choose that option should you want. You’ll only have the choice if you are open and adaptable and prepared to change.
Do you have any thoughts on the future of your role/industry?
In the medium term, the JVM is a fantastic platform to be working on, whichever language you might be using. I use Java. I often look for new languages because Java is not the ‘perfect’ language, but I haven’t yet found one that is better. When one comes along that is better, I’ll move to that language – I’m pretty sure it will run on the JVM though.
Information technology hosts the professions of the future, the use of software is only going to increase for the whole of this century. More and more, the software engineer’s job will be to integrate technologies that are available, to produce the precise solution needed for a given task. So you’ll need to know what’s available and how to combine things so they work to your will. Most software engineering will become more like engineering – the things you build will be mostly other people’s components which you slot together and then maybe 10%-20% of your own bespoke code to transform the components to what you need.
What advice would you give someone entering your industry?
My advice to those entering is to try and get competent in programming and understand how to integrate resources on the internet into whatever you are doing.
Have you come across anything or anyone that has helped you move forward in the industry?
Be willing to help out others without expecting reward – eventually this will come back to help you out one way or another. And keep yourself up to date by continually reading about what is happening in the industry and in your area of work and skills – I.T. is a-fast moving continually evolving industry and it’s important to keep your skills updated or you fall behind and become less employable over time.