July 2004 Archives

Pathetic service

| | Comments (0)

Maybe I am too headstrong, but I have found that QoS (Quality of Service) - in this country at least - is absolutely pathetic.

As an example, take my car. I took it in for a service about three weeks ago. For the service I mentioned that I experienced an intermittent vibration when the car is idling. They duly jotted this down and said they'll have a look (my car is still under guarantee). That afternoon (after I phoned them - they forgot to phone me) they informed me that they had to order some parts (cannot remember what exactly) since they did not have it in stock and that was causing the vibrations. As I am a quite understanding person, I accepted this and booked my car for the next week.

Come the following week, I took my car in and later that afternoon I received a call that it was ready and all fixed. Happy about this I drove through to Pretoria and picked up my car. I barely drove 10 meters when I immediately realised the window was not working anymore - at least the automatic mode where you push the button for a second and it keeps moving until it is either closed or open. I had to keep the button depressed. I took it back only to hear the technician make a comment about the window being like that when he worked on it this morning. So I asked him whether he implied I broke it? He just mumbled.

After waiting for almost an hour they came back saying they can't fix it and will call headoffice to find a solution.

Today I realised the idling vibrations has not been fixed at all, and that I now have a new problem plus my original one.

I can carry on like this about many other instances too, the question however is why has this become such a problem? Today I experienced the complete opposite. My Miele gas hob has a iron cover, and it exploded from the heat. I took it to their service centre, and within 10 minutes I had a new cover replacing the broken one, with the service person telling me this was never supposed to have happened. No questions, no forms, nothing. Just brilliant service. Couldn't everyone be like this?

Followup on FOSD

| | Comments (1)

I just came across this article and was shocked - even though I knew this is how most people view software development. Look especially at this quote:

On the other hand, you could encourage your students to have a more polished approach within the language, suggesting not to use primitive types, and to use methods instead of operators wherever it's possible.

Out goes performance and resource consumption... It is completely ignored. Irrelevant. Why? Because our computers are so powerful. So why worry about performance and resource usage if our code takes 100ms to execute instead of 10ms, or uses 64bytes of memory instead of 4bytes?
It saddens me to say, but I think we have lost a great generation of software developers somewhere during the past decade.....

Many times I find myself wondering about the future of the way we develop software currently. I guess if you ask different people their opinions you'll get just as many different views.

Back in the good old days we used to use punch cards to feed into the machine, from which the program is read and executed. Each time you want to execute a program, you have to load it using the punch cards again. Lateron came assembly language, where at least you could express yourself at the level of the CPU's opcodes, and save the programs for execution in an assembled, linked state called an executable application.

People used to build highly sophisticated systems using the archaic assembly language, under which operating systems, big parts of the original Windows NT kernel, etc. are examples.

However people soon started realizing that Assembly is way too time consuming, error prone and required a skillset that was extremely scarce, in order to productively and economically produce software. Therefore a higher level language called FORTRAN was invented, followed by Algol, CPL, Simula, PL/I, Logo, Pascal, C, C++, Java etc. The general trend in these languages seems to provide better productivity by easing the development of software systems. Take C++ as an example. It was built on top of C as an object oriented extension originally called C with Classes. One of the motivations was to enhance programmer productivity by providing a bit higher level of abstraction to the by then common procedural (algorithmic) approach.

Many languages today support object oriented techniques, such as Delphi, C++, Smalltalk, Java etc.

Some languages went a different route, called functional programming. One such language is Erlang. Other languages try to capture the essence of AOP (Aspect Oriented Programming). Neither one of the latter two are really in mainstream use today.

Whichever way, languages are only a fraction of the complete development effort. To support the developer in writing software, it was soon discovered that many tasks are repetitive, such as finding the length of a string, opening a file, connecting to a TCP/IP socket etc. So the concept of a library was born. A library contains a set of commonly used routines that developers just links in with their code, to have available all the wheels that had been previously invented without wasting time and effort trying to reinvent it. They come in many shapes and flavours, such as DLL's (Windows), .so (Unix), COM/COM+ (Windows), etc.

Nowadays libraries seem to be old fashioned for some strange reason. The hip words are "frameworks", "interceptors" etc. Frameworks are inversion of control systems, that provide all the core infrastructure in which you just fill in the gaps. This obviously has its advantages such as maintaining a common programming paradigm for all related software projects, less code to write, making use of good design principles etc.

With all this going on, I still truly believe that we are on the wrong track. Why? Because I believe it is more difficult these days to built a software based system than it was 10 years ago. I know that today's systems are much more sophisticated in many aspects, including features such as being distributed, scalable, internationally accessible, 24/7 uptime requirements etc. Nevertheless I believe it is possible to ease the process of software development significantly.

Take J2EE as an example. I have developed several systems using J2EE as architecture. Did it ease my development efforts? Nope. I don't think so. To develop a simple rebates calculator, it took 1 year from a team of 6 people, a budget of approximately $500,000.00, approximately 60,000 lines of code, 450 classes, 20 XML deployment descriptors and months of testing. I am pretty sure it would be possible to create such a system in at most 1 month, by 2 people on a budget of $30,000.00 if we had better supporting technologies around us.

Would JavaServer Faces help? EJB 3.0? AOP? J2SE 5.0? I doubt. They all just add complexity. Take Entity beans as an example. Many people believe it failed as it was too complex to work with, with bad performance to boot. So EJB 3.0 is supposed to simplify it. I am very sceptical whether JCP will succeed, since everything the past two decades revolved around increasing complexity.

Things are getting so complex, that with me spending the better part of 16 hours per day developing software using J2EE for the past two years, I still only know about 30-40% of J2EE. With that amount of complexity, how can anyone learn more technologies and techniques than just one (proprietary) technology? So gone are the days where we could say we know C, C++, Assembly, Pascal, Delphi, Java, Visual Basic etc.

Jumping back a bit into my discussion, why is web development still so complex and involving? Take a simple scenario - have a login screen, authenticate user (and allow him to change his password if it had expired), and allow him to add/edit/delete/view something. This requires at least 5 different JSP pages, lots of classes, DB tables, JBoss/WebSphere/Tomcat/etc set up and configured, Apache installed etc. It will take at least a day to start from scratch, get that up and running and tested. It is way too difficult! That task should have taken no more than 30 minutes. It is now more than a decade that we are using interactive web applications, yet there are no magical solution to this area of software development.

I am sincerely ashamed of the software community (me included). We should have came up with a better solution to writing software a long time ago - we need a paradigm shift soon