Google
 

Thursday, June 21, 2007

Tuesday, June 19, 2007

Book Library

Monday, June 18, 2007

Agile Books

ref:http://www.martinfowler.com/books.html

Patterns of Enterprise Application Architecture

Cover Picture

On Amazon

My latest work, and I think the hardest one to write. It all started after Dave Rice and I gave some talks on J2EE architecture and mulled over how the concepts we had learned in C++, Forte, CORBA, and Smalltalk had been crucial to us developing good designs in Java. With this book I wanted to set many of these patterns down to help developers whatever their platform. As it's turned out these have been very valuable as we have started to use .NET in 2002.

The book is in two parts. The first part is a short (100 page) tutorial on enterprise application architecture. The bulk of the book is the reference to forty or so patterns. All of these patterns are ones that I've seen in the field, usually on many different programming platforms.

Each pattern describes details of how it works and when to use it, together with code examples in Java, C# or both. (I picked these languages because most software developers can read them, not because of any particular coupling or opinions about the language).

The main topic areas are: how to layer an enterprise application, how to organize domain logic, how to tie that logic to a relational database, how to design a web based presentation, some important principles in distributed design, and handling of what we call "offline concurrency" - concurrency that spans transactions.

I've been fortunate enough to have some excellent contributors to this book, most notably Dave Rice - who wrote a good tenth of it. Also joining in are Matt Foemmel, Edward Hieatt, Robert Mee, and Randy Stafford

The book has won two awards: a productivity award from Software Development magazine and a best java book award from JavaWorld.com.

| Errata |

Translations: Portuguese, Polish, German, Russian, Korean, Japanese.

Further Reading

Catalog of Patterns
Brief summaries of the patterns in the book
Distribution Strategies Chapter
SD Magazine adapted chapter 7 as an article for the magazine (Registration required with CMP)

Refactoring: Improving the Design of Existing Code

Cover Picture

On Amazon

Refactoring is a controlled technique for improving the design of an existing code base. Its essence is applying a series of small behavior-preserving transformations, each of which "too small to be worth doing". However the cumulative effect of each of these transformations is quite significant. By doing them in small steps you reduce the risk of introducing errors. You also avoid having the system broken while you are carrying out the restructuring - which allows you to gradually refactor a system over an extended period of time.

My book describes the process of refactoring and spends most of its time explaining how to do the various refactorings - the behavior preserving transformations. The book opens with a simple example that describes the whole process. There are then some introductory chapters that discuss broader issues around refactoring, the "code smells" that suggest refactoring, and the role of testing.

The bulk of the book is around seventy refactorings described in detail: the motivation for doing them, mechanics of how to do them safely and a simple example.

The books finishes with some guest chapters from those whose early work have developed the ideas of refactoring.

| Errata |

Translations: Japanese, German, Polish, Serbian, Portuguese, Chinese (Simplified and Traditional), Russian, Czech, and Korean

Further Reading

refactoring.com
My original hope was to make this a portal for on-going work on refactoring. I've learned that my ambitions never quite match up to the time I have available. However here you will find links to further resources on refactoring, including the mailing list and tools as they become available. I've also got a catalog that includes summaries of all the refactorings in the book, together with some new ones.

UML Distilled: A Brief Guide to the Standard Object Modeling Language

Cover Picture

On Amazon

The UML appeared in 1997 to eliminate the bedlam that had overtaken graphical modeling languages in the object-oriented world. Before the UML there were a host of such languages, differing in all sorts of annoying ways. Now the UML is pretty much the only game in town, which makes life much simpler for many people involved in OO software development

This book was the first book on the UML, and I wrote it as a short overview of the language. My aim was to target that fraction of the UML that was the most useful and explain it briefly. My proudest thing about this book is that it's under half an inch thick - which was very unusual for OO modelling books at that time. I was also pleased when it won a productivity award from Software Development magazine.

The book has chapters for all the major diagram types in the UML, together with an intro and some general guidance on software process and how it fits in with the UML. I also put in a lot of tips on how to use the UML well and introduce a number of principles and techniques for good OO development.

In September 2003, the 3rd edition of this book came out. This edition was mainly put together to bring the book into line with the latest UML 2 standard. I've further taken the opportunity to completely rewrite most of the book, clarifying explanation from my experiences and from review comments from others. I've added chapters for the new diagram types that were added in UML 2. However by slimming down the discussion on process, and removing the final code example chapter, I've actually managed to reduce the page count of the book. (It looks thicker because AW printed it on thicker paper.)

| Errata |

Translations: Third Edition: Korean, Chinese (Simplified and Traditional), Indonesian, Japanese, Russian, Portuguese, Bulgarian, Italian, French, Serbian, and German. Second Edition: Japanese, German, Dutch, Polish, Russian, Portugese, Korean, Chinese. First Edition: French, Spanish

Further Reading

Supplementory Articles
Some extra material about the UML on my site, including the summary of the changes in UML 1.x from the book.

Planning Extreme Programming

Cover Picture

On Amazon

In 1996 I was lucky enough to work on the C3 project for a year - this was the project that gave birth to Extreme Programming. I learned many things by taking part in that project, but one thing that particularly impressed me was the approach to planning. Not just was the project run on firmly iterative lines, it included a planning process that was simple, agile and remarkably effective.

