Category Archives: Uncategorized

PLC Factory – Automating Large-Scale PLC Development

I spent this summer working at the European Spallation Source (ESS) in Lund, Sweden. My contribution was the creation of PLC Factory, a tool that automates development for programmable logic controllers (PLCs). A paper on this project is forthcoming.

The code of PLC Factory is available on the Bitbucket account of ESS. PLC Factory was developed as FOSS. Thus, I can make the code I wrote available on my private GitLab account as well.

The draft of the PLC Factory paper is likewise available on GitLab. Here is the full title information including the abstract:

PLC FACTORY: AUTOMATING ROUTINE TASKS IN LARGE-SCALE PLC SOFTWARE DEVELOPMENT

Authors:
G. Ulm, D. Brodrick, N. Levchenko, F. Bellorini

Abstract:
At the European Spallation Source in Lund, Sweden, the entire facility including all its instruments will be controlled by a large number of programmable logic controllers (PLCs). Programming PLCs, however, entails a significant amount of repetition. It is thus an error-prone and time-consuming task. Given that PLCs interface with hardware, this involves economic aspects as well, due to the fact that programming errors may cause damage to equipment. With PLC Factory, we managed to automate repetitive tasks associated with PLC programming and interfacing PLCs from EPICS. This tool is being adopted at ESS, and has shown potential for a large increase in productivity compared to the status quo. We describe PLC Factory as well as its embedded domain-specific programming language PLCF#, which it is built upon.

Greed has ended the promised MOOC revolution

Introduction

In this post, I will critically reflect on the MOOC phenomenon. I will briefly retell the recent history, discuss their shift towards monetization as well as the cynical behavior that emerged in this context, and conclude with my view on the value proposition of MOOC providers. I will start with my personal background, as it relates to MOOCs.

I have completed over 40 MOOCs within roughly the last three years. My main focus was on computer science and related subjects, but I also took a substantial number of courses in other disciplines. Those courses were a great complement to the software engineering Bachelor’s program I was studying during that time. Initially, I was a great supporter of MOOCs, despite quickly noticing their shortcomings, such as automatic grading and peer reviews. I even readily agreed to be a Community TA for one course at Coursera in early 2014, in order to give something back to the community. These days, though, I would no longer volunteer for any for-profit MOOC provider, after seeing what the major players Coursera, edX, and Udacity have turned into.

A brief history

Stanford offered three university courses online in 2011, including a very popular Artificial Intelligence class by Peter Norvig and Sebastian Thrun. The astounding public response was arguably fueled by the prospect of being able to get access to the same materials as Stanford students, sans personal interaction with teachers and teaching assistants, and earn a PDF certificate as proof of your attendance. Online courses had been available for a long time, though. The most prominent provider was MIT with their OpenCourseWare (MIT OCW) platform. The downside of it is that if you wanted to recreate the learning experience of an MIT OCW course, you would have to grade your own assignments and exams, which is of course a ludicrous proposition. Thus, as an autodidact, you were hardly better off compared to working through a textbook at your own pace. At least in computer science and mathematics there are a lot of high-quality textbooks available, which often include answers to at least some exercises.

MOOCs seemed to want to improve the lives of autodidacts. Indeed, a very large part of early adopters were people who had already completed college degrees. A lot of the earlier courses were furthermore reasonably rigorous. There were shortcomings with regards to the assignments, since those tended to rely a lot on multiple choice questions, which entails simplifying the assessment. More extensive projects were graded by your peers, which is a far cry from having a teaching assistant provide personal feedback, like it is the case at university. Interactive exercises are great to have, as you get immediate feedback. In short, if you went through a MOOC, you got a pretty decent experience, as long as you took courses that followed textbooks, provided extensive lecture notes, and are in subjects that do not require specialized equipment.

Going sour

