The latest technology

January 30, 2008

Technology changes so often that sometimes it can be overwhelming to try and keep up. This is most noticeable when dealing with software. Since software is made from nothing but thoughts, it is a technology that can have a lot of new concepts and techniques within a very short time frame. This is most obvious for people that work within the Microsoft technologies. Microsoft has been releasing new software platforms, frameworks, and APIs at a crazy rate over the last 10 years. Within that time, we’ve seen complete paradigm shifts from desktop client/server apps to distributed smart clients that live in the web. The technology to do this has also change drastically. We saw everything from the introduction of Xml to 5 released versions of the .NET platform. This leaves many software engineers struggling to keep up with the latest craze from Redmond. I find the best solution for this problem is to stay informed at a high level. If a new technology turns out to become a big hit, then it’s worth the time to really understand it in depth. The best way to stay informed it through technical web sites and magazines. The list of content that I regularly read is listed below:

                       Web Sites

                        http://www.asp.net

                        http://msdn.microsoft.com/asp.net/

                        http://msdn.microsoft.com/

                        http://www.codeproject.com/

                        http://sourceforge.net/

                        http://slashdot.org/

                        http://blogs.msdn.com/ie/default.aspx

                        http://www.dotnetrocks.com/

                        http://www.dnrTV.com/

                       

                        Magazine subscription

                        ASP.NET Pro             

                        Visual Studio.Net

                        MSDN Magazine

                        User Groups

                        http://beantowndotnet.org/

As you can probably tell from this list, I’m mostly interested in web development. The web sites I try to read at least 3 times a week and the magazine subscriptions are once a month. The user group is a meeting that occurs once a month. It’s a great place to interact with other .NET developers. This is something new to me, but highly recommended. Of all the sites listed above, my favorite is dotnetrocks. This site release a pod cast on every Tuesday and Thursday that discusses so .NET technology. Each pod cast is 60 minutes in length. I like to download them and listen to them whenever I’m offline. They are a great way to keep informed with the constant changes in .NET.

Anyway, the point I’m trying to make here is that you should have some strategy for staying up to date with the latest stuff. Without one, you’ll go crazy with the constant flood of new things.

 


Great Inventions

December 28, 2007

            Great inventions in history are very rare. Over the past century, there have been many inventions, but how many can we really say are great? I like to define an invention as great based on the overall impact that it has on the world. If an invention improves the lives of the majority of the people of the world, then I’d say it’s great. With this definition, I’d say that there are only about a dozen inventions within the last century that meets this requirement.  Most would agree that the automobile, airplane, and light bulb would meet these requirements. All three of these items drastically changed the world. The automobile and airplane made the world a smaller place and the light bulb brought an end to the stranglehold that the night has had on us since the dawn of time. Now how about the computer? Could we say that it meets the requirements of a great invention? I’d say yes. While the automobile and airplane made the world a smaller place, the computer has brought us all a lot closer. Everything from communications to financial transactions can be done between two people on the opposite sides of the world in an instant. Like the automobile, airplane, and light bulb the computer exists in every facet of our lives. We have them integrated in everything from coffee makers to internal deliberation devices that help extend some peoples lives. If we were to ask who invented these great things? Most people would easily identify the automobile, airplane and light bulb to Henry Ford, the Wright brothers, and Thomas Edison respectively. (They’d be wrong, but that’s another topic). But how about the computer? Who invent that? Some people would guess IBM, which it’s not. Most people would not be able to put an individual name to this invention. So who was it? The answer to this question is the source of intense controversy. In the early 1940’s, there was a lot of work happening to create the first digital computer. Many Scientists and engineers were working on this goal from all points of the globe. Many of them had similar ideas and concepts, but who was the first? Based on my reading, the first all digital computing machine was built by two men named, John Mauchly and J. Presper Eckert. It was called the ENIAC, which stood for, Electronic Numerical Integrator And Computer. The history of these two men and there great invention is amazing. It’s the story of enormous trials and sacrifices in order to give birth to the computer age. Unfortunately, for the two of them, the immense sacrifices required of them ultimately lead to the ruin, but not before their new invention had taken hold.

        I’d highly recommend that anyone working in the computer industry take the time to learn its history. When learning about the difficult tasks that the founding fathers of the computer age had to endure and solve, it tends to make some of the issues we face today seem trivial. Like all other fields of science, its much easier to see where the future of the field is going, if you know where its been.


Truth, Lies, and History…

November 27, 2007

      Over the past few months, I’ve digressed from my studies of computing and spent some time focusing on history. Specifically, I spent some time reading about the truth and myths in American history. The book I read help to confirm some of the truths that I’ve known about American history, but more important it helped to shed some light on many of the horrors that are well hidden with outright blatant lies. The reasons for hiding many of the horrors of American history aren’t so obvious. I’ve found thou, if you do enough digging and think through the facts of some of these hidden truths, you’ll always find some sort of motive for hiding it. This got me to thinking about how modern computing will be recorded throughout history. How will the history books of two hundred years from now present where the Internet came from? Will it present its true history starting back with the days of ARPANET and the DoD? Or will it be presented as the creation of a former presidential hopeful Al Gore? I think it will depend on the impact that it has on world over the next two hundred years. If it’s positive, then I’m sure there will be plenty of people lying claim to be the original inventor. The question still remains thou, who will it be? Based on looking back into American history, I’m going to hedge my bets with the people in power. They have always been the ones to write history. So, if you ever get a chance to travel to this future, don’t be surprised if your told about the great inventor Al Gore and his marvelous invention called the Internet.


Summer Reading List

July 9, 2007

I’ve been spending a bit of time lately catching up on a lot of reading. I’ve been diving into a pile of books and articles that supposedly all software engineers read. Some of the topics are common sense and others are eye opening. The list of topics range from high level overviews on software engineering to very specific technical manuals. The techie books have always been great for learning new technology. I find that the most enjoyable part of the tech books is when you can take what you’ve learned there and apply it into some real code. It doesn’t matter if its sample code that I’m working on or an actual production level product, either way learning a new technology is fun.

 

The books and articles that focus on software engineering in general are great to read also. I really enjoy the high level picture of how things should work. I find it very refreshing to know that so many software engineers have similar issues when it comes to attempting to create that perfect masterpiece. However, the most frustrating aspect of these books is when you try to put to practice what you’ve read. It turns out to be much easier to try out a new technology than it is to use a new programming technique or methodology.  All these books offer ideas on how to create ideal software and what’s the mark of a good software engineer, but very few of them provide any information of how to truly measure it. Without know that, how can you possibly determine if any change is needed. In any case, I find all these books to be real page-turners and I can’t wait to get a few minutes to sit down and start that next chapter. I would recommend all these items to every inspiring software engineer. If you’re interesting in my current book list, you can find it below. Give a few of these a try and see how you feel about them.

 

Book List (in no particular order)

1.      Dreaming in Code (Scott Rosenberg)

2.      The Pragmatic Programmer (Andrew Hunt and David Thomas)

3.      The Mythical Man-Month (Fred Brooks)

4.      The Cathedral and the Bazaar (Eric Raymond)

5.      No Silver Bullet - essence and accidents of software engineering (Fred Brooks)

6.      Software Aspects of Strategic Defense Systems (David Parnas)

7.   Software Design Manifesto (Mitch Kapor)

8.      Essential Windows Presentation Foundation (Chris Anderson)

9.      Joel on Software (Joel Spolsky)

10.   Software Estimation: Demystifying the Black Art (Steve McConnell)

11.  Code Complete, Second Edition (Steve McConnell)

12.  Microserfs (Douglas Coupland)

13.  Peopleware (Tom DeMarco and Timothy Lister)

14.  The singularity is near : when humans transcend biology (Ray Kurzweil)

15.  Zen and the art of motorcycle maintenance (Robert Pirsig)


My new skills as a columnist

April 18, 2007

During the past few years, I’ve found myself becoming more interested in writing good documentation for the code I write. I’ve learned that it’s not enough to create a great piece of software without providing easy to understand documentation that explains how to use it. I’ve also discovered the immense value in providing excellent comments within the code itself. As I’ve pushed myself to write better documentation and comments for my code, I’ve found that my skills for documenting and discussing how a piece of software functions have become much better. I’ve decided to put my new skills to good use by sharing my thoughts on how to create great software. I began by writing responses to newsgroups for issues that needed some type of resolution. My responses would sometimes be in vain, but more often than not they would be helpful and appreciated. I moved on to starting this blog and although I’ve only been writing here for the last four months, I’ve found that it has really help hone my skills in this craft. My most recent move was to start working as a freelance columnist. I started writing for ASP.NETPro as a guest columnist. My first article was published in the January 2007 edition. It can also be found here. The topic of that article was “Express Yourself” and it discusses how to use data column expressions. I’m now working on my next article. The topic has not yet been determined, but the column is complete and it discusses how to use expression builders and build your own custom expression builders. My initial rough draft and source code for this article can be found here. With a bit of luck, I’ll have it refined enough in time to make the July press date. Anyway, if nothing else I hope you find the source code that accompanies these articles helpful.


A new-found respect

March 9, 2007

Over the past year, I’ve found myself cast into a new dual role position at the company I work for. I spend half my time designing and coding application features and I spend the other half doing project management. I’ve always been a hard-core programmer in the past and had no interest in concerning myself with any management aspects of the job, but now with my new-found role, I find that there are many challenges and ideas with the management side of the business that interest me. I’ve recently read a classic project management book called “the mythical man-month”. The book discusses many concepts and ideas of how to make software development more of a science and less of an art. These topics got me to think about many questions I’ve never asked myself before. The most interesting question I find myself thinking about is: What is the true measure of quality software? Is it customer satisfaction? Or highly extensible code? Or low bug counts? Or perhaps all three of these?  I spent some time pondering this question. Thinking about my past experiences and what I’ve heard from fellow co-workers. I think that the answer to this question depends on your point of view.

 

If you’re a hard-core programmer and really enjoy the art of software engineering, then the answer is:  Quality Software is measured by its high extensibility, and ease of maintenance, and lack of bugs.

 

If you’re a project manager, then the answer is: Quality Software is measured by its completeness in requirements and done in a precisely predict set amount of time.

 

If you’re a business manager, then the answer is: Quality Software is measured by its ability to be done on time and most of all, generates high profits.

 

Ultimately, the most important measure of Quality Software is the business manager’s answer. If the software does not generate profits, then no one is buying it. If no one buys it, no one uses it and no one gets paid. This lead me to another difficult question. Has software become a new type of consumer product? A type of paper cup?