After Kent's seminal "white book" came out, we talked about what kinds of books should follow on. Somehow Kent and I talked each other into collaborating on a book that focused on the planning side of Extreme Programming. Although it was based on the C3 experience, it also added lessons both we, and other early XPers, had learned from the first wave of XP projects.

Now there are quite a few XP books out there, and they are actually a very good bunch. But one valid complaint is that they are all somewhat similar. As a result, if you already have several XP books I'm not sure that you'll much that's new in this one. I think the primary value of this book lies in its sole focus on planning. If you're in a management or customer role on an XP project, then the technical practices don't matter that much to you. In which case a book that concentrates solely on the planning side is a good one to pick.

I also think that this is a good book even if you aren't into XP itself, but you do want to plan an iterative and agile project. One of the features of agility is that you recognize that software development is rarely a predictable process. But often that results in a different problem - where people don't really plan at all, or do plans that have little relationship with reality. The nice thing about XP's planning scheme is that it gives you control in a changing environment. So while you lose predictivity you don't lose control - and control is essential to successfully running an iterative project.

Translations: Japanese, German, Chinese (Simplified and Traditional), Russian

Further Reading

Links
My links page links to various further resources on XP and agile methods
Articles
I've written several articles about agile software development
The New Methodology
An outline article that explains what agile methods are all about
Manifesto for Agile Software Development
I was one of the authors of this surprisingly influential polemic

Analysis Patterns: Reusable Object Models

Cover Picture

On Amazon

My first book, and yes I admit it's showing its age. But it's still one of very few books that have tried to tackle this kind of material. It's about trying to find patterns in domain models of businesses, and is based on much of the domain modeling work that I did (and still love doing) in the late 80's and early 90's.

The patterns come from various domains, including health care, financial trading, and accounting. Each of the patterns is described both textually and in a simple pre-UML notation (this book was written before the UML had stabilized into a usable form).

There's much I could do to improve the presentation of the patterns in this book with what I've learned since. The core patterns themselves, have stood up surprisingly well to the test of time. There's very little here in the core content that I would change, but there's much I could add and I think I could now make them a lot easier to understand.

Translations: German, Japanese, Chinese (Simplified)

Further Reading

Articles
At one point I did embark on reworking some of the patterns and adding new ones. That effort has stalled for a while, I hope to pick it up someday. Until then, here are some of the more up to date ideas and presentations of the patterns.

My Signature Series

In 2002 Addison-Wesley launched their signature series. The idea is that their leading authors would host a small series of books that they felt were particularly special. Kent Beck and I were selected to be the first "signers". In this series I'm getting involved in, and recommending, books that I wish I could have written.


Beyond Software Architecture: Creating and Sustaining Winning Solutions

by Luke Hohmann

Cover Picture

On Amazon

Architecture has become a very slippery word in the software business. It's hard to come up with any solid definition of what it means. I see it as a fundamentally subjective term - when people describe their software architecture they select the important parts of their systems, how these parts fit together, and the key decisions they made in designing their systems. Architecture is also seen as a technical issue, with the implication that the key decisions that need to be made are technical decisions.

In talking with Luke over the last few years I've really enjoyed the fact that he talks about the kinds of things that are often sadly omitted from most architectural discussions - yet are every bit as important. Such things as the marketing view of a system, licensing terms, branding, deployment, billing. All of these issues have important technical and business implications. Senior technical people need to think about this stuff, or otherwise a technically capable system could fail to be good business decision.

Many of these issues matter most to people who sell software to other entities. But even if you're an architect of an in-house IS shop these issues are just as likely to trip you up. Licensing agreements with your vendors can make a big difference to the costs of the software you deploy, billing may become important if your business decides it wants to introduce a charge-back scheme, branding helps affect your visibility to the business side of your company.

Luke writes from the perspective of someone who has dealt with both the technical and business sides of software development. It's a duality I find appealing because it's led him to ponder issues that often don't get talked about. He shows that it's often the things you don't think to worry about that hurt you the most and in the process provides the advice you need to deal with them. As a result this book is a much needed complement to the technical aspects of software design.

Further Reading

Luke's Home Page
Here you can find more information about the book, as well as other papers that Luke has written.

Enterprise Integration Patterns : Designing, Building, and Deploying Messaging Solutions

Cover Picture

On Amazon

While I was working on P of EAA, I was lucky to get some in-depth review from Kyle Brown and Rachel Reinitz at some informal workshops at Kyle's office in Raleigh-Durham. During these sessions, we realized that a big gap in my work was asynchronous messaging systems.

There are many gaps in my book, and I never intended it to be a complete collection of patterns for enterprise development. But the gap on asynchronous messaging is particularly important because we believe that asynchronous messaging will play an increasingly important role in enterprise software development, particularly in integration. Integration is important because applications cannot live isolated from each other. We need techniques that allow us to take applications that were never designed to interoperate and break down the stovepipes so we can gain a greater benefit than the individual applications can offer us.

Various technologies have been around that promise to solve the integration puzzle. We all concluded that messaging is the technology that carries the greatest promise. The challenge we faced was to convey how to do messaging effectively. The biggest challenge in this is that messages are by their nature asynchronous, and there are significant differences in the design approaches that you use in an asynchronous world.

