Saturday, October 9, 2010

Career Guide For Java Developer

One of the most frequently asked questions about web application development using Java goes something along the lines of,

Beginners Guide
"I am interested in becoming a Java developer, but I don't know where to begin. There seems to be so many technologies in the field of web development that I feel lost. How do all these technologies relate to each other, which ones do I need to learn in order to be considered a serious professional, and which one should I learn first?"

However, there is no single answer to these types of questions and truly no unique set of technology which can address all requirements of an web application using Java.

This article’s focus is on those who are trying to make their first step into the IT industry and for beginners who wish to find the right guidelines (set of technologies to master) while developing Java based web applications.


The basic requirement is sound knowledge in the following areas.

1. Web and Java (www.java.com) fundamentals
  • Internet working principles, HTML, CSS, JavaScript
  • JDK, Servlet, JSP

2. Even though one could develop a web application using JSPs and Servlets, mastering a web application framework like Spring (www.springsource.org) or Struts (struts.apache.org) is recommended. Framework aims to minimize the overhead associated with common activities performed in web development like security, database access, session management and often promote code reuse

3. Relational databases are generally the preferred choice for storing application data. Relational Database Management Systems (RDBMS) help to organize, store, and retrieve the data in a very efficient manner. Since Java applications traditionally uses the JDBC (Java Database Connectivity) API to persist data into relational databases, clear understanding the basics of Relational Database Management Systems like Oracle (www.oracle.com) or MYSQL (www.mysql.com) and JDBC is essential.

4. Integrated Development Environment (IDE) like Eclipse (www.eclipse.org) provides comprehensive facilities for faster and efficient software development and is always preferred over others.  An IDE consists of source code editor, compiler, build automation tool and debugger together in a packaged form and provide a favorable environment  for development.

Mastering the above technologies, equips you with the required minimum skill sets but it doesn’t mean you would be getting a job in IT Company simply.  Many people fail miserably in job interviews when it comes to presenting their strengths in right manner. So, work on your soft skills especially communication skill which will give you, an ability to express your ideas clearly and effectively.

Once the basic requirements are met one could add the following technologies to move up the ladder.

5. Even though Java applications could uses the JDBC (Java Database Connectivity) API to persist data into relational databases, persistence frameworks that provide a layer of abstraction between the Java application and the database is preferred by most development teams. Since persistence framework simplifies the development process by providing a wrapper around the persistence logic, mastering any one persistence framework like Hibernate (www.hibernate.org) becomes desirable for java developers.

6. Understand the basics of Java Application Server like JBoss (jboss.org) and servlet containers like Apache Tomcat (tomcat.apache.org) as they provide the run time environment and middleware services for the deployed application in production environment.

7. Version control is a critical aspect of any software project, and its importance should not be underestimated. Version control systems serve several key purposes. First of all, they allow you to safely store successive versions of your source code. In addition to providing a secure backup copy of the source code, this ensures you can step back to a stable version when things go drastically out of control. Version control systems also help team members to work simultaneously on code without stepping on each other's toes. So understanding a Version Control System such as Subversion (subversion.tigris.org) and its vital functions during software development is helpful.

8. Substantial amount of developer’s time is spent on automating tasks which will ease the development. Even though IDEs automate much of the work, many developers look to an external tool to assist critical activity; the build process. Build tools automate many tasks which a software developer  encounters while developing, compiling, testing, or deploying applications. So a good understanding of build process and build tool like Maven (maven.apache.org) or Apache Ant (ant.apache.org), which takes much of the hassle out of the build process and the maintenance of complicated build scripts is desirable.

9. Frequent testing during development is one of the practices growing in popularity in IT industry now. It provides a powerful approach for combating the inevitable continuous change of  inputs in software projects. But this simple mantra “unit testing” is much easily said than done. In the past major obstacle for implementing “unit testing” was the lack of an excellent  testing framework. Now with  the availability of many “unit testing” frameworks like JUnit (www.junit.org) and many flavors of XUnit , providing the basic plumbing for developers to quickly generate whole test suites that validate their programs with the click of a button, implementing “unit testing” in Java has become  simple.

Want to climb further, work on the following areas

Continuous Integration
10. One of the most significant problems in software development is ‘assumptions’. Assumptions like, a method will pass the required parameter value, or a particular configuration value can lead  to a situation where a developer has to spend precious development hours needlessly tracing  items which don't exist. Assumptions in software development often results in considerable wastage of time and add to risks. Continuous Integration (CI) can help to reduce assumptions associated problems on a project by resorting to rebuilding software  frequently.(whenever a change occurs as logged by version-control system) The benefit  arising out of CI has been proven beyond doubts and  thus it has become the De Facto software development practice for all projects. Spending some time on the non-glamorous fundamental activities and use of CI tools like Continuum (continuum.apache.org) will provide ample time for important and visionary activities.


11. A code review is a useful exercise that helps to ensure code quality but checking thousands of lines of someone else's code for items like un-reachable code, code indenting, Java doc comments, and naming conventions can be a real pain. To make matters worse, code reviews are typically constrained by tight project schedules. There is never enough time for detailed evaluation of code. Despite the best intent of the reviewer, optimization and logic checking take a back seat. Code reviews often become just an exercise in code beautification. Tools like FindBugs (findbugs.sourceforge.net) which examines class and JAR files, PMD (pmd.sourceforge.net) which scans Java source code for potential problems and Checkstyle (checkstyle.sourceforge.netare the real boon to code reviewers. Able team lead leverages these tools to measure and monitor the entire codebase, thereby controlling and ensuring system quality throughout the development lifecycle.



12. Give a try to Automated Funtional Testing tools like Canoo WebTest (webtest.canoo.com) and Selenium (seleniumhq.org)

Never the less these are not the only frameworks, tools and libraries used by all IT companies to develop Java based web application. Neither the only ones in the identified category. But this step by step approach provides a good starting point for the new entrants.

Monday, October 4, 2010

Unstoppable forces: Cloud and Mobile computing

The increased use of Web for day to day tasks is making accessing web-based services an essential part of everyone’s life. The demand for accessing the services through mobile devices is also rapidly increasing. This is due to factors like ubiquitous Internet access, advancement in wireless technology and widespread availability of low cost mobile devices.

This is show cased when Apple's iPhone sparked an explosion in consumer awareness of mobile application’s usage. New applications are proliferating and "application stores" are springing up. But these applications need mobile devices with robust computing power, limiting their potential use.  In a few years time we can expect a major shift from traditional mobile application technology to mobile cloud computing.

Mobile Apps powered by Cloud
Cloud computing will bring unprecedented sophistication to mobile applications. Cloud network services are quickly becoming a tremendous force in the mobile ecosystem, offering almost unlimited storage and processing power. The number of mobile apps based on Cloud is growing at exponential rates, and industry analysts predict enormous growth for this sector. 

The cloud brought with it a couple of interesting dimensions. First, it required everyone to get used to internet. Anyone who wanted to make use of cloud has to accept computer networks. One of the downsides of cloud computing is that it's dependent on connectivity.    No connectivity, no cloud. 

Fortunately, these days, connectivity issues are few and far between.  However, one have to consider the risks involved in leveraging networked computing model, inclusive of cloud computing.    When, you manage the risks systematically,   there is nothing to worry about.

Future outlook
Joshua Jewett, CIO Family Dollar Stores chain predicts "Either you consciously build cloud and mobile systems or you're reacting to forces of the world which will surely push you down that path,”