Andrew Neitsch

Contact S/MIME PGP
Call or text +1 (403) 472-1011,
or +1 (646) 450-0301 from the US,
or andrew.neitsch on skype.
I live in Calgary, Canada.

LinkedIn GitHub

Curriculum Vitae

Senior Infrastructure Developer, Cisco Systems Canada, April 2014–present.

  • I’m very happy working here. Recruiters: don’t waste your time.

Production Specialist, Calgary-based equity administration service provider, September 2013–February 2014.

  • Production support for a web-based equity management and trading platform. Addressed production problems by quickly developing mitigations, for example, a database trigger that would stop the system from selling double the correct number of shares.
  • Many production problems were triggered by Java pausing the system for garbage collection, so I changed a two-digit parameter to make pauses go from happening multiple times per day to happening every week or two.
  • Technical lead on deploying Zing, a version of Java with no garbage collection pauses. Set up, tested, and documented Zing and its monitoring tools, and isolated JIT compiler bugs so the vendor could fix them.
  • Coded bug fixes and performance fixes including taking a key report that was timing out after two hours and making it finish in 90 seconds. Since the fix was to rewrite the core reflection-based clone() method, this also improved overall application performance.

Master of Science in Computing Science, University of Alberta, September 2008–September 2012.

  • Thesis: “Build System Issues in Multilanguage Software,” supervised by Kenny Wong.
  • I published the major results of my thesis at the top-tier peer-reviewed 28th IEEE International Conference on Software Maintenance.
  • GPA 3.7/4.0
  • Teaching assistant for 4th-year compilers and 3rd-year programming language courses, September 2008–March 2009.
  • Visiting student at the University of Waterloo, September 2010–May 2011. Attended courses in software architecture and software evolution.
  • Instructional assistant for CS 116: Introduction to Computer Science II, University of Waterloo, January–April 2011.

Statistician, Data Collective, June 2011–November 2011.

  • Data Collective was a nonprofit startup founded by David Joerg with the goal of making it easy to find and share reputable, verifiable data, in order to promote the use of data in public discourse.
  • I invented sparklinks, which are special Unicode URLs that look like the charts they point to, for example,▂▂▃▃▅▆▇▇, which was once a graph with roughly the same shape as its own URL.
  • We built an online chart-making tool that let anyone paste data into a text field and get back an interactive embeddable chart. Ultimately we concluded that there was a limited market for this: people who have data usually already have tools to work with it, and people who don’t already have data don’t have much use for online charting tools.

Sabbatical, January–September 2008.

  • Read over 130 books about programming, philosophy, art, history, psychology, and other topics.

Statistical Data Engineer, Two Sigma Investments, New York City, April 2006–December 2007

  • Two Sigma is a quantitative hedge fund: mathematical models predict stock markets worldwide and computers trade automatically based on those predictions.
  • I integrated new real-time data feeds and historical data sets into the Java-based modeling and trading systems, enabling researchers to develop better models.
  • Maintained highly-latency-sensitive C++ source code for real-time feeds to keep up with increasing data volumes, market changes, and updated vendor interfaces.
  • Provided 24-hour on-call support to keep trading going through market crashes and earthquakes.
  • Improved build system by integrating documentation generation into builds, and automating parts of the release process.

ACM International Collegiate Programming Contest, Dec 2003–Apr 2006

  • Won bronze medal for placing 11th in the world in 2006. Our team also placed 29th in the world in 2005.
  • The ACM ICPC is the premier undergraduate programming contest. More than 100,000 three-person teams enter the contest every year.
  • Solved more than 400 practice problems at the problem set archive. An example of one such problem, 534 Frogger: given the locations of a bunch of stones in a pond, write a program that will compute the minimum distance a frog must be able to jump to travel from the first stone to the last stone.

Bachelor of Science with Honors in Mathematics with First Class Honors, University of Alberta, September 2002–December 2005.

  • GPA 3.7/4.0.
  • Took 26 math courses.
  • Completed 4-year degree in 3.5 years, and graduated while still a teenager.

NSERC Undergraduate Student Research Award in Mathematics, University of Alberta, May–August 2004 and May–August 2005.

  • Wrote Mathematica code to compute members of a certain class of matrices and display them in symbolic form.
  • This allowed colleagues to tackle certain problems in dynamical systems that had been avoided because the symbolic expressions were too large to work out by hand.