I didn't have space, energy, or frankly the knowledge to cover this topic properly in P of EAA . But we came up with a better solution to this gap: find someone else who could. We hunted down Gregor and Bobby, and they took up the challenge. This book is the result.

I'm delighted with the job that they have done. If you've already worked with messaging systems, this book will systematize much of the knowledge that you and others have already learned the hard way. If you are about to work with messaging systems, this book will provide a foundation that will be invaluable no matter which messaging technology you have to work with.

Further Reading

Enterprise Integration Patterns Web Site
Gregor maintains a site with a lot more information on enterprise integration with messaging.

Refactoring to Patterns

Cover Picture

On Amazon

For several years now, I've been involved with advocating agile methods in general, and Extreme Programming in particular. When I do people often question how this fits in with my long running interest in design patterns. Indeed I've heard people claim that by encouraging refactoring and evolutionary design, I'm recanting what I've previously written about analysis and design patterns.

Yet all it takes is a quick look at people to realize that this view is flawed. Look at the leading members of the patterns community and at the leading members of the agile and XP communities and you see a huge intersection. The truth is that patterns and evolutionary design have had a close relationship since their very beginnings.

Josh Kerievsky has been at the heart of this overlap. I first met him when he organized the successful patterns study groups in New York City. These groups did a collaborative study of growing literature on design patterns. I quickly learned that Josh's understanding of design patterns was second to none, and I gained a lot of insight into those patterns by listening to him. Josh adopted refactoring early, and was an extremely helpful reviewer on my book. As such it was no surprise to me that he also was a pioneer of Extreme Programming. His paper on patterns and Extreme Programming at the first XP conference is one of my favorites.

So if anyone is perfectly suited to write about the interplay of patterns and refactoring, Josh is. It's territory I explored a little bit in Refactoring, but I didn't take it too far because I wanted to concentrate on the basic refactorings. This book greatly expands that area discussing in good detail how to evolve most of the popular Gang of Four patterns, showing that they need not be designed in up front, but evolved to as a system grows.

As well as the specific knowledge about these refactorings that you can gain from studying them, this book also tells you more about patterns and refactoring in general. Many people have said they find a refactoring approach to be a better way of learning about patterns, because you see in gradual stages the interplay of problem and solution. These refactorings also reinforce the critical fact that refactoring is all about making large changes in tiny steps.

So I'm delighted to be able to present this book to you. I've spent a long time cajoling Josh to write a book, and then working with him on this one. I'm delighted with the result and I think you will be too.

This book won a Software Development Magazine Productivity award in 2005.

Further Reading

Josh Kerievsky's page for the book


Refactoring Databases : Evolutionary Database Design

Cover Picture

On Amazon

A decade ago 'refactoring' was a word only known to a few people, mostly in the Smalltalk community. It's been wonderful to watch more and more people learn how to use refactoring to modify working code in a disciplined and effective manner. As a result many people now see code refactoring as an essential part of software development.

I live in the world of enterprise applications, and a big part of enterprise application development is working with databases. In my original book on refactoring I picked out databases as a major problem area in refactoring since refactoring databases introduces a new set of problems. These problems are exacerbated by the sad division that's developed in the enterprise software world where database professionals and software developers are separated by a wall of mutual incomprehension and contempt.

One of the things I like about Scott and Pramod is that, in different ways, they have both worked hard to try and cross this division. Scott's writings on databases have been a consistent attempt to bridge the gap, his work on object-relational mapping has been a great influence on my own writings on enterprise application architecture. Pramod may be less known, but his impact has been just as great on me. When he started work on a project with me at ThoughtWorks we were told that refactoring of databases was impossible. Pramod rejected that notion, taking some sketchy ideas and turning them into a disciplined program that kept the database schema in constant, but controlled motion. This freed up the application developers to use evolutionary design in the code too. Pramod has since taken these techniques to many of our clients, spreading them around our ThoughtWorks colleagues and, at least for us, forever banishing databases from the list of roadblocks to continual design.

This book assembles the lessons of two people who have lived in the no-mans land between applications and data and presents a guide on how to use refactoring techniques for databases. If you're familiar with refactoring you'll notice that the major change is that not just do you have to change program and data structures, you also have to manage continual migration of the data itself. This book tells you how to do that, backed by the project experience (and scars) that these two have accumulated.

Much though I'm delighted by the appearence of this book, I also hope it's only a first step. After my refactoring book appeared I was delighted to find sophisticated tools appear with automated many refactoring tasks. I hope the same thing happens with databases, and we begin to see vendors offer tools that make continual migrations of schema and data easier for everyone. Before that happens this book will help you build your own processes and tools to help; afterwards this book will have lasting value as a foundation for using such tools sucessfully.

Further Reading

Database Refactoring Website
Website for the book with summaries of the refactorings.

Continuous Integration: Improving Software Quality and Reducing Risk

Cover Picture

On Amazon

In my early days in the software industry, one of the most awkward and tense moments of a software project was integration. Modules that worked individually were put together and the whole usually failed in ways that were infuriatingly difficult to find. Yet in the last few years, integration has largely vanished as a source of pain for projects, diminishing to a non-event.

