Path of a Polymath Programmer Part 7

I’ve covered diverse topics on my path to becoming a polymath programmer.

  • I went sleuthing with Encyclopedia Brown.
  • I’ve been a warrior, a mystic, a knight, a mutant, a thief, a superhero and many more in role playing games.
  • I went on adventures with computer super spy Orion.
  • I was (and still am hohoho…) phenomenal at typing.
  • I taught myself the Japanese katakana and translated them into English equivalents (whenever possible).
  • I’m well versed in 3D graphics theory and appreciates the beauty in art.
  • I studied computer virus behaviour.
  • I did game development and researched on related topics.
  • I came into contact with the demoscene and appreciates the art and programming involved.

Notice that most of the above had very little to do with programming itself, yet contributed significantly to my development as a programmer. Read up the previous articles at

Your path is most probably very different from mine. The important thing is that you experience, understand and appreciate the many different fields involved. Programming is just a skill. Your ability to understand concepts and translate that into code is the most important thing you’ll ever have.

Joining the workforce

So my malleability and ability to learn fast was tested when I left school. I had to learn how to write resumes and go through interviews. For seven months (yes, I kept track) I was unemployed.

My big break finally came and my recruitment agent called me up one fine afternoon to tell me I’m granted an interview with a local big company. I had just collected my paycheck from my part-time stint as a data entry personnel. Unemployed again, I was wondering what to do next. That call was a lifesaver.

On the day of the interview, I had to call and say I’ll be late. Bad, bad, bad. It was none of my fault, really. The (Mass Rapid Transit) train I was going to take to reach the company had some trouble, and I was stuck at the train station for a while. Still, I was worried out of my skin.

When I reached the company, I found they rescheduled the person after me to get interviewed first. Determined to make the best of the current situation, I calmed myself in preparation for when it’s my turn. The interview turned out ok, and the interviewer seemed impressed by my qualifications in applied mathematics (cool!). I was eventually hired, and on hindsight, I think the interviewer hired me because he believed I’d be a more well rounded addition to his team. His team members were mainly from the computer science and/or computer engineering background.

[short digression]
So, in the interview, his last question turned out to be an IQ question. You were given a cube, and then had it painted on all 6 sides. Then you cut it with 2 parallel and equally spaced slices from the top. Then another 2 parallel and equally spaced slices perpendicular to the 2 from before. And then you cut it horizontally with 2 parallel and equally spaced slices from the side. Basically you’re left with something that looks like a Rubik’s cube. The question? Give a breakdown of the number of smaller cubes thus cut with the respective number of faces painted on those smaller cubes. I’ll give the answer at the end of this post.
[end of digression]

I finally got a programming-related job! My first two weeks turned out to be nothing like what I imagined. I only knew C and Matlab from university. I picked up a little C++ and Windows programming and OpenGL and DirectX on my own. Only the C language turned out to be useful.

The backend programs were written in C. Fine. They connected to the Sybase database. The what? Thus began my first crash course in the language of databases: Structured Query Language (SQL). I learned how to create tables, run select queries, do inserts and updates and deletes.

Then I had to deal with Delphi components. The Windows interface was coded in Delphi and I didn’t know anything about it. Another crash course from a fellow colleague since I’m to support the program.

The .NET phenomenon was still in effect, so the web application interface was written in VB.NET with Visual Studio 2002 (subsequently upgraded to 2003). Didn’t know VB nor VB.NET. Didn’t know Javascript. Didn’t know VBScript. Didn’t know Crystal Reports. It was terrible… and I haven’t even touched on all the business logic and systems and documents I had to go through.

The job changes

Well, after 2 years as a contract staff at the company, I decided it was time to move on. Due to my expertise in the team’s system and business logic, I was too valuable to use for programming, yet not valuable enough to be included in higher profile meetings. I was basically juggling Excel spreadsheets for the users and acting as the helpdesk.

I love programming, and I didn’t like being stuck with mainly administrative and system support work. So I left. I joined a startup company as a C# programmer. I learned first-hand the day-to-day tasks involved with getting the first software product out.

It was also unimaginably unbearable. The stress involved with producing a profitable software application, on the first try, at a startup, overwhelmed me. I prefer a more conducive environment for thinking. So I left, again.

I got hired next as a C# programmer with a software agency. I was then sent to work at another company with the agency’s team that’s already stationed there. The job was to create an enterprise system software (yes your warning bells should be ringing right about now) for the company’s workflow processes.

Despite some of the flaws I encountered, I still learned tons of stuff. I learned about custom web controls, really separating the business logic (like, onto a different web server from the application server) and handling language resources (for an international audience). I learned to work with people from many countries and in a big software team too.

When I reached the end of my 4 month contract, I was actually offered a renewal. But I had other plans. The pay left a little to be desired, and I really wanted to feed myself better. I asked around and got my job from the first company back! I’d be in a different team but still close to my original team. Cool! I’d be experiencing a different work team dynamic.