In 2012 MOOCs seemed to be too good to be true. Sure, there were hardly perfect. The limitations seemed rather substantial. All drawbacks can be solved, and have been solved. Particularly edX seemed to focus on high-quality courses, aiming to get as close to the class room experience as possible. In some of the courses I took, even course books were made available for free, albeit in a cumbersome interface. If you find an edX course offered by MIT that has a counterpart on MIT OCW, you may find that the content on edX is in no way watered down. I probably should not make a hasty generalization. Thus, I’d like to modify the previous statement to say that the few courses I compared on both platforms seemed more or less equivalent.

I was particularly impressed by some of the innovations of edX. For instance, some MITx courses have the option of providing feedback from an MIT teaching assistant — for a substantial fee, of course. In some of the computer science courses, the assignments are fairly substantial, going beyond what I have seen at Coursera or Udacity. I have not encountered any complex projects, as they would need more guidance than current MOOC interfaces can provide. There are open challenges, like administering group projects, which are a common in CS education. I am not aware of any attempt of replicating this in a MOOC.

Of the three MOOC providers I am most familiar with, Coursera, Udacity, and edX, it seems that only edX is interested in reaching university standards, with the aforementioned limitations, of course. Udacity has been going the trade-school way, offering “nano degrees” in specialized subjects like mobile app development or web development. The Udacity courses I have taken were okay, but I would not at all be interested in paying for them, as they had too many drawbacks, and seemed very much focussed on applying knowledge instead of fundamental understanding.

Coursera has been undergoing a rather dramatic shift. At first, it seemed that they were aiming for academic excellence. I liked their focus on the sciences, and in particular their broad offering in computer science. It was unfortunate that many courses would only run once a year. This problem is currently being resolved, considering that a lot of courses on Coursera have been remodeled into self-paced versions. This was the only positive change I can see on that platform. Otherwise, I am deeply disappointed. While there used to be a fair number of standard-length courses that were clearly based on their campus counterparts, the current situation is much different. There were instances were single courses were broken up into several much shorter ones and repackaged as a “specialization”.

Of course innovation comes with a price tag at Coursera. I will talk about the value proposition of MOOCs a little later. For now, let me only state that Coursera seems to have taken some inspiration from the kind of sites that pop up on your screen if you don’t suppress ads in your web browser. You know, those with long and fancy sales letters and bullet points that reiterate what a great deal their dubious product is. Coursera’s Data Science specialization is currently available for $470, and consists of not one but a staggering ten courses. However, those ten courses do in no way correspond to ten proper university courses. In fact, they used to be one or two longer courses. This reminds me of bloggers who want to sell you a bundle of ebooks, where each “book” contains 20 to 30 pages with just a few dozen words.

Lastly, edX has not been inactive on the monetization front either. While it at first seemed there was a focus on standard-length courses and adding a price tag to them, you nowadays do see quite a few Coursera-style offerings as well, with “XSeries” programs consisting of courses that each are four weeks long. Again, like we have seen it with Coursera, splitting a 10 or 12 week course into three courses seems to have been done with an eye towards profit maximization and possibly the intention to deceive customers. Thus, keep in mind that most if not all course programs do in no way reflect the pacing of a typical university course.

The value proposition

An appealing aspect of MOOCs was that you were rewarded with a PDF certificate that indicated completion of the course. This was hardly comparable to getting a new entry on your university transcript after passing a proctored exam at a brick-and-mortar institution. Still, it provides some evidence that you have studied the course materials. Cheating happens at universities, too, after all.

