Abstraction of Algorithmic Thinking as a Tool

It is well known that com­puter sci­ence and/or pro­gram­ming is widely used in most fields today, so one would assume that it would be easy to teach algo­rith­mic think­ing through the con­text of another field. With this naïve assump­tion in mind, my team and I set out to cre­ate a cur­ricu­lum to teach middle-school kids the basics of alge­bra through the medium of Scratch. As the quar­ter has pro­gressed, we have faced lim­i­ta­tions and tough deci­sions, and I have real­ized that there is a chal­lenge and trade­off asso­ci­ated with using GUI based pro­grams like Scratch to teach stu­dents alge­bra and algo­rith­mic thinking.

The arti­cle talks about Cre­at­ing by React­ing. Cre­at­ing by react­ing involves get­ting some­thing done as fast as pos­si­ble. The exam­ple they show involves a rudi­men­tary image draw­ing pro­gram. The exam­ple starts off with a method that takes in para­me­ters and draws an ellipse, but as the exam­ple pro­gresses, the actual pro­gram­ming parts get more and more abstracted. The author makes an anal­ogy to Lego blocks, and that the rea­son chil­dren can build so many things with them is that they clearly show the tools that are avail­able to the user. Legos allow the child to “scan the avail­able parts and get new ideas”. Then this exam­ple is car­ried over to the image draw­ing pro­gram, where the author cre­ates a Paint-like inter­face. But this is not programming.

Sim­i­larly, when my group and I set out to teach kids alge­bra while allow­ing them to solve prob­lems pro­gram­mat­i­cally, we ran into prob­lems. We had a hard time fig­ur­ing out how much we could con­strain func­tion­al­ity while still allow­ing the flex­i­bil­ity to get chil­dren excited about pro­gram­ming. We wanted to show chil­dren how the equa­tion of a line, y = mx + b, can be used to model the posi­tion of a rab­bit in a race. But would let­ting the chil­dren use a “for” loop to make the rab­bit move help them learn alge­bra or would it be bet­ter to pro­vide a degree of abstrac­tion and just build it for them initially?

One solu­tion we thought of was to pro­vide a nicely abstracted pro­gram to learn alge­bra dur­ing class, but giv­ing them the files to explore for home­work. We would give struc­tured home­work assign­ments that would force them to try and imple­ment other func­tions through the Scratch user inter­face. In this way they learn alge­bra, but see how the alge­bra works and really take it apart and under­stand how it works at home. The highly intu­itive and inter­est­ing Scratch inter­face would help encour­age inde­pen­dent exploration.

Works Cited:
Bret Vic­tor; Sep­tem­ber 2012; http://worrydream.com/LearnableProgramming/

What is Computer Science Exposure?

Ever since I took my very first pro­gram­ming class in col­lege, I was hooked. I didn’t know what Com­puter Sci­ence was (or, at least I thought I knew it was some bor­ing sub­ject I wasn’t inter­ested in) but I found myself being pleas­antly surprised.

I wish that I had known about Com­puter Sci­ence sooner. There was an AP Com­puter Sci­ence class in my high school, but I never felt com­pelled to sign up for it because I never knew what it was. I thought Com­puter Sci­ence was a very spe­cialzed topic: the study of com­put­ers. But Com­puter Sci­ence isn’t just a topic. It isn’t a set of facts or spe­cific infor­ma­tion. It isn’t about com­put­ers. For me, Com­puter Sci­ence is a way of think­ing. It is a way to break down a prob­lem into con­crete steps to find a gen­er­al­ized solu­tion. My intro pro­gram­ming course really felt like “How to Think 101.” It seems odd that prob­lem solv­ing and a tought process wasn’t intro­duced to me until college.

Since this class, I’ve become inter­ested in spread­ing expo­sure to Com­puter Sci­ence ear­lier in the edu­ca­tional track, in K-12. How­ever, as I’ve met and worked with oth­ers with sim­i­lar endeav­ors, I’ve real­ized that Com­puter Sci­ence Out­reach isn’t all that sim­ple. Though there is a large com­mu­nity of peo­ple enthused to intro­duce Com­puter Sci­ence in the K-12 track, how to go about doing so isn’t some­thing that many peo­ple can agree on. Com­puter Sci­ence K-12 Out­reach poses sev­eral ques­tions. Why is Com­puter Sci­ence impor­tant? What is the best way to engage stu­dents? What should stu­dents be exposed to first?

The dif­fi­culty with answer­ing these ques­tions is that no one seems to know or agree on what Com­puter Sci­ence even is. How do we go about teach­ing some­thing when we don’t know what we’re teach­ing? Sev­eral arti­cles have argued that we shouldn’t be teach­ing “Com­puter Sci­ence” in K-12 edu­ca­tion, but rather “Com­pu­ta­tional Think­ing.” How­ever, I haven’t found that peo­ple can even put their fin­ger on what “Com­pu­ta­tional Think­ing” really is either. The def­i­n­i­tions I’ve read haven’t made much dis­tinc­tion between “Com­puter Sci­ence” and “Com­pu­ta­tional Think­ing” at all.

