Reading a play in Spanish earlier–a language in which I am far from fluent–it struck me that as I read I don’t think about the English equivalent of the words and sentences. They have meaning without any conscious translation to my native written (and spoken) language.

I’ve found I have a certain facility for learning to read some languages: basically those that share some common roots with English. This includes Latin, Middle English, French, Dutch, German and Spanish. (I’m keen to add Celtic languages such as Welsh and Irish to my list as well, but my available time is finite.) There’s no trick to it: it appears to be a consequence of how my mind works.

My lifelong immersion in English had hidden from me the non-verbal nature of my thoughts, because whenever I come to communicate them I use that language. But, as I have described before, inside my mind there are no words, only impressions: feelings and visions. Meanings in elemental form.

When I read a text the parts I recognize cause these impressions of meaning directly. The parts I don’t recognize I must consciously, mechanically translate to English first. I quickly become familiar with new words, at which point this intermediate English stage no longer happens. At that point I’m reading fairly fluently. I generally find it takes several hours, maybe a few days, to reach that stage.

There’s a curious effect of understanding the meaning directly (i.e. without translating via English): if I express that meaning in English I use my own phrasing and structure. I often find it more difficult to render a literal translation than simply to convey the essence of the original. This is something I have also noticed when I’m reporting information (text or conversation–it doesn’t make a difference) that I encountered in English.

If somebody asks me what another person said to me in conversation I am usually unable to recall their words, instead simply retaining the underlying meaning. The implication is that I do not require English (or any equivalent language) for thought. I describe my thinking as visual but the reality is much richer and involves more senses than just sight: touch, smell, taste, hearing and emotions are also involved. Perhaps it would be more accurate to describe it as sensory rather than visual?

Most of the time it is effortless to translate my thoughts into English, expressing myself through writing or speech. But sometimes I will hit a block: I know what I want to express but can’t immediately find the words to convey that meaning. My choice of words is also very important to me. I like to find le mot juste, the exact word or phrase that matches what I mean. Failing to do so causes much frustration.

Exactly the same mechanism applies to programming. I “see” the structure of the code, how it operates, how the parts interact. The actual computer language used to express this is mostly irrelevant: I’m fluent in several and have no difficulty expressing equivalent meaning in any of them. To me there is no essential difference between writing in English and writing in C++ or Perl. It is only that computer languages operate in a restricted domain, defining sequences of operations. Natural languages are much more extensive in scope.

The common link is that they are all forms of communication, ways to express or record what is inside one’s mind so that it may be transferred to another mind. This also applies to computer languages: sure, programs are converted into machine instructions, but the reason that programming languages exist–as opposed to using those low-level instructions directly–is that they provide a means for programmers to express what is in their minds in a more natural way, one that is closer to the mental model than the binary codes that are the end result.

The Joy of Darts

The Joy of Darts

A post by C. S. Wyatt started me thinking about what games and sports I enjoy, and why.

I have always enjoyed word-based puzzles, particularly crosswords, and complete at least one cryptic crossword most days – my favorite is the Daily Telegraph which I usually finish in under 20 minutes. What attracts me is the challenge of interpreting the clue in the correct way to construct the answer – it’s a combination of an extensive vocabulary, an awareness of multiple meanings of words and logical reasoning.

I occasionally solve Sudoku puzzles but find them much less satisfying because of the purely mechanical methods involved. I found it much more interesting to write a computer program to apply the methods and solve the puzzles that way.

Quizzes in various forms can be fun. I used to enjoy taking part in a local pub quiz but after a while got bored by the consistently variable level of difficulty of the questions – the first few would be insultingly easy, while the final ones would often be so obscure that they just resulted in a random choice of one of the multiple options provided. I enjoy playing Trivial Pursuit now and again but get frustrated by the element of luck introduced by rolling a die to determine where I can move my counter.

I have played card games in the past – blackjack, poker – in social settings for chips rather than “real” money in a casino. While I did very much enjoy studying and designing strategies to guide my play (I bought a copy of Hoyle as a reference), I found that the random turn of the cards and the unpredictability of other players meant I did not get nearly as much pleasure from actually playing the games.

