Skip to content
This repository has been archived by the owner on Jun 4, 2019. It is now read-only.

Curriculum Outline #8

Open
3 of 31 tasks
Ethan-Arrowood opened this issue May 8, 2017 · 61 comments
Open
3 of 31 tasks

Curriculum Outline #8

Ethan-Arrowood opened this issue May 8, 2017 · 61 comments

Comments

@Ethan-Arrowood
Copy link
Member

Ethan-Arrowood commented May 8, 2017

Curriculum Outline

In the root directory of the project there will exist a directory: challenges, and a file called classroom_settings.json

The challenges directory will contain each lesson directory title like so: [C#].[L#].<name> i.e. 2.1.Addition (means the Addition lesson is Lesson 1 of Chapter 2).
Due note that chapter and lesson numbers is for our organization purposes and will not be reflected in the Repl.it Classroom.

Each lesson directory will contain four files:

  1. lesson_code.py
  2. lesson_tests.py
  3. lesson.md
  4. lesson_settings.json

lesson_code.py will be loaded into the initial-code section (top left container) of the classroom.

lesson_tests.py will be loaded into a hidden unittest file (behind the scenes).

lesson.md will be loaded into the markdown section (bottom right container) of the classroom.

lesson_settings.json will be used to store information such as Title, Chapter, Lesson number, ID(?). This will mainly be for FCC, but repl will be able to utilize the Title property and maybe the ID property.

Each Repl.it Classroom lesson url will be added to the challenges.json file in the project root directory.


[Down The Road] - implement a python script that auto builds the challenges.json file
The current structure for the FCC Python Curriculum is: Beginner Section, Intermediate Section, & Special Topic Section.

Beginner Section:

  • Introduction to Python
  • Output
    • Print
    • Escape Characters
    • input
  • Data Types
    • Integers, Floats
    • Strings
    • Tuples
    • Lists
    • Sets
    • Dictionaries
  • Operators - bgroveben
    • +,-, *, /, %, **
    • <, >, <=, >=, ==, !=
    • =
    • True, False, and, or, not
    • in, not in
    • is, is not
  • Math - bgroveben
    • Add, Subtract, Multiply, Divide
    • Power, sqrt(), abs(), round(), sum(), max(), min()
  • Variables
  • Conditionals
    • if, elif, else
  • Loops
    • while, for (in range), for (in list), for (in string)
  • Functions
  • Classes

Intermediate Section:

  • File I/O
  • Iterators & Generators
  • Lambda - robbiemu
  • Conditionals
  • OOP
  • Modules, Libraries, Packages
  • File and Error Handling
  • Advanced Objects and DataTypes
  • Print Formatting
  • List Comprehensions
  • Decorators

Special Topic Section:

  • Machine Learning
  • Game Development
  • Webscraping (BeautifulSoup)
  • GIS (Leaflet/Folium)
  • Flask/Django (better to focus on one not both)
  • Data Analysis (Panda/Numpy)
  • Data Visualization (brokeh)
  • GUI (tkinter)
  • Geocoding (geopy)
  • Natural Language Toolkit (NLTK)

@Ethan-Arrowood
Copy link
Member Author

@Ethan-Arrowood
Copy link
Member Author

Ethan-Arrowood commented May 11, 2017

In the root directory of the project there will exist a directory: challenges.
Inside will contain each lesson directory titled as so: [lesson title]_C[chapter#]_L[lesson#]

For example: Addition_C2_L1<- This means the Addition lesson is Lesson 1 of Chapter 2

Each lesson directory will contain four files:

  1. lesson_code.py
  2. lesson_tests.py
  3. lesson.md
  4. lesson_settings.json

lesson_code.py will be loaded into the initial-code section (top left container) of the classroom.

lesson_tests.py will be loaded into a hidden unittest file (behind the scenes).

lesson.md will be loaded into the markdown section (bottom right container) of the classroom.

lesson_settings.json will be used to store information such as Title, Chapter, Lesson number, ID(?). This will mainly be for FCC, but repl will be able to utilize the Title property and maybe the ID property.

Here is an EXAMPLE layout:
screen shot 2017-05-10 at 11 25 32 pm

*Special Note - the challenges.json file will be used to track user progress via localStorage. May be worth writing a py script to build this automatically based on the challenges directory using the lesson_settings.json file inside each lesson directory. [Down the road feature?]

@Ethan-Arrowood
Copy link
Member Author

@bgroveben @QuincyLarson @ginoskotheon Can I get some feedback on the previous comment before I send it to Amjad?

@amasad
Copy link

amasad commented May 11, 2017

This looks good! One question: how do you see the Chapter mapping on the Repl.it's taxonomy? Would it be the Classroom? Alternatively, it doesn't have to map to anything and we just prefix the assignment name with the chapter.

@Ethan-Arrowood
Copy link
Member Author

@amasad I don't think it needs to map to anything on Repl.it's taxonomy (unless you plan on implementing chapters into classrooms in the future 😉). For the moment it'll just keep things more organized on our end.

@amasad
Copy link

amasad commented May 11, 2017

Yeah we might add chapters, some users asked for it, but for now we'll just leave it out. Are you ok with having the titles (directory names) have spaces and special characters? I'm fine with it, it just might make it harder for the authors.

Some other thoughts:

  1. We can use book-like format since people should be already familiar with [C#].[L#].<name> e.g. 2.1.Addition
  2. I think we'll need a top-level json settings for Repl.it to specify things like the classroom name, language, and if you want students to finish a lesson to unlock the one after etc.

@Ethan-Arrowood
Copy link
Member Author

Ethan-Arrowood commented May 11, 2017

We can use book-like format since people should be already familiar with [C#].[L#]. e.g. 2.1.Addition

Yes! I like this layout a lot. What would we do if the name is multiple words? i.e. Logic Operators
Would it be: 1.5.LogicOperators or 1.5.Logic_Operators or (something else entirely).
Directories can have special characters and underscores, but no spaces (keeps scripting easier).

I think we'll need a top-level json settings for Repl.it to specify things like the classroom name, language, and if you want students to finish a lesson to unlock the one after etc.

Would you like me to add a classroom_settings.json file in the challenges directory?

@amasad
Copy link

amasad commented May 11, 2017

I think underscores for spaces might work best.
classroom_settings.json works well.

@Ethan-Arrowood
Copy link
Member Author

sounds good to me. I'll start implementing this structure tomorrow 👍

@bgroveben
Copy link
Contributor

@Ethan-Arrowood @amasad I like the layout and the naming conventions -- looks good!

@bgroveben
Copy link
Contributor

@Ethan-Arrowood We may want to update the gulpfile to watch for changes to the *.py, *.json, and *.md files we're writing for the lessons.

@Ethan-Arrowood
Copy link
Member Author

Okay challenge directory has been pushed to master. Lets start writing challenges directly in the appropriate directories. Also, feel free to reorganize things as you see best fit I just pre filled it so there was some sort of structure present.

@whmcdonaldiii
Copy link
Collaborator

@Ethan-Arrowood Looks great. I'll start trying to get some challenges going.

@bgroveben
Copy link
Contributor

Outstanding @Ethan-Arrowood ! I have written some of the lessons included in your challenges directory (as well as a few others); you can preview them in this Repl.it Classroom. I just need to make sure that the file and directory structure is consistent, update the tests, and see that everything works. Great job and thanks again!

@Ethan-Arrowood
Copy link
Member Author

@bgroveben thank you 😄 when you're able to move your challenges over make a pr against master and I'll merge it 👍

@bgroveben
Copy link
Contributor

@Ethan-Arrowood you got it.

@amasad
Copy link

amasad commented May 23, 2017

@bgroveben your course looks awesome! I hope the authoring experience on Repl.it was good. (I don't want to take this thread on a tangent but if you have any feedback for us we're at contact@repl.it).

@amasad
Copy link

amasad commented May 23, 2017

Hey all, meet @vpavlenko he's an engineer at Repl.it and will be working on implementing this Repl.it Classroom / Github integration.

@vpavlenko
Copy link

Hey guys, I'm going to implement everything necessary inside Repl.it. @bgroveben It would be super helpful if you could upload any single challenge to this repo soon, so I could have a real example as a reference. Happy to work with you all :)

@Ethan-Arrowood
Copy link
Member Author

@vpavlenko I'll be able to get one or two up if @bgroveben is busy.

@bgroveben
Copy link
Contributor

Greetings @amasad @Ethan-Arrowood @vpavlenko ! Thank you for the kudos on the lessons I've made so far. I just have to fix a few more of the tests, and I'll be ready to submit a PR for the beginner/math challenges this morning. Please contact me if there is anything else I can do for you.

@bgroveben
Copy link
Contributor

I just submitted a PR for 14 beginner/math challenges that can be found in Chapter 4.1 through 4.E (I ran out of base ten digits, so I moved up to hexadecimal). Please feel free to review, revise, and so forth. I'm going to be working on a PR for beginner/operators next. Cheers!

@bgroveben
Copy link
Contributor

@amasad @vpavlenko Many Thanks and Cheers to you and the rest of the folks at Repl.it for helping us out with this project! You are all extra-special awe-sum. BTW I really like the new Classrooms you have been working on. I'm still learning my way around, but if I have any suggestions I'll contact you. Great Job!

@Ethan-Arrowood
Copy link
Member Author

@bgroveben great work on the challenges. I went ahead and merged them in. For future PR's try to ref at least 1 issue just so we can track commits. We will have to be more strict about that in the future once we 'go live'.

Next step: auto building the challenges.json file. Any ideas on how we can do that? We may need to wait for Repl.It Github/Classroom integration so we can retrieve the links for each challenge. I'm thinking we use some sort of Node.JS FileSystem script to read the challenges directory and write certain data to the challenges.json file.

@vpavlenko
Copy link

@bgroveben Thanks a lot for the PR.

I wonder if you're going to store model solutions in the repo or somewhere else as well?

@Ethan-Arrowood
Copy link
Member Author

@vpavlenko I don't think we are currently planning on providing model solutions; however, that may be a useful feature so if you can set it up, we will probably be able to use it down the road.

@vpavlenko
Copy link

@Ethan-Arrowood I'm asking because in @bgroveben 's Repl.it classroom every assignment already has a model solution added. However, I don't see it in the PR #17 .

Another question: what is gonna be the source of truth for Assignment ID - the ID in lesson_settings.json or the directory name in the repo? Consider the following scenario: you pushed changes to assignment statement and you want to update your existing classroom backed by Github Repo based on the newest repo version. Then we need to understand which assignment from the repo belongs to which assignment in the Repl.it classroom.

@Ethan-Arrowood
Copy link
Member Author

@vpavlenko I do not know whats going to power the Assignment ID. I was thinking about just using the chapter and lesson title something like:

For the Addition lesson in the Math chapter, the ID for Addition would be = math_addition.

Will this be sufficient? Or do we need to implement something different?

@Ethan-Arrowood
Copy link
Member Author

@vpavlenko just spoke to Quincy about the ID stuff. I'm going to use MongoDB objectid() method to generate ids. Will have to be done manually for each new challenge.

@vpavlenko
Copy link

We're making good progress on this. I wanted to let you know that @turbio is taking this over from the @replit side.

@turbio
Copy link

turbio commented Jun 2, 2017

Hey 👋 @Ethan-Arrowood @bgroveben, as @vpavlenko said I'll be taking over Repl.it's github classrooms from here on out. I'll keep you guys posted with our progress. Also, what is FCC's username on Repl.it, that way I can give you guys early access.

@bgroveben
Copy link
Contributor

Greetings @Ethan-Arrowood , I'm ready to begin putting all of the lessons for the beginner/operators lessons up.
However, before I submit a PR, we need to include an Operators chapter in the challenges.json file (right at the beginning) or else the node generate-challenge-json.js command will throw an error.
I can tinker with the code myself, but you know it better than I do and I don't want to break anything you have written 😱
Please advise and thank you for your help.

@Ethan-Arrowood
Copy link
Member Author

@bgroveben go ahead and edit the chapter array in challenges.json as you see fit. That array is only being used to generate the map; not anything in the generate file (yet).

Welcome @turbio! Glad to have you on board. I'll reach out to @QuincyLarson for FCC's Repl.it username and get back to you asap 👍

@Ethan-Arrowood
Copy link
Member Author

@vladdoster & @bgroveben - just realized you guys are both working on the same challenges. Take a minute to review each others work. I'd recommend one of you opening a PR and discussing changes in that and editing your code accordingly. Let me know if you need any help!

@Ethan-Arrowood
Copy link
Member Author

Ethan-Arrowood commented Jun 3, 2017

@turbio team@freecodecamp.com for the email address - username is probably freecodecamp 👍

@Ethan-Arrowood
Copy link
Member Author

@bgroveben how's the challenges coming along? Do you need any help?

@bgroveben
Copy link
Contributor

@Ethan-Arrowood my beloved day job has eaten up most of my free time over the past few days, but I'll have a chance to update the chapter array and submit a PR for the operators challenges on (hopefully) Wednesday or (more likely) Thursday. Good looking out and thanks for offering your assistance!

@Ethan-Arrowood
Copy link
Member Author

Great job @bgroveben 👏

@Ethan-Arrowood
Copy link
Member Author

Ethan-Arrowood commented Jun 8, 2017

I'm working on Chapter 2 now (Data Types)

@turbio how is it going over on Repl.It? Anything more you need from us?

@turbio
Copy link

turbio commented Jun 8, 2017

@Ethan-Arrowood Everything's going smoothly on the Repl.It front, we'll hopefully have something you can try out by next week.

@erictleung
Copy link
Member

@Ethan-Arrowood hey there! I can probably try to take up the machine learning parts of this. I'm trying to put together some notes on machine learning and I think using Python would be a great way to interact with those concepts.

I haven't read through this whole thread yet, so if you already have plans for the machine learning part, my apologies. I'll try to take a look at the thread and the rest of the project later today.

@Ethan-Arrowood
Copy link
Member Author

@erictleung yes go for it! Not much (if any) of the advanced lessons have been started yet. Thank you!

@amasad
Copy link

amasad commented Jun 12, 2017

@erictleung we support a lot of pypi module (including numpy and scipy) on Repl.it. But let me know if there is something you need that we don't support.

@turbio
Copy link

turbio commented Jun 12, 2017

@Ethan-Arrowood Hey, we're almost done building Repl.it's github integration. A few notes about unit tests:

  • we can display friendly error messages, right now I'm just using the method name. but I'm thinking we could do something like use the docstring instead for nice test failure messages.
  • we also don't currently support python's from x import y syntax but it wouldn't be too hard to add if it's necessary
  • inside Repl.it we write user code to main.py and automatically import it into the unit tests file using from main import *, so if you don't need the python unit tests to run on their own removing user code imports would be an easy fix. Otherwise, I propose we settle on one method for importing. Using from lesson_code import xyz style imports would be the easiest as we already just ignore these and the auto prepended from main import * would behave (mostly) the same way.
  • using file access like this to verify tests is a bit tricky just because the user's code will either be in main.py or not present at all (if we're not in project mode). I think using inspect.getsource is a good alternative.

Let me know what you think. I'll make github classrooms available to free code camp later today and then throw in unit tests once we've got the format figured out.

@erictleung
Copy link
Member

@amasad thanks for the quick response! I didn't know Repl.it had package support. Very awesome 👍

The module I had in mind was scikit-learn. It is searchable in the module list, but it fails to load properly.

image

I suspect it has something to do with the dash in the module name. If I should report this somewhere else, let me know. I've checked that numpy works, so for now, I can use that.

@amasad
Copy link

amasad commented Jun 13, 2017

@erictleung we haven't figured out how to best solve this problem because some module names are not the same as the import name. For scikit-learn it's sklearn. However, it also looks like we only have the python2 version (which you can also use) installed because it fails the following on Python3 (but works on 2):

>   from sklearn import datasets
Traceback (most recent call last):
  File "python", line 1, in <module>
  File "/goval_modules/python3.6/urllib2.py", line 220
    raise AttributeError, attr
                        ^
SyntaxError: invalid syntax

@Ethan-Arrowood
Copy link
Member Author

@turbio I'm pretty burnt out today but I'll make sure to review everything and work with you tomorrow. Thanks for all the hard work!

@erictleung
Copy link
Member

@amasad awesome! Thanks for the clarification and insight. I'll let you know if I come across anything else while writing up the code.

@erictleung
Copy link
Member

For reference, repl.it information on GitHub Backed Classrooms.

@tesla809
Copy link

Here are my thoughts on resources to use for creating the curriculum:

I agree with the other's idea that Python should focus on the data science side. We can get more bang for our buck if we learn a new language and new skill set instead of using Python for web development. Learning web development in JS and then learning Python for data science provides enough overlap so that a dev can pick up python for web development.

I have some experience trying to teach people python in a decentralized way, having done so at Fordham university and at coffeeshops via the Meetup I organize: https://www.meetup.com/NYHAIS/

I use a combination of hacker rank and code academy. Having people start out with codecademy then jump on Hacker Rank's Python track helps a lot. We can use those two sites for inspiration on how to design our intro to python curriculum. For reference book, I point people to No Starch Press's Crash Course Python and Allen B. Downey's first book Think Python. We can see what is covered there and in what order and design tasks around that.

Lots of our work can also be aided by the work of Allen B. Downey of Olin College who has created a magnificent set of books on learning Python, Data Structures and Algorithms and Stats via Python. Check out his books on: http://greenteapress.com/wp/

For how to build this, we can look to this website for inspiration:
http://data8.org

We can also see how they use this thing called ok8:
https://okpy.org
https://github.com/Cal-CS-61A-Staff/ok

Python is a great language to pick up data structures and algorithms. This is asked for a lot during technical interviews and having a section on that can help enormously. For this we can look to Hacker Rank's Data Structures and its Algorithms track for inspiration on the types of challenge we can place in that section.

We can also look at UC San Diego's data structures and Algorithms micro masters for inspiration on how to explain things.
https://www.edx.org/micromasters/ucsandiegox-algorithms-and-data-structures

There is also interactive pythons free online course on the subject: http://interactivepython.org/runestone/static/pythonds/index.html

For the data science aspect we can look to Datacamp (an amazing resource), Dataquest, and the data science micro masters on edx.

We can also use this free book on introduction to data science.
https://www.inferentialthinking.com

The data science aspect can encompass learning the math and tools behind data science. Then once that is out of the way we can focus on the machine learning aspect with tensorflow and keras.

The trick is to introduce the probability, statistics and math aspects of data science gradually. So effectively we would be teaching these subject through python after learning the basics of the language.

For this, we can look to UC San Deigo's course "Statistics and Probability in Data Science using Python" on edX for inspiration.
https://www.edx.org/course/statistics-probability-data-science-uc-san-diegox-dse210x/

Any math concepts that need more explanation can be linked to a khan academy video if needed.

We can also look at Think Stats and Think Bayes by Allen B. Downey.
http://greenteapress.com/wp/think-stats-2e/
http://greenteapress.com/wp/think-bayes/

Along the way we can use introduce the various packages in Python that help us do statistical analysis. There is sympy for creating "Symbolic computation deals with the computation of mathematical objects symbolically". There are also other tools used by data scientists NumPy, SciPy, Pandas.

Another great source I found for data science is Chris Albon's site. The dude is next level.
https://chrisalbon.com/

Also this website and the links (and links of links) offer lots of good resources:
https://elitedatascience.com/learn-statistics-for-data-science

Any Thoughts?

@vladdoster
Copy link
Contributor

These are some great ideas and resources. I will have to give them a more in-depth read over next few days, but here is what I have to say off the bat.

I think the data science track is a great idea as plays to Pythons strengths and would allow people to easily search StackOverflow for help if they ran across a problem.

I think a good middle ground would for us to set a threshold for introducing probability and statistics into the exercises. At this point, users should know basics (functions/variables/conditional logic) and how to import modules.

I think we could possibly create a survey to get some ideas of what people need/want to learn in prob and stat as a way to avoid trying to teach irrelevant things (I'm looking at you Ludic Fallacy).

Have we decided on Jupyter Notebooks as a medium for curriculum? I think this would be a great way for both us as programmers to reason about design choices(easier than rolling our own) and for users that get the robustness of notebooks.

@tesla809
Copy link

Using Jupyter notebooks can allow for fast iteration. We can modifying it to imports of custom libraries like Pandas, etc.

The Ace editor would need some configuration. Repl.it looks ok, but the classroom UI isn’t pretty.
It would be more useful if it had unit testing built in.

I will start to work on intro curriculum based around Python 3 this week. It will be small simple examples that can be solved in 2 minutes of less, similar to Codecademy. It should introduce concepts slow and steadily while not assuming any prior knowledge.

@vladdoster
Copy link
Contributor

Any updates to this? I too could start on some basic exercises and we could see what we come up with and maybe merge our solutions.

@erictleung
Copy link
Member

@tesla809 @vladdoster thanks for your interests in contributing to the Python curriculum!

@tesla809 I do believe that repl.it does have unit testing built in. What kind of unit tests were you thinking of? The unit tests I'm aware of is that you can build and use unit tests to test out the code users write. Great resources you've linked above, btw 👍

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants