CS373 Summer 2018: Travis Llado, Week 03

    It's been a pretty straightforward week. Project 1 was completed without incident. I didn't use Docker at all, the assignment was simple enough that I didn't need it, but for the next project I'll have Docker set up before starting anything else.

What did I do this week?

    Family stuff. I was out of town for several days.

    I completed Project 1, wherein we demonstrate the Collatz Conjecture. The most difficult part was just learning all of technologies required, as expected. Most were fairly straightforward, but I had some trouble with the makefile. There are a few details of the project arrangement that I didn't understand, such as how files are called in the CI process. We didn't build the CI system from scratch and I wasn't able to run the CI tests on my local machine, and when I changed the python file names from camelCase to snake_case, CI did not like that. I couldn't figure out what I missed, so I just changed them back. For the next project I'll build CI from scratch.

    The one interesting development was my optimization for Project 1. I started out with several ideas about pre-caching the most valuable nodes in the graph, all of which turned out to be very time consuming to implement. Then I came up with a much better idea that used recursion to calculate cycle lengths, allowing us to immediately cache the cycle length not just of the input value but of every single intermediate number between the input value and 1 without much additional computational time. Also, I've been writing code since 2001 and this is literally the first time I have ever found a problem for which recursion was genuinely useful. So that's nice.

What is in my way?

    Not much, inexperience with web development. I've written plenty of HTML, but integration of many web components will be new. The last time I built a website was around 2010 and a lot has changed since then.

What will I do next week?

    Work on Project 2, focusing on front-end development for our website.

What did I think of the talk by Miriam et. al?

    Good, about what I expected, most of it I've heard before. As a current grad student, I was happy to hear from someone who rejected the claim that a PhD is the only thing that gives life meaning. I talked to Miriam for a few minutes about entrepreneurship, which was interesting.

What is my recommendation of the week?

    This is the NASA software project that was mentioned in last week's reading, the more or less quintessential example of engineering methodology for software design and production. Every single line of code has accompanying documentation and history, all safety-critical code requires formal verification, and this has been the standard for avionics code for quite some time.

    With that in mind, for a while now I've been thinking about quality control requirements for driverless car software. Driverless cars present safety risks comparable to those from autopiloted aircraft, especially as driverless cars become more common, but there are no comprehensive requirements available today for the design or use of driverless car software. It's up to each individual actor to decide what their standards are. Also I'm wondering what such standards would even look like. Every driverless car on the road today uses machine learning and most use deep learning. The biggest problem with ML generally and deep neural networks in particular is that we can not prove anything about them. We can never guarantee their reliability. Meanwhile, we have organizations like Uber deploying software that not only lacks performance guarantees for new components but also ignores the safety engineering lessons of previous technologies, according to the NTSB preliminary report on an accident in which an Uber driverless car killed a woman crossing the road. The car saw the woman several seconds before the collision and recognized that an emergency braking maneuver was required, but did not perform the braking maneuver and didn't even alert the driver, who was looking down at their computer.

    I'm incredibly excited about driverless cars, but I'm wary of their potential safety problems. Software engineers tend to be smart people and agile methods and code-test-repeat philosophy are terrific for many problems, but I don't think that driverless cars are one of those problems and clearly some of the active players today do not understand that. This is an area where Silicon Valley should take some tips from NASA.