Category Archives: Software Development

Finding Order

I was all of a Twitter this morning about my discovery of not one but 5 specimens of a plant known variously as ‘Lords and Ladies’ or ‘Cuckoos Pint’ in 3 different locations around Llangollen yesterday. I now know that it is a fairly common plant and poisonous, but a day earlier I wouldn’t have known anything about it. Would I have noticed this brightly coloured plant at all, if @BrownhillsBob hadn’t told me about it?

The reason this occurrence struck a chord with me was that it wasn’t my first ‘not really very strange’ coincidence of the day. At university, my systems analysis lecturer was a guy called David Avison. A few years ago when I moved into my first analysis job, my team leader loaned me his copy of a book called ‘Information Systems Development’ by David Avison & Guy Fitzgerald. I skimmed through it but it seemed stuck in the the ancient ways. I wanted to rush forward to Agile development. I put it aside.

Yesterday, having stopped for coffee in Llangollen, I went upstairs to ‘powder my nose’ *. The upstairs of the shop is a second-hand book shop. On the stairs was a bookcase labelled ‘Computers’. Well, you have to have a look, don’t you? There was a near pristine copy of Avison & Fitzgerald, 2003 marked at £10 and there was a half-price sale on. I flicked through and found “5. Modelling Themes”. I had spent my last couple of days work modelling what I called “Programming Paradigms”, a sub-component of a model I’d called “Themes” and my plan for today was to write about modelling. Dear Reader, I bought it.

I am not a Fatalist. I believe we can’t see things until our minds are in a state to accept them. Our total knowledge is not the sum of everything we have experienced but of the order in which we were ready to take on board new information. Learn something too soon  and the other end of the connections I think cause creativity may not be in place, ready.

  • I learned at Plas Newydd that the phrase “power your nose” came from the dual-use of powder closets, where fine ladies powdered their hair to provide a private toilet space and an opportunity for ambiguity, as ideas about personal privacy changed.

Getting to Know Relations

I don’t really KNOW relational databases. I’ve hung around with them quite a bit but I have no real experience. I know there are things I don’t understand about them. As with anything I’m genuinely uncertain about, I don’t even know what it is I don’t understand. I am in unknown unknowns territory.

While getting my  Umbrello UML modelling tool working again, I tripped over this:

It was a bit of a surprise because:
a) entity-relationship diagrams aren’t part of UML and
b) the explanation of the ‘overlapping specialisation’ example didn’t make sense to me.

I now knew this was one of the things I didn’t understand, but the KDE document wasn’t helping me. I searched for a better explanation and it took me here:

It uses UML class diagrams to model relations. I think this might sort me out.

Vacuous Thoughts

A minute ago, I juxtaposed 2 phrases on a Slack chat:

I listened to Rich Hickey’s video on Hammock Driven Development a couple of days ago. It’s about modification of mind mode without resorting to chemicals. There’s a long tradition in hacker-lore that points to Zen and the martial arts too. I find showers, lawn-mowing and writing what i think I know so far (a variation of the cardboard coder trick) all help. The poets seem to prefer long walks. ‘Empty Mind’. “Nature abhors a vacuum”.

As a result of my subsequent wanderings, I learned a new word, “plenist” and “plenism” (the usual suspects)

and I saw the word “idiom”. I’ve heard “idiomatic” a lot recently, in relation to styles associated with programming languages but I wasn’t sure precisely what it meant:

I think the intended meaning is Google’s 2nd choice:

a characteristic mode of expression in music or art.

but the alternative is interesting too:

a group of words established by usage as having a meaning not deducible from those of the individual words (e.g. over the moon, see the light ).
How often does a ceremony gets associated with an idea, long after anyone remembers why? I ask this after reading a thought provoking comparison of the functional and object paradigms that only partly agrees with the ideas I mapped out in stickies on a paper table-cloth yesterday.
I’m “still not working”, as people say. My Dad kept a dictionary beside his chair. I continue his work with ‘tear-off here’ computer science. At least my inherited etymology is idiomatic of the Clojure community.

