What is your strategy for becoming a better developer?

Justin Etheredge recently posted a question for the community on his site. I think this is a good thing to think about because my definition of a good developer is one who continually tries to be better at their craft. My suggestions may be very similar to others but I would love to hear feedback.

Read : the first suggestion I have is a bit obvious. I like to read books and blogs on programming — especially methodologies and architecture. Its hard to find good books becuase there seems to be an over saturation, many of which are not good. That being said, there are quite a few that I would still recommend : Head First Design Patterns, Don't Make Me Think (not really a programming book but important for anyone that writes applications with end-users) and Code Complete. Additionally I'm really looking foward to Beginning ASP.NET MVC by Simone and Keyvan. As for blogs, there are tons I subscribe to but a few I'll mention are Justin's, Jurgen Appelo's and Dustin Campbell's.

Share :  I first started my site to help myself and hopefully others with programming topics. As I chose a subject to write about, I realized I did a lot more research than I would if it was just something I wanted to learn. Additionally, there was a lot of experience that I gained from the comments on the articles. Sharing information with a high level of transparency helps you become a better developer because you will get feedback on your work.

Set Goals : Set goals to learn new languages / techniques. I start off by reading blogs/books/articles then think of achievable pet project to use these new techniques on. The progress on the project can be used as the baseline for determining your progress. This is not saying you would be an expert in the new area but, in my opinion, is one of the best ways to learn.

There are tons of additional ways to become a better developer and I would love to hear your suggestions!

 

Visual Studio Theme Generator

This is a really short post but I wanted to pass the word along. I just finished a fun little ASP.NET MVC Application to generate Visual Studio
themes based off of 3 given colors. I have always felt that selecting
every color to make a coherent theme is way too repetitive. This web
application automatically chooses complements / contrasts based off
your initial color selections (and uses jQuery to let you preview your
theme before creating). I will be making another, more detailed post later that will explain how it all works but for now, check it out and let me know what you think.

 

View the application

 

 

Quick Tip: Generate Change Script for SQL Modifications

 

This is probably another thing that many people know but it's new to me. In the Modify table window, you can generate a script to show the ALTER TABLE that Management Studio creates.

Make your change (add column / delete column / change a columns data type, etc.)

 
Click the 'Generate Change Script' button (this option is not at all hidden but was something I didn't take the time to use because I never needed it before). 

 

View the dialog with the change script

 

Thanks to my friend Ross for pointing this out to me. He really needs to start blogging these tips :)

 

Add this to the Visual Studio wish list

I really wish Visual Studio / SQL Server Management Studio had column editing support similar to text editors like Crimson Edit. I find myself using the column edit alot when running quick, one off SQL Queries or making the same change to multiple lines in VS. I know a lot of this functionality can be replicated with macros but it seems to be a lot faster to just hit column editing mode and type away. 

View my demo of Crimson Editor's Column Edit Mode. (Wink seems to slow down and speed up certain parts of the recording — especially when a dialog window is open.)

 


kick it on DotNetKicks.com

How did I get started in software development?


Justin Etheredge
recently tagged me to write up how I got started in software development (you are probably familiar with the meme started by Michael Eaton). Without any further explanation, here goes:

How old were you when you first started programming?

I first started programming when I was 10 or 11 (I don't remember exactly).

How did you get started in programming?

My interest in programming initially began as a general interest in computer games. My dad showed me how to get around in DOS and pulled up some games in QBasic. It wasn't long after that I started messing with the code to see what would happen if I changed things. From there, I tried writing some stuff on my own spending a lot of time in the syntax help. 

What was your first language?

BASIC

What was the first real program you wrote?

Depending on the definition, the first real program I wrote was a game that worked in an AOL chat room. When I was 13, one of my friends showed me this thing called a scrambler. The scrambler would let you enter a word, send the scrambled word to the chat and keep score of who got the word right first, etc. I don't know why but I thought it would be an interesting thing to try and replicate. About a month later, I had finished writing one using the VB and the Windows API. It was not very useful but I learned a lot that way I guess.

What languages have you used since you started programming?

C#, VB.NET, Java, JavaScript, Ruby, Perl, PHP, BASIC, C, C++, F# (and others)

What was your first professional programming gig?

When I was in Highschool/College I did some freelance websites/applications mainly for construction and contracting companies. After college my first full-time programming job was working at Franklin University on the development team (websites / web applications).

If you knew then what you know now, would you have started programming?

Absolutely.

If there is one thing you learned along the way that you would tell new developers, what would it be?

Be continuously learning.

What's the most fun you've ever had programming? 

I honestly couldn't tell you — there are a lot of projects that have been really fun. I especially like when there's some new kind of challenge I haven't encountered before.

Who are you calling out? 

Matt Braun

Scott Sanzenbacher 

Rob Conery

Jurgen Appelo

Danny Douglass

Oren Eini

 

Some tools for working with distributed teams

Whether you're creating a project for fun or freelancing (etc.),
working remotely as part of a team is becoming more and more common.
Communication is still key to a successful project, however, it's much
more difficult when your working with people in different locations and
on different schedules. Although, you will not be able to achieve the same
level of communication as face-to-face, there are some tools beyond
E-mail, IMs and Remote Desktop that could make your life a little
easier. Here are some of the tools I use when I'm not in the vicinity of as the team I'm working with.

Source Control
Obviously,
source control is a must-have. This is a given for development
projects; even if you're working by yourself. I use Subversion for all
of my code because it's relatively easy to set up and, for the most part,
pretty intuitive for newer users. When creating a source repository you
need to choose to:

  1. Host your own
  2. Go through a third party
    • Assembla
      -Although there are many options in this arena, this is the host that I
      use for remote collaboration so it's the one I'm going to focus on. You
      can set up a Subversion repository simply by adding a new project to
      your workspace and specifying that you want to use subversion (in the
      setup configuration). From there you can add users or make your project
      open to the public. Apart from Subversion, there are many other features
      that may make Assembla a worthwhile site to check into.

Finally when running Subversion, you're either going to need
an IDE that supports SVN, use the command line or download a client. I
use Tortoise SVN and the command prompt, however, Visual SVN for Visual
Studio looks nice (and when I'm using Eclipse, the SubVersion plugin is
wonderful).


Screen capture software
It
can be confusing trying to fix an issue based on a text description.
Having a screenshot or video that explains how to reproduce a bug can
be invaluable. Coupled with a bug tracking application, this can be an
extremely effective way to quickly resolve issues. Camtasia is
probably the ideal application for creating screen casts of a bug but
for the price tag it might be overkill (especially if it's just for fun
/ open source). Currently, I usually use Wink by Debug mode for this
sort of functionality. Although it's definitely not as feature rich as
Camtasia, it gets the job done.

Also see: Jing

Real-Time Collaboration
Some
situations require an extra level of involvement from team members.
Vyew has been an awesome addition to the tool belt. With it, I can
collaborate / share desktop / share files real time with someone else
anywhere in the world in. Similar to the screen capture application, it
really helps to communicate something that otherwise may be difficult to
explain. Earlier in the week, for example, I was having some trouble
with an Eclipse setting for a project I'm working on. Rather than sending e-mails back and forth trying to explain the issue, I used Vyew to
share my desktop with a friend half way across the country. In a
matter of minutes, he was able to diagnosis the problem and I was back in business. Vyew is free if you don't mind having ads on the page. Otherwise, it's $6.95/month for the Plus Package and $13.95/month the Professional version. For more information, vist the Vyew site or check-out Guy Kawasaki's synopsis of Vyew.

 

What tools do you use to stay connected with your team? 

Quick Tip – Visual Studio Keybindings

This may be common knowledge but it was new to me. If you're ever hand mangling control position in a winforms designer you can setup keybindings for Bring to Front Send to Back options that are normally available on the controls context menu. This is really useful if you have layers of controls and you can't always get to the Context.

  1. Click on Tools -> Options
  2. Under Environment, Select the Keyboard menu
  3. Type "Format.BringtoFront" (or "Format.SendtoBack") in the "Show Commands Containing" box
  4. Choose your shortcut keys
  5. Press Assign


Thanks to my friend Ross for pointing this out.