I dare say all main code editors today use the document metaphor; text in a document read from top to bottom.
I dare say time has come to drop this metaphor to a more object oriented or data flow oriented one.
When writing a class in an object oriented language the resulting document usually, contains the properties in the top and the methods below.
This means that when looking at the code reading a property name means it is easy to read other properties as they are close by in the document. But is this really what you want? – isn’t the methods using this property what you want to look at?
Now say you are debugging the Save method. There is a great chance you have method Restore (alphabet wise R is next to S) on the monitor; despite you being totally uninterested in them.
What you instead want to have before your eyes and withing a keystroke are the properties User and IsAdministrator and the method Validate; because they are part of the data flow method Save uses.
You are probably also interested in who calls Save and who is called by Save.
My proposal is this:
When you are working with a method, in your vicinity you want what Save reads and manipulates. Any property is shown in a window above the method you are working with. To the right you have a list of methods, and possibly some code, to all methods that are called from the method you are working with and to the left you can see all ways to call your method.
Equally easy to see and navigate to are the parents and descendants of your class.
I am a developer and I most often use Sqlserver. The most common tool for working with Sqlserver is Sqlserver management studio and it does it’s job; which happens to be everything. Why not create a (relational) database tool targeted towards developers?
Things I normally don’t do
Now, as a developer I normally touch security at the beginning or end of a project. I usual handle just one of a couple of databases (database in sqlserver lingua, I believe it is called schema in Oracle) at a time. Space allocation is only used when doing backup and restore to create new or roll back a database. I have, unfortunately, never touched anything like sharding, replication, availability or other beardy stuff.
Things I normally do
I write queries, lots of queries. Depending on project I write stored procedures and triggers. I have also dealt with having DLLs inside Sqlserver. I do a lot of comparing schema and data with other databases.
What I want
I have a need for an IDE that leaves out all stuff I don’t or seldom use; whenever I need to dabble with security I can fire up Sqlserver management studio.
- awesome intelligence/typeahead/whateveryoucallit in the query editor. Management studios intellisense has become better but I still lack functionality I get with Sqlprompt by Redgate. There are semi graphical tools for aiding query writing but I haven’t taken a serious stab at using them; I should.
- relations should be visible. When I work with a table I’d like to have indices, triggers and stored procedures in close vicinity, not through an “object explorer” tool window and a deep drill down tree. Say you are writing “select * from User” or selecting the User table in a list somewhere. Why not have a window, toolbar or menu automatically populate with depending tables, triggers and stored procedures?
- drill down possibility. Way to often I write a query and another and another just to find out where data comes from or vice verse. Without spending any time thinking and designing I am visualizing that when a row, say of a User, is found, one can with a click or key stroke get all Roles related to said User through the UserRoles table. Another example is User-> Order-> OrderItem-> Currency-> Country-> Company-> User.
- copy/paste update of table data. I also would like conversion of such copy or paste to a query to run on another instance.
What I want stuff that is really nice-to-have
- global search. I sometimes find a guid or a part of a string that has fled its sanctuary and need to find where in the database it originates. Somewhere I have a stored procedure for this but I’d like to have it built in to the tool and with more intelligence like searching for guids in proper fields and asking before doing a free text search in a million rows table.
- fast backup and restore. To take a temporary backup before doing a big or dangerous change. Then to restore said backup with ease. The Management studio dialogue for this is big, hard to use and error prone. By and by I need to create a copy of a database, say for branching a project, and that can too be made to be done with ease.
- no install. I manipulate data in production and don’t want to have to install anything; an xcopy should be enough.
When I take notes in an editor or Googledocs or Evernote or whatever I use at the time I sometimes have information I really want to jot down in the contents of the notation. An example would be name of a server and then usr/pwd at the same or next line.
Having 1 secret thing in a document makes the whole document equally secret. That is a shame when the rest of the document can be read by colleagues and customers.
A solution can be to encrypt just the sensitive stuff. In an editor it could be prefixed with <encrypted> or <encrypted login=”uniquename”> like so:
The database for system Zoomba is on machine SRVZoomba12/MySQL1 usr/pwd:sa<encrypted name=”zoombadb”>slkjfelaskdnflaufksjdnlsiuhfsf</encrypted>.
MrM knows more.
Just copy everything between, or including, the tags to an application and enter the password that corresponds with your name. If you have an intelligent enough editor you can have a macro for the same; position yourself in the tag and choose Decrypt from a menu.
This way you can have a document with secret data without being afraid of it getting into the wrong hands.
One could also replace the encrypted data with a URI to an online storage or application for your secret data. Working within the Microsoft stack one could have ones domain usr as name/login and let it work without having to enter any password.
One can have the same concept within a (text) field in a database. Instead of encrypting the whole field and missing out on all the index capatibilities just encrypt the secret stuff. This could also simplify some user management.
I see some difficult design choices when I mentally try to adapt the idea to a team and a person and a team of teams and some roles. What makes it difficult is more of user/passphrase handling and not of implementation crypto wise.
Emacs has something like this with its org-crypt.el.
Evernote has it built in. The encrypted text is replace with a small icon. Open it and enter you password. Simple enough.
I say the world is in need of a source code editor that isn’t document oriented.
Today we open a file. This file typically contains a class and its methods. One can read the object variables and relations to other classes typically at the top of the document. The methods are sorted in an alphabetical manner.
Why do we still handle the code like this?
When I work with source code I am more interested in the calls that come in and go out of the method I am looking at. I am also interested in inheritances and interfaces of the class and both the class’ and the method’s usage throughout the project/solution/world. I am normally not interested in the method that begins with the same letters.
Some years ago I saw a Java editor that worked with relations instead of source code.
I have recently experimented with Debugger canvas from Microsoft which takes a similar view on debugging. It is labs and it is, probably, a beta and it is immature and does not hold Microsoft standard yet. But it is a start.
D0es anyone know of any other tool that handles the source code like we handle it, and not only as files in a folder structure?
In my editor I spend too much time looking for the cursor; up, down, left, right.
Why not have the cursor in the same line, like 30% from the top, and instead move the text behind it?
This will make it possible to always write the code/text at the most comfortable place.
Sometimes one wants to write at the top (see code below) or vice verse and one could move the cursor to a new base position then.
(Finding the cursor is easier with a highlighted line where the cursor is.)