-
Notifications
You must be signed in to change notification settings - Fork 6
Requirements
jsorva edited this page Jan 11, 2023
·
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 explore Python support as a possibility. #483
- In practice, this will probably only happen if the teachers of Python courses become interested enough to take steps.
- Keep an eye on Scala Metals. Consider whether we want to extend beyond IntelliJ at some point.
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.
- ☀☀☀☀☀ Track changes in IJ and its Scala plugin and act accordingly.
- ☀☀☀☀ Make/update overall plan for where we want to be wrt documentation at the end of the year and act accordingly.
- ☀☀☀☀ 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
- ☀☀☀ 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).
- ☀☀☀ Make the plugin aware of personalized deadlines? (Affects warnings, for example.)
- (☀☀☀☀ More convenient authentication once it is supported by A+ LMS, #712; own scope #532 )
- ☀☀ In A+ menu, add an option to show/hide the A+ Courses tool window? #827
- Yes, this essentially duplicates View → Tool Windows → A+ Courses.
- ☀☀☀☀ 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?
- ☀☀ 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.
- ☀☀☀ (Major effort:) A REPL that explains what it does: beginner-friendly textual descriptions of what happens during expression evaluation.
- ☀☀ Enable the convenient generation of main functions from a REPL session.
- ☀☀ (Major effort:) 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)
- ☀☀☀ Improve links to chapters/assignments from the IDE:
- At least in O1, the "Open in browser" links should go to the chapter, not to an assignment’s dedicated page in A+, which is not meant as student-facing.
- ☀☀ 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)”
- ☀ 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.
- 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
- (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)