While I can’t tell you what I think Com­pu­ta­tional Think­ing cer­tainly is, I can cer­tainly tell you what I think it isn’t. It isn’t about using com­put­ers, or under­stand­ing any kind of spe­cial­ized jar­gon. Jeanette Wing’s arti­cle on Com­pu­ta­tional Think­ing throws around buzz words like “grid­lock dead­lock” and “gar­barge col­lec­tion.” These words are exactly what I said Com­puter Sci­ence isn’t. A topic. A col­lec­tion of facts and infor­ma­tion. You either know them or you don’t. But think­ing and learn­ing how to think isn’t so black and white. The ACM arti­cle “Run­ning on Empty” too focuses heav­ily on a list of top­ics and ter­mi­nol­ogy. Com­pil­ers, net­works, mem­ory man­age­ment, pro­to­cols. I couldn’t care less.

This under­ly­ing dis­agree­ment between me and many oth­ers in the K-12 Com­puter Sci­ence Edu­ca­tion com­mu­nity stems from dis­agree­ment about the goal of expo­sure to Com­puter Sci­ence. Many point out that we “need” more Com­puter Sci­en­tist; tech­nol­ogy has become increas­ing preva­lent in our every­day lives. These lists of top­ics and buzz words have seem­ingly become a check-list for what we Com­puter Sci­en­tists think oth­ers should know. But I hate to see K-12 out­reach as a self­ish recruit­ing oppor­tu­nity. Engag­ing stu­dents in Com­puter Sci­ence or Com­pu­ta­tional Think­ing, what­ever it may be, shouldn’t be about us. It shouldn’t be about us forc­ing chil­dren to learn more. It should be about pro­vid­ing aware­ness of the the option, oppor­tu­nity and choice to learn some­thing dif­fer­ent. Expo­sure to Com­puter Sci­ence should be about open­ing doors, not about build­ing paths.

Teaching On Computers

I’m cur­rently involved in a few research projects focused on com­put­er­ized teach­ing and thought I’d use this oppor­tu­nity to dis­cuss one for a bit and con­nect it back into this class.

The project involves com­put­er­iz­ing a suite of read­ing and writ­ing lessons that have been devel­oped by a research group in the Depart­ment of Edu­ca­tional Psy­chol­ogy over sev­eral decades. It’s a mul­ti­dis­ci­pli­nary study with many research goals but the top­ics I’m usu­ally wrestling with revolve around the ques­tion: How does one teach effec­tively through a com­puter? Even with a thor­oughly vet­ted (paper-based) cur­ricu­lum avail­able there are still chal­lenges and ques­tions. How do we know a stu­dent is ben­e­fit­ting from a les­son? Live assess­ment is tough, espe­cially for some­thing like writ­ing, but find­ing out sev­eral months later doesn’t help any­one. How do we acco­mo­date an indi­vid­ual student’s needs? Should we allow con­tent to be skipped if a stu­dent knows it already or is strug­gling too much? How can we tell the dif­fer­ence? How and when do we revisit the les­son if they didn’t get it the first time? Exactly what is the com­puter capa­ble of doing on its own and what do we still need a human teacher to per­form? Not just what can be done either, but what is easy to do with real-world constraints?

I think these ques­tions are just as rel­e­vant to CS edu­ca­tion as read­ing and writ­ing, maybe even more so since, with the excep­tion of work like CS Unplugged, CS instruc­tion (or at least learn­ing) occurs most nat­u­rally on a com­puter. Learn­ing CS online is blow­ing up in a big way with sites like Cours­era, Khan Acad­emy, and Codecad­emy and while they are grow­ing in pop­u­lar­ity I think their legit­i­macy is still in ques­tion for a lot of peo­ple. Would you, as a hypo­thet­i­cal employer, hire some­one with a degree earned online over some­one with a UWCSE degree? If not, what would it take for you to put them on equal terms? I can buy the argu­ment that these are resources for hob­by­ists pri­mar­ily, and CS jobs in par­tic­u­lar are known for hir­ing based on raw tal­ent over offi­cial degrees but that’s not true always and it’s def­i­nitely not true for other sub­jects. At some point these resources need to be legit­imized or they will die off, so what needs to be done for that to happen?

This actu­ally makes me think of the One Lap­top Per Child study I men­tioned at the start of class. Here’s the link if you’re inter­ested. There’s a lot in there but my take­away from it was: The com­puter resources pro­vided were, alone, not suf­fi­cient to improve stu­dent learn­ing. It’s my impres­sion the soft­ware on the lap­tops was not cre­ated to teach and that may be the big mis­take in all this. In ret­ro­spect it’s easy to guess that a stu­dent can’t learn to write from a word proces­sor but it’s still a blow to com­put­er­ized teaching.