I never saw any value in paying for a “verified” certificate. Apparently, this sentiment was shared by a high enough number of other MOOC users. Apart from the dubious value proposition, it was also an aesthetic one, as I considered the design of the non-free certificates at both Udacity and edX, with their tacky ribbons and huge logos, far less aesthetically pleasing than the much simpler free certificates. Demand for verified certificates apparently wasn’t what it should have been, considering that the free alternative was infinitely better value for money. Thus, the three major MOOC providers no longer offer free certificates. Udacity was the first entity that did so, in early 2014, because they wanted to “maximize the learning outcome for our students“. Their first instructor, Dave Evans, whose gave the Introduction to CS class, disagreed with that decision, for a while, apparently issued certificates himself, until Udacity told him to stop. Coursera followed suit in October 2015, but everything is fine because they “remain fully committed to [their] financial aid program“. Apparently, just stopping issuing free certificates did not have the desired effect on autodidacts, so nowadays you cannot even access assignments without paying their “small fee”. This makes their computer science courses now useless for anybody who does not want to part with his money. In December, edX apparently did not want to feel left out, so they had to “ensure that edX certificates carry the merit our learners deserve“, and axed the free honor certificates, which were previously praised as a great motivation on their homepage. Why can’t they all just openly say that they want to improve their bottom line, maybe not in those words, instead of making such bullshit statements?

Now that you have to pay if you want a certificate, one has to ask what the value proposition of MOOCs is. It is of course very cynical that the big providers still claim they offer “free” education, when, particularly in the case of Coursera, the freely available content is heavily restricted. Improving the value proposition by eliminating the free option, and still claiming that you offer “free” education is quite something, though. Further, edX amuses me by asking for donations and pestering me to pay for certificates. At brick-and-mortar universities they at least let you graduate before you get calls, emails, and letters from their fundraising office.

From my perspective, as a European who is used to high quality education for a very low cost or entirely for free, the suggestion of paying for a lesser product is dubious at best. Also, I don’t look particularly favorably at the deceptions by Coursera and edX who split up regular courses into several smaller ones, which primarily serves to mislead the customer. Sock puppets would of course respond that caveat emptor applies. Scammers use the same defense. So, let’s do some basic math! As of today, I have completed 43 MOOCs. Some of those courses have been, in the meantime, split into several smaller ones. So, let’s say my 43 courses are equivalent to 50 “courses” as they are currently offered. Those courses are by no means equivalent to a college degree, but I would not be surprised if you could get a BA in an information technology degree at a second-tier university for less effort. Coursera and edX have several price levels, ranging from $49 at the low end, all the way to $99 and $149 offerings for courses. Let’s be generous and set an average price of $89 for a verified certificate. This is about $4,500 in total — for a bunch of PDFs! To put this sum into perspective: for a comparable amount of money you can cover the cost of a high-quality and respected distance-learning degree from the University of London.

In the end, greed won. Of course you can turn this around and call me “greedy” for taking so many MOOCs. Well, here is the kicker: any non-technical “certificate” has very little value to begin with, apart from possibly indicating that you have an interest in a particular subject. Thus, their value is approximately zero. The value of an arts degree from a brand-name university comes primarily from the brand-name of the university, and to a much lesser degree from what they teach you. Further, the value of a technical education, even at a no-name institution, is primarily due to the knowledge you acquire. With a technical degree from a second-rate institution you will have a hard time getting into Wall Street or this year’s hot Internet companies, but you will find employment relatively easily, unlike people with non-technical background who have far worse career prospects. This means that a certificate of a MOOC even for marketable skills is relatively useless since the skill is more important than the certificate.

The fact that the big three MOOC providers abolished free certificates seems to clearly indicate that they were unable to differentiate free and paid-for certificates. Thus, by reducing the options of their users, they hope to increase their revenue. As I wrote before, the marketing and presentation is becoming misleading if not shady, for instance when repackaging one course as many, suggesting greater value than is delivered. The new target customers is far from the old one. No longer are autodidacts an interesting clientele. Instead, the ill-informed are the new target who may salivate at the thought of getting Yale or Harvard credential for a relatively modest price, possibly not realizing that they are going to acquire a useless product.

Retrospective: Software Engineering Summer Internship (2015) at Jeppesen Systems AB in Gothenburg

Introduction

