Tuesday, April 30, 2013

I Didn't Want Computer Science

Three weeks from now I will be shaking the hand of Dr. Freeman Hrabowski, the president of my university. I will thank him for his efforts and I will receive a fake diploma to hold on to until my real one comes in the mail. Three weeks from now, I am graduating with a degree in Computer Science, and the most important thing I learned in college is that I didn't want a Computer Science degree.

What I wanted was to develop applications, write games and apply my knowledge of programming to create things which would have astounded my younger self, and sometime still astound me today. Turns out, there is a very big difference between this and Computer Science.

Computer Science is Theory

I didn't know going in that Computer Science is entirely theoretical. My early classes did not reflect this; in fact, looking back on it now I think there is a bit of an identity crisis going on within the world of CS. The first class I took taught basic programming skills with Python. The second and third classes I took were Object Oriented Programming and Computer Logic. The OOP course was taught entirely in Java, explained how to use Java, but then told us they weren't teaching us Java. What they wanted was to teach OOP, what they had to do was give us Java as an example.

Computer Logic was entirely theory, and was the first class that got me thinking about this topic. Every time I ever said I liked to program, I was told Computer Science is the degree to get. Computer Science is the programming degree. I can understand now why everyone has that misconception.

I went on to take a few more classes with a lot of programming, but after the 300 level of courses, that just phased out. No longer was I doing what I loved. The entire second half of my time in college was spent studying the theory within Computer Science. Now, I can't speak for all universities, and I know there are a great deal out there who offer applied CS and theoretical CS as separate tracks, but the issue still runs through the majority of schools.

Computer Science is Important

Blindly programming without knowledge of how things work is terrible. To be able to produce quality code, you have to know how things work and how to work things beyond the basics. You need to really understand recursion and you have to know how trees work and how to make use of algorithms. Without the theoretical side of things, a developer is only half as great as they could be. I am not denying this fact. However, everyone is different. Some people thrive more on the theory, some thrive more on the application. Teaching to the theoretical can snuff out the application just as much as teaching the application can overlook the theoretical.

In fact, finding the balance between the two based on the intended work of the individual can prove to be the best way to go about things. For me, I went outside the curriculum and practiced application on my own. I would take what we were taught and apply it to whatever I could in order to learn the side of things I felt we were missing out on. That would be fine and dandy if I wasn't simultaneously being told to give up on that.

Computer Science is Not Selective

The biggest outlet I found for my desire to program was in web development. I fell in love. I started with what most people start with, basic HTML. That was a long, long time ago. From there I stumbled into a giant PHP codebase and taught myself from that. Eventually, I was driven to learn new technologies and systems, all the way up until now. My latest love has been NodeJS, which I feel does exactly what I need it to do to scratch my development itch.

I can't tell you how many times I've been told things like "web development is a useless field" or "if you are planning to do web development, you should just give up now". These are direct quotes from professors whose classes were required to be taken in order to get my degree. Every time these kinds of statements would be made, my friends around me would turn and smile because of how vocal I am about my passion for web development. Once, I was even told sternly that I won't be the next big developer. An industry mentor who I was paired with told me, word for word to give up those dreams. I wouldn't have it.

Sure, the chances of striking gold with something I make are low, but that won't stop me. That isn't why we do this. We do this because we love to do it. Making money is great, sure, but this is more than a job to me, it is who I am. This is what I spend my time doing, and telling me not to is just damn wrong. Computer Science doesn't belong to one field or another. Don't lie to yourself and say that one field is better or worse than another. We all need everyone else in the field in order to continue driving ourselves further into the technology.

Computer Science is Misunderstood

The general public would hear "Computer Science" and have no idea what it means. The informed public would hear "Computer Science" and say programming. The CS crowd would hear "Computer Science" and have no idea what it means.

