September 28, 2009

The Future of Computer Software Development

What does the future of software development hold? Even over the last few years I can think back to how much more difficult the day to day tasks of software development were. Writing a Java GUI application was painful, using source control was difficult, testing code was error prone. All of these things and many more tasks seemed to take up a lot of my time.

To be honest not all of these things have gotten easier. But many great tools and methodologies have come along that make many of the tasks we perform each day much easier. They allow me to spend less time on the mundane tasks so that I can focus on what I enjoy: developing software. I find that more and more of my day can be spent on system architecture, software design, and actual coding.

Some of the specifics that I think of are: Visual Studio and Subversion. Visual Studio can be a pain to learn to use well. There is a steep learning curve, but I find myself somewhat dependent on the tools and help that it gives me. I know some people will think that this is a bad thing, but overall I find that it makes me more productive. Subversion makes my day so much easier. Most of the other source control systems I have used are not very smart, and not very easy to use.

At the heart of things I still know that software development is not easy. Regardless of the tools at hand, more powerful languages, any anything else that has come along, it still takes skilled engineers with solid development practices and procedures to write good software. But will this change in the future? Will some new tool or language some along that is so revolutionary that software development will be easy? I don't believe so.

Some tasks might continue to get easier, but in the end you will always need experienced and educated software developers to do the work.

September 24, 2009

Sporadic ASP .NET AJAX errors

I've got a website that is having very sporadic ASP.NET AJAX errors. I have a JavaScript logging solution that reports back to me when any JavaScript errors occur on my web pages. There are two errors that occur most frequently are ['Type not defined] and ['Sys' not defined]. These both are objects defined by the .NET AJAX extensions. It appears that in some cases (probably 1% or less) these types fail to initialize. The issue occurs on Internet Explorer 6, 7, and 8. The only way I have been able to reproduce this error is forcing the first ASP .NET JavaScript file to not load. Should I just chalk this up to sporadic internet hiccups? Most of the issues related to this that I've seen in my internet searches are errors that occur constantly because of misconfiguration, but my site works almost all of the time and only has issues occasionally.

The other odd error is that I have is AJAX calls back to our server that fail to return all of the data. The HTTP header indicates one size for the data, and the actual text returned is considerably smaller, anywhere from only 10% to half, and even a few that returned 0 bytes. And this is after accounting for the fact that the data is UTF8 encoded. I have always assumed that if the AJAX call returns, and readyState property is 4 and the status is 200 then the data being returned should be correct, accurate, and complete. This error seems to be across all Internet Explorer versions and I've even seen it with Firefox. Has anyone seen any issues similar to either of these, or have any suggestions as to how to debug this?

September 3, 2009

Service Oriented Architecture - SOA

One of the great buzz words we all see is SOA. Every person I talk to, describes it differently. Everyone thinks of different pros and cons when ever they extol the virtues of SOA. Some people always talk in terms of Web Services and SOAP, other always refer to service buses and queues. How can we concisely describe "What is SOA?"
  1. The design and architecture of the system must include services. Doesn't matter if these are web services, services subscribed to a message bus, or something else. They just have to be services.
  2. The services should push your design to be more modular, flexible, and not tightly coupled. Otherwise you might just be missing the point.
  3. When possible services should be as generic as possible, so they can be leveraged as much as possible. Specialized services are a must, but they should only be used when necessary.
  4. Not everything should be a service. If you find yourself trying to force something into a service, your probably trying to hard. If it doesn't naturally fit as a service, don't push it
This is obviously not all inclusive or exhaustive, but just some very basic principles of things to look for. A few books that I would recommend for more in depth information are SOA: Concepts, Technology, and Design and SOA Design Patterns. Both are by Thomas Erl and are good studies of the basic concepts and ideas behind SOA.

June 2, 2009

Windows 7 - free upgrade to vista

About 6 months ago I built myself a computer, and I decided to install Vista on it. The primary reason for this choice (And not Windows XP) was that the computer had 8GB of memory so I 64bit OS was necessary, and in my mind 64bit XP is not a viable option. So I've been using Vista for a while (I went with Ultimate so I could get Remote Desktop, etc) and it seems to be OK. Nothing new and exciting about it, but at least it works (With a few little tweaks).

But now that Windows 7 is on the horizon, it seems to me that it should be a free upgrade (like a service pack) to Vista, not a brand new operating system. Why should I have to pay for the "fixed" version of the operating system that I already own. Doesn't seem to make much sense to me. But I guess microsoft has to make their money somewhere.

May 27, 2009

Crowd Sourcing

I've been thinking about Crowd sourcing lately (Like Amazon's Mechanical Turk). Seems like an interesting way to deal with tasks that are not easy problems to solve with computers. I know that there are other sites out there, with different models, but still the same basic idea.

From a worker perspective it seems like many of the tasks are VERY low paid, which lends itself to people quickly loosing interest, and therefor not having a very reliable base of workers. So in my mind it seems like most of the current models will fail to be successful in the long run. I've been wondering what it would take to make a thriving community of both workers and requestors that would be fair and equitable for both. The key seems to be pricing, because of the low pricing, it seems that the lowest common denominator of people do the work. By providing a better way to determine costs and payments, you could create a much more equitable system that benefits everyone. Workers get more work that pays more, and requestors get a better quality of workers to complete their tasks. The question is, how does this happen?

It seems that instead of Requestors selecting the price, there needs to be some way of determining cost based on time spent, skillset needed and/or user feedback. There might also be a voting or bidding system that could fulfill some of the same purposes. I'm still trying to come up with a concrete idea . . . we'll see what happens.