Jeppesen is a fully owned subsidiary of Boeing, and part of their Digital Aviation business. Concretely, they provide navigational information, crew and fleet management solutions, and offer an industry-leading optimization product. The Gothenburg office started originally as Carmen Systems, which was spun off Chalmers University of Technology. Ties between Chalmers and Jeppesen are still strong. The Gothenburg office of Jeppesen employs around 350 people, of which around 300 are technical staff. Further, there are around 60 contractors in the building.

Jeppesen was not an entirely new entity to me. I had been mentored by one of their managers for about a year, though whom I met several other Jeppesen employees, including a veteran software architect with a very strong technical background, and an experienced software developer. Further, I was one of the winners of a coding competition they held this spring, and one of five students who were invited to what turned out to be an intimate recruiting event, where we were outnumbered by Jeppesen managers and employees. Several managers represented their division, the challenges they are working on, and, of course, the kind of skills they are looking for in future employees. Alas, back then they did not have any openings, but we were told that a number of full-time positions would open up in autumn, and possibly some summer internships as well. Both turned out to be the case.

The interview

I applied for a data processing project with a parallel programming component, which I will detail further below. But before I got to do any work, I had to make it through the interview. Job interviews are often cringe-worthy, particularly the “your greatest weakness”-kind. The interview experience at Jeppesen was distinctly positive, though. The hiring manager briefly came in to shake hands and exchange some niceties, but otherwise, the interview was conducted by two senior engineers. They described the project, how they work, and the technologies they use.

What I greatly appreciated was that they were looking for competence instead of buzzwords. We even talked a bit about the necessary computer science background for their project. It was helpful that I had heard of recursive descent parsing, had written a parser for a subset of C++, or implemented a compiler for a C-like language. Normally, a coding test is also part of the interview process, but I presume this was skipped due to my performance on their recent coding challenge. Still, they asked me a few ‘design’ questions, like how I would approach this or that problem, or pros and cons of concrete approaches to given problems. Thankfully, it was more about how to break down a complex task into manageable subproblems, instead of the dreaded UML and design patterns interview.

The project

Of course I signed and NDA can therefore not be too specific, so I am only going to describe the problem in general terms. Let’s say your software runs on dozens or possibly even hundreds of machines at a customer site. Each copy of the program produces partly unstructured log files, recording all kinds of things. In order to extract useful information from those log files, you have to run a parser that understands the structure of the files, and extracts relevant information, which may be processed further. To make this even more fun, let the client machines run around the clock, and update log files continually. This sounds fairly complicated already. However, keep in mind that you have more than one customer, many more than one parser, and currently you only execute one parser after another in a sequential order via a cron job once a day, for historical reasons, maybe because the programs predate the many-core CPU era.

The goal of the project I was given was to write a framework that parses all log files — think in orders of magnitudes of tens of thousands of files — in pseudo-real time, so that you can extract more useful information from the existing data. For instance, if you take a metric like ‘active instances’ once a day, you’ll learn a lot less than if you are able to update this metric every few minutes.

Concretely, the framework I developed unified the existing parsers for several Jeppesen products. Understanding and modifying existing parsers required a little bit of background in programming languages. This was pretty fun, but the most interesting aspect was trying to find ways to effectively parallelize the execution of the parsers. The hardware at our disposal was pretty decent. Thus, running a single-threaded program on a many-core CPU is a bit of a waste, to put it mildly. My approach was to avoid all shared state. Once this problem was solved, the actual parallelization was easy to achieve. The machine I was mostly working on was an Intel Xeon with 16 cores and over 100 GB RAM, which was far from being the most powerful machine I had access to. Even on that one, we easily hit our performance target.

In my last two weeks, I had plenty of time to ensure the documentation was comprehensive. At the same time, my main supervisor put the project successfully into production at two customer sites, both major European airlines. At both sites we encountered minimal issues that were easily resolved. In one case, the volume was much greater than the fairly large test data directory I had been working with, so I needed to use a more efficient data structure, and make use of memoization at one point in order to resolve a bottleneck. At the other customer site, a slightly different naming convention for some files was used, which was an even easier fix. My last update was that this product has been successfully rolled out to two more customers.

