Skip to content

Requirements

superseacat edited this page Feb 12, 2021 · 60 revisions

PROJECT GOALS:

  • Primary goal: Smooth educational experience for students: they can focus on course content without distraction.
    • Especially: beginners can focus on the basics of programming without having to spend time or get stressed out about other things like IDE configuration at this early stage of their studies, or how to select and send files for auto-grading, etc.
  • Beyond that primary goal, we can looking to otherwise improve the learning of programming by adding pedagogically motivated features etc.

GENERAL CONSIDERATIONS:

  • The plugin must work reliably on all three major platforms: Linux, Windows, MacOS.
  • It's enough to support a single plugin UI language, English.
  • Things to bear in mind for the future:
    • Keep an eye on Scala Metals. Consider whether we want to extend beyond IntelliJ at some point.
      • Design decisions that help isolate IDE-independent features should be considered. (But not taken if they have an excessive short-term cost! Our primary focus is very much IJ, and support for other platforms may never happen.)
    • Let’s not completely forget about Python support in the distant future as a possibility. #483
      • In practice, this can only happen if the teachers of Python courses become interested enough to take steps. (I.e., spend both time and money.)

ONGOING THINGS IN 2021: SCALA 3

  • Keep an eye on Scala 3 developments.
  • Keep an eye on IJ developments wrt Scala 3.
  • The plan is to make a decision during the first third of 2021 about whether O1 2021 is going to be in Scala 3. Tool support is a big part of that decision.

IDEAS FOR 2021 GROUPED THEMATICALLY

The priority of each item — as suggested by JS — is marked as follows:

☀☀☀☀☀ = mission-critical; ☀☀☀☀ = let’s go for this (if possible); ☀☀☀ = very nice to have; ☀☀ = nice to have; ☀ = maybe if there’s time; "" = just an idea at this point.

Multi-Course Support

Code Quality

  • ☀☀☀☀ Consider whether splitting the plugin makes sense #484
    • e.g., A+ interaction vs. REPL vs. something else?
  • ☀☀☀☀ Consider what other refactoring the team would like to do and prioritize accordingly. #531
  • ☀☀☀ Remove O1-specific hacks to the extent possible.
  • ☀☀☀ Experiment with Kotlin/Scala as an implementation language.

