Tag Archives: blogging

10 Ways to Learn New Things in Development

Expanding upon one of the topics in my post about 5 Attributes of Highly Effective Developers, I’ve been thinking of various ways to kick-start learning opportunities in my career and hobbies.

1. Read books. There are tons of books about programming–probably most of them are useless, but there are many, many gems that can greatly influence your abilities.

I still find that it’s easier and faster to find information about many topics in familiar books than to find similarly valuable information online. Read all your books to get to this point.

Books are also valuable from theory, architecture, design point of view. There just aren’t that many places on the web to get high-quality, authoritative instruction in this.

Like this? Please check out my latest book, Writing High-Performance .NET Code.

2. Read Code. This is something I was late to. I didn’t start reading a lot of significant code until after I had a few years of professional programming experience. I would be a better programmer if I had started earlier. I try to read some source code every week (not related to work, not my own, etc.) from an open source project. Start with programs that you use and are interested in. I started with Paint.Net and it solidified a lot of .Net program design technique for me.

Reading other people’s code shows you different ways of doing things than you might have thought of on your own.

3. Write Code – Lots of it. Fundamentally, the best way to learn something is to do it. You can’t fully internalize something until you’ve written it. This starts with something as simple as copying the code examples from tutorials and books. That’s copying by hand, not cut&paste. There’s a difference. The idea is internalize and think, not blindly copy. Look up new API calls as you go. Tweak things.

Most importantly, develop your own projects–whether they’re simple games, participation in an open source project, or a simple plug-in to a program you use.

Try to use new technologies, new techniques, new designs–do things differently. Do things better in this project than in previous ones.

This is really the core point–if you want to be a better developer than develop.

4. Talk to other developers – about specific problems you have, as well as the latest tech news from [Apple|Microsoft|Google|Other]. This not only helps you feel part of a team or a community, but exposes you to a wide variety of different ideas.

Different types of projects require different designs, coding techniques, processes and thinking.

If you work in a small team (like I do) and you don’t have access to many other people, go find some at a local user group meeting. If nothing else, participate in online forums (you’ll have to look harder for an intelligent discussion).

5. Teach others. Similar to just reading code versus writing it, teaching other people can do wonders for forcing you to learn a topic in depth.

The very idea that you’re going to have to teach a topic to someone else should force you to learn something with a far better understanding than you might otherwise. You can face questions.

If you can’t explain a concept to a 6 year-old, you don’t fully understand it. – Albert Einstein

Teaching situations are myriad: one-on-one with your office-mate, water-cooler meetings, informal weekly gatherings, learning lunches, classrooms, seminars, and more.

How about setting up a once-a-week 30 minute informal discussion among like-minded developers? Each week, someone picks a topic they want to know more about and teaches it to the others, instigating a conversation. If you knew were going to teach the group about synchronization objects, don’t you think you’d want to understand the ins and outs of critical section implementation?

6. Listen to podcasts

If you’ve got time where your brain isn’t otherwise occupied, subscribe to podcasts. My current favorite programming-related one is .Net Rocks. They also do a video screen cast called dnrTV.

These will help you keep up on the latest and greatest technologies. You can’t learn everything and podcasts are a good way to get shallow, broad knowledge about a variety of topics, from which you can do your own deep investigations.

If there are other, high-quality developer podcasts, I’d love to hear about them.

7. Read blogs

There are more blogs than people to read them, but some are extremely well-done. I’m not even going to post links to any–there are plenty of other resources out there for that. This is one of the best ways to connect to people who actually develop the software you love and use.

8. Learn a new language

