|
 Friday, May 25, 2007

Complexity and Staying Up To Speed

Every single one of use that are involved in Software Development have come to the point where we feel overwhelmed with the speed in which the software industry is advancing. This is completely normal! We all have to understand that software development as an industry is in its infancy. For example, architects have been around for hundreds and hundreds of years, a lot of physics concepts have been tested over the last few hundred years. Many other professions have been tried and tested over very long periods of time. Software on the other hand is relatively new. It’s arguable that the majority of software development has taken place in the last 30 years.  Since our day to day lives depend on software we are now seeing a very complex environment blossoming in front of us. No longer are static HTML pages the norm. We now have complex mission critical interconnected systems delivering dynamic pages to thousands of users per second. Dealing with the technology behind these systems has become very complex and we’re (the software engineers/architects/developers) required to understand it. 

 

 

Knowledge Expectations

The average developer is required to know “everything” about programming. If your boss comes to you and says:

 

I just went to a seminar on ______ and it looks like the future of software development. We need to implement it starting today...

 

They then expect that you know everything about the said technology. Unfortunately this is not normally the case. We work on projects for any length of time, and then move to a new project. Rarely do companies push their employees to stay up to date on new technology on the company dime. The amount of technology that we’re required to know is beyond the capabilities of any of us. There is not enough time in the day to be an expert in everything. So, no, you’re not alone! Everyone in software development feels overwhelmed.

 

There is no way that we can all be experts on the entire .NET Framework,  WCF, WF, WPF, Silverlight, SQL Server, PowerShell, Orcas, etc. You might need to know C#, VB.NET, C++, SQL, PowerShell, Ruby, Python, and the list goes on. It’s just too much for anyone.

 

I once heard an analogy that describes this situation perfectly. You need to build a cabinet at home, so you go to Home Depot to get the materials.  The Developer is you, the home owner, and the technology framework is Home Depot . You can walk in and decide that you can build the cabinet however you feel fit to do so. You can build it with wood, plastic, metal, with screws, nails, or glue. These are the classes and frameworks. You can also buy it pre-built; this could be a third party solution. You can also know that there are right/wrong ways to do something, these are Patterns/Anti-Patterns.

 

 In the end, you could build your cabinet a 1000 different ways. Software is the same. The options are endless and at times we’re required to use many technologies to solve a problem. Sometimes the options each technology offer overlap another technology somewhat. When this happens it becomes difficult to figure out what technology to use.

 

 

Segregation of Duties

As mentioned above, we’re required to know everything about everything in the programming field.

 

Developers are a lot like how doctors were 60+ years ago. Back then doctors took care of everything. If you were sick, they fixed your cold. If your eyes checked out, he checked them out. If you broke your arm, he took care of it. They took care of everything. Right now, that’s what developers are. We are the general practitioners in regards to development. If a problem comes up we are expected to know how to fix it. We are the experts in the computer field and our bosses expect that we know how to fix it. Doctors were the same. If we were sick/broken they were expected to fix it, and they did.

 

Nowadays doctors have specialties. We have neurologists, cardiologists, optometrists, and the list could go on for two pages. The only common ground is that each doctor has a foundation of classes which eventually led into their specialty. In my opinion, this is where software development is heading. We already have SharePoint developers, CRM Developers, Web Developers, Windows Developers. The base developer knows their language and concepts. Each specialty developer has much more training in their respective area.  This is where we’re going to end up.

 

Unfortunately this isn’t the case in 100% of business environments. A lot of developers wear a lot of shoes and that adds to the confusion. A lot of developers “know a little about a lot”.  This is probably the majority of us.

 

 

Staying Up To Speed

 

Since us developers have soo much to choose from and so many things to learn I often I get asked how I stay up to speed on all of the new technologies that are abreast. Here is the best advice I can give.

 

  1. Pick a technology (or a couple of them) and stick to them.
  2. Subscribe to some great blogs.
  3. Listen To Podcasts
  4. Watch Screen casts.
  5. Read technology related magazines

 

Example of my four picks

  1. I’ve decided to side with .NET 2.0/3.0/3.5, PowerShell, SQL Server, MOSS, and some other technologies for fun. 
  2. These are the Blogs that I read
  3. These are the Podcasts I listen to
  4. These are the Screencasts I watch
  5. These are the publications I read

 

Luckily, my commute provides a lot of time to listen to many podcasts. I have free time late at night and early in the morning to watch the screencasts. The magazines are always good to leave lying around the house or at work for break-time reading.

 

Conclusion

As said by Scott Hanselman (and many others – myself included), software development is not a 8-5 job. It’s something that must be a full time part of your life because if its not, you’ll never stay up to speed with what’s going on in the world around you. Then once everything has passed you by you will be wondering how you can catch up. If you want to go to work at 8am, then leave at 5pm and not have to think about programming thereafter ... I’m sorry to say, this profession is not for you. If you love technology like me, then this is the job for you. The key is, you have to have passion for what you do, and if you don't you'll never enjoy it. J

 

 

 

kick it on DotNetKicks.com
#    Comments [2] |
 Thursday, May 24, 2007

Blogs, Podcasts and Screencasts

