Archive for the ‘Software Engineering’ Category

Happy Ada Lovelace Day

Wednesday was Ada Lovelace Day! (UPDATE: Apologies for the late post.)

In a nutshell, March 24 is set aside to promote the achievements of women in IT and software engineering.  And we can start by looking toward the achievements of Ada Lovelace.  Ada Lovelace-the daughter of the famous poet Lord Byron-was the first computer programmer and worked with Charles Babbage on the theoretical underpinnings of computing.  Without her contribution, modern computing probably won’t exist today.

Now I’m not into the whole feminist movement.  I don’t think the movement really represents what the majority women think or want. And the feminist equation of “woman == man” doesn’t make sense.  Neither does any equation that tries to equate one person with another.  All humans should have the right to own their own bodies and not being owned by others.  And I won’t get dragged into a libertarian versus non-libertarian political theoretical debate here.  However I was brought up thinking that women can think as well as men can.  Therefore women can do engineering, mathematics and computing as well as men can.  (<flamebait>Maybe even better.</flamebait>)  So I want to acknowledge in this post, women who I highly regard and who have achieved great things in IT.

@Home: Mom

OK so my mom doesn’t work in IT.  She in fact dislikes computing in general.  We still disagree over the fact that I chose software development as a career.  However I regard her highly and without her work I would of never been able to work as a software developer.  Mom not only brought me into existence, she also taught me.  She as someone with a Masters degree in Civil Engineering, she could of worked on engineering amazing structures. For various she gave that up, to teach and raise me and my brother.  When two public school boards gave up on me ever reading or writing, Mom taught me.  She taught me mathematics and gave me a solid base that carried me well into university level math.  And she always would point out how weird it was that Canada didn’t have as many female engineers as Poland did.  While there are many reasons why that was the case, it was Mom who taught me to believe that women can and should be engineers if that was their calling.  So while she doesn’t work in IT or software development, Mom brought up a pretty decent (IMO) software developer.

@Work: Jennifer Chung, Salina Behera , Safa Siddiqui & Monika Schigel

I am privileged to work with the above ladies at my current workplace, VisionMAX Solutions.  Jennifer and Safa works as developers.  Salina is one of our talented DBAs.  And Monika works in that dark, arcane magical realm known as data modelling.  Not only are they great people to interact with, they also possess a wide body of knowledge.  Jennifer is a whiz at Java and ExtJS, and I often find myself asking her for advice on how to solve various tricky problems.  Monika has a way to cheering people up and I’ve never seen her without a wide grin on her face.  Also she and Tom, our two intrepid data modeller have been initiating me into the dark art of data modelling and the business of retail and mobile telecos.

@University: Katarina Halan & Megan Foote

While studying Computer Science at the University of Toronto, I had the opportunity to study and work with these two incredibly talented ladies.  We helped each other out on assignments.  I can not stress how well they understood the various aspects of computer science.  Also they introduced me to some interesting parts of Japanese culture, namely anime and DDR.

In the Open Source Community

Finally, two ladies that inspire me to get more involved with the open source community as a whole are: Emma Jane Hogbin and Celeste Lyn Paul.  Emma works on creating and managing documentation at various open source projects.  Celeste is a HCI expert who helps make KDE applications have the best user experience of any desktop related project.   I’ve only had the opportunity to meet Emma in person at Ontario Linux Fest 2009.  But Emma, you sure inspired me to look at the various components of documentation.  And yes documentation can be sexy.  I don’t get the ponies though.  Celeste on the other hand inspires me to one day get back into university and work on getting a human-computer interface design.  Her work inspires me to improve the UIs and workflow of any piece of software I am involved with.

To all these ladies, I’d like to personally say thank you.  You made me a better software developer.  And you are an inspiration for all women in or thinking of working in IT and software development.  Thanks!


 

The Seven Sins of Software “Engineering”

On Monday, my class discussed about using software “engineer”for software writers. I naturally argued against it. My mother finished civil engineering, and I strongly believe in the elegance, timelessness and excellence of engineering. This morning, as I struggled with and later killed my groupware program over a dispute of syncing with my Palm, I solidified my stance against the idea of treating programmers as engineers. Here are seven reasons why programmers are NOT engineers.

Sin 1: Documentation
Most programmers do not document their code. Some of them say that code is self-evident, self-describing and self-documenting. Tell that to the poor souls trying to extend or maintain that glob of code you brain-dumped.