So at the new team, I was tasked with creating a .NET web application from scratch. There were tons more project deadlines to meet, though the projects were smaller in size. I even got to do some public speaking, presenting (web) applications and training users. And I’m still here as of this writing.

Getting to the blogging

I’ve amassed a ton of experience, both programming and non-programming. And I wanted to share them. I wanted to express my ideas and let people know about them so they can learn from my experience and mistakes. Then I found this site by Yaro about entrepreneurship. He’s also a blogger.

I read through his blog posts and found them really informative. So when he announced that he’s going to teach people how to blog, I signed up right away for his Blog Mastermind program. I mean, a blog is a fantastic vehicle to share my knowledge and experience. Compared with my previous web site creation attempts, a blog is probably easier to maintain.

Well I’ve wanted to be more actively involved in online communities, particular the programming ones. Since Yaro also talks about forums and communities, I figured it’s about time to start. And found Dream In Code. The site offers programming help, has great people and I love the dynamics happening there.

The last word?

So, there you have it, my path of learning and becoming a polymath programmer up till now. It’s by no means complete, because I will continue to learn new things and as a result, be a better person and ultimately be a better programmer.

Share your thoughts!

*The answer to the IQ question above is 1 with 0 sides painted, 6 with 1 side painted, 12 with 2 sides painted, and 8 with 3 sides painted.

Multilingual programming

How many programming languages can you code in? 3? 7? Are you proficient in all of them? “Well, [insert favourite programming language here] is the greatest, and I don’t need anything else!”

Wrong.

If you’ve done any work in a professional capacity, then you’ve probably encountered programs written in archaic languages of old and cutting edge software and everything in between. And sometimes, you need to make them work with each other.

For instance, data could be sent in a text file. It had to be processed with shell scripts in the Unix environment with programs written in C. It’s then dissected and inserted into the database. Then it had to be available in other systems. Problem was, the data in the database wasn’t sufficient. A choice had to be made: expand the data in the database to include more fields, or simply send the raw data to the other systems.

Either way, the other systems were on Windows servers. If raw data was sent, a program had to be written to read it in. Web applications were to be written for data display and manipulation using ASP.NET and C# and VB.NET. So the read-in program might as well be written in a .NET language.

Then comes reading and writing HTML, because even if the IDE was doing a good job of hiding it, sooner or later, looking at HTML would be inevitable. Then there’s Javascript and CSS. Then there’s interoperability with Java programs. And so on and so forth.

Working with different programming and scripting languages, learning the different semantics of operating systems, and reconciling the syntax of different databases. This is what’s going to make you a better programmer, a polymath programmer.

Dream In Code programming community

I can’t remember when it happened, but I had a sudden urge to join an online community. No, not one of those Web 2.0 communities where people Twitter to each other or Digg something. My friends had, over the years, invited me to join some online group or other. Like ICQ, MSN Messenger, then Friendster, MySpace and FaceBook. Never acted on it.

Those groups are like the really social groups. Sharing photos with lots of people. Talking, to lots of people. But I want to talk about programming. I want to talk about math and science and stuff. Somehow, the people around me don’t do this.

So I made up my mind, and went looking for a programming community with compatible interests. After searching high and low (Google helped), I found one that looks promising: Dream In Code. Using some spare time to browse through the site, I got a feel that seemed “right”. It’s a gut feeling thing…

Well, I’ve got to remember a lot of user IDs and passwords, so I’m careful about what I join. It’s a waste of brain cells to think up a user ID and password, only to find you don’t like whatever you signed up for. So after signing up, I went through the forums and tutorials and other pages to really get to know the people there.

The first thing I noticed was, there’s a lot of people asking for help in programming homework assignments. I’m fairly sure these people are students either in high school or university. This is different from the other sites I went to, where most of the problems stem from work related tasks. There are posts about linked lists, prime number calculations and recursion. I just find it unusual that there’s such a high proportion of non-work posts asking for help.

The second thing, and I really like this one, is also unique. It can be summed up as no effort, no code, then no help. The person asking for help must have done something, tried something and when all else failed, post the problem and the code. There must be a specific question to something, like why a certain code chunk doesn’t work, or if the algorithm is correct.

Dream In Code is help-oriented and cooperative. So far, I like interacting with the people there. My handle is “orcasquall”, and I usually browse the C, C++, C#, ASP.NET forums. See you there!

Path of a Polymath Programmer Part 6

I’ve covered a number of topics that have little to do with programming, yet contributed significantly to my programming skills. Here’s a recap of everything so far:

So I’ve been playing console games, interested in pencil-and-paper role playing games and I’m proficient in programming. Is it any surprise that I’d be interested in game development? And that’s what happened.

I browsed through GameDev.net for comprehensive game development guide material. Then I went to NeHe for all the OpenGL tutorials you’ll ever need. I also read up on independent game development on MadMonkey, and browsed GameTunnel for a feel of the games out there.

