• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

What Should a Good Enterprise Java Developer Know

 
Joseph Sweet
Ranch Hand
Posts: 327
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
An excerpt from here.

I�ll just quote the list, to make it more clear:
* You need to be proficient in object-oriented analysis and design (OOA/D), design patterns (GoF, J2EEDP), and integration patterns. You should be intimately familiar with UML, especially class, object, interaction, and state diagrams.
* You need to learn Java the language and its core class libraries (collections, serialization, streams, networking, multithreading, reflection, event handling, NIO, localization, etc.).
* You should understand how the JVM, class loaders, and garbage collector work in general. You should be able to decompile a class file and comprehend basic byte code instructions.
* If you�re going to write clients, you need to learn applets for the web and Swing, AWT, or SWT for the desktop. You should also be familiar with the JavaBeans component model for UI widgets. JavaBeans are also used in JSP to isolate business logic from the presentation tier.
* You need to learn the JDBC API and how to use at least one persistence/ORM framework like Hibernate, JDO, CocoBase, TopLink, or iBatis. You also need to understand the implications of the object-relation impedance mismatch, how it will affect your business objects� interactions with a relational database, and its performance consequences.
* You need to learn about the Java sandbox security model (class loaders, byte code verification, managers, policy and permissions, code signing, digital signatures, cryptography, certification, Kerberos, etc) and the various security/authentication APIs, like JAAS (Java Authentication and Authorization Service), JCE (Java Cryptography Extension), JSSE (Java Secure Socket Extension), and JGSS (Java General Security Service).
* You need to learn Servlets, JSP, and optionally JSTL (Standard Tag Libraries).
* You need to be familiar with popular web frameworks, like JSF, Struts, Tapestry, Cocoon, WebWork, and their underlying design models, such as MVC/Model2.
* You need to learn how to use and administer web containers, like Tomcat, and how to deploy and maintain web applications on them.
* You need to learn about distributed objects and remoting APIs, like RMI and RMI/IIOP.
* You need to learn at least one XML API, like JAXP (Java API for XML Processing), JDOM (Java for XML Document Object Model), or DOM4J.
* You need to learn how to build Web Services using Java APIs and tools, such as JAX-RPC (Java API for XML/RPC), SAAJ (SOAP with Attachments API for Java), JAXB (Java Architecture for XML Binding), JAXM (Java API for XML Messaging), JAXR (Java API for XML Registeries), and JWSDP (Java Web Services Developer Pack).
* You need to learn a lightweight application framework, like Spring, PicoContainer, Avalon, and their IoC/DI idiom (setter, constructor, interface injection).
* You need to be familiar with various J2EE technologies, like JNDI (Java Naming and Directory Interface), JMS (Java Message Service), JTA/JTS (Java Transaction API/Java Transaction Service), JMX (Java Management eXtensions), and JavaMail.
* You need to learn about Enterprise Java Beans (EJB) and their various component models: Stateless/Stateful Session Beans, Entity Beans (with Bean-Managed Persistence [BMP] or Container-Managed Persistence [CMP] and its EJB-QL), and Message-Driven Beans (MDB).
* You need to learn how to manage and configure a J2EE application server, such as WebLogic, and utilize its add-on services, like clustering, connection pools, and distributed transactions support. You should also learn how to package and deploy applications on it, and be able to monitor its performance and tune it.
* You need to be familiar with Aspect Oriented Programming and Attribute Oriented Programming � both are confusingly abbreviated as AOP - and their popular Java specifications and implementations, like AspectJ and AspectWerkz.
* You need to be familiar with various utility APIs and frameworks, like Log4J (logging/tracing), Quartz (scheduling), JGroups (network group communication), JCache (distributed caching), Lucene (full-text search), Jakarta Commons, etc.
* If you�re going to interface or integrate with legacy systems or native platforms, you need to learn JNI (Java Native Interface) and JCA (Java Connector Architecture).
* You should be familiar with Jini technology as it relates to distributing systems.
* You should be familiar with the Java Community Process (JCP) and its various Java Specification Requests (JSRs), like Portlets (168), JOLAP (69), Data Mining API (73), etc.
* You should master a Java IDE, like JetBrains IntelliJ IDEA or Eclipse. (Some people prefer vi/emacs with make files. Whatever makes you tick!)
* Java is verbose and requires a lot of code artifacts (e.g. EJB); therefore you should be familiar with code generation tools, like XDoclet.
* You need to be familiar with a unit testing framework (JUnit) and learn various build and deployment tools (Ant, Maven).
* You should be familiar with several software engineering processes commonly used in Java development, like RUP (Rational Unified Process) and Agile methodologies.

Aargh! Kill me!
 
Edvins Reisons
Ranch Hand
Posts: 364
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Joseph Sweet:
Aargh! Kill me!


Do you mean that you know too much?
 
Dirk Lombard
Greenhorn
Posts: 18
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Then you should quickly forget it all and learn C# and .NET because Java can not deliver. Every day a new framework is created that has some strong points and some weak point. Business does not care about technical issues they want you to deliver applications to get a strategic edge on their competitors.

The later you can not do if you have to learn a new framework each month. You will have a great general knowledge but you can not be an expert.
 
Paul Sturrock
Bartender
Posts: 10336
Eclipse IDE Hibernate Java
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Dirk Lombard:
Then you should quickly forget it all and learn C# and .NET because Java can not deliver. Every day a new framework is created that has some strong points and some weak point. Business does not care about technical issues they want you to deliver applications to get a strategic edge on their competitors.

