CS Ed Predictions 2015

I just read Alfred Thompson's predictions for next year. I was going to leave a comment but since it would have gotten somewhat long winded, I thought I'd comment in a post of my own.

If you haven't read Alfred's post yet, check it out: http://blog.acthompson.net/2015/01/computer-science-education-predictions.html

On more states allowing CS to count for a graduation requirement:

Alfred's probably right but I'm leery. Sure, it could end up terrific but I could see a number of ways this could play out badly.

We could end up with non-cs classes to count as CS or we could see schools allowing real CS to count but there would be no incentive for a school to actually create any meaningful CS classes much less for kids to take them.

I guess the root of my concern probably relates two of my concerns about education in general:

  • Real, experienced teachers aren't driving policy in education in general and CS is and will be no different. We're going to be left with something forced down from above and I fear it will be bad.

and

  • I'm not a big fan of education education. As schools of education get involved they will have more of a voice. I think one of the worst things to happen to math education over the course of my career has been "Math Ed." I fear CS Ed will have the same effect on K12 CS education.

Maybe I'm a pessimist or maybe I've just been burned one to many times or maybe it's that as a public school teacher I see the negative effect of politics and money on public education but at least in NYC I see where the decision making is coming from and I'm not encouraged.

On the other hand, even if I'm right and the powers that be really screw things up,there should always be at least a few people who see through they hype and that's where I can continue to do positive work.

On Python continuing to grow

It's been one of my go to languages for a while now. I've been using it in and out of classes since some time in the mid 90s.

I don't see it replacing Java in AP CS and it looks like Scratch has the inside track CS Principles but it's good for so many things and has such a low cost of entry, I again feel that Alfred's right.

The fact that it's easy for a non-cs teacher to pick up, at least to a limited degree, will certainly help the charge. I'm not sure if long term, this is a good thing, but it will help to push python's growth in education.

As a side note on Java – I'm not personally a fan, but there good things in there that would be lost with a total shift to languages like Python.

On CS Principles

I do see a time where the course is forced on Stuy but I'm not worrying about it for the moment. I think we already teach a stronger course and by the time CS Principles becomes an issue at Stuy, I'll probably be gone.

Chromebooks

I could see chromebooks working out for CS but only if schools don't lock them down. Out of the box, you can only use cloud based development environments. This is surely limiting but if you have the bandwidth, between codesters.com, koding.com, cloud9, Dr.Racket and assorted other tools you can certainly do some good CS.

The upside comes when you can drop into the Linux shell. I've been playing with a C720 Intel chromebook recently. It's small and lightweight and once I set it up, it was running Dr. Racket, NetLogo, Python, Java, Processing (all with a fairly hefty Emacs install).

Will it run everything? I don't know, but if I can get a new lab of computers and have the freedom to custom install the machines, I'm seriously considering chromebooks.

I'm also recommending them to my kids looking for a cheap portable development environment.

Closing thoughts

I've never been one for my own predictions - maybe because I'm more of a continuous journey rather than destination type of guy so I'll hold off on my own predictions for now, but I'll close with a direct shoutout – Hey Alfred - thanks for posting your predictions - good food for thought as is your blog in general.

Boys, Girls, Arts, Tech, and Vacation

Spent most of vacation relaxing. Finished off the remaining college recs, tried to catch up on sleep, and worked on a few project.

We've had an interesting December break dynamic in our household for the past few years. My son, Natan is very much into his music, both as a performer and a composer. A few years ago we discovered KlezKamp. It spoke to both Natan and Devorah. Batya, coming back from college wasn't so into it and I was somewhat indifferent.

The end result is that for most of the first half of the break, Batya and I were left on our own in the city while Natan and Devorah were up in the Catskills.

So, what did we do? In addition to playing tourist, we rebuilt the CSTUY web site (with a little help from her boyfriend Zach) - check it out: cstuy.org. I'm really happy with the result and now have a code base that I'm happy with and can maintain.

I can't describe how awesome it is to be able to collaborate on something real with ones daughter and I hope we can work on more projects in the future.

Of course, I had my Natan time when he and Devorah got home. We spent new years eve at the NYGASP production of HMS Pinafore. Natan loves opera and is something of a Savoyard and he's also a terrific singer. Something he must have inherited from my father, although he never met him.

So, we had our own project:

His is the good voice singing Dick Deadeye and I'm the not so good one doing Captain Corcoran. We recorded it A Capella and he added the midi after the fact. I think he had to change the key and I'm sure he had to mess with the tempo.

