SyntaxHighlighter setup

Sunday, December 21, 2014

LET'S PLAY: OPERATION MARS

Operation Mars is a cool, fun space exploration game that teaches you how to code as you support a variety of challenges for a team to land on Mars.  Intended for kids and adults, this game starts with the very basics of code concepts and helps people learn how to think the way a software geek thinks.

My spouse and business/creative/everything partner Mary @marycamacho asked me some questions about it and it flowed so nicely I will post here to explain it.

Q: Why do you want to build the project?
A: A few reasons, but mostly I have a passion for teaching people about coding.  I get really excited about the idea of more people learning to code. Well done games make things fun. There are starting to be some good games out there around coding but nothing like what I have in mind.  And I have always wanted to write a game. And I want to play the game I have in my head also.  Plus space is cool.

Q: Why don't people learn how to code?
A: I think that they don't get how fun and fulfilling software development is.  I think it is the most challenging, fun thing you can do.  But I think it can be hard to see that if you don't grow up around geeks.

Q: Why should more people learn how to code?
A: Software increasingly runs everything, I mean EVERYTHING, and what it doesn't run today it will tomorrow.  Software development is going to touch all professions even if it is just in that people will have to talk to software developers about what they need software to do.  I think understanding basic programming concepts, not necessarily how to develop professional software per se, will be a huge advantage to everyone going forward.  And like math it is a great way to strengthen your mind.   And some people will discover that this is something that they really love doing.  I don't think you can figure out if you will love coding without trying it first hand.

Q: So what exactly are the basics of code or programming?
A: Some of it is just learning to think and state things really clearly; we say "computers do exactly what you tell them to, not what you want them to".  Basic math is all that most geeks ever deal with but that is part of it.  Then there are particular ideas that I think are particular to programming at least the way we use them: loops, if/then and other kinds of decisions, how variables work, functions. 

Q: Who will Operations Mars serve?
A: It will be useful to anyone that wants to learn to code, but we are going to focus on young people.  But it will be fun for anyone that likes challenging puzzles.  Like I said I want to play it too.  Plus I think that there are a lot of teachers that would like to include coding in their curriculum but they feel they lack the training to teach it.  I think we can create some fun ways to empower them to learn and teach programming.

Q: How can other people get involved with you?
A: We are just getting started. We will need a lot of different talents involved; graphic artists, software developers, beta users, game designers and other people I am not thinking of yet.  We will have a website up soon, but for now the best way is to follow us on twitter at @OperationMars.

What I am Learning Next (Part 1)

I have a practice that has served me very well as a software developer.  Every couple of years I sit down and figure out what technologies and/or languages I am going to train myself to a degree of expertise over the next 18 months.  I pick 3-6 specific things that look promising, but typically have not reached mainstream prominence and participate in projects that will give me solid experience with them.  As long as I guess well on one or two of these skillsets then it lets me list 1-2 years of experience with a hot new technology on my resume at a time when it is still hard to find people with any experience in it. 

This has worked out very well for me for the last 10+ years and allowed me to get positions and contracts using Javascript, AJAX, ASP.NET MVC, SignalR, MongoDB and MVVM just as they were becoming in demand skillsets.   Because of this I have never, ever had a hard time finding positions/contracts that paid well and were interesting.

There are only two downsides to this way of crafting your resume (assuming you actively enjoy learning); you will "waste" some percentage of your time on bad guesses, and in the long run you will get more calls from recruiters than you know what to do with (really).