The software development process

While Jeppesen is officially committed to “Agile”, they nonetheless have a strong engineering culture, which entails that they make use of software processes not for their own sake but when there is a clear benefit. The first few days on the job, I was expected to do the daily “stand up” song and dance, and report on everything I’ve done, what I intended to do that day, and give various estimates about the next few days. Personally, I found this more annoying than helpful. After I showed a proof of concept of this product after a few days, instead of the planned two weeks, my supervisors concluded that I can apparently work well on my own, and scrapped daily meetings. Instead, we had the occasional demo session, or just casually discussed progress during company breakfast.

I did like that, after proving myself, I was given relatively free reign with regards to the development, of course while still conforming to the overall vision of the product, which I received at the beginning in the form of a succinct document. The eventual software development process was somewhat reminiscent of Iterative and incremental development.

The work environemnt

Based on my experience at a previous employer, and from various company visits, I would say that Jeppesen has a clearly above average office environment. It’s not uncommon that three or four employees share their own, reasonably spacious office. However, there are also several open-plan office areas, the kind that is claimed to foster cooperation and communication, even though they are “damaging to the workers’ attention spans, productivity, creative thinking, and satisfaction”. Well, Joe Programmer, no matter where on the world he works, sadly does not command enough status to get his own office. Thus, companies are, quite literally, squandering money by not giving people access to (genuinely) quiet working environments.

Still, thanks to artificial dividers, plants, and a reasonable amount of space, the open-space areas at Jeppesen are quite okay. I was sitting in one of the larger ones in the building, among around 15 employees, all fairly well spread-out. The main office hours are a bit busy, with infrequent distractions. However, if you come in very early or stay late, you can enjoy a quiet working environment and get a lot done. During the busier hours of the day, you may notice decreased productivity, compared to, say, intently working on something in the privacy of your home.

A few perks are offered, too. Every morning, there is free basic breakfast, which is also a great opportunity to talk to people outside of your department. Further, bowls of fruit are placed all over the building. This being Sweden, there is also a strong tradition of having ‘fika’, i.e. a short break for consuming coffee and pastries. Noteworthy is that a masseuse visits the office in regular intervals, for which you can sign up at reception, and get the cost deducted from your pay. Regular employees are even entitled to some free money (friskvård) for that purpose, or other health-related expenditures.

Working hours are quite flexible. You are expected to put in 40 hours per week. As a rank-and-file employee you have to be present during core business hours (9:00 to 15:00), but you do have some flexibility otherwise. For instance, taking the occasional long lunch break, and staying longer some other days is certainly something you can discuss with your manager, just like taking half a day off and putting in a few more hours on some other days to make up for it. Overall, they try to achieve a good work/life balance.

Summary

This was a very enjoyable internship, and a summer well-spent. The end result was that I wrote, relatively independently, a medium-sized application weighing in at thousands of lines of code, all tested and well-documented. It was a good mixture of intellectual challenge and more mundane practical aspects. In the beginning, intellectual challenges were more dominant, like the entire design of the product, or figuring out effective parallelization. Later on, the focus was much more on polishing the code base, and eventually deploying it. The latter was not quite as mentally stimulating, but on the other hand it was immensely gratifying to see the project hitting or exceeding all performance targets, as well as its successful deployment.

A graduate’s perspective on the Software Engineering and Management Bachelor’s program at the University of Gothenburg

Introduction

I graduated from the University of Gothenburg with a Bachelor’s degree in Software Engineering and Management (SEM) in June. When I applied, in 2012, there was relatively little authentic information available online. The university websites surely were informative, and the PDF flyers well-produced. On the other hand, students did not seem overly vocal online. Thus, I would like to give my personal perspective, which may help future applicants. The information below should be useful for at least the next five to seven years, considering the pace at universities. For the past few years there has been an initiative in the department to further evolve the curriculum, though. This will lead to some changes, but from what I gather the changes will be of an evolutionary nature.

