Skip to main content

Nebraska Code Camp 2014

I attended the Nebraska Code Camp this weekend and wanted to share some thoughts on the sessions I was able to sit in on.

Iris Classon started the day with her keynote speech and I really enjoyed the keynote.  The speech was not technical, but instead focused on her life story and her passion for technology and developing software.  She is a very good speaker and was entertaining with her story telling.  I was energized and motivated after hearing her talk and really excited to learn more throughout the day to increase my passion for becoming a better developer.

The first session of the day I listened to was Cory House, Becoming an Outlier: Rebooting the Developer Mind.  Cory is a fantastic speaker, he was always entertaining while also providing great information in his talks.  This session will soon be a course on pluralsight.  I will be watching that course when it becomes available.  This session followed up very nicely with Iris' keynote, it further emphasized that following your passion will keep you happy.  Cory also brought up an interesting idea that as you become better at something your passion for it grows as well. The main point I took away from this session was to streamline things out of my life that do not add value to my passion. If I want to become a better developer, then I need to devote more time to developing and to find more time I need to sacrifice other things that do not help me become a better developer.

Next was SOLID Design Patterns for Mere Mortals with Philip Japikse. Again Philip was a great speaker.  For the most part I think I ended up going to session with great speakers and that really helped the conference be a success for me. This course covered a high level overview of design patterns. I have heard about most of these before, but haven't implemented them so getting to see some uses of them was valuable.  Philip purposefully chose silly and abstract uses of these patterns as so that people would learn the concept without trying to copy and paste, or as Philip described - clipboard inheritance.  This worked for me in some of the examples, but in others I found it difficult to figure out where I could apply that pattern in real code. I definitely need to continue learning these patterns so that I can apply them where needed.

After lunch I went to another Cory House presentation, Pragmatic Software Architecture: Curing the Architecture Astronaut.  This discussion focused largely on the pragmatic idea from the title. There is a "Best Practice" approach to developing software and we all strive for that ideal, but in some situations it isn't always needed or appropriate to force development to follow those "Best Practices." There are business reasons to add technical debt or to use a faster or more simplistic approach when writing code. I have been guilty of wanting to make sure the code I produce is the best it can be and forcing those "Best Practices" in situations that didn't need it. I need to remember to step back and look at the greater picture before making a decision on which approach to take to make sure it is the best for that particular situation.

Next up was the major disappointment of the conference for me. TDD Mastery - Writing Meaningful Tests with Jason Norris. I have no idea what happened here. Jason rushed through his slides in about 5 minutes, just reading the slides providing no addition comments. Then the last 2 slides were information about other sessions going on at that time. He then left and went to watch a panel in the gym. This was a big letdown and waste of my time, I would have preferred that he just canceled his session so that I could have made it to another one I wanted to attend before it started. On Jason's first slide he talked about his company, Farm Credit Services of America, and how it was the best place to work in Omaha. Well based on this "talk" I was left with a very bad impression of him and his company.

Maintainable Unit Tests - that's an oxymoron right? by Andy Bayer followed up the last session by actually covering the previous topic and his own information.  Andy provided a lot of good knowledge, I think maybe he was a bit nervous with his presentation, but overall I thought he did a great job and enjoyed the talk. One key point I took away from this session was the idea of keeping Mocks or Fakes in a centralized location. If your application has 1 repository, why would you then want to create a Fake repository in each of your tests? Treat your tests the same as other code, use SOLID principles and DRY to keep your tests maintainable.

Lastly was, Why Agile? The Economics, Psychology, and Science of Agile's Success with Matthew Renze. Focusing on the reasons why Agile is better than Waterfall I think this talk would be great to get in front of management at a business that has not adapted Agile philosophies. It seems to me that the hardest part of getting to an Agile environment is the initial buy-in from management and presenting them with facts and charts about how Agile would be an improvement over their current approach would help them get on board. One of the biggest points I took away was a chart that showed the relative cost of finding and fixing a defect in software at different points of the life cycle, with the cost for finding it in production 150x that of finding it in the initial stages. This alone should be reason enough to push an organization towards at least doing automated testing to try and keep as few bugs out of production as possible. Another valuable idea I brought away was that it should be ok to fail small and fail smart, meaning that if you do a little experiment that doesn't work out, you have at least learned something and not cost the company very much. Where if you make a large experiment you can have an epic fail which will cost you and the company dearly. You should focus on small, fast, and simple. Add over time as you know that the direction is worthwhile, don't assume you know what is right up front and risk being wrong in the end after too many resources have been committed.

All-in-all, I was very happy with the conference and look forward to using the knowledge I received to make myself better.

Comments

Popular posts from this blog

Converting a Large AngularJS Application to TypeScript Part 2

In part 1 I was able to take an Angular controller written in JavaScript and convert it to a TypeScript file while doing very little to change the code. In this post I am going to explore transitioning that same controller to actually use the features provided in TypeScript. This is how I left off my controller:
declare var angular: any; (function () { 'use strict'; var controller: any = function($scope){ ... } angular .module('app') .controller('controller', controller); controller.$inject = ["$scope"]; })();
While performing the translation from JavaScript to TypeScript, I would make sure at every step that the functionality I expected still worked, so if anything I did broke the system I would change it back and try again with another approach. Also if something seemed like it worked too easily, I would break it on purpose to make sure I wasn't getting a false result through browser caching a previously working fil…

Converting a Large AngularJS Application to TypeScript Part 1

I work on a project that uses AngularJS heavily. Recently we wondered if using a preprocesser like CoffeeScript or TypeScript for our JavaScript would be beneficial. If our team is going to switch languages, we would need to be able to convert existing code over without much pain and we would have to find enough value in switching that it would be worth the conversion.

I had read an article that stated that because TypeScript is a SuperSet of JavaScript, you could convert a plain JavaScript file to TypeScript by changing the extension to .ts and not much else would need to change. I wanted to test out this claim, so I took a file that I was familiar with, an Angular Controller, and tried to convert it to TypeScript to see how much effort it would take and then try to figure out where we would benefit from using TypeScript.

This is what the controller JavaScript file looked like to start out with:
(function () { 'use strict'; angular .module('app') …

Gamify TDD

I like it when things that would not normally be associated with games add concepts from games as a way to incentives you to accomplish things. Why simply go for a run if you can have an app that will track you and give you a gold star if you do better than you did the last time? Why go to the coffee shop that only gives you coffee if the other one will give you points that you can redeem for free drinks eventually?

I was recently introduced to CodeSchool, an online training system similar to PluralSight, it has video courses and challenges you can take to prove that you retained what the video taught. CodeSchool also adds badges and tracks to your learning, so as you complete a video and its challenges you get a badge. Complete a collection of courses within a specific discipline and you become a master of that discipline.

Some of these incentives are not tangible and really don't mean much in the real world, but they tend to work for me. If I start working towards a large goal a…