Prac­ti­cally, I don’t think there’s any way you can fully auto­mate teach­ing. Maybe in the near or dis­tant future when we have mag­i­cal AI’s but for now it’s not suf­fi­cient. Some inter­ac­tion with a teacher and/or your peers is nec­es­sary. To put it another way, as long as actual soci­ety relies on human to human inter­ac­tion, it makes sense to teach peo­ple with the same method. Of course, dis­till­ing that nec­es­sary inter­ac­tion is the tricky part, espe­cially when mod­ern tech­nol­ogy makes it a mov­ing target.

 

 

Dispelling the Mythical Computer Being

Ear­lier in the quar­ter, our sem­i­nar had a dis­cus­sion about com­puter sci­ence being taught in K-12. It seemed that peo­ple over­all agreed that forc­ing stu­dents to take com­puter sci­ence as a grad­u­a­tion require­ment may not exactly be the best idea, and may even deter them from want­ing to fur­ther explore the sub­ject or even like the sub­ject. Even if the classes were offered and not required, the main ques­tion was: how would we even get stu­dents to take the classes if they don’t know any­thing about them, or have inac­cu­rate views on the sub­ject? Although the gen­eral view of com­puter sci­ence seems to be chang­ing, it still seems that peo­ple gen­er­ally view com­puter sci­ence as only for nerdy peo­ple, for peo­ple who are incred­i­ble at math, and/or they believe that it is so mag­i­cal that they should not even try it. How­ever, you can’t blame any­one for hav­ing this mis­con­cep­tion, because that’s the idea that’s still being spread around.

One way to try to dis­pel this view is to expose the stu­dents to the sub­ject early on in their edu­ca­tion. If we could do that, how would we go about expos­ing the sub­ject to stu­dents? Some­one men­tioned that they became inter­ested in the sub­ject through ter­ri­ble com­puter sci­ence camps. Although the camps were ter­ri­ble, they at least gave him expo­sure to the area. How­ever, these camps were very expen­sive, which may have deterred par­ents from enrolling their chil­dren and teenagers. Let’s imag­ine that these camps were afford­able to all fam­i­lies. The ques­tion still remains: how do we get peo­ple to become inter­ested enough that they would enroll in the camps? Like men­tioned before, what if their views are inac­cu­rate? I believe that we should try to branch out into ter­ri­to­ries out­side of K-12 edu­ca­tion or related to edu­ca­tion in general.

Cur­rently, the media shows com­puter sci­en­tists as very nerdy, eccen­tric char­ac­ters who are awk­ward with oth­ers, always sit­ting in front of com­put­ers, and may speak only in terms of nerdy leet speak. Addi­tion­ally, any­thing that has to do with a com­puter usu­ally has to do with a mil­lion key presses accom­pa­nied by mil­lions of lines of scrolling text and non­sen­si­cal equa­tions. We all know that this is not the case, just as we know that racial stereo­types are not accu­rate of what peo­ple of a cer­tain race are actu­ally like. How­ever, this image of the stereo­typ­i­cal com­puter sci­en­tist sticks with peo­ple. This may drive them away from being inter­ested in the field for what­ever rea­son, whether if it’s that they don’t want to be seen that way, or if it’s the fear of not being able to go into the field because they can’t read a mil­lion lines of text per sec­ond. This stereo­type, as with other stereo­types, will never go away, or at least not any time soon.

We have more power than we think to try and change this stereo­type. All we have to do is give some peo­ple exam­ples that are con­trary to the stereo­type. Of course, try­ing to affect tele­vi­sion sta­tions is a big step, but we have the best media out­let in the world: the inter­net. We all know that tech­nol­ogy is a big part of every­day life in this age. Some­one, some­where, out in the world, will at least get the mes­sage, and may even spread the mes­sage to their friends or fam­ily. Even if it’s just as sim­ple as shar­ing a link on Face­book, that mes­sage will be passed out and hope­fully spread among the masses. For exam­ple, recently the code.org video spread like wild­fire across the inter­net. A friend of mine, a soon to be high school grad­u­ate, was very afraid of sign­ing up for the intro com­puter sci­ence course at UW. He didn’t think he was smart enough, and he was afraid of how dif­fi­cult it would be because it was so for­eign to him. Out of bore­dom, he decided to watch the code.org video and imme­di­ately changed his sched­ule to include CSE142. Some­thing as sim­ple as that video got him hooked, and appar­ently changed his views of com­puter sci­ence. Even if some peo­ple view the video as a lit­tle bit corny, it at least spreads the mes­sage that com­puter sci­ence isn’t what pop­u­lar media has made it to be. That’s just one exam­ple of someone’s view of com­puter sci­ence shift­ing and becom­ing inter­ested. Imag­ine all of the other peo­ple who have also been inspired.

Inspiring the next generation