As a student who is finishing up his final work in the degree, I don't think I could give a direct answer to "What is Computer Science?" I would probably fumble around with my words and mention programming and theory at some point, but nowhere did I get a clear definition of the degree. I can't say for sure, but I don't even think the faculty knows what they want it to be, either. Some wanted us to program, most wanted us to research, and nowhere were we told how any of this works out beyond the realm of academia. I relied on internships to teach me how it all works in the field, and that is what this is really all about, isn't it?

I don't think we all collectively know what we are doing with the idea of Computer Science. Do we just not have a better word for either side of the debate? Is it even a science? Is it an engineering degree? You could say it is akin to a Physics degree or you could relate it to an Electrical Engineering degree. Which is it? Are we implementing or researching? Researching via implementation? Can we make that decision for ourselves?

Computer Science is My Life

At the end of the day, I have learned a lot. I began college with what I thought was a good understanding of programming. I ended college with a better understanding of programming, but there is an endless realm of knowledge and experience for us to explore. You can be an expert in one thing and know nothing about something else. The problem is, we have a hard time understanding that and a harder time teaching to that philosophy.

I didn't want a Computer Science degree, but how can you want something that doesn't have a definition?

I wanted a Computer Science degree that doesn't currently exist.

~Michael

Sunday, April 14, 2013

Users Aren't Stupid - It Just Means We've Failed

Take a step back and really look at your latest project - is it user friendly? Really user friendly?

A lot of developers seem to be getting into this habit of just being used to their own work, and when it comes time for real users to try the product, the age-old "well, users are just stupid" excuse is used. Can we collectively retire this mantra now? I mean, it's 2013. While you could say "yeah, it's 2013, people should know how to use computers," you could also take the better path and say "yeah, it's 2013, there is no reason why my design should be this poor."

It is our job to guide the user

At any given moment, there should be a clear, decisive option set for the user to be able to make use of. After all, that's what 'user' means. You are more than just a developer, you are the one responsible for removing that confusion that scares people away from technology. It's important to shake that power-user mentality and get in the mind of the general user. Too often, we settle for 'good enough' when we shouldn't be settling for anything less than perfect; and it isn't even that difficult to reach that point.

While 'perfect' may be a bit of a stretch, there is such a simple set of guidelines you can follow to make sure that you don't leave anyone hanging.

It is the user's job to guide us

This sounds really cliche, but it is very, very true. Watching where users get stuck is such a useful method to improve your project. Base the entirety of your design around making sure the user doesn't get stuck, confused or bored and you will see a huge improvement. This sounds obvious, but the serious lack of attention to these issues across the board is the #1 cause of what I like to call "neckbeard design."

FunnyJunk - Suffering from Neckbeard Design

Less of more, more or less

It's time for us to really focus on what user facing websites and applications are about: the user. Your next killer app idea is nothing if John Smith opens it up and closes it immediately because there is too much going on, or no direction at all. You'll notice more and more sites are moving towards the big, beautiful start page design, which is wonderful for the user. Effortless explanations of the website and big in-your-face buttons to sign up or get started help keep attention and retain use. Conversely, putting information the user doesn't care about up front or cluttering the main page will likely scare off your audience (unless you're targeting other power users, which is an entirely different topic).

tl;dr - Come on y'all, lets make life easier for the user

A little extra care goes a long way. We can't expect everyone who uses our products to be capable of navigating the ins and outs of every section of a computer, and we can't expect them to figure out our product without a little of our help. They aren't stupid, we just failed designing our stuff.

Tuesday, December 4, 2012

Project Heights - The Simple JS Game Engine

If you've ever been staring off into the ether and thinking about some sort of story, concept or idea for a game, then this is for you. I have been spending a bit of my free time (which is dwindling, fast) working on a simple, elegant game engine written in JavaScript. While I know that some others exist, I have never been one to back down because there is "competition." I'd actually prefer to think of them as a list of things yet to be done.

The whole idea behind this engine is to give the developer everything they need to get going without adding a bunch of overhead. Ideally, the developer would be able to drop the plugin into their directory, gather a few materials and hit the ground running (a game).

