I have to teach a senior programmer Java?

We’ve gotten a new hire today

We hired a senior programmer to replace a employee who resigned last month, it turned out he does not have the tech profile we need. We focus heavily on Java but this guy is a Web Developer according to himself. My boss request me to take care of him and I wonder how? I introduced him to our colleagues and have lunch with them together, in the mean while I tried to understand his profile because my boss didn’t invite me to the interview of this senior programmer.

He is a web developer and has a question mark on his face

I asked him for a brief summary of his technology profile and he replied: html/css/javascript/”Experienced with Java” ( whatever that means.. ) . I sat next to him and want to have a rough idea of his level. I asked him about Eclipse and Java, he keep saying he only has experience with Java in the university and he graduated like 3 years ago, since then he develop website and I don’t know how much he could do.

It’s beyond my imagination

I have never expected my boss to hire a guy who does not have working experience with Java and I wonder whether I have to teach him, because we use Java here and not javascript, Verdammt! Do I have to teach him what is MVC and data modeling? I am thinking whether I should give him an assignment which require him to write some looping in order to check that he really knows programming.

I have stomach ache in the afternoon because of my increased responsibility. I am not in a role with require management of staff, I am not saying I can interact with human, actually I chat with my colleague regularly about daily stuff, but I am not teaching them about programming.

 

If I have a choice

I would fire him because it is obviously a mistake in recruitment. It’s better to deal with it earlier than later. But I am not in the position to suggest such thing. I have reflected this issue with my boss and he would decide.

I have to maintain the software I wrote 8 years ago

There is no keywords or meaning in this post, I only write it for reflection.

I am working with the same company which I worked for 8 years ago, despite I left it 2 years in between. Recently, I was told the GM want to abandon using WebSphere as a j2EE container and want to estimate the effort to move the application to a freeware.

8 years ago I wrote that simple Java Servlet application and they decided to use a fully fledged WebSphere server as a container. I thought it was overpowering for such a simple task but who was I to say no when management had decided to dump money to IBM just for security in mind? It was a simple application which display a pdf mobile phone bill upon any request.

Well, it replaced HP’s solution

The web application was intended as a contingency/backup for HP’s solution, it turned out that HP’s software had performance problem and they couldn’t fix it. My web application became the regular player on the field. It work as intended for 8 years.

Being an experienced programmer

Although it is a simple application that TomCat could easily power, but we still have to go through everything formally. That mean drafting a fallback plan and a deployment plan and probably parallel run.

This is the burden of being an experienced programmer. If I have been younger, sure I would want to boot it up with tomcat right away, but it’s now, not 8 years ago. Management loves it when you say you have a plan, and a fallback plan.

Coding Horror – C code in disguise of Java

There is huge demand for software developers in the market but there are not enough candidates which fits the requirement of company. Thus, on and off there would be some developers who has coding issue, were hired. Today I would share some bizarre code I have seen in workplace.

Let’s start with conclusion, “He/She is a C developer instead of a Java developer. He/She is writing C code while pretending it is Java.”

The case is this: we need to generate several reports with data from database. Let’ say there are 10 reports. Here is some strange code I’ve seen, it is not the real code, I have change it and omitted some detail which is related to company’s business:

private final static String[][] titles = { {“Column A1”, “Column B1”}, {“Column A2”, “Column B2”}, {“Column A3”, “Column B3”} ,{“Column A4”, “Column B4”}, {“Column A5”, “Column B5”}, {“Column A6”, “Column B6”}, {“Column A7”, “Column B7”}, {“Column A8”, “Column B8”}, {“Column A9”, “Column B9”}, {“Column A10”, “Column B10”}};

Who use two-dimensional array for String? In this case, the column headers for each reports are not related to each other so they should not be in an array. An array is used for data which has order relationship, of the same type. This developer just use two-dimensional array for convenience. Also, there configuration stuff should be put in a configuration file so that later when we change the column header, we don’t have to compile the code again.

BufferedWriter[] bfwList = prepareBufferedWriter();

Come one, what is this? Same argument as above.

 

genReport1(bwList[0], dao);
genReport2(bwList[1], dao);







genReport10(bwList[9], dao);

This part is where the real work happens. It’s pain to see he/she passed a BufferedWriter to a method. It’s illogical and not necessary. To be honest, I won’t declare a BufferedWriter outside of the method. I would prefer this:

