-
Notifications
You must be signed in to change notification settings - Fork 5
/
index-1.atom
138 lines (138 loc) · 38.7 KB
/
index-1.atom
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="http://cestlaz.github.io/assets/xml/atom.xsl" type="text/xsl media="all"?>
<feed xmlns:fh="http://purl.org/syndication/history/1.0" xml:lang="en" xmlns="http://www.w3.org/2005/Atom">
<title>C'est la Z (old posts, page 1)</title>
<id>http://cestlaz.github.io/index-1.atom</id>
<updated>2017-12-22T12:59:44Z</updated>
<author>
<name>Mike Zamansky</name>
</author>
<link rel="self" type="application/atom+xml" href="http://cestlaz.github.io/index-1.atom"/>
<link rel="previous" type="application/atom+xml" href="http://cestlaz.github.io/index-2.atom"/>
<link rel="current" type="application/atom+xml" href="http://cestlaz.github.io/index.atom"/>
<link rel="next-archive" type="application/atom+xml" href="http://cestlaz.github.io/index-2.atom"/>
<fh:archive/>
<link rel="alternate" type="text/html" href="http://cestlaz.github.io/index-1.html"/>
<generator uri="https://getnikola.com/">Nikola</generator>
<entry>
<title>They teach programming, don't they?</title>
<id>http://cestlaz.github.io/posts/2010-02-15-they-teach-programming-dont-they.html/</id>
<updated>2010-02-15T00:00:00-05:00</updated>
<published>2010-02-15T00:00:00-05:00</published>
<author>
<name>Mike Zamansky</name>
</author>
<link rel="alternate" type="text/html" href="http://cestlaz.github.io/posts/2010-02-15-they-teach-programming-dont-they.html/"/>
<summary type="html">One evening, many years ago, when I was in college, I had an epiphany. Maybe not as enlightening as the epiphany I had while watching "The Mummy Returns" many years later, but that's a story for another day.<br><br>While working on some class project, I realized that soon, within a couple of years, I'd be working for a real company and I'd actually have to write code that <b>REALLY</b> works. Not just something that gets past the grader, or answers all the test cases. Something well designed, well written, maintainable, and reliable. Scary thought.<br><br>I've thought about this a lot since I started teaching computer science. We teach programming languages, algorithms, and assign projects. Maybe the students hear something like "comment your code," or "use good variable names," but we never really give them the tools to take a project from description to completion.<br><br>Too often young programmers rush to the keyboards and write copious amounts of code without any plan and with little discipline. In short they do everything they can to set themselves up for a difficult road ahead.<br><div style="text-align: left;"><br></div>There are probably a number of reasons for this. When we teach introductory programming, assignments are so short and simple that we can't easily model good programming techniques, and if we do, it's difficult to get students to "buy in" since it's hard for them to see the value. As complexity increases, we're faced with limited time to actually cover the prescribed course content, leaving little room for a protracted unit on "program development."<br><br>I'm certainly not going to be so bold as to say that I have the answer to the problem, but I've tried some things to help address it.<br><br>We'll take a few class days to take a project from beginning to end. Something that can be done incrementally but isn't particularly difficult. <br><br>This semester, I attempted this with my AP students. We wrote a series of text filters in Java. I lifted the topic from Kernighan and Plauger's "Software Tools." We wrote versions of character count, word count, detabbing a file, run length encoding and a simple version of tr. Nothing too heavy, but it allowed us to focus on the development piece rather than coming up with clever algorithms and data structures (which is what the rest of the class is for). The problem may be a little contrived, but I hope the benefits outweighed any issues with the choice of problem.<br><br>We start by talking about the importance of understanding the problem, which includes finding out what "the client" wants and not making our own assumptions. Some times, I try to leave a little ambiguity to give us a platform to discuss the "what the client wants" issue.<br><br>From there comes design, which might be mixed with writing some code to make sure we understand certain aspects of the problem and the environment we'll be working in.<br><br>Once we have a design and a plan we can start incremental development. This is what I think is most important for the youngsters. I try to model and emphasize the idea of coding one "concept" at a time. Frequently testing that concept and only moving on once it's completed. <br><br>I'll also talk about things that have worked for me along the way. I always like to put consistent comment blocks at the top of my functions, trying to keep functions a "screen length" or shorter, my preferences for naming, indentation, etc. Of course, I'm careful to emphasize that my way works for me, but it's just one approach. I try to present alternatives when possible.<br><br>Other ideas I try to emphasize is actually reading ones code and having others read it. Last semester I experimented with "pair programming" and while I have no idea how good it is as a professional development technique, I like it from a pedagogical point of view.<br><br>I think presenting these ideas while actually developing the project helps to drive in the concepts.<br><br>I'd like to think adding units like this helps to develop stronger programmers. Any teachers out there -- your thoughts?<br><br><br><center><br><br><br><table style="width: auto;"><tbody><tr><td><a href="http://picasaweb.google.com/lh/photo/ljE9q55t6ltZzZVKwTzA9g?authkey=Gv1sRgCOSJ5YGwwb7e_AE&amp;feat=embedwebsite"><img src="http://lh3.ggpht.com/_7YN3bkG0cSc/S3m2eJx5aiI/AAAAAAAAFj4/I57gKwaFxzQ/s144/2010-02-15%2008.49.59.jpg"></a></td></tr></tbody></table></center><br><br>In an unrelated note, yesterday was valentines day. We don't really do anything to celebrate it, but in anticipation of her new loom, Devorah had to clear off some room in the apartment. She stumbled upon love letters sent between my parents back in the fifties. If you'd like a small taste of the past, you can see here post on squidknits <a href="http://squid-knits.blogspot.com/2010/02/love-letters.html">here</a>.<br><br>Although we have gained all this immediacy with the electronics age, it sometimes feels that somethings been lost.<div class="blogger-post-footer"><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/468689896075458340-3365288827630860097?l=cestlaz.blogspot.com" alt=""></div></summary>
<category term="csed" label="csed"/>
</entry>
<entry>
<title>Subversion for Homework part II and the start of the new term</title>
<id>http://cestlaz.github.io/posts/2010-02-01-subversion-for-homework-part-ii-and.html/</id>
<updated>2010-02-01T00:00:00-05:00</updated>
<published>2010-02-01T00:00:00-05:00</published>
<author>
<name>Mike Zamansky</name>
</author>
<link rel="alternate" type="text/html" href="http://cestlaz.github.io/posts/2010-02-01-subversion-for-homework-part-ii-and.html/"/>
<summary type="html">Starting the new semester tomorrow and I've got a whole bunch of interesting topics to blog about. Some about pedagogy, some technical, and some that I can't really catagorize.<br><br>For now, though, just a brief follow up on using Subversion for homework collection.<br><br>The basic model used in New York City for teacher improvement and evaluation is the official "observation." Either your supervisor or the principal sits in on one of your classes. Afterwards you meet and discuss the lesson and a report is written up. Basically, there are two possible outcomes: satisfactory or unsatisfactory.<br><br>Untenured teachers are generally observed three times a semester. Tenured teachers, once a year.<br><br>In all cases, this system is severely flawed. The supervisor sees a 40 minute snapshot out of context and is supposed to evaluate the teacher and make recommendations for teacher improvement. It's generally of limited value at best.<br><br>Because of this, years ago, I started to ask my students to evaluate me. For quite some time now, I've used a custom written web app that allows students to complete long questionnaires over a period of weeks. The system allows me to know who submitted an evaluation while maintaining anonymity. <br><br>I've found these evaluations to be incredibly valuable and I've used them to try to improve my classes and my teaching over the years.<br><br>Having just wrapped the semester, I've gone through my students responses and the vast majority liked using subversion for homework. As I figured, some felt that it was a little confusing at first and there was a learning curve but most felt it was either as good as any other method and many said it was superior.<br> <br>This combined with the fact that it makes me more efficient confirms that it's a win.<br><br>It was also interesting that I had hardly any suggestions for alternative ways of collecting homework.<br><br>Recently, I've been using Git for my personal development work and I'm planning on experimenting with it in one of my classes, so we'll see how that goes.<br><br>Now, on to the new semester!!!!!<br><br><br><br><br><div class="blogger-post-footer"><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/468689896075458340-3477377644002525047?l=cestlaz.blogspot.com" alt=""></div></summary>
<category term="softeng" label="softeng"/>
<category term="tools" label="tools"/>
</entry>
<entry>
<title>Subversion in the classroom</title>
<id>http://cestlaz.github.io/posts/2010-01-19-subversion-in-classroom.html/</id>
<updated>2010-01-19T00:00:00-05:00</updated>
<published>2010-01-19T00:00:00-05:00</published>
<author>
<name>Mike Zamansky</name>
</author>
<link rel="alternate" type="text/html" href="http://cestlaz.github.io/posts/2010-01-19-subversion-in-classroom.html/"/>
<summary type="html">Ok, not <a href="http://www.merriam-webster.com/dictionary/subversion">subversion</a>, rather <a href="http://subversion.tigris.org/">subversion</a>, the version control system.<br><br>I've used subversion as a way for students to hand in their projects for years. I haven't used it with my intro classes as I think the learning curve is a little steep and the benefits few, but for A.P. and beyond (juniors and seniors) it's worked very well as a method of collection and I think it's good to get the kids in the habit of using versioning systems.<br><br>A versioning, or revision control system let's an individual frequently save versions of their files, in our case, on a central server. One can easily go back to earlier versions as well as manage changes made by multiple developers. Once one's in the habit of using a revision control system, it can greatly improve productivity.<br><br>For my classes, I would create a repository for a project, give the kids a little version control primer, and they would create projects in the repository.<br><br>There are usually a few bumps in the road.<br><br>At first the kids go kicking and screaming. They create the repository, and neglect it until the last minutes. I'd wake up on a project due date, check out the repository and seem maybe 4 out of 60 projects only to see them mystically appear as the closing time approached.<br><br>As we move through the year and work on more projects, things get better.<br><br>Students start to update their projects more frequently. Not as frequently as I like, partly because SVN gets really slow on our system, but it's still an improvement. Invariably, it saves a student or two when they accidentally delete all their files. Also, when things become a real mess, being able to go back a few versions is a godsend. A much better alternative than what they had to do in the past, which was restarting the entire project.<br><br><br><br>What I find really interesting is how wonderful a tool svn is from my point of view as an educator.<br><br>By looking at the log files, I can see who made changes and when. By looking at the diffs, I can look at the projects progress much as an english teacher might look at drafts. <br><br> Version control for projects turns out to be a win across the board.<br> <br>Recently, I've been using SVN for homeworks as well. Homework collection has always been difficult for me as I'm disorganized and forgetful. SVN has made things much easier. At the start of the semester, I made a homework repository for each student. They then check it out at home.<br><br>Whenever a student does a homework, he or she just names it according to our conventions (HW1-name, HW2-name, etc.), put it in their checked out repository, add the file(s) and commits. With tortoiseSVN under windows it's trivial.<br><br>This lets me easily see all of the homeworks for a student as well as all submissions for a specific assignment. Again it's an overall win.<br><br>Next semester I'm going to be experimenting with GIT as a replacement for SVN.<br><br>If you're looking for a way to collect and track assignments, I'd highly recommend using a revision control system.<br><br><br><br><div class="blogger-post-footer"><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/468689896075458340-8125210248407710385?l=cestlaz.blogspot.com" alt=""></div></summary>
<category term="softeng" label="softeng"/>
<category term="tools" label="tools"/>
</entry>
<entry>
<title>Cold Weather Commuting</title>
<id>http://cestlaz.github.io/posts/2010-01-15-cold-weather-commuting.html/</id>
<updated>2010-01-15T00:00:00-05:00</updated>
<published>2010-01-15T00:00:00-05:00</published>
<author>
<name>Mike Zamansky</name>
</author>
<link rel="alternate" type="text/html" href="http://cestlaz.github.io/posts/2010-01-15-cold-weather-commuting.html/"/>
<summary type="html"><div class="separator" style="clear: both; text-align: center;"><br></div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_7YN3bkG0cSc/S1BadY4-CkI/AAAAAAAAFig/0if7XeTQmBk/s1600-h/IMG_1575.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/_7YN3bkG0cSc/S1BadY4-CkI/AAAAAAAAFig/0if7XeTQmBk/s200/IMG_1575.JPG"></a><br></div>That's me with my trusty Bike Friday New World Tourist. Love the bike. Love riding. It's the fastest, most pleasant way to get around the city. My commute by bike, door to door is 12 minutes. Subway is 20 - 25. Walking about 45. <br><br>One certainly can't let winter weather get in the way. <br><br><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_7YN3bkG0cSc/S1BdvWzkMpI/AAAAAAAAFio/hk5KchXYRaI/s1600-h/fugu.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/_7YN3bkG0cSc/S1BdvWzkMpI/AAAAAAAAFio/hk5KchXYRaI/s320/fugu.jpg"></a><br></div>I've got the body covered with my Assos Fugu jacket. With just a cheap long sleeve duofold shirt it's great to about 16 degrees. It feels a little boxy off the bike, but as soon as you're riding, it fits like a glove. Expensive, but well worth it.<br><br><br>My real problem has always been my hands. Especially on a short commute when I don't have time to generate body heat.<br><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_7YN3bkG0cSc/S1BaYW72AlI/AAAAAAAAFiQ/-IKb6X9aZ1M/s1600-h/P1010711.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://2.bp.blogspot.com/_7YN3bkG0cSc/S1BaYW72AlI/AAAAAAAAFiQ/-IKb6X9aZ1M/s200/P1010711.JPG"></a><br></div><br>Most recently, I've been using Pearl Izumi Inferno Gloves. They're ok, but sub 20 degress, they don't do it, particularly since I like riding the hoods where I'm right up against cold metal.<br><br>Last year, my wife made a wonderful discovery....<br><br><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_7YN3bkG0cSc/S1BaDtFi4yI/AAAAAAAAFh4/kwmiZhDcUiw/s1600-h/P1010708.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://3.bp.blogspot.com/_7YN3bkG0cSc/S1BaDtFi4yI/AAAAAAAAFh4/kwmiZhDcUiw/s200/P1010708.JPG"></a><br></div><br><br><a href="http://www.trails-edge.com/retail/te_shirts/amfbikemits.htm">Moose Mitts</a>!!!! They velcro on over the handlebards. You stick your hands in when you ride.<br><br>This year, AMF Threadworks designed a set that fit on drop bars. Two weeks ago my set arrived!!!<br><br>Last week we were consistantly 20 degress or below in the mornings, I used these $10 hytrel gloves from campmor:<br><br><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_7YN3bkG0cSc/S1BaSPQff-I/AAAAAAAAFiI/1HFgpEzZlb0/s1600-h/P1010710.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/_7YN3bkG0cSc/S1BaSPQff-I/AAAAAAAAFiI/1HFgpEzZlb0/s200/P1010710.JPG"></a><br></div>Along with my new moose mitts:<br><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_7YN3bkG0cSc/S1BZ4xCmd8I/AAAAAAAAFho/RnCtiJaQ84I/s1600-h/P1010706.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/_7YN3bkG0cSc/S1BZ4xCmd8I/AAAAAAAAFho/RnCtiJaQ84I/s200/P1010706.JPG"></a><br></div>They were terrifice. My hands stayed wram and I have the benefit of being able to regulate temperature by pulling my hands up to the cross bar or out entirely.<br><br>If you ride in the cold, check out Moose Mitts!!!!<br><span id="goog_1263433400704"></span><span id="goog_1263433400705"></span><br><div class="blogger-post-footer"><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/468689896075458340-272083960586840973?l=cestlaz.blogspot.com" alt=""></div></summary>
<category term="bike" label="bike"/>
</entry>
<entry>
<title>Towers of Hanoi</title>
<id>http://cestlaz.github.io/posts/2010-01-10-towers-of-hanoi.html/</id>
<updated>2010-01-10T00:00:00-05:00</updated>
<published>2010-01-10T00:00:00-05:00</published>
<author>
<name>Mike Zamansky</name>
</author>
<link rel="alternate" type="text/html" href="http://cestlaz.github.io/posts/2010-01-10-towers-of-hanoi.html/"/>
<summary type="html"><div class="figure"><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_7YN3bkG0cSc/S0pFwojEDmI/AAAAAAAAFa8/WMWXtwK6nxo/s1600-h/Hanoi.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/_7YN3bkG0cSc/S0pFwojEDmI/AAAAAAAAFa8/WMWXtwK6nxo/s320/Hanoi.jpg"></a><br></div><br></div>Closed out last week teaching the <a href="http://www.cut-the-knot.org/recurrence/hanoi.shtml">Towers of Hanoi</a>. It's a wonderful topic. Not because it's so interesting in and of itself, but as a platform from which you can explore any number of interesting topics.<br><br>Many books appropriate for the AP (AB) curriculum mention the towers, but to my knowledge most only scratch the surface. I randomly grabbed two books that I consider good from the shelf before writing this. One that I actually use when I teach AP comp sci and another more appropriate for a follow up course. Both discuss the towers, but merely show a solution and talk about the run time a little.<br><br>So many possibilities left out. <br><br>I usually do these lessons with my sophomores but since many of my AP students (juniors) hadn't ever seened the problem, I felt it was worth covering. <br><br>By looking at a few small examples, 1 disk, two disks, three disks, four disks, it's easy to notice the symetry in the solutions ultimately leading the this short routine: <br><pre class="src src-java"> </pre><pre class="src src-java"> 1: hanoi(n,src,dst,tmp) {<br> 2: <span style="color: #a020f0;">if</span> (n==1)<br> 3: System.out.println(<span style="color: #8b2252;">"Move from "</span>+src+<span style="color: #8b2252;">" to "</span>+dst);<br> 4: <span style="color: #a020f0;">else</span><br> 5: {<br> 6: hanoi(n-1,src,tmp.dst);<br> 7: hanoi(1,src,dst,tmp);<br> 8: hanoi(n-1,tmp,dst,src);<br> 9: }<br>10: } <br></pre><br>Now, the fun can really start: <br><br>We want to talk about the correctness of our algorithm and also how many moves it will take, that is, the run time. First, we'll use inductive ideas to show our algorithm is correct. This "proof" (we do it somewhat informally) can be enlightening. As sophomores, the only proofs students have seen are those statement/reason things they do in math class. Here we can introduce them to the idea that proof is just an "irrefutable argument" and apply it in a more practical setting. <br><br>From there we look at run time, that is, how many moves will it take to solve the n disk problem. It's easy to see the pattern of T(N) = 2T(n-1)+1 . Students will usually see that we can rewrite this as T(N)=2<sup>N</sup>-1 which we can also prove by induction.<br><br>Now we can see the ramifications of the run time. At 1 million moves per second, it works out to close to 600,000 years. This in and of itself is revealing, we can't just "get a faster computer." Here we can discuss <a href="http://en.wikipedia.org/wiki/Moore%27s_law">Moore's Law</a> and the physical limits on our computers, making sure to make appropriate reference to <a href="http://en.wikipedia.org/wiki/Grace_Hopper">Grace Hopper</a> and her <a href="http://www.flickr.com/photos/shinythings/154816771/">nanosecond</a>. <br><br>This leads to a discussion alternate approaches such as parallel processing, but that doesn't work if our problem can only be solved sequentially.<br><br>The rest of the class is used discussing other hard problems and other approaches including heuristics, probabalistic, randomized, and anything else that comes up. <br><br>So, there you have it. From this one simple problem we get to introduce students to: <br><br><ul><li id="sec-1">Alternate forms of proof (specificall induction) <br></li><li id="sec-2">Intractable problems <br></li><li id="sec-3">Unsolvable problem <br></li><li id="sec-4">Moores law and the limits of our computing power <br></li><li id="sec-5">Alternate approaches to computing <br><br><br><ul><li id="sec-5">Parallel programming <br></li><li id="sec-5.2">Protein based computers <br></li><li id="sec-5.3">Randomized algorithms <br></li><li id="sec-5.4">Probabalistic algorithms <br></li><li id="sec-5.5">Heuristics</li></ul><br></li></ul><div class="blogger-post-footer"><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/468689896075458340-6512019415176840666?l=cestlaz.blogspot.com" alt=""></div></summary>
<category term="pedagogy" label="pedagogy"/>
</entry>
<entry>
<title>Who is this man?</title>
<id>http://cestlaz.github.io/posts/2010-01-07-who-is-this-man.html/</id>
<updated>2010-01-07T00:00:00-05:00</updated>
<published>2010-01-07T00:00:00-05:00</published>
<author>
<name>Mike Zamansky</name>
</author>
<link rel="alternate" type="text/html" href="http://cestlaz.github.io/posts/2010-01-07-who-is-this-man.html/"/>
<summary type="html"><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_7YN3bkG0cSc/S0aNLCe-BoI/AAAAAAAAFaY/R4VEOV6kCeE/s1600-h/frontwolly.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/_7YN3bkG0cSc/S0aNLCe-BoI/AAAAAAAAFaY/R4VEOV6kCeE/s320/frontwolly.jpg"></a><br></div><br>Who is this man?<br><br>I showed this to Devorah last night and she immediately said "Hey, that's the metal filing guy!!!" Yes, you got it -- <a href="http://www.smethporthistory.org/smethportspeciality/wollypage.htm">Wooly Willy</a>!!! Everybody's favorite party toy.<br><br>Why did this come up? Well, yesterday, Rick put <a href="http://www.zamansky.net/wooly.html">this</a> together at work. So much for any productivity after that.<br><br>It's amazing all the time sinks you can throw together with just a few lines of code and NetLogo.<br><br><br><div class="blogger-post-footer"><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/468689896075458340-5205617721773351791?l=cestlaz.blogspot.com" alt=""></div></summary>
<category term="netlogo" label="netlogo"/>
</entry>
<entry>
<title>Talking Shop</title>
<id>http://cestlaz.github.io/posts/2010-01-06-talking-shop.html/</id>
<updated>2010-01-06T00:00:00-05:00</updated>
<published>2010-01-06T00:00:00-05:00</published>
<author>
<name>Mike Zamansky</name>
</author>
<link rel="alternate" type="text/html" href="http://cestlaz.github.io/posts/2010-01-06-talking-shop.html/"/>
<summary type="html"><p>During my first few years teaching computer science, I frequently felt isolated. As pretty much the only CS guy I really didn't have any one to "talk shop" with. It's hard to bounce pedagogical ideas off of your colleagues when they teach subjects that are tangentially related, at best. </p><p>I now consider myself extremely fortunate that I have four terrific friends and colleagues teaching CS with me. Now we have the same advantage that other teachers have enjoyed for years. </p><p>Today I started one of my favorite topics in my AP classes, recursion. Our students have already done recursion during the scheme unit of our intro class so today was at some levels, a review. Most of the students were fine with the basic concepts, but I wanted to make sure they had a solid foundation before we moved to more advanced problems. </p><p>I realized even though I "got" recursion back when I was starting out as a CS student those many years ago, no one ever really explained how the call stack worked. When you're calling functions and methods all over the place, how does the system know to return to the right place at the right time. It was alluded to when we expanded a recursion: </p><p>fact(4) –&gt; 4*fact(3) –&gt; 3*fact(2) –&gt; 2*fact(1) –&gt; 1*fact(0) –&gt; 1 </p><p>but never in the general sense of function calls. I thought it might make sense to try to "demystify" the computer and explain how things really worked. </p><p>I outlined a basic memory layout, stack, heap, data segment and roughly defined a stack frame (storing parameters, local variables, and a return address). We then looked at a code snippet such as: </p> <pre class="src src-Java"><br>a()<br>{<br> b();<br> c();<br>}<br><br>b()<br>{<br> c();<br>}<br><br>c()<br>{<br>}<br><br>main()<br>{<br> a();<br> b();<br>}<br></pre> <p>and traced through the stack. We then did this with a couple of simple recursive examples. Only time will tell if this was helpful, but I think it was worth the time. </p><p>What I particularly enjoyed was later that day when I was talking shop with my fellow AP teacher. He wasn't planning on explaining the stack in this kind of detail but he liked the idea and planned to use that part of my lesson. I look forward to hearing how it went. </p><p>I have likewise borrowed ideas from his and our other colleagues classes. </p><p>Any CS teachers out there, I'm sure we'd all love to hear classroom techniques that have and haven't worked. </p><div class="blogger-post-footer"><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/468689896075458340-4999548631085910659?l=cestlaz.blogspot.com" alt=""></div></summary>
<category term="community" label="community"/>
</entry>
<entry>
<title>First Day Back</title>
<id>http://cestlaz.github.io/posts/2010-01-04-first-day-back.html/</id>
<updated>2010-01-04T00:00:00-05:00</updated>
<published>2010-01-04T00:00:00-05:00</published>
<author>
<name>Mike Zamansky</name>
</author>
<link rel="alternate" type="text/html" href="http://cestlaz.github.io/posts/2010-01-04-first-day-back.html/"/>
<summary type="html"><p>First day back after a break is always hard. By the last day of vacation, I'm actually sleeping a little later and shifting the body clock back is rather harsh. </p><p>It's tough enough getting started again, but it's even worse when you're thrown a curve ball. </p><p>I got in at my usual 7:00, made my coffee, and started getting my lessons ready for the day. At about 7:30 we lost power in half of the room. Unfortunately, it was the half with the CS servers. The machines that provide log in and file services as well as svn, our web server, mail server, wiki and other services. </p><p>Now, on top of my teaching duties (four classes of 32 students and another of about 20), I basically run the computer services for our CS program. I used to do the whole network, but I stopped that a few years ago. I receive some help from colleagues, but it's still mostly me. </p><p>For our CS program we have two Linux labs of about 31 computers each (all running Linux) and a bunch of servers running the same. </p><p>After spending about 20 minutes to find the circuit breaker, most services came back up. Terror struck 10 minutes later when we saw that all of the students home directories had disappeared!!!!! </p><p>After a brief period of panic and a few stressful minutes of scouring file systems for evidence of the missing directories I found the problem. The answer, as with so many other problems, is that I was being an idiot. About a month earlier, I had installed a new drive for the student directories. I had mounted it, but neglected to change the fstab file. This is what happens when you have to do all your sysadmin work on live systems in brief periods of time between classes. When we lost power today, the old drive was mounted, not the new one. It's fixed now. </p><p>It would be nice if there we actually had people to run our systems, but since that's not going to happen, I've spend time over the years to try to make the whole thing somewhat do able. Using common tools such as NFS, NIS, Apache and the like help, and we've currently moved to using kvm for virtual machines so we can easily experiment with new systems and cleanly and have a one "machine" per service mentality, but system administration still can't really be done as a part time job. </p><p>Any one out there have any war stories or suggestions as part time sysadmins? </p><div class="blogger-post-footer"><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/468689896075458340-4782617949077508854?l=cestlaz.blogspot.com" alt=""></div></summary>
<category term="it" label="IT"/>
</entry>
<entry>
<title>Looking for interesting questions</title>
<id>http://cestlaz.github.io/posts/2010-01-03-looking-for-interesting-questions.html/</id>
<updated>2010-01-03T00:00:00-05:00</updated>
<published>2010-01-03T00:00:00-05:00</published>
<author>
<name>Mike Zamansky</name>
</author>
<link rel="alternate" type="text/html" href="http://cestlaz.github.io/posts/2010-01-03-looking-for-interesting-questions.html/"/>
<summary type="html">For the winter break, I assigned <a href="http://apcentral.collegeboard.com/apc/public/repository/ap08_comp_sci_a_frq.pdf">this</a> set of A exam questions (actually, just the three that don't deal with the case study) to my AP classes. I wanted to assign something that wasn't particularly heavy but I didn't want my students to forget everything over break. <br><br>As with most AP exam questions, they're long, wordy, and somewhat brain dead. They take a long time to read, but they frequently take you step by step through what they want you to do. <br><br>I remember the first time I really thought about this. It was back when the exam was given in Pascal. The curriculum required that classes cover one of the nlogn sorts but didn't specify which one. One of the free response questions literally walked the students, step by step, through the merge sort. Part one had them split an array in to two parts, part two had them write a routine that merged two sorted arrays (and explained step by step how to do it). You could get a perfect score and still know nothing about the algorithm, or even about writing a recursive routine (since the question told you exactly what to do). <br><br>I hate these types of questions. The exam tests coders, not computer scientists. Programming competition problems (such as from the <a href="http://www.uwp.edu/sws/usaco/">USACO</a>) are much more interesting, but from a beginners point of view they have their own problems. Beginners might not have enough tools to attack them, and at times they're all or nothing – they're not set up to develop a simple, working solution that you can then improve on. <br><br>So, I'm always looking for interesting questions for my students. Problems that a student can attack with a minimal skill set, but can be refined through analysis or upon studying more advanced techniques. <br><br>I guess the first problem of this nature that I usually do with my AP students, usually deals with counting frequencies of test student test scores, identifying students by their four digit ID number. Most students start by creating a huge list all the tests for all the students, but some, and soon all, realize that by using the ID number as an index into an array, they can solve this type of problem much more efficiently. Looking at this technique early also sets the stage for looking at topics such as radix sorting and hashing later on. <br><br>This weekend I stumbled upon <a href="http://20bits.com/articles/interview-questions-two-bowling-balls/">this</a> problem and we'll probably look at in in class some time this week. I like it because you can easily get a naive solution, but it lends it self to a step wise refinement that works well in the classroom. <br><br>A few years ago, I also discovered a wonderful article by David Ginat, titled "Effective binary perspectives in algorithmic problem solving" which you can get if you are an ACM member <a href="http://portal.acm.org/citation.cfm?id=772942&amp;dl=">here</a>. <br><br>Both the stuff in Ginat's piece and the bowling ball article are nice because they can be handled naively with brute force approaches using arrays, but with a little cleverness you can do much better. <br><br>Of course, as students progress through our classes, we have more flexibility as to types of questions. For example, once we do search and other recursive algorithms a few weeks from now, I can present problems that lead to dynamic programming solutions. <br><br>I'd love to hear any interesting accessible problems you've come across in your computing careers.<div class="blogger-post-footer"><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/468689896075458340-7947206663945758208?l=cestlaz.blogspot.com" alt=""></div></summary>
<category term="pedagogy" label="pedagogy"/>
</entry>
<entry>
<title>Welcome</title>
<id>http://cestlaz.github.io/posts/2010-01-02-welcome.html/</id>
<updated>2010-01-02T00:00:00-05:00</updated>
<published>2010-01-02T00:00:00-05:00</published>
<author>
<name>Mike Zamansky</name>
</author>
<link rel="alternate" type="text/html" href="http://cestlaz.github.io/posts/2010-01-02-welcome.html/"/>
<summary type="html">Over the past twenty years or so, I've mulled, discussed, and argued various aspects of education, computer science, and of course computer science education with friends, students, and colleagues.<br><br>This past summer, I had the privilege to get to meet and briefly work with comp sci educators from around the country and started to thing that there were other like minded people, but we didn't have a forum with which to communicate.<br><br>I also started to think that maybe some of the things I've discovered over the past twenty years might be useful to some one if only it were available.<br><br>So, there you go. The plan is to regularly post about items of interest that I've come up with ranging from pedagogical techniques, to facilities management, to interesting class topics, to anything else that seems relevant. I'd imagine that some of my other interests, notably food, biking, and family will also creep in.<br><br>Hope others find this interesting and relevant.<div class="blogger-post-footer"><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/468689896075458340-2438686823306490556?l=cestlaz.blogspot.com" alt=""></div></summary>
</entry>
</feed>