The essence of this transformation is the practice of integrating more frequently. At one point a daily build was considered to be an ambitious target. Most projects I talk to now integrate many times a day. Oddly enough it seems that when you run into a painful activity, a good tip is to do it more often.

One of the interesting things about Continuous Integration is how often people are surprised by the impact that it has. We often find people dismiss it as a marginal benefit, yet it can bring an entirely different feel to a project. There is a much greater sense of visibility, because problems are detected faster. Since there is less time between introducing a fault and discovering you have it, the fault easier to find because you can easily look at what's changed to help you find the source. Coupled with a determined testing program, this can lead to a drastic reduction in bugs. Developers as a result spend less time debugging and more time adding features, confident they are building on a solid foundation.

Of course it isn't enough simply to say that you should integrate more frequently. Behind that simple catch phrase is a bunch of principles and practices that can make continuous integration a reality. You can find much of this advice scattered in books and on the Internet (and I'm proud to have helped add to this content myself), but you have to do the digging yourself.

So I'm glad to see that Paul has gathered this information together into a cohesive book, a handbook for those that want to put together this best practice. Like any simple practice, there's lots of devil in the details. Over the last few years we've learned a lot about those details and how to deal with them. This book collects together these lessons to provide as solid a foundation for Continuous Integration as Continuous Integration does for software development.


xUnit Test Patterns: Refactoring Test Code

Cover Picture

On Amazon

If you go to junit.org, you'll see a quote from me: "never in the field of software development have so many owed so much to so few lines of code". JUnit has been criticized as a minor thing, something any reasonable programmer could produce in a weekend. This is true, but utterly misses the point. The reason JUnit is important, and deserves the Churchillian knock-off, is that the presence of this tiny tool has been essential to a fundamental shift for many programmers. A shift where testing has moved to a front and central part of programming. People have advocated it before, but JUnit made it happen more than anything else.

It's more than just JUnit, of course. Ports of JUnit have been written for lots of programming languages. This loose family of tools, often referred to as xUnit tools, have spread their way far beyond the java roots. (And of course the roots weren't really in Java, as Kent Beck wrote this code for Smalltalk years before.)

XUnit tools, and more importantly the philosophy, offer up a huge opportunity to programming teams. An opportunity to write powerful regression test suites that enable teams to make drastic changes to a code-base with far less risk. Opportunities to re-think the design process with Test Driven Development.

But with these opportunities come new problems and new techniques. Like any tool, the xUnit family can be used well or badly. Thoughtful people have figured out various ways to use xUnit, to organize the tests and data effectively. Like the early days of objects, much of the knowledge to really use the tools is hidden in the heads of its skilled users. Without this hidden knowledge you can't really get the full benefits.

It was nearly twenty years ago when people in the object-oriented community realized this problem for objects and began to formulate an answer. This answer was to describe their hidden knowledge in the form of patterns. Gerard Meszaros was one of the pioneers in doing this. When I first started exploring patterns, Gerard was one of the leaders that I learned from. Like many in the patterns world, Gerard also was an early adopter of Extreme Programming, and thus worked with xUnit tools from the earliest days. So it's entirely logical that he should have taken on the task of capturing that expert knowledge in the form of patterns.

I've been excited by this project since I first heard about it. (I had to launch a commando raid to steal this book from Bob Martin because I wanted it to grace my series instead.) Like any good patterns book it provides knowledge to new people in the field, and just as important, provides vocabulary and the foundations for experienced practitioners to pass their knowledge onto their colleagues. For many people, the famous Gang of Four booked unlocked the hidden gems of object-oriented design, this book does the same for xUnit.


--
Happy day, happy life!

Visual Studio shortcut keys

ref:http://www.dofactory.com/ShortCutKeys/ShortCutKeys.aspx

You are familiar with many of Visual Studio's shortcut keys, but not all of them. Here is a handy reference that can make your .NET lifestyle easier and a lot more productive. Note: the 'must-know' shortcut keys are highlighted.

General

Shortcut Description
Ctrl-X or
Shift-Delete
Cuts the currently selected item to the clipboard
Ctrl-C or
Ctrl-Insert
Copies the currently selected item to the clipboard
Ctrl-V or
Shift-Insert
Pastes the item in the clipboard at the cursor
Ctrl-Z or
Alt-Backspace
Undo previous editing action
Ctrl-Y or
Ctrl-Shift-Z
Redo the previous undo action
Ctrl-Shift-V or
Ctrl-Shift-Insert
Pastes an item from the clipboard ring tab of the Toolbox at the cursor in the file and automatically selects the pasted item. Cycle through the items on the clipboard by pressing the shortcut keys repeatedly
Esc
Closes a menu or dialog, cancels an operation in progress, or places focus in the current document window
Ctrl-S
Saves the selected files in the current project (usually the file that is being edited)
Ctrl-Shift-S
Saves all documents and projects
Ctrl-P
Displays the Print dialog
F7
Switches from the design view to the code view in the editor
Shift-F7
Switches from the code view to the design view in the editor
F8
Moves the cursor to the next item, for example in the TaskList window or Find Results window
Shift-F8
Moves the cursor to the previous item, for example in the TaskList window or Find Results window
Shift-F12
Finds a reference to the selected item or the item under the cursor
Ctrl-Shift-G
Opens the file whose name is under the cursor or is currently selected
Ctrl-/
Switches focus to the Find/Command box on the Standard toolbar
Ctrl-Shift-F12
Moves to the next task in the TaskList window
Ctrl-Shift-8
Moves backward in the browse history. Available in the object browser or Class View window
Alt-Left Arrow
Go back in the web browser history
Alt-Right Arrow
Go forward in the web browser history



