ESP Biography



DAN NOE, Kernel/Low Level Software Engineer




Major: Computer Science

College/Employer: Speedy Packets, Inc.

Year of Graduation: Not available.

Picture of Dan Noe

Brief Biographical Sketch:

I've been interested in computers for about as long as anyone my age could. I began using Linux in middle school. I've been programming in C since high school. Lately I've written multi-threaded IO driver software in C for the Windows and Linux operating systems at a storage technology startup and designed networking software in C++ for another startup. In the past I have worked on the Netezza analytic database for IBM and at Lime Brokerage, a low latency wall street brokerage firm.

I have a Bachelor's Degree in Computer Science from University of New Hampshire (graduated in 2008). Now I live in Littleton, MA. I enjoy tinkering with electronics and computers, photography, aviation, and juggle a myriad of other complex hobbies. I am a private pilot and In my spare time I fly airplanes and own a Cessna Cardinal RG that is based in Nashua, NH.

I think the big picture view of software - from the hardware on up, so to speak - is the most interesting and important view to take. Without understanding what is going on "under the hood" you aren't really understanding but simply trusting the layers below.



Past Classes

  (Look at the class archive for more.)


Concurrency and Multithreaded Programming in Splash 2015 (Nov. 21 - 22, 2015)
I started teaching this course in 2006 when dual core processors were a newfangled thing. Now even cell phones have multicore processors! Programming to take advantage of today’s multicore processors is tricky and filled with pitfalls. We’ll talk about Amdahl’s law and how it defines the the performance increases from adding processors. I’ll discuss how programming language locks are actually implemented by operating systems and language designers. And I’ll talk about different ways computer scientists like to abstract concurrency to make it easier to design complex systems for processing large amounts of data in parallel.


Concurrency and Multithreaded Programming in Splash 2014 (Nov. 22 - 23, 2014)
I started teaching this course in 2006 when dual core processors were a newfangled thing. Now even cell phones have multicore processors! Programming to take advantage of today’s multicore processors is tricky and filled with pitfalls. We’ll talk about Amdahl’s law and how it defines the the performance increases from adding processors. I’ll discuss how programming language locks are actually implemented by operating systems and language designers. And I’ll talk about different ways computer scientists like to abstract concurrency to make it easier to design complex systems for processing large amounts of data in parallel.


Real Software Engineering in Splash 2014 (Nov. 22 - 23, 2014)
What is it really like to be a professional software engineer? Thinking about it as a career/major but you're not sure? I've been a full time software engineer since 2008 in both big and small companies. In this class we'll chat informally, answer questions, etc, about exactly what to expect if you go into a career in software engineering. We'll talk about some of the different types of software from web and mobile app development to operating systems and languages. Finally, we'll discuss some of the differences between "Computer Science" and "Software Engineering" and the parts of the software development process that universities often don't teach.


Concurrency and Multithreaded Programming in Splash! 2013 (Nov. 23 - 24, 2013)
I started teaching this course in 2006 when dual core processors were a newfangled thing. Now even cell phones have multicore processors! Programming to take advantage of today’s multicore processors is tricky and filled with pitfalls. We’ll talk about Amdahl’s law and how it benefits the performance increases from adding processors. I’ll discuss how programming language locks are actually implemented under the scenes. And I’ll talk about different ways computer scientists like to abstract concurrency to make it easier to program.


How Operating Systems Work in Splash! 2012 (Nov. 17 - 18, 2012)
If you've used a computer you've used an operating system. Whether Microsoft Windows, Linux, MacOS, or a mobile operating system the same basic concepts are the same. We'll talk about how user programs run cooperatively with the OS Kernel code, how the kernel schedules tasks, and memory management. If we have time we'll talk about file systems and a bit of networking too.


Concurrency and multithreaded programming in Splash! 2012 (Nov. 17 - 18, 2012)
I started teaching this course in 2006 when dual core processors were a newfangled thing. Now even cell phones have multicore processors! Programming to take advantage of today's multicore processors is tricky and filled with pitfalls. We'll talk about Amdahl's law and how it benefits the performance increases from adding processors. I'll discuss how programming language locks are actually implemented under the scenes. And I'll talk about different ways computer scientists like to abstract concurrency to make it easier to program.


How to land an airplane! in Splash! 2012 (Nov. 17 - 18, 2012)
The captain and the copilot both had the fish. The announcement comes over the PA, "Is anyone on board a pilot?" You jump forward, "I'm not, but I did take a Splash Class once!" Well maybe that is a slight stretch! We'll talk about the theory aerodynamics, stalls, flight instruments and controls, and do some simple demonstrations with a big fan and models. At the end of the class I'll go through the basic steps of landing any aircraft from small to airliner.


Reaching down to the Operating System Kernel in Splash! 2010 (Nov. 20 - 21, 2010)
What does a computer operating system kernel (core) do? In the most basic sense, it is a special program that manages shared resources by virtualizing them. In a typical computer, the operating system provides access to resources like the CPU, memory, hard disk and other hardware devices. Each task running on the operating system runs as if it is in its own virtual container, as if it has its own CPU and memory. Programs running in unprivileged mode are prevented from interfering with others. How does the OS kernel accomplish this? How does the hardware support the OS kernel? We’ll discuss how, using generic examples. We’ll also look at some easy, generic examples of how files are stored on disk and discuss some of the differences between modern operating systems like Linux, Windows, and Mac OS X.


Parallel Programming from the Hardware Up in Splash! 2010 (Nov. 20 - 21, 2010)
We now live in a world of multithreaded programs, dual and quad core CPUs, and increasingly parallel programming. Moore’s law no longer scales “up” it scales “out.” Understanding concurrency and parallel programming will be crucial to the next generation of software engineers. In this course I will discuss the reasons why parallelism is the direction of computing performance, how computer software and operation systems handle simultaneously shared resources, and how computer hardware is designed to facilitate synchronization (including “memory barriers” and cache synchronization) and resource sharing.


Parallel Programming from the Hardware Up in Splash! 2009 (Nov. 21 - 22, 2009)
We now live in a world of multithreaded programs, dual and quad core CPUs, and increasingly parallel programming. Moore's law no longer scales "up" it scales "out." Understanding concurrency and parallel programming will be crucial to the next generation of software engineers. In this course I will discuss the reasons why parallelism is the direction of computing performance, how computer software and operation systems handle simultaneously shared resources, and how computer hardware is designed to facilitate synchronization (including "memory barriers" and cache synchronization) and resource sharing.


Exploring the Operating System Kernel in Splash! 2009 (Nov. 21 - 22, 2009)
What does a computer operating system kernel (core) do? In the most basic sense, it is a special program that manages shared resources by virtualizing them. In a a typical computer, the operating system provides access to resources like the CPU, memory, hard disk and other hardware devices. Each task running on the operating system runs as if it is in its own virtual container, as if it has its own CPU and memory. Programs running in unprivileged mode are prevented from interfering with others. How does the OS kernel accomplish this? How does the hardware support the OS kernel? We'll discuss how, using generic examples. We'll also look at some easy, generic examples of how files are stored on disk and discuss some of the differences between modern operating systems like Linux, Windows, and Mac OS X.


Concurrency and Parallel Programming in SPLASH (2007)
While computers have grown faster for some time, current hardware developments are in the area of simultaneous processing, not single ...


Concurrency and Parallel Progamming in SPLASH (2006)
While computers have grown faster for some time, current hardware developments are in the area of simultaneous processing, not single ...