Experience and Expertise
Expertise isn’t just about
knowing different computer languages and
frameworks and therefore being able to create software that will reliably
serve your needs. It is crucial to have had relevant and meaningful
experiences in previous projects, and to have learned valuable lessons
from customers and colleagues during those experiences.
As an employee, open source contributor, and consultant, I have served a
customers, from individual users of open source
projects to multinational corporations, in engagements that ranged from
providing simple advice to solving production problems. In addition to
learning many lessons unique to software reliability, I have taken to
heart the traits that shape beneficial human interaction in all contexts:
honesty, openness, and humility.
Here are some of the more important roles I have held as an employee or contributor to open source projects:
- Apache HTTP Server Project, Apache Portable
Committer, Project Management Committee member, ASF member, V.P. for Apache Portable Runtime
- Oracle HTTP Server
- Sun GlassFish Web Stack
Different roles, including Engineering Lead for the product and Architect for the Apache HTTP Server component
- IBM HTTP Server
Team lead for development and L3 support
Regarding specific expertise, consider first the technologies used in the bulk of my current work, which I've used successfully across a number of projects:
- Web applications
- Using the Django web application framework for the server side, along Django CMS, django REST Framework, Tastypie, and other Django apps as appropriate
- Using Celery or Huey for task management
- Using PostgreSQL, Redis, memcached, and occasionally other server software
- Using Google, Twilio, Sendgrid, Authorize.net, Square, and/or other cloud services
- Deployed to Linux servers with Ansible
- Automatically backed up and maintained with a mixture of Ansible, Python, and Bash scripting
In support of those more obvious skills, I have years of experience developing and diagnosing problems in web applications, open source and commercial web servers and other networking software, helping me to effectively address many different types of problems or other considerations which can arise with web applications.
Here is a rundown of my experiences in today’s most in-demand areas of IT:
- C Extensive I started programming with C in 1985 and it was my primary or secondary language for many years, including network-layer products at IBM and network applications. I’ve used many of the usual build tools extensively — several make flavors, autoconf, libtool, cmake. I was one of the most frequent committers to Apache HTTP Server and Apache Portable Runtime over a long period of time. I did much of the work to create maintainable builds of these projects for Windows using cmake.
- Cloud I’ve deployed small applications on Google App Engine and Heroku, but I have primarily have deployed my applications to VPSs running Linux on providers such as Linode and Digital Ocean.
- Cybersecurity My work in this area has been limited to software development, support, and configuration roles, including reviewing code for potential problems and the workflow stemming from reports of suspected vulnerabilities.
- C++ Dated but meaningful I started experimenting with C++ in the late 80’s and used it regularly in the 90’s. Since then I have used it primarily when helping others write or debug web server plugins written in C++ (i.e., bug fixes), in a relatively few high intensity periods of time.
- C# Essentially zero
- Data Science Zero, other than data cleaning — sanity checking, normalizing, or otherwise manipulating data in a variety of formats, using Pandas and other tools in Python or other languages.
- Go Beginner
- Java Meaningful but not expert I started experimenting with Java soon after it came out in the 90’s. In the 2000’s I created some useful Java-based projects that were instrumental for product I worked on. While supporting web servers in the WebSphere and WebLogic product organizations at IBM and Oracle, I regularly worked on issues with Java applications, so bits of Java code and Java application considerations were never far away. I still use Java semi-regularly but not at a high level of proficiency. I haven't caught up with changes in Java over the last several versions, and I'm fairly ignorant about what is happening in the Java ecosystem beyond generalities. Java build tools: Some Ant and Ivy, no Maven, no Gradle experience other than with the canned builds created by Android Studio
- Linux Extensive expertise Many years of experience, from the time of SLS (floppies!) to this very moment, from configuring roles for Raspberry Pis to developing and supporting products for Linux on IBM zSeries. Of course, I've developed and debugged applications on a number of other OSs in the Unix family over the years and have a lot of experience with debugging tools, portable as well as system-specific. (I even have a couple of fixes in lsof.)
- Lua Near zero I wrote just enough Lua to experiment with Apache HTTP Server’s mod_lua.
- Machine Learning Beginner I am taking Andrew Ng's machine learning class (in early 2018). As of yet I don't have any practical experience applying it. A practical motivation for beginning to work with ML was a project for a client that involved tracking bots that were accessing the site and taking measures to block certain ones. ML is obviously applicable to the problem space, and I’d like to revisit that in the future.
- Matlab I've used Octave quite a lot in a machine learning class. (Octave is a largely-compatible open source application.)
- Mobile Development I’ve experimented a small amount with native development for Android; otherwise, no (but yes to responsive web sites ;) ).
- Pascal Dated Back in the day I wrote loads of Pascal code, and even taught the advanced Pascal course one semester when I was in graduate school. But any current Pascal demand must surely refer to Delphi, which I haven’t touched.
- Perl Meaningful, but not expert Perl was the language of choice for my own scripting needs (and occasionally for product testing) for around ten years, before I experimented with Ruby and finally switched to Python.
- Python Expert I’ve used Python in one way or another for 8+ years. While working in Oracle's WebLogic product organization I wrote a fair amount of Python which was run via Jython. Over the last 5-6 years Python has become my primary language, usually in conjunction with the Django web framework.
- PHP Nothing beyond small scripts used to experiment with PHP and web servers in order to diagnose suspected problems. I have made a commit or two to the PHP project.
- R Essentially zero
- Ruby Meaningful, but not expert I started working with this in the late 2000’s as a potential successor to my use of Perl for scripting. I enjoyed it, and still play with it from time to time since I have a Ruby/JRuby program that reconciles my bank account. I worked with Ruby on Rails in a MOOC I took back in 2012 but haven’t used RoR since then. I worked with a Sinatra application a few years ago in order to understand how to integrate its features into a much larger Python/Django application.
- Scala Beginner I enjoyed Martin Odersky’s Scala MOOC from Coursera, but that’s my only use of the language. If I had worked much in the Java world subsequent to that course I would have continued with the language.
- SQL I’ve written simple SQL on many occasions, but most commonly interact with it while studying the use of SQL by Django (ORM or migrations) to understand the code or to look for unnecessary work that wasn’t obvious to me from ORM calls.
- Windows native Meaningful, but not expert Most of my Windows development experience in the recent past has been with Apache HTTP Server or Apache Portable Runtime, fixing platform-specific bugs or propagating enhancements to that platform.
University of Alabama, College of Arts and Sciences
Major: Applied Mathematics
Minors: Computer Based Honors Program, English
University of Alabama, College of Engineering
Master of Science in Computer Science