Towards a better IDE

Problems of current Smalltalk IDEs: SD- let us try not to be tied with Smalltalk SD- I do not see the difference between A and C SD- I would add text is poor we cannot ask text more than copy and paste

A) Frequent switches of context (e.g., browsing different packages or classes, changing windows) B) Difficult to find relevant classes or methods for problem at hand C) Lost of focus and overview due to many opened windows and scattered functionality among several classes in OOP SD (this si called yoyo effect read Wild92a, Taen89a and Duns00a). D) Difficult to go back to code previously browsed E) No or few support of the IDE during the writing of source code lessens the efficiency of a programer. F) Chances are high that changing a feature of a software may break other parts of it, because there's no support of the IDE to detect possible breaks. G) It is hard to customize, extend or adapt an IDE to specific needs, hence it is not possible to solve specific tasks in an IDE for which it doesn't provide built-in support. H) An IDE is often poorly integrated into the look and feel of the surrounding OS, thus it often does not fit the expectations of the user. Better integration into the OS might lower the learning curve and higher the convenience to use an IDE as well as it eases the implementation of user interfaces in the IDE if the possible widgets are already defined by the OS. H)- we see only one method (even in java they ave longer method) at a time I) we only see source code not other information


Entity level

i) Smart groups help to focus on important classes and methods and hence minimize the need to browse and search a large space. (Problem A, B, C) ii) Providing access to the history of browsed methods and enabling the developer to set bookmarks helps to identify and relocate important entities and hence eases program comprehension and understanding. (Problem D, B) iii) Tabbed browsing, multiple selection of packages, classes or methods, and dynamic protocols increase the overview of a software and minimizes the time to find and identify important pieces of functionality in packages, classes or methods. (Problem B, C)

Feature level

iv) Feature-driven browsing helps to bugfix, change or enhance existing features of a software. (Problem B) v) Presenting relationships and dependencies between different features helps the programer to make sure that changes done for one feature do not influence or even break other features. (Problem F) vi) The possibility to select multiple entities at a time, e.g., multiple packages, classes, methods, speed up the development process, enhance the overview and forces the programmer less frequent to switch context and to retrieve and search important entities. (Problem A, B, C) vii) Making the relationships between opened browsers and the history of the opening of browsers explicit and accessible, helps to not loose the overview and context and eases the retrieving of information. (Problem A, C)

Source code level

viii) Syntax highlighting, code completion, code hints and lint integration help the programer do write source code faster and with less errors. (Problem E)

Matrix of problems and hypotheses for solutions:

problems hypotheses i) ii) iii) iv) v) vi) vii) viii)
Context switch (A) X X X
Find information (B) X X X X X
Lost overview (C) X X X X
Lack of history (D) X
Source code writing (E) X
Breaking software (F) X
Customization (G)
Integration in OS (H)

Matrix with level and type of problems:

levels issues Navigation Context switch Searching, retrieving information Source code writing Relations between entities Extending, customization of IDE
source code How to browse and display source code: as text, as tree, fish-eye view, etc. Search in source code: whole image, scoped. Fast search, accurate Help of IDE during writing of source code (code completion, highlighting, code hints, annotate possible problems/bugs, ...) Customize how source code is displayed (eg. syntax highlighting, etc.)
entity Navigating classes and methods Switching between packages and classes Searching for entities (classes, methods) how classes are related, dependent
feature Navigate features, parts of features (eg. classes, methods) Switching between features, one feature = one context: allow to work with one features w/o switching context Searching for features, searching in a single feature, in dependencies to other features Feature dependencies, relations
browser/window Navigation between browsers, interaction between different browsers How to switch between browsers, how to relate different windows/browsers Identify browsed entities, find path in many opened browsers, how to access history and evolution of the current opened browsers how to write source code in a browser, where, in which browsers/panes How windows are related to each other (which opened which other) How windows should be adaptable, extensible (colors, arrangement of widgets, panels, ...)


Navigating, browsing entities, source code

Relations, dependencies between entities (classes, methods, but also features, concerns) in a software

Dealing with many windows and contexts

Assistance of IDE during developing

Integration of tools, meta information, history

Source code writing, viewing and editing

Searching, identify, retrieving of important information

Customization, adaptation of IDE

Interaction between developers, collaborative means

Measurements, Experiments, Validation


SD feedback: