I have been programming for a long time. I would have to say that it became more "serious" when I was 16 in high school. I went to an ACM programming competition with a good friend at his high school(the "rich kids" high school). We ended up winning. Since that time, programming has always been a part of my life. Whether it was tinkering with the Linux kernel to get a rough driver working for NaturalPoint's TrackIR, playing with game development or just ripping out a quick script or utility app, it was something I was always doing. Programming became my profession in 2000 when I started developing the website for the company I work for. Through it all, following the conventional method of writing code I think would work and then testing and trying to break it.
So it feels like I have been programming for ages(really, about 14 years) and I get quite a bit done the way I do it. Last year, I decided that I wanted to formalize the testing process and Test Driven-Development(TDD) felt like it was what I had been doing for years but instead of keeping the tests, throwing them out. I did a lot of reading about it but never had the time or the right environment to actually implement it in my daily process. Things have improved and I now have the chance. However, I am finding it extremely difficult.
I think most of my trouble is just coming from a new way of looking at things and the way I am supposed to develop under TDD. It is difficult to think in terms of tests and writing them first when it is so easy to just type up the code and get something running immediately. I am forcing myself to follow the process, however, because I want to develop the correct habit. TDD has already given me insight into how to get something done, simply by forcing me to think more about what I am doing rather than banging out code the way I may have solved a similar situation in the past.