« VA Offers $.02/Record To Recover Stolen Data | Main | JET? Are developers still considering it? »

My Visual Studio.NEXT (Orcas) Wish List

Microsoft’s Orcas development team asked for some feedback on Visual Studio in a recent SDR. Since my opinions are not covered by the NDA, I’m free to share these ideas with the public. I also submitted a brief summary of this list to my readers at Processor Magazine where I encouraged them to provide additional suggestions and feedback.

The next release of Visual Studio .NET (that Microsoft has dubbed “Orcas”) is due out sometime in late 2007. Many folks tell me that they’re getting more and more push-back on this runaway train given all of the changes that keep rolling out of Microsoft’s new and improved (AKA “you should do things our way”) department. The suggestions shown here are those that help developers work with existing architectures—making them more productive by leveraging their existing skill sets and training.

My Visual Studio .NET Wish List:

The following bullets outline the features I would like to seem implemented in Visual Basic.

·         Better support for existing architectures, programming methodologies, data structures and applications. This means that more emphasis needs to be placed on fixing “won’t fix”, or “by-design” bugs and fixing the documentation for existing functionality before introducing new technology. I expect that many of the newly proposed features will be used by 0% of the developers when first launched. In contrast, improvements to the UI and the existing Visual Studio product will have immediate positive impact on everyone. Yes, after awhile, new features will gain ground as the doc catches up and third-party architects, analysts, authors and trainers figure out and show where these new features make sense.

Editor and UI

·         The Visual Basic editor needs a better way to deal with large code blocks. That is, the editor needs to be able to zoom (like Word or IE). Control wheel is the best way to deal with this.

·         The editor should have a built-in spell-check for all string literals. This way we can ensure that the words we put in front of the user are spelled correctly. This check might go so far as to correct grammar and (eventually) do so in the target language. The work is already done (in Microsoft Office)—it simply needs to be leveraged in Visual Studio.

·         The editor should make anything popped up translucent or moveable. That is, intellisense should not hide the code you’re trying to debug or write.

·         The debug window still needs a way to be cleared automatically on each run (or not) or at least timestamp headers should be added so we can tell which messages go with which execution.

·         When I click F1 after selecting an object, the UI should take me to the right help topic—at this point it works about 50% of the time. All too often it jumps out to a generic topic, a topic in an entirely irrelevant context or Cleveland.

·         When I drag code from one place to another, it would be nice if extra linefeeds were not added.

·         It would be great if I could copy in source code from a different language and have Visual Studio convert it to Visual Basic. Since most of the examples I find in Google are in C# when I’m working in Visual Basic .NET, (and vice versa), I would be great to be able to past to a “transmogrify” window what would convert the code to the host language. It would be even better if the UI could figure out what references need to be added and give me the option of adding Imports/Include statements.

·         Automatically add imports for unreferenced objects and suggest Add Reference DLL for objects.

General Features

·         Printing is vitally important. Where is the promised support? This needs to be in My and made to work. This includes enumerating printers, setting print properties, launching and canceling jobs.

·         Make it easier to implement secure applications. Visual Studio does not support developer personas. That is, developers often need medium-level rights to do their work—admin rights at some time and far more limited rights at other times. However, to test an application targeted at a specific user with limited rights, the developer must create a separate configuration (sometimes on a separate system) to test the application. I think Visual Studio needs the ability to let the developer execute the application “as” another user with specific rights.

·         Documentation still needs a lot of work. Working with many of the new classes like the ReportViewer control is painful. Too many of these help topics seem to be prototypes—just the basic property and what values it accepts. One of most common complaints is lack of useful documentation.

·         All resource finders including the Add Reference, Server Explorer (Tables, Stored Procedures) etc. need to have intelligent, filters to show only those items whose name meets the criteria. It might be a filter on name, date created, owner or other aspects.

Data Issues

·         Visual Studio and Visual Basic still does not support rights management for databases. It assumes that this is done by DBMS-specific applications (in SQL Server Management Studio for SQL Server and the equivalent tools in Oracle or JET). Managing rights is essential for data security. Relegating it to the vendor seems expedient, but there is no reason that the tools written for SQL Server could not be ported to Visual Studio. As I see it, vendors (including other Microsoft teams like SQL Server) need to be encouraged to add essential functionality into Visual Studio.

·         Visual Studio and Visual Basic does not support intellisense on T‑SQL. This language is more widely used in some companies than Visual Basic or C#. Since SQL Server Express and SQL Server Everywhere are gaining ground, it’s even more important to permit developers to create correctly coded T‑SQL queries—whether they are used in a stored procedure or imbedded in a prototype application. In addition, the T‑SQL editor in Visual Studio is not nearly as robust as that used in SQL Server Management Studio, but that product has dropped T‑SQL debugging. This means the T‑SQL must be developed in SQL Server Management Studio, but tested in Visual Studio.