The target student

I assume that you, the reader, are a non-Swede and, for whatever reason, want to move to Sweden to pursue an IT-related education. If you are flexible with regards to the location, and can afford paying tuition fees, you certainly should explore other options as well. My motivation for coming to Sweden was to live with my girlfriend. Indeed, talking to other international students, male and female alike, this seems to be a fairly common motivation.

If you don’t speak Swedish, your options with regards to Bachelor’s degrees in Sweden are rather limited. In 2012 there were very few options available, and the SEM program seemed the most promising. Proper computer science programs were, and still are, taught in Swedish. It seems the issue a lack of willingness to provide access to certain programs to foreigners. For instance, almost every course in the computer science program here in Gothenburg is taught in English. Yet, a very small number of introductory courses in that program are offered only in Swedish, which thus precludes foreigners from enrolling. The language is hardly the problem, considering that you may take courses in the SEM program that are officially taught in English, but by people who do not have a proper grasp of the language. On the other hand, some of the introductory courses in the CS program are taught by academics who speak excellent English, but for whom Swedish is only their third language.

Whatever the reason, fact of the matter is that your options with regards to English-speaking Bachelor’s programs in Sweden are limited. The SEM program is one of very few choices. Thus, the question is whether it is good enough. In my opinion, even though my view is not entirely positive, for reasons I will elaborate later on, it is a decent program that tries hard to teach relevant knowledge and skills, with the aim of turning you into a productive cog in the wheel in the IT industry. They are not turning out superstars, but given that there’s a perennial Amateur Hour in large parts of the software industry, with all their “ninjas” and “gurus” who barely grasp the basics of their craft, they don’t have to.

Prerequisites

Formally, the SEM program does not expect students to have any kind of programming experience. However, it would be rather naive to enter a program like this without having done any programming at all, since it will be a major part of your education. Quite frankly, if you have never programmed in your life, and you nonetheless consider BSc programs related to IT or CS, you should set your priorities straight. Computer science is one of if not the most democratic discipline at university, since there are no artificial barriers. All the information you would need to educate yourself is available for free online. Nowadays you can even find entire university courses online. In short, there is absolutely no excuse not to have at least basic programming knowledge. If you don’t then you may end up in the rather uncomfortable position to find out that programming is not quite as trivial as you imagined it to be.

Let me point out that the word, management, in the name of this degree program is potentially misleading. The management part in the SEM program is concerned with managing software projects, but not with general management. If you are interested in an education in business, this is the wrong degree to pursue. Sadly, this is apparently not at all self-evident. If you are “more of an ideas guy” and have wet dreams of bossing nerds around, then business school is where it’s at. Unfortunately, there is at least a handful of incoming students who come to class impeccably dressed for a few weeks, and who eventually realize that the content of the SEM program does not meet their expectations.

I don’t think you necessarily have to like or “love” programming. For most people in this industry software development is a job. Their studies were a series of hoops they had to jump through, but their craft is nothing they have any, to use a horribly overused word, “passion” for. That’s okay, though. The commoditization of software development has been going on for about two decades. If you’re a True Believer, you might even find some worthy cause in that movement. Otherwise, you are either fortunate to be employed by a company that does interesting work, or you use your brain in your spare time. No matter where you might be on this spectrum, at the very least you should have done enough programming so that you can assess whether you have some aptitude for it. It’s okay if you find it tedious — mainstream programming languages are indeed tedious to work in. However, if you happen to dislike programming and struggle with basic concepts like control flow or boolean operators, you won’t do yourself any favour by pleasing your parents who think that a career in IT is a sound choice in the early 21st century.

The curriculum

