Lots of Irritating Superfluous Parentheses
After seeing last week’s xkcd, I was reminded of the delights of learning Lisp (or in my case, Scheme) as an undergraduate. I’m a big fan of declarative programming in general — I think exposure to functional and logic programming languages develops your problem solving skills and refines how you think about programming, by focusing on the logic of a computation without getting distracted by its control flow (although this discussion has been going on for many years). It has served me well: I used logic programming (Answer Set Programming) extensively in my PhD and I dabbled with OCaml whilst a research intern at ARM; although I have used very little Haskell, I know a man who does. There seems to be a wider trend of functional programming techniques moving into the mainstream, especially with the release of F# as part of Visual Studio 2010.
Anyone who has used Lisp for any amount of time will fondly remember its enthusiastic use of parentheses. But you can embrace the Lisp philosophy a little too much. Parenthetic is a programming language that only uses ( and ) as code; all other characters are considered comments. Parenthetic uses Lisp-style expressions where parentheses enclose expressions; programs with unmatched parentheses are invalid. It looks pretty similar to another esoteric language called Parenthesis Hell, and has most of the basic Lisp features, including lambda for anonymous functions. To demonstrate a nice simple code example, the following Parenthetic program prints ‘Hello World‘:
((()()())(()(()()))((()(()))((())()()()()()()())((()()(()))((())()()()()()()()()()) ((())()()()()()()()()()()))))((()()())(()(()()()))((()(())(())())((())()()()()()()( )()()()()()()()()()()()()()()()()()()()()()()()()())))((()(()))((()(())(())())((()( ()))(()(()()))((())()()()()()()())))((()(())(())())((()(()))(()(()()))((())()()()() )))((()(())(())())((()(()))(()(()()))((())()()()()()()()()()()())))((()(())(())())( (()(()))(()(()()))((())()()()()()()()()()()())))((()(())(())())((()(()))(()(()()))( (())()()()()()()()()()()()()()())))(()(()()()))((()(())(())())((()(()))(()(()()))(( ())()()()()()()()()()()()()()()()()()()()()()())))((()(())(())())((()(()))(()(()()) )((())()()()()()()()()()()()()()())))((()(())(())())((()(()))(()(()()))((())()()()( )()()()()()()()()()()()()())))((()(())(())())((()(()))(()(()()))((())()()()()()()() ()()()())))((()(())(())())((()(()))(()(()()))((())()()()))))
Pretty expressive, I’m sure you’ll agree.
There has been a rich history of developing bizarre programming languages; for example, Brainfuck, an eight-instruction Turing-Complete programming language, and Ook!, a programming language designed for orangutans (essentially isomorphic to Brainfuck, but with even fewer syntax elements).
“I am thinking about computers…”
I am thinking about something much more important than bombs. I am thinking about computers.
John von Neumann (in 1946)
A set of top Computer Science blogs
This started out as a list of top Computer Science blogs, but it more closely resembles a set: the order is irrelevant and there are no duplicate elements; membership of this set of blogs satisfies all of the following conditions:
- they are written by computer scientists and focus on computer science research;
- they are of consistently high quality;
- I regularly read them.
N.B. I have deliberately excluded blogs primarily focusing on computer science education (for another time).
-
The Endeavour by John D. Cook (@JohnDCook)
John’s blog cuts across using computing, programming and mathematics to solve real-world problems, pulling in his wide expertise as a mathematics professor, programmer, consultant, manager and statistician. Some great posts across the technical and socio-technical spectrum. Also runs a number of useful Twitter tip accounts, including @CompSciFact, @UnixToolTip, @RegexTip and @TeXtip.
-
Serious Engineering by Anthony Finkelstein (@profserious)
Anthony is Dean of the Faculty of Engineering Sciences at UCL, having previously been the Head of the UCL Computer Science. His regular blog posts are an insightful and thought-provoking journey across computer science, engineering, research and academia.
-
Computational Complexity by Lance Fortnow (@fortnow) and Bill Gasarch
Since 2002, the first major theoretical computer science blog; computational complexity and other fun stuff in mathematics and computer science.
-
Daniel Lemire’s blog by Daniel Lemire (@lemire)
Daniel Lemire is a professor in the Cognitive Computer Science research group at LICEF in Canada, with his popular blog covering topics across his research areas (databases, data warehousing, information retrieval and recommender systems), as well as programming, education, economics and open science.
-
Gödel’s Lost Letter and P=NP by Dick Lipton (@rjlipton) and Ken Regan
This is a blog on
and other questions in the theory of computing, named after the famous letter that Gödel wrote to von Neumann which essentially stated the
question decades before Cook and Karp. Defined by the authors as a personal view of the theory of computation, it talks about the “who” as much as the “what”.
-
Editor’s Letters by Moshe Vardi (@vardi)
Moshe Vardi, a distinguished and award-winning theoretical computer scientist, has served as Editor-in-Chief of Communications of the ACM since 2008, discussing a wide range of topics across computer science, research and technology. Certainly worth following on Twitter too.
-
Alan Winfield’s Web Log by Alan Winfield (@alan_winfield)
Alan is the Hewlett-Packard Professor of Electronic Engineering at UWE and his blog is mostly, but not exclusively, about robots. It also touches upon artificial intelligence, artificial culture, ethics and biology, highlighting his definition of robotics as both engineering and experimental philosophy.
-
Lambda the Ultimate, the Programming Languages Weblog (@lambda_ultimate)
This site deals with issues directly related to programming languages and programming language research, as well as forays to bordering issues such as programmability and language in general. This is a community, but not for specific programming problems in some language; unfounded generalisations about programming languages are usually frowned on.
-
BLOG@CACM by Communications of the ACM (@blogCACM)
The Communications site publishes two types of blogs: the on-site BLOG@CACM expert blogs, as well as a blogroll of syndicated blogs, essentially covering the spectrum of computer science, research, education and technology. Something for everyone!
-
Google Research Blog by Google (@googleresearch)
The latest news on Google research, focusing on some of their key areas of interest: e-commerce, algorithms, HCI, information retrieval, machine learning, data mining, NLP, multimedia, computer vision, statistics, security and privacy.
Clearly this set is incomplete — please post your CS research blog recommendations in the comments below; I’d be particularly interested in blogs covering hardware and computer architectures.
IOGraph: map your mouse movements
IOGraph is a free utility for Mac/Linux/Windows that tracks your mouse movements to create surprisingly beautiful works of computer art. It works in the background by recording all the moves of your mouse in pencil-thin lines on a white digital canvas. When you stop your mouse a dot forms; the longer the mouse is static, the larger the dot will be.
The screenshot below was captured from just over four hours of work (see another two hour session), during which I took a coffee break (the large blob near the middle). I have a dual-monitor setup at work, with the dock in Mac OS X anchored to the left-hand side.
Apart from being quite fun, IOGraph can also provide interesting usability data when overlayed on a screenshot of your desktop (see this example by the application’s developer of his use of Photoshop over a whole day).
Join the BCS/CAS Network of Computer Science Teaching Excellence
In March, the BCS Academy of Computing and Computing at School (CAS) sent an information pack (zipped) to every state secondary school in England, in order to explain the opportunities they would have from September 2012 to develop Computer Science as a rigorous academic component within a reformed ICT curriculum. The supporting materials in the information pack provides comprehensive information that should help head teachers and school governors make the right decisions:
- Covering letter, explaining the current situation and key strategic choices for schools to teach Computer Science;
- A summary of the Royal Society report Computing in Schools: Shut down or restart?;
- Computer Science as a school subject, draws on the experience of CAS and explains what Computer Science is, and why it is strategically important;
- Computer Science: A curriculum for schools, is the CAS curriculum for Computer Science, mentioned by Michael Gove in January’s BETT speech, written by a group of teachers, academics and industry researchers, and endorsed by BCS, Microsoft, Google and Intellect;
- As examples of the wealth of high-quality material that is available to support Computer Science teaching, copies of the latest CAS newsletter and cs4fn magazine.
Alongside the information pack was the announcement of the Network of Computer Science Teaching Excellence, to create a network of schools and universities across the UK to advance teaching excellence in Computer Science. Schools that are members of the network of excellence will:
- be offered enhanced and heavily subsidised CPD for a teacher in their school;
- be part of a regional teaching hub for sharing good practice and offering grassroots organised CPD;
- have regular contact with university Computer Science departments to support and inspire teaching material;
- be expected to teach Computer Science at Key Stage 3 or 4 as a catalyst for a renewed Computing curriculum as recommended by the Royal Society, which is benchmarked against the CAS curriculum;
- have opportunities for showcasing their teaching practices and experiences at national conferences;
- be proactively consulted for their views and opinions for future campaigns related to education policy.
The centres of excellence would become part of a national network for establishing best practice and spearheading innovative teaching in Computer Science, with ongoing support from CAS, the universities in the network and BCS. We need key schools spread across the UK to kickstart this initiative; as you can see from the map below (click for a live update), it has already generated a huge amount of interest, with over 400 schools registering interest.
The Network of Computer Science Teaching Excellence is open to all schools across the UK — register your interest here* and spread the word; by creating this national network and providing effective CPD for teachers, there is a prime opportunity to have a profound effect on Computer Science education in the UK.
*there will be some flexibility on the 30th April deadline…
Pretend publications and counterfeit conferences
Further to the recent blog post by Anthony Finkelstein on pretend publications, this afternoon I received the following unsolicited email:
Dear Dr.,I am chairing the IADIS International Conference Applied Computing 2012 and would like to invite you for the scientific committee of this conference that will be held in Madrid, Spain (please see http://www.computing-conf.org/).
As a member of the committee, you will get some papers to review in the topics you select (topics list available http://www.computing-conf.org/topics.asp). You are entitled to be part of the proceedings book and CD-ROM and also have free entrance to the conference except if you are author or co-author of a paper and wish to present it yourself or get it published in the proceedings in case none of the co-authors registers for the conference.
Can I just ask you for a couple of names that could also be part of this committee? The idea is to increase the number of members in the committee in order to reduce the committee members’ workload.
Also, can you please send me your address so that we can send you a CD-ROM with the proceedings of this year’s edition?
Could you please let me know whether you accept this invitation the soon
as possible?Hope to see you being part of this IADIS conference.
Best regards,
Applied Computing 2012 Conference Chair
I frequently receive emails inviting me to submit a paper to sham conferences or journals (or, better yet, to say that my “paper” has already been accepted for publication), but this is my first programme committee invitation. Needless to say, I am honoured.
More seriously, this is a worrying (and steadily increasing) phenomenon, particularly in computer science. An example that frequently tops lists of fake conferences is WORLDCOMP (see scathing critique here); agents purportedly representing this conference recently threatened the owner of the comp.compilers list that I follow.
Let’s be clear: these are not credible outlets for disseminating academic research, so how can we rid ourselves of these deceptive venues? Echoing the sentiments of Anthony, it will not be by exposing and condemning the organisers (potentially problematic from a libel perspective), but by systematically discouraging people from submitting. Spread the word.
Beware of bugs
Beware of bugs in the above code; I have only proved it correct, not tried it.
Donald Knuth (in 1977; explanation here)
Douglas Noel Adams (1952-2001)
There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable.
There is another theory which states that this has already happened.
Today would have been the 60th birthday of Douglas Noel Adams, a writer who has had a profound impact on many people’s lives (including my own) due to his famous trilogy in five parts: The Hitchhiker’s Guide to the Galaxy. He was a staunch atheist (“Isn’t it enough to see that a garden is beautiful without having to believe that there are fairies at the bottom of it too?“), a serious fan of technology (especially the Apple Macintosh) and a passionate advocate for environmental and conservation causes.
DNA sadly died in May 2001 at the age of 49 (with his life celebrated every year on the 25th May by Towel Day), but his contribution to science fiction, comedy and satire lives on. I would have no hesitation in naming HHGTTG as one of my most treasured books; I regularly re-read it and it would certainly be top of my Desert Island Discs book list. If you have not yet had the pleasure, I urge you to do so.

“Null References: My Billion Dollar Mistake”
I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn’t resist the temptation to put in a null reference, simply because it was so easy to implement. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years. In recent years, a number of program analysers like PREfix and PREfast in Microsoft have been used to check references, and give warnings if there is a risk they may be non-null. More recent programming languages like Spec# have introduced declarations for non-null references. This is the solution, which I rejected in 1965.
Tony Hoare (speaking at QCon London 2009)


