by ahsanhilal on 7/8/14, 5:35 PM with 25 comments
I would really like recommendations from the community about which curriculum and coursework they have used in teaching high school students CS. In particular, I am really interested in learning what specific curriculum paths some of you have used in the past and what online resources you have used to achieve that. My thoughts on an 8-week curriculum are the following:<p>1. HTML/CSS for 1.5 weeks 2. Javascript 2-3 weeks 3. Setup environment 2 days 4. Make a webpage 1 week 5. Jquery 1 week 6. Intro to Python 1 week The reason this is important to get right, is that the teachers and I really want to show other students in the school how programming can enable them to create something and change their lives. There are thousands of resources on the internet but most of these students never choose to learn CS and do not have any inclination to. We are hoping to change that bit by bit. Hopefully it works.
by raphaelrk on 7/8/14, 6:45 PM
by krrishd on 7/8/14, 6:33 PM
Source: I'm a 16 year old who got hooked on to programming a while ago.
by Kushal_C on 7/8/14, 7:28 PM
by aarohmankad on 7/8/14, 7:24 PM
by jason_slack on 7/8/14, 7:28 PM
by brudgers on 7/8/14, 6:48 PM
https://www.coursera.org/course/digitalmedia
In my opinion it's better to use the work product of seasoned professionals than that of even the most well intentioned amateurs. There are 10x teachers. There are 100x curricula. Being smart isn't expertise.
Good luck.
by tzhong on 7/8/14, 6:49 PM
by rnirnber on 7/8/14, 6:10 PM
by jonhmchan on 7/9/14, 1:44 PM
Please reach out if you need any help @jonhmchan
by mikeshi42 on 7/8/14, 7:33 PM
I went through the basics of HTML on the first day, including most of the HTML tags (yeah even <em> and <strong>) and had them try to make a basic page out of that. Then I would review with them a bit of the tags the next day and then I'd move onto basic CSS (CSS Syntax, Block vs Inline, Basic Properties) and I have them improve their page. The second week I did more advanced CSS (positioning, CSS3, box model, etc.). The next day (day 4) I had them implement those new CSS properties into their page and had them make a nice button out of pure CSS and HTML and tried to guide them through breaking down a webpage. (I found that looking at a page and breaking it down into HTML structure isn't as intuitive as it seems now). Third week I did intro to Javascript and jQuery. On the first day it was really basic control structures, console, debugging, etc. With that I had them make a "conversation bot" to where they used a bunch of if/else's to try to respond reasonable to user input. Then I moved on to jQuery introducing selectors and then .click() and .slideUp/Down/Toggle to create an animated menu. Now the fourth week we're currently working on starting our imitation of FlappyBird. (Yes, we're using HTML elements + jQuery, not a HTML Canvas). I think this is the most important part, making sure you're able to apply the basic skills that I covered through the first 3 weeks into a practical application. At this point my focus is on asking the right questions to lead them to answers instead of telling them what to do. Since they should already know the foundations of web development, it's more important that they know how to think like a programmer. I still lead them, giving them hints on which jQuery function to use. But a lot of the time I ask them to look at the jQuery documentation and tell me what we should do. I intentionally introduce half solutions to a problem and ask them why my solution wouldn't work. As for the rest of the weeks, I'm planning to continue development and refinement and throughout it let them customize their game to use whatever images or arbitrary rules they decide to make. I hope this would help you a bit. As for resources, I wrote most of my own slides, following the path that a lot of other popular coding sites use. But I felt like some of it I could change to fit my students better and I wanted to be familiar with the curriculum I was teaching, instead of just using some pre-made curriculum. Of course I don't think there's anything wrong with the pre-made curriculum I guess that was more of a personal choice.
Full disclosure: I'm 17, so not sure how useful my experience would be.
by wiseleo on 7/8/14, 8:54 PM
What needs to happen is inspiration. If you can inspire someone to believe in himself and show how comparatively easy current technologies are, you should be able to ignite the self-sustaining desire to get better.
My approach would be to pick a funded company that resonates with him and clone it. There are plenty of them that can be cloned in a day. This will demonstrate that building software capable of attracting funding is not difficult and that becoming an engineer on such a team is easier than pursuing professional sports.
Once you decide on the target, systematically disassemble the site and discuss what makes it work.
Install git, setup a local repo and a repo on bitbucket, and instruct the student to 'git commit' after substantial changes and 'git push' every so often. It's never too soon to introduce version control.
Starting with HTML, talk about DIVs and nothing else. There is no need to talk about other tags. Explain that DIVs are the building blocks and demonstrate a page built of just DIVs and no other tags. Fill it with Lorem and style with Bootstrap. Ignore AJAX until much later.
This will lead into CSS. Explain how CSS is used to style DIVs so each element looks different.
Now I would talk about Bootstrap and how it changed the way we build web apps.
Once CSS is a relatively clear concept, lead into jQuery but don't talk about JavaScript in general. jQuery would be introduced as a way to interact with DOM.
JavaScript is a confusing language to learn as a first language. It may make sense to shift gears and talk about Ruby and Python, whichever one is more familiar.
By now, this person should be ready to learn about control structures, loops, and other basics of programming. It is difficult to get motivation to learn that without a reason to learn it.
I would introduce real programming by following the BDD methodology. Teach the student to write tests before talking about how to make them pass. It is so unusual that it should be intriguing. I am not familiar enough, as of this writing, whether Ruby or Python have a better integrated testing frameworks, but I will explore that in detail later.
Once the student has a solid understanding of Ruby or Python, I would only then introduce JavaScript and map the concepts from Ruby or Python to JavaScript. By now prototypal inheritance will not seem as alien and brackets and semicolons will be just extra things to type.
AJAX and oAuth as well as the concept of REST APIs would be next.
Finally, let's go to the cutting edge and tie it all up with Meteor and Velocity testing. This will introduce nodejs, MongoDB and mobile app syncing.
Just say no to PHP. We thankfully have alternatives to it now.
As for books, I would advise the student to get a library card at a library that has access to either Safari Books Online or Books 24x7. He will then have access to the bulk of O'Reilly titles. I prefer the Headfirst series when getting started with a new language.
Little known fact: as a resident of the state you can get a library card from any library within that state and different libraries have different resources. This means he doesn't have to be limited to whatever library is local to his community. I have 7 library cards.
Hmm... this might inspire me to produce a video course based on this outline and test how well this theory might work. Lean startup methodology applied to teaching could be interesting. Saving this post for reference. :)