I play pool (8-ball) on occasion – I used to captain a pub team – and ten-pin bowling, but the sport I play most has to be darts. In all of these sports, how well I do depends on my individual skill – there is no significant random element apart from the very small variation in ambient conditions – these being indoor sports – which affect all the players equally. I also enjoy the fact that, unlike in team sports such as rugby, I can play at whatever pace suits me.

In summary, I have a strong preference for games of skill rather than chance. I much prefer turn-based games. I enjoy puzzles and other activities that exercise my mind. I prefer games where it is only my individual performance that affects the outcome, although I have played pairs matches in both pool and darts. I believe that the individual turn-based nature of these is a much more significant factor than any interaction between myself and my partner in the pair – there is not the depth of strategy and real-time interaction involved unlike a regular team sport.

In fact, having considered the reasons why my preferences lie in a particular direction, I can see strong parallels between these leisure activities and my love of programming. There are the same elements of skill, knowledge, problem-solving and individual effort. Just as I am happiest and perform best when left to my own devices at work, so I prefer those leisure activities that involve solo endeavor.

2011 Retrospective

2011 Retrospective

Goodbye 2011, you were a year of new experiences, happiness and sadness.

Last year started cold. We were snowed in for a week – too icy to drive – and I had to walk to the local stores, hoping their deliveries had got through. Bread was in short supply. But it was so enjoyable walking through the snow, the absence of traffic on the roads, everybody on foot. Parents towing their children on sleds. A peaceful, happy time.

I started working part-time as a barman at the local pub, just to help out at first. I took to it like a duck to water and now, almost a whole year later, I’m still there. It’s been a great help as it gave me a way to talk to people, initially within the boundaries of the job and then, as I got to know the regular customers better, beyond it. By now I think of the people there as a kind of extended family – I feel accepted and wonderfully comfortable among them.

My main job as a software developer continued to be a source of great pleasure – interesting, challenging projects and opportunities to learn new skills and technologies. I’m incredibly lucky to get paid for doing something I enjoy so much. I’m not financially motivated – the work is its own reward for me, but obviously I need to earn money to live.

I started this blog in July, initially just to write about my day-to-day experiences through the lens of Aspergers Syndrome but soon expanded to become a means to express my feelings, whether through my attempts at poetry or through prose. One unexpected result was that I’ve connected through blogging with other people on the autism spectrum which has helped me both to understand myself better and to feel less isolated by my differences – I now know I’m not the only one whose brain functions in this special way.

The past few months has seen times of great strain in the relationship between my wife and me. Various events, my Aspergers and her deteriorating health have combined at times to set us at loggerheads. When communication breaks down everything else starts to tumble after it in an avalanche of self-destructive behavior. But through our mutual love we have found the will and the strength to keep working on our marriage and, although I cannot say with all honesty that everything is fine right now, we are past the lowest point and building up again.

I saw the year out with a New Year’s Eve shift in the pub – 6pm to 3:30am. It was physically tiring but emotionally exhilarating. I can recall noticing the clock around 8pm and the next time I looked it was well past 11! It truly felt as if only minutes had passed, yet it was more than three hours later. An enjoyable busy night.

Overall despite the lows it was a good year and seems to have passed so quickly. Hello 2012, I wonder what you’ll bring. Interesting times, I’m sure.

How I Got Into Programming

How I Got Into Programming

My dad got us our first computer when I was 11; it was a BBC Model B+128 with a 40/80 track switchable double-sided 5.25″ disk drive. And it came with a manual. Printed. On paper! Not just how to connect it up and switch it on but full details of all the OS commands and the built-in BBC BASIC programming language. So I started using it, learning to program in BASIC, slowly at first but with increasing speed and confidence. I subscribed to Acorn User magazine and slavishly typed in the program listings. I was hooked!

