Me and my groupmates in college have a novel way of dividing tasks when doing our machine problems(projects). There are only two tasks in any machine problem, doing the programming and doing the documentation. Our problem is, nobody wants to do the documentation.  Those assigned to the boring task of documenting the project are those members that can’t program or the least in terms of programming skills.

What we did was that each of us code(make a working prototype) the machine problem. Whoever finishes first will continue coding and the other guy(s) will document. If you don’t want the stigma of being the documenter, code like hell and deliver a working prototype first. We got the incentives right. The best coder(s) will work on the project, the others document. We strive to be better. Not improving means being a documenter in future projects.

This is a stark contrast to what is happening in most software companies(or software arm of a company). Entry level developers wants to better. They study new technologies, languages, frameworks and design patterns. Then they become senior developers. Developers usually stop learning at this point. This is where people wants to start “moving-up”. Not as architects(or whatever technical position available that is higher than a senior developer) but as managers. Why? Because the incentives are not right.

What do you get from being a manager? You get a higher pay. You have the prestige of people working under you. And what do you need to do to become a manager? Gain experience in managing projects. Lead some people. Go to management trainings etc.

What do you get for advancing you technical career? A higher pay of course. You also set technical directions or be a technical guru. What do you need to do then? This is the painful part. You need to study more(technology, languages and even math). My friend and I usually joke that the more you try to be technically astute the more uncool you become. Studying takes time. And usually people would rather spend it on something else than reading a book on another programming language.

I’m not saying that managers don’t study and read. The good ones do. I’m going out on a limb here. To advance in a managerial career path is easier than to advance in a technical career path. Its easier to detect if a technical person is not good than to detect a bad manager. A successful project would not mean that the manager is good. The manager might be bad but if the developers are good they can pull it off. Vice-versa, an unsuccessful project does not mean that the manager is bad. I doubt if you can reason the same if we are talking about technical designs.

If we want people to advance* their technical careers, we must get the incentives right. If a higher pay and prestige can be obtained with less effort then who would want to advance their technical careers?

_________________________

I was actually thinking of posting this in dftf. But I feel it’s a bit incomplete.

Notes:

*Advancing is not the same as staying as developers.

August 14, 2007

Found this list(101 ways to know your software project is doomed) while surfing this morning. My favorites:
6. Your source code control system is a series of folders on a shared drive

I have seen this a LOT of times. I did this once. We do not know version control then. The last time I saw this I installed a SVN server.

9. You start considering a new job so you don’t have to maintain the application you are building

I experienced this twice. The second time I resigned. The hassle is not worth it. I have more important things to do.

12.Your team still gives a crap about its CMM Level

Good thing they never made me do those documents.

38.FrontPage is your web page editor of choice

I still like the color of the html editor Visual Interdev over Frontpage. I  never used the designer view of FrontPage. It generates bad HTML.

44.All debugging occurs on the live server

I did some debugging on the live server. :)

58.Management can not understand why anyone needs more than a single monitor

At least they never asked why we have Elsa Gladiac(GeForce 2) on our machines. Hehehe.. :p

65.Now it physically pains you to say the word – Yes

There was this time that I got scared everytime I hear my office phone rings.

75.You bring beer to the office during your 2nd shift

Hehehe…
83.You start wondering if working 2 shifts at Pizza Hut is a better career alternative

I did think of having an isaw stall.

92.Your manager substitutes professional consultant advice for a Magic 8 Ball

To CRS team: We never used the magic 8 ball for registration decisions right?

99.You are using MOSS 2007(Sharepoint Server)

I have no love for Sharepoint. Its hard to configure and its freaking slow.

July 18, 2007

Programmers should be trusted. If your brain surgeon told you the operation you need takes five hours, would you pressure him to do it in three?

-Scott Berkun

My manager and I had a talk last week. He was a bit disappointed that I do not know many things about the project. I do not know those change process and the number of those bugs in SIT. I just told him that there are too many emails and sometimes I don’t have the time to read it. The truth is I don’t really care and I don’t want to care. I want to concentrate on coding and designing.

The conversation dragged on. What he wanted was for me to do some other things not related to coding and designing. He wanted me to develop business analyst skills. And he wanted me to want it. He wants me to ask for it. It is some sort of a compliance technique. If I asked for it I will be responsible for it. If I ask for it I could not blame him if I have too many things to do.

He was a bit angry when he learned that: (1) I would not do extra work(business analyst work) voluntarily if it is not asked of me (2) I want to spend more time on non-work related things and (3) no plan to climb the corporate ladder. He also asked me what is my value in the team and why should they keep me. I wanted to answer that he should ask it to himself. The only question I need to answer is why would I want to stay.

—————————————————————

He also said that anyone can code. He is right. Anyone can code, but monkeys can also manage.

—————————————————————

*I got the title from xkcd.

To improve the quality of our code, aside from the usual code review of the owners of our application, we ran a code checker. One of the things that it caught is the use of System.out.println. Some of the designers wanted it to be replaced with log4j then configure it to output to console.

Since the application is meant to be run in the command line, I argued that System.out.println should remain because it is not a log but a console message(i.e. “usage: program_name <arg1> <arg2>”). A log, I argued, is different from a console message. Although we can configure log4j to do the same thing, I believe that it should not be used for console messages.

One of them replied that console is only one of the different outputs. And console messages, he argued, like logs tell something about the program.

I just replied:

A console message “can” but not necessarily tell something about the program.

public class HelloWorld {

    public static void main(String []args) {

       System.out.println(“Hello World!”);

    }

}

