I’ve had the opportunity to speak with several mentors since I started this business and, to the person, they all asked the following question:
What are you good at? What specifically are your customers going to demand your services for?
I’ll be honest that, as I’m sure my mentors expected and wanted, this question threw me for a loop. Starting this company is the first time I’ve gone out on my own and I’ve not been as purposeful as I could have been in becoming the expert at something such that clients would DEMAND that I handle it for them. This is something that I intend to rectify from this point forward. This blog is a real first step at that for me and a definition for you of how I think I can bring you value at this moment.
While I haven’t become an expert at one thing, there’s always been a lot of work to get done where I’ve worked and, thus, I’ve been able to touch many different areas of several large code bases. That has made me a good general software engineer. Given that, I’ll tell you here about the common themes of work that I’ve seen over my years and start with that type of work as the first specific thing I can offer you. It is my hope that this list will grow in length and specificity as we work together.
C/C++ and C# Code Base Integration
In two previous positions, I’ve worked on projects which have connected C# code bases to existing C/C++ code bases. In one case, I connected a third party library that provided a C# API to a legacy C code base. For the other project, a C# web UI and data layer were written to wrap a C++ code base and I helped to connect the two, write integration tests from the C# side in MSTest, and continue the creation of unit/integration tests for the C++ side in googletest.
Because of the experience I gained on these two projects I feel that I would be able to successfully integrate such code bases for you as a client. Additionally, this leads me into my next topic: refactoring. Doing such an integration is a good time to do any refactoring necessary for the integration and to get increased coverage by automated tests (or introduce automated tests if they aren’t present at all).
Legacy C / C++ Code Refactoring and Modernization
Throughout my years as a software engineer, I’ve seen code bases that have been subject to time and emergencies. These emergencies happen as a normal part of business and, though the changes that they engender have to happen to meet business needs, they cause technical debt to accumulate. This technical debt bothered me enough that I’ve made an attempt to implement changes within the code and the organization to pay off the debt and clean up the code. “Working with Legacy Code” by Michael Feathers has often been my guide in these efforts and I highly recommend it to those facing code bases with significant technical debt.
Several of the things that I’ve done in this regard include:
- Choosing unit testing framework for C, setting up unit tests surrounding a particular program, and training the rest of the team to use the framework to continue to write tests.
- Contributed to the start of tests on a C++ code base and used the tests to guide an understanding of the current state of the code and refactoring efforts.
I understand that these are fairly generic and typical of what would be expected of a software engineer working on a legacy code base. That being said, this kind of effort is something that I care about and believe that I can help you with.
Where I Think I Want To Become An Expert
As I’ve mentioned in previous posts, I have started teaching myself Ruby on Rails to immerse myself in an area of software engineering that I’ve not had a chance to handle. I do have a few ideas for web services that I’m interested in building eventually. That being said, it is not something that I feel confident offering you right now since I am still learning. If you’ve got work that you’d consider me for in this area given that, I’d be happy to talk to you about it.
As another step, I’m working my way through my resume to really see where I want to spend more time to offer you better services. I’ve done a lot of general desktop application work on Windows and various *nixes (including some on OS X) in C and C++ and would certainly like to continue that work. The two areas that I’m currently considering contributing or extending my knowledge are:
- Contributing to the Chrome browser. My hope is that this will leverage my current experience and dovetail with learning to build web services
- Learning more about security since I got my feet wet during my time at Guidance Software. I’m still considering what area of security to learn about and would gladly take suggestions for things to learn or projects to contribute to given my experience.
Much of what I’ve said here still feels fairly generic in regards to what I can provide. And I also realize that hoping to grow in what I can provide for you is something of a professional way of saying:
That being said, I am confident that I can be somebody that can come in and guide the process of refactoring and modernizing a C or C++ code base for you. From that point, I anticipate that what I offer will grow and evolve as we work together. I look forward to the journey and all the changes that that entails.