Graduated from MEng Computer Science with Embedded Systems Engineering, with North America Exchange; at University of Illinois
Wednesday 30th January 2013
We've just finished up our module in user-centred design. The brief was to design an interactive system that encourages people to walk more. I can think of dozens of apps and devices on the market that get people running or going to the gym more often, but people that need to walk more aren't motivated by the same kinds of things as runners, so we had to take a more informed approach.
Since we didn't actually have to code anything, we decided to design a system that would automagically* track every journey you made, and then neatly make suggestions about ways to fit walking into your daily commute -- say, by walking in between bus stops because the Number 5 is running late anyway, or parking your vehicle in a car park that was further away from your usual spot but also cheaper.
I think most software engineers would do the straightforward thing here: specify requirements, design it, build it, test it, sell it.
The user-centric approach aims to create better products by focusing on the user experience, and practitioners apply tried-and-tested design patterns to their work and perform ritual evaluations to iron out any problems. Some of the techniques seem unintuitive at first: the requirements of a product are driven by describing (in prose) how it might be used, and design choices are made by seeing what fictional users wanted (we called them Jason and Agatha). I did feel silly writing about Jason's daily commute to work in the project report, but it's actually a really good way to visualise the way that someone might use a product. Would Jason care about how many calories he burned on that walk? Then why is it popping up in his notifications bar?
In the end, our prototype still got deconstructed pretty heavily when we tested it with real users. I liked the concept behind it, but managing the flow of an app and keeping all the functionality simple, yet capable is really difficult. I know we'd do a much better job if we tried again, but trying to put what I've learned -- good design -- into words is a tough one.
*: Naturally, I spent a lot of shower time thinking about how this would work in reality. It's definitely possible to tie together location and speed information, public transport routes and personalised places of interest with some smart data manipulation, but doing this on a phone while minimising power consumption probably isn't feasible for now.
Friday 9th November 2012
The processor in a computer does most of the hard work, but it's designed to be very general and run all kinds of programs, so it's not very efficient. You could design a chip which runs one specific program at high speed, and that would be great but you'd need a new chip for each program that you wanted to run. A field-programmable gate array (FPGA) is a special type of chip that can run the specialised program super efficiently, but can also be updated to run new programs. They're neat, and used for some high-performance computing because you wouldn't have to throw away chips after each calculation that you make.
Parallel computing -- working with dual cores or lots of processors together -- is also really important. In theory, two processors could do something twice as quickly (or even faster!), without being twice the size or using double the power. Unfortunately, writing parallel programs can be difficult because you get a "too many cooks" syndrome, where processors will get in each others' way and there are other resources to manage, like spreading the workload efficiently, which is a hard problem.
My final year project is exploring the combination of these -- building a set of tools that makes parallel programming on multiple FPGAs easier to do. There's already a set of commands called the Message Passing Interface (MPI) which is useful for sharing information between processors and is used in a lot of supercomputer clusters at the moment. They're not really designed for FPGAs, but it's a starting point for my design.
Tuesday 31st January 2012
I wasn't sure which classes to take in my second semester, so I've been sampling a bit of everything for the last couple of weeks. It's humbling how many fields open up once you get an understanding of the fundamentals of computer science...
CS 498DP Ė Introduction to Parallel Programming: One of the things that UIUC takes very seriously is parallel computing. The department's made big investments since the 1960's to ensure that there are so many experts teaching the field here. It amuses me how Intel are only keen to invest in teaching parallel programming because it's the only way they can continue to make their chips faster (but there is also some real truth to that). The course is mainly just covering algorithms at the moment, but I get the impression that these really are the basics by which you could parallelize anything.
CS 533 Ė Parallel Computer Architectures: This is the follow up to a class that I took last semester and architectures is slowly becoming my favourite topic. Learning about the problems faced, and the really elegant solutions that architects have found fascinates me. Iím a bit wary of taking on a grad-level class again though, especially since it seems like there's a huge gap in assumed knowledge between this class and CS 498 above, but I might keep attending just to see where it goes.
CS 477 Ė Formal System Specifications: Admittedly, I'm only taking this because it's a required course at York. I know that static analysis and model checking are really important, but I feel like I'll never cover it in enough depth for it to ever become useful to me.
CS 598MC Ė Cyber-Physical Systems: My embedded systems professor encouraged me to take this class last semester, and it seems like something I'd really enjoy. Unlike the others, it's a reading and discussion led class. Cyber-physical systems are essentially real-time embedded systems, so the emphasis is on guaranteeing service instead of just getting the best performance. The fact that these systems are often networked introduces all kinds of problems with lost or late messages and disappearing machines, which makes it difficult to ensure any robustness.
CS 414 - Multimedia Systems: In this class, weíll work on an end-to-end system which takes webcam streams and displays them on a central broadcasting machine, which covers everything from compression techniques to network scheduling. Some of the more modern ideas are peer-to-peer protocols and intelligent broadcasting tools. Although the project sounds like a lot of work, I'm quite disappointed that I won't be following through with this, since one of the requirements was to be proficient in multithreading and sockets and I didn't want to let down my team, so I'm taking...
CS 241 Ė Systems Programming: At the moment we're just covering C syntax and having a 200-strong cohort feels so different to my other classes, but we'll get to memory management, multiprogramming and networks eventually. I've covered a lot of the theory behind this during the Operating Systems course at York, but never spent any practical time on it. I like how they're keeping it very modern with things like MapReduce becoming part of the course, though.
CS 357 Ė Numerical Methods I: Before starting university, I'd always thought scientific computing was hugely important, since you could model almost any problem with a computer. Topics like this are the nitty-gritty of how scientific computing works, designing algorithms around efficiency, stability and with error constraints. It feels very different to school which was always about the analytic solution, and I've since forgotten a lot of my calculus!
ECE 385 Ė Digital Systems Lab: Actually, one huge advantage of studying in the US is that you can pick courses from outside your subject. I donít think Iíll have the chance to swing wildly away from computer science, but if I had the time Iíd definitely want to take up rock climbing for credit or something. CS classes are almost purely software here, while ECE has the hardware side. This class is almost a follow up to the hardware courses I'd taken at York, designing logical circuits and working with FPGAs. FPGAs are reprogrammable chips which can be configured to run specific programs, so they can work much faster than general purpose CPUs, and could be The Future of Computing.
Wednesday 28th December 2011
I've been worrying over my grades for the past week. My finals were pretty straightforward, but my standing wasn't very good going into them because of some careless homework assignments (which I chalk up to being part of the learning process). I'd also left my compiler project unfinished after really struggling to understand the API for LLVM and getting all of its optimization passes to, um, compile.
My Emerging Programming Paradigms talk didn't go very well either -- I was under-rehearsed and ended up finishing early. I'd changed topics to present on at short notice and maybe changing once more to discuss Distributed AI using the actor model could've been more interesting.
I did better in my Embedded Systems and Computer System Organization classes. In the former, there was a lot of emphasis on lab work, and my partners and I got along really well. The exams were focused on learning specific algorithms and numerical work - I think this is why they're considered easier: it's possible to do well through rote memorisation.
There's not much to add about my architectures courseÖ it's material that I've covered in the past at less in-depth (at A-level, the Introduction to Computer Systems, and Computer Architecture first-year modules, and certain specifics in Chips To Systems in the second-year), but this time, it's finally all coming together to the point where we were able to dissect some modern architectures (Intel Core, nVidia Fermi and AMD Opteron) and follow a technical lecture by Principle Design Engineer Matt Elwood from ARM.
Anyway, I did both better and worse than expected in my classes overall, so maybe my finals didn't go exactly as I thought. I'm averaging slightly below a B+, but we'll see what it equates to when I get back to York... I think I'll have my work cut out in 2012 regardless.
I was asked to comment on continuous assessment before, but I've struggled to come up with an opinion. It's different in so many ways that I don't think it's very easy to draw a comparison. Since I'm taking Senior/Graduate level courses and everyone is in the class by choice, it's more discussion and research led, and the assessments feel like much more of a formality for me. I feel that it's really necessary to have coursework in these classes and spreading the content over two exams helps relieve the pressure a lot, so it makes a lot of sense to me.
I ended up spending Christmas in Las Vegas. It was a somewhat last-minute plan, but I thought I may as well travel the country while I have the chance. I'm heading to Los Angeles and San Francisco later in the rest of my break, but tonight, I'll be spending my night playing poker and trying not to go all-in pre-flop like I have been for the last couple of tournaments.
Tuesday 6th December 2011
So I've just come back from my Thanksgiving break. They didn't let us stay in university housing, so I took the time out to explore the East Coast with a couple of others on the exchange from York.
We started by flying out to Washington D.C. and visiting the typical touristy sites (Library of Congress, Supreme Court, Capitol Building and The White House) and museums (National Gallery of Art, Air and Space Museum, Museum of the American Indian) in the central district. My favourite was probably the National Postal Museum if only for setting ludicrously high scores on their Surface exhibits aimed at kids.
We also took an "off the trail" night-time tour of the monuments and memorials in D.C., setting foot in Virginia before finding our way again. I'm glad that I got to see some of the less frequented sites, though - Ford's Theater and Arlington Cemetery are definitely places I wouldn't have visited if I wasn't being guided by historians.
In Philadelphia, we saw the incredibly creepy Mutter Museum, home to Madame Dimanche and a sufferer of Stone Man Syndrome. The rain was pretty bad, so I never got round to doing the Rocky Steps or visiting the Rodin Museum near the Philadelphia Museum of Art, though. I have to say, cheesesteaks are rapidly becoming my favourite food and grabbing an authentic Pat's was definitely worth it.
We stayed a couple of nights in Brooklyn, doing most of the attractions in Lower Manhattan, including almost getting stranded on Ellis Island. Later, we went to the Rockefeller Center where they were recording for a Justin Beiber video (sadly, he was not there). We'd also planned to go to Macy's 85th Annual Thanksgiving Parade but ended up missing most of it, and getting to Boston late in the evening meant we had to settle for McDonalds for our Thanksgiving Meal. I've been thinking it's not a real holiday anyway.
Harvard was closed off because of some Occupy protests, but the JFK Museum was definitely one of my highlights from the trip Ė he definitely had one of the most interesting presidential terms. We spent another day in Chicago on the way back, too. It's surprising how familiar it felt to be back somewhere close to home.
It was a really fun trip, but hectic week with a lot of rushing to catch Greyhounds. I wish we could've had a little bit longer to get to see everything else that we had to cut. Still, it amuses me how much we ended up visiting all the locations in Nic Cage's adventure masterpiece, National Treasure: Independence Hall, Franklin Institute (PA), Trinity Church (NY), Old North Church (MA).
I've been straight back to work since and there's now only a couple more days of class left before Finals Week, and then we break for the semester. I'm think I'm prepared enough for the exams, but we'll see (I also have an outstanding project and couple of assessments).
Tuesday 15th November 2011
This weekend, I've been holing myself up in my room working on my compiler. I'm proud to report that it's finally passing the original set of test cases I wrote two weeks ago. The idea of compiler construction never seemed that interesting to me among the other topics in computer science, but it is definitely growing on me. I'm glad it's a course I'm taking at UIUC though -- the LLVM language we're using was developed here, and it's very promising how sought after this experience is with recruiters.
Compilers are the bridge between programming code and processor instructions, so you really have to be on top of understanding exactly how programs run on computers. There's barely been time to talk about memory management and go into the specifics of making programs more efficient, but I'm not sure if I'll get a chance take the advanced course next semester with so much else going on.
Everything else is gearing towards Friday, where I'll give a presentation for my Emerging Programming Paradigms class. It's a more abstract topic, about programming language design with a main focus on avoiding problems that come from the changing nature of programs (web applications, sensor networks, cloud computing, etc).
To anyone familiar with object-oriented programming, a lot of the work here is based around a similar principle, called the actor model. However, instead of direct method calls to objects, actors respond to messages, which make them more suited to running on multiple threads and different computers, because it can avoid problems like race conditions. On the flip side, actors have their own problems such as garbage collection and scoping.
It's an advanced class, and the one that I have to do the most background work for, so it's kind of scary knowing my entire grade rests on this one talk. I'll be glad to get it over with, since afterwards I'm heading straight out to Washington, New York and Boston for Thanksgiving Break. I'm so excited!
Thursday 27th October 2011
I'm now two months in -- some quarter of my exchange -- and I still haven't updated my blog! I guess it's difficult to find a starting point when everything about school (university) here is so different.
For anyone not clued up, I'm currently at the University of Illinois on the Urbana-Champaign campus, some 4,000 miles away from home (and also some 40 feet down, procrastinating in their underground library). I'm spending my third year on exchange as part of York's Study Abroad scheme.
Even though I've been here since August, I'm still not sure if I've really settled in properly yet. There's so much going on here that I haven't really found a chance to find my feet: society meetings, concerts, seminars, hanging out with people on my floor, football games at the weekend, hay rack riding excursionsÖ and that's avoiding the workload, where projects and homework assignments are getting thrown at me left and right. Most of the residents in my halls are freshmen, so they don't know the meaning of real work yet!
I'm taking classes in Compiler Construction, Computer System Organization, Embedded Systems and Emerging Programming Paradigms this semester. I'm glad I got to choose my own topics, and that I chose these ones specifically. They're mostly in-depth and practical extensions of things from York, but I'll probably elaborate on each of these a lot more later.
Friday 17th June 2011
I've just finished with my exams for this year -- only three for me this summer. These marks are probably not going to influence my final grade much, but it'd be nice to do well in them anyway.
This time around, I've taken a more balanced approach to learning throughout the year rather than just cramming as much as I can in the last couple of days. Hopefully it paid off, but even with a complete week off to study, I still would've liked to be a bit more prepared: maybe trying to learn more pragmatically by programming some AI rather than the super-effective method of past paper revision.
There's a series of talks on Starting a Business next week that I didn't get a chance to go to last year. Even in spite of Lord Sugar's statement about engineers, something about watching The Apprentice makes us all think we could run a business pretty effortlessly.
Otherwise it's going to be pretty laid back in York for me. I guess my summer holiday's been cut short because of the American terms starting in August, but then again, I'm not working this year either. It's a shame because I could do with the money!
Friday 13th May 2011
The Team System Project has completely consumed the last week for me. TSP is a very intensive module: designing a complex system in just over a week. It's caused us to spend a few very late nights in the department this past weekend, but I feel it's been worth it in the end.
This year's project is about traffic management, designing a system that networks the different lights and sensors in the fictitious city of Yorbridge. Urban transportation planning is a complex enough field on its own and it took us a few days just to get a good grasp of the scenario.
One of the problems is that the scenario is purposefully vague, leaving out all kinds of numbers and details. Our approach was to create a system that would be as flexible as possible, but having some assumptions in mind means that you could make it more robust (and probably save a tonne of time!).
As part of the software engineering strand, much of the focus is on using correct development process and quality assurance procedures. I think for many of us, it's our first experience of formal system development, and we could've done a lot to be more thorough. I think every group could have done with more time... I guess we underestimated how much work really goes into a project like this.
The TSP scenarios are partly set by IBM and based on real pieces of work, so I'm looking forward to hearing about how they handled it at their presentation later in June. I'm well aware that our solution wouldn't cut it in the real world, but I guess having a client and real lights to build off makes it much easier to implement. (So, I'm sure, does having decades of company experience, pre-established design methodologies, and a team of experts in the field).
I'm off to get some well-deserved rest -- that's all for this week.
Tuesday 3rd May 2011
Apologies for completing the hat-trick of Latest Posts, I guess itís just that the others must have plenty to do with their time! Since term doesnít officially start until tomorrow, I figured Iíd put off revising for my Week 1 exams for another day.
Itís impressive how much knowledge weíve condensed in the last couple of terms from textbooks to lecture slides to notes to revision, and I guess the fact it feels like so long ago means it must have stuck somewhat.
Our Lexical and Syntax Analysis (LSA) module started last term. Itís basically the first half of understanding compilers and bridges the gap between programming languages and computable symbols. I know thatís probably jargon to anyone thatís not well versed in computer science so my makeshift analogy is to describe LSA as the chopping and mixing of ingredients in a recipe, while the third year CGO module is the frying and plating part. Except that instead of creating something delicious and hopefully edible, youíre building a program which is efficient and doesnít crash. And those ingredients are bits of code someone else wrote, and youíre the compiler.
Otherwise the Spring term flew by fairly quickly, ending with my hardware project demonstration. This year, we were making heart rate monitors, though mine was a little erratic since my analogue electronics are still kind of rusty. I managed to extend mine by creating an animated mascot, but itís a bit frustrating that the deadline came just as I was fully coming to grips with assembly code.
Iíve had a very chilled-out break in London, catching up with old friends and enjoying the weather. I came back to York slightly earlier just to sort out some passport things (their offices are too busy at home) and this cityís definitely picturesque in the sunshine with daffodils blooming everywhere. I also had a chance to see Jon Richardson and Shappi Khorsandi last week at the York Theatre Royal, but thatís it from me until the Summer term officially starts.
Friday 25th February 2011
So with that, my application to study at the University of Illinois at Urbana-Champaign is finally sent off. It's been a hectic couple of weeks, gathering bits of documents and applying for visas and the like, but hopefully it'll all be worth it in the end.
UIUC has one of the largest and strongest computing departments in the US. One of my main reasons for going on the exchange is some of the strong research in parallel and GPGPU computing that takes place there. They also hold some unique 'Special Topic' modules, which are one-off modules held by guest lecturers in some pretty cutting-edge fields.
I distinctly remember tossing away the yellow sheet in my admissions pack about the scheme, but somehow the idea always stuck in my mind. It's only in the summer just gone that I've given the idea any serious thought after really deciding what field of computing I want to focus on.
My best advice if you're interested in the exchange is to stay organised. There's a few really important events in the first term and a lot of universities and courses to look at before making a decision. I'm exchanging my third year (of four), which, as well as an extra year to prepare, gives you a lot more options in module selections because of prerequisites and York requirements.
I guess now it's time to catch up on academics again. It motivates you a bit more to study databases when you realise it's probably a computer scientist's fault that it's taken you four trips to the bank to get your name and a balance on the same page for financial proof for my application.
For more information about the Study Abroad scheme, please see the Study abroad and exchange page.
Wednesday 9th February 2011
Hi! I'm Alex, a second-year computer scientist on the Computer Science with Embedded Systems masters course. I'm originally from London and before coming to York, I took a year out.
The field of computer science fascinates me, whether it's the pinpoint* accuracy provided by Hawk-Eye or how quickly the Internet has become ubiquitous in our everyday lives. Recently, advances in consumer electronics have inspired me: the close interaction between industrial design, electronics and software behind a product is a real testimony to modern engineering.
... that's starting to read a lot like a personal statement -- all I'm trying to say is that technology is cool, and I want to be a part of it! I've always leaned towards science and engineering, and after picking up bits of programming along the way, I found myself on this course.
This term, I'm taking modules in networks and distributed systems, hardware, AI and logic programming, and relational database theory. It's a nice mix between fairly conceptual software engineering techniques right down to programming in assembly language.
It's actually that "hardcore" coding aspect of the hardware project I'm enjoying the most at the moment -- there's a certain satisfaction from knowing that my code couldn't possibly run any faster or take any fewer bytes of memory. On the flip side, it does also mean some long, clueless afternoons in the labs playing with test probes.
The hardware project from last term took up a lot of my spare time, too, and I suppose my new year / term resolution has been to learn to balance my workload better. So far, I've made it to a month, but the term goes by so quickly that you can hardly afford to fall behind.
I'm helping out with UCAS interview days this term; say Hi if you bump into me!