open source initiation - continued

Continuing with my open source initiation, I am still preparing with setups and tools installation for couple of projects hoping that I will use them and learn – hope it will not end up like a preparing and rehearsing for a marriage only to find out that it is not going happen.

Anyways, just putting down the tasks, notes and my thoughts so that this will serve as my future reference:-

- Installed WinSCP as the file transfer tool and WinCVS for CVS client. I am still working from WinXP machine; hope someday I will be able to repeat such installation for a Linux machine.

- Installed Oracle JDBC drivers, this time a new jar (for 9i). I had
worked with classes111 and classes12, but didn’t know that a new one, ojdbc14, has come out. I am sure even that has been overridden by 10g drivers. Another generation gap thing going on.

- Installed Maven 1.0.2, build tool. I am still overwhelmed with the number of frameworks churned out from Apache project; it will take some time to get my head around these. Often I find that reading through user guides which starts from bottoms up or dwells too much on details is a slow process to learn. Maven had a Ten Minute Test which gave me some idea about what is involved and now I have a peace of mind that I have understood something and can go back and fill in the gaps as I need.

- There seems to be too many jar files around which I know too little about and that worries me.

- Installed Java Advanced Imaging API 1.1.2_01 and Java Image I/O Tools 1.0_01 and read the top two paragraphs from documentation, more study required.

There are some more terms which come up too often which I don’t have much idea about, but may be good to add to my general knowledge – md5 checksums, JTS, Velocity, Subversion and Turbine. I have a general idea about JUnit and Ant, but haven’t used these – again something which I need to read some more about.
grown up

Today morning, in context of a session, following was presented by a colleague:-

According to a UCLA study, at age five, we engage in creative tasks 98 times a day, laugh 113 times, and ask questions 65 times. By the age of 44, however, the numbers shrink to 2 creative tasks a day, 11 laughs and 6 questions.

Furthermore, the UCLA study found a 91 percent negative response rate among adults exposed to new ideas.

I thought even 11 laughs is bit exaggerated. Anyway this is a symptom to watch out for.

open source

After a lethargic period, I have started some more activities which kind of elevated me to another excited level:-

- I have registered in couple of open source projects. Work hasn’t started on anything yet, but I am excited to be in between those terms which were so vague to me so far. I have been reading so much about open source development for last couple of years, but never mustered enough courage to wet my feet. Initially I thought it was only for linux hacks which is a whole different world to me, I had started looking towards that path (reached only the stage of buying the brochures, but didn’t even plan the trip). Now I have enrolled in couple of projects which were looking for Java developers. I am sure it will be a good experience, but hope I can find enough time to work, at the moment I don’t think energy should be a problem.

- Installed Eclipse (another one of those candies I wanted to have for some time) and browsed around. I think having a good IDE goes a long way in terms of productivity. Coding using a textpad will be advisable to learn the nuts and bolts initially, but after a stage it will just slow you down. So learn programming with textpad (otherwise IDE will be too confusing, will hide too many things that we may not understand the basics), but move on to a good IDE before long. I think in a project environment it is extremely important to decide on a good IDE to improve the productivity and enforce standards – I came up with only two uses as of now, but there should be more. Also minor hindrances like start/stop servers, upload/download sources from CVS – if these can be integrated well into IDE then it helps developers to focus on the core task. I haven’t done too much with Eclipse yet, but the plugin development is an exciting functionality.

- Installed Java 1.5, CVS and Tomcat plugin for Eclipse.

- I have got a first hand look at open source development, the way team is communicating to develop a design and got some emails which gave me a surrealistic view of another planet in terms of software development. Putting down the thoughts about design at a high level, getting team’s input – the way things evolve rather than planning the activities using a Microsoft Project, assigning tasks with a strict deadline, one person working on a task, another reviewing it and each knowing some aspects of project. I am not outright rejecting the so called “Cathedral” way of development yet because I think both the scenarios differ. Open Source is a community of developers working mainly out of love of work and as far as I see, there is no lack of motivation and no resistance because it is voluntary. But when organizations need a software developed for its purpose, it is given to a set of developers who do not have a control on requirements, but a hard deadline in front of them, there has to be a way to manage the tasks (limit the chaos) and be predictable in delivering good quality – so the processes involved will be different. But I think it will be advantageous to conventional development to adopt the best practices of open source development.

