Saturday, October 19, 2013

Reminder to My Future Self

When I become a spectacular programmer, I want to look back on this and be reminded of something that, to me right now, is an incredibly major deficiency in the realm of an amateur looking to expand his/her abilities:  tutorial quality.  As far as quantity goes, sure.  Sometimes it feels like everybody who's spend a few months learning to write programs has gone on to share their "expertise" in tutorials all over the web.  As a result, the internet is cram-packed with "Hello World" lessons, followed by a VERY similar chain of lessons leading up to some basic concepts of objects and such, but once you grasp the beginner stuff (and by beginner stuff I mean the VAST majority of the tutorials out there- a LOT of tutorials would have you calling yourself "intermediate" within a handful of hours of video tutorials max), there isn't a whole lot out there.

What there IS when you feel ready to venture into something more than very basic logic that prints to a screen or an actual user interface is extremely shaky at best.  I've found a good number of video tutorial collections that, while they may teach a pretty good number of some very useful concepts and techniques, leave something to be desired when it comes to overall quality when it comes to their abilities as teachers.  I hate to call people out, but I'm going to anyway.  To start, I got the basics from the YouTube users JoseVidal, TheNewBoston, and MrDeathJockey (who now calls himself indev0r on his website, though I don't actually know at this moment if he has gone on to make a new YouTube profile for himself or if he simply continues to use MrDeathJockey).  As far as quality goes, JoseVidal and TheNewBoston have my utmost respect.  As for MrDeathJockey, I can't express enough how appreciative I am of the concepts I have learned from him, HOWEVER...  (see?  there's not always a "but.")

If not for MrDeathJockey/indev0r, I would not have learned nearly as much nearly as quickly.  I probably would have spent a tremendous amount of time trying to learn from java programmers who relentlessly use pre-made game engines.  Don't misunderstand me, I have nothing against the practice.  I fully believe that the best engine for your purpose is the best engine for your purpose, and that's that.  However, I also fully believe that a programmer should fully understand what goes into developing an engine and what coding the mechanics of such a library would/could be like.  For one thing, it makes it a LOT easier to use.  The other, and for sake of my topic today more important, factor is that cutting and pasting somebody else's work does not make you an "expert."  It doesn't even make you "intermediate."  So, to MrDeathJockey/indev0r, I would like to first express sincere gratitude for popping up on my search engine when I needed something a little more advanced than a System console based "wheel of fortune condensed to one pre-defined puzzle" game.  Now, for the "however."

My message to my future self is that when I become professional (by which I ultimately mean able to sustain myself using my abilities as a programmer), give back to the community.  The reason I want to remember this is because of the inherent deficiencies, even amongst those with the know-how but perhaps not the ability to teach.  Even a great number of the better tutorial makers have some short comings that have left me pulling out what little hair I could grab hold of (military haircuts make that a little difficult) not because they seem incapable in their programming abilities, but simply as a result of bad planning when it comes to tutorial production.  I sincerely apologize to indev0r for singling him out like I have thus far as he's by far much better than a large number of the "teachers" I have found on the internet, but if anything he is all the more reason why I hope to improve upon what exists already.  If he'd been perfect, then I would probably just stop trying anyway.  I am very much the kind of person who constantly seeks ways to improve upon things.  That's a very big reason behind my love for programming, I think.  There's always a way to improve, and also that it is so incredibly logic oriented.  So, now that I have given every effort I can imagine to express that indev0r is, in my opinion, a great learning source, here's why he's also the key example in "ways that tutorials between beginner and intermediate could use some serious improvement."

Learning even the basics of some of the complex pre-built libraries is going to be challenging enough as it is.  That's probably why a lot of the best tutorial makers I've come across tend to stick to pre-built libraries like Slick.  The last thing I want as I'm trying to learn not just how to use an existing library to develop a program that constantly and simultaneously renders necessary imagery to the user's screen, awaits user input, provides interaction, and everything in between, is to load the next video in a series and see something further ahead than where we left off in the previous video.  Sure, I could say that one probably learns more from mistakes than from handed out lessons, BUT learning from mistakes can go a LOT more smoothly when a good foundation is laid out first.

So, explaining something that was hard to find elsewhere is why I greatly respect indev0r, but planning the production is where I see that even though the knowledge can be found, its delivery still leaves plenty to be desired out there.  If all he changed was to back up his tutorial project so, given the need to restart recording of a tutorial, he knew where he left off- well his tutorial series on intermediate 2D game development would probably have been borderline perfect, at least at my level.  However, almost consistently from video #8 or so onward, there was a very agonizing game of catch-up that involved a great deal of research and a great deal of losing my mind trying to solve problems that I still didn't quite grasp.  Yes, to be fair, I prefer to learn by jumping in to a level perhaps a bit above what I "ought to."  However I also have the initiative to willingly research concepts I see when I don't understand them.  Even so, and even though solving the problems "between the videos" left me feeling pretty epic, I still would like future me to remember my agony at this particular moment in time.  If I'm reading this, make a good in-depth lesson plan and don't skip over details in between lessons.  Teach people, and teach them in depth without pulling something up that you (I) haven't even taught yet and simply continuing on as if its development was irrelevant.

Back to boosting people though, TheNewBoston probably has the biggest amount of consistently clear tutorials I've found thus far, but (as far as I've discovered) I don't know if he's gone into things quite as deep as developing your own game engine and some of the things that would require.  Still, if you're content to simply use pre-made libraries and such, I've never experienced any of the aforementioned consistency issues with TheNewBoston.  So, in summation, to my future self:  put this all together and put out something to help people bridge the gap between "Hello World" and other super-basic stuff, and Skyrim or something else that I imagine was incredibly super duper majorly complex.  To any other amateurs aspiring to greatness, I would definitely say that based on my frequent desire to claw out my own brain, perhaps learning how to use a pre-made engine would be a better start, THEN move on to developing one.  To people of any level less than a fully qualified programmer that doesn't already know, I seriously recommend starting with JoseVidal, then going to TheNewBoston, THEN MrDeathJockey.  There are definitely others out there at all levels, but as those are the three I've spend the most time learning from thus far, they're the focus of my post tonight.

Goodnight, and if there are insanely unforgivable typos in this post, deal with it cause I'm slightly more than mildly intoxicated as I type this.  It's my weekend, and I'm not sorry.

Edit:  My last post, "Learning in Two Dimensions" or whatever, I don't remember.  Like, at all.  I don't know what made me feel so over-confident that I would have posted that, because I've TRIED doing a lot of these things back when I first started to learn programming in high school (which, bear in mind, was almost ten years ago now).  I know it's no joke.  The only clear answer is that I was even more "slightly more than mildly intoxicated" when I posted that.  More likely, I had probably just finished resolving an issue with some of the gaps between tutorials that I have mentioned dealing with in this post.  Edit point:  I'm not an expert, I'm not ready to take on any serious creative projects, I probably just got excited and felt awesome because I possess the ability to think JUST enough to apply things that were taught just before and just after the issue to solve the in-between bugs.  lol

Another Edit:  When I expressed a different order to watch these tutorials, that was by no means expressing any belief that I think I know who is better than who or whose tutorials are more "advanced."  For the most part, when I'm not out expressing an abundance of overconfidence, I mean what I say- which in this case is simply that indev0r's videos are a bit harder to follow but teach concepts and such that I haven't seen elsewhere and definitely think are worth looking into.

1 comment:

  1. Excellent article, good advices and suggestions. I will heed your advices in my future tutorials, thanks!

    Programming is fun, don't give up and wish you best of luck! :)

    - Indev0r

    ReplyDelete