Tim Nelson Has Been Promoted To Assistant Professor (Research)


    An unexamined life may or may not be worth living, but it's clear that Tim Nelson, who has just been promoted to Brown CS Assistant Professor (Research), isn't leading one. In an hour-long interview, his reflections on our field repeatedly evoke the challenges that almost all students face in their early days of CS. His conversation finds links and commonalities and equidistant points: between math and computer science, between formal methods and programmers like the one he once was, and especially between Tim and his students. And it reveals a love of helping people escape fixed mindsets, perhaps through a process of discovery similar to his own.

    Asked about his earliest interest in computers, Tim starts with what he sees as one of the core challenges of the field. "One of our problems," he says, "is that some people who study computer science receive more support than others. My parents encouraged me and made a lot of sacrifices, and when I was young, I never considered that other people wouldn't have the same. Lacking that reinforcement from family and friends –or having it and being overconfident, without awareness of how it affects others– can cause talented students to leave any field."

    Partially because of that support, which kept him motivated even after failing a first-year programming class, Tim graduated from community college (Diablo Valley College in Pleasant Hill, California) at an age when most kids were finishing high school. After a move to Massachusetts at age 18, he started looking for a software job. 

    He found one at a company that made fiduciary tax software for estates and trusts. It was a grind, he says, an environment without much testing infrastructure where a build would be finished only hours before it needed to be ready, then frantically put into production: "You don't need a computer science degree to program, it's true, but my lack of fundamentals hurt me. I was just hacking desperately at that point, trying to stay afloat. For example, I had to write a parser, but had never been taught to build one properly, and so it took me ages and ended up buggy. I'm still recovering from some of the toxic aspects of programmer culture. But it taught me a real respect for testing, validation, and verification."

    Eventually laid off, Tim describes the year of unemployment that followed as one of the best things that ever happened to him, providing the opportunity to complete a Bachelor's degree in computer science at Worcester State University. Inspired by hearing Brown CS Professor Andy van Dam speak at a conference, Tim applied to Brown, but was rejected. ("I wasn't prepared," he explains.) He chose Worcester Polytechnic Institute instead, where he worked with Daniel J. Dougherty and Kathi Fisler, now Professor (Research) and Director of the Brown CS Undergraduate Program. After learning of Tim's work from Kathi, Brown CS Professor Shriram Krishnamurthi took notice, acting as an informal advisor. Eventually, the association led to postdoctoral work at Brown.

    "Research at Brown," Tim notes, "puts students in what's often called a 'high-octane' environment. I prefer to instead say 'high-energy'. Collaboration is such an important part of research, and I love that I get to work with and learn from wonderful, smart people who add energy and inspiration to the process every day. The positive energy and collegiality are the real benefits of the environment here."

    Tim's research is in an area called formal methods, which uses mathematical techniques to reason about systems. "Formal logic isn't just a philosophical topic. It has real applications in computing, for real-world professionals," Tim says. "For instance, some cloud-services providers have been using logic to help customers verify security goals for years now. And these customers aren't logicians: they're working programmers and sysadmins! It's an exciting time to be in the field and see academic ideas find industrial application." 

    One of the most important things Shriram offered, Tim says, was the chance to be mentored while co-teaching CSCI 1950-Y Logic for Systems: "I was very lucky to land a postdoc at a place where I wasn't told to do research and shut up. Shriram built this entire opportunity for me, sitting in class with his laptop and taking notes while I taught. Taking the time to mentor a postdoc in teaching – who does that? I owe him a great deal."  

    "In designing the course," says Tim, "we work really hard to find a balance of accessibility and rigor, and we change a third or more of the class every year. My goal is to teach every student enough so that if they end up in a job that's FM-adjacent, they'll think, 'Oh, hey, I can do this!'"

    It seems to be working. Brown CS alum Louisa Conwill writes, "Learning computer science and how to program taught me a completely new way of thinking and reasoning. However, Logic for Systems built on, challenged, and stretched my reasoning skills by taking them a step farther – instead of learning how to solve computer science problems and build computer systems, in Logic for Systems I learned how to analyze those very problems and systems." Despite the fact that it doesn't focus on a trendy research area or feature an instructor who's a legend in their field, it's one of the largest upper-level undergraduate courses at Brown CS. Tim says that he'll happily teach it as long as he's allowed to.

    What's next in the world of formal methods? "There's a motto in programming: 'move fast and break things'. But of course we can't leave them broken! What this really means that we should fix things quickly," Tim argues. "Formal methods give chaotic innovators a safety net." He returns to something that he's mentioned earlier, the need to change perspective: "Formal methods lead programmers to fix bugs, often before the bugs make it into code. Formalism, assurance, and proof don't have to be at odds with mainstream hacker culture."

    In the years ahead, Tim is eager to work simultaneously on teaching and research, enjoying how they feed from and give ideas to each other. He's also looking forward to teaching CSCI 00320 Software Engineering and continuing to develop his skills as an advisor, both in terms of Brown's curriculum but also in research as well. Tim has a history of involving undergraduates in his projects, and he cites several that went on to be published: work on programing languages, firewall verification, network monitoring, and software engineering. "Working with Brown students is a real blessing," he says. "It's not just about writing code I tell them to write – the best students engage with the research itself."

    And what would he say to those young computer scientists that he'll be advising? The question brings Tim full circle, and he thinks for a long time. "It's about changing mindsets again. CS has a unique role in our changing economy, and we should be aware of how our field impacts jobs – both positively and negatively. But more importantly, as the nature of work changes, where do we derive meaning?I believe in the ennobling power of work, not in the clichéd sense of being forced to pull ourselves up by our bootstraps, but as a way to have an impact. How will we help people see that service is a calling? For me, teaching is how I have an influence and how I make things better."

    For more information, click the link that follows to contact Brown CS Communication Outreach Specialist Jesse C. Polhemus.