Text navigation

Shortcut Description
Left Arrow
Moves the cursor one character to the left
Right Arrow
Moves the cursor one character to the right
Down Arrow
Moves the cursor down one line
Up Arrow
Moves the cursor up one line
Page Down
Scrolls down one screen in the editor window
Page Up
Scrolls up one screen in the editor window
End
Moves the cursor to the end of the current line
Home
Moves the cursor to the beginning of the line. If you press Home when the cursor is already at the start of the line, it will toggle the cursor between the first non-whitespace character and the real start of the line
Ctrl-End
Moves the cursor to the end of the document
Ctrl-Home
Moves the cursor to the start of the document
Ctrl-G
Displays the Go to Line dialog. If the debugger is running, the dialog also lets you specify addresses or function names to go to
Ctrl-]
Moves the cursor to the matching brace in the document. If the cursor is on an opening brace, this will move to the corresponding closing brace and vice versa
Ctrl-K, Ctrl-N
Moves to the next bookmark in the document
Ctrl-K, Ctrl-P
Moves to the previous bookmark
Ctrl-K, Ctrl-I
Displays Quick Info, based on the current language
Ctrl-Down Arrow
Scrolls text down one line but does not move the cursor. This is useful for scrolling more text into view without losing your place. Available only in text editors
Ctrl-Up Arrow
Scrolls text up one line but does not move the cursor. Available only in text editors
Ctrl-Right Arrow
Moves the cursor one word to the right
Ctrl-Left Arrow
Moves the cursor one word to the left
Ctrl-Shift-1
Navigates to the next definition, declaration, or reference of an item. Available in the object browser and Class View window. Also available in source editing windows if you have already used the Edit.GoToReference (Shift-F12) shortcut
Ctrl-Shift-2
Navigates to the previous definition, declaration, or reference of an item



Text manipulation

Shortcut Description
Enter
Inserts a new line
Delete
Deletes one character to the right of the cursor
Insert
Toggles between insert and overtype insertion modes
Tab
Indents the currently selected line or lines by one tab stop. If there is no selection, this inserts a tab stop
Shift-Tab
Moves current line or selected lines one tab stop to the left
Backspace or
Shift-Backspace
Deletes one character to the left of the cursor
Ctrl-K, Ctrl-C
Marks the current line or selected lines of code as a comment, using the correct comment syntax for the programming language
Ctrl-K, Ctrl-U
Removes the comment syntax from the current line or currently selected lines of code
Ctrl-T or
Shift-Enter
Swaps the characters on either side of the cursor. (For example, AC|BD becomes AB|CD.) Available only in text editors
Ctrl-K, Ctrl-L
Removes all unnamed bookmarks in the current document
Ctrl-M, Ctrl-O
Automatically determines logical boundaries for creating regions in code, such as procedures, and then hides them. This collapses all such regions in the current document
Alt-Right Arrow or
Ctrl-Spacebar
Displays statement completion based on the current language or autocompletes word if existing text unambiguously identifies a single symbol
Ctrl-K, Ctrl-\
Removes horizontal whitespace in the selection or deletes whitespace adjacent to the cursor if there is no selection
Ctrl-K, Ctrl-F
Applies the indenting and space formatting for the language as specified on the Formatting pane of the language in the Text Editor section of the Options dialog to the selected text.
Ctrl-L
Cuts all selected lines or the current line if nothing has been selected to the clipboard
Ctrl-Shift-L
Deletes all selected lines or the current line if no selection has been made
Ctrl-Enter
Inserts a blank line above the cursor
Ctrl-Shift-Enter
Inserts a blank line below the cursor
Shift-Alt-T
Moves the line containing the cursor below the next line
Ctrl-J
Lists members for statement completion when editing code
Ctrl-U
Changes the selected text to lowercase characters
Ctrl-Shift-U
Changes the selected text to uppercase characters
Ctrl-Shift-Spacebar
Displays a tooltip that contains information for the current parameter, based on the current language
Ctrl-M, Ctrl-U
Removes the outlining information for the currently selected region
Ctrl-M, Ctrl-P
Removes all outlining information from the entire document
Ctrl-R, Ctrl-P
Swaps the anchor and endpoint of the current selection
Ctrl-M, Ctrl-L
Toggles all previously marked hidden text sections between hidden and display states
Ctrl-K, Ctrl-K
Sets or removes a bookmark at the current line
Ctrl-M, Ctrl-M
Toggles the currently selected hidden text section or the section containing the cursor if there is no selection between the hidden and display states
Ctrl-K, Ctrl-H
Sets or removes a shortcut in the tasklist to the current line
Ctrl-R, Ctrl-R
Enables or disables word wrap in an editor
Ctrl-R, Ctrl-W
Shows or hides spaces and tab marks
Ctrl-Delete
Deletes the word to the right of the cursor
Ctrl-Backspace
Deletes the word to the left of the cursor
Ctrl-Shift-T
Transposes the two words that follow the cursor. (For example, |End Sub would be changed to read Sub End|.)