We will not suc­ceed in get­ting more chil­dren inter­ested in any engi­neer­ing dis­ci­pline through the classroom–that’s a promise. The allure of engi­neer­ing and the sci­ences is not in book­work and videos shown on the class­room tele­vi­sion. It’s not in solv­ing equa­tions and learn­ing about the giants upon whose shoul­ders we stand. For chil­dren who are in ele­men­tary and mid­dle school, it’s not even in the beauty of an effi­cient algorithm.

The allure of STEM fields is in the excite­ment of all the pos­si­bil­i­ties they hold.

When I was in high school, I worked with my high school’s robot­ics team to pro­mote K-12 sci­ence and tech­nol­ogy edu­ca­tion in-and-around the East­side. My goal was to help to inspire the next gen­er­a­tion of engi­neers and sci­en­tists who would rev­o­lu­tion­ize tomorrow’s world through get­ting kids involved with robot­ics and other STEM field pro­grams, and start­ing up new robot­ics teams.

I spoke with hun­dreds, if not thou­sands, of chil­dren over four years, but I always made sure to have a work­ing robot by my side. I was keen not to go into specifics; I would dis­cuss the fun­da­men­tals of all engi­neer­ing sub­fields. I explained how sys­tems could inter­act with each other and how the con­cepts they were learn­ing in class, such as elec­tric­ity and mag­net­ism, were being applied in the pro­gram­ming, com­mu­ni­ca­tion, and motion of the machine.

Girl scouts looking at a BoeBot

It’s well known that you can’t keep a crowd of 3rd graders to sit still for long, but some­how, I had them spellbound.

I would explain how peo­ple with very dif­fer­ent inter­ests had come together to build the machine, from pro­gram­mers and com­puter sci­en­tists to mechan­i­cal engi­neers. Invari­ably, after each demon­stra­tion, a few of the chil­dren who were a lit­tle more curi­ous than the rest would stay back and ask more ques­tions. “How does the robot know how to do that? How did they teach the robot to stop when it picked up the tube?” These ques­tions are val­i­da­tion that my processes were working–I had ignited that spark of inter­ested that could grow to become a pas­sion. Now, many of those chil­dren have joined robot­ics teams, or attended our team’s sum­mer camps.

Note that these are kids at gen­er­ally good schools with great teach­ers and sci­ence cur­ric­ula, but the class­room has an aura of bleak­ness to it, from the per­spec­tive of chil­dren. As far as they know, the class­room isn’t for fun and excite­ment, its for learn­ing, and who wants to do that?

My point is that in order to get chil­dren inter­ested in com­puter sci­ence, we can’t rely on tra­di­tional class­room expe­ri­ences. Instead, we must look to demon­stra­tions of the pos­si­bil­i­ties of com­puter sci­ence, such as com­puter vision algo­rithms work­ing in sync with a robot to nav­i­gate a room, or the use of biosig­nals such as EMG to con­trol exter­nal machines. It is not nec­es­sary to intro­duce spe­cific com­puter sci­ence con­cepts such as con­di­tional exe­cu­tion and loops to get young chil­dren into the field. All it takes is that first spark of inter­est and the rest will follow.

The intro to CS fair

I’m writ­ing this sev­eral hours after leav­ing Microsoft. My voice is still slightly hoarse from talk­ing louder than I nor­mally would all morn­ing, and I’m prob­a­bly going to go take a nap soon.

I’m not sure what the best way to present this is, so I’m just going to recount it in chrono­log­i­cal order.

The event was bro­ken up into sev­eral parts. First there was a pre­sen­ta­tion by the founder of code.org, and then the stu­dents were split into two groups. One group would go into the demo room and par­tic­i­pate in the demos, while the sec­ond group would par­tic­i­pate in some stu­dent panel, and then both groups would switch activ­i­ties after lunch.

We arrived at the Microsoft cam­pus (after slog­ging through traf­fic) only to real­ize that we for­got a VGA cable to con­nect the lap­top run­ning our demos to the mon­i­tor we had brought. Luck­ily, Microsoft loaned us an appar­ently bul­let­proof (it was very thick) vga cable. I got the lap­top run­ning a slightly mod­i­fied ver­sion of Evil­Hang­man (a CSE 143 home­work assign­ment), and then went over to see the presentation.

The pre­sen­ta­tion by Hadi, the founder of code.org, was what I expected. The main mes­sage was “There are going to be 1.4 mil­lion CS related jobs by 2020, and we are only going to be able to sup­ply 400,000 of those with our cur­rent edu­ca­tion. That’s a MILLION unfilled jobs”.

Hadi

I have mixed feel­ings about this argu­ment. While I agree that it is impor­tant to get those jobs filled for the good of the nation’s econ­omy, pre­sent­ing that as the main rea­son to get into CS seems wrong. Instead, I would have liked to see exam­ples of why CS is such a broadly impor­tant field, and how CS applies to many dif­fer­ent fields and jobs, and not just cod­ing for some huge com­pany. How­ever, we were given one exam­ple of a per­son who uses his pro­gram­ming knowl­edge in a unique way. A short video told us about Makinde, a retired face­book employee who uses his pro­gram­ming skills to help build schools in Africa. While Makinde is a good exam­ple, he is a mem­ber of what I would think is a small minor­ity of very suc­cess­ful peo­ple. He retired at the age of 25 and is a mul­ti­mil­lion­aire. Most pro­gram­mers I know are not mul­ti­mil­lion­aires, nor are they retired. In my opin­ion, the Makinde exam­ple, while good, gives the wrong impres­sion to the kids that they can just work for a few years and then retire with all the money they will ever need. All in all, I wasn’t that impressed with the presentation.

