I have been developing software for over 30 years. I started as a 14 year old with BASIC on a Commodore 64, moving on to assembly language and writing complex 8-bit algorithms while still a teenager. In college, I studied Computer Engineering with a focus on software, and received my Master's degree in 1993. During my college career, I learned fundamentals of computer hardware and software design, as well as electrical engineering concepts, probability and statistics, queuing theory, computer... [more]
I have been programming in Java since the beginning. In the mid 90s, I was one of the first to download Java 1.0 and I quickly began learning what was the most exciting language development in a decade: the first language of the Internet. Since then I have worked on and off on various Java projects, accumulating 20 years of experience and knowledge of every version of the language. I have deep knowledge of the fundamentals of the language and an excellent working knowledge of the core API (including web services) and many 3rd party libraries. I have used the Eclipse development tool extensively, and also have experience setting up a large scale multi-project development environment in the Maven build system.
I have spent over 10 years writing in C++, in a variety of domains and on several platforms. I have complete comfort with the concepts and syntax of C++, from the basics of pointers and values, to the most esoteric topics such as partial template specialization. In my C++ jobs, I was always responsible for writing solid and well-tested libraries which many other developers used. I was also responsible for mentoring those other developers on best practices. In the early 2000s, I published an article in C++ User's Journal (now part of Dr. Dobb's) describing a new type of associative collection which was highly space efficient.
I spent much of my early career programming in C, and I wrote a fully functioning custom database system in C (DOS) which was used for several years by a small local trucking company. I have a deep understanding of all aspects of C, especially since I've spent much of my career in C++, which is mostly a superset of C and shares much of its underlying architecture.
I have a very strong grasp of algorithms and algorithmic complexity. I have written production quality algorithms for nested tree and trie structures, graph traversal, hash indexing, etc, in multiple languages. I understand how to evaluate and express complexity of these algorithms in O(n) notation. My interests include parallel algorithms, lock free synchronization, distributed algorithms (both traditional client server and modern map-reduce approaches), and declarative approaches to programming (i.e. functional reactive programming). I am adept at object oriented design and implementation in multiple languages, and database design and implementation in multiple DBMSs.
I spent my college days working on SunOS and later Solaris machines, where I learned most of the fundamentals of UNIX from both a user and programming perspective. I am quite adept at UNIX command line scripting and can compose long sequences of piped commands to accomplish data transformation tasks. Later, in my first job, I used HPUX and SCO UNIX to build software and services; and since then I have worked extensively in Linux. I am familiar with the UNIX file system model, the programming model, and the administration/security model.
I studied computer engineering in college and I am confident in my knowledge in this area. I understand fundamental computer architecture concepts, such as the interaction between CPU, memory and peripherals through the bus, the role of the hierarchical memory model in maximizing performance, CISC vs RISC, parallel computing concepts such as SIMD architectures (implemented in modern CPUs with names like MMX and SSE), operating system concepts, and security. I have a fundamental understanding of how computers work from the ground up. Fully zoomed in, there is the physical layer of (mostly) silicon-based transistors. Zoom out to find those transistors forming gates and switches, which come together in complex arrangements to produce components such as registers, the ALU (arithmetic/logic unit), the FPU (floating point unit), etc. Zoom further and those units form the CPU, which is then arranged with other integrated circuits on a motherboard with lines of communication between all of them (the "bus"). Zoom out further still and you find that one computer connected to wires, which connect to hubs, which travel long distances to huge distribution centers throughout the world -- known as the Internet. All from a microscopic piece of Silicon.
I have spent the last 4 years working almost exclusively in C#/.NET (4.0). I have extensive knowledge of the C# object model, LINQ, interaction with native code, Lambda functions, events, the Thread Processing Library (TPL), WPF, WCF for RESTful services, and MVVM design. I am very comfortable in all aspects of the language and its environment.