Now take a look at a blueprint of an engineer. What would happen if some of the measurements disappeared or someone forgot to label the room that holds the AC.

Sin 2: Testing
Programmers do not test their programs effectively. You wonder why your state-of-the-art PC keeps on crashing, as soon as you plugin that expensive computer card? Or just randomly? Testing frameworks, and concepts exist, but with the exception of a few individuals, no one does a decent job of testing. Whining about different configurations and different users does not help.

When an engineer designs a skyscraper, he/she needs with the whims of people, animals and nature. That is why after an earthquake, skyscrapers and bridges still stand in San Francisco.

Sin 3: Research
Programmers rarely research anything. They simply build a new toy program, and expect everyone to love it. They expect that they can experiment away, and deploy an untested and unthoughtout innovation.
Then surprise and dismay occurs when their innovation is unwanted and even hated.

In engineering, most innovations need a huge amount of research. Engineers need to design, test, and re-test ideas until they know they work. An engineering innovation never builds upon a brand new untested technology.

Sin 4: Meeting Requirements
“I’m the programmer. I know what my client really wants.” Wrong! This cocky behaviour of coding what the programmer wants, and not what is required happens way too often. User requirements often go unresearched or ignored. The users become upset at the developers. Company gets into trouble. And the programmers are forced to fix their mistakes.

Engineering anything revolves around meeting some need or requirement. These requirements and the challenge of meeting is at the heart of engineering. If the client wants a skyscraper in the form of a glass inverted cone, the engineer has to build it. But the engineer must find out, understand and then build according to the clients and the universe’s requirements.

Sin 5: People Skills
When things go horribly wrong, who gets the blame? If a building falls (without an obvious catastrophic uncontrollable reason), the engineer gets the blame. If a user’s data vanishes in a simple operation, the user gets blamed. Programmers always blame their clients of incompetence, even when a problem is caused by bad programming.

This behaviour goes beyond just blaming. Programmers ignore the advice and problems of their users, and keep their jobs. An engineer who does likewise, gets fired.

Sin 6: Reliability
Programmers suffer from terminal featuritis-o-philia. They program a new feature and continue on innovating, all when their program lacks stability of any form. User start believing that programs and computers have a mind of their own, with data disappearing, malware crippling systems and hardware crashing inexplicably.

Engineers strive for reliability. Ever building is designed to last the harassment of humans, nature and even “acts of God”. Every vehicle should not kill its occupant, unless a total, catastrophic disaster occurs. Wondering why to this day, the crash-proof operating system and program is still a dream? Reliability takes second step to “innovation” and “coolness” in the minds of developers.

Sin 7: Overall Cuteness
If there is a single profession I can think of when you can get away with unprofessional “coolness”, it is software development. Programmers love to use obscure shorthands, bizarre implementations and wacky ideas, even competing annually for the “cutest” piece of code.

Cuteness is a sign of un-professionalism, and often immaturity in the real world. A cute engineer is a starving engineer. A cute programmer is a thriving one. See why programmer’s can not become software “engineers”?

Finale
My rant ends now, and I know many will complain that I overexaggerated. True, there are some programmers that do not sin in the above ways. They are the exception. Most programmers pass themselves off as good, and still sin terribly along the way. An engineer who sins as such is a bad engineer, and rightly so. I claim that if programmers ever want to earn the distinction of software engineers, they need to raise their standards considerably higher.

 

Harnessing Chaos: A Framework for Team Management

Programming is a misunderstood art. Unfortunately many commercial ventures treat programming like a science and managers treat programmers as engineers. Engineers build things based on repeatable technologies and designs. Programmers craft code, a process more akin to the unpredictable and unrepeatable production of art like writing. Companies get in trouble when they try to apply engineering best practises such as enforcing strict requirements, and tight predictable deadlines. A far better approach works by treating programming as an art, and applying artistic best practises.

The Problem of Creativity
One problem with creativity, is that is hard to predict and control. Creativity comes and goes, at a whim. Since artists work in a creative manner, they need a great degree of freedom in their work. Unfortunately the real world treats art in the same way as it does engineering. The real world expects predictable work schedules and techniques.

This becomes problematic when programmers work on a project as a team. The team needs to balance creativity with reliability. So artists and programmers need to build predictability into their projects. One way to create repeatable and scheduleable for creative work is to use a framework.