The first wave of kids was awe­some. Ini­tially, they went to the flashier exhibits—Microsoft had some kinect box­ing robots, and Bungie was there along with Are­aNet, and every­one wanted some gam­ing swag.

Microsoft Employees and their toys

Google and Face­book had booths as well, but the kids were required to go to at least three edu­ca­tion related booths, so they even­tu­ally wan­dered over to us. I pushed them towards play­ing hang­man (“Come beat our hang­man! It’s pretty clever”).

Trying to beat hangman

Ini­tially they were reluc­tant, but they quickly got over their shy­ness. We had a small line to play it most of the time. The two com­ments I heard most was “Oh, we just made this in class,” (to which I responded “I promise you, it’s not the same”) and “Where’s the hang­man?” Sur­pris­ingly, very few peo­ple guessed it was cheat­ing, but there was a lot of “I’ve never even heard of this word before” and “It had three ‘B’s??” All in all, it was a suc­cess­ful demo, but I wish I had set the aver­age word length a bit shorter, as it makes it more obvi­ous that the pro­gram is cheating.

Helene + students

 

I answered a lot of ques­tions. The top three ques­tions I got were:

  1. What schools are good for game design?
  2. How do I get into UW?
  3. Is the major hard to get into?

A lot of guys were inter­ested in game design. Some were under the impres­sion that if they took our intro classes that they could make Zelda or some­thing. I told them that they maybe could if they tried really hard, but that the course in gen­eral was more about pro­gram­ming con­cepts than mak­ing games. A lot of peo­ple were wor­ried about going to UW because they were ner­vous about the gen­eral admis­sion require­ments, as well as the require­ments on top of that for get­ting in the major. I answered their ques­tions as best I could, but I haven’t even gone through the appli­ca­tion process myself, so I wasn’t much help beyond gen­eral admission.

I asked a lot of the kids if they liked their pro­gram­ming class or not. The response was pretty split. About half the kids said “yeah, I love it; it’s what I want to do.” The other half were not so enthu­si­as­tic, or admit­ted to being bored in the class. Dig­ging fur­ther, I found that the sat­is­fied kids were mak­ing games in c# and python, while the bored kids were copy­ing code and using scratch. One class of kids was extremely par­tic­u­lar. Appar­ently they had gone from using python and BYOB to scratch, and they felt like it was way too sim­plis­tic and bor­ing, which is totally under­stand­able. I just won­der what kind of cur­ricu­lum has that kind of pro­gres­sion of pro­gram­ming medi­ums. Maybe it’s eas­ier to teach some con­cepts in scratch? But what jus­ti­fies going from Python to Scratch…

 

All in all, it was a good day. I got to talk to a lot of inter­est­ing kids, and there was an incred­i­ble range of diver­sity and depth in the kids who really wanted to talk. One kid I talked to basi­cally had his whole life planned out: Go to UCLA, major in busi­ness with a minor in CSE and Man­darin, and then he was going to be an entre­pre­neur in China. Another wanted to make a Face­book app that let you make col­lab­o­ra­tive art with your friends. And some kids just wanted some free stuff. Still, it was a good expe­ri­ence, and I think I learned more from the kids than they learned from me.

Outreach Programs Give Students Opportunities

Last Sat­ur­day I helped out at Engi­neer­ing Dis­cov­ery Days. It’s a great pro­gram where grade school stu­dents can come visit UW and get a brief taste of all of the dif­fer­ent engi­neer­ing pro­grams that the uni­ver­sity has to offer. There are fun activ­i­ties, tours, and pre­sen­ta­tions for stu­dents and their par­ents to par­tic­i­pate in.

I was help­ing out at the Dawg­bytes table for the Com­puter Sci­ence and Engi­neer­ing depart­ment. We had a few Scrib­bler robots set up in the mid­dle of the CSE build­ing atrium, ready to get stu­dents excited about robots, pro­gram­ming and com­puter sci­ence in gen­eral. I had a ton of fun help­ing stu­dents (and par­ents!) of all ages learn how the Scrib­blers worked. What was really cool to me was how excited many of the kids were. They were truly happy to spend a Sat­ur­day after­noon doing engi­neer­ing activ­i­ties, and were thrilled to get the chance to play with a lit­tle robot. We showed them how the robots use sen­sors to “see” and how we could tell the robots what to do with a lit­tle Python script. Then, many of them were excited to have the chance to tell the robot what to do them­selves. It was cool to see these kids, some of them in ele­men­tary school, stand at the lap­top and type out a few com­mands. They quickly picked up on the sim­ple com­mands that they could use, and some were work­ing on quite detailed pro­grams within min­utes. The way they smiled or their eyes lit up when the robot did exactly what they wanted was priceless.

