David Medina

July 6

0x001: Programming Padawan

Video games were my inspiration for learning how to program. Excited about making the next Final Fantasy or World of Warcraft, I took one of the "Computer Science 101" classes during my undergraduate studies. Oh man was that a let down (゜-゜). The course introduced C++ and some basic object-oriented concepts; I still smile when I remember calling std::cout "kout" and std::cin "kin". Luckily I met Alex Wilson in the CS lab who helped me learn the C++ basics. He introduced me to std::stringstream which would take any type and make it into a string (amazing stuff!). However, the class was extremely boring and didn't teach anything that I thought was important to game development.
The following year, I took "Object Oriented Programming in Java" with Dr. Robert Schweller which turned out to be the most enjoyable class I have ever taken. Each course assignment was posed as a challenge to build a mini-game, implementing the new Java features we learned. I probably put 15 hours a day working on the final project (who cares about other classes when you're making a game (ノ°▽°)ノ!!) Unfortunately I didn't get to finish it in time, but it was definitely a fun project which taught me basics (of basics) in game development.
Later that year I saw the Social Network, a movie with one (or maybe two) scene(s) where they talked about emacs. Curious about it, I googled it and attempted to program with emacs. When I asked a professor about it, he pointed out that people spend more time thinking about algorithms as opposed to programming. A reasonable point and he probably knows his stuff so I gave it up at the time. Aside from a few courses, I stopped programming to finish my mathematics and core requirements until I reached Rice.
During my first year at Rice, I took two courses, CAAM 420 and CAAM 520, both taught by Dr. Tim Warburton (my advisor). He taught the basics of emacs, svn, bash, C, C++, OpenMP, OpenCL, CUDA, and MPI. Although not as fun as making games, I got the most out of those two courses than any other courses I took. I learned what I still believe to be the most important parts in programming: my programming environment. I spent a lot of time setting up my bash environment to use the terminal more efficiently. I picked up emacs again and used it for anything not GUI related; as is any text editor, turns out it is useful! Additionally I learned to rely on version control to make accidental file deletes . . . well it's still bad, but not as bad.
-﹏- still no game development though . . .
During my second year, I got lucky my advisor taught OpenGL in his CAAM 420 course . . . which I happened to TA for (•̀ᴗ•́)و ̑. I managed to learn and implement a mini-game using C++ and GLUT in under a week to code a cheap minecraft first person shooter. My advisor put two Raspberry Pi as prizes to the best two games . . . I apparently wasn't eligible for it as a TA (however, he did end up giving me one two years later (•‿•)).
Shortly following, I had the chance to collaborate with my then office mate and good friend Rajesh Gandham in a tsunami simulation code. To get realistic-y meshes, I developed a short C++ and OpenGL code to provide user-defined world coordinates. Together with GMSH, we were able to get some neat meshes to run the tsunami simulations with.
Due to graduate work, I had to halt on working with cool stuff and move to useful stuff (   o ︵o). I did however end up meeting a lot of cool people from industry and national labs. Constantly working on numerical codes using OpenCL and CUDA led us to work on OCCA. I finally was able to get my degree by working on OCCA and will continue making it better. Before I go, I did have another cool gif to share. Along with other cool toys, my advisor got two leap motions and an Oculus Rift. While I didn't have time to work with the Oculus Rift, I got a small leap motion code running with a finite difference simulation.
In the famous words of Forrest Gump: ". . . and that's all i have to say about that", for now.