If all you’ve ever done is C(++,#)/Java there are a LOT of other ways to think about computer problems. Learning a new language will change the way you think. It’s not just a different syntax–it’s fundamentally rewiring the brain. Sure, all languages get compiled down to assembler in the end, but that doesn’t mean a high level abstraction isn’t valuable.

Functional, query, and aspect-oriented languages are starting to merge with C-based languages–are you ready?

9. Learn the anti-patterns

Aside from knowing what to do, learn what not to do. Read Dailywtf.com often and take the lessons to heart if you don’t already know.

It’s all well and good to understand proper OO design, coding style, and what you should be writing, but it’s easy to get into bad habits if you’re not careful. Learning to recognize bad ideas is vital when taking charge of a project.

Wikipedia has a thorough breakdown of many common anti-patterns,

10. Be Humble

Learning means:

  • Replacing faulty knowledge with better knowledge
  • Adding knowledge that you do not already have

There’s no way to learn until you admit you have some deficiencies. It all comes back to humility, doesn’t it? If you ever start thinking you know everything you need to, you’re in trouble. True learning is about hungrily seeking after knowledge and internalizing it. It takes lots effort. We all know this in theory, but we have to be constantly reminded.


Check out my latest book, the essential, in-depth guide to performance for all .NET developers:

Writing High-Performance.NET Code, 2nd Edition by Ben Watson. Available for pre-order:

Word Count Plugin for Windows Live Writer

I’ve fixed one of the biggest holes in functionality in Windows Live Writer. It’s simple, but essential: the ability to count words (and characters and paragraphs) in  your posts before publishing.

Windows Live Writer doesn’t really offer a way to extend the menu system itself, but you can create an “Insert…” plugin that just analyzes content instead of creates it, so it works pretty well.

Go get it from Windows Live Gallery. Let me know what you think!

Technorati Tags: ,,


Check out my latest book, the essential, in-depth guide to performance for all .NET developers:

Writing High-Performance.NET Code, 2nd Edition by Ben Watson. Available for pre-order:

20 Things to do when the Internet goes down

Even if the Internet connection goes out, your computer does not become a dumb brick. There were days these last few days where I didn’t bother turning it on. Then I realized all the things I could still do.

(My home Internet connection finally came back this morning. I’m bit upset that they didn’t figure it out earlier. It turned out that the first technician grossly misdiagnosed the problem. He put in an order for a new drop to be put in. Turned out it was just a broken modem. Why didn’t they try that earlier? Worse, why didn’t I think of it earlier. To be honest, I did think of it, but didn’t push it. Now I just need to get my money back from Comcast.)

Without further ado, here’s my suggestions for what to do when the Internet goes out:

On the computer:

  1. Organize photos in Picasa – I have nearly 6,000 photos on my computer. Many of them need to be deleted, organized, tagged, labeled, e-mailed, etc. (Yes, e-mailed–I can queue them in Outlook until the connection comes back).
  2. Organize My Documents – I’ve let My Documents folder get very messy. Lots of files that don’t need to be there anymore. Others need to be filed, or re-filed.
  3. Organize e-mail – I’ve got hundreds of folders in Outlook. I’ve tried to keep my Inbox empty and put things into @Action, @Someday, or @WaitingFor folders before they find a permanent home, but sometimes it still gets out of hand.
  4. Organize and fill in information in Windows Media Player. I still have music tagged with the wrong genre…
  5. Program. I’ve got two major programming projects I’m working on. They don’t depend on the Internet. The Internet is NICE if you need to learn something, but there’s always plenty of stuff to do that doesn’t require it. Write unit tests, run code coverage, design graphics, do all the other stuff if you must.
  6. Write e-mails to family. Long ones. Your mom will thank you.
  7. Catch up on podcasts. I got through ten episodes of Ask a Ninja, and nearly all backlogged podcasts. Now I’ll have a flood when I sync tonight.
  8. Write blog entries. I use Windows Live Writer. I should have done more of this.
  9. Play a game.
  10. Better, write a game.
  11. Setup appointments and events in Outlook for the next year.
  12. Read some classic programming texts.
  13. General computer maintenance. Defrag your disk, delete temp files, delete old installation files you haven’t used in 5 years (yes, I have some of those…). Use DiskSlicer to find where your space is going.
  14. Do long-avoided projects. I have approximately 20 hours of audio I need to edit and split into tracks. I’ve been putting it off for a very long time.

Off the Computer:

  1. Practice the piano.
  2. Read books. I’ve just started Cryptonomicon by Neal Stephenson. Very good, so far. Go buy it. If you’re a geek, you’ll like it. How can you not love a 2 page diversion into the mathematics of when a bike chain will interfere with a broken spoke and fall off? Other than the geekiness, it’s a good story.
  3. Learn to cook a new dish.
  4. Do crosswords.
  5. Exercise.
  6. Relax.

Or just go to the library and use the Internet. I only did this a few times, despite it being within walking distance from where I live.

Technorati Tags: ,,,,,,


Check out my latest book, the essential, in-depth guide to performance for all .NET developers:

Writing High-Performance.NET Code, 2nd Edition by Ben Watson. Available for pre-order:

Getting Green Off the Grid

Going green is something I am slowly becoming more interested in. I’m not really sure what steps exactly we need to take–I don’t think we have an inordinate impact on the environment, and to be honest, right my pocketbook is far more important. That said, I do drive a Honda Civic that I’ve been able to get more than 42mpg out of. We try to use everything we buy, and dispose, give away, recycle, sell, etc. everything we don’t need. We try to walk places where we can.

Thank you to Eric for his contribution to BuyMeALego. He has a genuinely interesting site. Getting Green Off the Grid is a blog about both more sustainable living and living independently.

About the site:

This is a journal of my research into becoming more independent, away from the power grid. My goal one day is to live out in the middle of nowhere, dependent upon none but myself and my family. That dream is a long way away, but every little step counts.

I think that is a very enviable position to be in–completely independent. Independent power utility in particular fascinates me. Or better, being able to sell your power back to the power company.

I don’t think it’s possible to turn off our dirty technologies or habits all at once, but having people like this who do the research, who advocate, who publicize the next big clean technology is absolutely vital. We need to start down the path and have smart people working on it hard. We’ll get there, eventually.

Anyway, I think I will subscribe to his blog for a while and check it out–the posts I’ve read are interesting and he links to some good stuff.

Technorati Tags: , , ,


Check out my latest book, the essential, in-depth guide to performance for all .NET developers:

Writing High-Performance.NET Code, 2nd Edition by Ben Watson. Available for pre-order:

Promoting your blog

Peter Bromberg has a great checklist of things you can do to promote your blog. It took a while, but I went through almost all of them. We’ll see if it pays off!

Technorati Tags: ,


Check out my latest book, the essential, in-depth guide to performance for all .NET developers:

Writing High-Performance.NET Code, 2nd Edition by Ben Watson. Available for pre-order:

Deep Computing Philosophy from Steve Yegge

If you haven’t read Steve Yegge, you owe it to yourself to do so. He only writes about once a month, but every single article is worth reading, whether you agree with him on everything or not. His latest is fascinating and incites some interesting pondering about the future of software…I’m going to have to think about a lot of it…


Check out my latest book, the essential, in-depth guide to performance for all .NET developers:

Writing High-Performance.NET Code, 2nd Edition by Ben Watson. Available for pre-order:

Code formatter for Windows Live Writer

I stumbled across a great code formatter for Windows Live Writer today. Here’s an example, using a C# function that converts a number into a formatted file size:

       public static string SizeToString(long size) 
        { 
            const long kilobyte = 1L << 10; 
            const long megabyte = 1L << 20; 
            const long gigabyte = 1L << 30; 
            const long terabyte = 1L << 40; 
            string kbSuffix = "KB"; 
            string mbSuffix = "MB"; 
            string gbSuffix = "GB"; 
            string tbSuffix = "TB"; 
            string suffix = kbSuffix; 

            double divisor = kilobyte;//KB 
            if (size > 0.9 * terabyte) 
            { 
                divisor = terabyte; 
                suffix = tbSuffix; 
            } 
            else if (size > 0.9 * gigabyte) 
            { 
                divisor = gigabyte; 
                suffix = gbSuffix; 
            } 
            else if (size > 0.9 * megabyte) 
            { 
                divisor = megabyte; 
                suffix = mbSuffix; 
            } 

            double newSize = size / divisor; 
            return string.Format("{0:F2}{1}", newSize,suffix); 
        }

Check out my latest book, the essential, in-depth guide to performance for all .NET developers:

Writing High-Performance.NET Code, 2nd Edition by Ben Watson. Available for pre-order:

The power of the blog to motivate corporate, societal, and government change

This is an issue that has been discussed many times previously–so many that I won’t even bother to link to those discussions. By now it’s well-understood that blogs carry a power stronger than most in the media initially assumed possible.

Not just blogs, but the entire “Web 2.0” phenomenon–MySpace, YouTube–the whole rotten bunch. 🙂 Would Patricia Dunn have stepped down as chair of HP were it not for the constant pounding brought on by the likes of Scoble? Maybe, maybe not. In some sectors, blogs are becoming as well-regarded, if not more, than traditional publishing. Maybe this is limited to the computer industry. Maybe I just read too many blogs. 🙂

Still, it seems that the nature of debate and information dissemination has changed. No longer are we fed what mainstream publishers tell us–even if it’s of better quality. We are now free to choose what and how we read–for good or bad.

We’ve already seen the effects on the corporations. Companies simply can’t get away with anything anymore. Somebody, somewhere, will jump on it.

Areas where I think it will get more interesting:

  1. entertainment – RIAA, MPAA, I’m talking about you. You have ZERO friends among bloggers. All of the bad things you’ve done in courts to innocent people, all of your extortion is shouted from the rooftops by people like those at TechDirt.  You can’t win this war. For now, the audience isn’t very general, but news spreads, and it’s spreading faster and further. Sooner or later, you will lose the PR battle completely–in the meantime, unless your companies drastically change how they do business, your business will be swept out from under you, relegated to the dustbin of irrelevance.
  2. corporations – Microsoft already can’t do anything without the blogosphere lighting up. In some ways, they’ve chosen to embrace this–witness the very high-quality set of developer blogs they host. On the other hand, they’re like any other large company–they have secrets and tactics they would rather not be public debate-fodder. Corporations will be forced to open the windows and let the light shine in on what they’re doing. 
  3. government – imagine if honest, whistle-blowing (or even dishonest whistle-blowing!) staffers ratted on all the corruption in Washington. Imagine if every backroom deal was publicized in embarrassing detail. I don’t think we’re anywhere close to that yet, but there are signs that things are beginning to emerge. Look at the hilarity on YouTube about Senator Ted Stevens’ gaffe about the Internet’s tubes. How long as CSPAN been broadcasting, again? Our elected officials say dumb things about topics they don’t understand all the time–but now we can hear about it over and over again.

Overall, I think blogging will lead to more accountability of traditional structures of society. However, even with these possibilities, there are potential pitfalls:

  1. Overcrowded Medium — occurs when there are WAYYYYYYY too many people broadcasting that not enough people are listening. If everybody in the world blogged, who would read them?
  2. Loss of accountability – if there is accountability for things that are written online, than anything goes. The Internet is already the source of much bad information–it can become much worse if most of it is partisan, subjective, opinionated blather. Still, I’m not convinced it will really be worse than the status quo. The media now is far from infallible. Maybe part of me just wants to keep faith in people’s ability to reason. 🙂
  3. Undercrowded Debates – Broadcast media is a finite resource therefore it maintains its quality mostly by the fact that it has  to judge some things more worthy of discussion than others. Those topics are what people hear about. The Internet, on the other hand, is an unlimited resource. Anybody can have a blog on anything and most do. 🙂 This means that people themselves must choose what they follow, leading to some topics having far fewer meaningful discussions than others. For example, blogs about software and computers comprise a fairly large and active community. Politics has a large community. But what about small-interest, high-importance communities and topics? Where are the scientist blogs about global warming? I’m sure there are some, but is that kind of community ever going to gain a large enough population to affect societal opinion?
  4. Lack of participation – related to Undercrowded Debates, this means people don’t participate in all the areas that are pertinent to their lives. For example, how many of the US Internet users follow blogs discussing network neutrality? This is certainly an issue that could affect all of us, but from what I can tell it’s mostly debated on tech blogs, while the rest of the country misrepresents the entire issue. It works the other way around–I don’t read any political blogs at the moment. What issues am I missing out on? It’s too easy to become part of a niche community on the Internet and ignore the community as a whole.

Some of these problems stem from the anonymity of the Internet, others from the exponential increases in information available to us. Perhaps there are technologies in the pipeline that will solve these issues for us someday. They certainly aren’t going away.

tags: , , , ,


Check out my latest book, the essential, in-depth guide to performance for all .NET developers:

Writing High-Performance.NET Code, 2nd Edition by Ben Watson. Available for pre-order:

Code Formatter Plugin for Windows Live Writer

I stumbled across a great code formatter for Windows Live Writer today. Here’s an example, using a C# function that converts a number into a formatted file size:

       public static string SizeToString(long size) 
        { 
            const long kilobyte = 1L << 10; 
            const long megabyte = 1L << 20; 
            const long gigabyte = 1L << 30; 
            const long terabyte = 1L << 40; 
            string kbSuffix = "KB"; 
            string mbSuffix = "MB"; 
            string gbSuffix = "GB"; 
            string tbSuffix = "TB"; 
            string suffix = kbSuffix; 

            double divisor = kilobyte;//KB 
            if (size > 0.9 * terabyte) 
            { 
                divisor = terabyte; 
                suffix = tbSuffix; 
            } 
            else if (size > 0.9 * gigabyte) 
            { 
                divisor = gigabyte; 
                suffix = gbSuffix; 
            } 
            else if (size > 0.9 * megabyte) 
            { 
                divisor = megabyte; 
                suffix = mbSuffix; 
            } 

            double newSize = size / divisor; 
            return string.Format("{0:F2}{1}", newSize,suffix); 
        }

Check out my latest book, the essential, in-depth guide to performance for all .NET developers:

Writing High-Performance.NET Code, 2nd Edition by Ben Watson. Available for pre-order:

Goodbye newsletters, hello RSS

I used to subscribe to tons of CNet, TechRepulic, PCMagazine, and Builder.com newsletters, but as of today–no longer. I’ve been unsubscribing from them as I get them. Unfortunately for them, I didn’t really use their content so I’m not bothering to subscribe to their RSS feeds. Maybe in the future…

I am relying more on RSS, however, to keep me informed on the world (technical and otherwise). I’ve got about 80 feeds.

When considering the spam situation alone, RSS makes a lot of sense. Will RSS ever overtake e-mail as a personal communications medium? I’m not sure. The way it’s setup right now is a little awkward–I would have to create a private feed for each recipient, we need better tools for publishing to multiple feeds, targeting individuals.


Check out my latest book, the essential, in-depth guide to performance for all .NET developers:

Writing High-Performance.NET Code, 2nd Edition by Ben Watson. Available for pre-order: