PATCat - Punching Above My Cognitive Weight

PATCat is a term I've just invented and it stands for Personally Applied Technology Catalog.  It's a method for improving the effectiveness of learning by employing a separate practice area for making mistakes.  It also serves as a reference for the future.

PATCat enables me to 'punch' above my cognitive 'weight class' by helping me understand and remember what I have learned.  I've had much success using PATCat to grasp new technology such as a programming library or language.

Typical Scenario

It's worth describing a typical scenario for a computer programmer that will highlight the benefits of PATCat (described later).

Let's say I am tasked with revamping a particular screen in an application by employing 'drag and drop' (AKA DnD), which I know very little about.  I begin by reading some documentation and perhaps do some experiments in the production code base.  Without a deep understanding I start to incorporate DnD into the intended screen and as I proceed I learn and understand it properly.  Looking back I see the DnD technology is a little counter-intuitive and my inexperience with it is apparent in the clumsy, first-attempt code I have produced.  However, I've managed to get it working and I can mark the task complete despite wanting to start over from scratch.

When I need to incorporate DnD again I refer back to that part of the code and, if I'm really disciplined, I refactor to make it more reusable.  When I change employers I will take only what I can remember about DnD, which won't be much.

PATCat Alternative Scenario

It's easiest to understand PATCat by describing its use in contrast to the former typical scenario.

When faced with the said task of adding DnD to a screen I first read some documentation and then set about applying what I have learned in a separate learning project.  I write code that clearly demonstrates what I have learned without any complicating factors.  This keeps the code simple and easy to refactor.  It also helps me identify any reusable, intuitive abstractions which I also code into the learning project.

When I am satisfied with the code I perform a surgical insertion of any reusable code into the production code base and employ it in the target screen.

If I need to rework the code I can either do it in the learning project or, depending on circumstances, do it in the production code and write 'to do' comments in the learning project.

Benefits of PATCat

Better Outcome
The production code base does not have any experimental, first-attempt code.  It also has a greater level of reusable code.  This is because I have made most all of my mistakes in the learning project.  And the code had to be refactored to be reusable in another code base.

Faster
Learning in the simplified environment of the learning project happens faster because usually the production code will cause complications.  For example, lets say there is a hack to improve overall usability that interferes with DnD.  This may cause significant delay whereas with a learning project the hack would become apparent when trying to integrate known-working code.

Reference For Later
The learning project becomes a stable reference for whenever I need to apply DnD.  This is superior to a portion of production code which might be rearranged or removed altogether without notice.

PATCat Power-ups

Personally Owned If Possible
If at all possible I keep this learning project in a personal repository outside my employers control.  Naturally I obtain permission first and exercise judgment as to what I might be sensitive or valuable to my employer.  For example, DnD semantics is not valuable.  But a comprehensive approach to interacting with a user-input form probably would be, despite it having little to do with the problem domain of the application.

The primary benefit of being personally owned is that I can use it as a reference in subsequent jobs.  Not only do I benefit from this but my subsequent employers benefit too because I am more productive.  Indeed it would be had for an employer to argue against contributing to a benign external learning project if it has only ever benefited them.

Public Domain If Possible
If the personal repository is viewable by the public then the community also benefits.  I can illustrate a problem or solution in publicly accessible code and cite it in forum messages.  I can also share the entire project with my peers, potentially improving their productivity.  And they can all reference the 'master' copy that will contain any ongoing updates.

Self Learning
PATCat is also very useful when learning from a textbook.  I've become proficient with new technology in a significantly shorter period of time, and to a more advanced level than I would have if I'd only read the textbook.

The key is to have the discipline to put the book aside at highly frequent intervals to apply the technique I have just read.  I have faith that, despite the slow pace and discomfort, applying the lesson immediately will pay enormous dividends.  And not just in learning the lesson and having a personal reference for later; I will learn the subsequent lessons faster because of my practical exposure to preceding concepts.

Further Tips

It takes a lot of love and discipline to have a PATCat but the benefits are well worth it.  When I feel the urgency at work to add a new feature using unfamiliar technology I must resist the urge to charge into the production code.  I also need to take the time to rearrange the learning project so it is well structured and useful as a catalog.  Otherwise it becomes a useless hairball of code that causes more confusion than it clears up.

Assembla.com is the only site I'm aware of that offers free private repositories (up to 2Gb).  It also has a number of useful facilities for open and closed source project hosting.  Google Code is another useful site but does not offer private repositories.

I have an internet domain name associated with my professional activities, which is more sophisticated than just using my name.  This also serves as a 'banner' under which my code is published, thereby giving strength to my 'brand'.

Comments

Popular Posts