Managing in the Cloud, UX Design Patterns, Anders Hejlsberg’s The C# Programming Language, and More
All prices confirmed at press time and are subject to change. The opinions expressed in this column are solely those of the author and do not necessarily reflect the opinions at Microsoft.
Project Management in the Cloud
The success or failure of a software project is, to a large degree, a result of the methodologies and tools used to manage the project. Successfully managed software projects use tools such as source code control, issue tracking databases, and document sharing and collaboration among team members and stakeholders. Of course, success or failure is also dependent on whether there is a market for the software and the skill of the developers working on the project, but even an innovative product created by experienced developers will struggle to make it to market if there are serious deficits in how the project is managed.
Unfortunately, the process of selecting, installing, configuring, securing, and maintaining project management tools is a time-consuming and ongoing process. Larger companies have resources dedicated to these endeavors, but for smaller companies these expenses can be prohibitive. Such companies may be better served by offloading these tasks to an application service provider such as ProjectLocker. In a nutshell, ProjectLocker securely hosts your project management tools—like source code control software and an issue tracking database—and provides a Web-based interface for accessing and administering these tools. (ProjectLocker is designed to host closed-source projects where only specified users are allowed access to the source code repository and project management tools. If you are building an open-source application, consider using a hosting provider like CodePlex from Microsoft
Each project you create has its own source code control repository. ProjectLocker offers support for two source control products: Subversion and Git. To interface with the source control system, you will need to download an appropriate client application. TortoiseSVN is an open source Subversion client that integrates with the Windows shell and uses icon overlays to indicate the status of individual files (checked in, checked out, modified, and so forth). Another option is VisualSVN, which is a third-party plug-in that integrates Subversion and TortoiseSVN into Visual Studio. (Subversion and TortoiseSVN were examined in the April 2007 Toolbox article, "WiX Installation, Creating PowerPoint Decks, and More
", and VisualSVN was examined in the Visual Studio 2008 Launch Toolbox article, "SQL Code Completion, Subversion Tools, Agile Development, and more
Each ProjectLocker project also includes Trac, a wiki and issue-tracking system. The wiki serves as a virtual whiteboard where team members can discuss ideas and where project managers can post specs and milestones. The issue-tracking system is useful for maintaining information about feature requests and bugs. Tickets can be submitted from the project Web site or via e-mail, and administrators can customize the fields associated with each ticket item. Trac also seamlessly integrates with the source control system; developers can browse the files in the repository from the project Web site and view the history of changes. Furthermore, Trac includes a number of plug-ins that you can enable at the tick of a checkbox, including online forums and time tracking services.
Like most application service providers, ProjectLocker charges its users a monthly fee. ProjectLocker does offer a free account option, but it's limited to two user accounts and 300 MB of disk space. Paying plans start at approximately $5/month. There are additional enterprise features you can add for a monthly fee, which include source code control analytics, document management, and BuildLocker, a hosted build server for performing continuous integration.
Price: Varies by features; includes a free account option.
Blogs of Note
Discovering interesting and relevant content in the vast sea of developer blogs and resource sites can be like finding a needle in a haystack. Many people refer to one or two trusted resource sites and subscribe to only a few blogs rather than spend time scouring the Net for hidden gems. However, there are blogs that focus on finding the latest "best-of" technical content so that you don't have to.
One such aggregate blog is Chris Alcock's, "The Morning Brew." Each weekday, Chris compiles the latest and greatest technical content into a blog entry. Each installment of "The Morning Brew" includes between 5 and 15 links to recommended blogs entries, articles, tutorials, and other information pertinent to .NET developers. Chris groups each link into categories such as software, information, and community, and includes a synopsis of the recommended article.
Also check out Alvin Ashcraft's blog, "Morning Dew," which offers a daily collection of recommended articles titled "Dew Drop." These entries include a smattering of links covering a wide array of technologies and discussions of interest to .NET developers, including topics on Visual Studio, software design, Web development, community, and database development. Furthermore, most "Dew Drop" entries include a recommended book of the day.
In general, Alvin's entries include more links from a more diverse set of sources. While "The Morning Brew" includes fewer links per entry, each link includes a one or two sentence summary; "Dew Drop" entries in the "Morning Dew" include only a link and a title. Both blogs provide a valuable service by gathering interesting technical content from around the web and putting it all in one place.
The Morning Brew:
Explore User Experience Design Patterns
Designing and implementing the user experience (UX) is arguably the most important part of software design. It doesn't matter how efficient or how well-architected your application may be if your users cannot effectively use it. Unfortunately, most software developers struggle when it comes to designing the user experience, in part because UX design seems so touchy-feely whereas programming is much more logical and ordered. To help software developers build a better user experience, the Infragistics UX Team has released Quince, an online collection of UX design patterns.
A design pattern is a generic, high-level solution to a regularly occurring software design problem. It does not spell out step-by-step instructions on how to implement the pattern, but rather describes the problem, includes discussion about how and why the pattern solves the problem, offers guidance on implementing the pattern, includes an example of it in action, and cites related patterns. Design patterns are most commonly used in the realm of object-oriented programming languages and use code samples to illustrate the pattern in action. But as Quince illustrates, design patterns can also be used to share solutions to common problems in UX design.
Each UX pattern in Quince includes a succinct description of the problem, posits a solution, provides a context for the problem, describes the rationale behind the solution, and describes steps for implementing the pattern. Each pattern also includes screen shots and discussion of several real-world examples from various desktop and Web applications.
For example, the Alphanumeric Filter Links pattern starts with a problem description: "You have too many items for people to reasonably digest in one screen." It then goes on to offer a general solution, namely to show a list of alphabetic links that enable the user to filter the results. The pattern then explains the rationale behind filtering a long list of items, and includes tips and guidelines for implementing such a list. For instance, if the list being filtered includes entries that start with non-alphabetic characters, then the list of links must include an appropriate filter, such as "0-9". The pattern also includes five screen shots of successful alphanumeric filter lists from a number of applications and Web sites, each accompanied with a paragraph or two of analysis.
Quince offers several ways to browse the myriad of UX design patterns it has catalogued. You can browse all patterns, filtering them by category or keyword. Alternatively, you can see patterns grouped by user tasks, such as search, drill down, data entry, numeric input, display of complex data, and so on. There's also a wireframe view, which shows a standard application user interface with the links to the various design patterns located on-screen where they would typically appear in the UI.
Design patterns have proven to be indispensible tools for software engineers when building object-oriented programs. They can also help you overcome common UX design challenges with tried and tested solutions. Quince is an excellent resource for finding and learning about the most pertinent UX design patterns and should be consulted when you're working on an application's user experience.
One of the exciting (and terrifying!) things about our field is that there's always something new to learn: new programming languages, new technologies, new tools, and new frameworks. Over the years I have routinely scheduled a few hours a week to read a book or visit a Web site to learn about the latest new thing. However, I recently decided to reappropriate that time to reinforce my knowledge of the technologies that I use every single day—technologies like C#, SQL, and the Microsoft .NET Framework base class libraries (BCL). To this end, I picked up a copy of The C# Programming Language, 3rd Edition, by Anders Hejlsberg et al (Addison-Wesley Professional, 2008). (Anders Hejlsberg is a Microsoft Technical Fellow and the chief designer of the C# language.)
At 754 pages, The C# Programming Language is a dense, technical, and very thorough examination of C# 3.0's syntax and semantics. The first three chapters provide an overview of the language's key features, including types and variables, classes and objects, arrays, interfaces, and events. There's also an overview of C# grammar. The concepts discussed in these introductory chapters are then explored in detail, each in its own chapter. For example, there's a chapter on types, one on variables, one on conversions, another on expressions, and so forth.
The writing style in The C# Programming Language is formal and dry. There are no figures or screen shots; the code samples given are terse. The book reads like a technical specification. However, there are several annotations throughout the book from the authors and other prominent C# software engineers both from within Microsoft and from the wider developer community. Some annotations offer a real-world example to complement the material discussed. Others include pearls of wisdom or point out common pitfalls that may surface when working with a particular feature. These annotations are written in a more conversational voice and help add context to the material.
The C# Programming Language is not for everyone. While the book does include introductory chapters, I would recommend this book only to developers with a working knowledge of the language. This book is best suited for intermediate to advanced developers who want to explore the nitty-gritty details of C# and gain a deeper understanding of the language's syntax and semantics.
Price: $44.99, 754 pages