My training and experience is as a software engineer. I've branched into embedded development quite a bit, and I also like to work with devops technologies. My OS of choice is Fedora Linux.
You can view the list of topics I studied at university here.
I took a break from my industry in 2012 until the time of this writing, April 2018. I still did lots of programming during this time.
I built my own small 4-node compute cluster at home. I track cloud and cluster computing news. And I work on small projects to keep my Linux skills fresh.
I got into embedded and firmware design with the Arduino platform in 2017. Then since about 2018 I expanded into the ARM world with ST Micro and STM32.
I'm currently looking for work, and so I decided to redo this page and add a blog so that you can find out about my skills. I've now worked with a very broad spectrum of computing environments -- from webapps to scripting languages to C/C++, to the OS layer and with microcontrollers and oscilloscopes.
If you're looking for a software or firmware engineer, contact me!
mike < at > michaeljoya.com
I've been a programmer since I was about 6 years old.
My first computer was at Christmas, age 5 (a Texas Instruments 99/4a circa 1982.) I learned to program its BASIC interpreter six months later and wrote small programs that flashed coloured text and moved characters across the screen.
Our family moved to Victoria, and eventually we purchased a 80286 8/12mhz PC. I could write batch files in DOS, but those did little other than to ensure that games and other programs didn't interfere with each other on boot-up. When we upgraded to a 486DX-25, I learned PASCAL in high school and learned a scripting language called ProComm Plus that came with the modem's terminal program. I started with C/C++ at 16 and got my first programming job: writing some faxmodem code for a local PC outlet.
Around that time I made a few friends through data-modem BBS systems; many of these were electronic engineers or software engineers and I was able to borrow or swap compiler tools and other peripherals with my friends. Good times. I was also introduced to the internet around 1994, but I'd previously seen Usenet through various FidoNet bridges that many BBSes provided.
I found college to be pedantic. My grades lowered because I felt a disconnect between what was taught there and what I felt were real industry skills. Around the age of 20, I installed RedHat Linux and it soon became my favourite operating system (now Fedora is).
After being supported by parents for years I eventually found work in Vancouver, first as a Perl programmer and software tester, then as a lead Java developer and back-end system engineer. I kept learning new languages too, like C# and bash. I reasoned that if I kept learning about enough of them, I could adapt to just about any new language or SDK in the IT area. There are lots of new technologies released every year, and becoming an expert in any one of them still seems like an exercise in rote repetition. I've always favored breadth and generalization and novelty, so I guess I never really became a true expert in any particular one.
My other lifelong interest aside from programming is in applied mathematics.
My university degrees focused on computational and numerical aspects of AI. I studied machine vision, machine learning, artificial intelligence, and wrote quite a lot of MATLAB code for these subjects.
My graduate degree focused on machine learning via numerical optimization. I was particularly interested in time-series and sequential data, and that's what led to my "heart sounds" project and thesis.
Some people like math because of its symmetry and intrinsic beauty. I just like it because it lets you solve difficult problems and solve them consistently.
I've always kept a mathematical approach at the top of my mind when trying to write programs. It led me into probability theory when I was young, and into artificial intelligence when I got older. So many of the world's problems can be approached with mathematical techniques.
Finally, I never lose sight of the fact that automation is replacing traditional office labour and information processing tasks for humans at an unprecedented rate. It's fairly easy today to write a program that can vastly outperform a human's abilities, and can be replicated infinitely or run on massive scale in cluster hardware, effectively destroying entire job pools. It's up to us, the authors of such software, to exercise prudence and consideration when designing such systems.
Ask me about:
- My cat, "Link"
- Being Vegan