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.
Questions
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?.
What is BizTalk Server?
BizTalk Server is a "convert anything to anything" data integration / transforming tool that works
in real time. For more information see BizTalk Server.
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?.