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

Curriculum Outline #8

Open
Open

Description

@Ethan-Arrowood

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)

Activity

  1. Ethan-Arrowood commented on May 8, 2017

    @Ethan-Arrowood
    MemberAuthor
  2. Ethan-Arrowood commented on May 11, 2017

    @Ethan-Arrowood
    MemberAuthor

    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?]

  3. Ethan-Arrowood commented on May 11, 2017

    @Ethan-Arrowood
    MemberAuthor

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

  4. amasad commented on May 11, 2017

    @amasad

    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.

  5. Ethan-Arrowood commented on May 11, 2017

    @Ethan-Arrowood
    MemberAuthor

    @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.

  6. amasad commented on May 11, 2017

    @amasad

    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.
  7. Ethan-Arrowood commented on May 11, 2017

    @Ethan-Arrowood
    MemberAuthor

    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?

  8. amasad commented on May 11, 2017

    @amasad

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

  9. Ethan-Arrowood commented on May 11, 2017

    @Ethan-Arrowood
    MemberAuthor

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

  10. bgroveben commented on May 11, 2017

    @bgroveben
    Contributor

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

  11. bgroveben commented on May 11, 2017

    @bgroveben
    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.

  12. Ethan-Arrowood commented on May 20, 2017

    @Ethan-Arrowood
    MemberAuthor

    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.

  13. whmcdonaldiii commented on May 20, 2017

    @whmcdonaldiii
    Collaborator

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

  14. bgroveben commented on May 21, 2017

    @bgroveben
    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!

  15. Ethan-Arrowood commented on May 21, 2017

    @Ethan-Arrowood
    MemberAuthor

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

  16. 31 remaining items

  17. turbio commented on Jun 8, 2017

    @turbio

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

  18. erictleung commented on Jun 12, 2017

    @erictleung
    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.

  19. Ethan-Arrowood commented on Jun 12, 2017

    @Ethan-Arrowood
    MemberAuthor

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

  20. amasad commented on Jun 12, 2017

    @amasad

    @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.

  21. turbio commented on Jun 12, 2017

    @turbio

    @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.

  22. erictleung commented on Jun 12, 2017

    @erictleung
    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.

  23. amasad commented on Jun 13, 2017

    @amasad

    @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
    
  24. Ethan-Arrowood commented on Jun 13, 2017

    @Ethan-Arrowood
    MemberAuthor

    @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!

  25. erictleung commented on Jun 13, 2017

    @erictleung
    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.

  26. erictleung commented on Oct 14, 2017

    @erictleung
    Member

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

  27. tesla809 commented on Mar 12, 2018

    @tesla809

    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?

  28. vladdoster commented on Mar 12, 2018

    @vladdoster
    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.

  29. tesla809 commented on Mar 12, 2018

    @tesla809

    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.

  30. vladdoster commented on Mar 23, 2018

    @vladdoster
    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.

  31. erictleung commented on Mar 23, 2018

    @erictleung
    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 join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions