## Hacking Minds **Computing Science, Advanced Placement (AP), & Software Engineering** **Carson Cheng** 2014 June 20
## Bottom Line Do you want to grow a successful computing science program from nothing? Then focus on getting the culture right. Successful computing science programs don't come fully grown.
E.g., while growing our computing science program at EM High from scratch just three years ago, I also had the pleasure to have: - built the **Digital Media course** for grades 10 to 12 - founded and coached the **EM High Speech club** that competed in ADSA sanctioned competitions - help founded the **EM High Debate club** - implemented various new EM High advertising and promotional material - founded a **Computing Science club** as a hacker space, and lets students prepare for **CCC competitions** - participated in various promotional and outreach activities to the community and junior high schools - built an **I.T. Essentials course** for grades 10 and 11 - led I.T. students to volunteer with the Film course to provide a complete live streaming video server solution to **broadcast our Remembrance Day service** (and other events) throughout the school intranet
I listed those not to impress you, but to impress upon you that I started as a generalist CTS teacher, and that what we've done at EM High is nothing special. **All of this has been done before, and can be done again - by you.**
[pic source](http://www.syfy.com/battlestar/photos/photo_cylon_01)
## What is/not Computing Science (vs. "Computer" Science) - Science of computing (computational processes), not computer (machines - we're not Electrical or Computer Engineering EE/CE) - Study of algorithms and data structures by 1. theoretical means (i.e. mathematical techniques) and 2. empirical means (i.e. experiments using The Scientific Method) - Empirical study requires actual implementations of algorithms and data structures, which is why learning programming is so important, but conversely, learning programming is not the same as learning computing science - in fact, sometimes learning programming languages get in the way of learning computing science
## What is/not Software Engineering - Best practices and methodologies to building software that solves problems people have at a cost - E.g., Object Oriented Development and Analysis (OODA), Test Driven Development (TDD), Waterfall (don't do it), Agile, Iterative and Incremental Development
## Question: What should we teach? CS or SE? Computing Science vs Software Engineering is a **false dichotomy** of choices since there are other choices...
## What is/not Coding
- HTML, CSS can count as coding - even though they are NOT programming (not Turing Complete languages) - Programming counts, obviously
- "Coding": a popular brand to make learning programming "cool" nowadays, even though the brand's focus on "code" is misguided - We're not training code miners
- Typing lessons - NOT coding (although students in elementary and junior high really should learn to touch-type. Maybe it should be in the ELA curriculum?) - PowerPoint, Word, Prezi, iMovie, iAnything - NOT coding - Excel, unless you're extensively doing VB in it - NOT coding
## What is/not Hacking
- Negative connotation, positive connotation, both are correct - What was it historically? Included the [Tech Model Railroad Club of MIT](http://tmrc.mit.edu/hackers-ref.html).
- What's important is the culture of tinkering being a good thing, of solving problems for the sake of curiosity and learning, and of making things that work even if it's not done elegantly or "correctly" (the way an expert would)
- Modern day "Silicon Valley startup culture" understanding of Hacking: - making products that sells by means of hacking (vs. "proper" computing science or software engineering)
## Why hacking?
- Because the network effect means first to market has become more important than making software that stands the test of time, because practically no consumer software ever stands the test of time in a fickle market that chases fashion and trends.
- So Hackers are Builders and Creators of Value.
More "Pirates of Silicon Valley" or "The Social Network"
and less "Hackers" or "The Net".
pic source: Wikipedia
## Bottom line to Hacking Hacking is more about a process and a culture to solving problems. That's why it's used negatively and positively at times, for software, hardware, or even for people who mess with phones and model trains, and even by those in business (e.g. growth hacking).
### I teach programming through a culture of hacking code in the guise of CS/SE - (I reluctantly have to teach some rigorous CS/SE in the AP course though). - I don't draw attention to hacking because of the rampant misconceptions in the mainstream, but I don't shy away from it either. - If some kids think hacking (in the negative sense) is cool, the worse thing you can do is to say hacking is bad. Instead, I show them a different side to hacking, the side that helped: - Wozniak co-found Apple, - Gates co-found Microsoft, - Zuckerberg co-found Facebook, etc.
## Because it's not about learning to code ["Don't learn to code. Learn to think."](http://brikis98.blogspot.ca/2014/05/dont-learn-to-code-learn-to-think.html)
## How one thinks is a deep part of one's culture. - **Culture is how we think** and understand experiences with symbols, **and how we act** imaginatively and creatively - Big part of culture in a classroom depends on relationships - an AP student panel emphasized how their decision to take an AP course depended heavily on who the teacher was (AP Conference in San Francisco, July 2011) - you need the right teacher in the classroom to build the right culture for the course
## Pro Tips - Be the right teacher. - Don't be the wrong teacher. ![be don draper.jpg](art/be don draper/be don draper.jpg)
[pic source](http://www.designlessbetter.com/blogless/wp-content/uploads/2008/11/dlb-bedon.jpg)
## The culture of hacking code is fun. - CS, SE, and Math is up-tight and boring. - Appeal to authority here: I say this as a BSc(Hon) in Math and a MSc in CS - boring! - ["Don't frak up the culture." - Peter Thiel](https://medium.com/working-life/597cde9ee9d4)
## Why not focus on CS/SE/Math technical or theoretical aspects more? - Software is Eating Jobs - Why hire a loan officer at a mortgage firm when all they do is data entry into software that'll just calculate a credit score anyway? - So if programming code is good to learn, it has to spread beyond students who want to go into university. - Literacy and numeracy is important especially for those who'll never go into post-secondary. Especially if that's the majority of the students!
## What about the rigour? Rigour is rigour-mortis. "Yeah. Like Rigor Mortis, Habeas Corpus." ![Hackers scene](art/hackers scene/maxresdefault.jpg "Hackers movie") Practically the only people who need the mathematical and scientific rigour are those who go into CS/SE programs. And there's not many of them.
[pic source](https://i1.ytimg.com/vi/4U9MI0u2VIE/maxresdefault.jpg)
## How many go to university? How many into CS/SE? The education "system" converted only 4.2% of the 20 to 24 cohort into STEM university credentialed workers. ![stem degrees](art/stem table/stem table.png)
## Better argument against so much rigour: Cognitive Linguistics - cognitive linguistics research (amongst others) have shown the importance of basing language learning on non-symbolic (e.g. embodied) conceptualization development [[source](http://summit.sfu.ca/item/11790) [pdf](http://summit.sfu.ca/system/files/iritems1/11790/etd6748_CCheng.pdf)] - to learn the syntax and semantics of a language requires learning conceptualizations of tangible things and processes first - some conceptualizations are required as the basis for building up the formal syntactic and semantic understandings of the language
## Develop conceptualizations before learning the dry theory stuff - I choose to focus on letting students develop the conceptualizations first during the grade 10 course by getting them to play around with the things and processes in coding - We focus on building up the more formal syntactic and semantic understandings during grade 11 and 12
- Remember that in other academic subjects, students will have had around 10 years of learning math, physics, biology, etc. Except for one or two students, my classes are made up of students with zero experience in programming or computing science. - So grade 10 is *like* elementary school for them. Grade 11 is like junior high. Not until grade 12 are they into high school coding.
## Long Live Hacking - Silicon Valley hacker culture is focused on making things work, solving problems, creating products.
## To Echo The Grandmaster Computing Science? Two words: Code wins. If you're wrong, your code won't work as needed. Only code that works in the end is right. ![code wins](art/grandmaster scene/background_46481.jpg) ### "Code wins arguments." - Zuckerberg
[pic source](http://trailers.apple.com/trailers/weinstein/thegrandmaster/images/background_46481.jpg)
- This raises the bar significantly for teachers and students. - A truly bad essay could still get a point across. - A truly bad robot could still maybe limp around and start a fire. - A truly bad program just won't run or compile - end of story.
- Every student is tasked to create a fairly large program. - Most end up with over 500 lines of code (loc), having churned through more than that, but some end up with over 1k to 1.5k loc in a single program. - They are tasked to create more than one program in a semester, so many grade 10 students have experience writing over 1k loc, and some write over 2k to 3k loc.
- Lines of code is not a good measure of programmer productivity - but beginning students can learn a lot from having made a working program with that much code on their own. - at the least they've developed the guts to deep dive into that much code
## Lines of Code in what language? - JavaScript (JS) or Java. - We've tried Python and Processing (a subset of Java).
## Why JavaScript? - A very restricted subset of JS, "the Good Parts(tm)", can be just as easy as Python for a beginner - Looks more like Java than Python. Nice as students do Java in grade 11 and 12 due to the AP program.
- I would not teach Java if it weren't for the AP course. Would much rather teach Python. - U of A, MIT, U of C, SFU, and many others teach Python to CS freshman now. - SE usually sticks to C++ for other reasons.
## Why JavaScript? (cont.) - JS allows students to do stuff at home without a compiler/interpreter. Just need a web browser. - Can easily show off work to friends and family without them having install anything. Another good thing.
- Just don't try teaching Object Oriented Programming (OOP) in JS. - JS has *prototypal* OOP, not the more popular *class-based* OOP in Java, C++, Python, etc. - No need to confuse students with that. - Stick to procedural or functional style programming in JS and everyone will be happy. - We still teach data structures like dictionaries and arrays in JS.
## What kind of projects for grade 10s? - Text-based games - First major project for grade 10s. Still the best way to get students to focus on coding and learning the various programming structures like loops, conditionals, etc. without the distraction of making graphics. - I've tried Khan Academy and very quickly switched back to text-based games. There's just more opportunities for students to play around with the various programming structures (loops, etc.) to their own liking vs. the graphics-first approach. - Graphical game in the web browser using JQuery with various customizations and plugins - Second major project for grade 10s. - By "major", I mean it spans around 9 weeks! - Consists of a number of smaller sub-projects to build up to their final product.
## What kind of projects for grade 11s and 12s? - Grade 11s and 12s have to make up their own project. - I discourage games as that's been done in grade 10, but I don't ban it. - Grade 11s and 12s project examples: - Real-time 3D raytracer built from first principles (i.e. linear algebra, computational geometry). - Networked game server/client handling RPC via custom-made HTTP requests. - Population evolution genetic simulation. - Stock market analysis via ANN built from first principles (i.e. backprop derived with multidimensional calculus, in addition to various forms of Hebbian learning). - Oil & Gas production data analysis using various numerical calculus techniques on data accessed from an engineering company's server via WSDL.
## What kind of projects for grade 11s and 12s?(cont.) - more Grade 11s and 12s project examples: - Photo to server storage app for Android mobile. - Marine animal identification via computational vision algorithms. - Language identification via computational linguistic algorithms. - Web page screen scraping programs to search for prices of items on Amazon, etc. - Generative art projects to make self-generating artistic graphics. - Music synthesizer built with basic sine waves. - Wireless robot control system pushing assembly style multi-byte encoded commands over serial over Bluetooth. - Main Office staff and guest sign-in/out program - currently deployed to real use
## Difference between regular and AP program? - AP course is a full-year commitment - AP course runs with the same focus on culture as the other CS courses - Difference is the focus on rigour in - learning algorithms, - language lawyering required in learning Java the language, - exposure to more advanced data structures, and - learning more SE related topics like OODA and development methodologies
## College Board goodies - AP Exam - it can let students receive university transfer credits, - meaning the AP Computer Science A course content is equivalent (+/-0.05) to a university first year course in computing science - Requires teacher to teach to a College Board audited syllabus if you want to advertise as teaching an official AP course - EM High has the 3rd oldest College Board *audited* AP CS A course in Alberta, and - the only one in southern Alberta. All others are in Edmonton. :) - Other schools have been preparing students for the exam, of course, but haven't taught to a syllabus audited by the College Board.
## Alberta curriculum and AP - Alberta's CTS CSE credits cover all topics in the AP course - This raises the question of whether the Alberta CSE curriculum is too university-entrance focused. I think so.
- I use a lot of different resources to teach with, but the core backbone is **Blue Pelican Java** (BPJ), which helps me: - teach split classes of varying abilities, and - just generally be in more than one place at the same time (the reality of CTS teachers - like when I am called away to support the film class with live streaming broadcasts)
## Successes so far. - students getting into CS/SE or related programs at universities like UWaterloo, UBC, MRU, U of A, U of C, UVic, SFU, etc. - some students depended on CTS CSE credits as a science entrance course to gain university or college admission
- but more importantly, students who otherwise wouldn't be going to post-secondary into IT/CS or related fields are getting into those programs at places like SAIT, and - students who are at risk of not graduating high school are doing well enough to pass and graduate
- retention rate is great: - was 55% overall last to this year; 72% going into grade 12 Adv course (majority into AP). - now 67% overall into next year; 83% going into Adv course (majority into AP). - total enrolment is maxing out lab space: - we're packing them in like sardines - low cost, high volume operation.
## Current and Future work: Math/CS combined - an attempt to broaden the appeal of CS and to re-frame how math is learned in grade 10 as part of CBE's Flexibility initiative - Full year course combining Math 10C (5 credits) and Computing Science Intro (another 5 credits). - Spiritually based on the concept of Discrete Math classes as taught in CS, or Numerical Analysis classes as taught in Math, in universities.
## Current and Future work: Math/CS combined (cont.) - Cross-curricular opportunities to get concrete uses for the math they learn through CS projects: - rather than traditional paper-based projects, we can do functional, skillful, and useful programs with custom UIs for real world usage scenarios - Problem identification, solution development, and symbol manipulation skills transfers between CS and Math - More calendar time to learn, but same number of school days as any other CS and Math classes, so nothing is watered down
## Current and Future work: Math/CS combined (cont.) - First year offered 2013 Sept. Offering it again in 2014 Sept. - Insufficient information to give more in-depth talk about it at this point as it's a work in progress.
- but 3 zeros: - zero failures on shared standardized assessment in math 10C (i.e. assessments are no different than any other math class), - zero withdraws, - zero complaints.
## Future work: - AP CS Principles in 2016 - still a few years out
## Resources - [Blue Pelican Java (BPJ)](http://www.bluepelicanjava.com/) - [Think Java - How to Think Like a Computer Scientist (Downey)](http://www.greenteapress.com/thinkapjava/) - AP Summer Institute (APSI) conferences: Toronto - Take some university courses - Code for fun (like this presentation...)
### If coding/hacking is truly useful, why stop with teaching students going into computing science and software engineering? **Culture belongs to everyone, not just the anointed CS/SE people.**