Hype Dark logo

by SS at 6:55 am on Saturday 26th April

I came to the MEng program having worked for three years and travelled for a year before then - essentially four years out of my undergraduate degree in Computer Science. Even then, the last time I studied maths seriously was in the first year of my undergraduate degree, so about seven years before starting the MEng. That being the case, there were a number of subjects I'd wish I'd brushed up on before starting my coursework at UC Berkeley.

The courses I took were Advanced Robotics, Computer Vision, Introduction to Machine Learning and Applications of Parallel Computing. I'll start with general advice and talk about specific tips for each course at the end. These are roughly in order of how important I think they are.

1) Linear Algebra: This is by far the most important area of maths to cover if you study any sort of graphics or AI course. It was heavily used in all four of my courses. There's a great tutorial online here which is actually written by a UC Berkeley professor. Know this well and you'll spend much less time looking up the basics.

2) Statistics: Know your basic probability and distribution rules. Most of AI is heavily statistics based - in particular, Machine Learning is a lot of statistics and most popular successful AI techniques now tend to be probabilistic. Sebastian Thrun has a great overview paper and is the author of the main text on this area.

3) Optimisation: Optimisation is heavily used in the Advanced Robotics course and appears to be crucial for a lot of cutting edge computer science. I had NO idea what this was before starting and this put me at a significant disadvantage. Learn how to formulate basic optimisation problems at the very least. This book by Stephen Boyd is the definitive text on the subject.

4) Matlab: Matlab is a programming language / development environment that is heavily used by academics. As a software engineer, I particularly dislike programming in it - however, most homeworks assume you will be using it and so most examples and starter code is written in Matlab. While you can submit assignments in Python or other languages, the path of least resistance is to use Matlab. Matlab offers a student license but the department should pay for a license for MEng students. In the meantime, you can use the open source Octave software, which is syntactically very similar.

5) C++: If you intend on taking the Applications of Parallel Computing class (highly recommended - it is excellent) or implementing any actual robotics code, you would do well to become familiar with writing and running C++ programs.

6) Linux: It's useful to have some basic ability with the Linux shell and to have a Linux virtual machine set up. You may or may not use this - depending on whether you take systems level classes or not. I recommend installing Linux Mint in Virtualbox.

7) Git / GitHub: Source control will make your life a lot easier. Learn this well and it will make collaborating with peers on homeworks and your capstone project much, much better. Try the brief interactive tutorial on GitHub.

8) Advanced Robotics: Regardless of what it might imply, this course does not rely on the Introduction to Robotics course. Introduction to Robotics is more about robotic manipulators and 'traditional' robotics. Advanced Robotics is more about the theoretical underpinnings of the algorithms to allow planning, localisation and state estimation. It is not practical at all (much to my disappointment) and is very state of the art. I often struggled to understand the motivation for several techniques until the end of the course. However, you'll find that you know most cutting edge techniques by the end of the semester. It also assumes prior coursework similar to the undergraduate Introduction to AI course at UC Berkeley - so I advise taking Sebastian Thrun's Introduction to AI course on Udacity if you haven't taken anything similar before. This is a hard class but thoroughly satisfying once you complete it!

9) Computer Vision: This is a great course taught by a pair of very energetic, enthusiastic professors (Malik and Efros). Highly recommended.

10) Introduction to Machine Learning: Taught by the same professors as Computer Vision, this class suffers from it's large size - being primarily and undergraduate class. The work load is high but the skills learned are very practical. I'd recommend it but it requires a strong stats background.

11) Applications of Parallel Computing: While the course content itself focusses heavily on scientific computing, the homeworks assignments are very practical and very fun. One of my favourite courses so far.

12) Collaborating: Something I realised quickly was that it was very useful to work together on homeworks with my peer group. You'll often find that you can work together to fill in gaps in each other's background - which is essential when you're coming from another country with a different educational background and sometimes lacking pre-requisite coursework. I wasn't able to work with many people for the Advanced Robotics course and this made the experience almost intolerably difficult. On the other hand, working with motivated peers who were also taking Computer Vision made that class much more enjoyable.

I hope this advice helps - feel free to chime in in the comments below!

No comments yet
No comments yet!

Comments have been disabled. You can probably comment on this post on Geek On A Bicycle.

"Our thoughts define our reality." - Anon.