SyntaxHighlighter setup

Saturday, February 7, 2015

My Favorite Sources of Development Documentation

There are far too many fine point details in day to day software development to keep only in my head.  Here are the sources of documentation I use on a weekly basis.  Note; given the majority of the work I do is WebDev using ASP.NET these sources are skewed in that direction.

DevDocs http://devdocs.io/
Image of DevDocs search
 In their own words: "DevDocs combines multiple API documentations in a fast, organized, and searchable interface."  My words: DevDocs brings together the docs of over fifty (and growing) libraries and languages.  You choose which you are interested in and you searches are limited to those topics. Your choice of interests are remembered the next time you use it.  Wide ranging topics from HTML, CSS and JS to C, C++ and PostgreSQL to NodeJS, Knockout and jQuery.  It also supports keyboard shortcuts and an offline mode which is handy for coding on planes.  You can even vote on new topics; see their About page for details.


Mozilla Developer Network https://developer.mozilla.org/en-US/ or https://developer.mozilla.org/en-US/docs/Web for general web technologies
In their words: "The Mozilla Developer Network (MDN) is an evolving learning platform for Web technologies and the software that powers the Web"  My words: While some of the Mozilla Developer Network, or more commonly the MDN,  is about Mozilla specific technologies like Firefox OS, they mostly maintain an amazing body of in depth information on the open web technologies, i.e. anything that happens in a browser, and they cover the details for all the major browsers including what versions support what.  For in depth info on the client-side this is my go to source.

Can I Use http://caniuse.com/
In their words: "Provides up-to-date browser support tables for support of front-end web technologies on desktop and mobile web browsers." My words: If you just need to know which browsers (make and version) support which features, this is by far the quickest place to get that information.

StackOverflow http://stackoverflow.com/
Well duh.  The ten thousand pound gorilla of software development question and answer sites.  I think most people still get there from a search engine result, but never the less it is the Godzilla of dev answers. Here is a useful tip regarding StackOverflow: if you don't find the answer to your problem, slow down and go through the process of asking the question on the site in a careful way.  80% of the time when I do this I figure out the issue in the process.  I also have a request; take a moment and create an account (most people use the site anonymously) and Up-Vote questions and answers you find useful.  Personally I love the feeling of getting an Up-Vote.

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.

Monday, May 20, 2013

Blogs and Podcasts: How I stay on top of new stuff in the development world

I was asked the other day by a colleague how I keep up with everything going on in the software development world.  A lot of people use Twitter for this but so far for me I still find podcasts via my iPod and blogs via Google Reader and more recently Feedly to fit really well in my life.  Here is my list of each, edited down to just the techie items.  I am mostly a .NET webdeveloper so except where I mention otherwise that is where most of these focus.

Podcasts (in no particular order)

  • Hanselminutes: Scott Haselman's excellent geek interview show. 
  • Herding Code: Four smart and funny devs talk about software development, typically with guests.  
  • The Changelog: Open source software discussion show.  Mostly Linux focused but great show and entertaining.
  • .NET Rocks: Perhaps the original .NET developers podcast.  Still excellent.
  • This Developers Life: More about the culture of Geek than about tech.  I love this show.
  • Deep Fried Bytes: "Deep Fried Bytes is an audio talk show with a Southern flavor"
  • The Stack Exchange Podcast: Interesting discussion by the folks that run StackOverflow.com..kind of rambling at times but entertaining and informative.
  • Yet Another Podcast: Hosted by Jesse Liberty (the guy who wrote the C# book with the big bird on it, so basically the guy who taught me how to code in C#).
  • The Tablet Show: Mobile developement show by the guys that do the .NET Rocks show.
  • JavaScript Jabber: A small panel of javascript devs talking about modern WebDev.  Has bit of a Rails slant but hey, javascript is javascript.
  • The Javascript Show: Jason Seifer and Peter Cooper discuss the latest news in Javascript development.

 Blogs

The ones I read consistently...
And the long list of blogs I read when I have time...

Sunday, February 3, 2013

Netflix' House of Cards

Just watched the first two episodes of the new "House of Cards".....um Wow.  It's like the Sith version of  The West Wing.  Soooooo good.

Picking my battles

I am lead developer on several projects that use outside developers.  While in theory maybe I should be able to say my projects use margin width of 2 not the default 4 and whatever other little particulars I have about formatting source.  But as I have to review more code commits I think this is just another eaxample of what Jimmy Boggard was saying in Tabs versus spaces: Spaces won. It is just not worth my time to keep reviewing commits and try and figure out which changes are real and which are not...I have better things to worry about than horizontal whitespace differences or trying to get other people to change their settings.

So today I will change my tab setting to 4 and move on to important issues like vertical whitespace and brace placement.

Sunday, December 30, 2012

Windows 8 and PostgreSQL

I recently upgraded to Windows 8 Professional on my main development machine and was having trouble getting PostgreSQL installed.  The official installer would pop up some very strange dialogs and just sit.  Finally I tried the Chocolatey installer at http://chocolatey.org/packages/postgresql and success!  I hope that saves someone the headache I had yesterday.

Update: This issue seems to have been handled now.