September 30, 2009

The Next Big Thing

I have to admit that I am constantly trying to think of The Next Big Thing: the next web fad, the next big technology, etc. I'd love to come up with the next Facebook or Google. Software is my passion, and I'm always trying to thing of new ways to use software to help people and/or make money. Most of my ideas never pan out, but it doesn't stop me from thinking of new ones.

I'll admit that it is a little optimistic to think that I'll come up with the Facebook or Google, but it would be so cool if I did. All I need to think of/invent/find out/predict the next big thing on the web. I find that it is easy to come up with ideas, but most of them are slight twists on things that already exist. Trying to come up with something truely unique and something that people want is not so easy.

Of course, part of what drives me is the thought of a potential revenue stream, it would be great to come up with something that generates income. But that is not my only draw. I just enjoy writing software, and if I can make a little extra money doing it, then even better. The last aspect is nerd cred. How cool would it be to be the next Mark Zuckerberg or Larry Paige.

Hopefully I'll come up with The Next Big Thing soon, but it's taking a lot of work.

September 29, 2009

Software Developer Job Interviews

At my job I have the interesting job of interviewing potential software developers. First of all it's much better to be on the interviewer side of the equation, but even then I see some pretty interesting things.

Some candidates that I've seen just seem so far off the mark, that it isn't even funny. I know that software developers have some very strong (and generally accurate) stereotypes about them, but sometimes I just have to laugh. I assume that when people are interviewing, that they put their best face forward. So when I see someone that is severely lacking in communication skills or that can't seem to think through a basic story problem I get concerned.

For hiring software developers, I generally look for two main things. First is technical experience and knowledge. The candidates I hire need to have a respectable 4 year degree in Computer Science and/or years of on the job experience. Of course a lot of this depends on the level of candidate I'm looking for, but there has to be something. Much of this technical background can be gleaned from a resume, unlike the second thing I look for: communication skills.

Like I said before, I know that there are many well deserved stereotypes about software developers, and one of them is lack of communication skills. But even between developers there can be a huge difference in this area. Some people that I have interviewed (and sometimes worked with) can't even communicate well with other techies. They speak in a language that is all their own, that others can barely understand.

If someone passes the smoke test for both of these items after a brief phone interview, then I will generally consider a face-to-face interview. One thing that I like to use during an interview is word problems or Puzzles. These help me to get some insight into how people think, communicate, and even respond to pressure. And it's not all about getting the correct answer, although that helps.

Some other resources that I have found to be useful both as an interviewer and interviewee is Programming Interviews Exposed. It isn't a magic bullet, but it has helped me as an interviewer to get a different view on things. Some of the ideas they present are a little extreme, but still provide some insight.

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.