Considering that computer science tends to have the reputation of being too theoretical, one can easily make the claim that the SEM program is too practical. Indeed, the curriculum is strongly geared towards teaching skills that make you employable in the IT sector. Each semester has a particular theme. You get exposed to several mainstream languages: Java, C++, and C, as well as one particular off-beat language that is part of the curriculum because a local employer infrequently needs people with that skill: Erlang, which is used within Ericsson. If you try hard, you can avoid learning Python or JavaScript, but normally students use at least one of these in some of the projects, even though there will only be very little formal instruction, or none at all.

Considering that the SEM program does not expect students to have any kind of programming experience, you will spend the first semester on basics: Java, relational databases, but also a bit of software engineering theory where you learn about some common software development processes, and get your first dose of Agile/Scrum indoctrination. Half of the entire course load is dedicated to a group project where you build a simple CRUD application. The first semester will be the most chaotic of the program, due to large numbers of students dropping out, and others hanging on for too long. This tends to affect the group project as well. In my cohort, so many students dropped out, and others found out that they tremendously dislike each other, that several groups had to be dissolved, rearranged, joined, or split.

In the second semester, in a second course on programming, you will learn about basic algorithms and data structures, which takes 25 % of the course load. Another 25 % is spent on software engineering courses that may make your eyes glaze over, and 50 % on a relatively open ended group project where you build a “system”, which is supposed to mean that your code shall make a piece of hardware do something non-trivial. In my class, we got to play around with the educational robot NAO by Aldebaran. Among others, we managed to make it navigate a maze. One of the more ambitious recent projects consisted of building a quadcopter and making it do some things you may easily take for granted if you buy one off the shelf, for instance making it stabilize itself if you throw it off balance.

In the third semester you will be exposed to functional programming. You will have the privilege to learn Erlang and gain practical experience in building a medium-sized distributed application in it. You can also learn that putting Erlang on your LinkedIn profile has the side effect that recruiters from the UK will start contacting you. The software engineering courses on software architecture and software management will provide you with the right vocabulary for interviews at typical software development companies. Considering that most of the SEM program is spent on mainstream technologies, a semester mainly devoted to functional programming in Erlang is a welcome breath of fresh air.

Working in a more expressive language like Erlang might have changed how you view programming. Dropping down several levels of abstraction to manipulating bits in C might have the very same effect. In the fourth semester you will start with programming a microcontroller and gain intimate acquaintance with segmentation faults. The semester project is by far the most ambitious of the SEM program: you are supposed to build a self-driving miniature car. In a course on testing you will, among others, get exposed to randomised testing using QuickCheck, which might make you question why people bother with unit tests.

In the fifth semester you get exposed to some rather questionable software engineering modules, with a focus on change management. Quite frankly, I saw very little value in it. Thankfully, if you have any experience with academic writing, none of the courses should take much of your time. Part-time work isn’t so easy to find in Gothenburg, so if this is not an option for you, then taking computer science courses, or working on your technical skill set may be worth thinking about.

Lastly, this degree program culminates in a Bachelor’s thesis project. The faculty is very supportive, which means that as long as you have the necessary skills and can write a decent thesis proposal that is related to software engineering or computer science, you can work in many areas — even theoretical computer science is possible, provided you took some additional courses. Most students work in groups of two, some in groups of three, and some on their own. Further, you can do your thesis either in an academic setting, or in collaboration with the industry. The latter may be a good opportunity to find an employer, but the downside is that you will be less flexible with regards to the choice of your thesis topic.

After graduation

The goal of this program is to prepare you for a role within the software industry. While some of the graduates work as software developers, others become testers or technical writers. If technical skills aren’t really your strong suit, then you may get the chance to enter a larger company and get promoted to the position of “Agile Coach” or “Scrum Master”. Particularly if you are a member of a protected class, several career paths may open up that are only tangentially related to technology. After all, Swedes love their ‘diversity’ and political correctness.