- One impression I get is, doing conventional development, I was falling behind in terms of better and latest tools for development – For eg: I haven’t touched ant, junit etc. In conventional development or as I read somewhere “mass market development”, tools to develop software is determined by customer or project management and standardized for the project. They cannot have developers wasting precious time on tools. Doing open source sort of development, developers are looking for better tools, improving the tools if something doesn’t work and maybe more productive as a result.

- I realize it is a long way before even I write one line of code, hope I stay that long since that is the next milestone or the next lifeline to continue this interest.
Today I listened to an inspiring and very interesting talk by Adam Bosworth given in’s annual event – Dreamforce. It is titled Intelligent Reaction. Summary of the talk is that companies should react to customer needs and use the customer data to evolve rather than going with a grand plan. It is in line with couple of things I am following nowadays – Agile development and Using customer/transaction data to make better decisions (I wonder whether there is a term for it).

I caught a lot of phrases maybe clichés but good to keep focus, so spewing it out here – talk to people, listen carefully, Iterate, evolve, intelligent reaction vs intelligent design, start small, lots of releases instead of one grand plan, change with times, follow your customer in real-time, learn and change, nothing is perfect.

This is the changing way of software development, but I wonder how many organizations adapt to this. I think it is probably easy to track the usage, listen to customer and change rapidly to the better ways in an application which is lightweight, but what about applications like CRM or ERP which dealing with business, revenue, people and life in much more real way. Will the sales reps working on deals which directly affect their compensation (who may not understand the working of software) be open to start with an application which is barely good but adaptable to change thereby constantly changing the process? It is a different case when your applications audience is internet savvy and understands software in a hands-on way when it comes to adaptability. But as he said, instead of a grand plan, it is exciting to try it out and learn from mistakes, change, improve and evolve.

Extreme Programming vs. Interaction Design

I am interested in learning more about extreme programming, but haven’t been able to read in detail or practice any part of it so far – I will get back to that sometime soon. Interaction design – that’s a term which I came across for the first time and at the outset it sounds like a fuzzy concept to me. Following are some of my thoughts (quotes from article are in Italics):-

• I think the deepest tacit assumption is that we have a significant organizational problem, but we can't fix the organization. I believe that in order to create quality software, you have to change the organization.
• It's my experience that neither users nor customers can articulate what it is they want, nor can they evaluate it when they see it. Neither the people who buy software nor the people who use it have the capability of visualizing something as complex as the behavior of software. They also don't have the ability to analyze what appropriate behavior is.

I started my career with software development which is transferring a written piece of requirements into design and code. It will only add to the quality of the software if you know the requirements first hand from the person who is going to use it – it will give a whole different perspective to the development of product. To someone transforming requirements document to code, idea of defining how your customer/user should be doing business and build software for that is paradigm shift. It requires a cultural change to go to a mode where we understand what user actually wants or rather needs and suggest it back to him.

• I believe that defining the behavior of software-based products and services is incredibly difficult. It has to be done from the point of view of understanding and visualizing the behavior of complex systems, not the construction of complex systems.
• The way the industry works right now is the initial cut at a solution is generally made from the point of view of a feature list that comes from the marketing people or the in-house customer, then given to the developers, who then synthesize a solution. It's not a construction problem; it's really a problem of design—not interface design, but behavior design.
• Usually, the architect at the sketch level will know enough not to design something that's an engineering problem.
• I think it's wrong when phases are abused, namely when phases have arbitrary boundaries and when there's no recourse and the people who are participating in the various phases are not working together.