Objects vs Functions

I learned to ‘programme computers’ long ago, almost before there was no “me” in ‘program’ and certainly before I knew how to ‘team’. I had a very brief and unsuccessful exposure to functional programming in LISP (not Lisp) then stopped. I did other ‘Data Processing’ things.

In recent years I’ve been working as an analyst, alongside people who write code according to the object model. I think I have a feel for objects but never having written code in an object-oriented language, I can’t be sure. I decided to try, in the Python language, then got distracted by the shiny Clojure language which is functional. I feel that right now I’m approximately equally confused by objects and functions, so I thought I’d write this quickly before I know what I’m talking about. I can come back later to laugh at my naivety, along with the rest of you.

Like the person who wrote this ,
I’ve been watching some talks online recently by Rich Hickey of Clojure fame”
The post asks “So if I follow Hickey’s advice, how am I supposed to represent a book? As a vector of vectors of vectors of vectors of strings? If so, then how do I prevent a change in the representation of the Book from breaking client code?”

I found the question very interesting because representing ‘books’ in a functional language is exactly what I want to do. I think differently to the author because  I’m not yet trapped inside the object paradigm. I can see that ‘book’ is a real-world class of objects, a very specific and limited implementation of the representation of a small subset of all the information in the world. That’s what my ‘book’ was going to be about and why I’m now playing with functions instead of writing it.

Objects are good at simulation of real life systems. They encapsulate small sub-systems of a process and it’s local data into an object. What I always struggled to understand was what you did with the data that didn’t want to be enclosed – “information wants to be free”. People seem to cope by inventing objects that don’t really exist: to be data shepherds.

Functions are good at abstraction. A book is a single output format from something much richer. That’s what I want to write. Data and processes are complex. Objects and functions are simplifying models; there may be others.

p.s. (not Lisp) Get it?

Software Development Science

I’ve tried to write this post before
but I just answered a question about ‘software engineering’ on LinkedIn and I’m pleased with the brevity:

Agile software development is the application of the scientific method to understanding the requirements for a software product. Each iteration is an experiment to confirm a hypothesis of what the customer should really have wanted at the beginning, if they’d known what they know now.

To Be Derived

I thought I’d said something about this but I can’t find it, so sorry if you’ve heard this before:

Professor Brian Cox turned to Dr. Hannah Fry and said, “You have 30 seconds to define ‘calculus'”.
She replied, “It’s the study of change.”

What we call “The IT Industry” deals almost exclusively with change. As a business analyst, I’ve worked in business process re-engineering which is the process of changing the processes which cause those changes. I’ve worked in agile software development teams that try to change software while the requirements for the target they’re travelling towards are changing, so the changes have to change.

I’ve met calculus in maths and physics but never in computer science. Why on earth aren’t computer scientists up to their necks in calculus?

Is this Important or Urgent?

This post refers to a technique often used in Agile software development, including within the Scrum framework. It is not an introductory text so not recommended for non-agilists.

‘user-stories’ are classified as: Must (do), Should (do), Could (do) and Won’t (do), known as: MoSCoW. User-stories are then usually prioritised by an integer representing value, which represents a calculation of return on investment, or benefit:cost.

Paul Oldfield, Chief Referee at LinkedIn ‘Agile & Lean Software Development’ group said:

I find a bit of a problem with MoSCoW – distinguishing between “Must have eventually” and “Must have in release 1”. Get beyond release 1 and a high value “should have” can be prioritized in front of a low value “must have”.

And then, a lot of the “must have in release 1” turn out not to be, if we look closely.

“If you want all these in release 1 you get nothing for 6 months.
Or you can get these in 2 weeks, those in 4 weeks… would you like that?”

I gave (a slightly worse version of) this reply:

I think MoSCoW is about ‘importance’ not ‘urgency’.
Urgency comes into the prioritisation choices when the benefit of the story is time sensitive.

