Hello! I’d like to welcome you to my blog, and introduce myself. My official name is Adrien Joel, but my common name “AJ” was assigned to me by Texas relatives who could not easily pronounce a French name. I was born and raised in Barrie, Ontario. I have spent my entire life around computers. I learned to type before I learned to hand-write, and learned the alphabet, how to read, and basic arithmetic on a PC. I completed a bachelors degree at the University of Toronto, where I focused on mathematics and computer science. Today, I enjoy computer science as both a profession and a hobby. I am an avid swimmer, and water polo player. I also enjoy rock climbing and photography, though I have found little time to do either lately.
Professionally, I find myself at the intersection of computer science, software engineering, and computer architecture. This means that I spend my time working on things that are theoretically sound (computer science), practical (software engineering) and have good performance (computer architecture). I have been fascinated by parallel computing for a long time. From a theoretical perspective, I am interested in problems such as P = NC, and frequently ask myself why parallel programming is hard. From a software engineering perspective, I often wonder how the average developer is ever going to write high-performance software with good design! Computer architecture motivates me to ensure that I deliver software with benchmarked performance results, potentially tuned to specific hardware for best speed. I have been working on a new approach to parallel programming which is radically different from anything attempted to date (considering the colossal number of failed approaches, it would have to be).
I consider myself an expert at parallel programming, GPU programming, OpenCL, and C++. My background in mathematics and computer science mean that I enjoy algorithm design and analysis. I have a deep appreciation for Edsger Dijkstra’s philosophy of programming, which means that I take great care to ensure that my programs are correct and that I could provide a mathematical proof if necessary. I am quite capable of designing and implementing very fast wait-free algorithms and data-structures, though it can take a long time to do something radically new. I greatly admire Alexander Stepanov’s views on software development.
Although I have a deep appreciation for computer science (a theoretical field), I also understand real-life software. I have considerable experience with software engineering, and designing systems based on user needs. I will not attempt to classify myself into any particular camp of software engineering, since I believe strongly that successful development teams may use a variety of approaches even in the same project. I consider design to be a complex and iterative process, which requires attentive feedback from potential users or customers. There is no silver bullet. Software development is hard, and this is unfortunately an unpopular view with those who think software is one methodology away from simplicity.
I am interested in business, and have co-founded two companies. One moderately successful, and one a complete failure. Today, I am weighing my options to consider joining an existing company or to attempt founding yet another business. I have my own ideas, and I would like to continue my parallel programming research. For now, I am available as a technical consultant to help companies however I can. Feel free to contact me if you are looking for an expert!
I am going to use this blog to discuss topics relevant to my interests, and to demonstrate my products and skills. I hope to use this as a platform for technical marketing, so that potential clients have an opportunity to see examples of my work and capabilities.