Solving SharePoint’s Worst Problem

By any measure SharePoint is a big success – it is used by 100+ million users around the world, and generated (in 2009) over $1.3 billion in revenue for Microsoft (while they were still letting on how much money it was bringing in). 78% of fortune 500 companies use SharePoint, and the platform adds about 20,000 new users to its ranks every day. Ask anyone who’s had to develop or support SharePoint and they’ll tell you it isn’t without its shortcomings. »

Good Developer, Good Googler

or Why Sigmund Freud is right, and Scott Hanselman is wrong.

The prodigious Scott Hanselman recently wrote a blog post responding to a question posed to him – are we really developers anymore, or just good googlers? While Scott touched on a number of things in his response, including the imposter syndrome that affects many people, myself included from time-to-time, one thing he said really struck me as wrong. Wrong enough to bring me out of 4-month-long blogging hiatus. This is what Scott said:

Third, try programming for a day without Googling. Then two days, maybe a week. See how it feels. Remember that there was a time we programmed without copying our work.

While I guess trying something and reflecting on how it went can be a good course of action, it is not always the case “try cutting your wrists and sitting in a warm bath for a few minutes, a few hours. How does it feel?”. Before we head down this road of no googling lets think our strategy through a little. Are we going to start war-dialling the internet and hope that we come across something relevant? Are we going to hit the books instead? If so, are we going to read the book cover-to-cover, or look things up in the index? Isn’t looking something up in the index of a book just a horribly antiquated version of performing a very limited google search? Or are we going to ignore ‘prior art’ altogether? Imagine the following hypothetical conversation between us, and the owner of the small software consulting firm we work for:

Owner: Thanks for coming in at short notice. I’ve just gotten a call for $CLIENT you’ve been out on-site working for. I know you’ve got a great relationship with them, and you’ve done a lot of great work there, but they gave me a call earlier today, and said the standard of your work has been suffering a lot in the last two weeks. They said you’ve only delivered a fraction of what you’d both planned on. Is everything OK?

Us: OK? Everything is great! I decided two weeks ago instead of looking things up on the internet I was going to do everything from first principles. I spent most of the week writing a concurrent dictionary in C# using a lot of the data structures and concurrency theory they taught me at college. It’s been hard, and there are a few bugs, but I think in a few more weeks it will be ready to add to the project.

Owner: I see. I haven’t been too ‘hands on’ for a while, but isn’t there a ConcurrentDictionary they added in .NET Framework 4.0?

Us: You might be right.

Owner: So….just so I’m clear on this – you spent two weeks re-implementing something that was already in the .NET framework, because you unilaterally decided that building things from first principles, rather than searching for existing information on a problem was somehow “better”.

We’re all ultimately accountable to someone for how we spend our time - other founders in a start-up, team-mates and managers if we’re white-collar slaves working for “The Man”, our clients if we’re freelancers or maybe just ourselves [1]. I think wilfully ignoring all the world’s information that has been organized, and made universally accessible and useful, so you can feel better about your prowess as a programmer is crazy.

freud

Freud, who knew a thing or two about crazy, in his 1930 “Civilization and its discontents” hit the nail on the head:

“Man has, as it were, become a kind of prosthetic God. When he puts on all his auxiliary organs he is truly magnificent; but those organs have not grown on to him and they still give him much trouble at times.”

The Internet and the google index are the magnificent auxiliary prosthetic organ that gives us programming super-powers, in much the same way that the atomic bomb is the prosthetic organ that gives humanity the god-like power to destroy the planet. All the same arguments you can make about not using google you can make about every other advancement – intellisense, syntax highlighting, IDEs, high-level languages, integrated circuits, electricity, the steam engine, mathematics, iron, agriculture, language. It is natural that the organs have not grown onto us perfectly yet, and that we, to quote Freud again “do not feel happy in his God-like character”.

»