Improvements to Basic Functionality

  • ☀☀☀ Improved module updates: safer updating without destroying students' work and/or possibility to mark an update as "minor" so that people who have modified their copy of the module do not get an update notification
  • ☀☀☀ Support (teacher-customizable) messages when making submissions. E.g.,
    • message pops up when first about to spend a submission;
    • another message for when remaining submissions are low; and
    • still another message for the final submission.
    • Definitely with "don't show this again".
  • ☀☀ Language variants of modules
    • Course config can mark modules as being different language-variants (e.g., Finnish and English) of each other.
    • This is reflected in the UI somehow (perhaps by graying out and textually marking any other variants of module that the user has already downloaded).
  • ☀☀ Consider how to reduce "doomed" submissions:
    • Force Build Module at submission? Prevent/alert about submissions of non-compiling code?
    • Notify student if their submission is identical to an earlier one?
    • Remind students to run their code before submitting if they haven’t? (Would require monitoring.)
  • (☀☀☀☀ More convenient authentication once it is supported by A+ LMS, #712; own scope #532 )

UI Tweaks

  • ☀☀ Add context menu on assignments (with “Submit”, at least) #248
  • ☀☀ In A+ menu, add an option to show/hide the A+ Courses tool window?
    • Yes, this essentially duplicates View → Tool Windows → A+ Courses.
  • ☀☀ Replace "Nothing to show" (which shows up for a while during loading) with something more informative. #273
  • ☀☀ If a module is externally deleted, the Modules panel now shows "Error". Should show a clearer message. #402
  • ☀☀ Unfold assignments list by default? (when initially loaded)
  • ☀☀ Add context menu on submissions (for viewing feedback? refreshing?) #248
  • ☀☀ Add "run previous" (Ctrl+Shift+F10) in the Run menu.
  • ☀☀ Open (HTML) in Default Browser could take fewer clicks.
    • Tweak menu for HTML files?
    • Perhaps even add “Open docs” in the context menu of modules that have doc/index.html?
  • ☀☀ Remove Ant tab on the right (or remind JS where to do this in settings, if already possible)
  • ☀☀ Prevent submissions of same assignment with different group than before. (Disable option.)

Assessable Within-IDE Activities

(This is a major new feature. It would be great to have; however, it is unclear at this point how complicated its implementation would be.)

  • ☀☀☀☀ Enable support for "tutorial-like" activities within the IDE: #501
    • The assignment has a goal (e.g., "find the file and line of code where X is defined", "try method X in the REPL", "try method X in the REPL on various inputs and then answer this multiple-choice question about it", "start the debugger and step until line X", etc. etc.)
      • The goal can be IDE-related and/or programming-content-related.
    • While the assignment is "active", the plugin tracks whether the student has completed it. Once they have, the student automatically scores points in A+.
    • Ideally, hints and/or feedback on failed attempts could be provided, as configured by the teacher.

Teacher Features and Discussions about Student Code

  • Easier teacher access to student/model code. Ideas:
    • ☀☀☀☀ Trivially fetch model solution into IJ project as a new module.
    • ☀☀☀☀ Trivially fetch a student’s submitted solution into IJ project as a new module.
      • Note that this means taking the given skeleton module and copying the student’s code onto it!
      • The teacher should be able to specify which student’s solution they want. In an ideal world, this could be done via a shareable URL.
    • ☀☀☀ Trivially fetch student’s code from Code Vault into a new module.
      • Copy onto skeleton module? Is this viable in practice?
  • ☀☀☀ Push course news into IJ.
  • ☀☀ Brainstorm how we might integrate with Piazza / some other discussion forum
  • ☀ Brainstorm how we might support peer reviews of student code.
    • Cf. what the TMC plugin for NetBeans does.
  • ☀ Consider: Zip a module as a project that contains only that module and its dependencies?
    • Would this help assistants' work on grading?
    • Perhaps not needed if some of the other ideas in this list are implemented instead.
  • Brainstorm how we might support remote pair-programming as a teaching/learning method.
  • Brainstorm how we might support lab sessions.
    • E.g., Lab Queue notifications into IDE? Integration with Zoom or similar?

Improvements to the REPL

  • ☀☀☀ Add an “Relaunch REPL and run all of the previous session’s commands” button.
    • Basically the same feature that Eclipse’s Scala IDE (R.I.P.) has.
  • ☀☀☀ Warn the student if they’re using the REPL on a module whose code has changed.
  • ☀☀☀ (Major effort:) A REPL that explains what it does: beginner-friendly textual descriptions of what happens during expression evaluation.
  • ☀☀ A REPL that supports graphics literals (cf. DrRacket)
  • ☀ (Major effort:) Integration of program visualizations (similar to those in O1's materials) into the IDE: visualizing students' own code (from files, and/or in the REPL)

Ebook Integration

  • ☀☀☀ Links to chapters/assignments from the IDE.
  • ☀☀☀ Links from keywords and library methods (and error messages?) to the ebook sections that explain them?
  • “Give me all the modules I need for Week W (or Chapter C)”
  • (☀☀☀☀ If displaying ebook pages within IJ ever looks realistic, brainstorm what we can do with that. We’d need a fully functioning browser in the IDE, though. Or the IDE in a fully functioning browser. #245)

Miscellaneous ideas that didn’t end up in the other lists

  • ☀☀☀ New code style warnings.
    • E.g., “don’t use Option.get”, “don’t omit this”, etc.
    • Customizable by course at least. And perhaps also by module!
  • ☀ Single-click installation of IntelliJ IDEA, the Scala plugin, and the A+ plugin
  • Beginner-friendlier debugger. (Need to brainstorm what this might mean.)
  • Improvements to error messages
  • Could the plugin help students learn testing and/or version control? (E.g. in the studio courses.)
    • Could we do something similar to Wrenn’s “tests and auto-feedback on tests before implementation” stuff?
  • Would it make sense to provide a "simple mode" that hides menus/features that are irrelevant to the course?
  • Improved Scaladoc integration?
  • Brainstorm within-IDE support for more advanced programming topics (algorithms, design patterns, refactorings?).
  • Analysis of key-level data and students' IDE use in general (akin to what Arto Hellas has done)
  • ChatBot
  • Integrating Sami Sarsa's research into the plugin?
  • Something like Aleahmad's Examplify tool for programming?
    • I.e. turn existing example programs into interactive learning activities with segmented presentation, self-evaluation and self-explanation prompts, and possible social features.

HISTORICAL REQUIREMENTS

These original requirements from the start of the project were implemented in 2020. They are here for historical reference only.

Must-Have Features (done in 2020)

Very Important Features (done in 2020)

Desirable Features (done in 2020)

  • REPL further improvements
    • Display a course-specific message at the top of the REPL when the REPL launches.
    • Auto-import in the REPL: run import o1._ and optional module-specific import commands upon REPL launch.
      • This should be easy to implement with one of Scala REPL's command-line args.
    • "Scala REPL" can be also started from folder.
  • Submissions from the IDE
    • Student can log in in A+ and submit their assignments and see the feedback via the IDE.
    • Assignments are associated with modules; the student can view the assignment list for each module.
      • Ideally, the points received for each assignment should also be visible.
    • Student login info is saved by the plugin (or other arrangement so that it does not need to be re-entered).
    • Support pair submissions

Nice-to-Have Features (done in 2020):

  • Zip an IJ module (as opposed to entire project)
Clone this wiki locally