What technical recruiters and managers don’t know about physics students

A hint of an undercurrent

Undercurrent: an underlying feeling or influence, especially one that is contrary to the prevailing atmosphere and is not expressed openly.

When I see job listings in software engineering, there are three frequently listed areas of study: computer science, electrical engineering, and mathematics.

That computer science and electrical engineering are on the shortlist is not surprising. The core curriculums involve a substantial programming component and promote an understanding of computer architecture.

The odd one out is mathematics. It is strange because the core curriculum is not particularly relevant for writing software. It’s easy to graduate with a degree in mathematics without ever having written a computer program. If fluency in mathematics is a qualification for software engineering, it has to be something other than exposure to software engineering concepts.

Continue reading “What technical recruiters and managers don’t know about physics students”

Top down and bottom up dynamic programming simplified

Pre-requisites: A conceptual understanding of what recursion is, as well as other basic concepts in algorithms like: asymptotic notation, time complexity, and graph traversal.

Dynamic programming is an optimization of recursive solutions by using a cache. If you have a recursive solution (e.g. Fibonacci sequence), then we call it dynamic programming if we make use of a cache to optimize performance. Dynamic programming is a trade-off where we use extra memory to reduce the time complexity by more than a constant factor. For traditional dynamic programming problems, we are forced into this choice by an exponential recursive solution with unacceptable performance. DP is probably fascinating because with a relatively small optimization, exponential recursive solutions are transformed into linear solutions.

Continue reading “Top down and bottom up dynamic programming simplified”