I very highly recommend StarUML, I used it in college for a Software Arch. class and it's the best I've found specifically for software diagramming. Has lots of different types of diagrams built in and recently featured a redesign based on the Brackets editor.
A close second would definitely be Visio.