ossu / computer-science

:mortar_board: Path to a free self-taught education in Computer Science!
MIT License
166.68k stars 21.06k forks source link

Add "extracurricular activities" to Computer Science #783

Closed rachel83az closed 2 years ago

rachel83az commented 3 years ago

It's currently suggested that students contribute to GitHub or complete a capstone project in order to consolidate and validate their knowledge. But students are unlikely to capable of contributing to any projects early on in their studies and this is, arguably, when it is most critical for them to practice and enhance their skills. I propose having a list of activities for students who want to practice more than what's contained in the classes but who aren't sure where to go after finishing a given class. Suggestions for inclusion are:

waciumawanjohi commented 3 years ago

@StevenKJo If you wish to refer to a discussion in another issue, it is sufficient to add a link to that page. Cutting and pasting your curriculum draft into other issues is not necessary and unnecessarily clutters the discussion. Thanks for your understanding. Glad that you're continuing the pursuit of CS excellence!

waciumawanjohi commented 3 years ago

@rachel83az This is a great formulation of a problem statement:

students are unlikely to capable of contributing to any projects early on in their studies and this is, arguably, when it is most critical for them to practice and enhance their skills

When I read the problem statement that you wrote, my first thought is: coursework in the curriculum should provide students the opportunity to practice and enhance their skills. What is that coursework missing? By honing in on the answer to that question we can find the best tool to address what is lacking!

One of the advantages of OSSU is that the community expresses clear guidance to new students. There are dozens of learn to program MOOCs. OSSU recommends one. I worry that listing Leetcode alongside numerous competitors (Hackerrank, Exercism, CodeWars, etc.) doesn't sufficiently address your great problem statement. I also worry that it doesn't provide the clear guidance that bring students to OSSU.

krishnakumarg1984 commented 3 years ago

Not to mention the sheer number of hours (months?) it takes to get through leetcode or hackerrank, which will impede the progress through the curriculum.

Also, leetcode et al. cater very specifically to the job interview market. You'd typically begin doing this 6 months prior to a standard coding interview. No one is questioning their merit, they are extremely high quality of course, but may be not the focus of a CS class.

spamegg1 commented 3 years ago

@rachel83az I really love your enthusiasm and initiative! You're one of those awesome newcomers. I see you welcoming others on Discord. I think they could maybe go into Extras. As you said it yourself, they are EXTRA-curricular. If people would like to do these on their own time, it's fine. The courses in the curriculum already provide plenty of exercises and small projects. Including these on top of it all would distract the students from the main curriculum. We already have so few learners who make it past the end of Core CS.

Below is digression unrelated to the issue. TL;DR: baby steps.

Now, addressing your problem statement as identified by @waciumawanjohi

students are unlikely to capable of contributing to any projects early on in their studies and this is, arguably, when it is most critical for them to practice and enhance their skills

I think there is something else going on here. I can't really prove it, but it's just my teacher's hunch. Let's call it that. And please call me out on it if I'm totally off.

Below, when I say "you", I am referring to beginners in general (and to my past self). Consider this a love letter to all the beginners out there.

I think that when you are still in the beginner stages, it FEELS like you do not have enough competence to contributing to a project. It FEELS like taking classes, doing programming assignments etc. are not good enough in your eyes to be considered worthy of a "project". They feel too small and insignificant. You're not quite satisfied. (Part of the reason might be that early stuff is too easy for you, and you haven't taken a course that kicked your ass and wiped the floor with you yet.) Since this is online learning and there is nobody/nothing holding you back, the natural tendency is to spread wide and try to do many things all at once, get distracted. I'VE BEEN THERE, trust me. And naturally you are in a rush to become competent as fast as possible. You keep thinking, "when will I be ready to do something BIG?" And you don't want to wait. Similar to how children always seem like they are in a hurry to grow up and start imitating adults. The dissatisfaction and the impatience make for an uncomfortable combination. Let's call this: beginner's mind.

The fact is, you have to be patient. I would argue that early on in your studies, arguably, is NOT when it is most critical for you to contribute to a project. Once you reach, let's say, Nand2Tetris, and try to do its projects, you'll understand what I mean. I've started contributing to open source projects only recently, after 2 years of finishing OSSU. I still have 8 more years to go! Also I haven't used any of these other resources at all. As for practice and enhancing your skills, the courses provide tons of that. I would recommend the slow, steady and patient approach of OSSU over the distracted, all over the place style of learning lots of others use, with various uncoordinated resources on the internet. Looking for a project? How about THE NEXT COURSE?

So I think that the problem is not really a problem, but a need to adjust expectations. I would recommend a shift in thinking, away from beginner's mind. Think long term, so that those small, insignificant exercises and programming assignments in each course should feel like they are crucial parts of your biggest, long-term project: YOU

Here is some anti-rushing material: https://www.norvig.com/21-days.html

rachel83az commented 3 years ago

@rachel83az This is a great formulation of a problem statement:

students are unlikely to capable of contributing to any projects early on in their studies and this is, arguably, when it is most critical for them to practice and enhance their skills

When I read the problem statement that you wrote, my first thought is: coursework in the curriculum should provide students the opportunity to practice and enhance their skills. What is that coursework missing? By honing in on the answer to that question we can find the best tool to address what is lacking!

