{"id":493,"date":"2012-12-15T18:55:23","date_gmt":"2012-12-16T01:55:23","guid":{"rendered":"http:\/\/jameskovacs.com\/2012\/12\/15\/devteach-montreal-2012-wrap-up\/"},"modified":"2012-12-15T18:55:23","modified_gmt":"2012-12-16T01:55:23","slug":"devteach-montreal-2012-wrap-up","status":"publish","type":"post","link":"https:\/\/www.jameskovacs.com\/index.php\/2012\/12\/15\/devteach-montreal-2012-wrap-up\/","title":{"rendered":"DevTeach Montreal 2012 Wrap-up"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.jameskovacs.com\/wp-content\/uploads\/2012\/12\/201212131831.jpg\" width=\"550\" height=\"193\" alt=\"Montreal skyline\"\/><\/p>\n<p>A big thanks to everyone who attended my sessions earlier this week at DevTeach. When I give a presentation, my success criteria is that I get you excited enough to continue investigating the topic yourself. So an extra special thanks to all the attendees who took the time to talk to me afterwards. I obviously got some of you excited enough to continue learning what I was talking about! Awesome!!!<\/p>\n<p>Another reason I love conferences is hanging with my peeps. I had a great time catching up with friends old and new in scenic, if somewhat cold, Montreal. Kudos to Jean-Ren\u00e9 Roy for putting on another fantastic conference.<\/p>\n<h3>Git Dojo<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.jameskovacs.com\/wp-content\/uploads\/2012\/12\/201212151800.jpg\" width=\"220\" height=\"92\" alt=\"201212151800.jpg\" style=\"float:right; padding-left:10px;\" \/>The week started off with the fun-filled and action-packed Git Dojo with me on keyboards and <a href=\"http:\/\/blog.jessitron.com\" target=\"_blank\" rel=\"noopener\">Jessica Kerr<\/a> on vocals and whiteboard. We even had a drummer, <a href=\"http:\/\/codebetter.com\/howard.kierking\" target=\"_blank\" rel=\"noopener\">Howard Dierking<\/a>, sit in for a set &#8211; attempting to wreak havoc on the repo when he .gitignore&#8217;d the Markdown files. The dojo was saved when he disappeared in a <a href=\"http:\/\/www.youtube.com\/watch?v=tZrqC5LL_oo#t=1m25s\" target=\"_blank\" rel=\"noopener\">Spinal Tap-esque explosion<\/a> midway through the set.<\/p>\n<p>If you want to check out the Git Dojo yourself, you can clone the <a href=\"https:\/\/github.com\/jessitron\/git-happens\/\">git-happens repo<\/a> and follow along with the <a href=\"http:\/\/jessitron.github.com\/git-happens\/dojo.html\">notes<\/a>.<\/p>\n<h3>Emergent Architecture with TDD\/BDD<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.jameskovacs.com\/wp-content\/uploads\/2012\/12\/201212151804.jpg\" width=\"400\" height=\"237\" alt=\"201212151804.jpg\" style=\"float:right; padding-left:10px;\" \/>I had a lot of fun with this session talking about the failure of UML as a design tool -though a great whiteboarding language. The holy grail of software design is the executable specification, which can be achieved with TDD\/BDD. Executable specifications have the nice property of not only validating business requirements, but making it possible to validate non-functional requirements. I talked about some agile principles and techniques for good measure because that&#8217;s what I do. This led to the following tweet:<\/p>\n<blockquote class=\"twitter-tweet\">\n<p>If something hurts, do it more. Deployments, tests, do it more often and fix the problems that make it painful. <a href=\"https:\/\/twitter.com\/search\/%23DevTeach\">#DevTeach<\/a> @<a href=\"https:\/\/twitter.com\/jameskovacs\">jameskovacs<\/a><\/p>\n<p>&mdash; Jessica Kerr (@jessitron) <a href=\"https:\/\/twitter.com\/jessitron\/status\/278518620814995457\" data-datetime=\"2012-12-11T15:16:28+00:00\">December 11, 2012<\/a><\/p><\/blockquote>\n<p><script async src=\"\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n<p>I&#8217;m not the first person to say this, but good to keep the idea circulating in our collective consciouses. 26 retweets and counting ain&#8217;t too bad. Happy to do my little part to make the software development world a better place for all of us.<\/p>\n<p>I then talked about tools for creating executable specifications, specifically <a href=\"https:\/\/github.com\/machine\/machine.specifications\">MSpec<\/a> and <a href=\"http:\/\/specflow.org\">SpecFlow<\/a> (.NET) and <a href=\"http:\/\/rspec.info\">RSpec<\/a> and <a href=\"http:\/\/cukes.info\">Cucumber<\/a> (Ruby). We then dove into code with MSpec and SpecFlow because it was a more .NET crowd in the room. I especially loved the look of mild shock on some attendees faces when I executed what looked like a plain text file, which was in fact a SpecFlow\/Cucumber file:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.jameskovacs.com\/wp-content\/uploads\/2012\/12\/ShoppingCartFeature.png\" width=\"448\" height=\"306\" alt=\"Shopping Cart Feature\" \/><\/p>\n<p>The slide deck for <em>Emergent Architecture with TDD\/BDD<\/em> is available <a href=\"http:\/\/jameskovacs.com\/downloads\/EmergentArchitecture-DevTeachMontreal2012-slides.pdf\">here<\/a> and the demos <a href=\"http:\/\/jameskovacs.com\/downloads\/EmergentArchitecture-DevTeachMontreal2012-demos.zip\">here<\/a>.<\/p>\n<h3>Testable JavaScript<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.jameskovacs.com\/wp-content\/uploads\/2012\/12\/TestableJavaScript.png\" width=\"240\" height=\"178\" alt=\"TestableJavaScript.png\" style=\"float:right; padding-left:10px;\" \/>Ah, JavaScript\u2026 the red-headed stepchild of the language world. I talked a bit about the history of JavaScript and the increasing complexity of client-side applications as well as the recent rise of JavaScript on the server-side with Node.js. The need for JavaScript testing is more important now than ever. Fortunately there are some great testing\/spec&#8217;ing frameworks available. I compared and contrasted <a href=\"http:\/\/qunitjs.com\">QUnit<\/a>, <a href=\"http:\/\/pivotal.github.com\/jasmine\/\">Jasmine<\/a>, and <a href=\"http:\/\/visionmedia.github.com\/mocha\/\">Mocha<\/a>. QUnit is wonderful for its simplicity, Jasmine excels at UI testing especially when paired with <a href=\"https:\/\/github.com\/velesin\/jasmine-jquery\/\">Jasmine-jQuery<\/a>, and Mocha rules the roost for the elegance of its async testing support, which is no surprise given that it was born in the Node.js world. Regardless of which framework you choose, please please please give your client-side JavaScript code as much respect as your server-side code and write some tests\/specs for it &#8211; preferably in a TDD\/BDD fashion.<\/p>\n<p>The slide deck for <em>Testable JavaScript<\/em> is available <a href=\"http:\/\/jameskovacs.com\/downloads\/TestableJavaScript-DevTeachMontreal2012-slides.pdf\">here<\/a> and the demos <a href=\"http:\/\/jameskovacs.com\/downloads\/TestableJavaScript-DevTeachMontreal2012-demos.zip\">here<\/a>.<\/p>\n<h3>Coming Soon\u2026<\/h3>\n<p>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.jameskovacs.com\/wp-content\/uploads\/2012\/12\/201212151852.jpg\" width=\"199\" height=\"202\" alt=\"201212151852.jpg\" style=\"float:right; padding-left:10px;\" \/>I&#8217;ll be presenting both <em>Emergent Architecture with TDD\/BDD<\/em> and <em>Testable JavaScript<\/em> at <a href=\"http:\/\/codemash.org\">CodeMash<\/a> in Sandusky, Ohio, which is happening January 8 to 11, 2013. If you&#8217;re attending CodeMash, I&#8217;d love to see you in my sessions! Plus be sure to drop by and see me at the <a href=\"http:\/\/jetbrains.com\">JetBrains<\/a> booth where I&#8217;d be happy to teach you some ReSharper, RubyMine, or WebStorm ninja skills.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A big thanks to everyone who attended my sessions earlier this week at DevTeach. When I give a presentation, my success criteria is that I get you excited enough to continue investigating the topic yourself. So an extra special thanks to all the attendees who took the time to talk to me afterwards. I obviously [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[],"class_list":["post-493","post","type-post","status-publish","format-standard","hentry","category-presentations"],"_links":{"self":[{"href":"https:\/\/www.jameskovacs.com\/index.php\/wp-json\/wp\/v2\/posts\/493","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jameskovacs.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jameskovacs.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jameskovacs.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jameskovacs.com\/index.php\/wp-json\/wp\/v2\/comments?post=493"}],"version-history":[{"count":0,"href":"https:\/\/www.jameskovacs.com\/index.php\/wp-json\/wp\/v2\/posts\/493\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.jameskovacs.com\/index.php\/wp-json\/wp\/v2\/media?parent=493"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jameskovacs.com\/index.php\/wp-json\/wp\/v2\/categories?post=493"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jameskovacs.com\/index.php\/wp-json\/wp\/v2\/tags?post=493"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}