I recommend:

  • A good textbook that’s used to teach chefs at top culinary schools.
  • A fast and accurate thermometer. It’s really hard not to undercook or overcook food without one, but with one, it’s easy to cook food exactly. Try it: get a thermometer, and take any old recipe for something like meatloaf that’s usually way overcooked. Pull it out of the oven the instant the lowest temperature reading hits 70ºC. It’ll be delicate, tender, and delicious.
  • A scale. Measurements like “one medium onion” are imprecise because onions come in all sorts of sizes. There will usually be too much or too little onion, and without good measurements of how much onion went in, it’s difficult to correctly adjust the recipe for next time. A scale fixes that. 250 grams of onion is 250 grams of onion.
  • You do need a sharp chef’s knife, but you don’t need to spend much money on it. More expensive knives have harder steel, so they’ll stay sharp longer, but a great $30 knife will stay just as sharp if you learn how to sharpen it yourself. For other aspects of caring for your knife, check out this cheesy video.

Salad of Belgian Endive, Scallops, and Walnuts

Thinly slice radicchio and Belgian endive, saving some outer leaves from the endive for garnish. Julienne some carrots, chop some walnuts, and mince some chives. Season everything with a bit of salt and white pepper, then toss in a vinaigrette of balsamic vinegar and walnut oil. Season some scallops with salt and white pepper, sear them in olive oil, plate, and enjoy.

Professional Cooking for Canadian Chefs, 6th Ed., p. 714

Fricassee de Volaille Vallée d'Auge, aka Apple Chicken

Cut a chicken into eight pieces, salt and pepper the pieces, and lightly brown them in butter. Add Calvados apple brandy, brace yourself, then ignite. Add some shallots and cook until soft. Simmer gently in cider. Add cream, and mushrooms sautéed in butter. Reduce the sauce. Serve with apples browned in butter.

Professional Cooking for Canadian Chefs, 5th Ed., p. 349

Grilled Portobello and Boursin Sandwiches

Whip together oil, vinegar, and mustard, and brush a portobello mushroom with it. Broil the mushroom stem-down until half-cooked. Turn it over and fill it with boursin cheese, then finish broiling. Place on a bun, covered with arugula tossed in more of the vinaigrette.

Professional Cooking for Canadian Chefs, 6th Ed., p. 751

Chicken Stir Fry with Walnuts

This one is fast to make. Cut peppers and scallions into strips. Sauté them rapidly for only a minute or two, then take them out of the pan. Cut chicken breasts into small cubes and sauté them. Add chopped walnuts, ginger, and cayenne, then a mixture of chicken stock, soy sauce, and cornstarch. When the chicken is heated through, add the vegetables back and serve on rice.

Professional Cooking for Canadian Chefs, 5th Ed., p. 336

Huevos Rancheros

Cook down onions, garlic, tomatoes, and hot peppers with a bit of salt, sugar, and pepper. Add cilantro. Place on fried tortillas with fried eggs and avocado. Serve with hot chocolate.

I’m not sure where the recipe comes from.

Shirred Eggs

One of the most delicious ways to eat eggs. Take some yummy things that you find in your fridge, such as tomatoes, ham, and mushrooms. Throw them in a baking dish with some whole eggs and cheese, and bake for about half an hour.

Professional Cooking for Canadian Chefs, 6th Ed., p. 793

Fettuccine with Chiles and Grilled Chicken

Marinate chicken breasts in chili powder and olive oil. Roast lots of hot peppers and sauté them with tomatoes and some garlic. Grill the chicken, mix together the pepper-tomato mixture with the pasta and cheese, and serve with avocado and a sauce of lime juice mixed with sour cream.

Professional Cooking for Canadian Chefs, 5th Ed., p. 526

Fruit Salad

Gather fresh fruits and berries that go well together. Cut them up so that all pieces are roughly the same size. Add some dried cherries if you have any. If you have two big bowls that are the same size, put the fruit in one bowl, put the other bowl upside down on top, and then shake the fruit around in the globe you’ve created. Finally, pour on some amaretto almond liqueur.


Here are some of my top picks from among all the books I’ve read over the years.

A Biographical History of Philosophy
George Henry Lewes, 1846

Philosophy has wasted the finest minds of a thousand generations. The appeal of metaphysics is undeniable: let’s find out the underlying nature of things as they really are. However, as long as we’re dealing with blatant assertions about things that are by definition unobservable, with no objective way to decide between them, it’s impossible to make any progress from one generation to the next.

This book traces out in appalling detail the fruitless efforts of philosophers over the millennia. One philosopher says everything is made of fire. The next generation of philosophers says—no, everything is actually made of water. Then the students of the water-philosophers rebel and go back to arguing that everything is made of fire, and with nothing but vague definitions and opinions to argue about, things are right back where they started.

The only reason that all philosophy wasn’t a complete waste of time is because it did eventually lead to empirical science—but now that we have that, please, let’s not waste any more lives.