public void genReport( String filename );

The BufferedWriter I would create INSIDE the method with the provided filename ( with actual file path ). I don’t pass a DAO ( data access object ) around. The DAO should be a class member of the service class in which this method belongs to so that it already has access to the DAO.

In conclusion, it is not object oriented programming, it is a C procedural programming disguised in Java.

 

What I do in my company

Cyberport, where I started working

I have been working for the same company for quite a long time( 5 + 1.5 year with a short duration out of the company ). I have to do whatever the SSAs ( Senior System Analyst ) want me to do. When I just started out, he want me to code some COBOL, which they had a lot in the mainframe. I had only learnt C and Java in university, so something like COBOL was really annoying ( just that ).

 

Here is a sample I took from the web ( University of Lemerick : http://www.csis.ul.ie/cobol/examples/default.htm#SimplePrograms ) :

$ SET SOURCEFORMAT"FREE"
IDENTIFICATION DIVISION.
PROGRAM-ID.  SeqReadNo88.
AUTHOR.  Michael Coughlan.
* An example showing how to read a sequential file without
* using condition names.
* See SeqRead.CBL for the definitive example.


ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT StudentFile ASSIGN TO "STUDENTS.DAT"
		ORGANIZATION IS LINE SEQUENTIAL.

DATA DIVISION.
FILE SECTION.
FD StudentFile.
01 StudentDetails.
   02  StudentId       PIC 9(7).
   02  StudentName.
       03 Surname      PIC X(8).
       03 Initials     PIC XX.
   02  DateOfBirth.
       03 YOBirth      PIC 9(4).
       03 MOBirth      PIC 9(2).
       03 DOBirth      PIC 9(2).
   02  CourseCode      PIC X(4).
   02  Gender          PIC X.

PROCEDURE DIVISION.
Begin.
   OPEN INPUT StudentFile
   READ StudentFile
      AT END MOVE HIGH-VALUES TO StudentDetails
   END-READ
   PERFORM UNTIL StudentDetails = HIGH-VALUES
      DISPLAY StudentId SPACE StudentName SPACE CourseCode SPACE YOBirth
      READ StudentFile
         AT END MOVE HIGH-VALUES TO StudentDetails
      END-READ
   END-PERFORM
   CLOSE StudentFile
   STOP RUN.

We had a lot of flat file which were fixed length, delimited by each fields’ length. Now I primarily code Java, but I remember COBOL has verbose syntax and wasn’t as powerful as modern day programming language. I even had to implement my own function to reverse a string!

I have coded C in their roaming system and it wasn’t standard C, but a ASN.1 C from OSS Nokalva¬† ( http://www.oss.com/asn1/products/asn1-c/asn1-c.html ). I did an version upgrade for their TAP3 file ( a file standard for roaming partners to exchange customer usage data ) exchange program, which was required by GSMA ( https://www.gsma.com/ ). I had chewed the whole TAP3 specification upgrade difference and changed the programs accordingly.

Now I code java for different system in this company. Recently I am working on plugging an auto-pay system into a brand new system provided by our partner for the digital transformation project of our company. ( They want to replace the old mainframe system written with COBOL )

Let’s continue later.

Why I started this blog

Photo by Clément H on Unsplash

I have been a software developer in Hong Kong for almost 8 years. Software developers are sought-after right now but I did not intend to jump for a higher salary. I am the ordinary developer who fix stuff quietly over the years. I have seen juniors who came in after me, leave sooner then me.

I haven’t maintained a solid profile on the internet, I didn’t have the need and do not have the time after work. I could not put programs I worked in company online just to show off, but I am tired as ____ after work. I want a work life balance and my current job somehow gives me this.

A dear friend asked me if I want to come over to Berlin, where I once lived and like. His/Her friend pointed out my profile is vague, I hate it and I really want to come over so I started working. I would show some computer stuff. It’s going to be simple but could shows I have minimal qualification for a developer. I am going to orchestra the whole thing including infrastructure, development and deployment.

I would update this site slowly, with random post. I would document my journey to make this work of proof.

P.S. Information for English speaker, The domain of this blog, rayentwickler is composed of Ray ( my name ) and Entwickler, which is a German word for Developer.