As a software engineer, I have broad experience. This allows me to quickly gain context and apply existing skills to almost any project. It also demonstrates my ability and experience quickly learning and apply new skills as needed. This experience includes (but is not limited to):

  • levels of languages
    • high level languages including Python, RealBasic, Scheme, Standard ML, Java, JavaScript, AppleScript, Bash, SQL and Go
    • medium level languages including C, CG, GLSL and Cython
    • low level languages including assembly and machine code
  • programing paradigms (See above list of programming languages for examples)
  • types of projects
    • realtime controls systems
    • user interface centric
    • servers and networking (Including multiplayer games, and web apps)
    • renderers (Including GPU based and parallelized CPU)
    • physics engines (2D and 3D)
    • serial IO hardware control
    • 3D shape modification and processing
    • data processing and presentation
  • scales of projects and stages of development
    • large and well developed open source projects
    • moderate sized personal and solo as well as group commercial projects from concept through maintenance
    • simple scripts and tools

I know these kinds of cases well, and can make stylistic, language, design and tool choices to optimize the design for what is needed, be it development time, maintainability, performance or other factors. My willingness to venture into these areas and my experience with them shows that I can figure out what I need to learn for a project, learn it, and apply it to the project. I will not be trapped by a lack of applied experience, nor a lack of conceptual knowledge and theory. I have the background and experience to know when I need to learn something, what it is I need to learn, and how to apply it.

Along with the ability to pick up skills as needed, I already have a strong grounding in some of the slower to develop areas. Having worked on long term and large scale projects at different phases of development, and throughout their development, I have a good understanding of design, planning, maintainability, reusability, extensibility, scalability, modularity, and the implications and reality of changing requirements. These are often lessons learned at high cost, and I've already paid those costs.

I'm used to learning to work with the tool chain of various projects. I've used svn, git, cvs, bzr and hg version control systems, all simply learned as needed, along with build tools like ant and make. As mentioned above, I've worked with many programming languages, and I can easily learn more as needed. My skills are not tied to any specific, paradigms, languages or tools. I often work in multiple languages and/or paradigms on single projects depending on the needs and appropriateness as well as to best make use of available code bases.

Teamwork is of ever increasing importance with the increasing scale of large software projects. I've worked on some large open source projects which involve many people and vast amounts of code. I've also worked for and with other programmers on moderate and small projects. I've also worked with inter-disciplinary teams including electrical engineers and mechanical engineers, as well as other programmers. I know how to interact with with people both in and outside of my software speciality.

Copyright © 2011-2013 Craig Macomber