The Brain that Changes Itself
Norman Doidge, 2007

It’s widely believed that the brain stops growing when people reach adulthood, and that any trauma to it is irreversible. But scientists have recently uncovered a mass of evidence to show that that’s simply not true.

The book opens with a woman who lost her physical sense of balance after an injury—and who is trained to walk again by a computer. Each chapter interviews scientists who are actively doing things that conventional wisdom says is impossible, from restoring paralyzed stroke victims to full use of all their limbs, to training people with severe dyslexia to read analog clocks, to amputating phantom limbs.

The unifying theory behind all this work is easy-to-understand, and the techniques that are being used are easy to reuse in your own pursuits.

The Second World War
Winston Churchill, 1953

You think you have problems? They’re nothing compared to the problems that Britain and western civilization faced in 1940.

Winston Churchill was appointed Prime Minister of Britain the day Hitler invaded France. The Nazis had already conquered or allied themselves with half of Europe, and France would only last a few weeks. Britain was next on Hitler’s agenda, but it was basically unarmed. It had been conscripting for one year, but soldiers needed two years of training, and most of the army’s equipment had been sent to help France and was lost in a hurried retreat.

What could the British do? Would they make an agreement with Hitler to try to save themselves? No! “Without victory, there is no survival,” Churchill proclaimed:

“Even though large tracts of Europe and many old and famous States have fallen or may fall into the grip of the Gestapo and all the odious apparatus of Nazi rule, we shall not flag or fail. We shall go on to the end, we shall fight in France, we shall fight on the seas and oceans, we shall fight with growing confidence and growing strength in the air, we shall defend our Island, whatever the cost may be, we shall fight on the beaches, we shall fight on the landing grounds, we shall fight in the fields and in the streets, we shall fight in the hills; we shall never surrender.”

This was not empty rhetoric. Churchill had a sound strategy for winning: he believed that the Nazis were too terrible to be accepted for long by the people of the world, and if the British resolved themselves to defend their island to the last man, the United States would eventually enter the war bringing overwhelming force. That was the strategy and this is the story of how he carried it out.

For lessons about strategy and leadership, for gripping firsthand stories of history and extreme heroism, for seeing and understanding the process by which the largest project in the history of the world was managed to a successful conclusion—this is a fascinating and instructive work.

A Consultation with the Back Doctor
Hamilton Hall, 2004

Back pain is horrible, but if you suffer from it, this book has a lot of practical advice to get you through it. It describes what the different major kinds of back pain are, what causes them, and why surgery or medication is only very rarely a useful option. While in most cases you will still have some pain that you will have to learn to live with, this book will help you with that, and gives exercises for each kind of back pain to reduce the pain and keep it down.

Every now and then I get back pain that makes it nearly impossible to get out of bed, walk, or sit—and this book gets me back to normal.

Any recent psychology textbook

There have many amazing discoveries in psychology in the past few decades—discoveries about how people learn and get good at things, what intuition is and when to trust it, and the whole exploding field of neuroscience. Any recent textbook will explain it all clearly and understandably, and if you like people and self-improvement it will be lots of fun to read about. The one by Myers is good, but anything like it should be fine too.

How to Become a Straight-A Student
Cal Newport, 2007

This is an excellent how-to book about time management and writing. Instead of giving you vague principles, it gives concrete instructions that you can easily follow to get started. It made finishing my master’s degree a whole lot easier.

Most books that claim to be about time management really aren’t. For example, the extremely popular Getting Things Done by David Allen has a lot of useful stuff about staying organized, but what does it say about time management? On the first page of Chapter 9: “How do you decide what to do at any given point? As I’ve said, my simple answer is, trust your heart.” If you had enough practice at time management that relying on your intuition was optimal, then you probably wouldn’t be reading a self-help book to try to learn it.

Straight-A, by contrast, tells you exactly what to do, when to do it, and why to do it that way, without being rigid or overwhelming. Following this book’s procedures, you can get started right away and build up your skills so that someday you will be able to rely on your intuition.

More books

The best list of best books I’ve come across is the one titled “Book Value” by Jim Collins.

Stack Overflow

Stack Overflow is an extremely useful site where people answer programming questions. I use it all the time to search for the answers to problems I run into while programming. Sometimes I answer questions there too, in order to earn imaginary “points.”

Here are some of the more interesting questions that I’ve answered there:

10683941: Clearing memory securely and reallocations

Q: I have a password in memory, and I’m doing all the right stuff to zero it from memory. Yet if I dump core on the program, the password still shows up in the core dump! What’s going on?

A: When you memcpy a big-enough string, the SSE registers are used as a buffer. Those registers contain a copy of your password, and are written to disk when you dump core.

