Well, another CodeMash is in the books and here is my write-up of the sessions I attended.
PreCompiler: Not to Be
Again this year I skipped the PreCompiler—it just wouldn’t have been logistically feasible. Joe O'Brien and Jim Weirich, again, did the Ruby Koans—which, one of these days, I will step through on my own. Jeremy Miller did a session on Advanced Presentation Patterns that would have been cool to attend. And Jon Kruger led a session entitled Software Engineering Fundamentals Workshop: OOP, SOLID, and More that looked quite interesting. But, alas, it was not to be.
Opening Keynote: Mary Poppendieck, The Five Habits of Successful Lean Development
Mary, and her husband Tom, are rockstars of the Agile/Lean community. Agile/Lean is just something I haven’t grokked yet—I’d probably have more success understanding the process if the styles were practiced at my company (instead, we’re more of an 80s flashback to the days of RUP and Waterfall).
Anyway, Mary’s Five Habits were: Purpose, Passion, Persistence, Pride, and Profit. She went through several examples of companies that practiced one or more of these habits and highlighted the subsequent financial and market successes that resulted. One funny moment was when she defined Cost Center Disease: when a company or division focuses on cost reduction to show increased profit instead delivering value. Several heads nodded in understanding. I also liked the quote she mentioned: “if you never fail, you’re not trying.”
Even though I don’t see Agile/Lean practices in my future, I did like what she had to say about practicing your art—whether that’s Agile/Lean mastery, vanilla software development skills, musicianship, bending nails, etc.—to the point of becoming an expert in your field. She said that it takes 10 years or 10,000 hours of deliberate practice to gain expertise in your chosen field(s). Deliberate practice includes the following challenges:
- Identifying the skill that needs improving
- Devising an exercise(s) to improve the skill
- Practice
- Obtaining feedback
- Pushing your limits (like this, for instance)
- And regular, intense practice
Elements that can facilitate your Deliberate Practice include:
- Finding a teacher/mentor
- Crafting new challenges
- Getting feedback
- And good ‘ol dedication
She talked about Improvement Katas—I always find the use of that term by technology geeks amusing because most of those folks wouldn’t survive five minutes in a real martial arts dojo. Nevertheless, her points were right-on regarding how to become an expert in your chosen field:
- Visualize what perfection looks like
- Develop a first-hand grasp of your current situation
- Define target conditions on the way to perfection (small, measurable milestones on the way to your goal)
I have a lot of goals for 2010 and I will definitely be looking back at these notes to construct an appropriate game plan to achieve each one.
Session: What Makes Ruby Different?
It seems like all of geekdom is buzzing—and has been buzzing for a while—about Ruby. What gives? Inquiring minds want to know. So, I attended this session led by Marc Peabody, Joe O’Brien, and Leon Gersing.
The format went something like this: Marc would present Java code to perform a particular operation, then Leon would present C# code to perform the same operation, and finally, Joe would step in to show how Ruby makes both technologies look stupid verbose/cumbersome since it can perform the same operations with significantly less lines of code.
The trio targeted six main areas:
- List Iteration—you should be able to tell a list what it should do, not have to ask a list for its data and then perform operations on it.
- File I/O—File I/O operations in Ruby are simple and to-the-point: file.open(“myFile.txt”) do …
- Interfaces/Contracts—No interfaces or compiler-time checking in Ruby. Duck typing is king and unit testing is critical.
- Config Files/Annotation—Don’t remember exactly what they said about this, but since everybody now seems to hate XML config files, I’m sure it was something about the badness of that.
- Utility Classes—Utility classes in Ruby smack of a domain specific language (DSL) which is quite cool and hip.
- Dependency Injection—Again, my notes are scant, but I believe the three said that, while DI buys you much in our statically-type languages, it doesn’t offer much to Rubyists and most folks don’t even go there.
Session: Maintainable ASP.NET MVC
Chris Patterson ran this session. I’m not exactly sure what I was hoping to get out of this one—I’ve been to a few ASP.NET MVC sessions before (including the Firestarter event back in October), so I feel like I’m at the point where it’s time to stop listening and start doing. My notes, or lack-thereof, kind of reflect that. One thing I could stand to learn more about are the classes and methods commonly used in the server-side script in a View. I noted that there’s an Html class with a BeginForm method (guess that’s called a FormExtensions class/library?) and that there’s a related Ajax class with its own BeginForm method (presumably, to ajaxify the form). The FormExtensions stuff will definitely take some getting used to.
Lunchtime Keynote: PHP and Other Adventures in Open Source
I am all about making the most efficient use of my time as possible. I subscribe to over 80 different podcasts and listen to most of the shows while commuting to and from work, going for a run, mowing the lawn, or doing other sundry tasks. I pack my lunch so I can eat at my desk and meander through Google Reader at the same time (and to save money). So I’m quite sympathetic to why the CodeMashers would schedule key note speakers while we eat. I just feel bad for the speakers as the rest of us clang silverware and have moderately loud table conversations.
The subject of one’s keynote also certainly has an effect on the level of attention he’ll receive. In this one, Hank Janssen discussed PHP, Linux, Open Source, and Microsoft. Mostly, it was about Hank and his work at Microsoft to get the company to be more open source-friendly. Sorry, but a little bit of a yawner for me. I do appreciate the effort, though: for instance, I am a big fan of WiX, Microsoft’s first open source project.
Session: PowerShell—Ten Things You Need to Know
I was quite torn between attending this session and the session Photoshop for Engineers: Going from PSD to HTML (by Joe Nuxoll). I’m pretty bad at the UI side of development and need all the help I can get. Photoshop is Greek to me, so I thought that the Photoshop session might be pretty enlightening. Nevertheless, my inner voice of reason (one of them, anyway) got the better of me, saying: “you do framework development, not UI. Whaddya gonna do with a session on laying out cool graphics on web pages?” So, I went to the PowerShell talk.
Matt Hester and Aaron Lerch tag-teamed on this one. I didn’t make a list of their Top 10, but here’s a list they had on why PowerShell’s important:
- Rich scripting
- Bulk operations
- Interactive
- Task Automation
- Object-Oriented
When should one resort to PowerShell? When you need to perform consistent, repeatable tasks. Additionally, when you need to interact with Active Directory (just AD or any LDAP-compliant container?), the Registry, WMI, and other such repositories.
One of the attractive features of PowerShell is its consistency. PowerShell commands are structured all in the same way: command (verb-noun) then parameters (name and argument). For instance:
get-service –name “*net*”
The get-service portion is the command, structured in verb-noun format. The –name “*net*” portion represents the parameters of the command, in a name/argument format. Nice.
Let’s see…what else? Matt and Aaron made heavy use of piping command outputs get-member. This is a basic PowerShell technique to familiarize yourself with the members of the object(s) produced by your initiating command, but I seem to always forget that command. Also, I must remember format-table and format-list, used to manipulate the console output produced by PowerShell commands.
They didn’t differentiate much between version 1.0 and 2.0, but a feature they noted that’s new in 2.0 is get-module and import-module. A great many Microsoft products—BizTalk, SharePoint, Exchange Server, etc,—are beginning to ship with PowerShell modules filled with cmdlets designed to let you easily administrate the particular product through PowerShell. In order to use these new cmdlets, you have to import their modules into your PowerShell session.
One feature they talked about which might help me with some of the work I do in the security space is the PowerShell Providers: get-psprovider. PowerShell ships with several providers that are designed to help you navigate certain data repositories like your file system, the Registry, etc. There’s one provider that will let you navigate the certificate store (simply by typing cd cert:). I must investigate that further.
One of the last things they talked about was writing your own cmdlets in C#—inheriting from either PSCmdLet or CmdLet—and adding user interfaces in front of your PS script. There’s a new feature in PS 2.0 where you can output data to a sortable grid in a dialog—very similar to LogParser. I wonder if they’ll borrow any other features from LogParser.
Probably the biggest reason I attended this session over the Photoshop session was that Matt and Aaron promised to talk about Psake. I had been messing with builds recently, was getting frustrated with something (don’t remember what), and wanted to explore other options besides the conventional MSBuild and Nant options. I remembered hearing about Psake, so I downloaded it and started to play with it, but got nowhere fast—couldn’t find much help online, either, so I was looking forward to hearing Matt and Aaron talk about it. Well, it was quite a let-down: Psake appears to be nothing more than a skeleton script where you fill in all the details about how to build your app. I guess that makes the approach more technology-agnostic, but the lazy side of me was hoping for a turn-key solution. Anyway, at least I have a better understanding of how to use the project going forward.
Session: Refactoring the Programmer
I could have sworn this was a Jeremy Miller session. I wanted to attend at least one of his presentations. Thought this was the one. Guess I can’t read. Anyway, Joe O’Brien did this one.
I usually try to avoid the touchy-feely type presentations. The ones that target the softer skills. I tend to think I’m pretty good at the interpersonal and communicative-type skills: if not, I’m probably not going to learn those skills from geeks, anyway. Nevertheless, here are some of the take-aways I jotted down from this session:
Joe said, “you are responsible for your own growth: invest in yourself.” Makes sense. Who else would be looking out for me? He then went into ways that he has invested in himself over the years. He talked about his leading technical indicators. One of his indicators is attending conferences (the realm of the alpha-geeks). This helps him answer the question: “do I need to spend more time with [enter technology of the moment]?” If he hears of a technology discussed more than four times, he should look it up (the Rule of 4). If he hears of a technology discussed more that eight times, he should start playing with it (the Rule of 8). He also tries to pay attention to the speakers at the conferences he attends. He’ll make a judgment as to whether he should follow a given speaker via blog or twitter. Of the folks in the industry he follows, Joe has developed an inner circle and an outer circle. His inner circle is small—four to five individuals. These are folks (like Neal Ford) he trusts to lead him through the technology mine field. His outer circle is a collection of many others who sometimes give great advice but must also be viewed with a degree of skepticism.
Joe also suggested that developers should endear themselves to their communities. They can do this in many ways: participate in an open source project, attend and participate in the local user groups, attend conferences, and even get into things like podcasting or webcasting. [note to self: Joe also mentioned a great way to learn Ruby was to take the quiz at RubyQuiz.com] Finally, Joe suggested three books for helping you kick your programming career into gear:
Session: Testing ASP.NET Applications Using Ruby
At work, one of my current pain points is testing around my component’s frequent use of HttpContext. Were I building on .NET 3.5 SP1, I would just refactor the component to make use of HttpContextBase, an abstraction of HttpContext that can be easily mocked. Unfortunately, other requirements prevent me from moving up to that version, so I now have to think of other ways I can isolate these web components so that I can better test my code. Is there any way Ruby can help me?
Ben Hall presented this session. What was funny was that I had just gotten through listening to a .NET Rocks interview of Ben on the drive up to CodeMash. Now, here he was, to talk more about testing in person. Now that’s pretty cool! [note to self: Ben did write a book called Testing ASP.NET Web Applications that I may want to check out at some point. He also put up an accompanying website.]
Well, the short answer is, no, Ruby (or, rather, IronRuby.NET) can’t help my particular situation. Nevertheless, it is pretty fascinating what you can do with the platform and how you can use it to unit test your .NET binaries.
At some point, Ben went into various tools he uses or had used for testing. Here’s the list I wrote down:
Ruby is still Greek to me, but here is some code I wrote down that I found interesting:
- Setting a reference path? $: << ‘../someDir/bin’
- Setting another reference path? $: << ‘../lib’
- Bringing in a .NET assembly into your IronRuby code: require ‘myAssembly.dll’
- Instantiating a class of a .NET assembly in IronRuby: describe MyNamespace::MyClass.new
Evening Entertainment: Enter the Haggis
Normally, the evening entertainment at CodeMash consists of a bunch of relatively-drunk geeks standing around talking about technology until 2am. Personally, I don’t find that very entertaining; however, I normally mill around for a few hours before retiring for the evening. BTW: I wish I would have made this suggestion on the CodeMash suggestion board—we need an alternative to the raffle ticket thing. When you register, you’re given a beer ticket (ticket for one free beer at the nighttime party). Throughout the conference, you might receive other tickets from various vendors for prize drawings at the end of the conference. I happened to have lost all these tickets over the course of the day. Kind of a bummer.
Anyway, this year, the guys at EdgeCase actually hired a band, Enter the Haggis, for the evening. Although from Canada, they’re all about the Irish rock, combining bagpipes and fiddle with guitar and drums. The music was fantastic. I would have bought one of their CDs had I not left my money in my room. Regardless, they did a great job and it was a nice way to close out the evening.