Delivering benefit early starts summing value for longer, so total value delivered in the life-time of the product or service will be higher but now we’re talking about delivering a different absolute ‘spot value’. Putting it another way, value can be a function of time.
e.g. “If this isn’t ready in 2 weeks then we’ll be fined by the regulator” or
“We need this before the Summer Sale starts. If you miss that, it’s useless until Christmas.”

I didn’t know this before today. I’m sharing the idea in case it helps someone else or they can improve it and give me a copy. It’s how things worked before science had to make a profit.

Talking Trees

I ‘done a speak’ at Ignite Brum recently.

I have a rational fear of public speaking to large audiences. I decided to face it. At ‘Staffs Web Meetup’ I gave a fairly techie 10(/20) minute talk about Ted Nelson’s concept of intertwingularity. When I saw a plea on for speakers at Ignite Brum to replace others who had dropped out, I imagined my usual cluster of geeks in the upstairs room of a pub, not the lights/action/movie comedy glamour of the stage at The Glee Club. I’m all for a bit of clubbing but I was well outside my comfort zone.

‘All I had to do’ was reduce my talk by 75%, simplify by about the same, for a general audience and produce exactly 20 slides that would auto-advance every 15 seconds. It was described by someone on the night as “Powerpoint as an extreme sport”. That was a true story. I recommend the challenge as an exercise for the reader. It is hard work in preparation and frantic in execution but it doesn’t give you much time to panic about the faces looking up at you; anyway, you’re blinded by the spotlights.

Watch as I drop behind the pace set by the projector. My best joke and some local politics was lost in the bunching on the corners but I present ‘Everything is Deeply Intertwingled (Smash the Hierarchy!)’

Thanks to @iamsteadman for allowing me to try this and making the video available (I’d never have agreed if I’d known that,) the other speakers and the people who made us all feel welcome: @probablydrunk, @carolinebeavon, @grunt121 and the audience.

Untangling the Web

I’ve mentioned before that I’m not entirely convinced about the suitability of this trendy new ‘World Wide Web’ as a development platform:

I recently went on a ‘Web 101’ course to dilute my ignorance, by doing some HTML, CSS & JavaScript myself. I discovered that I’d been making an incorrect assumption. Because I was familiar with client-server computing, I’d been assuming that if you had a web client, you had to have a web server to get anything done. You don’t. We didn’t go near a web server until our fifth session. We edited files on our file system and displayed them in our browsers.

Because I wanted to try my CSS on a different client platform and form factor, I saved my files to Dropbox, so I could access them from my Linux PCs or my Android tablet. I was ‘web teching’ without any web. Links don’t have to be HTTP. We could do things better, without throwing everything away.





Asynchronicity Traps

Don’t you love it when lack of planning comes together?

Last Thursday, I learned about JavaScript callbacks, which reminded me of OpenVMS Asynchronous Traps (ASTs.) I learned to code in a world of single-threaded processing, so this was an advanced topic, along with my interest in occam and Communicating Sequential Processes. Back then, only real-time coders and those looking to the future cared about parallelism. I remember not really seeing the point of Yourdon ‘state-diagrams’. I’d never experienced the complex state network that a GUI with a few option buttons can generate.

Last night I came across debates about the advisability of abandoning JS callbacks for the HTML5 ‘promise’ construct; “callback hell”, they called it. Promises are functions. This is another area where the elegant simplicity of functional programming appears to offer hope. Functions are mathematical constructs, so in functional languages perhaps all possible states that code might enter can be identified.

Alongside this, I’ve been reading about research into the energy requirements of computation. For a long time, computer scientists thought that every logic operation would have a cost in terms of energy and hence entropy, but that appears not to be true. It is information deletion that costs energy, so immutable data is more energy efficient. I’m only up (down?) to quantum bits, so I’ll have to let you know how the cat gets on another day. I worry when physics starts to look like mystical religions.