Tuesday, May 1, 2012

From Hello World to Ray Tracing

Hello again,
This week I'd like to talk more about my background in computer science, and maybe some up-and-coming programmers may get some good pointers out of it. First off, I'm just finishing my sophomore year at Michigan State University. This past year I took the senior level graphics programming course (hence the ray tracing comment in the title), as well as the junior level algorithms course. But I wasn't always in such courses. I wrote my first line of code,
print "Hello World"
in Python version 2.6 in the fall of 2010. For those of you who haven't taken calculus yet, I'll break down the math for you: I've only been programming for slightly over 1 and 1/2 years. And while I admit to be no programming genius, I've accomplished more in this one and a half years than many people do in all four of their college education, and not just in the class room. And don't take this the wrong way, I'm not proclaiming myself to be some super genius who can fly through the curriculum like its nothing, I struggled all the way through just as everyone else. I will say that I worked incredibly hard, and made sure I got myself out there everyway I could (even including starting this blog). I will also say I made my class schedule pretty cleverly, making sure I was in the courses I needed to be as to not waste time with a bunch of classes I didn't care about.

I guess I should start from before college. I was homeschooled first through 12th grade, which gave me virtually no computer classes or programming experience. Not all homeschoolers are in such a situation, many do have chances to code. I, sadly, was not one. I always wondered what would have happened if I started coding years back, but sports and other highschool activities took priority. I did do two things right though, I took advanced math at Lansing Community College and always kept designing games, even though I had no knowledge of how to make them. I've pretty much been designing games since I was four years old, but only seriously thought of going into them as a career at about age 14. I had no desire to ever become and engineer, but as I researched more and more into the games industry, I realized how difficult it was to go into the industry as a designer who could do nothing else. By difficult, I mean impossible. Even students with resumes vastly more impressive than mine are often never make it into the industry. Around that summer when I was 14, I took a game design camp at Michigan State offered by the group Spartasoft, a group I would become far more familiar with years later. I was pretty much set on MSU at that point, especially being so close to home. But lets fast-forward to school.

College, year one.
I had decided to major in Computer Science Engineering, hoping to break into the industry as a programmer since I was good at math, and couldn't draw a stick figure to save my sorry life. It was in this first week I heard about Spartasoft, and was eager to join. I began attending meetings and making friends in that group, and tried to do a game jam or two (in Spartasoft, we have what are called game james, where we get together and make a game from start to finish as best we can in 48 hours), although I was pretty useless in them. I learned alot through meetings though, and was introduced to the Unity game engine, although again, I was near usless at using it. I took my first programming course which, as mentioned before, taught programming and basic CS concepts through the Python programming language. I loved projects, I loved the professors and the material, and because I enjoyed it so much I was also very good at it. The next semester I decided I wanted to take as many CSE courses as I could, these university required ones were far too boring and useless, I thought. As a result of this mindset, I currently still have very few of my university requirements met. While writing and researching have their place and are very useful, taking more CSE courses sooner gave me more time to refine my skills longer while in school and work at better jobs faster.

The next semester I took C++ and data types, as well as discrete mathematics. C++ was an incredibly fun course, and taught me a "real" programming language as well some usefull algorithms (linked lists, some sorting, etc.). Suddenly I wasn't as useless in game jams, which we primarily use C# for. I was still lacking in my skills with Unity, a thing I would shortly rectify. I also got a decent job working at one of the technical helpdesks at MSU. This gave me a decent amount of technical experience I could put on my resume, and also was a pretty cool job. I got this job by pretty much applying everywhere I possible could, even if I seemed unqualified. From this I learned never to say "They probably won't even look at me." and not apply. They might not, but what if they do? Better than flipping burgers if you can help it (if not, jobs a job, and no job is easy to come by these days).

Over the summer, I was bound and determined to learn Unity. I set out to make a number of simple games, and while I didn't finish any of them, I learned alot and gained a bit of confidence in making future games. I also kept my helpdesk job, and finished up what was left of my calc requirements. I also saught out a better job, and once again applied everywhere without any thought of mopy "they won't look at me, because I'm still a sophomore" thoughts. I was also eager to prove how much I had learned, and take a job where I could actually program. I contacted my old Python professor who thankfully remembered me, and was able to get a job as a teaching assistant for him that fall. I was also able to secure an internship at Techsmith Corporation for the following spring semester, which I am now finishing up. The interview was pretty difficult for that, and it involved whiteboarding, which I had never done before. My advice for first time whiteboarders would be to bascally find some problems online, and work them out in front of your friend while they watch. Also, always say what you're thinking while to whiteboard (assuming its in person). They really don't expect you to answer all the problems perfectly, but are looking for your thought process. But I could ramble on about interviwing forever, maybe a future article on the subject.

Fall of Sophomore year.
Well this fall I took CSE 335, software design. This was the hardest class I've ever taken. It was also the funnest class, as well as the class I learned the most in. While I spend 20+ hours a week on this class alone, and barely scathed through my other classes because of it, it was worth it. I don't know about the spring semester of the class, I've heard mixed things. But I can attest to the greatness of the fall version of this class with Dr. Owen. To any MSU CSE students, take this class in the fall! And one year after taking the class, I found myself as a teaching assistant for the Python programming class. It was wierd, I admit, remembering all the projects I had done not so long ago compared to where I was now, but I enjoyed it. Hopefully I taught some people some things too! More importantly, I was useful, and even team lead, in game jams. I made some decent games that are now online (which I will put on my web site, which I will make soon..). But game jam games weren't enough, I wanted more game dev. I made an announcement at Spartasoft that I was starting a game design team. Many showed interest in joining, and over fall we designed a game that barely ever got started. We overscoped, but in the process I learned much about leading a team and established workflow patterns, and made some good friends in the process. In the fall I was also able to take IPhone game design, which, while being new course with many kinks to be worked out, gave me a pretty decent understanding of IOS games and Objective C. Being so young in all these advanced courses started becoming apparent though, as my classmates began inviting me to the bars with them, only to realize that not only could I not go, but was not going to be able to go in the near future.

Spring.
Spring saw the return of my game team, which got far more awesome and productive. We named ourselves Slightly Serious Games, and I took the role of AI programmer and team lead. I also assigned more definitive roles for all of the team. We should be making a website soon and putting our current work up. We would someday like to start ourselves as a startup company, but we'll see how that goes. My next article may be more about my team and our challenges, so I won't go too deeply in depth with that now. I also took the senior level graphics course and loved it, especially since it was taught by Dr. Owen again. I hope to take more classes with him. This semester also saw me in my first internship at Techsmith, a job I thoroughly enjoyed. I learned alot, especially about using C# (current favorite language). I also had alot of opportunity to practice my web and server skills, as well as more Objective C and some Android dev.

My contacts through Spartasoft have helped me secure my first real game design job this year for the MSU GEL lab. I will be making games for various contractors. I was also elected into Spartsoft's eboard as secretary, a chance to give back to new game designers to help them enjoy school and learn as much as I have. I'm also taking operating systems over summer, and taking the grad school computer graphics class in the fall. I hope to continue working with Slightly Sirius over fall, and plan on taking the CSE Capstone this spring as well as more CSE grad school classes next fall. I hope this article showed that with alot of work and some decent planning, how far someone can go in a year. I hope to keep accelerating at the same pace I have been, and making better and better games as I go.

--daviD Ward

No comments:

Post a Comment