I have stubborn code. There is this one code file that I need to change for almost every new feature, and I always run into merge conflicts with my team. In this project over here, there is a class that I haven't touched in a year (I'm not sure it is even being used anymore). I also have a couple classes over there that eat up 5-10 minutes every time I look at them, just to figure out what they are doing. So much of my time is lost to re-learning my code base, let alone the stability and performance issues because of all of my workarounds and patchwork bug fixes. It seems like I have less and less time between releases, and every change is taking longer and longer.
We can all benefit from higher quality code, but we don't always know what that looks like. Even if we know what it looks like, we can't always see the path that will get us from here to there. Come to this workshop if you want to make your code harder, clearer, stronger. Get some one-on-one time with three of the most passionate clean-coders in the region.
Part 1: Identifying Bad Code
The first part of the workshop is structured. Presentations, discussions and interactive challenges will help you build the skills and vocabulary to recognize and discuss bad practices in your own code.
Part 2: Refactoring
Part 2 is more hands-on and interactive. We will work through some actual refactoring. Patrick, Cory and Ryan will provide a C# project to illustrate some refactoring techniques and concepts. There will also be plenty of one-on-one time, so you are encouraged to bring your own code. Just don't bring anything that would require us to sign an NDA!
by Jeff French
One of the main tenets of Agile development is to deliver business value to the production environment early and often. That's easy enough if you are delivering one small web app, but what if your application is composed of several web apps across multiple tiers with a large database and maybe even a few Windows services and scheduled tasks? Now you need a deployment system that is built to scale and allows you to automate all of these tasks to achieve consistency in your deployments. In this talk i will show you how to deploy a complex application to multiple environments with just the click of a button using TeamCity and Octopus Deploy.
by James Bender
WCF has been in production for some time now, and many enterprises are using it productively. But many developers have not yet had an opportunity to learn and use this exciting new technology. This session will show you the basics of WCF to get you started. We will create a service, host it and demonstrate it being called with several different endpoints. An overview of bindings, channels, behaviors and WCF security will also be provided. While it's clear that WCF is the best way to write services in .NET, many developers are afraid of it. They fear that WCF it too powerful, and by extension too complex to use for everyday service development. They have heard horror stories of long obtuse configuration files, and the bizarre rituals needed to deploy WCF services. They have been told that WCF is too heavy and complex to be useful.
This session will show you the truth about WCF! WCF, while powerful, is easy to understand, simple to develop in, straight forward to deploy and will not require you to strike a deal with the Devil in order to be productive. You'll see how easy it is to create, host and consume your first service. You'll see that terms like Endpoint , Channel and Behavior are nothing to be scared of. You'll learn the basics of REST and see how easy it is to create a REST service in WCF. You'll also be introduced to the WCF security model and some best practices for securing your services.
While agile is not generally thought of as a software philosophy, the ideas and principles behind it have a balanced, Zen-like quality. Zen thought is devoted to self-examination and mindful existence by following simple practices to achieve an understanding of life and the interconnectedness of things. Where Zen's focus is on individual improvement, the activities of warfare apply to groups and include planning and estimation, cooperation on shared objectives, reflection on successes and failures, among others. The Warrior Spirit lives behind the details and organization of warfare, and embodies an ethos of discipline, courage, selflessness, duty, and honor. These values strengthen the resolve of the warrior in the face of adversity, and provide a purposefulness to everyday activities. Two mindsets grounded in disciplined practices, have parallels with agile software development. This technology-neutral talk describes how both Zen principles and the precepts of the warrior mindset can inform developers seeking mastery of their craft as well as better results in their business.
by Cory House
As a developer, your image and your mind are your product. We’ll discuss the concrete activities and skills that transform average developers into outliers. You’ll learn why developers can't afford cable, ways to improve your “luck surface area”, and techniques to compress your career through accelerated development. This session is loosely inspired by Malcolm Gladwell’s “Outliers”, Chad Fowler’s "The Passionate Programmer" and Seth Godin's "Poke the Box".
In this session we will take a look at why JS seems to be so difficult to write cleanly, and discuss some of the tools and practices that can help change that.
This session will review some of the most common and dangerous code smells and anti-patterns with some debate about why they should be avoided. There will be many examples and a lot of interactive discussion to help us learn the virtues of identifying anti-patterns in our code and how to fix them.
Learn cool new terms like object orgy, shotgun surgery and contrived complexity! Become a better developer! Impress your friends!
by Juan Gomez
RaspberryPis are the new frontier in enabling kids (and curious adults) to get access to an affordable and easy-to-program platform to build cool things. Over a million of these nifty little devices have been sold in less than a year and part of their popularity has been due to how easy it is to start programming on them.
In this session you'll learn how to get started with the Raspberry PI, initial set-up, configuration and some tips and tricks. Then we'll have a brief introduction to basic Python and we'll write a few simple programs that run on the RaspberryPI. The last section of the session will be dedicated to PyGame, we'll learn about surfaces, events, inputs, sprites, etc and demonstrate how to build very simple games that are as much fun for kids to write, than to play!
by Jay Harris
Effective communication is a pivotal component of a success. Be it presenting at a user group, assisting with a Sales demo, or simply justifying to your boss the purchase of IDE upgrades, you will give a presentation in your career. But the effectiveness of your presentation is not just about being well-spoken and having a prepared outline; the quality of a slide deck has as much impact on a presentation as the quality of the speaker. Slides can destroy. Slides can invigorate. Slides can shape the mood of your audience and bend it at will. Learn to harness this power; use it to tell your story effectively, persuasively, and leave your audience inspired.
Straight up, developers have superpowers. We also have some of the coolest, most effective collaborative communities in modern society: open source development teams. But we can do even better. This talk covers a brief overview of supreme awesomeness in social impact coding, supreme accomplishments in open source, and a model for combining the two to build software that saves the world.
by James Bender
by Cory House
An architect’s job is to reduce complexity, not increase it. Yet the developer life is filled with jargon, acronyms, and seemingly infinite choices. So how do we know when complexity makes sense? Let's discuss when abstractions are justified and determine how to structure applications so they’re maintainable, scalable, and testable.
We’ll make sure everyone is comfy with the core jargon like N-Teir, separation of concerns, and loose coupling. Then we’ll dive into various patterns for implementing the three common layers: data access, business logic, and presentation. You’ll learn when table module, active record, DDD, and ORMs make sense and walk away with the tools to better evaluate and justify complexity. We’ll focus on the value of keeping things simple whenever we can. Examples are presented in C# in Visual Studio but developers in Java, PHP, and other C-like languages should be able to follow right along.
2nd–4th May 2013