14574109: SimpleDateFormat Exception on setting lenient to false

Q: I’m trying to parse the date 2012-03-11 2:46 a.m. in Java, with a SimpleDateFormat on which I’ve set the ‘lenient’ option to false. Why do I keep getting an exception?

A: That day was daylight savings time change day, so times between 2:00 a.m. and 3:00 a.m. don’t actually exist. Huh. I’ll have to remember to setLenient(false) on all SimpleDateFormat objects I create in the future.

14514997: Reopen a file descriptor with another access?

Q: On Linux, a file has been deleted from disk, but there is still one process that has the file open for writing. Is there any way to get the file back?

A: Sure! Reopen the deleted file via /proc/$pid/fd/$n.

1259084: What encoding/code page is cmd.exe using

Q: The Windows console is terrible at dealing with Unicode. Sometimes it seems capable of printing Unicode properly, but most of the time I get gibberish. How can I make it work?

A: If you open cmd.exe in a debugger—Microsoft’s symbol servers are really handy for this—it turns out that cmd.exe has special code to inspect the start of the file it’s about to type out. If it finds a UTF-16LE BOM, it uses WriteConsoleW to write Unicode to the console, regardless of the current codepage. You’ll have to transcode to UTF-16LE and call WriteConsoleW in your own programs too.


In grad school, I studied software engineering to help become better at writing software.

I focused on build systems because I find them to be a big pain, but a big pain that’s absolutely worth it if done right. Usually you either spend too much time figuring out the build system at the start when there’s more important stuff to work on, or you end up wasting more time later on and getting frustrated with a poor build system that’s slow and occasionally fails to incorporate your latest changes. But when you have a great build system that instantly reflects all your source code changes in a running system, and gathers warnings and errors in an easy-to-remedy way—programming is just so much easier and more fun.

Master’s Thesis

Building programs that use multiple programming languages is more complicated than the normal single-language case. By studying multilanguage build systems, what can we learn about build systems in general?

By comparing the build systems of a sample of different multilanguage software packages, I found a set of common techniques for causing and solving build problems, and a possible explanation for why previous quantitative work has found that centralizing responsibility for the build system reduces overall build maintenance.

Because build systems are seen as secondary and relatively unimportant, people don’t usually focus on them. They reuse design decisions and abstractions from the application domain in the build system. The build system for Python is Pythonic and build systems for CORBA-based software use CORBA patterns. This phenomenon is beneficial if the application domain is systems-type software with the emphasis on correctness that build systems require, but if the application domain is something else, this phenomenon is likely to result in lower-quality builds. You can counter this by having specific build experts who work primarily on the build system, rather than sharing responsibility for the build system among all developers.


Build diagram of one of the case studies, p. 62


Andrew Neitsch. Build System Issues in Multilanguage Software, Master’s thesis, University of Alberta, 2012.

ICSM paper

The major results of my master’s thesis were published at the 28th IEEE International Conference on Software Maintenance in 2012.


Summary slide from presentation


Building software from source is often viewed as a “solved problem” by software engineers, as there are many mature, well-known tools and techniques. However, anecdotal evidence suggests that these tools often do not effectively address the complexities of building multilanguage software. To investigate this apparent problem, we have performed a qualitative study on a set of five multilanguage open source software packages. Surprisingly, we found build system problems that prevented us from building many of these packages out-of-the-box.

Our key finding is that there are commonalities among build problems that can be systematically addressed. In this paper, we describe the results of this exploratory study, identify a set of common build patterns and anti-patterns, and outline research directions for improving the build process. One such finding is that multilanguage packages avoid certain build problems by supporting compilation-free extension. As well, we find evidence that concerns from the application and implementation domains may “leak” into the build model, with both positive and negative effects on the resulting build systems.


Andrew Neitsch, Kenny Wong, and Michael W. Godfrey. “Build System Issues in Multilanguage Software”, Proceedings of the 2012 28th IEEE International Conference on Software Maintenance (ICSM 2012), Riva del Garda, Trento, Italy, September 2012.


I don’t spend much time on this anymore, but here are some photos I’ve taken over the years.

Harvest Time, 2015
Lake Louise, 2013
New York rain, 2006
Dew, 2008
Untitled, 2010
View to the southwest, 2010
Observation deck, 2009
Wheat, 2012
Purple texture, 2011
Thruway 3, 2011
Empire rainbow, 2010
Brutalism, 2010
The morning after, 2010
An airplane flew between my telescope and the moon during the eclipse, 2008
Thank you for visiting. Copyright © 2002–2016 Andrew Neitsch. All rights reserved.