Category Archives: Learning

Coursera Course Review: Software Security

I just finished taking the course Software Security from the University of Maryland via Coursera. It was a relatively easy course (at least if you know C) that gave an overview of the following areas: buffer overflows and other memory attacks, web security (including SQL injection, CSRF and XSS), secure design, static analysis, symbolic execution, fuzzing and penetration testing. The instructor, professor Michael Hicks, was one of the more pedagogical lecturers I have listened to, and the whole course was quite enjoyable. Continue reading

Lessons Learned in Software Development

Here is my list of heuristics and rules of thumb for software development that I have found useful over the years:

Programming bookshelf



1. Start small, then extend. Whether creating a new system, or adding a feature to an existing system, I always start by making a very simple version with almost none of the required functionality. Then I extend the solution step by step, until it does what it is supposed to. I have never been able to plan everything out in detail from the beginning. Instead, I learn as I go along, and this newly discovered information gets used in the solution.

I like this quote from John Gall:  “A complex system that works is invariably found to have evolved from a simple system that worked.”

Continue reading

Coursera Course Review: Computational Investing Part 1

I recently finished the Coursera course Computational Investing Part 1 by professor Tucker Balch at Georgia Tech. The focus of the course is on portfolio analysis and selection. Almost all the analysis uses the daily closing prices of stocks as the starting point. The concepts are not particularly difficult, and the programming exercises give you good hands-on experience with the different analysis techniques. The assignments are in Python using several tool kits for time series analysis (NumPy, Pandas and the QuantSoftware ToolKit). Continue reading

Programmer Knowledge

What is the half-life of programmer knowledge? It is quite common with claims that the half-life is something like 5 years. In other words, half of what you know about programming will be obsolete in 5 years. A similar sentiment is: “Programming sucks, because what you knew a few years ago is useless now”.

At first, this seems plausible. After all, there is a steady stream of new programming languages and technologies coming out. However, I think it is wrong. Programming knowledge is much more long-lived than some people realize. Continue reading

Switching from Java to Python – First Impressions

Three months ago I changed jobs, and in the process switched from Java to Python. Here are the differences that have stood out for me since making the switch. Continue reading

Coursera course review: Algorithms: Design and Analysis, Part 2

I recently finished the Coursera course Algorithms: Design and Analysis, Part 2 by Professor Tim Roughgarden of Stanford. I’ve already reviewed part 1, and here are my thoughts on the second part.

The main theme of part 1 was the divide and conquer paradigm. In the second part the main themes were greedy algorithms, dynamic programming and NP-Complete problems. The lectures were excellent, with clear and easy to follow algorithm development and proofs. At six weeks, it was one week longer than part 1, and I found it quite a bit harder than part 1. Here’s more on each part. Continue reading

Working as a Software Developer

I recently gave a presentation on what it is like to work as a software developer to first-year engineering students at KTH taking an introductory programming course. I wanted to give my view on the main differences between professional software development and programming for a university course.

First I talked about challenges with large-scale software development. Then I listed several development practices used to cope with these challenges. I went on to present ways to become a better programmer, and ended with some fun facts from work.

Continue reading