BBC BASIC was an great language in an great environment for learning to program. It introduced me to control structures: conditions and loops. It had named functions and procedures (rather than the usual GOSUB in most microcomputer BASICs). It had floating point as well as integers. It had strings and a set of built-in functions for manipulating them. It could access the machine’s memory directly. It even had a built-in assembler. It gave me such a feeling of control over the hardware that I felt I could do anything with it.

When the 32-bit ARM2 Acorn Archimedes was released in 1987 I got one (one of the first batch of A305 machines with Arthur 0.2 OS), later upgraded to 1 MB RAM and Arthur 1.2; then RISC OS 2.0. I thought it was a marvellous machine, so fast and capable. I later upgraded to an ARM3-based A540 with 8 MB RAM and two SCSI hard disks for a total of about 160 MB storage. Huge for its time, especially for a home computer. I continued programming in BBC BASIC (version V included with the “Arc”) which included additional control structures (WHILE…ENDWHILE, multi-line IF…THEN…ELSE…ENDIF, CASE…OF…WHEN…OTHERWISE…ENDCASE), RETURN parameters in procedures, libraries (via LIBRARY, INSTALL or OVERLAY) and had a built-in full-screen editor, the ARM BASIC Editor or ARMBE. I reckon I probably spent the majority of my time in front of the machine in that editor, developing programs.

A number of times I would spend upwards of 12 hours at a stretch at the keyboard and some of the programs ran into thousands of lines. I wrote interpreters for scripting languages, bitmapped font editors, a parser for chemical formulae, a graphical plot of magnetic fields in a plane intersected by wires carrying current, and many others. I even wrote a kind of hypertext application inspired by the depiction of the “Guide” in the TV adaptation of The Hitchhikers Guide to the Galaxy.

It was on this A540 that I first encountered C. I got a copy of Acorn C and a book to teach me the basics. Once I grasped the concept of main() being the entry point for the program I was well away. The nature of BBC BASIC meant I already understood structured programming: conditions, loops, functions, and was used to thinking in those terms. It wasn’t long before I got hold of a copy of Software Tools in Pascal and coded the programs presented therein in C. I wrote a utility to implement IO pipelines on top of RISC OS’s pipefs (OS-implemented named pipes) so I could reproduce unix-style filters without needing intermediate files. I got a copy of Expert C Programming: deep C secrets and found it very informative and practical: it taught me a lot and by this stage I was proficient enough to program C professionally. I got my first job programming C on 16-bit DOS and Windows 3.1 despite having limited experience of those platforms: I was given the job on the strength of my performance on a C programming test at the interview.

I had had some limited exposure to a fairly new language called C++ that introduced something called classes. I didn’t really get a lot of exposure to it until the mid-90’s and it took a little bit of perseverance to get used to object-orientation. There were no templates in those days, at least not in the version of Microsoft C++ used where I worked, and exceptions were avoided because of concerns about performance. I really got the hang of it after taking a course in OO design which gave me the mental toolkit for thinking about classes naturally. The language support from Microsoft’s compilers improved over time and it was really with the move to 32-bit Windows and new development for that platform that C++ became my new programming language of choice. I got copies of and read Effective C++ and Exceptional C++ to learn about best practices.

It’s now some 15 years down the line and I consider myself a skilled C++ developer. (More to the point, so does my employer.) Along the way I’ve had exposure to several other programming languages, some of which I use regularly such as Python, sh, javascript, perl and awk while others I’ve used as and when the job has demanded it such as Java, C#, SQL, Visual Basic and several application-specific embedded scripting languages. I’ve dabbled with other languages such as Haskell, Lisp, Ruby, Pascal, Fortran and even Cobol at times just out of interest but never becoming fluent enough to use them as a first choice day to day.

So what started out as “just” a hobby is still, over 25 years later, my main hobby. The only difference is that I get paid to do it. I still feel the same joy and excitement when I produce code that does something neat. I get exactly the same satisfaction from my latest code to, say, ingest video and audio from an XDCAM disk as I did from my first BASIC program that just printed “hello, world” to the screen. What will I be doing in 10 or 20 years’ time? I don’t know, but I’m pretty sure I’ll still be programming and loving it.