Java developer vs. software engineer is discussed quite often. One of my friends kept telling me what would “Javacı” do for certain problems. “Javacı” is a de facto word which means a person who deals with Java or a person who writes Java programs. “cı” part comes from Turkish and makes the word to correspond to the meanings described above. Throughout this post, I’ll use Javacı and I’m sure you know what it means by now. Anyway, I am nor the expert in talking in this versus nor have enough background to cover necessary material. Hence, I’ll provide subjective and personal reasoning to this topic. Bare with me if you’re still interested. I’ll tell short stories.
Story #1: “I do not like Java because of the resource consumption.” That’s an interesting argument but it was so true because of his bad experience. The reason behind this observation can be Java’s default behavior where it generally does not return back the resource once it takes, coders’ inability to write correct code and last but not the least JVM, which needs extra memory and CPU to do some cool stuff like garbage collection. Two of these are expected(we call it a cool feature) and the other is a worldwide quality problem.
Story #2: “JVM is not good enough because nobody understands how to tune it”. Ahh, most certainly people who ship their code to production environment should be able to tune JVM? It’s not that hard, you need to figure out some parameters e.g. garbage collection in general and it’s not rocket science.
Story #3: “Which cache would you choose: Memcache or Ehcache”. I’ve answered “Memcache??? Actually, I’m quite unsure, it depends on the circumstances a lot”. He did not expect me to say Memcache because I was Javacı and the default behavior of a Javacı should be choosing Ehcache over Memcache no matter what. That was the behavior that he experienced before.
Long story short, my dear friend had coped with really cool guys who write Java programs. They were so good that they did not know how to write regular code, tune up JVM and do simple math to assess the options. Interestingly, most of these Javacı guys have probably computer science background. He also preferred guys who don’t have any background in computer science over those who have the background in computer science. Guess what, this preconceived opinion is formed because of our Javacı guys.
We had really long discussions. Why did Javacı guys fail to do cool stuff and they even did affect my friend in a bad manner? I took the time to think about the origin of the problem and I’ve ended up with two potential reasons:
1. Lack of self-development
2. General engineering practices
The last story made me eliminate the 1. option since these guys know the technology but they made their choice blindly. So, the problem occurs because of Java developer vs. software engineer dilemma. If the Java developer would apply engineering practices, he will become a software engineer. Ok, but how different a software engineer from a Java developer? Here is how I describe it.
Java Developer is a person who is expected to produce Java code of a computer program. S/He knows how to write code, can understand an algorithm and follow specifications. Moreover, he keeps ups with new Java technologies. Basically, java developer knows how to do stuff in Java.
Software Engineer is a person who covers every aspect of the manufacture of a whole product. S/He can work from requirements to design, implementation, and testing. Most importantly, he is not obsessed or dependent on certain technologies, platforms and etc. S/He applies appropriate and well-assessed solution considering various parameters that influence the overall production.
In brief, a software engineer would code in C++ whereas a java developer would not. Essentially, a software engineer may write in Java but should not constrain or deprive him/her of other options. Here’s the call for the Javacı guys who have a computer science background. Please stop being only Java person, consider the other options and be awesome instead…