Category: Thinking

Right, so now we are in the same head space, wasn’t it just great! Just like it’s back cover says, The Impact of the Highly Improbable.

I loved the concept that it only takes 1 black swan to prove that All Swans are White is wrong, yet you can never prove it’s correct. I loved how he expands this idea to show how most people’s concept of risk management is really sticking your head in the sand and hoping for the best. As they do not manage the risks (the impacts) but use tiny probabilities to feel happy that it won’t happen (short term thinking and looking out for the quarterly/yearly bonus).

Another section that strike me quite personally, was how we cannot forward project. One example he uses, is that when thinking about buying a new car you get excited about how grand it will be, yet you fail to remember feeling that way about your current car, and you fail to project the loss of that feeling going forward. So tying that to me, as a software developer. When you get someone else’s code, and the first things you say is what were they thinking, where’s the documentation, it’s all spaghetti.

Yet I fail to see how my grand vision of perfect code, done correctly, will be compromised due to time constraints, or prioritised by business value add. Or how there will be bugs in other sub-systems, needing ugly work around code. I’ll be rushed off my feat, and thus not document it, ever, and when asked to, I’ll ask documents (which will ages quickly) or bug fix, and you know what will win. And that’s how it is, because of the scale of software we are developing, and how we are part of a bigger company, thus need to be profitable and resources are limited (as the really should be). So I give myself all the credit of plans, and saying it’s alright to shortcut here, I’ll fix it later, but all my predecessors were muppets, that had no vision, and wrote unreadable code!

So my current mental track is to try forgive others, as I hope to be forgiven myself.

I enjoyed this book enough, that as I was reading it, I was already looking forward to reading it again, as I couldn’t recall all the things that made me go – da, now you point it out!, but it sure happened a lot. Michaela got tired of me excitedly recalling (poorly) the book to her!

Well after my Sci-Fi zen thinking, I was still abuzz with smart computers type thinking, so I went on a Google rampage about AI/ALife and found stuff about Chatbots, which lead me onto the Loebner Prize site. Oh so my cup of tea. So I was reading the transcripts of the 2004 competition and my mind was in how-would-i-do-it heaven. I printed off some of the transcripts, and have spent the last few night (and middle of the night) and day (the ultra distractible part) thinking of how I’d do that, or this, etc.

Man I could happily spend vast quantities of time working on a chatbot system. In fact I have spent a little time, and my first thoughts have been that collection of statically typed programming languages just don’t cut the mustard. I’m wanting to codify the concepts that I’m thinking about, not think about what the name of a class should be, and other material concepts like that.

Hmmm, maybe this will be what pushes me into learning something more functional/duck-type of a language.

Anyway this post is really me trying to pull some of my excitement out of my head, and allow myself to focus at work, and at home also. In fact yesterday swimming I forgot my lap count due to thinking to much… it’s not healthy thinking, it leads to detachment….

Here’s a couple of my favorite chat snippets from 2004.

PROGRAM: Hello, my name is George and I am the human.JUDGE: Hi George.PROGRAM: Who’s George?JUDGE: You are. Supposedly.

or

JUDGE: What hobbies do you enjoy?PROGRAM: I like cinema.JUDGE: What types of films?PROGRAM: All.JUDGE: What movie did you see this year that you liked?PROGRAM: I don’t have time for movies.JUDGE: I thought you liked cinema.PROGRAM: I did, but then you started to say stupid things.JUDGE: I say a lot of stupid things. What in particular was stupid?PROGRAM: I don’t want to talk about the nature of language.JUDGE: How about discussing the language of nature?PROGRAM: What thing does ‘the nature’ refer to?JUDGE: You brought it up.PROGRAM: I did?

This hilarity is due to this bot reply’s to the last statement with no context of what has been said. So it appears ultra distractible, like me really. Hmm am I just a chatbot? Talking to myself, or maybe talking to that voice that only I’m hearing….

As a this is what I meant chat I had with Matt in regarding Software Development, I came up with some key idea’s.

