Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm reading Code Complete with the intention of learning how to better structure my code, but I'm also learning a lot about how many aspects of programming something there are that aren't just writing the code.

The book talks a lot about problem definition, determining the requirements, defining the structure, designing the code, etc.

What tools are used for these non-writing steps of programming? Is there software that will help me design and plan out what I'm going to write before I do?

share|improve this question

closed as off topic by Jarrod Roberson, Walter, Yannis Rizos Jun 16 '12 at 23:03

Questions on Programmers Stack Exchange are expected to relate to software development within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here.If this question can be reworded to fit the rules in the help center, please edit the question.

I'm tempted to say one worthwhile tool that is falling into disuse is the Shift key ... the first clause of this question can be read two ways depending on whether one decides that the poster failed to capitalize "code complete" or merely has a slightly odd turn of phrase (I'm assuming he meant Code Complete). In my view, good programmers don't allow this kind of confusion to happen. Edit: on rereading I see he does mention "the book" later which answers the puzzle. –  Perry Jun 16 '12 at 20:47
What is the book you reference? And, it would be helpful to provide a context or language, as there are many answers. –  ClintNash Jun 16 '12 at 22:15
This is the book he's referring to. It's largely language-agostic amazon.co.uk/Code-Complete-Practical-Handbook-Construction/dp/… –  Dónal Jun 16 '12 at 22:55
Sometimes when you have a really difficult problem it helps to rest your mind a bit and let your subconscious brain chew on it for a while. There's a special non-programming tool I use to distract my conscious brain away from the task for exactly this purpose. It's called "Skyrim". It works really well. Highly recommended. –  Steven Burnap Jun 16 '12 at 23:06

5 Answers 5

up vote 2 down vote accepted

Especially for smaller projects, your best tools are pen and paper (or even better: drawing board). It is much easier to quickly vomit your ideas onto a paper than into a screen.

As for architecture software, Enterprise Architect is widely used, but is rather complex and hard to master (and not to mention expensive).

If you want something simpler, I can recommend a free tool called NClass - it is tied to C# and Java, so if you use one of these, you will be able to use this tool to great advantage (it can easily generate code from your designs).

Visual Studio 2010 (and 2012 of course) Ultimate also has powerful architecture modelling tools (with ability to generate C# code from the architecture). You can get 2012 RC for free and if you are student and your institution has MSDNAA program, you can get 2010 as well.

share|improve this answer

This is a good question - It was hard to think of in those terms. But I think this is a good 'all programmer' type of question.

I can only speak from my personal experience, but the short-answer is: there are many, non-programming tools, in different contexts.. too many to list.

You mention:

Structure, Requirements, and Design.

What non-programming tools do we use?

Some short, subjective aspects I see are: methodology tools, learning tools, delivery and maintenance tools, structure tools, design tools... So, here we go.

METHODOLOGY: We reuse a significant amount of methodology and best-practice to build structure, define requirements, and conduct creative-design.

There are two non-programming disciplines that are remarkable, UML modeling language, and Agile Development Methodology. These have much to do with Structure, Requirements and Design.

But there is more... Much more.

LEARNING: StackExchange is a gold-standard non-programming tool that give you the ability to program. Word up Stack-x. Then there is GitHub, don't even know where to start with that one. To me, GitHub is da bomb. Use GitHub as a social-coding tool to learn-by-doing. And with technologies unfolding on a week to week rate, Twitter, is a powerful learning tool to keep up with rapidly emerging events. Blog, Wordpress, it is important.

there is more..

REQUIREMENT - DELIVERY & MAINTAINING: Probably, there are more encompassing tools of delivery than actual IDE's (Integrated Development Environments), in most of programming. We use a lot of add-on software... without really any second thought of it. There are a number of procedural tools to fulfill requirements. I'll keep it short, All Repositories, Merging, and Collaboration tools. So, GitHub again. Continuous Integration, Automation tools, Testing tools, FTP. Building tools tasks and add-ons, Compressing. Then there are services, browser-extensions, plugins, it is vast, sir. Something to be admired perhaps.

DESIGN TOOLS: Pair Programming. Whiteboard. Get a WhiteBoard. Someone mentioned paper and pencil. So true! This is specifically used for user interfaces and increasingly for things like Mobile Design. There is also a massively, silently growing awesomeness over at Google, in Chrome Developer Tools. DevTools and FireBug is pretty much Non-Programming (for the moment - kind of). They are advancing rapidly toword providing activities like: Design - In the browser... So, structure on the fly, in-design, instant match to requirements style.

NON-PROGRAMMING STRUCTURE-TOOLS: Code can be structured in a very large number of ways. One very important area of mention is: Design Patterns. They result in about a hundred ways to do things like MVC, which stands for Model-View-Controller. So we have framework tools that provide Structure. There are so many it is exasperating For example, producing any number of Diagrams, Documentation, Direction, screenshots, videos, printers. Google Docs gets an honorable mention here, then there is a myriad of others like dropbox.

FRAMEWORKS as a Medium: These type of frameworks extend a best-practice of a technology. They are essentially tools to build on. It is hard to not mention: Backbone.js, Node.js, or three.js, micro-libraries, jQuery, ExtJS. Stuff like that...

MORE NON-PROGRAMMING DESIGN-TOOLS: UX : User-Experience is increasing in importance. A relatively new Front-End discipline is RWD - Responsive Web Design. Knowing these best-practices are mental tools to drive requirements like multi-device adaptivity. Which embodies evolving best-practices of structure and design.

Take a look

I hope that helps (with minimal typos). All the best! Nash

share|improve this answer

If you are planning to model in UML Visual Paradigm (there's a free Community Edition) supports quite some types of diagrams natively (e.g. Use Case, Communication, Class, Sequence, ... diagrams). I suppose a foundation in UML is needed to get most out of the tool, though.

share|improve this answer

As mentioned: The size is important, but there are tools for everything in a different level. So take the thing you want to do, and the chose a tool according to your projects size.

  • General structure Something to get the idea of what is being done, and how classes are combined. This should be a pen and paper in small projects, and a UML in larger.
  • Versioning This could be a local git or several backup folders, in larger projects you can use GitHub, SVN, whatever makes you and your team happy.
  • Communication and Task management According to the teams size, you need to provide a communication between them, to keep track of bugs, and development. If its a small team, they can fit in one room and just talk, or use a whiteboard. In larger teams an electronic bug tracking system and a task managing system might be required.
  • A reference arsenal Well this is half way a coding tool, but its always good to have a place where you can look up simple code snippets, specially for those wired things you have to do once every 3-4 months and you always forget how to do it.
  • Methodology is not really a tool, but its important too. There are various methodologies (like XP, Scrum, TDD, ect...), and they vary according to your needs, and in contrast to the other points, they don't depend on the size of the project.
share|improve this answer

If you're creating an application that has a UI, then a tool that allows you to create mockups of what it will look like and how it will work can be very useful. Balsamiq is a popular example of one such tool

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.