Text selection

Shortcut Description
Shift-Left Arrow
Moves the cursor to the left one character, extending the selection
Shift-Alt-Left Arrow
Moves the cursor to the left one character, extending the column selection
Shift-Right Arrow
Moves the cursor to the right one character, extending the selection
Shift-Alt-Right Arrow
Moves the cursor to the right one character, extending the column selection
Ctrl-Shift-End
Moves the cursor to the end of the document, extending the selection
Ctrl-Shift-Home
Moves the cursor to the start of the document, extending the selection
Ctrl-Shift-]
Moves the cursor to the next brace, extending the selection
Shift-Down Arrow
Moves the cursor down one line, extending the selection
Shift-Alt-Down Arrow
Moves the cursor down one line, extending the column selection
Shift-End
Moves the cursor to the end of the current line, extending the selection
Shift-Alt-End
Moves the cursor to the end of the line, extending the column selection
Shift-Home
Moves the cursor to the start of the line, extending the selection
Shift-Alt-Home
Moves the cursor to the start of the line, extending the column selection
Shift-Up Arrow
Moves the cursor up one line, extending the selection
Shift-Alt-Up Arrow
Moves the cursor up one line, extending the column selection
Shift-Page Down
Extends selection down one page
Shift-Page Up
Extends selection up one page
Ctrl-A
Selects everything in the current document
Ctrl-W
Selects the word containing the cursor or the word to the right of the cursor
Ctrl-=
Selects from the current location in the editor back to the previous location in the navigation history
Ctrl-Shift-Page Down
Moves the cursor to the last line in view, extending the selection
Ctrl-Shift-Page Up
Moves the cursor to the top of the current window, extending the selection
Ctrl-Shift-Alt-Right Arrow
Moves the cursor to the right one word, extending the column selection
Ctrl-Shift-Left Arrow
Moves the cursor one word to the left, extending the selection
Ctrl-Shift-Alt-Left Arrow
Moves the cursor to the left one word, extending the column selection



Project related

Shortcut Description
Ctrl-Shift-B
Builds the solution
Ctrl-N
Displays the New File dialog. Note: files created this way are not associated with a project. Use Ctrl-Shift-A to add a new file in a project
Ctrl-Shift-N
Displays the New Project dialog
Ctrl-O
Displays the Open File dialog
Ctrl-Shift-O
Displays the Open Project dialog
Shift-Alt-A
Displays the Add Existing Item dialog
Ctrl-Shift-A
Displays the Add New Item dialog
Ctrl-Alt-Insert
Allows you to override base class methods in a derived class when an overridable method is highlighted in the Class View pane



Window manipulation

