Software Developer Consultant, San Diego, California

FAQ - Frequently Asked Questions

Related to Software Development

Below are some general frequently asked questions related to software development. Additional questions may be added from time to time. Some of the answers below may link to more in-depth discussion on some of these topics, and additional links to more detailed discussion may be added in later as well.


What is WCF?

WCF stand for "Windows Communication Foundation". If you are familiar with Web Services, you can think of this as a similar or newer / improved version of this technology. It is a way of taking code and having it run on a separate server, yet being able to call on that code from an application on a client machine as if you were simply calling a routine that was part of your client application code. But one of the benefits of WCF over the older Web Services technology is that it doesn’t have to be hosted by a web server. You can place it into a service running on a Windows server, for example.

What is WPF?

WPF stands for "Windows Presentation Foundation". This is a way to create graphically "artistic-looking" user interfaces for Windows Desktop applications, instead of the traditional somewhat dull-looking forms with labels, text boxes, and scroll bars that we have all been used to for years. The graphics "scale" automatically (can be zoomed in / out) as the screen is expanded or reduced without distortion (amazingly), so that the programmer no longer has to worry as much about what size screen or what screen resolution is going to be running the application.

What is Silverlight?

You might think of Silverlight as having many of the same benefits as WPF, but for browser based applications. Also, this is cross-platform (IE/Firefox/Windows/Mac, etc.). Instead of coding a traditional HTML form with text boxes and grid-like screen organization, you are now free to create whatever free-form, colorful, artistic design you want, invent controls no one has ever seen before, etc., and have this be the user interface.

Silverlight also has the advantage of taking some of the load of processing code off of the web server and moving it to the client machine. Code is not executing completely in the browser, as it is with HTML, but rather in an "object" referenced on the HTML page that is capable of running sophisticated code all on its own, and that is actually running on the client machine, and not on the server. A web user who visits a page created with Silverlight may be prompted to download the latest version of Silverlight, similar to the way web users may sometimes be prompted to download the latest Adobe Flash Player when attempting access a page designed for that product.

The Silverlight download is purposely kept small to make this a relatively quick download. For that reason, it is a scaled down version of the full .NET Framework functionality and of full WPF functionality.

What is Entity Framework?

Entity Framework is a way of adding a layer of abstraction on top of accessing data using SQL statements, one goal being to avoid having to put SQL statements in a string to pull data from a database. Instead the idea is to be able to pull data from the database the same way you would get data from an object or collection of objects in code.

With SQL in a string, there is no way the compiler can check syntax. If you coded the SQL statement wrong, such as by misspelling a column name, the compiler can’t tell you. You find out when you go to run the code. At run time, your code blows up because SQL Server couldn’t find the column name. However, if instead we wrap all access to SQL with the use of objects through Entity Framework, then the developer is only working with objects, collections, etc., and the compiler can catch it when you misspell, don’t match a type (integer vs. string), etc.

Entity Framework can let you artificially reorganize the structure of the data. For example, you might have an Employee table and a Contact table, where the Employee’s name and address are actually stored in Contact, along with many other non-employee type contacts. Entity Framework lets you create an artificial "employee" table that de-normalizes these two into a single table or "entity" having the employee data along with his name and address info. Then you can just work with your new simpler entity. (Kind of like defining a view in the database, but here, nothing additional gets defined in the database. It is defined in the Entity Framework layer instead.)

What is LINQ?

LINQ stands for "Language Integrated Query". You might think of this as a kind of abstraction layer on top of SQL. But actually, one advantage of using LINQ is that it is not just for pulling data out of a SQL database, but for pulling data out of all kinds of different types of stores of data. You can do a LINQ query against a memory object, against an XML file, in addition to traditional SQL Server databases.

What is Agile Development?

Agile is a style of project development that has become very popular in recent years. SCRUM is a type of Agile development, and there are other flavors as well. It contrasts with the more "traditional" or now sometimes referred to as "Predictive" project development.

With the Agile approach you try to avoid planning out the whole project in advance in infinite detail. You maintain a list of desired functionality, and then you select a small piece of that functionality – just enough you think you will be able to accomplish in a small time frame, such as a month, and you work on completing as much of that subset of functionality as possible in that timeframe. What doesn’t get finished goes "back on the pile" of requirements for the next month-or-so long iteration. With each iteration, you produce a working piece of software you can show the client as a tangible result.

Can you estimate with an Agile method? With Agile, you have to stick to the philosophy that you are not committing to completing a given set of functionality in a given timeframe. You can commit to a timeframe, but in order to meet the timeframe and the estimated cost, the client has to be willing to adjust the scope where necessary, or in other words, accept that not all desired features may be completed within the estimated timeframe or within the estimated cost.

The advantage of Agile over "Predictive" is that it is totally flexible. At the end of each month / iteration, requirements can be adjusted. Only the requirements you select out for a given iteration must stay frozen during that short time frame (so that you’re not trying to code a moving target during the month).

What is Predictive Development?

The traditional or "Predictive" style of project development is the formal process of having project phases such as Requirements Gathering, Design, Construction, and Deployment. Its advantage is that it lends itself to very accurate estimating. Its downside is that it is very rigid, in contrast to a more flexible approach such as Agile. If requirements change mid-stream, this may even call for some re-design, and as a result, changes may often require adjustment of any previous estimate.

What is Spatial Data?

Spatial data is data related to geographic locations or geometric coordinates. For a brief tutorial on how to get started with using Spatial Data in SQL Server tables and queries, please see the discussion What is Spatial Data?.

I am an experienced programmer, but new to consulting. How much should I charge?

To determine an hourly rate as an independent consultant, one general rule of thumb is to take the amount you would expect to earn per hour in a full-time salaried position and multiply by two. To see why this may be so, and to see some of the many factors to consider when determining an hourly rate, please see How much should I charge?.