What do you think? Am I right in asserting that log4j should not be used for things that is not log related?

Coding Blues

April 27, 2007

I have been doing designer(software design) work for the last few weeks and one of my job is to make those SQL queries. One of the things that I wanted to revise was the stored procedure to update the main table. The data will come from the temporary table. If the data is not present in the main table, insert it. Otherwise, make an update. It was implemented using cursors(yuck!). So I created the SQL queries which looked like:

update main set …..

from temp

where temp.pk = main.pk;

 

insert into main(…)

select  …

from temp left join main on main.pk=temp.pk

where main.pk is null

 

 When I showed it to the developer he said that update-from will not work in Oracle. WTF!?! MS SQL Server has it. PostgreSQL has it. I don’t know why Oracle can’t have this powerful SQL extension. One of the few things that I like with MS SQL’s T-SQL is that its easy to use. Even MS SQL Server 7 has a join keyword which makes your SQL easier to read. In Oracle at that time you need to use the + operator. I was thinking that since Oracle is the bigger company they should have a better SQL language.

I did revise the earlier query but its a bit uglier.

——————————————————————-

One error that I keep on seeing is the improper use of random number generators. If for example you have ten choices and you need to randomly choose between them you get a number from the random number generator then from that number determine your choice. You should have something like the code below:

int num = random.nextInt(10); //gives a number from 0 to 9

if(num == 0) {

//do something

}  else if(num == 1) {

//do something

} ….

 But no. What I usually found in other people’s code was:

if(random.nextInt(10) == 0) {

//do something

} else if(random.nextInt(10) == 1) {

 //do something

}

——————————————————————-

One of the WTF questions that I heard a long time ago: “What is the basis of your randomization?”

April 17, 2007

I recently changed role. From a programmer, I became a designer. I suspect that its because of my English skills(among my colleagues only the more senior ones have good English) and not really my knowledge on the project and the framework we are using. With only five months into the project and no training whatsoever on the framework we are using, I doubt if I qualify to be a designer. I think they just needed someone to write the design specification They even assigned me to a different module of the project. Its was my first time to see those APIs and tools. Its not the skills that I don’t have but the knowledge on the API and on the problem domain. I am driving blindly at this point.

My first assignment was to revise a design specification. All is going well until the development stage. The developer did not obey the specification. He has some good reasons. I did made some mistakes like not checking if the static method is public and not reading the code thoroughly. But the others are really show-stoppers. They did not tell me that I can not use the old scripts because it is already not supported. They did never told me that the class that is supplying the connection to the database is also not supported. Its a freaking utility class that I assumed that I should not even care about its implementation. The developer who I was working with knows more about the what we are doing(warts and all). Compounding the problem is the fact that all of the knowledgeable developers are in a different location. The new programmers(we are only two here) are isolated. Knowledge flow is a bit limited.

Enough ranting for now. A lot of fire fighting is needed tomorrow.

Dreaming in Code

April 2, 2007

Software Engineering is something of an oxymoron. It’s very difficult to have real engineering before you have physics, and there isn’t anything even close to a physics for software.

-L. Peter Deutsch

I just finished reading Dreaming in Code and I highly recommend it. The book tries to answer the question: Why is software hard? The author followed the Chandler project in his attempt to answer the question. And I guess he succeeded in answering that question. Do not expect a solution though.

The author did not only chronicled the Chandler project but also gave some software engineering history, a little bit of what Python is and some other Computer Science concepts. A lot of software engineering literature(and people) is also quoted which I think is one of the best thing about this book. It gives you an arsenal of quotes(like the one above) when you have arguments with your pointy haired boss(PHB) or those big-M Methodology zealots.

Poetry and Software

March 29, 2007

Gabriel’s enthusiasm for the notion of programming as creative writing is not purely abstract; in the 1990s, he took three years off from his career to get an MFA in creative writing and to write a poem a day. He discovered that we ask more work of students who want to become writers and poets than those who aim to become software developers: They must study with mentors, they must present their work for regular criticism by peers in workshops, and they’re expected to labor over multiple revisions of the same work. “i think we need to be ashamed of this,” Gabriel says. “What we put forward as computer education is a farce.”

Got this paragraph from Scott Rosenberg’s Dreaming in Code. Richard Gabriel(who made the observation above) is a  Distinguished Engineer at Sun Microsystems and advocates Master of Fine Arts in Software.

The Switch

March 25, 2007

The only constant thing is change. There is only one thing constant in the CRS. In its history it has changed language, RDBMS, management and programmers. But there is only one part of it never changed. There were attempts to replace it but nobody succeeded(buhay pa din ang sumpa ni “EP”).

—————————————————

Rommel has blogged about the recent developments in UP’s registration system. While reading it I remember the phase when we were migrating from ASP(VBScript)/MS SQL Server to J2EE/PostgreSQL. It was one of the most tumultuous times in my life. I was thinking back then if we could actually pull it off. All of us were new to the platform and we need to maintain the old system in parallel plus I constantly need to go to meetings with the administration(which I find really draining).

While I do not like what the new UPCC administration did(switching platforms with flimsy reasons), I just hope them the best. It will be the students and UP’s pride who will suffer(so I have no choice but to wish them the best). I also hope that in the case something fails they should be man enough to take responsibility for their actions.

—————————————————

One of the things that I don’t like about UP’s administration back then is their insistence on real-time enlistment. While it makes for a good show the ROI is not that good. In a financially constrained organization I think it is better to concentrate on computerizing the OUR’s system.