Some of you might have noticed that I worked on the tech project with Batya and the artsy one with Natan but don't worry - Natan's planning on majoring in Computer Science and Batya's the musical director and an alto in The Chai Notes up at Cornell.

So that was my break. Back to work in a couple of days.

Teachers, Rockstars, and the Godfather

In a recent post, Alfred Thompson referred to an earlier post where he mentioned rock star CS teachers. That's a term I've heard thrown around a lot in the past few years. I've heard some of my graduates referred to as rock stars - top tech people, and in fact I've seen some of them courted for positions in a manner that a rock star might be accustomed to. I've periodically referred to some of my colleagues as rock stars, but I don't know if the term really fits.

So, how else are us teacher folk referred to? More than once I've been called the godfather of K-12 CS education in NYC. Maybe because I've been in the game so long or maybe because a friend once coined the phrase "StuyCS Mafia" to refer to my graduates. It's flattering, but like rock star, it doesn't quite fit the bill. Don Corleone rose to power through both fear and respect. I certainly hope I'm not feared and while I do believe that the people whose opinion I care about respect me, it's far from universal.

So, where does that leave teachers like me, or more so, teachers I aspire to be like?

Not the godfather and not rockstars.

We're bluesmen.

Huh?

Well, the bluesman's got the chops that the rock star may or may not have. In fact, the rock star always talks about how the bluesman was his greatest influence and inspiration.

But, the rock star gets the accolades and the attention while the bluesman toils in relative obscurity tending to his craft and if acknowledged it's well after his career has ended.

So, there you have it. The best teachers I know are not rock stars, they're bluesmen all about honing their craft and inspiring their students.

One of the things Alfred talked about in his post is the top down influence on CS education. On the one hand, it's brought attention to bear but on the other hand it's being driven by people who don't really get education.

The same can be said for the overall recent big money influences on education.

We'd be much better off if those in power stopped playing rock star and started listening to the bluesmen.

Thoughts on diversity

Yesterday, my buddy Stan pointed me to this article: "To address tech’s diversity woes, start with the vanishing Comp Sci classroom"

It gives a reasonable overview of the gender issues in computer science education. The article talks about the drop in popularity of the old Advanced Placement AB course and its eventually being dropped as well as thoughts on how the current A course is pretty dry.

It made me think about the old vs new exams. The current APCS A exam is roughly analogous to a typical college 101 course: programming in one language and one paradigm. The old AB class represented a 101 and a 102 with the 102 being data structures and algorithms. Much more interesting for both guys and girls. Over the years, the AP A exam has become more and more vocational, at least in my opinion, and that makes matters worse. Its more and more about using the language and built in collections and less about thinking and problem solving. What's fun about that?

Of course, we teach our version, a super-set, of the AB curriculum over the course of a school year.

Interesting that even though we teach that old school hardcore CS, we far exceed the national numbers in terms of gender balance, but more on that later.

One of the big things going on right now is the AP CS Principles course. There's some good stuff in there but I've got a lot of questions.

To start, I'm tired of hearing that it's a college level course. If a course is designed so that a 10th grader can be successful, it's not college level. I do understand that it's being taught in places like Berekely (and as an aside I both like and greatly respect Dan Garcia, who's the architect of one version of CS principles - the Beauty and Joy of Computing, and his work). If my kids were doing in college what they could have been doing in 10th grade, something's wrong. That's not to say that you can't have a similar course at both levels, just that there's a huge difference between a 10th grader and a college freshman.

I also take issue with the drag and drop languages in high school and beyond. True, there's a low cost of entry, but then it's limiting in oh so many ways. Much slower than a keyboard interface, limited screen real estate, and no clear exit to traditional textual programming. Scratch and the like are probably good for younger kids, but I've had to rescue many a kid from the damage done by drag and drop. I'm not advocating starting a high schooler in Haskell with Vim but there are plenty of tools that are both accessible, easy entry, fun, but at the same time real.

We also see the proliferation of all girl after school programs. I don't have any problem with this per se. I think we need some all girls and some co-ed. In fact, one of the young ladies in our summer program commented on how much she liked the fact that we weren't all girls but we created a wonderful environment where everyone felt comfortable and supported.

Some of those programs do great things in terms of exposing girls to role models and to what's possible. My issue is with the actual education, notably because these programs invariably don't have real educator/computer scientists running the show. They teach a watered down CS or conversely too much too quickly and then the girls are clobbered at the next level, they start doubting themselves and they change majors.

The problems with these after school programs as well as with CS Principles are the same. A few of my students who studied CS at Harvard framed it nicely when talking about Harvard's highly publicized CS50 course (I'm paraphrasing and combining thoughts here):

