Monday, February 10, 2014

High Level Tools Versus Low Level Coding

As someone who is constantly trying to hone my technical abilities, I look around at what tools other people use when developing all the time.  I've noticed a very big trend right now with using tools such as Unity or UDK for game development for example, or tools like the Titanium Mobile Development Kit for creating a simple mobile application.  This even extends to a lower level though when coding, such as using GLFW when creating a window in an OpenGL program, or using a 3D library for Javascript instead of just WebGL.

Why these tools are chosen instead makes sense though, as developing a lot of these on your own would take a ton of time away from just making your application.  Just creating a window to use with OpenGL is incredibly time consuming, so why not just use an external API to do it for you?  Especially since these tools will allow you to go cross-platform automatically when done correctly.

Yet I constantly wonder about whether these tools are good or not though.  I believe using these tools takes a way a huge part of learning to code, because you suddenly don't have to worry about what's happening behind the scenes.  You start trusting that these tools are doing the best they can at whatever you are expecting them to do.  Is this a bad thing though?  On the one hand, it allows for developers to focus more on developing their applications, and less dealing with bugs in code. On the other hand, if a bug comes up in the tools, they may have no idea how to fix it or get around it properly.

These ideas bring in another concept too though: are you learning how to code, or are you learning the tools you use?  Going one step further, should this count as coding, or should it count as something else?  If you use an entire drag-and-drop IDE, should that be considered coding or does there need to be a new category for this specifically?  I think a lot of these questions honestly come down to opinions and what exactly you are making with these tools.  How much are you using from others, how much are you making yourself, and if you run into a problem, can you solve it, are some of the important factors that I think should be considered.

I don't consider myself in any place to judge on whether it's more important to learn more about using tools or how tools work, but I do think it's something that should be brought up.  Me personally, I like to learn how the tools work, and then apply those uses when I use tools.  This leads me to do a lot of unnecessary work, but I feel confident about what I am learning as a result.  Does this mean that you can only feel confident this way?  Of course not.  This is just my personal preference.  That being said, what are your preferences?  Do you prefer just diving into making your application, or do you like learning what the code behind the scenes is for your tools?