One is that in prototyping/designing the interactions you are creating the surface in which a user interacts with the system. The how things are done below this do not really concern the user, performance constraints aside.

What I was thinking of is a system where you build entities that are user level concepts, things that hold business meaning values. So in a customer management system, you may enter a partial customer say minus fax number. So this needs to be saved so you can do something else. Yet you want to later resume entering the customer once you have their fax number. So for mass faxing (an evil act in its self) this new customer is not fit for purpose. So things become about how do you manage the process of making things fit for purpose.

So with that in mind this is what I was thinking of for software development. As you build the interactions there are steps still to be done, before the system may be complete, but maybe the system is still complete enough to explore the interaction. With task/decisions still left to be explored. I think of it as brain mapping an applications where parts are still left to be considered.

So if you have an application, where you have been displaying entity values and you then introduce role based security, you have to make decisions about how the roles can interact with business values. Then when a new role is created, the past decision needs to be mapped to tasks yet to be done.

Sort of a system where the process of creating new solutions understand the type of interactions it may have, and these interactions/decisions are recorded, amendable, explorable and reviewable. Notes and thoughts recorded as the domain is explored, giving you interactive creation.

This seems much more desirable than the flat specification document I have to read, and I have not yet because I know it’s not going to be what I have in my head. When discussing this section A will be used to argue that section B is correct yet forgotten (by all) will be section C, and its overall interaction.

The non-linear nature of interaction does not fit well into written form.

I was having a very Zen moment on Saturday, influenced by Do Androids Dream of Electronic Sheep, where I was trying to imagine what/how software should be built in the future.

It starts from my dislike of the paradigm for computer interaction we have now, and even worse how we program computers (based on system intention, and functionality capture and workflow’s).

So there I was driving and thinking how I’d love to control a computer with my mind, and then was thinking how I’d program, letter, word or concept at a time. I was thinking of a current project, where the largest part is the user interaction. How to create the interaction, and build the “back-end” into it later. How I’d love to be able to dump my mental picture, and interact with the model with the rest of the team.

Sort of in a drag and drop way we have now with UI, but it all very much smarter. Like currently we drag-n-drop widgets, then it’s done, the maintenance part is hard. Or how you make decisions about “not using security”, yet later this is required. So almost the workflow of what should be in programs, and the parts understanding this.

I see it as a live workflow of what is left to-do, and what is done, so things can be deferred, or revisited.

So while I have this organic system in mind, I was acutely aware that our current connectivity with a system is so woefully constrained. Keys for written text, and a pointing device. I want more direct control over high level concepts. I want things to move along, and I’m inpatient and not sure our commercial markets will allow the changes required as anything new will first have to surpass the current. Like we are in an interaction local maximum.

I want to create the same way I can hear/write/read that voice in my head in conceptual blocks.

Hmmm, lucky it’s swimming time, otherwise I think I would have just depressed myself too much to handle C++ via a QWERTY keyboard right now.

The first is regarding compiling the kernel. This is seen as a guaranty, if things go wrong I can fix it. This plays on the idealism of youth, in which you have large amounts of time to track down and fix the problem, and the idea of I could if I wanted to! Examples of where this comes into play are getting a driver to piece of hardware X to run of older system Y. In the windows world if your driver does not work for new OS or visa-versa you are out of luck. You have to pay to upgrade. Where-as if it’s all open source you can just spend time porting the driver. Then share and save others time/money. The flip side is valuing your time more than your money, and just buying a new PC, or new Component or new OS so stuff just works.

The another concept I can think of is OSS vs. Microsoft is along the Alt.Net vs. MS.Net argument, where MS doesn’t embrace / leverage development tools and has to write it’s own. Often to the disdain of the Alt.Net crowd as they feel sidelined by MS and/or that MS has missed the point. It’s understandable that MS does what they do, but that’s because they are a commercial company. They build developer tools to push their platforms not tools for the sake of tools.

The last idea is, OSS is an idealistic stance, and people who have idealistic stances have an emotional attachment to that opinion, and therefore behave fanatical when their position is attacked. Just like religion really.