In a recent meeting, an action arose and I asked one of my team (PJ) to catch it and complete it. He (tongue in cheek) commented to all those at the meeting that I was "the best delegator" he'd ever worked with. His humorous implication was that I don't do any work, I just get other people to do it for me. I've known PJ for years and worked on many successful projects with him, so I was happy to be the butt of his joke. However, I see delegation is a positive thing, so it set me thinking about how different people understand the verb "delegate".
The dictionary says it means "to give a particular job, duty, right, etc. to someone else so that they do it for you". The fact that one is giving one's work to somebody else to do doesn't sound altogether positive, but if we accept that a team can do more work than one individual, and if we accept that a team needs a leader to coordinate and dispatch work around the team, then the team leader isn't delegating his/her own work, they are simply spreading the team's work around the members of the team.
However, in my mind, delegation is a tool to help the team learn and grow. And that means that I choose to delegate some of the management work to members of the team also. By doing so, I can coach them to learn new skills; and I inevitably learn new things as we go along too.
Not everyone wants to be a manager, but everybody needs to understand the objectives and challenges of management. Armed with knowledge of management, one can work in harmony with one's leaders and management. Moreover, it is often the case that the perception of the team leader's role is not a match for the actuality. For me, team leadership is about a) achieving more than I can manage on my own, b challenging myself and my team to do new things, c) helping my team members to become the best they can become, d) learning from others, e) enjoying the benefits of being part of a successful team.
So, "The Delegator", is it a positive or a negative epithet? In my mind it is a distinctively positive name. It means I'm helping my team to learn and grow, and I'm helping them with their career and their ability to enjoy their working days (and at the same time they are helping me to do the same).
SAS® and software development best practice. Hints, tips, & experience of interest to a wide range of SAS practitioners. Published by Andrew Ratcliffe's RTSL.eu, guiding clients to knowledge since 1993
Tuesday, 31 January 2012
Tuesday, 24 January 2012
You Can't Fire Everyone
Some years ago I was taught a memorable and valuable lesson by my erstwhile programme manager (we'll call him BJ). I was brought into the project to provide knowledge of i) business intelligence, and ii) software documentation appropriate for the regulated pharmaceutical industry. After a while on the project, BJ asked me to act as BI Delivery Lead. He promised me the ability to recruit a team but initially supplied me with two existing staff members.
After a week I went back to BJ and said he'd have to provide me with two different staff members because the first two a) knew nothing about BI, and b) were at each other's throats all day long. BJ told me that nobody else was available; I'd have to make it work. Then he put his hand on my shoulder and told me he'd especially chosen me to act as BI Delivery Lead because he knew I had good people skills. Flattery is a good management technique! But more importantly, BJ was teaching me an important team leadership lesson: developing people is just as important as developing software.
It's a lesson I'll never forget and, as I worked with my two staff members over the following months and we all achieved increasing degrees of success, I discovered that developing people can be at least as satisfying as developing software.
I was reminded of this specific lesson when I read Roy Osherove's You Can't Fire Everyone post on his 5Whys blog in December. Roy's blog is a treasure trove for those who want to become a better team leader. Roy typifies the process of team development as following three phases: the chaos phase, the learning phase, and the self-leading phase. Roy describes how to recognise which phase you're currently in, and how to progress and develop your team. Recommended reading.
After a week I went back to BJ and said he'd have to provide me with two different staff members because the first two a) knew nothing about BI, and b) were at each other's throats all day long. BJ told me that nobody else was available; I'd have to make it work. Then he put his hand on my shoulder and told me he'd especially chosen me to act as BI Delivery Lead because he knew I had good people skills. Flattery is a good management technique! But more importantly, BJ was teaching me an important team leadership lesson: developing people is just as important as developing software.
It's a lesson I'll never forget and, as I worked with my two staff members over the following months and we all achieved increasing degrees of success, I discovered that developing people can be at least as satisfying as developing software.
I was reminded of this specific lesson when I read Roy Osherove's You Can't Fire Everyone post on his 5Whys blog in December. Roy's blog is a treasure trove for those who want to become a better team leader. Roy typifies the process of team development as following three phases: the chaos phase, the learning phase, and the self-leading phase. Roy describes how to recognise which phase you're currently in, and how to progress and develop your team. Recommended reading.
NOTE: Monitoring the SAS 9.2 Metadata Server
There's a nice walkthrough of some of the features of the SAS 9.2 metadata server on the SAS Professionals web site in the Social Media / Videos section. You'll have to be a SAS Professionals member to view it from the link I've provided, but if you're not already a member it's a good reason to join now (it's free).
The 7 minute video is particularly useful if you've recently upgraded from 9.1 and would like a reminder of the nice new features you now have available to you.
It particularly caught my eye because I've just recently added the SAS Platform Administration: Fast Track (SPAFT) five-day course to my training repertoire. So, if you plan to attend this SAS UK course this year, you might just find me teaching you (please don't let that put you off booking!).
The 7 minute video is particularly useful if you've recently upgraded from 9.1 and would like a reminder of the nice new features you now have available to you.
It particularly caught my eye because I've just recently added the SAS Platform Administration: Fast Track (SPAFT) five-day course to my training repertoire. So, if you plan to attend this SAS UK course this year, you might just find me teaching you (please don't let that put you off booking!).
Wednesday, 18 January 2012
Code Kata #1
In yesterday's post I described Code Katas and how they can be a useful form of programming practice. Dave Watson (the "inventor" of Code Katas) offers 21 on his Code Kata blog. I intend to publish my own from time-to-time, and here is the first. Enjoy...
Imagine you have to write some code for a vending machine. You are given a) the price of the product to be vended, and b) the amount of money tendered by the customer. Your task is to deduce what change to offer, i.e. how many of each type of coin. Optimise your result by minimising the number of coins given in change. Assume your vending machine has unlimited stocks of the following denomination: 1p, 2p, 5p, 10p, 20p, 50p, £1, £2.
Two examples of input and output follow:
i) Product price is 70p; money tendered is £1, i.e. 100p. Optimal output is 1 x 10p and 1 x 20p
ii) Product price is 63p; money tendered is 80p. Optimal output is 1 x 10p, 1 x 5p, 1 x 2p
This challenge is entirely language-independent, so your solution can be produced in the manner that best suits your regular coding activities. Hence, you might write your solution using DATA Steps and/or you might use macros. Your input values might be provided as global macro variables, or parameters to your macro(s), or supplied within a data set.
Once you've cracked the above, you might want to consider the following additions - perhaps on subsequent days.
A) Accept a "list" of coin denominations as additional input rather than hard-coding the list I supplied above. The list might be as a parameter to your macro, or in a data set
B) Rather than assume an unlimited stock of each coin in the machine, accept an input "list" that tells you how many coins of each denomination are in the machine. Consequently, you will need to consider the possibility that your result is a refusal to vend due to "insufficient change"
C) Rather than writing a simple textual result to the SAS log, produce some kind of coloured report or graph depicting the change given
You also might like to consider different solutions. The use of arrays or hash tables would be two alternatives.
Imagine you have to write some code for a vending machine. You are given a) the price of the product to be vended, and b) the amount of money tendered by the customer. Your task is to deduce what change to offer, i.e. how many of each type of coin. Optimise your result by minimising the number of coins given in change. Assume your vending machine has unlimited stocks of the following denomination: 1p, 2p, 5p, 10p, 20p, 50p, £1, £2.
Two examples of input and output follow:
i) Product price is 70p; money tendered is £1, i.e. 100p. Optimal output is 1 x 10p and 1 x 20p
ii) Product price is 63p; money tendered is 80p. Optimal output is 1 x 10p, 1 x 5p, 1 x 2p
This challenge is entirely language-independent, so your solution can be produced in the manner that best suits your regular coding activities. Hence, you might write your solution using DATA Steps and/or you might use macros. Your input values might be provided as global macro variables, or parameters to your macro(s), or supplied within a data set.
Once you've cracked the above, you might want to consider the following additions - perhaps on subsequent days.
A) Accept a "list" of coin denominations as additional input rather than hard-coding the list I supplied above. The list might be as a parameter to your macro, or in a data set
B) Rather than assume an unlimited stock of each coin in the machine, accept an input "list" that tells you how many coins of each denomination are in the machine. Consequently, you will need to consider the possibility that your result is a refusal to vend due to "insufficient change"
C) Rather than writing a simple textual result to the SAS log, produce some kind of coloured report or graph depicting the change given
You also might like to consider different solutions. The use of arrays or hash tables would be two alternatives.
Tuesday, 17 January 2012
Code Katas
Last week I made a brief mention of Code Katas and how they can help you as a form code practice. Let's find out some more.
The basic concept surrounding Code Katas encapsulates the ideas that a) we are professional coders, b) practice improves one's skills. Wikipedia tells us "Code Kata is a term coined by Dave Thomas, co-author of the book The Pragmatic Programmer, in a bow to the Japanese concept of kata in the martial arts. A code kata is an exercise in programming which helps a programmer hone their skills through practice and repetition".
Dave has a blog for his books, and a sub-blog specifically about Code Katas. His Code Kata blog tells us all about the background and Dave's reasoning for using Katas.
I greatly enjoy the consultancy and the project management work that I do, but I get at least as much enjoyment from coding too. Not only coding to a specification, but coding for coding's sake. And that, in a nutshell, is what a Code Kata is - coding for coding's sake. If you were into tennis, you might focus on competitions wherein you have to give your best, but you'll be able to achieve better results in those competitions if you practice regularly. There are no prizes for practicing, but it sure helps.
Who benefits if you become a better coder? Your employer or client will certainly benefit, but your own career prospects will improve too. So, don't limit yourself to doing your Code Katas within core hours. Maybe it's something you might consider doing over lunch, or after hours.
Dave lists 21 Katas on his site, most of which I've found applicable to SAS. I'll offer my own contributions from time-to-time here on NOTE:, starting tomorrow. In the meantime, please feel free to send your own Code Katas to me. I'll publish some of them.
The basic concept surrounding Code Katas encapsulates the ideas that a) we are professional coders, b) practice improves one's skills. Wikipedia tells us "Code Kata is a term coined by Dave Thomas, co-author of the book The Pragmatic Programmer, in a bow to the Japanese concept of kata in the martial arts. A code kata is an exercise in programming which helps a programmer hone their skills through practice and repetition".
Dave has a blog for his books, and a sub-blog specifically about Code Katas. His Code Kata blog tells us all about the background and Dave's reasoning for using Katas.
I greatly enjoy the consultancy and the project management work that I do, but I get at least as much enjoyment from coding too. Not only coding to a specification, but coding for coding's sake. And that, in a nutshell, is what a Code Kata is - coding for coding's sake. If you were into tennis, you might focus on competitions wherein you have to give your best, but you'll be able to achieve better results in those competitions if you practice regularly. There are no prizes for practicing, but it sure helps.
Who benefits if you become a better coder? Your employer or client will certainly benefit, but your own career prospects will improve too. So, don't limit yourself to doing your Code Katas within core hours. Maybe it's something you might consider doing over lunch, or after hours.
Dave lists 21 Katas on his site, most of which I've found applicable to SAS. I'll offer my own contributions from time-to-time here on NOTE:, starting tomorrow. In the meantime, please feel free to send your own Code Katas to me. I'll publish some of them.
Monday, 16 January 2012
Engage More Closely With NOTE:
The NOTE: blog is powered by Google Blogger. Google have rolled out a number of improvements to Blogger recently. One of those improvements is support for threaded commenting, which means that it is now much easier to differentiate between whether someone is making a general comment on the thread, or responding to another comment on the thread.
I hope this will mean that we can engage in a more full and lively conversation in the comments on each posting.
What do you think?
I hope this will mean that we can engage in a more full and lively conversation in the comments on each posting.
What do you think?
Wednesday, 11 January 2012
Do You Read? (And Write?)
Whilst New Year's resolutions are still in our minds, I'm thinking about my training plans for 2012. One key element of my plan is attendance of SAS Global Forum in April, but at the other end of the scale is my choice of professional reading material - not just for the flight to Orlando.
Stephen King is widely quoted as saying "If you want to be a writer, you must do two things above all others: read a lot and write a lot." Stephen King is undoubtedly a successful author so I must assume he knows what he's talking about; and I think there is a significant degree of similarity between writing programs and writing novels.
Let's start with reading. In my experience, very few SAS developers own a SAS-related book or a software engineering book. If developers don’t know about the fundamentals of software engineering (not just code syntax but also issues like configuration management and testing) how can they explain them to non-technical folks like sales and upper management once they’ve become technical leaders?
SAS Publishing doesn't offer too many titles that address software engineering for SAS projects, but don't let that hold you back. There are plenty of good books that offer insight that is relevant to the SAS practitioner. My own bookshelf includes classics and contemporary books alike (in no particular order):
With regard to writing, you might feel you already write enough code to be able to tick this box. Have you ever stepped back to consider the amount of time spent reading and writing emails, reading and writing specifications, and attending meetings? Perhaps you don't spend as much time actually coding as you thought. Maybe you should consider doing “Code Katas” — little practice sessions, based on a concept borrowed from karate and other martial arts, where the practitioner fights against an imaginary opponent.
Practice for the sake of practice is commonplace in sports and many other pursuits, why not programming? The term coined by Dave Thomas, co-author of the book The Pragmatic Programmer, in a nod to the Japanese concept of kata in the martial arts. A code kata is an exercise in programming which helps a programmer hone their skills through practice and repetition. I'll return to this subject in subsequent articles.
In summary, don't leave your professional development in the hands of your manager. Consider adding a professional book to your bookshelf (and read it too). And challenge yourself to do a little off-topic coding in order to broaden your knowledge and experience. You'll thank me for it!
Stephen King is widely quoted as saying "If you want to be a writer, you must do two things above all others: read a lot and write a lot." Stephen King is undoubtedly a successful author so I must assume he knows what he's talking about; and I think there is a significant degree of similarity between writing programs and writing novels.
Let's start with reading. In my experience, very few SAS developers own a SAS-related book or a software engineering book. If developers don’t know about the fundamentals of software engineering (not just code syntax but also issues like configuration management and testing) how can they explain them to non-technical folks like sales and upper management once they’ve become technical leaders?
SAS Publishing doesn't offer too many titles that address software engineering for SAS projects, but don't let that hold you back. There are plenty of good books that offer insight that is relevant to the SAS practitioner. My own bookshelf includes classics and contemporary books alike (in no particular order):
- The Mythical Man Month, by Fred Brooks [amazon.co.uk]
- Refactoring: Improving the Design of Existing Code, by Martin Fowler [amazon.co.uk]
- Planning Extreme Programming (XP), by Kent Beck & Martin Fowler [amazon.co.uk]
- The Data Warehouse Toolkit: The Complete Guide to Dimensional Modeling, by Ralph Kimball [amazon.co.uk]
- The Data Warehouse Lifecycle Toolkit, by Ralph Kimball [amazon.co.uk]
- Waltzing with Bears: Managing Risk on Software Projects, by Tom DeMarco and Timothy Lister [amazon.co.uk]
- Head First Software Development, by Dan Pilone & Russ Miles [amazon.co.uk]
- Algorithms + Data Structures = Programs, by Niklaus Wirth [amazon.co.uk]
- What is Lean Six Sigma, by Mike George, Dave Rowlands & Bill Kastle [amazon.co.uk]
- UML Distilled, by Martin Fowler [amazon.co.uk]
- Information Revolution: Using the Information Evolution Model to Grow Your Business, by Jim Davis, Gloria Miller & Allan Russell [SAS bookstore]
Practice for the sake of practice is commonplace in sports and many other pursuits, why not programming? The term coined by Dave Thomas, co-author of the book The Pragmatic Programmer, in a nod to the Japanese concept of kata in the martial arts. A code kata is an exercise in programming which helps a programmer hone their skills through practice and repetition. I'll return to this subject in subsequent articles.
In summary, don't leave your professional development in the hands of your manager. Consider adding a professional book to your bookshelf (and read it too). And challenge yourself to do a little off-topic coding in order to broaden your knowledge and experience. You'll thank me for it!
Tuesday, 10 January 2012
NOTE: Programming for Job Security (Golden Oldies)
This post ends the series of golden oldies. Looking through past conference papers has revealed many interesting nuggets. I was interested to read SAS co-founder John Sall's paper on PROC MATRIX, the forerunner of SAS/IML. This paper was presented at the first SUGI, in 1976 - known SAS One.
I was also pleased to see some opinion pieces too. I saw two papers by Grant Blank on the subject of the obsolescence of SAS (SUGI 10 in 1985 and SUGI 16 in 1991), and another by Barbara Ison & Dania Ferguson comparing the newly-introduced macro facility with the existing ability to use LINK statements within DATA steps (SUGI 17 in 1992). I don't necessarily agree with too much of their arguments, but I firmly respect their freedom to offer their opinions. Discussion and opinion seems to have been lost in modern SAS conferences. The focus of papers is now on case studies and product features. Both important and valuable in their own right, but I miss the variety that used to exist.
Whilst there is a wealth of good quality papers and articles available, no series of golden oldies could end without the inclusion of Art Carpenter's seminal series on Job Security. Software engineering can be a pretty dry and humourless topic, but Art managed to inject some real humour into the proceedings of several conferences. His first paper on the subject was at SUGI 18 in 1993, but I choose to highlight the paper he co-presented with my old friend Tony Payne at SUGI 23 (1998) in Nashville, Programming for Job Security Revisited: Even More Tips and Techniques to Maximise Your Indispensability. Comedy gold, but also a series of high quality tips for making sure your programs are successfully peer-reviewed.
I was also pleased to see some opinion pieces too. I saw two papers by Grant Blank on the subject of the obsolescence of SAS (SUGI 10 in 1985 and SUGI 16 in 1991), and another by Barbara Ison & Dania Ferguson comparing the newly-introduced macro facility with the existing ability to use LINK statements within DATA steps (SUGI 17 in 1992). I don't necessarily agree with too much of their arguments, but I firmly respect their freedom to offer their opinions. Discussion and opinion seems to have been lost in modern SAS conferences. The focus of papers is now on case studies and product features. Both important and valuable in their own right, but I miss the variety that used to exist.
Whilst there is a wealth of good quality papers and articles available, no series of golden oldies could end without the inclusion of Art Carpenter's seminal series on Job Security. Software engineering can be a pretty dry and humourless topic, but Art managed to inject some real humour into the proceedings of several conferences. His first paper on the subject was at SUGI 18 in 1993, but I choose to highlight the paper he co-presented with my old friend Tony Payne at SUGI 23 (1998) in Nashville, Programming for Job Security Revisited: Even More Tips and Techniques to Maximise Your Indispensability. Comedy gold, but also a series of high quality tips for making sure your programs are successfully peer-reviewed.
NOTE: Keeping Track of Defects
I recently stumbled across an article on David Biesack's Peer Revue blog regarding SAS's defect tracking process. David provides a detailed and extensive insight into how the guys and girls in Cary (and beyond) deal with defects, from beginning to end.
If you've ever raised a Track that was acknowledged as a bug, this article tells you what went on in the background prior to you getting a hotfix or a new version of SAS code. It's interesting reading, plus there's plenty of good practice that we can all use in our own development efforts. David highlights a number of things:
If you've ever raised a Track that was acknowledged as a bug, this article tells you what went on in the background prior to you getting a hotfix or a new version of SAS code. It's interesting reading, plus there's plenty of good practice that we can all use in our own development efforts. David highlights a number of things:
- Effective tracking of defects (through their whole lifecycle)
- The use of a source management system to keep track of versions and releases of code
- Adoption of the Open/Closed Principle whereby code should be open for extension, but closed for modification. Expressed another way: when a single change to a program results in a cascade of changes to dependent modules (e.g. other macros or DI Studio jobs), that program exhibits the undesirable attributes that we have come to associate with “bad” design. The program becomes fragile, rigid, unpredictable and unreusable. The open/closed principle attacks this in a very straightforward way. It says that you should design modules that never change. When requirements change, you extend the behavior of such modules by adding new code, not by changing old code that already works. I wrote about this in NOTE: Coupling, Bad back in May of this year
Learn How to Code in 2012
Do you know someone who could benefit from learning how to code? Are your parents looking for a new hobby in retirement? Are your kids looking for wider career options? Send them along to http://www.codeyear.com/ and encourage them to sign-up for the codecademy course. It's free.
Back in November there was an interesting piece from the BBC’s technology correspondent, Rory Cellan-Jones, entitled Coding – the new Latin. Rory referenced a report from NESTA (the UK’s National Endowment for Science, Technology and the Arts) called Next Gen. Transforming the UK into the world’s leading talent hub for the video games and visual effects industries needs a generation of school leavers who have some skill and knowledge of coding. There seems to be a worldwide push to reinstroduce some kind of computer coding education back into schools. I support that. I certainly enjoyed learning computer skills when I was at school, and I know it benefited me in my career.
Tuesday, 3 January 2012
NOTE: Coding "Missing Values" (Golden Oldies)
My mini-series of hints and tips from past decades would not be complete without a contribution from the SAS-L mailing list - the 25 years old list server that continues to provide immense value to SAS practitioners worldwide. Joined by the comp.soft-sys.sas newsgroup in 1993, these two services have worked hand-in-hand to answer questions and share SAS knowledge.
Matthew Healy's 1996 contribution to SAS-L, entitled "Coding Missing Values", offers timeless advice for data model design.
Matthew Healy's 1996 contribution to SAS-L, entitled "Coding Missing Values", offers timeless advice for data model design.
NOTE: Analytics 2012 Conference Series, Germany, 14-15 June
The turn of a New Year is a good time to be thinking about your training plans for the year. Training can take several forms, it doesn't have to be limited to classroom sessions. Think more broadly. Are there any SAS-related books, or IT-related books that you would benefit from reading?
And be sure to include conferences in your short-list of training activities. SAS Global Forum 2012 should be high on your list. If you're into analytics then you should also consider the Analytics Conference Series. The next event is the European event in Cologne, Germany, between 14th and 15th June. For statisticians, analysts, forecasters, data miners and their managers, this is likely to be the premier analytics event for SAS practitioners in Europe this year. Book before the end of February to get an early bird discount. And, before you book, check-out the pre-conference training offers for further value-for-money.
And be sure to include conferences in your short-list of training activities. SAS Global Forum 2012 should be high on your list. If you're into analytics then you should also consider the Analytics Conference Series. The next event is the European event in Cologne, Germany, between 14th and 15th June. For statisticians, analysts, forecasters, data miners and their managers, this is likely to be the premier analytics event for SAS practitioners in Europe this year. Book before the end of February to get an early bird discount. And, before you book, check-out the pre-conference training offers for further value-for-money.
NOTE: Booked for SAS Global Forum 2012
I've just booked my trip to SAS Global Forum (SGF) 2012. Sadly my kids go back to school on the very day that SGF starts - Monday 23rd April - so they won't be coming with me to Walt Disney World in Florida.
I don't recall booking so many different travel components when I travelled with my wife to my first SUGI/SGF in New York for SUGI 18 in 1993. We arrived a few days early, toured the length and breadth of Manhattan, and had a great time. However, by the time the conference started I was glad of the opportunity to sit down.
This year I booked flight and accommodation as a "holiday" package with Virgin Holidays (including free return transfer from airport to hotel). I also booked:
I don't recall booking so many different travel components when I travelled with my wife to my first SUGI/SGF in New York for SUGI 18 in 1993. We arrived a few days early, toured the length and breadth of Manhattan, and had a great time. However, by the time the conference started I was glad of the opportunity to sit down.
This year I booked flight and accommodation as a "holiday" package with Virgin Holidays (including free return transfer from airport to hotel). I also booked:
- Car parking for my car to be left in the UK
- Lounges with wi-fi so I can make best use of my time whilst hanging around the airports waiting for flights
- An application for entry to the US through the Electronic System for Travel Authorisation (ESTA) - thankfully, last year's application was still valid
- Travel insurance
- Conference registration
- Did I forget anything??
On reflection, our 1993 trip was booked by a travel agent, and my 2012 trip was done by me on the internet. The travel agent handled all of the individual bits and pieces of the trip. I haven't used a travel agent for years. Maybe I should give it a try next year.
109 days to departure!
Subscribe to:
Posts (Atom)