Archive for May 2012
This week saw the publication of the Guardian University Guide 2013, one of the many university ranking guides in the UK. In the Computer Sciences and IT category, there were some familiar names in the top 10 (especially comparing against the 2012 table…apart from Oxford, for whom there was no data):
|1.||↔||University of Cambridge||(1st)|
|2.||↔||University of St Andrews||(2nd)|
|3.||↑||University of Southampton||(8th)|
|4.||↔||Imperial College London||(4th)|
|5.||↑||University of Bristol||(7th)|
|6.||↔||University of York||(6th)|
|7.||↓||University of Birmingham||(5th)|
|8.||↑||University of Glasgow||(13th)|
|9.||↑||University of Liverpool||(24th)|
|10.||↑||University of Sheffield||(20th)|
Of particular interest to me were the rankings for Computer Science in Wales:
|64.||↑||Cardiff Metropolitan University||(74th)|
|89.||↓||University of Glamorgan||(78th)|
|90.||↓||University Of Wales, Newport||(101st)|
(N.B. no data was available for Swansea Metropolitan University and University of Wales Trinity Saint David)
Looking at the table headings and the methodology, research does not appear to be one of the ranking metrics; as you can see from The Complete University Guide 2013, this can change the ordering somewhat. While this is a reasonable performance in Computer Science by Welsh universities, we should be aiming for at least one top 20 placing in the next year or two.
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).
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 computer science research blog recommendations in the comments below; I’d be particularly interested in blogs covering compilers, concurrency and computer architectures.
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).