I can't do this alone, however. Eventually I would like to throw this into the open source world once it has matured a bit, but until then I am keeping it as a local development project. Although, I have made a quick signup form for anyone interested in joining a beta test / collaborative development stage. This stage will hopefully be coming soon (read: early 2013) and will essentially be a big game dev jam. I can't think of a better way to work on an engine than to make a bunch of games with it!

If you are interested in joining the "testing," sign up with the form below. All I need is an email and a name. JS experience is preferable  but I would like a few JS newbies as well to see how easy it is for them to pick up the engine and roll with it. Git experience is a plus as well to help collaborate on discussions and development.


Until next time,

~Michael


Tuesday, November 6, 2012

Everyone Should Make a Game

Everyone who has the ability to make a game should do so. It doesn't matter if you play video games, or even if you like video games - the process of making even the crappiest little interactive system unlocks some hidden creativity somewhere in your mind and pushes so many boundaries.

Before web development was my primary focus, I was extremely interested in game development. Beginning with making asynchronous (in the most ridiculous stretch of the word possible) games in HTML and eventually moving on to using PowerPoint's animation and button linking system to make my "games," I was making just about anything I could think of. Obviously, nobody ever actually played these, but it was a great segue for me into learning how to develop actual games.

My next step was GameMaker. If you are even remotely interested in in going into game development and you haven't tried it yet, get GameMaker right now. It is honestly the reason why I am into programming to begin with. It was how I taught myself basic programming and development and essentially, I accidentally learned how to program.

Without rambling on for much longer, let me make my point. With all of the libraries, systems and platforms that are out now, it is easier than ever to get right into making some little thing. I'm not saying everyone should run out and make Braid or Cave Story, but just something, anything. Make a little circle jump around on platforms collecting other circles. Make a little dude run around a grid solving puzzles. Anything you can think of. If you are a web developer, try your hand at making an HTML5 game with that sweet, sweet <canvas> action. If you are a mobile app developer, throw a little something something together and stick it on your phone. Who knows, maybe it goes somewhere? It is always worth a shot.

Game development is what I feel has made me a creative person. I really think it can do the same for you.

Tuesday, September 25, 2012

Thank You, Foil-Hatter.

I'm no security buff. Sure, I know enough to make sure that the basics of my sites are good to go; I'm not about to release a system with forms ready for injection, but at the same time, if you looked me in the eyes and asked me how exactly an HTTPS connection is encoded, I'd simply smile and change the subject.

Recently, I have been noticing two trends, one of the general public and one of the tinfoil hat wearing CS crowd. Actually, make it three trends, but I will get to that one later. Let's start with the first two, and how about we make things simple and use the easiest target we have right now: Google.

To the general user, Google is straight magic. Type in words, get results. Recently, Google has begun to use more and more gathered information to help tweak the results of their search in order to provide better service to their users. To me, this is a good move! I get better results based on what I tend to search for? Sign me up! To the general public, this is transparent, and simply looks like Google is doing a good job, perhaps a little better than what they used to do. Then there's the hatters. "Big brother is watching! Personal information is being intruded upon and EULAs are destroying the universe! Don't use Google! Use duckduckgo!"

To be fair, most of the people I am talking about are not crazy. Not at all. In fact, they are much smarter and well versed in this field than I am and I should probably listen to them more. The problem is that while yes, they are being safe, they are shutting down a huge area of innovation - personalization from use.

The real issue comes from the third category I mentioned before: the people who don't understand the matters, but hear buzzwords from the security buffs. That is when you get the headlines, and that is when it all leaks out to the general public, and that is when the "magic" turns into Skynet. This causes a lot of issues for the developer, causing people to not trust most services, just because of a few bad apples. It is a touchy topic indeed, because those bad apples do tend to be really bad apples, but when it gets to the point where we shelter ourselves from some of the better uses of these "big brother" type systems, it is really just counter-productive.