So it is that time again for me to figure out the next set of things to focus on.  There is a lot of cool stuff happening in tech right now so I am going to list everything that is catching my eye right now and then will narrow it down to a doable list in a future post.
  • Azure: I have done some work in Azure already but Azure is a huge topic and I am committed to becoming masterful here.  Some areas of specific interest are:
    • DocumentDB
    • Queues
    • Scheduled Jobs/WebJobs
  • ASP.NET "vNext" and C# 6: The ASP.NET framework is being rewritten from scratch with huge changes to their deployment and coding models. Perhaps not so earth shaking C# 6 has some nice new features, chief among them a more open compilation model that enables easier code analysis and using C# as a a scripting language (check out http://scriptcs.net/).
  • Along with the new versions of ASP.NET and C# is , unsurprisingly,  a new version of Visual Studio.NET and now the equivalent of VS.NET Professional is free for small teams! http://www.visualstudio.com/en-us/products/visual-studio-community-vs
  • SignalR: I have used SignalR a fair bit but the matured quite a bit in the last 2 years so I need a refresher.
  • NoSQL: I have used MongoDB a lot and I will continue to do so, but I think it would be a good idea to get some exposure to at least one other NoSQL database.  The candidates that I am considering are CouchDB/CouchBase, RavenDB and DocumentDB (Microsoft's Azure NoSQL db, which I mentioned above)
  • JavaScript "transpiling" languages: I have used JavaScript for almost as long as it has existed so I am very familiar with what is beautiful about it and what is a pain in the neck.  CoffeeScript and Typescript are two interesting open-source projects that try and make JS easier and safer to code, and they both "transpile" down to plain old JavaScript.
  • SVG (Structured Vector Graphics): SVG is a markup language for creating graphics. And it can be manipulated with JavaScript and CSS in the same way as HTML. It's use is not limited to the web, but that is where my interest is.  SVG has been around a long time but it was not supported by Internet Explorer until version 9 so it wasn't a very practical option for the public web until recently.  I have used http://raphaeljs.com/ quite a bit which sort of patched IE's shortcoming, but now is the time to dig into the real SVG world.
  • Knockout:  I have been using Knockout for years and I love it.  Why Knockout as opposed to something like AngularJS?  Knockout is focused on just a very few things, mainly two way data binding.  It is designed to be combined with other tools like RequireJs,  SammyJs and jQuery to create a complete solution.  Personally I like this method of composing an app from small focused tools, so Knockout suits me very well.  It is mature, under active development, and the documentation is excellent.  Why is it on my "what's next" list?  The latest release has added support for creating self-contained Web Components and I am excited about that.  And you can't know a tool too well.  http://knockoutjs.com/
  • AngularJS: All that talk about what I like about Knockout as opposed to something  like AngularJS you would think that Angular would not be on my list.  The thing is that there is a huge amount of momentum around Angular and philosophical attitudes aside it is silly to ignore that.  I make a lot of my living from contract work where the tools are specified by others so it would be dumb for me to not learn AngularJS.  And by all accounts it is a very nice tool to work with so I am sure I will enjoy it (most things to do with computers are easy for me to enjoy).
  • Xamarin and mobile development: Xamarin is a tool for developing native mobile applications using C# and programming paradigms familiar to any .NET developer. The model allows a very large amount of code reuse across iOS and Android while still respecting the distinct aesthetics of each platform. Everyone I have spoken to that has used it loves the results.  It also allows the creation of hybrid apps mixing native code and HTML/JS. http://xamarin.com
  • XAML/WPF: Xamarin uses XAML for some of its programming so I will be learning it there, but should I dig into XAML for desktop development as well?  I have mostly been a Full-Stack WebDev for a long time.  Is it worth the investment of time?  I am pondering.
  • Client-side tools: There is a whole new generation of tools for developing HTML/JS apps like Grunt, Gulp and Bower.  Plus lots of uses for Node.js even if you have no interest in Node per se.
  • ECMAScript 6: ECMAScript is the standard that is JavaScript is an implementation of.  ECMAScript 6 is the next version of standard and includes things like classes, modules, and arrow functions (a terser syntax for functions/expressions).  We will see these features start to be included in the everyday browsers over time.  Projects like TypeScript and Traceur are very much steered by the ECMAScript 6 spec.
  • Python: I keep saying that I am going to learn Python…we will see if it makes the cut this year.
  • PostgreSQL JSON datatype: PostgreSQL is a great database engine with a lot of interesting features…and now it has JSON and JSONB datatypes with indexing.  This would seem to open up some really interesting applications where you can use a hybrid relational/non-relational strategy in the same database.  Very intriguing and needs investigation.
So that is a lot.  Too much in fact.  I have to narrow it down some…in part 2.