Since I’m going to be developing games on my own, I’d say I’m an independent game developer, as opposed to the professional game studios such as Square Enix (previously Square). As a hobbyist programmer, I was just looking to create games for fun. At that time, I was interested in creating role playing games similar to Final Fantasy. Researching on game development, I found I had a lot to learn.

There’s the design process, ranging from story plots and characters to weapon and battle system to resource management. There’s graphics to be rendered, and music to be composed. There’s a whole slew of stuff to be done, and all of them had very little to do with programming.

Well, I’ve got to start somewhere, so I began with what I could see, the characters and game world on the screen. I tested the recommended ways on rendering 2D character sprites and how to animate and move them. I wrote small test programs to try out rendering game world data, and camera movement. Luckily I went through a class on 3D graphics, so I could understand terms such as orthogonal/isometric view, point of view (POV) and field of view (FOV).

Then there’s menus. Battle menus. Item selection menus. “New game” or “Load game and continue” menus. I was hovering between using linked lists and simple arrays for storage.

Then there’s resource management. How do I store saved game data? I learned to write data to text files, and read them back and load them onto program variables.

I downloaded and printed tons of research material. I learned the file formats for the Windows bitmap file and music files of the .it (Impulse Tracker), .s3m (ScreamTracker) and .xm (Fast Tracker) file formats.

I learned the basics of design documents and why they’re important. I learned to see the overall view of a game development, which is essential a piece of software. This turned out to be useful in my career.

For a long time, I stuck with it, researching and testing and researching some more. And I still didn’t have anything playable to show for it. I was frustrated and my patience was waning. The only thing holding on was my passion for games, and even that was slowly draining away.

So I did the only thing that made sense. I let go.

Once I freed myself from the obsession that I must create something, I found the whole process more enjoyable. And I didn’t do game development anymore, at least not in the regular sense. I also went back to playing games more, and I started to really appreciate the effort that went into those games.

I still like reading up on game development stuff. I did all that stuff on C, C++, OpenGL and a bit of DirectX (this was where I got that Windows template used in my dissertation in part 5). It was tough because there’s a lot of plumbing that needs to be done. Now there’s pixel shading, anistropic filter and much better graphics cards. Now there’s C# and XNA Game Studio Express from Microsoft. Aha! Useful tools taking out a lot of the mundane and bringing back more of the fun. Maybe I’ll try my hand at creating something again…

The next obsession

Well, game development took too much out of me. But I continued to browse the game development web sites. Then I came upon a site where the author listed some of his favourite applications, games or otherwise. And that’s where I met “The Product“.

“The Product” is a demo. It is an application that runs for about 11 minutes, showcasing 3D scenes, special effects and accompanied with synchronised music. It is also 64 kilobytes in size.

That was astonishing! After my studies of game development, I realised that lots of game data was used. Even console games require memory cards to store saved game data. Then came along one small piece of software that creates an amazing visual and auditory experience. That just blew my mind away. Absolutely cool.

Creating demos is part of a culture called the demoscene. It had a rather unsavoury historic start, because it began as attempts to hack into programs and load some of the hacker’s taunts into that program. It was used to demonstrate the superiority of the hacker’s programming skills. The hack had to be small in size, and tons of creativity went into making the hacks as memorable (and insulting) as possible.

Well, the demoscene has evolved into something else. Something more artistic in nature. To learn more about the scene (as it’s called), I suggest actually downloading the demos and have a look. You can try these 5 amazing demos first. Then go to scene.org and pouet.net for more information.

Anyway, where was I? Oh yes, the product. I wanted to find out how it was done. All the textures. All the music. All the 3D scenes rendered. How were they stored?

It turns out that the demogroup who created it, wrote generic functions for generating textures, music and 3D models, right in the application. Like a class library of sorts. Then in the application, only the function calls are stored. And that’s how all that data was stored in just 64 kilobytes. You don’t store the data. You store the instructions for creating the data. Brilliant.

After watching the product, I wanted to watch more. I downloaded lots of other demos and watched them, over and over again. The special effects were generally better than the games I played. The music were generally of high quality, some mesmerising and some blood-pumpingly intense.

And then I wanted to create a demo of my own. Ha! Man it was tough. I started researching again. I found that there’s an electronic magazine about the demoscene called Hugi. It’s basically an application that runs and lets you browse through articles in an interactive manner, with music playing in the background. These people are so awesome…

With much passion and enthusiasm, I actually finished a demo. It’s called “Trying To Fly”. It’s about this wooden cuckoo bird wanting to escape into the bigger world, trying all sorts of methods to actually fly. Well, it never took off, pun not intended. BUT, I did learn the process of switching scenes, animation of 3D models and particle effects. Yeah, I wrote a custom particle system just for the demo. It’s actually kind of cool, and I think I’ll talk about it in another post.

Continue to part 7