They don't really teach anything, you've got to do it mostly on your own. In the end you don't really learn anything.

Then, they go on to Harvard's next real CS class - functional programming with no real preparation and they drop like flies.

So, what do you do?

You do what we did.

I developed an intro course over 10 years ago. The new AP Principles course has some overlap in terms of concepts but one big difference is that we dive into programming using two real languages. Scheme, which is mathy functional and NetLogo which is visual and interactive but still text based. We then move on to a number of really neat concepts in Python.

People say, "Oh, you do the NetLogo because it's visual and appeals to girls." No - we do NetLogo because it's cool and it appeals to kids. Same with Scheme. Show me a girl that loves the visual stuff, I'll show you a girl that loves Scheme's functional goodness. I might only be a dopey old school teacher, but I really believe "kids are kids."

On top of this, you get great teachers that really know their stuff (and we've built plenty of them over the years) and create a culture with everyone's accepted and good things happen.

By the time our kids leave us, they've got enough under their belts so they not only know their stuff but they have the confidence that they know their stuff.

How does it work for us? Nationally, about 19% of APCS test takers are women. At Stuy, we hover around 30%. My Software Development, Post AP classes are also around 30% so we keep them. Oh, and Stuy is only 40% female and we do much worse than the national averages in other traditionally male dominated fields such as physics.

Yesterday, I was talking to one of our CSTUY hackers as we ended the day. We were talking about possible directions to go in after the new year. We could stay graphical, go to text processing, look at some hardcore algorithms and more. I asked Aruna what she thought. Her answer: "It's all fun."

Reunions part 2 - My Stuy, Your Stuy

About a month ago, I was at my 30 year high school reunion. Yesterday I was at the class of 2009's 5 year one. Stuy 2004 also had their 10 year reunion last night.

It's always nice to be invited to reunions - I know it's largely dependent on who's on the organizing committee but it's nice to be remembered.

Last time I wrote about Stuy reunions I noted how similar they all are. It's something I've noticed over the years. The kids are all unique but the vibe is the same. I tell people that the biggest difference between my class reunion and the ones I attend as a teacher is that I know more people when I'm there as a teacher. That's probably more of a statement about me than the reunions or classes though.

Interesting to me was that I didn't really feel like I was at a Stuy event. The people I chatted with were by and large part of our CS family. We've got our own mailing list, have our own meetups and are already a community that spans the years. It was nice to actually see people, particularly the out of towners in person and it was nice to speak to some of the people who are more comfortable lurking on our list but it's not like we've been out of touch for the past five years.

It really cemented my feelings that my Stuy really doesn't have much to do with the actual school any more. It's the kids and teachers I work with right now and the many graduates that I now consider friends. It's also the CSTUY kids from the summer and the kids that I hope to work with in the future. There are more than a few non-Stuy people that are part of the community as well.

That's my Stuy. On the one hand, it's pretty cool. We've got a community that's around 700 people and spans almost four decades and StuyCS is a known quantity in the tech world.

On the other hand it's kind of sad that I no longer feel passionate about the institution that I attended as a kid and have worked at for over 20 years.

Little details we take for granted

I'm getting ready for my AP classes this morning. We're building a word search generator and we're at the point where we need to read a list of words from a file

First, I'd better make sure I can do it. We're using the java scanner, mostly because it's easy.

First cut:

public class wl {
    public static void main(String[] args) {
        Scanner sc = new Scanner(new File("words"));
        while (sc.hasNext()){
            String s = sc.next();
            System.out.println(s);
        }
    }
}

Oh yes, I forgot the

import java.io.*;
import java.util.*;

Oh, and also the fact that I've got deal with exceptions when working with files:

try {
    Scanner sc = new Scanner(new File("words"));
    while (sc.hasNext()){
        String s = sc.next();
        System.out.println(s);
    }
} catch (Exception e){
    System.out.println("Can't open file.");
    System.exit(0);
}

But we don't want to wrap our entire program in an exception:

try {
    Scanner sc = new Scanner(new File("words"));
} catch (Exception e){
    System.out.println("Can't open file.");
    System.exit(0);
}

while (sc.hasNext()){
    String s = sc.next();
    System.out.println(s);

}

Now it doesn't work because the Scanner sc might not exist after the try catch block (if an exception occurred), so we need:

Scanner sc
try {
    sc = new Scanner(new File("words"));
} catch (Exception e){
    System.out.println("Can't open file.");
    System.exit(0);
}

while (sc.hasNext()){
    String s = sc.next();
    System.out.println(s);

}

And now this doesn't work because sc might not have a value so we finally get to the working version:

import java.io.*;
import java.util.*;
public class wl {
    public static void main(String[] args) {
        Scanner sc = null;
        try {
                sc = new Scanner(new File("words"));
        } catch (Exception e){
            System.out.println("Can't open file.");
            System.exit(0);
        }
        while (sc.hasNext()){
            String s = sc.next();
            System.out.println(s);

        }
    }
}

Really simple program but that's a long list of things that can go wrong along the way. Nothing big, but each a stumbling block for a beginning student that doesn't have the wealth of experience that someone like me has.

I had an interesting discussion with one of my seniors the other day on this subject - all the base knowledge that experienced programmers have that students don't and how we have to approach teaching so that students are supported and not frustrated by these little but important speed-bumps that they'll hit along the way.

I hope to write more about this soon, but for now I'll leave you to ponder the issue.

Hidden Complexity

I've said it many times:

Never use a tool you couldn't write yourself.

That is - make sure you understand what's going on under the hood.

In AP we've been playing with ArrayLists. The problem for today? Create an ArrayList with consecutive integers and then write a routine that will randomize the ArrayList.

For example, you might start with this ArrayList:

0,1,2,3,4,5

and end up with

3,5,1,4,2,0

First cut, the students grabbed a random element from the ArrayList, removed it, and added it to the end of a new list. Then repeat until the original list is empty and the new one is randomized. Then return the list.

public ArrayList<Integer> shuffle1(ArrayList<Integer> l){
    ArrayList<Integer> result = new ArrayList<Integer>();
    while (l.size()>0){
        int i = rnd.nextInt(l.size());
        int v = l.remove(i);
        result.add(v);
      }
    return result;
}

Looks good.

Version two was much the same but after it removed a random value, it added it to the end of the same ArrayList:

public ArrayList<Integer> shuffle2(ArrayList<Integer> l){
    ArrayList<Integer> result = new ArrayList<Integer>();
    for (int s=l.size();s>0;s--) {
        int i = rnd.nextInt(s);
        int v = l.remove(i);
        l.add(v);
    }
    return l;
}

Then it was time to time. Both seemed pretty quick but as our data set grew things seemed strange:

Size Time
100,000 2 seconds
200,000 7 seconds
400,000 26 seonds

We're just looping through an ArrayList, what's going on? When we double the size of the list, it should just take double the time.

Since the class already wrote their own ArrayList implementation, they were quick to realize that every time we removed an item from the original Array, we were doing a linear or O(n) operation. That means our algorithms, which look linear, are in fact O(N2).

Can we do better? You bet. They just changed the remove and add to using get and set. Instead off removing an item and re-inserting it, just swap the randomly selected item with the last element:

public ArrayList<Integer> shuffle3(ArrayList<Integer> l){
    ArrayList<Integer> result = new ArrayList<Integer>();
    for (int s=l.size();s>0;s--) {
        int i = rnd.nextInt(s);

        int tmp = l.get(i);
        l.set(i, l.get(s-1));
        l.set(s-1,tmp);
    }
    return l;
}

No removes so no hidden linear component.

The run time?

Size Time
100,000 .15 seconds
200,000 .16 seconds
400,000 .17 seonds

In fact, it took data sets in the size of millions before we even broke more than a couple of seconds.

The algorithm looks the same but understanding what goes on under the hood can make a big difference.

Hi, I'm Mike, I went to high school with....

That's how I introduce myself whenever I attend a former student's wedding. It leads to all sorts of confusion.

Even better was the time I was at the wedding of two former students. I had just dropped around 65 pounds and was wearing my hair differently. I sat at a table filled with former students that didn't recognize me – they had no reason to expect me, out of context and all. I joined the conversation - able to go toe to toe on stories of "the old days at Stuy." It really confused them. We all had a good laugh when I outed myself.

Over the years, a many of my graduates have moved from student to friend and I've shared life events with a number of them. Rule one is that I don't reach out to them after graduation - that would just be creepy. If, however, they reach out to me, then we stay in touch. As an educator, even if it's a periodic note or update, it's something that really touches me - it reminds me that even with all the teacher bashing going on in this country, the kids, at least some of the time, appreciate us.

This weekend was particularly memorable for me. I was at JonAlf and Jamie's wedding. JonAlf falls in a special category.

He was a former student and also on my fencing teams. I don't remember how much we stayed in touch, but it must have been enough for me to know that he minored in CS and was teaching high school at Brandeis.

When I heard Brandeis was being phased out and I saw we had a couple of math openings, I tried to find him to bring him over to Stuy. You try finding JonAlf Dyrland-Weaver in "the system." Is it Jon Dyrland? Alf Weaver? JonAlf Dyrland? Nothing worked. In any event I did eventually find him. Unfortunately, I wasn't allowed to bring him on in spite of his being a Stuy graduate with a CS background and a successful teaching record. Nonetheless I kept trying and a couple of years later I got him.

Since then, JonAlf has been my partner in crime. A kindred spirit whom I describe him as a younger hipper version of me although the hip bar was set pretty low to begin with.

In addition to the lunacy - The Blues Brothers, Austin Powers and Dr. Evil, Clyde "Thluffy" Sinclair, the CS Semi Formal and all, he's one of the best teachers I know. A former student that I'm now proud to call friend and colleague.

I was touched to be included in the festivities this weekend. I'm incredibly proud of JonAlf as a teacher, a person, and a friend. He and Jamie looked so happy together and I just know that their union will be as amazing as Devorah and mine has been.

So this post is my way of raising a glass to JonAlf and Jamie.

Forty minutes to the punch line or "we'll never look at functions the same way again""

How many times do we teach something and leave the kids thinking:

"what's the point of this?" "When will I use this?" or even just the plain old fashioned "that's weird."

It's pretty cool when a lesson starts out that way but you get to the payoff by the end of the class.

Today we started exploring some advanced python.

We started by showing that you can assign functions to variables or pass them as parameters:

def inc(x):
    return x+1
def dec(x):
    return x-1

f = inc
print f(5)

flist = [inc,dec]

print flist[1](5)

We then looked at closures in python:

def makeAdder(n):
    def inner(x):
        return x+n
    return inner

add3 = makeAdder(3)
add5 = makeAdder(5)

print add3(10)
print add5(10)

The idea that we can make a function that builds and returns a function. When we call makeAdder(3), the 3 is passed as parameter n so the inner function reduces to return x+3 and then we return that inner function. When we later run it: add3(10) it adds 10+3. makeAdder(5) works similarly but passing a 5 in for n instead of a 3.

Even a somewhat clunky way of doing class type abstractions:

def make_counter():
    # private "instance" data
    # has to be a list due to weird python scoping rules
    count = [0]

    # public methods
    def inc():
        count[0]=count[0]+1
    def dec():
        count[0]=count[0]-1
    def reset():
        count[0]=0
    def get():
        return count[0]

    # send back a dictionary so we have access to all the methods
    return {'inc': inc, 'dec': dec, 'reset': reset, 'get': get}

c1 = make_counter()
c2 = make_counter()

# we've got to use the clunky list notation 
c1['inc']()
c1['inc']()
c1['inc']()
print c1['get']()
c2['inc']()
print c2['get']()
c1['reset']()
print c1['get']()

Up to now the students are able to see how this works but the why is unclear.

So now we'll look at where this is useful.

Let's suppose we have routines like the following. It returns a string:

import random
def get_name():
    names = ['tom','sue','harry','lisa','sarah','horatio']
    return random.choice(names)

getname and routines like it might be scattered throughout our code. Let's suppose, for some strange reason, we want to double the name every time we use it. A "traditional" way of doing this might be:

def dble(f):
    name = f()
    return name+name

print dble(get_name) # returns something like tomtom

Here, we pass a function which returns a string and then dble returns that string repeated twice. The problem here is that if we've got getname all over our code base, we have to find it and change each instance to dble(getname)

What if we write it as a function that returns a function:

def doubler(f):
    def inner():
        name=f()
        return name+name
    return inner

Now, in this case, we can do something like:

# make a new function that wraps get_name in "inner"
# when we call inner, it returns the string twice
f = doubler(get_name)
# and then later
print f() # will print something like tomtom

The cool part is that we can also do this:

get_name = double(get_name)

And then whenever we call our new getname we end up calling the wrapped function.

This was the first A-ha. We don't have to change getname all over our code base - we only have to change it once.

Once we write a function like doubler, instead of re-assigning getname as we did above, we can do the following:

@doubler
def get_name():
    # rest of code as defined above

@doubler():
def demo():
    return "hello"

The second example will have demo return "hellohello" whenever we invoke it.

A Python decorator is merely shorthand for calling a wrapper type function like doubler.

This was the second A-ha moment – we can write functions that transform functions.

We'll cover more decorator and closure plumbing tomorrow and then start doing some fun stuff with these concepts.

Rich and Rich - two legends on opposite sides of the hall

We'll get back to CS content soon, but for now:

Last Tuesday was Election day - no students in the school - a day devoted to professional development. Traditionally, math team coaches from around the city descend on Stuy for a day full of lectures, discussion, and general catching up. I've never actually attended these meetings. In the past, they were for math team coaches only and this year, I was actually allowed to do something with the CS teachers.

These meetings used to be organized by my late friend and colleague, Rich Geller so it made sense that we took time at end of the day to honor his memory and unveil a memorial dedicated to Rich and his work. Rich was a legendary Stuy teacher, but more on that shortly.

As I looked at Rich's memorial, I couldn't help and turn my head around to gaze at another memorial - "Celebration" - created to honor the memory of another legendary teacher that died before his time - Richard Rothenberg.

Both of these men were friends and mentors. I thought I'd dedicate this post to some of the things I learned from both of them.

Rich (Doc)

Celebration - the Rothenberg Memorial

Richard Rothenberg, known to me as Richie or Doc was the math chair when I was a senior. He taught AP Computer Science that year and he hired me back a few years later.

He didn't give me my first teaching gig. He knew that I had to go somewhere else to develop my chops. We did stay in touch, though, and he hired me two and a half years later.

Doc was an amazing teacher but he was also someone who worked tirelessly behind the scenes for the good of his students.

I remember one year he heard that one our recent graduates got into some trouble at college. Doc got wind of this and went out of his way to contact the college on the student's behalf. The student never knew. That was Doc.

He also understood the "big picture."

I was at a parents association meeting early in my Stuy career. All of the assistant principals were taking turns talking to an audience of Freshman parents.

Each got up and started to brag about their program:

  • We had n intel semi finalists last year
  • Our kids won whatever essay writing contest
  • Six kids won gold medals in…

Each AP was bragging about how awesome their department was but in truth they were talking about a handful of excellent kids who would have excelled no matter where they went. I'd guess Stuy or at least Stuy's educational programs probably had very little to do with these top kid's development and in any event, this wasn't really relevant to parents of incoming students.

Then it was Richie's turn.

Richie got up and said the following:

Go home, hug your children, ask them how their days were. Encourage them and support them. Everything else will work itself out.

That really stayed with me. So few teachers look beyond their field. I remember talking to one of the best chemistry teachers I know - I asked "what do you do knowing that most of your kids won't be and in fact shouldn't be chemists?" The reply was that he looked at all his students as though they all wanted to be and were going to be chemists. Doc looked at his students as whole people first - mathematicians second. That's one of the many lessons I learned from Doc.

Rich (Richard)

The Rich Geller Memorial Display

Richard Geller was never my teacher. He was my colleague and friend.

He introduced me to fine dining and wine. We talked food, biking, and teaching.

Rich had a reputation for being unyielding and strict. Many students went into his class in fear but just as many came back after graduating to thank him.

I remember one of our mutual students saying:

I need to be in Mr. Geller's once every three terms to keep me in good habits. Then I need a couple of pushover teachers in between to pump up my GPA.

He was a top math teacher but his students learned much more. Responsibility, respect, having care and pride in one's work, and more.

Rich was a demanding teacher and one who really cared about his students. When grads came back from college and Rich would great them with a smile. The scary teacher was gone. He asked how and what the graduates were doing and he honestly cared. Gone was the in class persona. That was business.

In some ways Rich was much like an earlier Stuyvesant math legend. Phil Fisher, who terrorized us poor calc students in the '80s. I got to know Phil when I came back as a teacher and once he explained why he was so rigid and strict in class. Phil explained that here he was, charged with teaching these amazing talented Stuy students while at the same time, he felt he wasn't nearly as smart as them. Phil needed 100% focus during every minute of every class to give the kids what they deserved.

I think Rich was something like that. Not exactly the same, he also wanted the kids to learn to be responsible and respectful but I think the core idea was the same.

As a colleague and friend, Rich was the first guy to show appreciation and the guy with enough character to tell you not what you wanted to hear but what you needed to hear. I also learned to always be open and honest with my team. Make sure everyone had all the information.

I learned a lot from both of these men. Stuyvesant misses them and I miss them, but the there influence lives on through me, their students, colleagues and friends.




Enter your email address:

Delivered by FeedBurner

Google Analytics Alternative