Dec 2, 2007

Are technical skills alone or just being a quiet achiever sufficient to boost your career?

The answer is no. The technical, analytical and problem solving skills must be complemented with:

Effective marketing skills to promote your skills, knowledge, and achievements along with ability to negotiate your promotions, salary or contract rates. Now days it is a rarity for management to pro-actively recognize or reward their staff unless there is an immediate vacancy to fill. If you cannot determine your net worth, how the management can?

Effective communication, interpersonal, presentation, mentoring, being a team player and business skills. I have seen candidates with technical, analytical and/or problem solving brilliance getting either sacked or failing to make a mark in their careers due to lack of one or more of the above mentioned skills.

There are myriad of books and online articles that can help you on the second bullet point, so let me elaborate on the first bullet point based on my experience and observations. If you want to market a merchandise successfully, you must know the merchandise. The same is true in marketing personal services in Java/J2EE.

When and where do you market your technical, analytical and problem-solving skills?

Team meetings and design/technical sessions.

Pro-actively providing either verbal or written recommendations or suggestions on improving the quality of the software, development process, fixing design and/ or development flaws etc.

Note: Take care not to over do and not to point fingers or undermine others. You should have your facts and know what you are talking.

What is required to effectively market your technical, analytical and problem-solving skills?

Ability to look at the big picture and drill down as and when required.

A good understanding of the key areas of software design/development.

Ability to look at things not only from a technical perspective but also from a business/stakeholder perspective.

In early stages of my Java/J2EE career I was in a position to impress my team leads and architects by pro-actively pinpointing some of the critical performance issues, transactional issues, memory issues and threading/concurrency issues and more recently on design flaws, scalability issues, software development process and best practices. I call these the key areas in my book entitled “Java/J2EE Job Interview Companion”. Let me illustrate with some Java/J2EE related examples:

Technical:

Struts action classes and Servlets are not thread-safe.

Valuable resources like database connections, file handles and sockets must be closed properly.

Throwing an application exception will not rollback transactions in EJB.

Web search functionality that can return large result sets should consider using true pagination.

Improper implementation of equals(..) and hashCode( ) methods can cause indeterministic behavior that is hard to debug/reproduce.

Analytical:

This requires ability to think outside the square and analyze (i.e. What If scenarios) and think of exceptional conditions.

What if an exception is thrown or customer cancels the transaction? Will the transaction be rolled-back?

What if 100 concurrent clients access this search functionality? Will it be thread-safe? Will it scale well without any performance or memory issues? [Consultants/contractors spend lot of time fixing these types of problems]

What if these critical messages are published to the live system with some inappropriate and/or sensitive messages? Do we need an approval or work flow process to prevent any human error?

What if a JMS message is lost? Do we require a guaranteed delivery mode? Or is performance more important than reliability? Can this message be consumed by more than one consumer?

Problem Solving:

This requires ability to identify and fix root cause of the problem.

“Account” objects are not getting added properly to HashMap. A possible cause is that the equals(..) and hashCode() methods are not implemented properly in “Account” class.
Cannot retrieve the stored objects from the HashMap. The possible causes are that the equals(..) and hashCode() methods are not implemented properly or mutable objects are used as keys.

CPU usage is very high. Possible causes are an endless while loop, never ending recursive method call, spawning a new thread every time instead of using a thread-pool, over-working the thread scheduler, memory starvation, improperly sized heap memory, inefficient Garbage Collection (GC) or GC alogorithm inefficiency etc .

OutOfMemory exception is thrown. Possible causes are not enough memory allocated for the working of the application, unintentional object retention causing the heap to grow and grow, not making unused objects garbage collectible, memory leak in the JVM etc.

When do you engage in negotiations on your promotions/remunerations?

Everyone wants more money, but it is something entirely different to be worth more!. Your value is established entirely by your ability to render useful service or ability to induce others to render such service. Before you even start to negotiate your salary be sure that you are worth more than you now receive.

After having proved and promoted your abilities and worthiness (say 6 months to 1 year).

After having an alternative job offer that is more attractive but you are happy where you are.

After having multiple job offers if you have decided to move on. Do not rush in to accepting the first offer you get while you have more interviews to attend or waiting on other interview outcomes.

Note: Study the market rates, demand for your skills etc. Do not be unrealistic.

After succeeding with the interview, and getting the position - someone has the nerve to introduce themselves, and say, "If you need help with anything just let me know." This is the person I will never go to again. First, they will be the first to let other members and superiors know what you don't know. Second, they will also try to say that you don't know what you should have known. The next time someone tries these tricks with me I will know what to do. Why give me a position, and then secretly find a way to say that I don't know what I should or someone on the team already told me this initialization or variable needed to be instantiated? I thought working as part of a team meant supporting each other with problem solving, not going to the boss to exploit what I think you don't know.

I have been successful at several interviews, because I have had at least five different three month contract assignments in the last three years. I get calls from recruiters every week. When I start working (during the first week in the last position) there is someone who comes to tell me, "If you need any help with anything just let me know." What they are really saying is, "If you ask anything I am going to let everyone know you are not qualified." This is the person you don't want to ask anything. Next I have a different understanding of "Working as a team player". If you go to your team members, and ask a question during the first week. They explain, and then ask questions regarding your experience, and then explain something that they know you should know. Next they will go to the Manager to let them know that evidently you didn't know something that you should have and give an impression that they hired someone who was not qualified for the job. When you complete a task the Lead Developer will come to ask, "Why did you do that the way you did or I think you introduced a bug?" How do you know there is a plan for your demise? Because the Manager will send someone to ask you to do something that they want to trap you with - ie. build an EJB, when they know they don't have the server environment or the container to support. I was told, "Ten people interviewed for that job and quit after the first month". Also, they keep you out of the loop, and when you ask a question - use that as the "something" that you should already know. I have recently stopped accepting three month contract positions. When you step in the door on the first day you have "unknowingly" made several enemies, and people who think you might want to take their jobs. The Lead Developer told me at the meeting, "If you just hadn't said something was wrong with the code". I had someone ask me last week, which of these I used before Active Directory or LDAP. After the phone interview I wrote a thank you letter and let them know that LDAP is included in Active Directory along with several other services. They didn't ask specific questions - they just wanted me to share my experience of using Struts, JSP, and Hibernate. They actually wanted me to tell them specific details about each one. You can't just say, "Oh, yes I used these in my previous places of work!" Giving a yes or no answer is not good either. Judging from the interviews that I have had over the phone, and some in person - I can decide whether the enviroment is conducive to my success as a developer with the company.You don't only need technical skills, and you almost need a degree in psychology, but you can listen and notice peoples attitudes and comments. I am interested in buying a book, which book helps with these issues?

hi this is ravikiranmy background is b-tech(cse)2008i did java certification alsoplz give me the guidancei apply the so many companies but there is no responseplz tel me how 2 apply and guide me how 2 get the interview cals

Hi this is sonu. I wanted to know how is the job market for "Core java developer". The ones who write low latency code and deal with data structures and multithreading all the time. Thanks for your answer

There will always be jobs for good developers who can network and market themselves. Core Java alone a bit narrow, and you need to expand into Java EE and sought-after frameworks like Spring, Hibernate, etc.