If you want to see how to give a presentation check out The Art of the Start Video. The guy is amazing and worth watching even if you aren’t interested in your own startup.
I put his book on my Amazon Wish list based off this presentation.
If you want to see how to give a presentation check out The Art of the Start Video. The guy is amazing and worth watching even if you aren’t interested in your own startup.
I put his book on my Amazon Wish list based off this presentation.
Refactoring/TDD Pace
Over the last while I’ve learned a bit about refactoring. During that time I’ve also been working on implementing TDD. During my time I’ve come to realize something. Personally while these two concepts require a lot of changes in the techniques and skills, the biggest change is in pace of work. I will admit to being one of those people who when given an assignment speeds through it as fast as possible. Spend a little bit of time thinking about the change.. write the code.. verify it works (On My Machine!) and check it in.
Now a completely different mindset and pace is required. When writing a new feature things go a bit more like this…
1. Find existing code related to the new feature.
2. Use Resharper Ctrl + F7 to find existing code that references that code, and more importantly existing unit tests.
3. Look at the unit tests. If there aren’t any write some that validate the existing functionality. I’m still up in the air about writing tests against functionality I know will change. On one hand it helps validate your understanding of the code and what it does. On the other hand it can be unnecessary help. I think its a situational judgement call.
4. Look at the code. Get an idea of how the existing functionality is going to be used. How is the change going to affect it. Sometimes this step is the easiest but other times its the hardest. Of course when its hard and the change has a big effect throughout the system then that is a probable code smell.
5. Start the TDD cycle. Red.. Green.. Refactor. Of course as you do so you may touch existing stuff in which case you should start at step 1 on that stuff.
All in all this new pace is about much more then “Getting Shit Done (GSD-mode)”. It’s a huge change but one that I believe will lead to much more reliable, maintainable code.
One of the things I’ve always believed in was spending personal time improving my skill as a software developer. Jean-Paul describes this as being a student of your profession. A very good way to put it I think. For me I had actually hit a plateau a few years ago. But that changed when I saw Jean-Paul at an Edmug event. Since then between the amazing Code Camp that Edmug put on, and the even more amazing Jean-Paul course I’ve found that what I had thought would be a climb up the education slope has turned into a rocket trip.
It’s very difficult but I’m actually starting to see results. I can now start to explain why I like to use certain techniques and principles (as opposed to saying “Because Fowler, JP, Eric Evans, etc” said so). And when I’m learning/reading new things I actually compare what is being said to my own personal design views.
Of course all this education takes a lot of time which I’ve been very lucky to have. It definitely involves sacrifices but I have an end goal in sight that I think will make it worth it. Of course all of this wouldn’t have been possible without two very important things:
1) Finding out what I don’t know. Hearing words like Design Patterns, Domain Driven Design, NHibernate, etc and realizing there was a whole world out there I didn’t know about.
2) Making the decision that it was important to learn what I didn’t know. To try and take my knowledge to the next level and having the support of community and family required to carry out that decision.
The rocket has been fired and at this point I’m getting past just trying to hold on.. so far it’s been a pretty amazing 6 months. Have you taken a rocket ride lately?
A friend recently got me hooked on Pandora. For those of you who have never heard about it, think of it as a customized learning radio station. You tell it the name of a singer or song and it create a radio station that plays similar music. The learning comes into play when you tell it what songs you like, and dislike.
The only problem is it requires you keep a browser open to listen to the music. But thanks to a link from Samuelson to a program called Pandora’s Box that is a requirement no more. It seems to have a bug picking up the new songs that are playing (so I can’t use its lyric capabilities) but other then that its awesome. I can now listen to Pandora, rate my music all, change to the next song all from my system tray.
Great find for Pandora fans!
Though barely after having suffered a bout of illness. Keeping up with blogging was definitely not on the agenda. I’ve got some ideas and things I’ve been stewing over I’ll blog about in the next few days though.
For those of you who haven’t heard of it Safari is a service ran by O’Reilly that allows you to access books online. The basic premise is that you rent either a bookshelf or a library where you can place technical books provided by a number of book companies.
If you choose the bookshelf option you will end up getting a number of slots that you can fill with books. Books have different point values assigned to them with most being 1 point but a few being 2. I’ve never seen anything higher but they may exist. You also will get the ability to download book chapters in a PDF format. A 10 book slot will run you $20 USD/month.
The Library option is a bit more interesting. For $40 USD/month you have unlimited space on your book shelf AND you get access to Rough Cuts. Rough Cuts provides early access to books before they are released for publishing.
The one rule for both options is that a book has to stay on your bookshelf for a month. It appears from the docs that this applies even to Libraries. I assume this was part of the original licensing done with the book companies so it’s easier to keep it in place for library users then try and change the license.
Having used it for quite awhile now I’d recommend it with a very big caveat. The caveat being that if you are like me at all, you are still going to want to buy physical books. The service itself provides access to a ton of books with a very useful search ability. So if you are looking up a solution to a specific technical problem it works great. But if you want to sit down and read Pragmatic Programmer (available on Safari) or Domain-Driven Design (also available) you probably don’t want to be sitting in front of your machine. And while they do have the option of printing out PDFs you are restricted to 5 chapters a month. Most books have much more then that. But the nice thing is that if you have Safari you can take a peek at a book you plan on spending money on and verify it has value.
As I’ve already mentioned, Safari has a ton of content. The only book I’ve actually ran into that wasn’t available was the GoF Design Pattern book. But this book is considered such a seminal work I knew it was a safe purchase anyway so I wasn’t really missing out on anything. The content is not just programmer centric either. There are books for all the IT spheres, running the gambit from Cisco to Photoshop.
One thing I noticed is that they have a free demo setup where you get access for 10 days or up to 50 page views (whichever comes first). So if you are at all interested I recommend giving it a try. This is a tool that should be in every developers toolbox.
The MbUnit documentation is currently down so I’m stuck here to ponder an oddity of MbUnit. When you want to use the RollBack() attribute you need to reference the MbUnit.Framework.1.1.Dll. This seems a bit weird to me. I’m sure there has to be a better way of doing this but until I find out I’ll be stuck using this reference I guess.
If you came here trying to find information on MbUnit RollBack it’s pretty simple as far as I understand it. Throw a RollBack() attribute into your test and it will rollback any database changes.
You may run into an MS DTC error if you are working against a database that is remote. In this case you’ll need to turn on MS DTC. You can Google how to do this fairly easily so I’m not going to link to any specific article since I can’t vouch for the “best” options to enable. Below is a simple example:
[Test, RollBack]
public void RemoveSeatFrom_ShouldCallDatabaseAndRemoveSeatFromSpecifiedOrder()
{
}