Computer Science Interests

Theoretical Computer Science

This topic appeals to my mathematical disposition. The ideas have been built around papers written, in the 1930's, by Alan Turing and Alonzo Chruch. The business of computational theory works with words, languages, automata, finite-state machines, and turing machines. The goal being to understand the input / output process, from a logical point-of-view, and the stages required in the computation.


Algorithms & Complexity

The computer follows the directions that it is given. Being able to state the steps needed to complete a computational task is important, on two fronts:

  • The steps are language independent and should give one a coherent and precise way to complete the task.
  • It allows one to communicate, to others, how to complete the task

My interest in complexity arose around cryptographic protocols and processes. Cryptography has been an area where implementing a scheme and the security of the scheme have been at odds. If one has a process for encryption, decryption, or a crack that is not computationally feasible, it essentially doesn't count. Further, just becuase the general case of a cryptographic problem is unfeasible doesn't mean that the paricular implementation is secure. The algorithms developed around the knapsack problem are a good example of this.


Electrical Engineering

I started my academic career as a computer engineering student. My interests are wide and varied, from circuits and microprocessors to electrodynamics and waveguides (this harkens back to my radar days.) As electronics get smaller and more mobile, embedded systems have held an interest as well.


Programming Languages

I have gained an appreciation for the various paradigms used in programming languages. The Object-Oriented paradigm works great to put organization into the design process. However, one can get a little carried away, to the point of being convoluted. I've recently been learning Haskell and the functional paradigm. Recursion makes my brain work in a differently, and to think about problems in a brand new way. My most recent project has been around learning concurrency and parallelism, in the context of the language Clojure.