I learned to program from Interplay's Learn to Program Basic - Junior High Edition after my dad picked this software up for me in 6th grade. I used this software to death in middle school, but when I got a brand-new TI-83+ graphing calculator in high school, I quickly started using my trusty calculator to program instead. I wrote a scientific code to simulate how the moon orbits the Earth using freshly-learned physics, a text-based psycho-analyst program inspired by the early chatterbot ELIZA, a program to calculate (and archive) as many prime numbers as my calculator could store, a program that did conformal mapping, a couple small games, and more. In my senior year, I saved up and bought myself a TI-84+SE because I had run out of the 22k of RAM on my TI-83+.
In college, I took a course at Calvin College (CS-214) in which we learned four very different programming langauges — C++, Ada-95, Smalltalk and e-Lisp — to give us a flavor of different programming language styles, concepts and paradigms. We also each chose a unique fifth language to learn and present as part of our final project. Due to my interest in scientific computing, I learned Fortran-90 and used it to implement John Conway's Game of Life. This course had as its goal for us to be able to learn a new programming language in two weeks. I consider this course one of the most valuable I have ever taken because I have needed to learn syntax and new languages quite often since then.
Later, I took another course at Calvin College (CS-374) about high performance computing. We learned how to program a supercomputer by getting each individual piece of the computer to talk together. In graduate school, I used these skills to help develop a next-next-generation framework for petascale dynamo simulation as part of a summer internship at NASA's Goddard Space Flight Center in 2012. I also had some opportunities to learn to use a graphics card (GPU) for additional computational speed. Through all of these experiences, I became hooked on high performance computing (HP)! I love thinking through different algorithms in serial and in parallel. I love using computational resources to solve scientific problems.
To date, I have learned the following languages (or pseudolanguages), with my familiarity with them indicated in parentheses:
- General-purpose Languages:
- Fortran 90/95 (plus some 2003) (extensive)
- MATLAB (extensive)
- Java (heavy, intermittant use since 2012)
- C/C++ (heavy prior to 2011 and then in 2020, light since then)
- Python (moderate)
- Ada-95 (light)
- e-Lisp (light)
- Smalltalk (light)
- BASIC (heavy in middle school, haven't used since)
- Excel VBA (light)
- IDL (very light)
- Scripting/Utility Languages:
- LaTeX (heavy)
- BASH (the Bourne-Again SHell) (heavy)
- Makefiles (heavy)
- TI-BASIC (heavy prior to 2006)
- General *NIX shell commands (heavy)
- Web Design Languages:
- HTML / HTML5 (moderate)
- CSS (light/moderate, as you can probably tell by this website)
- PHP (very light)
- Javascript / JQuery (very light)
- Software "Pseudo-Languages":
- vim (moderate)
- Gnuplot (moderate)
- PBS (portable Batch System) (moderate)
- Noteworthy Libraries:
- MPI (heavy until 2010)
- FFTW (heavy)
- CUDA (compute-capability 3.0 and below) (moderate)
- OpenMP (moderate)
- OpenGL (including JOGL) (light)
- SDL (light)
- Computing Environments
- Operating Systems
- Mac OS X (heavy)
- Windows XP / Vista / 7 / 8.1 (moderate)
- Unix / Linux (especially SUSE, Gnome, Ubuntu) (moderate/heavy)
- IBM's z/OS (light)
- Hardware
- Supercomputers (various, including batch job submission) (moderate/heavy)
- Local Area Network (moderate)
- IBM's z-Systems mainframe (light)
- Web servers (light)