You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Jun 4, 2019. It is now read-only.
Repository navigation
This repository was archived by the owner on Jun 4, 2019. It is now read-only.
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:
lesson_code.py
lesson_tests.py
lesson.md
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.
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:
lesson_code.py
lesson_tests.py
lesson.md
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:
*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?]
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.
@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.
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:
We can use book-like format since people should be already familiar with [C#].[L#].<name> e.g. 2.1.Addition
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.
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?
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.
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 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.
@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.
@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.
@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.
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.
@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
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
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.
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.
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/
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.
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.
@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 👍
Activity
Ethan-Arrowood commentedon May 8, 2017
Challenges/Lessons posted on previous thread
freeCodeCamp/freeCodeCamp#14588 (comment)
freeCodeCamp/freeCodeCamp#14588 (comment)
https://github.com/bgroveben/FCC_Python
Ethan-Arrowood commentedon 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 2Each lesson directory will contain four files:
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:

*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 commentedon May 11, 2017
@bgroveben @QuincyLarson @ginoskotheon Can I get some feedback on the previous comment before I send it to Amjad?
amasad commentedon 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 commentedon May 11, 2017
@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 commentedon 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:
[C#].[L#].<name>e.g.2.1.AdditionEthan-Arrowood commentedon May 11, 2017
Yes! I like this layout a lot. What would we do if the name is multiple words? i.e.
Logic OperatorsWould it be:
1.5.LogicOperatorsor1.5.Logic_Operatorsor (something else entirely).Directories can have special characters and underscores, but no spaces (keeps scripting easier).
Would you like me to add a
classroom_settings.jsonfile in thechallengesdirectory?amasad commentedon May 11, 2017
I think underscores for spaces might work best.
classroom_settings.jsonworks well.Ethan-Arrowood commentedon May 11, 2017
sounds good to me. I'll start implementing this structure tomorrow 👍
bgroveben commentedon May 11, 2017
@Ethan-Arrowood @amasad I like the layout and the naming conventions -- looks good!
bgroveben commentedon May 11, 2017
@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 commentedon May 20, 2017
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 commentedon May 20, 2017
@Ethan-Arrowood Looks great. I'll start trying to get some challenges going.
bgroveben commentedon May 21, 2017
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 commentedon May 21, 2017
@bgroveben thank you 😄 when you're able to move your challenges over make a pr against master and I'll merge it 👍
31 remaining items
turbio commentedon 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 commentedon Jun 12, 2017
@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 commentedon Jun 12, 2017
@erictleung yes go for it! Not much (if any) of the advanced lessons have been started yet. Thank you!
amasad commentedon 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 commentedon Jun 12, 2017
@Ethan-Arrowood Hey, we're almost done building Repl.it's github integration. A few notes about unit tests:
from x import ysyntax but it wouldn't be too hard to add if it's necessarymain.pyand automatically import it into the unit tests file usingfrom 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. Usingfrom lesson_code import xyzstyle imports would be the easiest as we already just ignore these and the auto prependedfrom main import *would behave (mostly) the same way.main.pyor not present at all (if we're not in project mode). I think usinginspect.getsourceis 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 commentedon Jun 12, 2017
@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.
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 commentedon 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):Ethan-Arrowood commentedon Jun 13, 2017
@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 commentedon Jun 13, 2017
@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 commentedon Oct 14, 2017
For reference, repl.it information on GitHub Backed Classrooms.
tesla809 commentedon Mar 12, 2018
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 commentedon Mar 12, 2018
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 commentedon Mar 12, 2018
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 commentedon Mar 23, 2018
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 commentedon Mar 23, 2018
@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 👍