-
Notifications
You must be signed in to change notification settings - Fork 6
Requirements
stellatsv edited this page Jan 28, 2022
·
60 revisions
- 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.
-
The plugin must work reliably on all three major platforms: Linux, Windows, MacOS.
- However, we may assume reasonably up-to-date OS versions; there is no need to support old legacy systems.
- A smaller but trustworthy feature set is far preferred to a larger but untrustworthy set.
- 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.)
- Keep an eye on Scala Metals. Consider whether we want to extend beyond IntelliJ at some point.
- 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 2022 about whether O1 2022 is going to be in Scala 3. Tool support is a big part of that decision.
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.
- ☀☀☀☀ List pros/cons of year-based version numbers; make decision. #462 ✅
- ☀☀☀☀☀ Create and document a process for dealing with IntelliJ version updates (incl. Scala plugin). What steps should be taken each time that happens? ✅
- ☀☀☀☀☀ Make overall plan for where we want to be wrt documentation at the end of 2021 and act accordingly. ✅
- ☀☀☀☀☀ Check whether everything works with Scala 3. #820
- (This is important to do in any case, but especially if O1 switches to Scala 3 already in 2021.)
- ☀☀☀☀ Document the plugin’s behavior in cases where plugin version incompatible with course config and/or IntelliJ version. What improvements are needed/realistic? #147 ✅
- ☀☀☀☀ 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. #801
- ☀☀☀ Experiment with Kotlin/Scala as an implementation language. ✅
- ☀☀☀ 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 #534 ✅
- ☀☀☀ Support (teacher-customizable) messages when making submissions. #535 ✅ 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 #825
- 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: #826
- 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 )
- ☀☀ Add context menu on assignments (with “Submit”, at least) #248 ✅
- ☀☀ In A+ menu, add an option to show/hide the A+ Courses tool window? #827
- 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) [won't fix]
- ☀☀ 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
? #828
- ☀☀ 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.) #829
(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.
- 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.)
- Easier teacher access to student/model code. Ideas:
- ☀☀☀☀ Trivially fetch model solution into IJ project as a new module. [Jaakko please add link!]
- ☀☀☀☀ 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. #536
- Copy onto skeleton module? Is this viable in practice?
- ☀☀☀ Push course news into IJ. #537 ✅
- ☀☀ 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?
- ☀☀☀ Add an “Relaunch REPL and run all of the previous session’s commands” button. #821
- 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. #822
- ☀☀☀ (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)
- ☀☀☀ 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)
- ☀☀☀ New code style warnings. #824
- E.g., “don’t use
Option.get
”, “don’t omitthis
”, etc. - Customizable by course at least. And perhaps also by module!
- E.g., “don’t use
- ☀ 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.
These original requirements from the start of the project were implemented in 2020. They are here for historical reference only.
- Plugin easy to download and install into a (separately installed) IntelliJ.
-
Automatically set up the O1 project upon installation:
- the O1Library module (with generic tools required by other modules) should always be installed
- project config should contain info such as year and a list of downloadable modules (URLs)
-
Student can fetch a predefined O1 module to add it to the O1 project
- the module (as a zip file?) is downloaded from a URL in A+; cf. the current Eclipse files such as https://grader.cs.hut.fi/static/O1_2019/projects/given/GoodStuff/GoodStuff.zip
- additional module config is required and should be automatic: Scala SDK dependency, dependency from the module to O1Library (and probably also: dependency from the O1 project to the new submodule), possibly other things as well
-
Can launch the Scala REPL so that the classpath contains a specific module within the O1 project (but not the others) and that module's dependencies. Three possible UIs:
- The plugin always prompts the student to select the module where the REPL runs. (This is what the Scala IDE plugin for Eclipse does but IntelliJ's Scala plugin does not.)
- The plugin runs the REPL in whichever module is currently open for editing or otherwise selected within IntelliJ.
- A combination of i and ii.
-
Auto-import of O1's IntelliJ preferences file upon plugin installation.
- Students could be asked to import this manually, as we do now in Eclipse, but it would be much better if this was automatic. Especially in IntelliJ whose default settings aren't very suitable for O1 (but are fortunately very customizable).
- Perhaps: allow student opt out?
-
Student can download updated version of module (e.g., if course staff fixes something).
- Ideally, this would work for all unchanged files within the student's copy
- Ideally, student would be pushed a notification when an update is available.
- Auto-update the plugin itself (or notify of available update).
- The plugin checks that its own version is compatible with the O1 project that is open in IntelliJ (and warns if not?)
-
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
- Zip an IJ module (as opposed to entire project)