stumash / CoursePlanner

http://conucourseplanner.online
MIT License
5 stars 3 forks source link

How to provide support for programs outside of engineering? (proposal) #82

Open Davidster opened 7 years ago

Davidster commented 7 years ago

Can we find other programs with recommended sequences?

I did a bunch of looking around the Concordia website, trying to find recommended sequences similar to the ones provided for engineering programs. After about 90 minutes of search, I checked at least 20 different programs from various departments/faculties and only found three pages that offer a similar resource:

Chemistry and Biochemistry are of the same format, but Physics is completely different and all three of them are different from the engineering format. Because of this disparity, I don't think it is or will ever be worth our time to write scrapers for these.

Many other programs provide PDF forms for their students to help define program requirements, such as the History program.

Recommended sequences seem like they are only standardized for the Engineering and Computer Science department and therefore we should only webscrape for recommended sequences in said department.

How do we provide support for other programs?

Instead of looking at the year-by-year sequence for other programs, we should instead come up with an additional system which makes it easier for the user to fill up the table on our site.

It seems that many programs (not engineering doe LOL) follow a standardized format for defining their requirements in terms of which courses must be taken and the minimum number of credits to graduate. This includes lists of electives where the student chooses a certain number of credits from multiple separate lists. These lists are defined in the undergraduate calender, the same place we're scraping course info from.

Here's what it looks like: image

Supporting such program requirements would open the door to many new programs on top of Engineering & CS. But before deciding if we should do this we must consider how it may be done...

In the backend

From the webscraping end, we can define a pretty simple spec which I think would be fairly robust and do a good job of defining the type of program requirements mentioned above:

e.g. Requirements for Major in Philosophy from above photo

{
    "program": "Major in Philosophy",
    "minTotalCredits": "36",
    "requiredList": [
        "PHIL 232",
        "PHIL 260",
        "PHIL 261"
        "ETC"
    ],
    "electiveGroups": [
        {
            "groupName": "",
            "creditRequirements": "3",
            "anyOfPattern": "",
            "courseList": [
                "PHIL 210",
                "PHIL 214"
            ]
        },
        {
            "groupName": "",
            "creditRequirements": "3",
            "anyOfPattern": "",
            "courseList": [
                "PHIL 362",
                "PHIL 374",
                "PHIL 377"
            ]
        },
        {
            "groupName": "PHIL electives",
            "creditRequirements": "6",
            "anyOfPattern": "^PHIL\\s{1}\\d{3}$",
            "courseList": [] 
        },
        {
            "groupName": "PHIL electives",
            "creditRequirements": "6",
            "anyOfPattern": "^PHIL\\s{1}4\\d{2}$",
            "courseList": [] 
        }
    ]
}

Where

In terms of backend validation, it would be easy to add a clause which checks that the above requirements are satisfied by the user's proposed sequence.

According to @stumash, it seems that it would be easy to take the requiredList and transform it into a recommended sequence via topological sort. We can discuss later whether we want this to be performed at scrape-time or run-time (I vote scrape-time).

Please let me know what you guys think of all this.

In the frontend

Let's assume we agree that the above program requirements spec is sufficient for what we want to accomplish.

In order to make the electiveGroups array useful, it seems to me that we would need to add a new UI element which presents these groups in a visually pleasing way. Some sort of nicely formatted list of courses which can be dragged into the table.

Do you guys think this UI addition is feasible? Can we come up with a design whereby there is still enough space on the page for the table?

Is it even worth adding this type of support at all? I assume we won't do this for MVP.

Davidster commented 7 years ago

I'll assume silence means that we are not adding this to MVP but may still consider adding it in the future. Marking it was wontfix for the time being.

stumash commented 6 years ago

I like this proposal. Once we gather the set of requirements, we can generate recommended sequences using topological sort as per our previous conversations.

stumash commented 6 years ago

By "the requirements" I mean the set of required courses and number of electives and such (for a given program)