UPDATE: I added the publications I also read at the bottom. :)

I've been asked what blogs I read, podcasts I listen to and screencasts I watch. So here's a comprehensive list for ya'll. :)

Blogs (in no particular order)

Then at times I'll browse the MSDN Blogs. Also note, these are what I call my "essential" blogs. I read these daily. I have about 30 other blogs that I read if I have time.

 

Podcasts (in no particular Order)

Other Podcasts I listen to when I can

Screencasts/Virtual Labs (in no particular order)

Publications

#    Comments [1] |
 Friday, May 18, 2007

Wireless Rest Areas

During this last week I've been in the process of relocating back to the south west area of the United States. During the drive back to the south west area I noticed something I've never seen before. Wireless Internet at Rest Areas!!!

Apparently this has been up and running for some time now but I was unaware of it. I noticed it at first in Louisiana. While in Texas I really began to notice how it was advertised on the Rest Area Signs. A nice little Wireless symbol was present on the signs.

So, if you're in dire need of a wireless connection, be sure to Google for wireless rest areas in the state you're traveling in. I've looked around and noticed tons of states have this set up already. I'd post links to all of them, but I dont have time to post 50 links right now. :) Enjoy!

#    Comments [0] |
 Thursday, May 10, 2007

Simplifying Database Modeling in Visio 2002/2003 through SQL Generation

 

During the development of any new greenfield project you're going to probably need to interact with a datastore.
From my experience, 8 out of 10 times this is going to be a database acting as the datastore, and in my case, it's normally SQL Server.

Database Modeling

When in the design phase we're modeling. Creating a representation of what we're going to build. In the design of a database I use Visio to do this by building an ERD Diagram.

If you're like me you're still probably using Visio 2002/2003. If you're also like me, you don't have the Enterprise Architect version of Visio that allows you to forward engineer the database from the ERD Diagram that you've created.

So, therein lies a problem. I have to design my database in Visio, then manually create the SQL and run it in query analyzer to get my database. Seem's like double the work to me.

1. Create the diagram and all the types and relationshiops
2. Copy it by hand into SQL Server Management Studio or the Query Window

I've always felt that Microsoft should have included forward engineering for Visio, regardless of the version. Unfortunately they didnt feel the same way.

Model to SQL

Fortunately there is a solution. A company called Orthogonal Software has a Visio plug-in called Orthogonal Toolbox that will allow you to export the data from the Visio document to an XML File.

Orthogonal has provided a couple XSLT's that you can apply (look for XSLT on that page). One of which has been altered to export SQL.

The XSLT file that originally was found with the product exported the SQL into one long string. No line breaks, nothing. Just a long string. After some futz'n around with the XSLT I was able to format the SQL that was transformed into readable SQL.

For example, a XSLT generated SQL Code that looks like this:

CREATE TABLE dbo.Employee( 
   [Employee_Id] bigint NOT NULL,
   [Name] nvarchar(100) NOT NULL
);
GO

How to implement

1. Download Orthogonal Toolbox and install it.
2. Create your Visio ERD Diagram.
3. Click the Orthogonal Toolbox Button in the toolbar.
4. Export to XML.
5. Put the XSLT files (download at the bottom of this post) into the same file as the XML File.
6. Open the newly created XML File and add this line after the XML Definition.
    <?xml-stylesheet type="text/xsl" href="ERD-SQL2005.xslt"?>
6. Open the XML file in Internet Explorer
7. Copy/Paste what you see into Query Analyzer and run.

Thats it. You've now gone from Database ERD Model to SQL Code in a few quick steps. TONS of time saved.

Update for SQL Server 2005

The original XSLT was for use with SQL Server 2000. Schemas were not supported in 2000, therefore everything started with "dbo". To get around this, I reworked the XSLT and changed it to use the table name.

When I'm designing for a SQL Server 2005 database I'll give my tables names such as [My_Schema].[Table_Name]. Therefore when I export and apply my XSLT, the new exported SQL will look like this:

CREATE TABLE [HumanResources].[Employee]( 
   [Employee_Id] bigint NOT NULL,
   [Name] nvarchar(100) NOT NULL   
);
GO

Where "HumanResources" is the schema and "Employee" is the table name.

 

Downloads

2000and2005XSLTs.zip (2.96 KB)

 

kick it on DotNetKicks.com
#    Comments [2] |
 Wednesday, May 09, 2007

New Version Notepad++

A new version of Notepad++ came out last week. I just got around to installing it and there are a few new features such as the enhancements made to the search/replace function. You can now search/replace through many different files through an improved interface and also search recursively.

There were some changes made to fix some bugs and a cool new feature that transforms all links that are typed into N++ to clickable links.

One of my favorite new features is the NppExec that allows you to run your own preconfigured scripts from within N++. Pretty cool. I wonder if you can run Powershell scripts from within there? Its worth checking out.

Also, if you have Aspell installed you can use it as a spell checker for Notepad++. I normally don't use Notepad++ for this but I can see its usefulness.

Links

Notepad++ Release Notes

64 Bit Version of the Shell integration (right click on any file and open it witn Notepad++).

Running Notepad++ from the command line (by typing "n" into the command prompt)

#    Comments [0] |