The later you can not do if you have to learn a new framework each month. You will have a great general knowledge but you can not be an expert.


Hmm. Not sure I'd agree. What the list above shows is to be an "enterprise" developer, you need to be aware of much more than simply a programming language. Assuming you are a fan of Windows you still need to be aware of most of what is listed above, only the Windows/.NET equivalent. Enterprise development is less about specific languages, products, frameworks etc. and more about common problems and understanding how to solve them. I'd argue that to be a good enterprise developer you need to know about a lot of what is posted above and have more than just a passing aquaintance with .NET.
[ August 06, 2007: Message edited by: Paul Sturrock ]
 
Dirk Lombard
Greenhorn
Posts: 18
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I am not a C# developer. The point is while the Java community try to sort out what will be the be the "next best" thing the .NET guys are delivering projects.

What will win? Will be JAVAFX, JAVASCRIPT with AJAX, Spring framework or J2EE and JSF, and what to use EJB3, Hibernate, iBatis etc. and then there is the different Portal implementations by different application servers. Is the new web service spec out? You move from one company to the next and your experience is cut in halve. I loved Java and studied hard to learn a lot of different frameworks and certifications but the company I work for has decided to move over to SAP and C#. All the hard effort means nothing now. It is just start from scratch. The C# .NET guys actually become experts and just build on a familiar framework.
 
Tony McClay
Ranch Hand
Posts: 33
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Dirk Lombard
I am not a C# developer. The point is while the Java community try to sort out what will be the be the "next best" thing the .NET guys are delivering projects.

What will win?


Dirk you have a very very good point. Delivering projects is what counts. The art of building projects better, faster, more structured, etc etc. is why most of us are here. Besides business has a way of continually evolving, and so must our skills and our tools.

If you believe everything you will ever need will come from any one company, I'm not in a world you live in. My businesses change and projects change. And when my primary vendor can no deliver what I need, I find what I need from many other people who may have had a similar problem or build it myself. (Hopefully in a way I can share it with the rest of the development community, in case some else has a similar problem, and what build can help them.

What you see is bickering, or arguing between development groups is really coming to a consensus, and toning the tools for specific purposes. In a non-platform specific example that Java and .NET shares, the SAML 2.0 specification, is a combination of the Original SAML 1.0 Specification and the Liberty Alliance Specification. Both talked and discussed and agreed to find something more common so that we all benefit from it.

In th end, it means I have a bigger bag of tools to solve problems. I also understand why one tool is better to use in a certain situation over another. Example: Struts, JSF, Spring: All of which has thier strengths and meeknesses. I feel better making a choice about what is being created than having it dicated to me.

In .NET's defense everyone doing .NET, does it the same way, which is good for consistency. Java is sometimes like the wild, wild west if you don't have a good marshal. But I have heard of some scary C# code in some shops as well.

I just don't believe in the one size fits all - solution. My opinion.

But still good points Mr. Dirk Lombard. In my opinion there is room for both. I actually think it is healthy. I am not sure if Java generics would ever have made it without the push from .NET. But obviously it was a very very good move. The future is bright for both.

I also believe most of these decisions are made on the golf field than in an IT Lab.



Tony
Sun Certified Web Business Component Developer
Sun Certified Web Components Developer
Sun Certified Programmer for the Java 2 Platform
 
Tony McClay
Ranch Hand
Posts: 33
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Opps... concerning the original posting ...

That is a very long list, but I think you should not strive to study the complete list. In most cases those items will seek you out in time. Another way to say it, as you have a problem and start to look for solutions, most of those items will become natural solution options.

Besides certifications, if you choose that path, personally I don't think you should learn new things unless you want too but not for the sake of saying you know it. Theses products/ ideas only make sense when you have a context to relate the problem, product and solution. Only than will you appreciate the concept of their purpose and their existence and becomes clear.

Besides, many of those concepts are the same no matter what language you use, and goes as far back as Smalltalk.

Maybe, I should start a chant or something.

Tony
Sun Certified Web Business Component Developer
Sun Certified Web Components Developer
Sun Certified Programmer for the Java 2 Platform
 
Jimmy Ho
Ranch Hand
Posts: 61
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
There are also more and more tools that come out to automate a lot of the above aspects. These days, you don't need to manually construct long String objects to output a SOAP envelope, or write your own complicated XML schema to mirror some Java data structure. A lot of it is just understanding the technology reasonably well, right-clicking on a WSDL file/JavaBean/whatever, and choosing "Generate Web Service Skeleton from WSDL" or "Generate XML Schema from JavaBean", etc.

Thank gosh for tooling...
 
Ulf Dittmer
Rancher
Posts: 42969
73
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I agree with Paul that a LAMP developer or .Net developer needs to know about just as much. Furthermore, a passing knowledge of many items in that list is sufficient, unless that technology or library is actually used in the project.

I'd be interested to hear about projects that make use of all of those; I doubt there are many of those around.

You might also have quoted the disclaimer at the bottom:
Java is a good platform to develop software for and with. It�s really not that bad as I make it look. On top of that, as I said in the introduction, every language sucks in a way: C# sucks, C++ sucks, Python sucks, Perl sucks and most of all: PHP sucks.

[ August 22, 2007: Message edited by: Ulf Dittmer ]
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic