The developer world is very competitive. It's difficult to stand out from the pack, but this blog illustrates with three different scenarios where you can make yourself shine - at an interview, in your resume and at work to take the road less traveled.
"You can standout from the people who are more experienced or qualified than you are by presenting yourself in a different light as a well-rounded professional"
1. At Java/JEE Job Interviews
Let’s have a look at a typical Java/JEE Job interview scenario, where a candidate is asked the following popular interview question:
What are the two main OO techniques for code reuse? Which one of those two will you favor and why?
Most candidates will correctly say:
- Class inheritance.
- Object Composition.
Some will then go on to say that "object composition should be preferred over class inheritance (i.e. implementation inheritance). A few will then continue to briefly explain that… “If there is no ‘is a’ relationship then use composition for code reuse. Overuse of implementation inheritance can break all the sub classes, if the super class is modified. Do not use inheritance to just get polymorphism. If there is no ‘is a’ relationship and all you want is polymorphism, then use interface inheritance with composition, which gives you code reuse."
Some interviewers will be digging a bit deeper to make sure that the candidate really understands the OO concepts. Only a handful of candidates fully understand OO concept and will be able to elaborate with all the vital information as discussed below. This will enable those candidates to stand out and make a real impression on the interviewer(s) or prospective employers.
"Class inheritance is static and it is done at compile time. In object composition, functionality is acquired dynamically at run-time by objects collecting references to other objects. This is possible because objects are accessed via their interfaces. So, one object can be replaced by other objects as long as they have the same type."
If permitted, these better candidates will also continue illustrating...
"Interface inheritance should be preferred over implementation inheritance because it promotes the design concept coding to interface and reduces coupling. If you look at Gang of Four (GoF) design patterns, you can see that it favours interface inheritance to implementation inheritance. For example, the decorator design pattern used in java.io.* classes where responsibilities to objects are attached at run-time. The template method design pattern is a typical example for the implementation inheritance used mainly in application frameworks so that the overriding class can implemnt additional behavior".
Before you elaborate, ask the interviewer if it is okay to do so. In some interviews, you will be given a sample problem to code, where interviewer will be expecting good understanding of OO concepts. This is is just an example, and similar approach should be used to other interview questions relating 16 key areas
like coding, performance, transaction management, etc.
In most cases, most of us know the basic answer and have worked with these practically, but being able to give a clear and concise answer will make you standout from the pack and get a job offer as a first preference and also power to negotiate your salary or rates. So, refreshing prior to interviews can really pay off. Also, being thorough in key fundamentals can make the interviewer over look any other weaknesses like not having worked extensively with a particular framework or an application server.
The second most important aspect is to prepare prior to your job interview by going through your past achievements using the SAR (Situation-Action-Result) technique. Here is an example.
||Performance problem where the application server had to be restarted every day.
- Used JMeter to simulate the load conditions and reproduce the issue.
- Identified the cause of the problem to be leaking database connections due to not properly closing the connections under exceptional scenario.
- Fixed the issue by closing the database connections in the finally block.
- Tuned the JVM settings and configured proper service timeouts.
- Load and endurance tested the fixed code with the load testing tool JMeter to confirm that the issue has been fixed.
||The application becomes a true mission critical 24x7 type with much improved performance.
2. In your Java/JEE Resume(s)
Today many prospective employers embrace networking as the key source for finding a new position. Even when candidates are brought through a networked source, the first thing one would say is "Ask them to send their resume and I will see what I can do". There are no clear cut definitions in separating an ordinary resume from a resume that stands out. This is always subjective based on the prospective employer. Some guidelines can be drawn to compare an ordinary resume with a one that is more effective.
An ordinary resume markets you just as a techie, uses ordinary phrases, information is not quantified, packed with irrelevant and trivial information fulfilling your needs not the employers’ needs, one size fits all, lots of responsibilities included…. phrases, and vital information is scattered throughout.
An outstanding resume markets you as well balanced candidate with technical skills, soft skills, and business focus, uses perfect phrases in a clear and concise manner, achievements are quantified, addresses employers’ real needs, replaces responsibilities included… phrases with on the job accomplishments, resume is customized to the position applied for, and the important information is in the first page.
You could transform your achievement that was shown in the above example as an eye catching phrase on your resume as shown below:
- Re-factored and performance tuned a JEE based online insurance application, which previously came down almost daily, became a true 24x7 application.
So taking the effort to writing a resume that stands out from the pack can open more doors for you than people who are better qualified than you.
3. At Work
Being a well-balanced developer with good technical skills, outstanding soft skills, and business focus can do wonders to your career. Being a visible contributor is the key. Knowing the key areas and core concepts can save a lot of development time and improve the overall quality of the software. One example that comes to my mind is the very common "Concurrent Modification" Exception. Many of us get through solving this by trial-and-error in a time consuming manner. But if your fundamentals are clear then you would save heaps of time by knowing what exactly to be done to solve the problem. More often you make a good impression on your superiors and peers by pro-actively identifying potential issues related to performance, multi-threading, transaction management, security, quality coding, etc and fixing these issues before they become a major headache. Just being a techie alone not enough. One needs to have good technical skills complemented with excellent soft skills and good domain knowledge to succeed in his/her career.
So, how do you improve your problem solving skills?
- Look at existing solutions to common problems, e.g. design pattern to solve a particular problem.
- Create a problem and then solve it -- for example, create a connection leak issue and then fix it, create a memory leak and then fix it, create a performance issue due to back tracking regex or SQL with cartesian product and then fix it, create a security hole and then fix it, create a thread dead lock situation and then fix it, etc.
- Look at existing code and find ways to improve it.
- Surf the net for common programming problems and then solve them.
- Learn to use the right tools to solve your problems, for example jconsole, IDE debugger, Java remote debugger, jhat, jmap, wireshark, etc.
- Go to Java forums and help others with solving their problems.
- Sometimes explaining the problem to another person or asking a few questions can unlock the mental floodgate.
These gestures will make you stand out from the pack and consequently can do wonders to your career. You don’t have to wait for 2-3 years to be what you dream of becoming. Proactive self learning is the key to succeed in your career.
"Real job security in IT is not all about working for the same company, but keeping your knowledge and skills relevant. You need to have both technical & non-technical skills"
My books and blog posts focus on these knowledge and skill building.
- 16 technical key areas to solve problems & impress your peers, superiors, and interviewers.
- Java/JEE fundamentals through 650+ questions and answers approach with lots of diagrams, examples, and code snippets.
- Core Java Essentials focusing on writing OO and data structure code.
- Career making know hows, job hunting, networking, resume writing, interviewing, and passive income generating ideas/tips.
Your career is your responsibility, and not your company's. I strongly believe that this site will shed lots of light to motivate, inform, and fast-track your Java career. It is very satisfying get positive feedback.
Labels: Java career