Archive for the 'Software Engineering' Category

When to, and when not to form a class

Friday, October 17th, 2008

Just recently I was reminded how “personal” software engineering education has been for the unschooled.  Sadly, the basics are sweapt aside and in their place are “how to get it done” techniques that make everybody look bad in the long run.

On my quest for a good engineering education, I have stumbled upon this great explanation of when to form a class, and when you are NOT supposed to form a class. For example, the rule of one property states:

IF a noun has only one property to remember

THEN it is an attribute of another class

ELSE it is a class

Example: If we need to remember only city name, city will be an attribute ofanother class. If we need to remember city name, the type of city, the state itbelongs to, then city should be modeled as a class.

See the page here.

Why your software will get worse

Friday, September 19th, 2008

I keep tabs on the FOSS offerings in a casual way.  It’s always interesting to see new projects, new intentions and money being put into software.   Take a wider angle with me for a moment.  Do we really need it all?  Allow me to argue that these intentions are misplaced, and that most software gets worse for a very specific reason.

Axiom: Complexity for the user invites simple competitors

That’s the part that is important.  However, the second part could read “those competitors will soon make their user experience complex”.   There is more than one thing becoming complex in older software: the user experience and the code. The main reason we train in software engineering is to keep complexity controlled. Complexity, if not controlled, is confusion.  So if a user, or an engineer is working with software, and they don’t feel in control of the core functionality of it, they might move on, or companies might re-do the effort to compete with it.

Starting is sexy.  Building on a legacy, not.

that's messy! By Mallix http://www.flickr.com/photos/mallix/2816685909/sizes/l/

The company, or individual says to themselves “Why not create this software better”, rather than purchasing/using existing code, and going on from there.  Starting, that’s sexy.  Remember when you first fell in love? Nothing like it! Until you do it again, right?  Taking an old piece of software that does everything you want, just not the way you want, that’ not sexy.

Want proof?  Take a look at SourceForge, and the available content management systems written in PHP.   See, the user experience of every one on there is really bad, OR, it is quite easy to use, but doesn’t have any power.   Think of the reason for this:  A single author gets inspired to create a new CMS (because, that’s just sexy and fun), because they think they can do it better.  In fact, their thoughts on how to do it better are most likely an improvement over the system in question. So they create it, know it in an out, and it turns out, most likely, alright to lame.  We haven’t touched on the problem yet!

Collaborative will and enthusiasm is killed by confusing software

When the next fellow comes along to help with the system, that might work, if they can grasp it quickly.  If the system is overly complex, they might create their own system from scratch, just to avoid a confusing experience.

The other part of the problem:

Without a nagging champion for simplicity on your team, software will evolve into a confusing experience

We know that creating software is by nature complex.  Also, creating simple, and powerful user experience requires very complex software.  Now we have two things going against us: The inherent complexity of software engineering, and, the complexity of engineering it to be simple for the user.  Wait, let’s add a third!  The complexity of creating a intuitive, and understandable experience for the programmer.  That will keep the program moving forward into the future.  Build opposite, and all your programmers will treat you like a mean dictator until you allow them to rewrite it.

The answer to the problems above, well, those are tricky I think, and I couldn’t fully answer them.  However, if we are looking out for the problems, that’s a good start.  We seldom see companies that are willing to invest properly into achieving simplicity.  I hope to be one of those.

Software That Shouldn’t be Ignored

Wednesday, July 23rd, 2008

Productivity, organization, and collaboration software excite me.  Just recently I decided to upgrade my task tracking system, and that is just so fun!  The following is a review of some desktop task management suites.  After many hours in review of online project/task management, I wasn’t prepared to go that route.  We already use Trac internally for dev teams, and each of them has their own way of tracking tasks.  There is just no killer project management suite as of today, sorry.

Certainly there is a fine selection of personally task management software, or so I thought.  After all, mastering ourselves is the key to mastering our dreams.   Let me explain what tools I tried, and my opinion of them.



TaskJuggler


This project is attractive because of its robustness.  You can do nearly everything.  It might very well be a pain to do it, but you can.  See, this program manages tasks via its own markup.  I would be able to pull out reports with any level of abstraction and specificity I wish. That’s HUGE. But a new markup to learn? Well, darn.  But I figured it was worth learning because the task management landscape is terribly malnourished.

I make my way to the download page and………surprise…Linux only!  You can get it running under Cygwin, virtualization, or just run it remotely on your Linux server.  Gees.  No thanks.  Looks like a great project, but until its ported, or I move to Linux full time, I shall look elsewhere.



Nomad Pim


My hopes are once again high.  This PIM is programed on the Eclipse platform.  That means programmers can focus on functionality over platform robustness, and the ensuing app has great potential.  The app has a short learning curve, and the interface for contacts and tasks is the same.  That’s a new take, but it seems to work.  You can search through your contacts quickly, and schedule tasks.  Its usefulness ends there for me.  When I flick on the PC, and open my task lists, I can’t have 100 tasks staring me in the face.  I need abstraction! In other words, give me the top priorities.  That’s the essence of GTD, except they are called next actions.  Note: “GTD” suites suffer all the same problems in my opinion.