Clearly, there’s a lot of learn­ing and fun avail­able for stu­dents in com­puter sci­ence. It’s just a mat­ter of get­ting it out there in front of them so they know it’s avail­able. I noticed that there were some par­ents who seemed quite knowl­edge­able about STEM fields, pro­gram­ming in par­tic­u­lar, and that they had been teach­ing their kids a lit­tle, which I thought was fan­tas­tic. Hav­ing par­ents get their kids hooked on com­puter sci­ence at a young age is great. How­ever, there were also some par­ents who seemed to be less aware of exactly what com­puter sci­ence entailed. They had kids who were whizzes at pro­gram­ming, but didn’t really know what to do about it. That’s why I was glad we were able to point them to sum­mer camps and other oppor­tu­ni­ties for their stu­dents to con­tinue to develop their com­puter sci­ence skills.

I think it’s really impor­tant that kids have the oppor­tu­nity to use the skills they have, espe­cially those for which they have a pas­sion. As I saw on Sat­ur­day, there are a lot of kids who know a thing or two about pro­gram­ming and are gen­uinely excited about doing more with it. We just need to do a bet­ter job of pro­vid­ing them with the oppor­tu­ni­ties to exer­cise and expand those skills. Hope­fully, we will con­tinue to pro­vide increas­ingly more out­reach pro­grams so that today’s grade school stu­dents can become tomorrow’s com­puter sci­ence whizzes.

Shortage of CS Majors? or Shortage of Good(enough) CS Majors?

The demand for com­puter sci­ence majors is grow­ing fast, with todays jobs heav­ily reliant on pro­gram­ming and the computer’s abil­ity to han­dle data faster and more effi­ciently than any human could pos­si­bly do by hand. The pos­tu­lated prob­lem how­ever, is that the demand is not get­ting met because not enough peo­ple are inter­ested in com­puter science.

I don’t think so.

It is true that com­puter sci­ence is a rel­a­tively new field and that most stu­dents have never pro­grammed before they enter col­lege, myself included. When I entered UW, I had no idea what I wanted to do. I absolutely loved AP Calc in my senior year but did not want to be lim­ited by a Math degree. I had always been pretty good at all my classes in High School, but there wasn’t a par­tic­u­lar sub­ject that I loved or was incred­i­bly good at. I took my first nat­ural sci­ence courses at the UW, and thought they were great ideas.…but they were miss­ing some­thing that just did not make me love it. It wasn’t until I was rec­om­mended by a friend to take my first com­puter pro­gram­ming class when I finally expe­ri­enced the feel­ings those love songs keep singing about. The class was amaz­ing. It’s as if Com­puter Sci­ence had taken all the parts I liked about Math and cre­ated an entirely new sub­ject that is a hun­dred times more applic­a­ble and excit­ing. I was so excited, and I wanted to see if any­one else was as excited as I was.

With just about every­one I met or became friends with, I had asked them the same ques­tion: What do you think about com­puter sci­ence after tak­ing CSE 142/143?
I had to ask dur­ing or after they were tak­ing the CSE intro series since most of them had never heard of com­puter sci­ence and is usu­ally very con­fused about what it is (given that no one has been able to pro­vide a good enough definition/description about com­puter sci­ence, I did not want to answer that ques­tion either when they asked me).
Unsur­pris­ingly, most of them really really liked it, and for those that didn’t, they explained it was because they are unable to pro­gram well but they respect and under­stand the com­plex­i­ties of com­puter sci­ence and com­puter sci­ence majors. Then I asked those that really liked it: Would you con­sider becom­ing a CSE major?
They had all wanted to major in it.

As I asked more and more peo­ple about Com­puter Sci­ence, hardly any­one had told me that they thought it was a ‘bor­ing’ or ‘nerdy’ sub­ject. In fact, many of them had wanted to become CS majors but just couldn’t get into the pro­gram. I had no prob­lem find­ing peo­ple who were inter­ested in CS or thought CS was really applic­a­ble. The biggest prob­lem was that they just weren’t good enough at it.

The stu­dents who were inter­ested in CS had lit­tle to no pro­gram­ming expe­ri­ence prior to CSE 142 and they were expected to be able to imple­ment abstrac­tion through the use of  vari­ables, con­di­tion­als, and nested loops in about 10 weeks. For many of them, it was just not enough time. It had got­ten even more dif­fi­cult in CSE 143 where Big-Oh, linked lists, binary search tree, and recur­sion were intro­duced. They still really liked CSE, they just could not learn it well enough to get into the CS pro­gram given such a short amount of time.

