Interview/Exam tips for Java developers in Australia

I have some modest experience in job searching in Australia as a Senior Java Developer. I would like to share some of my experiences which might help you within similar context. You will need some special considerations when you are trying to get jobs in Australia. Here, market is very much influenced by job agencies.

Within an organization, usually when someone leaves, or company has some new tasks to be done, it looks for the resource who has the specific skill sets. Now, problem is, in reality, you don’t get exactly what you want. And, so it should be OK if someone has most of the skill sets, but one or two is missing. In Australia, job agencies, will be looking for exact match, even though sometimes it is highly unlikely to be found!

This primary filtration which is done by these non-technical (they have no clue about the difference between java and javascript) agents, usually creates a special challenge for the job seekers in Australia. So, what you can do?

Cover Letter
Go through the job description very carefully. Pick ALL the keywords they used to describe the skill sets that they are looking for in prospective candidates. Prepare a cover letter where you will write separate paragraphs for each keyword explaining how much you know and your experience with the technology/tool.

You might also have to re-arrange your CV to highlight your experience on the required skill sets. Now, there is a format for CVs in Australia. Basically, it includes a section where you state your ‘Key Transferable Skills’ – that is something valuable and readily usable by your prospective employer. So, in one job, having experience with ‘Financial technologies’ might be very important to include, where as in another job you might highlight your experience and certifications as SCRUM Master.

Talk and impress
Another important thing is, talk to the agents and better be confident when you do it. It is very important that you impress them first. When they are impressed, only then they will send your CV to the actual clients, otherwise you are not even in competition.
But, if you are applying for jobs which are advertised by the company itself – equation is different. But, still I would suggest to follow the usual rules that I mentioned above.

Now, you got the call. How do you prepare?

1. You should have good understanding of most of the Design Patterns (GOF) and specific experience using a few by yourself. Should be able to explain where and how these patterns have been used in Java ecosystems (within JDK, Spring, Hibernate, etc.) Here is a relevant discussion > What design patterns are used in Spring Framework?

2. Should know some common best practices for OO development. Like SOLID principlesSOLID Principles in Wikipedia

3. Should be able to write code using at least with some common searching and sorting algorithms.

4. Should be able to code without internet but with reasonable references if needed to produce basic things that you claimed in your CV. Like, some crud with an ORM (jpa/hibernate), some rest/web service, etc. It could be some bug fixing as well in a given code base.

5. SQL queries. Like joining (inner or left outer, self-join, etc), performance tuning for SQL, etc.

6. Should be apt on most popular java frameworks like spring and hibernate (yes, I know, you know – these are basics, and that’s why everyone will try judging these skills and you better be prepared well on these). And, for web frameworks ideally you should have experience with Spring MVC, JSF and optionally with Struts.

7. Javascript. Yes, even Java developers should know Javascript. Do not assume you know this language. Do not depend on your copy-paste experience. You should learn it well. Try some advanced topics (i.e., Advanced JavaScript Fundamentals Video) and most importantly try to learn and work with AngularJS 🙂 – it’s a hot cake!

And then, there are some special skills like, Message Queues, JVM tuning, etc. Well, the list is actually endless 😦 ..But, all I wanted to do is to put together that is very common, and if you are prepared with these, you should be benefited almost surely 🙂

RPC with Rest Services

As per my understanding, rest services help communication among strangers, with strong chances of no or very little additional communication need.
Its based on http protocol which was originslly designed to make the communication possible between browser and web servers.
Browsers request to web servers for some resources. Interactions between them are simplified to crud like actions.
All is well, as long as you are aligned with these original intentions. But, when you want to do a rpc with rest, then you are not aligned any more. You make adjustments. And then, why these should not be tagged as technical debts?

From .NET to JVM – a cultural shock