Let's be clear here, nobody at Google is sitting there, reading off what searches your account has made, laughing at you when "male enhancement" shows up. Nobody is reading through your juicy emails and going, "Hey! Mark! Take a look at what this guy has been doing!" That is just silly. The problem is, the real security buff probably know this, but the way they talk makes the spillover sound like it really is happening.

At this point, I've done nothing but bash the buffs, yet the title says "Thank You." That is because we really do owe it to the "foil hatters" who take the time to be skeptical about everything. If it weren't for the people who don't trust a thing and instead roll their own answer to some problems, we wouldn't have a lot of the great services around today, and the open source world would be crippled. On top of that, you help tighten everything up by calling out these intrusions of privacy, and when they really are intrusions, you get them fixed. At the end of the day, you're just doing your part, and for that I thank you.

But seriously, turn on your freaking javascript so I don't have to cater to you. I already have to deal with IE.

~Michael

Saturday, August 18, 2012

Intercom.js - "It's Pretty Cool"

I have this strange love for writing things that exist, but differently. I think it gives me the feeling of contributing to something, even though more than half the time it doesn't end up working out.

In this scenario, I actually found that this hobby ended up getting me to make something rather useful, really. A long time ago, I made a little terminal-esque thing on the web which I used to operate my browser as if it were a terminal. I'm a nerd. Anyway, I eventually took that idea and began working on something that could be much more like a terminal, but extendable through modern web technologies and applications. Thus, Intercom.js was born.

I actually released this project a while ago. It got a decent acceptance from a few web developer communities. Since then, I have made a lot of improvements to it, and it is all open source on github. You can find the repo here: https://github.com/twisterghost/intercom/

Personally, I have used this system for a lot of things. Administrative backends, for example, are a breeze. Throw a few script files on your server, make a few ajax requests and boom, you now have a client-facing server command line. The whole project began when I found I could not install certain programs with the hosting I was using for a project. I had a jailed shell, so I made my own, essentially. Since release, I have seen some pretty neat things built with it. Among them, a youtube terminal client, a versioning system (not released publicly) and even a few text-based games. The best part about the whole thing is that at the end of the day, it is a website, so you can insert rich content into a cloud-based terminal.

Similar projects exist as well, but I wanted to build my own system from the ground up as simple as possible for others to enjoy, so, enjoy!

~Michael

As a side note, I am more than willing to accept changes made from other developers into the main branch, so feel free to fork & hack on it!

Sunday, July 1, 2012

Trello is awesome and if you don't use it you should

I just launched v2 of my personal site. Removed pages, added hipster minimalism and obnoxious banter.

I have been using Trello a lot recently for the management of not only my projects, but life in general. If you haven't at least tried it out yet, you are really missing out. Trello is project management software that is absolutely free. You organize objectives into cards, cards are put into lists and can be given labels and be assigned to people all with an easy to use online interface. Their mobile site isn't too bad, either.

Anyway the point of this post isn't to advertise for Trello, but go check it out after reading this.

As I mentioned in my previous post, I am working with a team of developers called Ampquot to bring some sweet projects into fruition. We are working hard on our first service, and while I don't want to say too much about the project, it is a music service designed for parties and other social gatherings. We are really excited about the project as a whole and are doing everything we can to make sure it comes out really well. Soon enough (not too soon though) we will be needing beta testers from around the world, so if you are interested in that, check back here every once in a fortnight so check up on the status of the project. I will post what I can about it here.

Another noteworthy topic is what will be the driving force behind Ampquot's projects: The Ampquot Data Management System (ADMS). The ADMS is an in-house project which will provide a set of tools for developers to easily spin up a user or data centric website without having to manage their own database. This will be used at first for our own projects, but we are going to be developing an external API for other people to use this system. I am personally very excited about this, because if you knew me back when I was working on Whirlwind, it is essentially the natural successor of that.

Thats all I got for now. Go organize something on Trello now.

~Michael