One of the advantages of OSSU is that the community expresses clear guidance to new students. There are dozens of learn to program MOOCs. OSSU recommends one. I worry that listing Leetcode alongside numerous competitors (Hackerrank, Exercism, CodeWars, etc.) doesn't sufficiently address your great problem statement. I also worry that it doesn't provide the clear guidance that bring students to OSSU.

I am unaware of any actual courses, whether traditional or online, that currently address this problem. It's a well-known trope that students graduate from school being unable to actively write a single line of real code. In lieu of being able to find a course that deals with the issue (and I'm not convinced that there is one), I think that providing optional activities/resources is going to be the best way to go. Students who are less certain can do a few activities so that they actually understand and aren't just regurgitating and then they move on to the next class in the series.

Not to mention the sheer number of hours (months?) it takes to get through leetcode or hackerrank, which will impede the progress through the curriculum.

The important thing would be to somehow stress that students don't need to "get through" anything. They do a couple of activities and then come back to class. Someone doing football as an extracurricular doesn't (shouldn't) have their academic career put on hold just because the student likes to do sports in his or her spare time. The same should be true here.

I would argue that "early on in your studies", arguably, is NOT when it is most critical for you to contribute to a project.

Contribute? No. Practice? Absolutely! It doesn't stick if you don't practice and practice by doing something that is actually interesting to you.

And naturally you are in a rush to become competent as fast as possible. You keep thinking, "when will I be ready to do something BIG?" And you don't want to wait.

This isn't really my point at all. It's about understanding, not 'big projects'. You can finish a course (especially early on) and still be confused about the basics. You're not really ready to leap into the next course because you still don't understand the first. But you're not sure where to go to get to grips with what you've been learning. Doing the exact same exercises twice doesn't really promote understanding; sometimes you need things worded in a different way in order to really understand why a certain bit of code needs to be the way it does.

rachel83az commented 3 years ago

Looking for a project? How about THE NEXT COURSE?

Here is some anti-rushing material: https://www.norvig.com/21-days.html

That link promotes exactly what I've been saying: you need to do. One of the first suggestions there is this:

Program. The best kind of learning is learning by doing.

And then we see this:

Talk with other programmers; read other programs. This is more important than any book or training course.

I would argue that going from course to course without stopping at all to process what you've been learning is the antithesis of what that link is all about. If you think that link is good advice then the CS route really does need more resources for people to practice and program before they get to the end and find themselves staring at the capstone uncertainly.

waciumawanjohi commented 3 years ago

It's a well-known trope that students graduate from school being unable to actively write a single line of real code.

Here is an assignment from Chapter 8 (of 17) of Py4E, the first course in the curriculum:

7.2 Write a program that prompts for a file name, then opens that file and reads through the file, looking for lines of the form:
X-DSPAM-Confidence:    0.8475
Count these lines and extract the floating point values from each of the lines and compute the average of those values and produce an output as shown below. Do not use the sum() function or a variable named sum in your solution.
You can download the sample data at http://www.py4e.com/code3/mbox-short.txt when you are testing below enter mbox-short.txt as the file name.

Does succeeding in this assignment constitute 'real code'?

MrAnonymous545 commented 3 years ago

I'm not familiar with Github, so I hope I'm not necro-ing a thread. But it still says Open, so I'm assuming it should be open for response.

@waciumawanjohi

Does succeeding in this assignment constitute 'real code'?

I don't believe that was @rachel83az's emphasis. If I am misinterpreting though, I apologize. What I took from that specific line was

It's a well-known trope that students graduate from school being unable to actively write a single line of real code.

In terms of the PY4E course, many of the examples and exercises he has he sort of walked through conceptually in his videos or in the chapter. So it's at least subconsciously preparing us to do those exercises. We don't have to solve the problem "from scratch." So give us a problem where the parameters are laid out in x,y fashion, and we'll be able to code for it. But confront us with another problem, and it might stump us since we're still not practiced with thinking algorithmically or what have you. I think she's advocating for different sources so that what we learn simultaneously gets enforced, the information really gets internalized, and we expand the way we think about problems.

However, I also understand the concern that students might get stuck going in circles early on in the curriculum if those resources are put at that point in the curriculum. Anyone who tends to be a completionist or a perfectionist might remain unsatisfied in moving on if they don't feel like they've learned all that was recommended at that point.

I think it would be nice to at least have an "extra" section with optional resources with the intention of students using them if needed, but I also understand that adding more overhead for you guys is undesirable.

rachel83az commented 3 years ago

In terms of the PY4E course, many of the examples and exercises he has he sort of walked through conceptually in his videos or in the chapter. So it's at least subconsciously preparing us to do those exercises. We don't have to solve the problem "from scratch." So give us a problem where the parameters are laid out in x,y fashion, and we'll be able to code for it. But confront us with another problem, and it might stump us since we're still not practiced with thinking algorithmically or what have you. I think she's advocating for different sources so that what we learn simultaneously gets enforced, the information really gets internalized, and we expand the way we think about problems.

Yes, thank you, this is exactly what I meant. I've been trying to figure out how to word it to be more understandable and you hit the nail on the head perfectly. Solving "textbook" problems is easy because we've been prepped for them by the course. Solving a "real world" example is much more difficult because there is no hand-holding.

I don't even necessarily think that extracurricular activities should be added to the main computer science page because there is enough there. I think that they should be in a new file in the /extras section or something along those lines. That way, people who want it will be able to find it and those who want to move on aren't distracted.