Team Frameworks
I am an extremely individualistic person. Yet, I will admit many projects simply take too long for a single person to do. Teams naturally alleviate this problem, by throwing more people at a task. But like Fred Brooks mentions in his The Mythical Man-Month, throwing more people at a team does not guarantee faster completion.

One of the reasons, I dislike teams is the problem of expectations. Before starting on a team project, I find it best to lay out “ground rules”. The rules include:

  1. Quality Expectations
  2. Communication
  3. Scheduling
  4. Individual Talents
  5. Work Synchronization
  6. Task and Job Division

It is important to work out these rules early on in a long term project. Without getting into specifics of each pint, I think everyone on the team needs to know what is expected of them. This saves the trouble of anguished team members when things go wrong, which in any project always does.

It is essential that these rules (not guidelines) be in place early on. Also every member of the team must follow these rules religiously. Sometimes the rules need changing, but if you did a good job on setting them up, the rules should not drastic changes.

Buffer Schedules
Programmers are notorious at underestimating the time required for work. The problem of “engineering” comes into play, and the result is delays in work. Instead when working on any creative project, you need to schedule in “thinking”, “wasted” and “oh crap, this is all going to heck” time.

The best of doing this is to schedule in a buffer. I usually work on a 1.5X buffer, (which probably is a very short buffer and 2X, even 3X are preferable). A 1.5X buffer basically adds an extra half “of time I think this will take me”. So if I think something takes 2 days to do, I try to schedule 3 days. This gives me room for error and I can finish ahead of time rather than “after-time”. Many successful programming groups also use buffers in scheduling.

 

A Near Icarus Flight

We will be returning to normality. Once we figure out what that exactly is.

– The HitchHiker’s Guide to the Galaxy, Douglas Adams

Yup. Normality, that would be nice. Relaxation would also be welcome. Yes, the universe is not letting me experience either of the above. This week is the final critical week in my semester. And the amount of stress is leveling to its normal high plateau. Again, my own fault for everything that has transpired. Last week was probably the worst.

Last week was work like no tomorrow time… I had three assignments, all due on Friday. Visual Computing naturally took the longest, and I had to iron out bugs. I hoped to finish it at latest Thursday 6 PM. When everything was said and done, I had completed it on Friday @ 2 in the morning. Right after I got to work on the Requirements Engineering spec that was due in the morning. Regardless, it took me up to 5:30 in the morning. That was a record time, because everyone in my group actually worked on the assignment. With a tiny bit of sleep, Rudy and I arrived at school to hand that in. In the process we interrupted a first year CS class. I felt like such a prick, but hey, I am third year. Everytime I talk to a first year CS student, I always come off like some “Zeus” of programming. If I want to light up my listener’s eyes like First of June (Canada Day, you hopeless Americans), all I have to do is slip that I am a hacker. Which is more or less true, both by the 1980′s coder definition and the more modern non-techie defintion (Don’t worry all your base safe with me… right…).

Databases was last. After a short nap, I viciously attacked that assignment. I actually figured out how to do most things in SQL finally (me == slacker), after a semester of procrastination. I knew it, but never really sat down and actually wrote the stuff up. Theory always has been my weak side, so I never really finished that part. I had done enough. And enough damage I had done to my lack of work on Datasphere.

So here I am employed at school, in this Datasphere project. I told my project manager that I would get something done two weeks ago. I did it yesterday. Later I encurred his wraith due to my keeping a low profile. And not answering his emails. I got an earful today, about it. I will admit it was unprofessional of me. However, I didn’t want to fess up that I had not touched it. To make things more interesting, there was supposed to be a meeting this morning. And yes, I showed up. Just to save my skin, and hopefully my job. No else did, cause it was rescheduled for Friday. Bummer. Nevertheless, I saved my skin, and despite the stern warning today, I still get to keep my job.

Yay. Tomorrow I have an exam first thing in the morning. Databases. Yummy. Friday is Visual Computing. After that I can actually take a short breather… err… I mean attend Datasphere meetings. I can probably expect another scalping for my previous behaviour… On the positive side, all my hard exams will be finished, and I will go shopping for a new box. I am still debating whether or not to build the system from scratch or just go with a prebuilt package. Considering that I have to basically get one from the ground up (with the exception of the mouse)… both options are expensive. The only great thing about a self build system, is that I can mod it to my heart’s content. Hmm…