A neat start for Nomad, but that’s all.  It really would leave me stressed at the end of the day from not knowing exactly what I need to be doing. I am starting to think my requirements are impossible, but they seem simple to me.



Abstract Spoon’s ToDoList


Deciding I have to disperse PIM functions into different apps, I look solely for a task management application. So many! I am not going to list everything I have tried or researched.

Do you know that I fell in love with ToDoList? It is open source, a few minutes to learn, only has minor bugs, and you can truly arrange and filter tasks. If you are looking for an app that is great for collaboration, keep looking or hire Bixly to build one that considers such usability topics as abstraction. ToDoList is magically simple and smart. Sure, it can be a bit awkward to use at times, but it just leaves these other programs in the dust when it comes to getting things done without stress. Good work!



WikidPad


For a neat desktop wiki that tries to employ a task system, try Wikidpad. It’s the best desktop wiki I have seen. Its attempt to tackle “globals” such as tasks, is darn interesting. I think my dream PIM app lay somewhere in WikidPad, just not yet. It’s rather cumbersome right now as a task or contact manager. But the idea that you can create tasks or contacts from anywhere on any wiki page is fantastic. Also, having the navigation tree decided completely by the wiki script is cumbersome. I just haven’t given thought to exactly how it should work, because the alternative is quite robust. I am truly rooting for this project.


Another program that really disappointing me was TaskCoach . It just…..doesn’t get it. Nothing is intuitive or easy, and it certainly doesn’t help me manage tasks very well. Now I am thankful to all these programmers for giving us free software, so don’t misunderstand my purpose here. I hope to save you time in your search for great software.

Also you might find collaborative mindmaping useful for knowledge management and simple tasking within the enterprise. The earliest program to do it right was Comapping .

Programmer’s that don’t abstract don’t work

Sunday, March 30th, 2008

Grady Booch, a brainbreacher in the software architecture world, put such importance on a programmer’s ability to abstract properly. You can listen to the wonderful podcast by following the link at the end of this article. Booch describes how all complex systems are broken down to become simple through abstraction. Think of abstraction as organizing information. As wikipedia puts it:

Abstraction is the process or result of generalization by reducing the information content of a concept or an observable phenomenon, typically in order to retain only information which is relevant for a particular purpose.

Have you ever soldered a circuit board? You wouldn’t be thinking of capacitors, resistors and ferrets when you are trying to enter a certain time into the microwave, even though they are involved. If you do, it might hinder your ability to judge the right time. McConnell (book) says maintaining different levels of abstraction and allowing modules only to only communicate to other modules in their strata is called Stratification in software engineering. Perfectly termed! Think of the strata of the sky with it’s troposphere, mesosphere .etc.

Now the ability to abstract, and the importance of recognizing when to abstract is critical for programmers. If your engineer can’t create software with clean and well thought out stratification, you will soon find a mess on your hands when your skilled engineers give you a piece of the their mind. This doesn’t mean if a fellow can abstract any way he will can be a good engineer; I have seen folks that can abstract up well, or down well, and not the other way. This creates problems. If your engineer can’t abstract up in the hierarchy of information, conversations can be very awkward, and design lacking. If they can’t abstract down to the complex, they will never get anything done.

One way to test this is good long technical conversations durring the initial interview. If they can make your nontechnical colleague understand how their system works, we might have some abstraction problems.

Links
Gary Booch podcast
Gary’s Blog
Code Complete 2

InstallJammer Review

Thursday, March 13th, 2008

Cross platform, open source, modified GNU, decent layout, this project has my attention. After my two day honey-moon phase with it, I have formed a strong opinion.

What InstallerJammer is: an excellent program for run-of-the-mill, cross platform installs.

What InstallJammer isn’t: visually custimizable.

Well, technically it is highly theme-able, but requires an extensive knowledge of tcl, tk, and a tun of global data defined in a few different places. Not exactly point and click. I am not complaining, because this program is given to use freely as a gift by Dameon. An installer should be two clicks tops, more for the advanced options area. This would be VERY difficult to come buy unless it was scripted for me by Dameon himself. It’s sadly this way with most installers.

InstallerJammer is heavily programmed in tcl, 23,000 lines of it, with the help of c, and no object orientation. I am betting we won’t see any substantial releases from now on. Since programming productivity goes substantially down after routines hit 200 lines, and bugs and improvement time goes way up, it’s a safe bet.

You must think I am crazy having such high standards for a simple installer, but that’s the beginning of the user experience for SpiceRack . Why spend years in development, and plenty of cash, and let the customer experience a 10 click, drab install?

Sadly, I shall return to Advanced Installer , after having already tried NSIS and a few other lesser known packages. I will try Installsheild in the future, but products with 30 different pricing structures and hard to use websites generally aren’t well designed.

Update, Jun 08:
Well Damon was sensitive enough to the word on the street, and sent me an email asking for suggestions. That shows desire. He posted a response on his forums

Since this time, I have had considerable brain hemorrhages trying to use Advanced installer. Bleh. I had to switch, so I went back to Innosettup, ISTool. I am not able to theme or simplify it as much as I would like, but considering the the alternatives, it’s the best for me now.