·         For the same reasons, the query builder needs to be improved to incorporate T‑SQL intellisense as well as the ability to create more complex queries. As it is, the Query Builder fails to deal with multiple resultsets or more sophisticated queries. This tool also needs to be expanded to permit developers to build LINQ and other new-technology data access queries.

·         In the data area, ADO.NET must (simply must) have the ability to control how the query is executed. There is an entire class of legal T‑SQL operations that cannot be executed via sp_executesql. We need a pass-through property on the Connection or the Command that permits ADO.NET to simply execute the CommandText.

·         ADO.NET also needs to be patched to further prevent connection leaks. This can be as simple as adding CommandBehavior to the rest of the Command execute methods. We also need the ability to set the time a connection is held in the pool—while it looks like there is a ConnectionString key/value pair for this, it does not work as desired.

·         CLR executables for SQL Server need to have a more flexible built/deploy/debug model. Developers need to be able to test with or without first building or deploying. The reasons for this have to do with issues involving dependencies that don’t need to be torn down in all situations. We also need the ability to set/reset the “it’s okay to alter this assembly” switch in SQL Server to leverage this feature.

·         The Visual Studio create Data Source dialog should eliminate the “checkbox” on the Tables list (that adds all visible data tables to the TableAdapter). Don’t let developers choose “all tables”. This is just wrong.

·         The mechanism to alter a design-generated TableAdapter when the database schema changes needs to be simple and obvious.

·         As it is, the way Visual Studio propagates SQL Server Express .MDB files has gotten out of hand. There are scenarios that can create 6 or more copies (in various states) of a database simply by creating a database in a project, choosing the (wrong) option, creating a deployment config, deploying and using User Instance=True. This seems wrong and needs to be reexamined

·         One of the best ideas we suggested is template-based data generation. This approach would let us modify the base template used for code generation. This way we can build our own plumbing into the TableAdapter and other generated classes to implement business rules and constraints.

·         Stored procedures form today’s implementation of N-tiered designs. Visual Studio needs to make design, development, protection, execution and debugging stored procedures a priority. This approach should be a must-have for any new technology as well as a fundamental goal of any new Visual Studio version. That is, the new version should find ways to improve this common development paradigm. The 2005 version of Visual Studio handles stored procedures better than ever, but still discards critical syntax error information in the editor. It also does not permit developers to set runtime rights or manage object rights. Visual Studio also does not provide a clean mechanism to manage stored procedure versioning.

·         Developers write millions of lines of code to implement business constraints and logic. We still don’t have a standard way to implement business rules in the UI, middle-tier or on the database. The mechanisms to do this were added to SQL Server in the 2000 timeframe. The data teams promised to link to these properties (Extended Properties) but it never came to pass. We need a standard way to write a class that implements business rule constraints on a column-by-column and rowset basis. That is, tests that validate each column as well as those that validate the entire row before it’s passed to the server in an UPDATE or INSERT. These same constraints should be managed on the client and server with the same structures. I think if the generated code included a standard (user-definable) interface, we could reduce the code to deal with this issue.

I Want Your Feedback

If you have comments on these suggestions or have others you want to propose, post them here. Sure, the site asks you to validate your email address—I have to do that to prevent the spammers from sending everyone ads for other “enhancement” products. Be sure to describe your development shop in the response so we can better understand the issues you’re facing. Remember, I’m trying to act as your voice up on the other hill overlooking Redmond. Let me know what you’re wishing for—besides a higher Microsoft stock price.

 

TrackBack

TrackBack URL for this entry:
http://betav.com/blogadmin/mt-tb.cgi/97

Comments

What I really want to see in C# is to enable access to metadata at compile time. Consider this code:

public string Name {
get { return _name; }
set {
if (_name != value) {
_name = value;
OnPropertyChanged("Name");
}
}

I would like that last statement to take advantage of a new keyword to grab compile info e.g.:

OnPropertyChanged(infoof(MemberName));

You could imagine using this operator also like this:

void Foo(string s) {
if (s == null) throw new ArgumentNullException(infoof(ParamName[0]));
...
}

Finally, I really like what the C#/LINQ team is doing with the distinguished type Expression. I would to see this work somehow morphed into something like the LISP defmacro facility such that I could define my own extensions to the language like so:

#defmacro property {
#defsyntax = #accessibility [#readonly] #type #name
string fieldName = "_" + #gensymbol;
#deffield private type fieldName ;
#defproperty #accessibility #type #name {
get { return #fieldName; }
#if (!#readonly) {
set {
if (#fieldName != value) {
#fieldName = value;
OnPropertyChanged(name);
}
}
}
}
}

OK so the syntax about is, uh, well not very well thought out but the general idea us that it would allow me to declare properties like so:

public class Foo {
public property string Name;
public readonly property int Id;
...
}

The "property" keyword feature is one that a few of use have wanted for a while to reduce "line noise" in C#. However it might be better if Microsoft spent their time on a general metaprogramming model for C# to allow developers to extend the language as they would like. Just a wild and crazy thought. :-)

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)