World was limited when I was with .NET,  with Windows. It was controlled by Microsoft. Waited for newer versions, and whenever it came out, I was like a ecstatic child, overwhelmed by Microsoft’s Santa Claus like role.
So when I moved to Java, my first cultural shock was absence of any Godlike authority. Nobody will say do this and this is the [only?] way.
My first problem was where to start? I wanted to do a web application. Now, which framework to choose? What is the difference between Java EE and Spring? Its like a whole new world.. Eclipse or Netbeans or Idea? Maven or Ant or Gradle? Why am I pushed to take a decisions about everything? If you say, one can always choose a framework where he will get everything he wants for his tiny to mid sized solution, but then, choosing that suitable thing is itself another big decision to make.
In Java world, they have something called community process. Very much democratic, participatory and lengthy. There are different groups of people. Some like standards, some don’t wait for community, just create something easy and powerful. Lots of opinions.
Biggest bunch I see are the people who mix and match. And so considering the various options at every point one has, it is highly likely to find oneself in the middle of a very weird mix. And you poor user end up with some unsolvable dead-ends. After a while you might find out it was a silly version mismatch. As a good JVM user, you should be a good problem solver and a very good Google user.
This Java world is very enterprisy. When I see projects like Drools, Camel, Akka, JPos, Axon Framework… wow! That shows the wideness and variety and also overall maturity of the ecosystem.
After a certain period, I too, thought about the best mix. For me, it will be written in Scala, on Play Framework. There will be Akka actors to solve concurrency and fault tolerance. Drools to externalize complex and ever-changing business rules. And for storage it will be a mix. Probably Mongodb and Oracle/MySql. The project I am thinking about will solve problems of a  financial domain.

What kind of problems are being solved in an Enterprise Application?

And how they are solved?
For a banking application, a bank, account, customer, etc. entities are created to mimic the real world. It is the maker’s duty to simulate the business environment. Entities are the characters. And the actions need to be incorporated by this or that way. Then, users of the application will use it like puppeteers manipulate their puppets. These actions are recorded for calculation and reconciliation. System is there to precisely measure the deals, which are basically measurable human interactions for the sake of economic interchanges. And, essentially system is needed when volume of these interactions are huge. And, huge number of interactions is part of being an institution. Thats why an enterprise application is needed by institutions. So, there are two properties of institution’s actions because of which a system can mimic them and become useful. One, these actions have measurable properties. And, two, number of these actions are huge.
If it is logically expressible it can be replicated in a system. System makers’ task is to extract the necessary entities and right logic of the real world businesses, and write the code which will have the capability to mimic the actions as many times as needed
and produce the measurable effects with accuracy.
Note that, to the System makers, the job do not have any ethical color. Their job may end up helping to do something which will not in favor of the values they have, but that is always an indirect effect. Other than having this separation, the problems they solve
keeps them very busy. Among themselves, they have a competitive energy while solving these pure logical problems. Among the developers, they feel the joy of
being powerful and magical. And, they are well paid.

Like, object oriented programming, if one writing [class] talks about [deals with] more than one topic, then it is breaking a core principle. But, who cares?

Ethics is everywhere. Putting us into positions to be judged. People use it to defend themselves and attack others.

Challenge of an enterprise architect is to mimic the measurable and logical business interactions. And, for this, why transaction script is less useful for complex/bigger business problems and model driven design is more suitable? Why object oriented principles
are most suitable to mimic the business problems? Is it that, object oriented principles are most capable to capture the essential nature of business actions? Probably a philosophical investigation is necessary to justify this assumed claim.
Is it possible to identify different kinds of real world situations where, entities/identities are less important, and instead actions are the main concern [when one wants to simulate that situation] ?
Is it so that enterprise application is to serve self esteemation [to know my profit and loss] and clarification [so that I won’t be caught by the police] for an enterprise? And thats the reason why the design has to be entity-centric? To demarcate and maintain the
responsibilities of identities?
So, it is not the purpose of OOP to have the ability to capture the nature of ‘Business’ philosophically, but to serve the business practically. Here, philosophic is the synonym for better understanding and practical is the synonym for fight for existence.
Where as concepts of cohesion and coupling captures the urges to reflect the nature of identies, inheritance and polymorphism is there to maintain the categories and thus absorbing more control [from a central location?].

The Ideal Architect

“The ideal architect should be a person of letters, a mathematician, familiar with
historical studies, a diligent student of philosophy, acquainted with music, not
ignorant of medicine, learned in the responses of jurisconsults, familiar with
astronomy and astronomical calculations.”
—Vitruvius, circa 25 BC

Thick presentation tier for enterprise

If the user regularly uses an app,  and it is the main app he/she works with, it is important that it has got good responsiveness. And, for the main app, it is no big deal to install something locally, as long as one ensures remote deployment procedures, I see no reason, why not to have something more powerful, like a plain old desktop app? Well, there is ajax now, there is html5 on the door, and technologies like Flash and Silverlight. They are good or better candidates. Both ways must have their tradeoffs. But, a thick responsive client for a regular user – no miss for that.

If you are good enough to make a responsive client within your browser – no installation required, that’s good. But, do you really need to restrict yourself on that? There could be parallel options to choose from.