There is an argument that there is logical side to software development which is essentially programmer’s domain and there is a human side where we understand users and business and there has to be a bridge of Interaction Designer who could define the behavior of the system and then translate it to Developers. Compared to this I tend to agree more with XP’s argument that software development shouldn’t be composed of phases and appropriate social structure is not a hierarchical one, but a network structure. I think it is not possible for every developer or designer or architect to be involved in the requirement definition to gain insight into the actual use of the product - but it need not be a segregated job function. It must be coming down to job profiles and competencies. Best programmers or architects may not be best communicators and hence may not have the tact to elicit the requirements from the customers. But there may be people who excel in this area but do not understand or have little interest in workings of software as such. To have the capability to define the requirements/product behavior/organizational complexity and architect the solution and understand the technical feasibility at the same time is the right combination at this stage. Building design is taken as example – I may have flights of fantasy when it comes to building my house, but some may not be possible to do technically or there may be better ways to do it – it is architect’s job to suggest a cost-effective, structurally good design. Interaction design is trying to alleviate this split/phase of design and development by suggesting that interaction designer links up with developer during the development phase. But in my experience that may not be enough. Breaking down the hierarchical structures of management, customer/user, technical architect, developer and having them interact and having open bi-directional channels of communication will definitely help.

From my understanding so far there has to be a better way to manage change in software development and by incremental cycles of development and better involvement of customers/stakeholders in the process of development it is possible to achieve much better quality. I guess the challenge is to do this without introducing more chaos and to institutionalize the practices to have more predictability.
I have come across couple of situations in last few days where guys boast about their achievements, talents in a manner that evokes a temporary dislike like a bad taste or a sour smell. Maybe sometimes it is essential for a person to establish himself and make it known to others, if need be by telling it himself, that he is capable. Somehow it feels endearing if a person who is talented speaks about through action than by actually thrusting out his chest and bragging about it. How does it feel when a friend in a casual conversation just lets it slip that he is the indispensable to his company because he is oh-so talented? It is slightly awkward if it is in a direct conversation because I don’t know how to respond to that with a straight face and these situations are not rare. It maybe our ultimate need to feel appreciated or the times are such that without marketing no products can sell.

I had come to an agreement with the theory that ego is not a bad thing and it is self which should be satisfied first to be able to spread the joy to others. Those who do not hesitate to spell out their achievements and publicize themselves are either truly talented people confident in their ability or those who are insecure about it and find pleasure in self adoration. I hope it is possible to recognize first category because of honesty and second can be tolerated within limits.
Today’s greatest idea: Why don’t I maintain my thoughts on the articles I read? I do sample some out of the flood of online articles published everyday and may have some thoughts of my own which I may follow up later on – for all that matters, something might stick with me for a lifetime and add to my ongoing quest to expand the perspective. So starting today I decided to keep some notes here, let me see how long I can keep this up.

I have been toying with the theory of jack of all trades vs master of something for some time now – I haven’t made up my mind yet and may not ever. This one is giving a name to the types – Specialists, Generalists and Versatilists. Being a specialist, knowing something in depth and to be fully confident will be a great feeling and probably we will all do this with the subjects which appeal to our passion. It need not be the field I am working in, it could be anything. I maybe interested in Ford Mustang, I may know its history, its features, latest models and ton of cosmetic information which just appeals to me tremendously. If I can find such a passionate subject in the field I am working in, it will be great. But at the same time, I do not want to get restricted to one flavor alone. But then if you are passionate about something, you will not feel restricted and will voluntarily amass more experience and information and it will not feel like a burden. But knowing other areas will just increase of knowledge level and give you more ideas to work with. Too many Buts.

There is another bit – what good can it do if a person working in software industry reads about totally unrelated area like philosophy or football. My feeling is everything is about systems and relationship, coordination, communication of parts to finally get it working. How can a team of 11 disparate people with different skills coordinate on the fly on the field and perform a miracle connection which results in a goal. It is pure beauty and there can be something to learn from that. So maybe learning about anything that appeals to my sensibilities may add to my world-view and make me wiser. I just read yesterday in some interview about kids reading just about anything – something somewhere will stick.

Versatlists maybe the middle ground between specialists and generalists – authority in certain fields, knows enough of other related areas and adaptable to change. I think being a specialist in one area gives you enough idea about how things work and that experience can be applied easily to learn new things as you go – only the fear of unknown can prevent you from learning new things, but just keep going, we can find ways to apply our past experiences to find footholds and climb faster.

നോൺ ഫിക്ഷൻ

"Chinua Achebe - Man of the People. ഫിക്ഷനോ നോൺ ഫിക്ഷനോ?" "ഫിക്ഷൻ" "നോൺ ഫിക്ഷൻ നിർത്തിയോ?" "ഇല്ല...