So how do we change that? The prob­lem is not the way we are teach­ing stu­dents about CS. I entirely sup­port the idea of not giv­ing book­work to stu­dents about CS, oth­er­wise we turn it into another his­tory or math sub­ject where stu­dents only remem­ber reading/solving prob­lems in a book rather than it’s applic­a­bil­ity. I love the way UW teaches CS to its stu­dents, and any­one who has taken the CSE 14x series can tell you that it is not a bor­ing class. The home­work is chal­leng­ing to the point where it’s fun and the lec­tur­ers pro­vide enough exam­ples and enthu­si­asm to keep the class’ morale high. There is enough inter­est in the field of Com­puter Sci­ence to fill the demand; we are just lack­ing com­pe­tent Com­puter Sci­ence majors.

The prob­lem isn’t ‘How can we make learn­ing CS fun so that stu­dents want to major in it?’ but rather, ‘What is ‘good enough’ to be a CS major and how do we edu­cate stu­dents to be good enough?’

What is Computer Science?

My high school did lit­tle to give me a feel­ing of what com­puter sci­ence is like. The only com­puter class that was pro­vided cov­ered the top­ics of how to use Excel and how to write very basic HTML. It was only by luck, that my friend and I started pro­gram­ming in our spare time and stum­bled across the won­der­ful world of work­ing with com­put­ers. In the fol­low­ing para­graphs, I will try to tell you the things I would have liked to know when I was in high school.

What is com­puter sci­ence? Its a tough ques­tion, and inter­est­ingly, even peo­ple work­ing in the field will give you very dif­fer­ent answers. But there is a pretty clear dis­tinc­tion between work­ing on hard­ware (your actual com­puter), and work with soft­ware (the pro­grams run­ning on your com­puter). If you get a degree in com­puter sci­ence, you will gen­er­ally work on soft­ware. Peo­ple work­ing on hard­ware will gen­er­ally have some sort of Elec­tri­cal Engi­neer­ing Degree.

With a Bach­e­lor in CS (Com­puter Sci­ence), which you will nor­mally get after only 3 to 4 years, you are one of the most wanted peo­ple on this planet, in prac­ti­cally any field you may be inter­ested in.

You may go the route of actu­ally work­ing with com­put­ers, and join a com­pany such as Google or Microsoft that spe­cial­ized on mak­ing money directly with soft­ware. In such a sce­nario your title will be along the lines of Soft­ware Engi­neer, and you will be payed to develop soft­ware such as Gmail or Windows.

Another route is going into acad­e­mia (the one I am cur­rently on). You choose acad­e­mia by get­ting a PhD (you are nor­mally payed roughly $2000/month), and become a Pro­fes­sor later on. In acad­e­mia, the focus is on solv­ing the hard prob­lems of com­puter sci­ence, which often requires the­o­ret­i­cal work and does not always lead to the cre­ation of things that are actu­ally use­ful. You may for exam­ple develop a new Pro­gram­ming Lan­guage, or a Video Com­pres­sion Algo­rithm. In acad­e­mia, you are payed to pub­lish papers, which con­tain a writ­ten solu­tions to more or less inter­est­ing problems.

Yet another pos­si­bil­ity is to mix your com­puter skills with another field. NASA’s Mars Rover for exam­ple requires a large amount of soft­ware, so does the par­ti­cle accel­er­a­tor at CERN. If you are the cre­ative type, you may design the appear­ance of a web­site or other appli­ca­tions. If you want to help peo­ple directly, you can work in the Med­ical field and pro­vide doc­tors with infor­ma­tion on how to cure patients. Just a cou­ple of months ago, I worked with Marine Biol­o­gists, help­ing them analyse their data:

And, as expected (because I’m work­ing in acad­e­mia) here is the asso­ci­ated paper that I pub­lished: “Real-Time Col­lab­o­ra­tive Analy­sis with (Almost) Pure SQL: A Case Study in Bio­geo­chem­i­cal Oceanog­ra­phy”, Daniel Halperin, Kon­stan­tin Weitz, et al.

Or you may get to legally rob a bank, as you help the bank to solve their soft­ware prob­lems. These are just some exam­ple of things I am inter­ested in, but the pos­si­bil­i­ties are end­less. Nowa­days, try­ing to name a field that does not heav­ily rely on com­put­ers is a hard task.

Most of the routes above require that you are actu­ally work­ing with com­put­ers. But with a CS edu­ca­tion, you may as well become a Con­sul­tant or Man­ager, using a com­puter only to check your emails.

Because there are so many career pos­si­bil­i­ties, it does not really mat­ter what per­son­al­ity you have. There is some­thing for you, whether you are social or not, whether you like to travel or not, and whether you want to work hard or would pre­fer to have more time for your pri­vate life.

A com­mon mis­con­cep­tion, often spread by pro­fes­sors in acad­e­mia, is that you need to be good in math to do com­puter sci­ence. Many soft­ware engi­neers I have talked to told me that they require none of the math they learned in col­lege. What they really needed were good pro­gram­ming and soft­ware design skills. On the other hand, if you are very inter­ested in math (I cer­tainly am), there is a large num­ber of very inter­est­ing the­o­ret­i­cal prob­lems in com­puter sci­ence with prac­ti­cal applications.

