Best “Improve Your Dev Skills” books…
I’ve been looking through a few of my “Improve your Dev Skills” books:
What are your favorite books in this genre? Why?
I’ve been looking through a few of my “Improve your Dev Skills” books:
What are your favorite books in this genre? Why?
I wimped out on my ride yesterday morning (it’s hot and hard to sleep), so this morning I decided to tackle the infamous “Zoo Hill”, which climbs up Cougar Mountain near Issaquah.
Probably the worst hill that I’ve normall rode is Juanita Drive, which gains about 400′ over 1.3 miles, for a 5.8% grade. I hadn’t looked at the Zoo stats in a while, which turns out to be a good thing.
The climb starts immediately when you turn off of Newport, and it pretty brutal. It’s more brutal if you ride for 10 minutes, look down, and then realize that you still have one gear back at the back.
I usually run out of leg strength before I run out of aerobic capacity, but I ran out of breath lots of time on the climb. Definitely a good test of my capacity.
Overall Stats:
Length: 2.63 miles
Elevation: 1200 feet
Gradient: 8.1 % average
The average gradient is misleading. There are a lot of sections that are around a 5% grade, and even a few that are flat, so that means that the steep sections are up in the 15% range.
Riding down, I had to brake most of the time, because if I didn’t, I easily would have been in the mid 40’s. Next time, I’ll probably come down the next way.
Groupthink is a term coined by psychologist Irving Janis in 1972 to describe one process by which a group can make bad or irrational decisions. In a groupthink situation, each member of the group attempts to conform his or her opinions to what they believe to be the consensus of the group. This results in a situation in which the group ultimately agrees on an action which each member might normally consider to be unwise.
…
It hit me about mile 50 on Friday. There was really no other explanation. I was riding north along highway 9, in the rain, as I had for the past three and a half hoursm, and it hit me.
There was something wrong with me, with us, with all the riders around me. As I’ve mentioned in the past, there has to be at least something wrong with you to willingly put yourself on bike for 7 hours of riding, but granting that that is normal behavior, it’s certainly less normal to do it in the kind of weather we had.
But the majority of the riders not only decided to continue, they decided it was a good idea to continue. And continue we did…
…
It had initially looked like a great weekend to be riding – the 90 degree weather had departed, and we were in a nice mid-70s pattern. Thursday was perfect, but the forecast was for showers. I trolled around to different news sites (what is King 5 TV thinking? – do they actually believe that I’m going to register just to get a weather forecast?), looking for better news. I finally ended up on the NOAA site, which said, “Likely to be the rainiest day of the summer”.
Damn.
It’s not that I hadn’t ridden a fair bit in the rain this spring – I had. The problem is that when you’re exercising hard, there’s really no such thing as “breathable” clothing. You either have clothes that breathe well, but get wet quickly, or you have clothes that don’t breathe well, hold in your sweat, and you also get wet quickly. Cycling makes this especially bad because you don’t only get the rain, you get the spray off your tires. I put on my SKS Race Blade mini fenders Thursday night, which will keep the spray from my back tire off of my back, but it’s won’t keep the rain off totally.
Friday I woke up to dry streets. Cool. But as I drove across the 520 bridge a few drops started to spatter on the windshield of the truck. Bad news. I got there at around 5:30, hoping to meet up with a friend to leave by around 6:00. For various reasons, we didn’t get around to leaving until right at 6:30AM, as it started to rain. The first big hill of the day was up out of Woodinville, and I rode in my smallest gear, standing up here and there. Most of the riders were in pretty good shape. Along the segment from Snohomish to Lake Stevens, one of our team flatted, another went back to help her, and we rode on to wait at the stop. By this time I was really wet and cold on the arms (didn’t put on my arm warmers), but relatively dry on my torso, and my leg warmers and neopreme boot covers were fairly dry. We waited at Lake Stevens (mile 30) for about 25 minutes, and by that point I was starting to shiver in earnest, so I told Bill that I had to bail, and rode really hard to get warm again. The ride to Mount Vernon wasn’t much fun – I was reasonably warm, but you could either ride by yourself, or you could draft, and get a stream of road water into your face. I did a bit of both, and with my rear fender, I was pretty popular as a group leader.
The last couple of miles into Mt. Vernon (70 miles) were over ground down pavement, and I think I got a big of taste of what it might be like to ride on cobblestones. Not fun at all, especially uphill, so I ended riding down the center turn lane. Suffice it to say that it was not the only time that I bent the traffic rules over the two days.
The rest stop was a challenge. I needed to grab some food to supplement what I had brought alone (I get tired of sports bars and fig newtons after a while), and take a “nature break”, but every minute off the bike I was cooling off. I got back on the bike after a bagel, a banana, an oreo, and a refill of my two litre camelback (I sweat a lot when I have my shell on). I was *really* cold when I left, and rode hard for 15 minutes to get warm again.
And then something miraculous happened. As we rode to the west, the rain stopped, the skies cleared a little, and as the roads slowly dried, we did as well. I arrived at the base of Chuckanut drive – the last series of big climbs – in a group of 3 in good spirits, and rode the whole section with a rider who was doing RSVP as a training ride for a tour around Oregon. There are some painful climbs there, but none were too steep, and I made it into the finish at Bellingham in good shape, grabbed my backpack, and rode the 4 miles to my hotel (109.4 miles).
Saturday dawned with drying streets, and I rode back up the hills to drop off my backpack (note to self – book your hotel early), and headed off towards the border. I hooked up in two or three good pacelines and we flew across the flats to Lynden at around 20 MPH (which is quite a bit faster than I’d ride by myself). There are two interesting things about the border. The first is that there’s a road named “boundary road” that we rode on the US side, across the ditch, another road, this time in Canada. The second was my exchange with the Canadian customs officer:
Her: Where are you going?
Me: Vancouver
Her: Where are you staying?
Me: At a hotel, downtown.
Her: What hotel?
Me: I don’t remember
Her: Who made the arrangements?
Me: I did. I just don’t remember the name – it’s in my bag.
Her (shaking her head): Thanks. Enjoy your stay.
The problem was that I was in the zone, and when I’m in that mode, I’m not spending a lot of time on rational thought – I’m just riding.
The ride to the next rest stop (35 miles) was uneventfull, except for one really painful climb. I tanked up on water, ate a banana, and a bagel with peanut butter. The sun was intermittent, and it was wonderful. After the ride comes a short ferry trip, and then a ride up north, all the way to the Burrard inlet, for a final short rest stop (60ish miles). After a quick gel, I got on the Barnet highway, and realized two things.
First, I only had an hour or so left. That was nice.
Second, my legs felt really good. That was nicer.
So, I decided to hammer (or do my best approximation) for the last hour. The Barnet highways is mostly up, with only a few downhills, and bears a striking relationship to one of my training rides in gradient, so I rode it hard, uphill from 10 to 15 MPH, and passed a lot more people than I expected. The remainder of the ride was up and down on the crest of the hills, down into Chinatown, where a group of 10 of us got lost together, and then finally screaming along the waterfront and up a hill to the finish.
Overall, the ride was great. I felt good most of the time (with the exception of the rain), and the organization was really good, with the exception of a few marks that washed off in Vancouver. Kudos to the folks at Cascade.
My training was about right, though I would have like to have ridden a bit faster (I averaged about 14MPH the first day, and the mid 14s the second day (lots of stop and go)). I may do it next year, and I have this crazy idea that I might want to do STP in one day next year…
A few people have asked me what training I did for my century ride.
I’m currently riding 4 days a week (well, I took 10 days off at JavaOne and on vacation). Monday/Wednesday/Friday, I do a 15 mile ride which takes about an hour. It has some up and down hills, and a steady 2.5 mile hill in the middle. I try to ride that hill at a somewhat painful steady-state, where my legs are hurting but I don’t feel like I’m going to die.
On the weekend (usually Saturday), I’ll go on a long ride. I started at around 30 miles in March, progressed to 50 miles in May, and then peaked at 70 miles the week before the century. I aim for a pace that will leave me tired at the end but not so I couldn’t ride more if I had to, which obviously varies based upon the distance.
For the century, I found it to be hugely useful that I had ridden the bulk of the course before, so that I knew where all the hills were and how steep they were.
I’m planning on adding more mileage as the summer progresses, and perhaps a new bicycle.
Oh, and I haven’t yet gotten around to getting a heart rate monitor yet, though that would probably be a useful addition. I bought Chris Carmichael’s book a while back, and I’m planning on trying some of his training drills – I would really like to be able to bump my average speed up a few miles per hour.
Century
n.
I was feeling good. After a short lunch break (3:28, 56 miles), I had hooked up with a few riders and made good time from Monroe back towards the mid-point food stop. On the way I decided to make a pit stop at one of the rest stops. Clipped out of my left pedal, pulled into the gravel, stopped. Went to clip out of my right pedal, overbalanced, fell over into the gravel. Unclipped, laughed, and thanked the other riders who came over to see if I was all right.
So, I was a little more tired than I thought. But I’m getting ahead of myself now.
Late last summer, my wife and daughter and I rode in the Headwaters Century, put on by the Tacoma Wheelman’s club. I did the 66 mile route, while my wife pulled my daughter on her trailercycle for 45 miles (a bigger accomplishment than what I did, actually).
I had a lot of fun on that ride, and decided to set my sights higher. The traditional progression for riders in the Seattle area is to do some sort of century, then do the Seattle to Portland (STP) ride in two days, one of the biggest organized rides in the country (they may sell out at 8000 riders this year). Then, if you want a much harder challenge, you can do STP in one day, or RAMROD (154 miles, around 8500 feet of elevation gain), or even the RAPSody (150 miles, 9400 feet of gain). Or, if you’re more serious, you could do a 1000 KM Brevet (though to be fair, that’s over 3 days).
After consulting with a few experienced experts, I decided to make my goal for this year to ride RSVP (Ride Seattle to Vancouver and Party), a two-day ride from Seattle to Vancouver BC. This ride got started the year that Mount St. Helens erupted, and STP couldn’t be held. It’s much smaller than STP (900 riders max), and purported to be much prettier. It’s also a bit shorter, at 183 miles to STPs 200 miles.
To ride that distance, I needed an intermediate goal, so I chose the “Flying Wheels Summer Century”(“Screaming Thighs” is perhaps a better name), one of the toughest centuries in this area, because of the hills. I’ve been pre-riding parts of the course for a few weeks now, and was pretty confident that I could finish the ride.
The ride itself was great. The one section that I hadn’t ridden turned out to hillier than I expected, but all else was what I expected. Pre-riding it was a very good thing to do.
I rode most of the first two thirds of the ride by myself. I hooked up with groups for a while, but their pace was just a bit too high for me to be comfortable. After the 66 mile stop, I hooked up with a guy who was riding the same speed, and we rode the rest of the ride together (misery loves company). That makes the ride much more enjoyable, and you have the opportunity to draft on each other, which gets you any where from 10% to 30% less effort.
A few statistics:
Slowest speed: 6.5 MPH, riding up the first big hill (12% grade).
Fastest speed: 43 MPH, screaming down a hill at 90 miles into the ride. I got passed
Calories Expended: 3000-4000
Water: Around a gallon
Food:
24 ounces of gatorade
8 fig newtons
2 Balance Gold bars (Chocolate Mint, yum yum)
1 banana
1 package beef jerky (about a gram of sodium, very important)
2 Carb-boom gel packs (Apple Cinnamon). Pure glucose gel
½ bagel
4 bunches of grapes
2 handfulls of pretzels
Distance: 101.75 miles
Time: 6:49:22
Average Speed: 14.9 MPH
Elevation Gain: 2900 feet
My goal was to finish 100 miles in less than 7 hours, which requires an average of 14.3 MPH, and I’m very happy to have finished earlier than that. Though I could have ridden more, I definitely didn’t want to ride any more at that point.
My long-term readers know that I’m in training for a couple of bicycle rides later this summer (a century in June, and a two-day double century in August). The rest of you haven’t had the joy of reading endless descriptions of my cycling exploits, but I’m sure you’ll get a chance to do this in the future.
Anyway, I’ve been slowly upping my mileage to about 90 miles/week, including a 45-ish mile trip around the top half of Lake Washington, including a ride across Lacey V. Murrow memorial floating bridge (otherwise known as the I-90 bridge). That in itself is a experience, riding across a lake 20 or 30 feet off the water, both for the view and for the risk, given that a big chunk of the bridge sunk in the early 1990s due to an impressive display of cooperative incompetence between the state and the renovation contractor. The route around the Lake is really nice on a sunny day, but involves a lot of starting and stopping north of the University of Washington on the Burke-Gilman trail.
Last Saturday, I decided to vary my route. After riding about 25 miles and feeling good, I decided to ride on the east side of Lake Sammamish (lots of lakes around Seattle), which I hadn’t done before. I had one of those rare moments when everything seems to be working currently, and I rode for about 15 minutes at 21-23 MPH (about 4-5 MPH faster than normal), and then another 15 minutes flying (for me) up a 2-5 mile hill.
Overall, I did 48.6 miles in just under 3 hours, averaging a little over 16.2 miles per hour.
Which makes me very slow compared to more serious cyclists, but much faster than I was before.
Jay wrote a post entitled Properties? Not my bag, baby.
When I first started writing C# code, I used properties for everything. But recently, I’ve felt that I was wasting a lot of time writing trivial properties. Yes, I know that in Whidbey I’ll be able to use expansions to write them easily, but that still means that I have to deal with the property bodies cluttering up my code.
So, that got me thinking about whether it makes sense to be writing properties in the first place. After a bit of thought, here’s my current position:
Properties are a great thing for component libraries. There are certainly cases where you would want the future-proofing and decoupling that properties gives you.
But when you’re working on a single project that gets built all at once, I don’t think you’re getting any future-proofing benefits, and you have to pay the “property tax” the whole time.
This may be heretical, since “use properties” has been the common guideline.
What do you think?
Josh writes:
I’ve been working professionally with C# for about 2 years now and am just blown away by the things I can do with it. Lately though, I’ve felt like I’ve plateaud at this beginner to intermediate level. Every book I look at is either “Hello, World” or beyond my level of expertise, I feel like I’m always one step behind the game and my code is becoming stale.
That’s a very interesting question. I’m not longer a professional programmer (though I was for a little over a decade), so you’ll also want to listen to the comments that others are sure to write.
If you haven’t read them, there are a couple of books that I’d definitely recommend.
Code Complete
The Pragmatic Programmer
Both of these are currently on my bookshelf (actually, they would be if somebody hadn’t walked off with my copy of Code Complete).
To expose yourself to some new ideas, I’d also suggest:
Refactoring: Improving the Design of Existing Code
Extreme Programming Adventures in C#
Test-Driven Development in Microsoft .NET
Whether you agree with these approaches or not, they are certainly thought-provoking.
The best programmers that I’ve known always have a few side projects going on, where they’re exploring new areas, new environments, etc. If you’ve never done network programming, try writing some socket code, or play around with remoting, or DirectX. Play around with tools, like a profiler, or measure the performance of different options. Get a book on .NET IL and spend some time under the covers (Richter’s book is a good guide here).
Finally – and this may seem like weird advice from a C# guy – spend some time writing some code in a language such as Perl. Scripting languages lead to a different mindset that can be useful in language.
I got this reference from http://www.theserverside.net, but since they require login to get to the link, I’ll instead refer you to the book page
I took a look one of the sample chapters, and I thought it looked pretty good, except for the fact that the first interface in the chapter is named “Environment” (the others are fine).
Let’s see:
I can run for president!
…
Darn. I just checked Wikipedia, and found out that you only have to be 35. I’ve been wasting the last 5 years.
Recent Comments