Tuesday, 24 December 2013

Quality Learning

What is learning? More specifically, what is quality learning in the context of software engineering? According to Kimble (1961), learning is the relatively permanent change  in response resulting from extended practice. Ritter et al. have published a paper on Learning and Retention, retention being one of the key characteristics of "quality learning".

Ritter explains that one of the consequences of "quality learning" is being able to perform a task faster the more times you do it. The task could be computer related, mathematics related or even writing books.

Ritter refers to Rasmussen 1983 for a theory of learning: consisting of declarative knowledge acquisition, proceduralisation followed by "skill tuning" (also known as the "autonomous stage"). At this point, users are considered to be "experts".

It is worth contemplating the work of Rasmussen and what motivated him to develop his theory of learning. Jens Rasmussen was a Danish engineer known for his work in "safety science". His theory of learning was adopted in Reason's book "Human Error". The area of study is sometimes referred to as "human factors" or more colloquially, HCI.

ITIL - Who Owns it? What are the Core Concepts? Service Delivery vs. Service Support.

The ITIL provides a set of practices for IT Service Management (ITSM). The official books are Crown Copyright (this is a specific type of copyright in the UK, officially defined under the Copyright, Designs and Patents Act 1988) and the acronym ITIL is a registered trademark of the Cabinet Office (again in the UK).

Two of the core parts of ITIL include IT Service Delivery (delivery of an IT service, including SLAs, recovery plans, expense tracking and financial management) and IT Service Support (which includes areas like Incident Management, Problem Management and Change Management).

Sunday, 15 December 2013

Proof Wiki

Pure mathematics is often used in proofs of program correctness. An interesting website aimed at demonstrating mathematical proof is ProofWiki.

Code Metrics in Visual Studio

MSVS can produce a number of software measurements. The "code metrics" are summarised in the following MSDN article. They comprise the folllowing:

* Maintainability index (high values are good, below 20 is bad)
* Cyclomatic Complexity
* Depth of inheritance
* Class Coupling
* Lines of Code

For more depth on cyclomatic complexity one can consult the original article by Thomas McCabe published in the IEEE Transactions on Software Engineering in 1976.

Wednesday, 11 December 2013

The Doubly-Linked List in C#

LinkedList in System.Collections.Generic is your friend - if you want bidirectional iteration.

Warning: Relevance of System.Collections.Specialized Diminished in a Post-.NET-Generics World

This namespace (System.dll) surfaced early in .NET 1.1. and the classes and structures have remained pretty much the same since. There have been some tweaks in terms of new interfaces and delegates, but by and large, this namespace has remained fairly static. In the post-.NET-generics world it's relevance has waned somewhat but it still contains some useful and interesting abstractions, for which even the .NET 4.5 programmer can achieve rewards.

Of all the classes, StringDictionary, a dictionary whose keys and values are strings, is the most easy and obvious to use, and maybe is a bit neater than using System.Collections.Generic in this specific case.

The namespace also has ListDictionary intended to have superior performance than a Hashtable for a small number of items (less than 10) by using a singly-linked list to implement the IDictionary interface.

.NET Subtleties: An Assembly's CodeBase versus its Location

CodeBase versus Location

The CodeBase property on the Assembly class gets the "original" location of a .NET assembly, for example, if an assembly was downloaded from the web, the CodeBase property would start with "http://".

The CodeBase property is not guaranteed to be set for assemblies in the GAC.  I repeat, the CodeBase property is not guaranteed to be set for assemblies in the GAC.

This differs from the Assembly's Location, which is where the assembly is currently at. Suzanne Cook's CLR notes are a great starting point to learn more about assemblies in a more coherent setting than just reading standard documentation.

Here's a Thing

Before you go writing code relying on the CodeBase property, take a moment to think whether your application may have the right "path discovery permissions" to actually query this property sensibly.

A Task Worth Doing

As assemblies are fundamental and unavoidable piece of the .NET ecosystem, understanding the Assembly class in System.Reflection is a task well doing.

Tuesday, 10 December 2013

Mastering WordArt in PowerPoint

To insert some fancy WordArt into your PowerPoint presentation, simply go to Insert in the Ribbon and click "WordArt". (Hint: it is in the "Text" segment of the Insert Ribbon area).

Ha, that was easy.

What's not so easy is knowing how to change the default properties on the WordArt. The first thing you need to be aware of is there are separate settings for Shape Properties and then for Text Properties.

Text Properties are easy, they basically determine what colors to use for the Fill, for the Outline and any fancy effects you want to add to the text, such as Shadow or Bevelled appearance. But even here there is subtlety. For example, for smaller WordArt you may find it visually appealing to have the Text Color and Outline set to the same color.

Shape Fill determines how the rectangle text box holding the text is rendered. If you want a see-through text box (i.e. you are overlaying text on a diagram which you want to still be able to see with the overwritten text) you need to set Shape Fill to be No Fill and Shape Outline to No Outline.

To rotate text, hit Alt and press the left and right arrow keys.

Now Text Size.The default text size is absolutely humongous. To bring it down to size, the Home tab in the Ribbon will allow you to adjust (e.g. 20 is quite reasonable, or if you have lots of these WordArts springing up around the place, 16 is a good size too).

Books and Resources on Software Design

So you want to become a legendary Windows software designer? Why not try reading some Unix first?

The design of operating systems can yield a rich source of knowledge and insights into software design. Take a look, for example, at:

The Design of the Unix Operating System, by Maurice J. Bach, first published in 1990, is a great book on how the Unix kernel has been designed and written, starting with an overview of the file and process subsystems, files and processes being core concepts in any Unix system. 

The beauty of this book is that it teaches you to think of the subsystems you need to create within the larger architecture of a software application in order to ensure conceptual scalability.

The book is also available on GitHub.