While you do not need to be a math geek, it is prob­a­bly help­ful if you like to think deep and accu­rately about prob­lems, instead of only touch­ing them superficially.

While com­puter sci­ence enables you to have a very fun, broad, fast paste career, always at the fore­front of inno­va­tion — jobs in CS are also very well payed. The fol­low­ing table from Wall Street Jour­nal shows the Bach­e­lor Degrees with the high­est salaries. Com­puter Sci­ence and Com­puter Engi­neer­ing (don’t ask me what the dif­fer­ence is) are ranked very highly:

Rank Degree Start­ing Median Salary Mid-Career Median Salary
1 Chem­i­cal Engineering $63,200.00 $107,000.00
2 Com­puter Engineering $61,400.00 $105,000.00
3 Elec­tri­cal Engineering $60,900.00 $103,000.00
4 Aero­space Engineering $57,700.00 $101,000.00
5 Eco­nom­ics $50,100.00 $98,600.00
6 Physics $50,300.00 $97,300.00
7 Com­puter Science $55,900.00 $95,500.00

And the field is ever grow­ing, until we hit the Sin­gu­lar­ity, you pretty much have a job guar­an­tee, unless you start you own com­pany with the poten­tial to become as rich and famous as Bill Gates or Mark Zuckerberg.

Providing Volunteers Resources

I was for­tu­nate enough to grow up in an area where a local com­pany had taken great inter­est in pro­mot­ing STEM in K-12 edu­ca­tion. The vol­un­teers from this com­pany had a large influ­ence on my inter­est in STEM fields as I par­tic­i­pated in many of the after school pro­grams they had. While I never was intro­duced to com­puter sci­ence in these pro­grams, it made me much more will­ing to explore other sci­ences and I found com­puter sci­ence through my explo­rations. I feel that vol­un­teers lead­ing after school activ­i­ties or activ­i­ties dur­ing classes are impor­tant for increas­ing K-12 com­put­ing education.

I had the oppor­tu­nity later in my high school career to work with the com­pany to deter­mine what made employ­ees will­ing or hes­i­tant to vol­un­teer. One thing that stood out to me was the desire of poten­tial vol­un­teers to have guid­ance on appro­pri­ate vocab­u­lary. Unlike like teach­ers who are famil­iar with the lev­els of stu­dents they are work­ing with, many vol­un­teers do not inter­act with kids in K-12 on a daily basis. There­fore they are unsure of what level of vocab­u­lary and what types of expla­na­tions are appro­pri­ate for the age group. I think that it is impor­tant to have resources giv­ing vol­un­teers sug­ges­tions for poten­tial expla­na­tions of terms and con­cepts for dif­fer­ent age groups.

It is impor­tant to have these resources for two main rea­sons. First, these resources are impor­tant to give the vol­un­teers the con­fi­dence to vol­un­teer. Peo­ple who have com­put­ing expe­ri­ence are an excel­lent source of vol­un­teers to teach com­put­ing, but they will only vol­un­teer if they feel con­fi­dent in their abil­i­ties to teach the mate­r­ial. Sec­ond, they are help­ful to mak­ing the infor­ma­tion more under­stand­able for the stu­dents. If a vol­un­teer does not use the appro­pri­ate vocab­u­lary for the age group, then it could make the sub­ject mate­r­ial seem hard and unat­tain­able for the stu­dents. The poor expe­ri­ence may cause them not to con­tinue com­puter sci­ence later. So we want to make sure vol­un­teers are using the right vocab­u­lary and expla­na­tions in order to make com­puter sci­ence acces­si­ble to stu­dents and fos­ter their inter­est for the future.

In my expe­ri­ences with com­puter sci­ence, I have found a few expla­na­tions of con­cepts that are geared at younger age groups that I really liked:

In describ­ing the dif­fer­ence between a class and an object one of my favorite analo­gies was a cookie cut­ter vs. the dec­o­rated cookie. The cookie cut­ter is the item used to con­struct the cookie and then dif­fer­ent meth­ods (e.g. frost, add sprin­kles, etc.) can be used to cre­ate that spe­cific dec­o­rated cookie.

Another expla­na­tion that I really liked was for par­al­lel com­put­ing. Par­al­lel com­put­ing was equated with the NCAA March Mad­ness. Games are not played one after another at the same loca­tion. Instead, the games are bro­ken up into dif­fer­ent loca­tions and those loca­tions are play­ing at the same time. This is sim­i­lar to what the com­puter does when it dis­trib­utes tasks to dif­fer­ent CPUs so that mul­ti­ple tasks can be com­pleted at once.

What are some of the best exam­ples of com­puter sci­ence top­ics that were explained in a man­ner acces­si­ble to younger age groups that you are aware of? I’d love to hear about them in the comments.