Lyle Ziegelmiller
650-***-**** ******@*******.*** San Francisco Bay Area, USA US Citizen
https://www.linkedin.com/in/lyle-ziegelmiller-765ab6/
SUMMARY
Specialize in Java, Python, Perl, UNIX, SQL, and database. Technical background includes Object Oriented software design, development, testing, migration, documentation, and support for scientific, telecom, retail, and financial applications. Excellent communication skills. Produce exceptionally accurate, efficient, reliable, reusable, and easy-to-read software.
Available immediately. Willing to relocate at my own expense.
Motto: If I can Google it, I can do it! (Please see my thoughts on skillset matches).
OBJECTIVE
Seeking Senior Software Engineer Role - preferably in Artificial Intelligence/Machine Learning.
SKILL LIST FOR RESUME SCANNERS
Backend, Java, C++, Java Spring Boot, Python, Perl, SQL, PL/SQL, Oracle, Linux, Agile, Amazon Web Services, Bitbucket, CSS, Dagger, DB2, Design Patterns, Eclipse, ETL, Git, GitHub, Html, IntelliJ, JavaScript, JSON, Junit, Maven, Mockito, Multithreading, Object Oriented Technology, Poetry, PyTorch, RESTful API, SQL Server, Terraform, XML, Zookeeper, CI/CD
TECHNICAL PROFICIENCIES
Primary Skills
Last Used
Level / 5
Years Exp
Java
2024
4
10
C++
2023
3
8
Java Spring[1]
2023
3
1
Perl
2024
3
5
Python
2024
3
3
SQL
2023
3
10
UNIX/Linux
2024
3
15
Secondary Skills
Last Used
Level / 5
Years Exp
Agile
2023
2
3
Amazon Web Services
2024
2
1
Artificial Intelligence
2024
2
0
Bitbucket
2023
3
2
CI/CD
2023
2
2
CSS
2019
2
0
Dagger
2023
2
2
DB2
2007
3
5
Design Patterns
2024
3
5
Eclipse
2024
3
9
ETL
2023
3
4
Git
2024
3
8
GitHub
2024
3
1
Grafana
2023
3
3
Html
2019
2
0
IntelliJ
2024
3
2
JavaScript
2019
2
0
Jenkins
2023
3
4
JSON
2023
2
1
Junit
2023
3
3
Maven
2023
3
3
Mockito
2023
3
2
Multi-threading
2024
3
5
Object Oriented Technology
2024
3
10
Oracle
2020
3
6
PaaS
2018
3
3
PL/SQL
2014
2
3
Poetry
2024
2
1
PyTorch
2024
2
0
RESTful API
2024
3
2
SaaS
2018
3
3
SQL Server
2023
3
2
TCP/IP
1996
2
0
Terraform
2023
2
1
XML
2023
2
1
Zookeeper
2023
2
2
DEGREES
Master’s Degree, Computer Science, College of William and Mary, 1996.
Bachelor’s Degree, Physics & Minor in Math, San Jose State University, 1989.
COURSES
Watched a 25-hour video on PyTorch and took notes.
Completed one-semester HarvardX: CS50AI - CS50's Introduction to Artificial Intelligence with Python (scroll down on left side of page to see course curriculum) on June 18th, 2024. Scored 100% on each of the twelve Python Artificial Intelligence homework assignments. See certificate and video. Course material included:
Search algorithms such as Breadth-first, Depth-first, Minimax, A* Search, etc.
Basic logic, Inference
Probability (Note: took a one-semester course in Statistics, and another in Stochastic Models, both in grad school)
Optimization, Constraint Satisfaction, Arc Consistency, etc.
Machine Learning
Neural Networks, Gradient Descent, Backpropagation, Computer Vision
Language
15-hour Ultimate AWS Certified Cloud Practitioner CLF-C02 February 26th, 2024. See certificate.
Four-day course in “Core Spring” from Pivotal on April 24th, 2020. See certificate
RECENT ACTIVITY
See “COURSES” section above.
Brushed up on various skills such as Python, Java, Java Spring “Core Spring” from Pivotal course material (mentioned above) & video & my 320 pages of notes, multi-threading and AWS (Amazon Web Services).
Extensive use of ChatGPT. My one-semester college course in technical writing helps me to interact with ChatGPT.
PROFESSIONAL EXPERIENCE
Since Clearwater Analytics
Explanation for time gap since last position: I went to Europe for six months after my position at Clearwater ended. Shortly after returning to the US, my best friend of 20 years died suddenly. I wasn’t in the proper state of mind to begin job seeking for a while after that happened, so I studied artificial intelligence, and have been brushing up on all of my skills.
Clearwater Analytics Position Title: Senior Software Engineer Location: Boise, ID Start Date: June 2021, End Date: March 2023
Technologies: Java, Kotlin, Maven, Mockito, Zookeeper, Poetry, Dagger, Python, AWS, Terraform, Jenkins, Jira, Git, Bitbucket, Windows 10, Unix, SQL Server, Agile
Worked on a large Java application which took trade-transaction data from corporate clients and performed various corrections and calculations on this data. This included ensuring data was correct, altering transactions, filling in missing data, validation, etc.
Worked on the migration project using AWS and Terraform to put our software into the AWS Cloud.
Wrote Java and Kotlin JUnit tests, Python programs and a couple of Jenkins jobs.
Bank of the West (now BMO) Position Title: Developer/Contractor Location: Tempe, AZ Sept 2019 – Jan 2020
In the Commercial Banking Group (Cash Management), worked on a complex ETL project involving migrating fields from a Nacha file stored as a BLOB in an Oracle database column into various target database tables. This effort involved writing over 10,000 lines of Java, XML and .tspc files.
Spear headed the effort to get all the code for my group checked into Gitlab.
PayPal Position Title: Developer/Contractor Location: San Jose, CA Aug 2018 – Jan 2019
Worked in the Reboarding group on a Java Spring Batch project to send emails to customers with dormant accounts apprising customers of impending account closure due to inactivity. Project involved various Spring Batch jobs which interact with an Oracle database (via JDBC and later OCC) as well as various other systems through APIs to perform the necessary steps leading up to the closure of the accounts.
Oracle Position Title: Principal Member Location: Redwood City, CA Jan 2015 – March 2018
The primary goal of this position was to install our software into the SAAS/PAAS cloud and then configure it.
For the Staging Validation project, wrote 7,500 lines of validation code mostly in the Bash shell, but also a tiny bit of Perl and Python. This is used to ensure that environments are staged in such a way as to maximize the chances for a successful upgrade. The validation code checks a variety of things, such as directories, permissions, comparing database values with JSON file contents as well as flat files, etc. It has tremendously reduced the manual labor that was previously being performed on each of the many host machines.
As part of a project to convert a serial business process into a parallel process, wrote a Java class MultiThreader which takes a list of Callables and executes all of them (at most n simultaneously) each in its own thread, and makes the results available to the user via several methods. The results (which are of a generic type) can either be acquired as soon as they are available, or after all of them are finished. Timeout values can be passed to the result-acquisition methods. If a thread times out, its return value will then be returned with an associated ExecutionCompletionStatus enum value indicating that a timeout has occurred. Similarly, MultiThreader handles exceptions generated by the user Callables in a graceful manner, so that no matter what happens, the user always gets an associated return value for each Callable, and this value contains enough input information that the failing thread can be identified from its return value. MultiThreader frees developers from having to be concerned with the complicated mechanisms necessary to deal with threads by encapsulating this logic in one class, although I did create some Factory classes for generating Callables, etc. MultiThreader uses the Java ExecutorService, ExecutorCompletionService, LinkedBlockingQueue and CountDownLatch classes, among others, to help perform its functionality, as well as the Builder design pattern to handle user inputs. It’s been successfully used in several places in our programs.
Implemented a project involving the centralization of database connectivity information. All database connection strings were replaced with the usage of a system property (key = “oracle.net.tns_admin”) whose value contains the location of the Oracle tnsnames.ora file containing database connectivity information. This implementation involved the creation of a class which uses the State design pattern to enable it to respond appropriately to user requests as the various bits of information needed for this project become available during program execution.
Wrote various Perl scripts to do tasks such as generating a list of plugins (Java classes referenced in .XML files) for each of a list of classes. This was done to help produce a detailed wiki page documenting our software.
Implemented lots of other bug solutions that are highly specific to our code base, and rather difficult to explain in a meaningful way to an outside person.
Created an updated a wiki page affectionately referred to as the “Cheatsheet” which contains the detailed steps for various tasks that developers must perform on a routine basis, such as checking out/in code, generating reviews, dealing with common build errors, testing, commonly-updated XML files, SCM commands, Vim tips, etc. This has been very popular with the team.
Visa Position Title: Developer/Consultant Location: Foster City, CA Sept 2014 – Jan 2015
Created and configured a VMWare virtual machine using Vagrant, Puppet and Yum. Has software and settings installed on it so that a new employee will not have to configure their development environment, but instead, will simply be given a copy of this virtual machine so they can begin their software development immediately.
Salesforce.com Position Title: Developer/Consultant Location: San Francisco, CA June 2014 – Aug 2014
Wrote two Java programs, which utilize various existing in-house classes to generate test data.
Wrote several JUnit test cases to automate the programmatic testing of various functionalities provided by the Dreamforce website.
Wrote an OO Java program from scratch which does the following:
Encapsulates each of four test cases in its own class, each of which extends the same abstract base class. This abstract base class contains two abstract methods, each of which is designed to execute a different portion of the test case. It also contains other non-abstract methods for result reporting.
For each test case, executes the first implemented abstract method. Then it waits three minutes for the resulting data flow to occur, then for each test case, executes the second implemented abstract method. This permit waiting for three minutes only once for all test cases, rather than once per individual test case.
Checks results of individual test cases by comparing the values stored in the database by each test case against the expected values, prints out a summary for each test case, and reports whether all test cases succeeded. All comparisons are achieved with a single method, which takes as String arguments a regular expression describing the expected test-case result, and the table column name containing the deposited/updated data for the appropriate row.
Entrepreneurial Project Position Title: Software Engineer Location: Modesto, CA Jan 2013 – June 2014
Worked on a large equity-trading platform[2] written from scratch in Java. This platform is like TradeStation (see www.tradestation.com) but has many improvements. This is a very large project, which normally would be worked on by a sizable development team.
The functionality it offers is as follows:
Displays equity (stock, futures, etc.) data to the user using multiple bar intervals (hourly bars, daily bars, monthly, five-minute, etc.) on the same data stream (that’s a key point). Large data gaps and overnight sessions are graphically compressed to enable the user to avoid scrolling through empty screens. Data is available for immediate viewing and scrolling upon program startup regardless of dataset size (some of which consist of millions of data points) and requires no pre-existing metadata files or database. Note that this combination of features is considerably more difficult to implement than simply reading an input data file and displaying its price data on the screen depicted all with the same chronological bar intervals.
Applies user-created trading systems to various historical data sets with multiple inputs, allowing the user to optimize trading ideas.
For fast access to multiple graphs, provides a custom-written layout manager, which allows for real-time resizing, rearranging and addition of data windows. The logic and the math behind this are very complex; it’s far more advanced than the layout managers, which are included in Java.
Displays various interactive trading-system-result graphs (such as equity graphs, draw-down graphs, etc.) which enable the user to further refine their trading systems, making them much more likely to be profitable going forward with real-time data. For example, allows users to remove excessively large winning trades from the result set of the optimization in order to avoid inadvertently relying on a lucky past trade that is unlikely to be repeatable in the future.
Multiple trading systems can be back tested simultaneously using multiple threads.
PayPal Position Title: Developer/Consultant Location: San Jose, CA Feb 2012 – Dec 2012
Wrote implementations of several sets of complex rules in Java/J2EE using Eclipse. Effort involved checking out a very large code base (about 1.3 million lines of Java and XML) from SVN consisting of multiple branches, modifying XML files to get the code base to compile and run properly, translating various rules into Java, writing test cases using JUnit and coordinating with people from various states and countries. Also implemented several projects, which involved making modifications to this same multi-threaded program. Steps included modifying and creating XML, Java, and database entries, submitting requests via JMeter and ensuring correct results were obtained. Wrote various Perl scripts some of which read XML using the XML::DOM class.
Entrepreneurial Project Position Title: Software Engineer Location: Modesto, CA Jan 2010 – Feb 2012
Worked on trading platform project in Java. See the section above beginning Jan 2013 for more details.
Acxiom Digital Position Title: Software Engineer Location: Foster City, CA Mar 2007 – Dec 2009
Worked on a one million-line Visual C++ 2005/Oracle backend server, which caches data and generates SQL used to generate reports on email campaigns and customer responses to these campaigns executed on behalf of corporate clients. It also acts as a web server to allow internal users to monitor the progress of the program’s activities via an admin web page. Tasks included the following:
Wrote a progress bar in AJAX (mainly JavaScript) for the admin page used to monitor the server’s caching progress.
Using the Eclipse IDE, wrote a Java program which runs as a Windows service, monitors another service’s execution status by opening a URL connection to that service and pinging it, and restarts that service if it fails to respond for a specific amount of time. This uses JNA.
Worked on a set of enhancements to the file export functionality of the AW platform, which involved making modifications to both the C++ code and the Java code.
For a multi-threaded application, rewrote the mechanism used to impose an upper limit on the number of threads running simultaneously.
Worked on a project, which automates many of the activities performed for adding a new client to the organization. This effort involved making additions and changes to various pieces of software. They communicated via SOAP calls, which I added to an existing set of SOAP calls.
Interviewed several C++ applicants.
Wells Fargo Position Title: Developer/Consultant Location: Minneapolis, MN Oct 2006 – Jan 2007
Various ETL projects using DB2, AIX UNIX and Perl. Effort involved making recommendations for business requirements, data analysis, design, implementation and documentation of ETL programs written in Korn shell, Perl, DB2 SQL, and the DB2 Load utility.
Northern Trust Position Title: Developer/Consultant Location: Chicago, IL Nov 2005 – May 2006
Worked in the backend PACE development group, which generates various reports for end users on the front end.
Wrote several PL/SQL scripts used to populate a table with hierarchical data gathered from several other tables. This was a multi-step process, which involved multiple tables, data compression and checking, and the usage of the “connect by” Oracle SQL statement.
Modified C++ and PL/SQL code to construct task messages, which include information such as account numbers, indexes, etc. End users use these messages at run time. This involved gathering information from various classes at various levels in the class hierarchy and passing the information to the messaging framework.
Performed fixes to a C++ library of classes used to interact with Oracle OCCI library run on a Sun OS Unix environment to enable these classes to run with different versions of the OCCI library.
Bank One Position Title: Developer/Consultant Location: Chicago, IL May 2005 – Nov 2005
Wrote a data migration program in Java, which uses user-input SQL to extract data via JDBC from an Oracle database, creates a table in MS Access using metadata from the result set, and inserts the data into the Access table using the ODBC-JDBC bridge.
Wrote a JSP to provide a static substitute for a server used to generate daily foreign exchange rates, to enable test results to be run-time independent. This JSP reads and parses an input XML file from the request reader and writes an input-dependent response XML file to the request writer. JSP is run on Apache Tomcat 5.5 web server.
Wrote several Perl scripts to perform data mining & modification, and SQL generation for the population of 60 tables.
Wachovia Securities Position Title: Developer/Consultant Location: Chicago, IL Dec 2003 – March 2005
Worked on the industry’s largest securities merger (between Wachovia and Prudential). Participated in the analysis of existing code, as well as the design and implementation of new data flow diagrams and code. Effort involved writing new C++, Korn shell, Syncsort, and Perl programs to perform data extractions, conversions, transformations, and loading into a DB2 database. Wrote and implemented detailed test plans. Wrote elaborate SQL to perform data validation, which resulted in the discovery and resolution of many errors in vendor-provided data.
Wrote several ETL programs consisting of SQL and Korn shell scripts.
Responsible for the development of all code for a Fixed-Income project to deliver a key tax related financial report to premium Wachovia Securities clients. Wrote 3,400 lines of SQL.
Sprint Position Title: Software Engineer 3 Location: Overland Park, KS Oct 1999 – Nov 2003
Worked on a 170-terrabyte IBM DB2 66-node database (data warehouse) on the AIX 5.1 (UNIX) platform, used to store (real-time) as many as 300 million Call Detail Records per day. Responsibilities included: application development, mentoring co-workers, and assisting internal users with requirements, design, and implementation, of their various needs.
Greatly enhanced efficiency of auxiliary-insertion process used to insert rows from data files for which regular insertion process was interrupted. An entire program used to perform these singleton inserts was replaced with highly effective modifications to the SQL, which resulted in an increase in performance by a factor of 100.
As the C++ subject matter expert with group, gave a C++ and Object-Oriented Design presentation to co-workers.
Led project to rewrite existing software to filter, sort, and reformat 3G data.
Led project involving the addition and understanding of WLNP fields to the database. Effort involved producing formal documentation, coordinating activities with others, and writing and re-writing code.
Single-handedly wrote a multi-process high-speed/volume ETL program in C++ that included a template-based multi-process manager.
Wrote a C++ template wrapper class for database programming. This class provides commonly needed functionality, such as connecting to, and disconnecting from, the database, producing automatically named log files, which contain the filename and line number for each entry, checking and handling database return codes, etc. This allows a new C++ database program to be written easily and quickly.
Modified existing ETL software used to extract, transform, and load Call Detail Records into the database, to include several additional fields for the Wireless Number Portability.
Wrote several fraud-detection reports using SQL and C++, which query database on a daily basis. Amount of money saved by these reports is confidential, but substantial.
Wrote and enhanced many Unix Korn shell scripts, and Perl scripts used to run programs, parse and validate data and software.
Implemented Marketing Information System changes to software. Work included interacting with user, clarifying requirements and making suggestions, rewriting, improving, and adding modifications to existing embedded-C++ code (C++ program with SQL statements embedded in it), performing testing, documentation, and validation. UNIX expertise enabled testing to be more rigorous, faster, and easier for the user to understand and participate in.
Keane, Inc. Position Title: Developer/Consultant Location: Minnetonka, MN Sept 1998 – June 1999
Provided UNIX documentation, teaching, and technical support. Helped analyze testing tools and provided management with an executive summary tool description, and recommendation.
Development and maintenance work on a C++ telephone order-taking code on a Hewlett Packard Unix machine for a retail client.
Fingerhut Position Title: Programmer Analyst II Location: Plymouth, MN Aug 1996 – Aug 1998
Performed support and development work on a 60,000-line subsystem of a large telephone-order-taking application program written in C++, Pro*C, and TeleUSE, running on Sun Solaris UNIX. Used embedded SQL statements to connect to, and exchange information with the Oracle 7 database.
Skillset Matches
1.I usually work at a full-time position for several years, making the time spent learning new skills specific to the position a very small percentage of my total time there and thus, it has minimal impact on my overall average work performance. Several of my recent positions were contract positions that ended simply because I finished the project.
2.Even if I have all the skills initially required, many positions have changing requirements. For example, at my last position, they decided to move their software to Amazon Web Services, so I learned that skill as well as several others.
3.I work very hard to address skillset gaps early on. When I started at PayPal in 2012, I’d never even heard of Java Spring which was used throughout the code base. Yet I worked on it and completed my assignments. In 2018 when I worked there, I’d never used Spring Batch, but again, I quickly came up to speed on it and successfully completed the project.
4.With the internet, YouTube videos and ChatGPT, I can very quickly get good enough at a technology to be productive. Developers often use only 20% of a tool’s capabilities 80% of the time. It’s not like in the old days where someone would have to go to a bookstore, hunt for the right book, buy it and read it to get good at something new. While this has been the case for a long time, sometimes obsolete ideas linger on far longer than one might expect. Consider that the toolbar icon for saving a file is still a five-inch floppy drive. When’s the last time you used one of those?
5.I suspect that a lot of people lie about their experience to get a job. I’ve had many recruiters repeatedly encourage me to add experience to my resume that I had already told them I didn’t have. This strategy must work with enough people to keep using it. This often goes unnoticed because most interviews focus on data structures and problems that are agnostic of any particular skill.
6.Understanding a one-million-line code base that I can’t Google is one hundred times harder than learning a new language or skill that I can Google!
7.My best skill is my ability to successfully proceed without initially having all the required skills. Usually, there is some existing code, and it’s not that hard to integrate new code into it without having to be an expert at all the technologies being used.
Java Core Spring Certificate:
[1] Completed four-day course in “Core Spring” from Pivotal on April 24th, 2020.
[2] An equity trading platform is a program which displays equity data (stocks, futures, etc) in various formats to the user and allows the user to generate their own trading ideas and then express them in the form of a program which is then applied to historical equity data to determine the viability of their trading system. There’s actually a lot more to it than that, but that’s the general idea in a nutshell.