Judging from my graduating class, people seem to find work relatively quickly. Gothenburg is not exactly a hotbed of technology, though. In my opinion, there are not so many interesting positions available locally. On the other hand, if your prime goal is to get a job in the IT industry that pays the bills and puts food on the table, then Gothenburg has plenty to offer. For instance, there are several large consulting companies. Sigma and HiQ are relatively prominent, and readily hire graduates from this program. Other large employers in the region include Ericsson and Volvo IT. The kind of work you can get at those companies may be sleep-inducing, but it presumably beats the heat and humidity that is part of flipping burgers.

If you just want to find reasonably interesting work, then the SEM degree should do. In Sweden it is not at all uncommon to find people who work in this industry without having any degree at all, and it is still possible to enter it without any piece of paper. The only difficulty is getting a foot in the door. On the other hand, if you want to expand your horizon, and possibly prepare yourself for working in particular industry sectors, then studying towards a Master’s degree may be a good idea. In that regards, some students take the easy way out and study the Software Engineering Master’s program at Gothenburg University. I’m not sure whether SEM graduates are guaranteed a place, but even if not, it seems very easy to get admitted coming from the SEM program, which is no surprise since the Master’s program builds upon some of the Bachelor’s courses. It is much more about software engineering processes and ideologies than developing technical skills, though.

It is not at all uncommon that students move into related fields. Some pursue degrees in IT Management, others go to business school. Pursuing more technical fields is also possible. A minority of graduates moves on to study computer science in various flavors at the Master’s level. One of my former class mates, for instance, is currently studying towards an MSc in Financial Systems Engineering at University College London, for instance. The vast majority of graduates seem to want to stay in Sweden. In fact, very few even move away from the Gothenburg area.

Recommendation

In my opinion, the SEM program is a good choice for people wanting to gain a decent technical skill set. There are some disadvantages, though. Personally, I think university studies should first and foremost provide a sound theoretical foundation, and not concern themselves too much with applicability. Concretely, in the case of the SEM program, I would certainly say that there is value in doing one larger group project, where you learn to collaborate, to plan your work effectively, and practice leadership skills. However, four projects are overkill. I would have much preferred seeing a curriculum that reduced group work and instead added a few more computer science courses. That being said, if you do have solid technical skills and are able to organize your work well, then the group projects will not take up too much of your time. Thus, you can take additional courses. I managed to squeeze an additional year’s worth of mathematics and computer science courses into my three years in the SEM program, for instance.

When I started, in 2012, there were very few Swedish universities that offered Bachelor’s degrees in English. This is no longer the case. These days, though, you can study technical degrees at the Bachelor’s level at Uppsala, KTH, and Lund. Depending on your interests, those may be better choices. One downside of the SEM program is that it is relatively narrowly focused on software engineering, and only provides a small core of computer science knowledge, which may limit you in the future. On the other hand, for instance, a Bachelor’s degree in Mathematics at Lund, which leaves significant room for electives, will provide you with much greater flexibility. If you think that software development is exactly what you want to do (how would you know that?), then the SEM program is a good choice. Otherwise, I would recommend a more foundational degree, like computer science, or even mathematics. The former, though, is currently not an option in Sweden if you don’t speak Swedish.

Installing Agda in OS X 10.9

I recently set up Agda on OS X 10.9, and noticed that there was a very minor difference in step 3, as compared to the description on the official page on installing Agda on OSX. The steps are as follows:

1) Install the Haskell Platform

2) Type “cabal update” in the terminal

3) Update the PATH variable in the file .bash_profile, which is to be found in your home directory. If not, create it. Editing .profile had no effect on my OS X installation. Paste this line into bash_profile:

export PATH="$HOME/Library/Haskell/bin:$PATH"

4) Type “cabal install Agda” in the terminal

5) Install Aquamacs

6) Type “agda-mode setup” in the terminal. Note that this step will fail if you didn’t add Haskell to your PATH in .bash_profile.

7) Restart Aquamacs

Now load an .agda file to ensure that the menu ‘Agda’ appears in the menu bar of Aquamacs. Afterwards, you can proceed installing the Agda standard library.