3 gotchas I discovered calling Postgres (esp. from C#).

I’ve always been interested in Postgres – it never seemed to be quite as crazy as MySql, and since I’ve used Access (LoLWUT?), Ingres (party like it’s 1989), DB2 (meh), Oracle (and the difference between god and Larry Ellison is…), SQLite (awesome!), ESE (key-value FTW), SAPDB (why?), MySQL (how did this ever become popular?), different versions of SQL Server, and a few I don’t quite recall at various times I thought I’d give it a try. »

DDD Brisbane 2012–Single Page Web Applications talk on Vimeo

I recorded a version of the ‘Single Page Web Applications’ talk I did for DDD Brisbane 2012 and put it up on Vimeo. I know the audio is not fantastic, but I don’t have a very nice speaking voice anyway. If anyone has any feedback I’m keen to hear it. DDD2012 from Joseph Cooney on Vimeo. »

Mac Mini Upgrade, the Australian Way

I recently decommissioned an old laptop, and salvaged 4GB of laptop ram out of it. Having no other good use to put this to, I wondered if my iTunes isolation mechanism (a very early Mac mini) might be able to be upgraded to Mountain Lion if it had enough ram – it was currently running snow leopard, had a dual-core CPU, all that seemed to be missing was and additional 2GB of RAM, exactly the same kind of RAM I’d just taken out of the decommissioned laptop. »

I would have tweeted this but…

Things are pretty bad when your “we’re down” page is down. Twitter has been horribly slow for me for the last 2 days, so I’m not surprised. »

Automerch from your twitter feed

For a while I’ve toyed around with the idea of programatically generating t-shirt ‘designs’ (and I use the word in the loosest possible sense) from one’s twitter feed. The mechanics I had in mind were something like this:

  1. You have a fetish for self-promotion, decide you want a coffee cup or t-shirt with some stuff from your twitter feed on it, and you aren’t too fussy about aesthetics.
  2. You tweet to @tweet2tshirt asking it to pretty please make you a t-shirt design.
  3. @tweet2tshirt tweets you back with a link to this item on cafe press, when it is done.

Which is pretty much how it works.

What do the ‘designs’ look like? I’m glad you asked. The short answer is ‘not very good’, and come in two varieties, incorporating your profile picture, some of your ‘greatest tweets’ and some images from your twitter feed. These get programatically combined into a gloriously large 2600 x something large PNG and uploaded to Cafe Press. Depending on what you’ve put on twitter the designs are going to look more or less crappy.

So a PNG like this becomes available as a cup, t-shirt, iPad cover etc.

josephcooney.Profile

cup

josephcooney.TopTweets

tshirt

»

Transaction. Argument. Class. Message. Service. Agent. Method.

If you’re a technologist reading the previous list of words – Transaction, Argument , Class, Message, Service, Agent and Method – each of those words probably had a special meaning to you. Certainly when I read them I can’t help but mentally pre-pending  words like ‘distributed’, ‘atomic’, or ‘database’ to a word like Transaction. But as shocking as it may sound to technologists these are normal English-language words that have existed long before Babbage decided there were far too many errors in logarithmic tables, and have a broader meaning than the precise and narrow confines we choose to use them in. This is one of the  things that makes communication between technical and non-technical people even harder than it should be, and woe betide any programmer working on a system who has one (or…shudder several) domain objects whose names collide with these words that software development has hijacked. “Oh, you’re working on an event planning system for school classes? Here’s your cyanide pill.”

It gets worse once you realise that many of our narrow definitions of words are kind of at odds with their real-world “pre-technology” definitions. Transactions have existed ever since the first chicken was exchanged for the first sack of wheat (or something like that), and yet technologists have chosen to define it (fairly narrowly) as a unit of work (usually atomic, consistent, isolated and durable) against a software system such as a relational database. Only infrequently during database transactions is the ‘exchange or transfer of goods, services, or funds’ recorded. And while technologists don’t think of transactions as being exclusively atomic, consistent, isolated and durable it is more-often-than-not the assumption that goes along with the word ‘transaction’, so much so that a special type of transaction, deemed a ‘long running transaction’ has been created, which much more closely aligns with the normal commercial and financial sense of a transaction. Similarly parent-child relationships (in the context of software development and modelling) are at odds with the commonly understood human reality. In software development a parent-child relationship is often described as:

each parent can have many children, but each child has only one parent

While programmers and data modellers may reproduce asexually, most humans would consider a child to typically have two biological parents, making discussions of ‘parent-child relationships’ with non-technologists fraught with misunderstanding.

Fortunately the first step to solving a problem is often realizing that you have one, and so by recognising that the words that we (as technologists) use have broader meaning outside of technology, and that the misunderstandings arising from these differences in meaning can be critical, we can begin to put in place strategies that can close the gap. I think each project should draw up a list of domain words and technology words if they don’t already have some kind of glossary. If there are any domain words clash with commonly used technology words then just top yourself now. Or agree to pre-pend a word that disambiguates – no more mentioning of ‘transaction’ – something is either a ‘financial transaction’ or a ‘database transaction’. Similarly the subject matter experts should probably look at a list of commonly used technology words (like the one I’ve created below) and see if these are synonyms for business terms, and whether this could also be a source for confusion.

All the good words were taken

While it is not unusual for specialisations to adopt jargon (the term ‘stress’ to a mechanical engineer means something quite different to the rest of us), software development is in the unenviable position of dealing with a lot of abstract concepts that require precise terms to describe them. In the same way that history and mythology are chopped up in a blender to serve as the raw materials for many Hollywood films so to do human languages get chopped up into pieces by programming language designers looking to create easily-readable natural syntax. Here is a rough list of words I came up with that I thought had a better-than-average chance of causing confusion between technologists and non-technologists. Feel free to use it as the basis for your own list to help drive out ambiguity on your project:

  • Transaction
  • Service
  • Event
  • Message
  • Aspect
  • Agent
  • Method
  • Argument
  • Key
  • Exception
  • Process
  • Port
  • Socket
  • Map
  • System

Comments

nicaraguatoday.co.cc
Pingback from nicaraguatoday.co.cc

»