madduccino / coding.space

The Coding Space Projects
12 stars 22 forks source link

add more projects to web curriculum #66

Closed madduccino closed 3 years ago

madduccino commented 7 years ago

Here are some ideas:

Tic tac toe Hangman Blackjack or solitaire Simon Data app using https://opendata.cityofnewyork.us/

I'm wondering if the curriculum should be organized into concepts and projects should be built around them - eg arrays, objects, etc

stevekrouse commented 7 years ago

These ideas feel like WoofJS ideas:

Tic tac toe Hangman Blackjack or solitaire Simon

However, they could be Web curriculum ideas, just like how disco lights, pixel drawing and knock knock joke generator are valid Web curriculum projects even though they would probably be easier in WoofJS. (They were created before WoofJS existed so that's why they were made there. However, that doesn't make them bad projects. They still teach valid and useful HTML and CSS and JS skills.) Up to you on those.

Data apps sounds like a great idea! Same as above, that could also be a Woof or Web idea. You could add some of those APIs to the integrations tab if you wanted.

This is a really valid and common question I've meditated on for a while:

I'm wondering if the curriculum should be organized into concepts and projects should be built around them - eg arrays, objects, etc

There generally are two ways to teach things: concept-based or project-based. In a concept-based class, you cover concepts one by one, in an abstract way, not really applying the concepts in a broader concept or in conjunction with other concepts to make a bigger whole. In a project-based class, you have to have mastery over some concepts, but then you also have to pick up knew concepts or employ old concepts in new ways. As you're well aware, we're more of the project-based approach.

However, while we believe the project-based approach is better for a number of reasons (more engaging, more empowering, more closely mirrors the real world and thus more educational in the ways that matter, teach kids how to learn on their own, etc), we would also love to cover all of the concepts that traditional concept-based classes over for our students. I would say this is the single biggest downside to project-based learning: the learning is less comprehensive and systematic so 1) there may be gaps in your knowledge, and more importantly 2) you will be worried that there may be gaps in your knowledge.

The reason that (2) above is the more important of the two downsides is that in reality, there are no absolute set of concepts that define computer science. For example, while it seems like arrays, objects, loops, functions, etc are core concepts, that's more a function of how our languages are taught than anything innately core about those particular concepts. You could become a world-class programmer without any specific programming concept (in theory). It's a strange way to think but it really truly is an illusion that certain topics are "core" to a particular discipline.

Instead, a more realistic view of the world is that any concept in a particular domain is useful to learn if and when you want to apply that concept. (Of course, the more concepts you know in a domain, the easier it is to recognize gaps in your own knowledge and make up for it. However, you can get around this when first learning a skill because a teacher can help you notice a gap in your knowledge and help you debug it and fill it in.)

However, if your goal is to learn programming and "be a programmer" you will feel less of a programmer if you don't know many of the concepts that other programmers know. So that's the main reason it's important to be comprehensive. So you feel valid.

Anyways, all that said, how do we design a project-based curriculum around concepts?

Answer: it's hard. For one, I have had little to no success coming up with an idea for a project that students find engaging to play and make from the concepts. I've had much more success coming up with a number of engaging and fun project ideas and then after the fact organizing those projects into a series of levels, based on the amount of complexity in the project, which I define as the number of concepts that you have to use in conjunction with each other. Thus, no particular concept is more advanced than any other by itself, but when you ask a student to use a lot of concepts together, that's what makes a project advanced.

Then you have the problem of pre-requistites. You can create a project that's very simple that involves objects, say, so it's a level 1 project. Then you have have an advanced level 4 project that has objects and many other concepts, all used together. How do you guide the student to make sure they do that level 1 project with objects before the level 4 project with objects? That's a tough problem. In rock climbing, if you're trying to do a Level 6 climb that has a lot of crimping, one way to practice it is to do a Level 3 climb with a lot of crimping with really good form. The difficulty is in 1) noticing that you need to practice a component skill in a more isolated way and then 2) coming up with a way to practice that skill in isolation, which in this case is a level 1 project that focuses on that skill.

Does this resonate with you @madduccino? Thoughts to address these problems? Other project ideas?

Another idea: I'd be happy to teach MV* frameworks to our students, like VueJS or ReactJS, etc if you thought that'd be a good thing to add to the curriculum. Here's a project in that vein: https://medium.com/@ericsimons/introducing-realworld-6016654d36b5

For example, doing a ToDo MV* project would be a good addition to the curriculum I think.

At the same time, more Level 2 projects that focus on fundamentals like you suggest above is a good idea too :)