Shortcut Description
Shift-Alt-Enter
Toggles full screen mode
Ctrl-+
Goes back to the previous location in the navigation history. (For example, if you press Ctrl-Home to go to the start of a document, this shortcut will take the cursor back to wherever it was before you pressed Ctrl-Home.)
Ctrl-Shift-+
Moves forward in the navigation history. This is effectively an undo for the View.NavigateBackward operation
Ctrl-F4
Closes the current MDI child window
Shift-Esc
Closes the current tool window
Ctrl-F2
Moves the cursor to the navigation bar at the top of a code view
Ctrl-Tab
Cycles through the MDI child windows one window at a time
Ctrl-F6,
Ctrl-Shift-Tab
Moves to the previous MDI child window
Alt-F6,
Ctrl-Shift-F6
Moves to the next tool window
Shift-Alt-F6
Moves to the previously selected window
F6
Moves to the next pane of a split pane view of a single document
Shift-F6
Moves to the previous pane of a document in split pane view
Ctrl-Pagedown
Moves to the next tab in the document or window (e.g., you can use this to switch the HTML editor from its design view to its HTML view
Ctrl-PageUp
Moves to the previous tab in the document or window



Control editor (designer)

Shortcut Description
Ctrl-Down Arrow
Moves the selected control down in increments of one on the design surface

Down Arrow
Moves the selected control down to the next grid position on the design surface
Ctrl-Left Arrow
Moves the control to the left in increments of one on the design surface
Left Arrow
Moves the control to the left to the next grid position on the design surface
Ctrl-Right Arrow
Moves the control to the right in increments of one on the design surface
Right Arrow
Moves the control to the right into the next grid position on the design surface
Ctrl-Up Arrow
Moves the control up in increments of one on the design surface
Up Arrow
Moves the control up into the next grid position on the design surface
Tab
Moves to the next control in the tab order
Shift-Tab
Moves to the previous control in the tab order
Ctrl-Shift-Down Arrow
Increases the height of the control in increments of one on the design surface
Shift-Down Arrow
Increases the height of the control to the next grid position on the design surface
Ctrl-Shift-Left Arrow
Reduces the width of the control in increments of one on the design surface
Shift-Left Arrow
Reduces the width of the control to the next grid position on the design surface
Ctrl-Shift-Right Arrow
Increases the width of the control in increments of one on the design surface
Shift-Left Arrow
Increases the width of the control to the next grid position on the design surface
Ctrl-Shift-Up Arrow
Decreases the height of the control in increments of one on the design surface
Shift-Up Arrow
Decreases the height of the control to the next grid position on the design surface



Shortcut Description
Ctrl-F
Displays the Find dialog
Ctrl-Shift-F
Displays the Find in Files dialog
F3
Finds the next occurrence of the previous search text
Ctrl-F3
Finds the next occurrence of the currently selected text or the word under the cursor if there is no selection
Shift-F3
Finds the previous occurrence of the search text
Ctrl-Shift-F3
Finds the previous occurrence of the currently selected text or the word under the cursor
Ctrl-D
Places the cursor in the Find/Command line on the Standard toolbar
Alt-F3, H
Selects or clears the Search Hidden Text option for the Find dialog
Ctrl-I
Starts an incremental search—after pressing Ctrl-I, you can type in text, and for each letter you type, VS.NET will find the first occurrence of the sequence of letters you have typed so far. This is a very convenient facility, as it lets you find text by typing in exactly as many characters as are required to locate the text and no more. If you press Ctrl-I a second time without typing any characters, it recalls the previous pattern. If you press it a third time or you press it when an incremental search has already found a match, VS.NET searches for the next occurrence.
Alt-F3, C
Selects or clears the Match Case option for Find and Replace operations
Alt-F3, R
Selects or clears the Regular Expression option so that special characters can be used in Find and Replace operations
Ctrl-H
Displays the Replace dialog
Ctrl-Shift-H
Displays the Replace in Files dialog
Ctrl-Shift-I
Performs an incremental search in reverse direction
Alt-F3, S
Halts the current Find in Files operation
Alt-F3, B
Selects or clears the Search Up option for Find and Replace operations
Alt-F3, W
Selects or clears the Match Whole Word option for Find and Replace operations
Alt-F3, P
Selects or clears the Wildcard option for Find and Replace operations



Help

Shortcut Description
Ctrl-Alt-F1
Displays the Contents window for the documentation
Ctrl-F1
Displays the Dynamic Help window, which displays different topics depending on what items currently have focus. If the focus is in a source window, the Dynamic Help window will display help topics that are relevant to the text under the cursor
F1
Displays a topic from Help that corresponds to the part of the user interface that currently has the focus. If the focus is in a source window, Help will try to display a topic relevant to the text under the cursor
Ctrl-Alt-F2
Displays the Help Index window
Shift-Alt-F2
Displays the Index Results window, which lists the topics that contain the keyword selected in the Index window
Alt-Down Arrow
Displays the next topic in the table of contents. Available only in the Help browser window
Alt-Up Arrow
Displays the previous topic in the table of contents. Available only in the Help browser window
Ctrl-Alt-F3
Displays the Search window, which allows you to search for words or phrases in the documentation
Shift-Alt-F3
Displays the Search Results window, which displays a list of topics that contain the string searched for from the Search window.
Shift-F1
Displays a topic from Help that corresponds to the user interface item that has the focus



Debugging

Shortcut Description
Ctrl-Alt-V, A
Displays the Auto window to view the values of variables currently in the scope of the current line of execution within the current procedure
Ctrl-Alt-Break
Temporarily stops execution of all processes in a debugging session. Available only in run mode
Ctrl-Alt-B
Displays the Breakpoints dialog, where you can add and modify breakpoints
Ctrl-Alt-C
Displays the Call Stack window to display a list of all active procedures or stack frames for the current thread of execution. Available only in break mode
Ctrl-Shift-F9
Clears all of the breakpoints in the project
Ctrl-Alt-D
Displays the Disassembly window
Ctrl-F9
Enables or disables the breakpoint on the current line of code. The line must already have a breakpoint for this to work
Ctrl-Alt-E
Displays the Exceptions dialog
Ctrl-Alt-I
Displays the Immediate window, where you can evaluate expressions and execute individual commands
Ctrl-Alt-V, L
Displays the Locals window to view the variables and their values for the currently selected procedure in the stack frame
Ctrl-Alt-M, 1
Displays the Memory 1 window to view memory in the process being debugged. This is particularly useful when you do not have debugging symbols available for the code you are looking at. It is also helpful for looking at large buffers, strings, and other data that does not display clearly in the Watch or Variables window
Ctrl-Alt-M, 2
Displays the Memory 2 window
Ctrl-Alt-M, 3
Displays the Memory 3 window
Ctrl-Alt-M, 4
Displays the Memory 4 window
Ctrl-Alt-U
Displays the Modules window, which allows you to view the .dll or .exe files loaded by the program. In multiprocess debugging, you can right-click and select Show Modules for all programs
Ctrl-B
Opens the New Breakpoint dialog
Ctrl-Alt-Q
Displays the Quick Watch dialog with the current value of the selected expression. Available only in break mode. Use this command to check the current value of a variable, property, or other expression for which you have not defined a watch expression
Ctrl-Alt-G
Displays the Registers window, which displays CPU register contents
Ctrl-Shift-F5
Terminates the current debugging session, rebuilds if necessary, and then starts a new debugging session. Available in break and run modes
Ctrl-Alt-N
Displays the Running Documents window that displays the set of HTML documents that you are in the process of debugging. Available in break and run modes
Ctrl-F10
Starts or resumes execution of your code and then halts execution when it reaches the selected statement. This starts the debugger if it is not already running
Ctrl-Shift-F10
Sets the execution point to the line of code you choose
Alt-NUM *
Highlights the next statement to be executed
F5
If not currently debugging, this runs the startup project or projects and attaches the debugger. If in break mode, this allows execution to continue (i.e., it returns to run mode).
Ctrl-F5
Runs the code without invoking the debugger. For console applications, this also arranges for the console window to stay open with a "Press any key to continue" prompt when the program finishes
F11
Executes code one statement at a time, tracing execution into function calls
Shift-F11
Executes the remaining lines of a function in which the current execution point lies
F10
Executes the next line of code but does not step into any function calls
Shift-F5
Available in break and run modes, this terminates the debugging session
Ctrl-Alt-V, T
Displays the This window, which allows you to view the data members of the object associated with the current method
Ctrl-Alt-H
Displays the Threads window to view all of the threads for the current process
F9
Sets or removes a breakpoint at the current line
Ctrl-F11
Displays the disassembly information for the current source file. Available only in break mode
Ctrl-Alt-W, 1
Displays the Watch 1 window to view the values of variables or watch expressions
Ctrl-Alt-W, 2
Displays the Watch 2 window
Ctrl-Alt-W, 3
Displays the Watch 3 window
Ctrl-Alt-W, 4
Displays the Watch 4 window
Ctrl-Alt-P
Displays the Processes dialog, which allows you to attach or detach the debugger to one or more running processes



Object browser

Shortcut Description
Alt-F12
Displays the Find Symbol dialog
Ctrl-F12
Displays the declaration of the selected symbol in the code
F12
Displays the definition for the selected symbol in code
Ctrl-Alt-F12
Displays the Find Symbol Results window
Ctrl-Alt-J
Displays the Object Browser to view the classes, properties, methods, events, and constants defined either in your project or by components and type libraries referenced by your project
Alt-+
Moves back to the previously selected object in the selection history of the object browser
Shift-Alt-+
Moves forward to the next object in the selection history of the object browser



Tool window

Shortcut Description
Ctrl-Shift-M
Toggles the Command window into or out of a mode allowing text within the window to be selected
Ctrl-Shift-C
Displays the Class View window
Ctrl-Alt-A
Displays the Command window, which allows you to type commands that manipulate the IDE
Ctrl-Alt-T
Displays the Document Outline window to view the flat or hierarchical outline of the current document
Ctrl-Alt-F
Displays the Favorites window, which lists shortcuts to web pages
Ctrl-Alt-O
Displays the Output window to view status messages at runtime
F4
Displays the Properties window, which lists the design-time properties and events for the currently selected item
Shift-F4
Displays the property pages for the item currently selected. (For example, use this to show a project's settings.)
Ctrl-Shift-E
Displays the Resource View window
Ctrl-Alt-S
Displays the Server Explorer window, which allows you to view and manipulate database servers, event logs, message queues, web services, and many other operating system services
Ctrl-Alt-R
Displays the web browser window, which allows you to view pages on the Internet
Ctrl-Alt-L
Displays the Solution Explorer, which lists the projects and files in the current solution
Ctrl-Alt-K
Displays the TaskList window, which displays tasks, comments, shortcuts, warnings, and error messages
Ctrl-Alt-X
Displays the Toolbox, which contains controls and other items that can be dragged into editor and designer windows



Html editor (Design View)

Shortcut Description
Ctrl-B
Toggles the selected text between bold and normal
Ctrl-Shift-T
Decreases the selected paragraph by one indent unit
Ctrl-T
Indents the selected paragraph by one indent unit
Ctrl-I
Toggles the selected text between italic and normal
Ctrl-Shift-K
Prevents an absolutely positioned element from being inadvertently moved. If the element is already locked, this unlocks it
Ctrl-G
Toggles the grid
Ctrl-Shift-G
Specifies that elements be aligned using an invisible grid. You can set grid spacing on the Design pane of HTML designer options in the Options dialog, and the grid will be changed the next time you open a document
Ctrl-U
Toggles the selected text between underlined and normal
Ctrl-Shift-L
Displays the Bookmark dialog
Ctrl-J
Inserts <div></div> in the current HTML document
Ctrl-L
When text is selected, displays the Hyperlink dialog
Ctrl-Shift-W
Displays the Insert Image dialog
Ctrl-Alt-Up Arrow
Adds one row above the current row in the table
Ctrl-Alt-Down Arrow
Adds one row below the current row in the table
Ctrl-Alt-Left Arrow
Adds one column to the left of the current column in the table
Ctrl-Alt-Right Arrow
Adds one column to the right of the current column in the table
Ctrl-Shift-Q
Toggles display of marker icons for HTML elements that do not have a visual representation, such as comments, scripts, and anchors for absolutely positioned elements
Ctrl-Page Down
Switches from design view to HTML view and vice versa
Ctrl-Q
Displays a 1-pixel border around HTML elements that support a BORDER attribute and have it set to zero, such as tables, table cells, and divisions



Macro

Shortcut Description
Alt-F8
Displays the Macro Explorer window, which lists all available macros
Alt-F11
Launches the macros IDE
Ctrl-Shift-R
Places the environment in macro record mode or completes recording if already in record mode
Ctrl-Shift-P
Plays back a recorded macro



--
Happy day, happy life!