Summary
- Over 35 years in business application development. Manager, project leader and lead software engineer for e-commerce websites.
- Over 20 years experience in modern object-oriented Perl backend web development. Contributor to the Perl core. Instrumental in developing Perl's testing ecosystem. Created WWW::Mechanize web client. Prolific Perl module author.
- Extensive SQL database experience with Oracle, PostgreSQL and MySQL.
-
Creator of ack,
a widely-used alternative to
grep
optimized for programmers. - Author of Land the Tech Job You Love, 280 pages, published June 2009 by Pragmatic Bookshelf, a guide to job hunting for technical professionals.
Work Experience
Follett School Solutions, McHenry, IL (2012-now)
Book Wholesalers Inc, McHenry, IL (2007-2012)
BWI was a wholesaler of library books to public libraries. I drove sorely needed upgrades to BWI's TitleTales website since the company's 2007 move to McHenry. After BWI was sold, I transferred to Follett School Solutions.
Lead Software Engineer
- Drove migration of e-commerce web app from on-premises servers to Microsoft Azure and Azure DevOps.
- Inherited and modernized e-commerce web app of 100,000 lines of PHP under Apache.
- Created a modern development environment for the app. My predecessor had one codebase: the production server.
- Implemented version control, automated testing, bug tracking, coding standards, continuous integration and a stable release process.
- Design, coding and testing of ongoing improvements to the app. New development was done with modern Perl techniques.
- Planned and implemented a 40,000,000-document search engine in Solr & Lucene to replace an existing search application using Oracle Text.
- Created and evangelized the company wiki in MediaWiki. It grew to 3,000 pages in its first year and is now an integral part of company workflow and culture.
- Received the "Follett Values In Action" award, a $500 quarterly prize, for the company wiki.
- Created Cacti monitoring system to track server performance trends.
- Integrated dynamic video loading on product pages using the Brightcove Player API.
- Updated all legacy pages to be HTML5 compliant using the HTML::Tidy5 Perl module I created as a wrapper around the W3C's tidy-html5.
Follett Library Resources, McHenry, IL (2001-2006)
Follett Library Resources is the leading wholesaler of K-12 library books in the U.S. The Titlewave online application helps librarians select materials for purchase.
Web Applications Manager (2002-2006)
After being promoted to manager, I scaled the department upward to include six programmers and a system administrator.
- Grew and led team of six programmers and system administrator
- Started migration of PHP codebase to object-oriented mod_perl.
- Defined software construction processes used by all programmers
- Interviewed and hired all programmers for my department
- Chief architect of web systems infrastructure
- Gave training classes for company staff and other corporate divisions
- Planned future growth with my counterpart on the project management side of the house
Project Leader / Sr. Software Engineer (2001-2002)
When I started, there was one programmer, one system administrator and no repeatable process. Releases were made by FTPing tarballs to production servers, and version control was made by occasionally zipping up the source.
- Project manager and lead programmer for all projects
- Lead programmer/architect for the Titlewave team
- Implemented CVS & Subversion version control systems
- Created new infrastructure for the site using PHP's object features
- Implemented software process and coding standards
Follett Software Company, McHenry, IL (1991-2000)
FSC is the leading creator of library automation software for the K-12 market. If you checked out a book in a school library in the past 25 years, chances are it was done with a Follett Software circulation system.
Sr. Internet Engineer (1996-2000)
- Created the company-wide intranet and external website infrastructure
- Created all intranet applications for all departments
Software Engineer (1991-1996)
- Designed, coded and tested library automation software in C and C++.
- Worked on teams of two, four and ten, depending on the project
S.D.C. Associates d/b/a Just Pants, Elk Grove Village, IL (1986-1991)
- Wrote Pascal software for retail stores: Point-of-sale system; purchase orders; inventory; email
- Wrote back-office systems in BASIC, COBOL and SPEED II 4GL: Accounting; inventory; email
Open Source
Some of the projects I've created and contribute to include:
- ack
- I created the widely-used text search tool ack (sometimes packaged as "ack-grep") in 2006. As ack has matured, my role has changed from creator and author to shepherd of incoming patches.
- The ack website, beyondgrep.com, also is a hub of information about other code search tools to help users decide which tool best fits their needs. The site gets about 8,000 unique visitors each month.
- bobby-tables.com
- This site is a collection of information to help novice programmers understand how to properly use parametrized SQL queries to prevent SQL injection attacks. While I created the site in 2008, it is now based on community content. Source for the site is kept on GitHub, with contributions coming in just like patches to a code-based project. Around 4,000 unique visitors use bobby-tables.com in a month.
- WWW::Mechanize
- WWW::Mechanize is a Perl module that allows easy navigation of websites, acting as a web browser in an object. Created as a fork of WWW::Automate in 2002, I maintained Mech until 2012. It is now slated to become part of the standard libwww-perl library. Its sister module, Test::WWW::Mechanize merges the convenience of Mech with Perl's automated testing ecosystem.
- Perl 5
- As a member of the Perl 5 Porters, or core Perl developers, I contributed patches to the C source code to make it more maintainable and with safer constructs. I performed regular static analysis on the C code and strengthened the compiler warnings to check for questionable code.
- Perl::Critic::Bangs
- A collection of policies for the Perl::Critic static analysis framework.
- Test::Harness and prove
- During the time I maintained the core Perl module Test::Harness, I created the prove tool to encourage test-driven development by making test execution simpler from the command line. prove is now shipped with every Perl distribution.
- Perlbuzz
- Perlbuzz is a news site about Perl 5, Perl 6 and Parrot. As more Perl blogs have become popular, Perlbuzz has mostly become a stream of stories, selected by me, fed primarily through the @perlbuzz Twitter feed. Perlbuzz reaches almost 7,000 readers and followers each week.
- Parrot
- Parrot is a virtual machine, written in C, for running modern dynamic languages like Perl 6. In the late 2000s, I worked to increase stability of the code by increasing the number of compiler warnings checked, running static analysis tools like splint, and instrumenting the code.
- White Camel award, 2005
- Awarded one of three White Camels, an annual award for service to the Perl community.
Books
Author
Land The Tech Job You Love
(Pragmatic Bookshelf, June 2009): Author, 280 pages, ISBN: 978-1-93435-626
My book on how to find a job and get hired once you know what sort of job you're really looking for.
Contributor
Small Sharp Software Tools (Pragmatic Bookshelf, May 2019): Technical review
SQL Antipatterns (Pragmatic Bookshelf, 2011): Technical review
Mac OS X Tiger In A Nutshell (O'Reilly, 2005): Updates on entire book. Co-author credit.
Perl Best Practices
(O'Reilly, 2005): Technical reviewer
"I would like to express my
deepest gratitude... [t]o Andy Lester, for inspiring with his deep
understanding of, and passion for, the best coding practices." -- p. xxi
Pro Perl Debugging (Apress, 2005): Technical review and co-author/writing mentor
Pro Perl (Apress, 2005): Technical review
Mac OS X Panther In A Nutshell (O'Reilly, 2004): Updates to Unix command chapter
Code Complete, 2nd Edition (Microsoft Press, 2004): Technical review
Spidering Hacks (O'Reilly, 2003): Author of three articles
- Hack #21: WWW::Mechanize 101
- Hack #36: Downloading Images From Webshots
- Hack #44: Archiving Yahoo! Groups Messages With WWW::Yahoo::Groups
Google Hacks
(O'Reilly, 2003): Technical editor
"And to Andy Lester, our technical editor, goes much appreciation for his thorough nitpicking." -- p. xiii
Perl, CGI & JavaScript Complete, 2nd ed. (Sybex, 2003): Updated Perl sections for Perl 5.8
XML Primer Plus (Sams, 2002): Technical review
Teach Yourself Unix System Administration in 24 Hours (Sams, 2002): research, development & first draft for chapter 22, "Awk & Perl", plus technical review
Perl quick reference chart (Barcharts Inc., 2001): Technical review, and major rewrite
Unix Power Tools, 3rd ed. (O'Reilly, 2001): Technical reviewer for 10 chapters
Articles & Publications
Hewlett-Packard's enterprise.nxt blog
New Relic's blog
New Relic is a cloud-based monitoring company.
-
9 Things You Should Never Code Yourself, 3/12/2019
Updated version of my article from 2014. -
10 Things You Should Have Learned With Your Software Engineering Degree or at Coding Boot Camp but Probably Didn't, 1/2/2019
Updated version of my article from 2014. -
The Beginner's Guide to Contributing to Open Source Projects, 10/10/2018
Updated version of my article from 2014. - 8 Red Flags To Watch for in Your Code, 4/19/2017
- Your PHP Database Code May Be Vulnerable to Hackers — Here's How to Fix It, 5/16/2016
- Going Beyond grep for Searching Source Code, 1/28/2015
- 7 Things That Make a Great Open Source Contribution, 11/5/2014
- The 8 Essential Traits of a Great Open Source Contributor, 10/21/2014
-
Seven Things You Should Never Code Yourself, 7/8/2014
New Relic's third most popular article for 2014. -
10 Secrets You Should Have Learned with Your Software Engineering Degree, 6/3/2014
"Far and away our most popular post of the year" for New Relic in 2014. - The Beginner's Guide to Contributing to Open Source Projects, 5/5/2014
Smartbear's blog
SmartBear is the leader in software quality tools for teams.
- "How to Disagree Without Being Disagreeable", 4/22/2014
- "12 Things Developers Wish the CIO Remembered", 12/3/2013
- "The Developer's RegEx Survival Guide: 15 Rules for Making Sense of Regular Expressions", 11/6/2013
- "How to Turn Your Pile of Code into an Open Source Project", 9/10/2013
- "Bad Tech Job Interview Questions and How To Answer Them", 4/8/2013
- "13 Things People Hate About Your Open Source Docs", 1/10/2013
- "What To Ask Candidates In Job Interviews (Without Being Insulting And Wasting Your Time)", 4/8/2013
- "Website Performance Measurement Tools: From Brute Force to (Relative) Elegance", 11/13/2012
- "Leveraging Open Source Experience in Your Job Hunt", 9/20/2012
- "Designers and developers: Why can't we get along?", 8/8/2012, with Lauren Grey
- 14 Ways to Contribute to Open Source without Being a Programming Genius or a Rock Star, 3/10/2012
PragPub magazine
PragPub is a magazine published by Pragmatic Bookshelf. Some issues are available online, but others are not. Articles marked "*" are co-written with Johanna Rothman when we had a regular Lester and Rothman column.
- "Résumé Dos and Don'ts", 11/2016
- "How to Write a Project Estimate", 10/2016
- "When Your Job Makes You Unhappy", 5/2016*
- "You Just Lost Your Job", 4/2016*
- "When Co-Workers are Fired or Laid Off", 3/2016*
- "Help Your Career by Contributing to Open Source", 2/2016*
- "Are You Stuck in a Rut?", 1/2016*
- "Meetings", 12/2015*
- "Job Search Mistakes", 11/2015*
- "Common Interviewing Mistakes", 10/2015*
- "Finding the Right People", 9/2015*
- "Selling the Job", 8/2015*
- "Learn Your Strengths", 7/2015*
- "Networking as Problem Solving", 6/2015
- "Six Real-World Lessons", 5/2015*
- "How to Deal With Recruiters Without Going Crazy", 4/2015*
- "What Your Social Media Profiles Should Look Like, and Why They Should be Different", 3/2015*
- "The Google Résumé", 2/2015*
- "What Not to Say in an Interview", 1/2015*
- "The New Guy", 12/2014
- "Time Management & Productivity Tips", 11/2014*
- "Knowing Your Value and Defining it to Your Boss", 9/2014*
- "Job Fit", 8/2014*
- "Exiting With Grace", 7/2014*
- "What You're Getting Hired For", 6/2014
- "The Mechanics of Job Hunting", 5/2014*
- "Developing Your Writing Skills", 4/2014*
- "How to Transition to a New Role", 3/2014*
- "How to Manage Your Boss", 2/2014*
- "Landing the Dream Job", 1/2014*
- "How do I Get My Boss To...", 12/2013*
- "Unhappy at Work?", 11/2013*
- "The Nuts and Bolts of Career Development", 10/2013*
- "Preparing For an Interview", 9/2013*
- "Articulating Value", 8/2013*
- "Responsible Networking", 7/2013*
- "Managing Your Career Over Time", 6/2013*
- "Do You Need a Portfolio?", 5/2013*
- "Being the Geek Who Fits", 3/2013
- "The Geek Disaster Preparedness Kit", 7/2010
- "How to Get Fired Correctly", 6/2010
- "Getting the Job in Spite of a Disadvantage", 5/2010
- "Thoughts from Milwaukee JobCamp", 4/2010
- "How to Give a Tech Presentation, part two", 3/2010
- "How to Give a Tech Presentation, part one", 2/2010
- "New Year's Resolutions", 1/2010
- "Keeping the Job You Don't Like", 12/2009
- "The Layoffs Are Coming!", 7/2009
Other publications
- "What to Include in Your Open Source Resume", 10/9/2009
- "Using mdfind and mdls in Mac OS X", O'Reilly MacDevCenter, 2004
- The Perl Journal: Articles published in 2003-2004 include "Web Security with Taint Checking", "Using Devel::Cover", "Introduction to Automated Testing with Test::Harness", "Five Ways To Find Files" and "Data Manipulation & Perl Command-Line Options"
Presentations & Speaking
Many of my slide decks are available on Speaker Deck or Slideshare.
- THAT Conference, Wisconsin Dells, WI, 8/8/2019
- What every beginning developer should know
- SoftwareGR, Grand Rapids, MI, 4/30/2019
- What every beginning developer should know
- CodeMash, Sandusky, OH, 1/10/2019
- What every beginning developer should know
- Milwaukee Code Camp, Milwaukee, WI, 11/10/2018
- What every beginning developer should know
- YAPC::NA 2012, Madison, WI, 6/13/2012
- 29 Ways to Get Started in Open Source
- O'Reilly Open Source Conference 2011, Portland, OR
- Building and Maintaining a Project Community with Github, 7/27/2011
- CodeConf, 4/9/2011
- Building and Maintaining a Project Community with Github
- Invited to speak by GitHub's co-founder, Chris Wanstrath.
- Palmetto Open Source Conference, Columbia, SC, 4/16/2010
- What schools should be teaching IT students
- O'Reilly Open Source Conference 2008, Portland, OR
- People For Geeks, 7/22/2008
- Just Enough C For Open Source Programmers, 7/24/2008
- Frozen Perl 2008, Minneapolis, MN, 2/16/2008
- Get Out Of Technical Debt Now!
- Grand Rapids (MI) Perl Mongers
- Get Out Of Technical Debt Now!, 9/28/2007
- O'Reilly Open Source Conference 2007, Portland, OR, 7/25/2007
- Get Out Of Technical Debt Now!
- YAPC::NA 2006
- Get Out Of Technical Debt Now!, 6/26/2006
- Pragmatic Job Hunting, 6/28/2006
- Pittsburgh Perl Workshop, 9/23/2006
- Preventing Crisis: Project estimation and tracking that works
- San Francisco Perl Mongers, 8/15/2006
- Get Out Of Technical Debt Now!
- Grand Rapids (MI) Perl Mongers, 10/25/2005
- The A-Z Guide Of CPAN Modules For New Authors
- O'Reilly Open Source Conference 2005
- Practical Perl Testing, with chromatic, Ian Langworth and Bill Odom, 8/3/2005
- Preventing Crisis: Project estimation and tracking that works, 8/4/2005
- YAPC::NA 2005, 6/29/2005
- Preventing Crisis: Project estimation and tracking that works
- San Francisco Perl Mongers, 4/15/2005
- Preventing Crisis: Project estimation and tracking that works
- WebGUI Users Conference 2004, 10/21/2004
- Introduction to Perl Programming
- Advanced Perl Programming
- Testing With WWW::Mechanize
- O'Reilly Open Source Conference 2004, 7/29/2004
- Advice For Open Source Job Seekers
- YAPC::NA 2004
- Perl Wizardry Without An Editor, 6/16/2004
- The Open Source Programmer's Guide To Getting A Great Job, 6/16/2004
- Automated Testing Of Large-Scale Projects, 6/17/2004
- Minneapolis Perl Mongers, 4/14/2004
- Automated Testing Of Large Projects With Perl
- St. Louis Perl Mongers, 1/14/2004
- Introduction to Automated Testing
- Grand Rapids (MI) Perl Mongers, 9/25/2003
- Automated Testing Of Large Projects With Perl
- O'Reilly Open Source Conference 2003, 7/10/2003
- Automated Testing Of Large Projects With Perl
- Uniforum Chicago
- 29 Ways to Get Started in Open Source Today, 5/8/2012
- An Overview of Git, 8/10/2010
- New Features in Perl 5.12, 7/13/2012
- Effective Job Interviewing from Both Sides of the Desk, 9/22/2009
- Just Enough C for Open Source Programmers, 7/8/2008
- Development Process Lessons from Open Source, 9/11/2007
- The A-Z Guide Of CPAN Modules For New Authors, 10/11/2005
- Preventing Crisis: Project estimation and tracking that works, 3/22/2005
- Perl Security With Tainting, 8/10/2004
- Perl Wizardry From The Command Line, 2/10/2004
- Automated Testing Of Large Projects With Perl, 8/12/2003
- Automated Testing With Perl, 2/11/2003
- Chicago Perl Mongers
- Introduction to WWW::Mechanize, 7/10/2007
- Perl Program Repair Shop, 6/12/2007
- 101 Things Every Perl Programmer Should Know, 4/10/2007 and 4/24/2007
- New Modules For a New Year, 1/9/2007
- Perl Security With Tainting, 8/3/2004
- The Open Source Programmer's Guide To Getting A Great Job, 6/8/2004
- Module Building 101, 1/7/2004
- A Field Guide To The Perl Command Line, 11/4/2003
- Automated Testing With Perl, 5/19/2003
Technical Skills & Keywords
Languages: Perl, PHP, Ruby, Python, SQL, JavaScript, jQuery, C/C++, awk, shell scripting, bash, HTML, CSS
Perl: CPAN, modern object-oriented Perl, Moose, WWW::Mechanize, mod_perl, Perl::Critic
Databases: SQL, Oracle database, Oracle PL/SQL, PostgreSQL (Postgres), MySQL, MariaDB, Apache Solr search
Web/apps/devops: Microsoft Azure, Azure DevOps, DigitalOcean, Docker, Apache HTTP server, LAMP stack, nginx, Prometheus + Grafana monitoring, Cacti monitoring, Nagios monitoring, SNMP, Tomcat, Jetty
Tools: Git, GitHub, Subversion, vim, ack, Perl::Critic, lint and other static analysis tools
Operating systems: Unix, Linux (CentOS, Red Hat Enterprise Linux, Ubuntu), Mac OS X, macOS
Concepts/methodologies: object-oriented programming, functional programming, model-view-controller, test-driven development, static analysis
Miscellaneous: MediaWiki, WordPress blog/CMS, Jekyll blog, Movable Type blog