User friendly - I do not think that means what you think it means

Saw this post the other day: Emacs is hurting Clojure and this response: Is Emacs Really HJard to Learn / Use.

This called to mind those countless discussions about tools being user friendly. I'm frequently on the unpopular side of these discussions. Linux vs Windows vs Mac, Shell vs GUI, Emacs vs fill-in-the-blank-editor-or-IDE and on and on.

Don't use Emacs, it isn't user friendly. Don't use Linux, it isn't user friendly.

The thing is, I don't think that word means what they think it does.

I tell my kids that Linux and the shell is amazingly user friendly and Windows and Macs aren't user friendly at all. Windows, rather, is "Learner Friendly." For years, it's been easy to learn what you can do on Windows or Mac (as used via the GUI, not dropping to a shell) but the truth is you can't do that much. They're designed as program loaders not tool kits.

You can learn how to get around and load programs and files very quickly - much more quickly at first than using a command line interface. The problem is, at that point, you hit a wall. No doubt those operating systems are more learner friendly than Linux and the shell but once you learn the command line, it can be leveraged for all sorts of things and pretty easily at that - user friendly (see these posts for some examples: Shell posts).

This is important because we have our students use all sorts of tools and we should be thinking about things like usability but we really should be thinking about them a little differently.

First, is it learner friendly. Part of this is cost of entry. Linux has a high cost of entry. On the other hand, while Emacs might look uglier than other modern editors, the cost of entry is pretty much the same as any other editor - click or type a command and then you can use the mouse and drop down menus to get started. Vim, in my opinion, on the other hand has a higher cost of entry due to its modal nature.

So, there's no reason not to use Emacs (vs another editor) but you might pause before using Linux. My approach is to start as if it were Windows - use the gui, icons and menus, and then slowly introduce the command line.

Once your past the cost of entry, the we can think about being learner friendly. As I mentioned, Linux, not so much. Emacs, sure - just like any other editor with drop downs that then give you keyboard equivalents.

The keyboard equivalents lead us to another part of learner friendly – discoverability - can you easily discover new things about the tool. Here Emacs shines. Linux, maybe not so much.

Once past learner friendly we get to user friendly. The core question is "can I do what I need to and want to do easily." For most people, it comes down to - the tool I know is user friendly and the one I don't know and don't want to take the time to know isn't. There are some things that are cumbersome no matter what, but really, when we say user friendly, most people mean "what I like." To me, it's a little more - is the tool expressive and powerful as well.

So, why is this important? First, we shouldn't allow our biases to color the way we expose our kids to tools but at the same time, we should pay attention to learnability, cost of entry, discoverability, and indeed, true user friendliness.

  Low Power High Power
Low Learnability CP/M Linux Shell, Mac Terminal
High Learnability Windows / Mac OS GUI Most editors, including Emacs

So, let's stop with this "your tool isn't easy to use" nonsense. Any tool we don't know isn't easy to use until we learn it. Let's focus on the path to learning the useful ones.

Impostor Syndrome - I'm not good enough

I've been meaning to comment on these tweets for a while:

Stan, of course, is one of the most talented people I know.

It reminded me of a conversation I had with my colleague and friend Jim last year. I had just recieved an email from a former student turned friend. We were trying to find some time to catch up. I told Jim I had just heard from this young lady and Jim replied "I remember her, she's awesome. Really smart." I mention this because the individual we were talking about, while to us, extremely talented in addition to being just a terrific person spent much of her career living in self doubt.

Meantime, I was having a conversation with another friend and the topic turned to impostor syndrome and the desire to make it a thing of the past.

Problem is, I don't know if that will ever be the case. I'm approaching 50 and have a career of good work behind me but I still find myself questioning my credentials, work, and ability. Then I realized I wasn't alone when I read Robert Talbert's recent blog post about his going through the tenure process for a second time and "learning through this process that I have not outrun impostor syndrome and probably never will."

Stan's tweets tell part of the story. When we surround ourselves with smart, accomplished people, we sometimes feel we don't measure up. I've found that for the most part, the extremely accomplished people I've worked with are very unassuming and low key. They seem to operate assuming that everyone else is at least as capable and quick as they. I recall Paul Graham talking about this in an essay but I don't remember which one. The problem is, if you don't understand their sincerity, you end up feeling even more inadequate.

It gets worse when we start comparing ourselves to some unreal composite. I remember feeling pretty stupid back when I was younger comparing myself with others. The problem was that I clearly didn't measure up to the best math kid, or the best computer kid, the best fencer, the best violinist, etc. Now, the best math kid might have been a lousy athlete and the best fencer, a so so mathematician, but to me, I was comparing myself with this composite super human. No wonder I never measured up. Eventually, though, I realized three things. First, there's always someone better at something and always someone worse. Second, that's not the true value of ones worth as a person, and three, I bring some good stuff to the table and I should be (and am) content with that

So, I still struggle with impostor syndrome but at the end of the day, it just serves as a reminder to look back on what I've done and what I've learned in the process. I start out in question but in the end, leave confident. Maybe the trick isn't to eliminate impostor syndrome but rather to understand and contain it. We don't want to live in fear and anxiety but both are useful emotions when we control them and not the reverse.

It's probably good when we question ourselves and re-evaluate our positions - we just have to make sure as we're bringing new people into the tech fold that we foster acceptance and confidence and when impostor syndrome sets in that it can be channeled into a positive and not scare people away.

First day back, or not

The day after Labor Day. The day NYC teachers traditionally return to work. For the first time in a quarter century, I'm not one of them.

It's weird.

Instead, I'm in the second week of Hunter College's fall semester. So far so good on that front. I'm getting to know my students, planning activities and overall having a good time.

But, I do have to reflect on some of the things I'm not going to get to do this week:

I'm not going to have the opportunity to be blindsided by a CS schedule made without consulting me or any other CS teacher and having to work frantically to fix it so that the CS teachers have the programs and rooms they want.

I'm not going to be able to have that panic attack when the NFS/NIS server isn't working and no one can log in.

I'm not going to sit through a mindless faculty meeting where nothing is really ever accomplished.

More seriously, I am going to miss seing my friends and colleagues after the summer and Thursday - the day the kids get back is always a thrill and I'm going to miss that.

In a way, I'm experiencing a version of what retired teachers go through. Many teachers retire in June but it's not until after Labor Day when the change really sinks in.

Soon, I'll start posting CS teaching content again but for today, I want to tip my cap to all the public school teachers in NY that are going back to work today and who will shortly be teaching their five classes of thirty four kids each 1.

Footnotes:

1

also tipping my cap to my favorite TJ teacher who's students are back today. I got called to task for failing to mention her on my facebook shoutout.

Using Emacs - 15 - Macros

I originally planned on do some videos on C++ development but I'm just not feeling it. Probably because I'm excited to be working with my new class and we're working in Python. We're not going to be using C+++ for a few months so I'll get to those videos a little later.

Today, I want to cover what I consider a leatherman or multi-tool for Emacs. Something that isn't perfect for any particular job but can get almost any job done: Macros.

In their simplest form, macros let you record and play back keystrokes.

The video goes over the specifics.

Here are the main functions / keystrokes.

Command Key
kmacro-start-macro-or-insert-counter F3
kmacro-end-and-call-macro F4
kmacro-name-last-macro  
insert-kbd-macro  

This covers most of my use of macros but there's more. You can adjust or set the counter, edit old macros and there's even a way to have a macro pause for input in the middle.

Here are some links with more information:

If you're interested in checking out Repl.it, which I reference in the video, check out my blog post.

Relevant links:

New Term, New Tool - repl.it

We're now a week in to my first class at Hunter. It's a little early for me to really compare and contrast the high school to college experience but I thought I'd share some thoughts on a tool that I've recently started to play with.

My students were all supposed to be issued laptops at the beginning of the semester. The plan was to have them learn Linux, the command line, and a little DevOps along the way. I guess I shouldn't have been too surprised to learn that the laptops weren't going to come in until late September.

Scratch all that advance lesson planning. A brief scramble and I was able to relocate the class into a computer lab but now we can't customize the kids environments.

Time to look for an online solution.

We're starting the kids off in Python, a choice that I'll talk about in some future post and normally my online go to for Python is codesters.com. I'm a big fan of the codesters team and product. This time, though, I decided to try something else. Specifically repl.it. Partly because, as with codesters, I like the people behind it. It's also pretty simple and it supports a lot of different languages:

APL, ES2015 ,Bloop, BrainF, C, CoffeeScript, C++, C++11, C#, Emoticon, Forth, F#, Go, Java, JavaScript, LOLCODE, Lua, Nodejs, PHP, Python, Python3, QBasic, Roy, Ruby, Rust, Scheme, Swift, Unlambda, and HTML, CSS, JS

It's still a pretty new product so there are occasional hiccups but I'm really liking things so far. Some of the things I like include:

  • a simple clean interface.
  • sharing and embedding code:
  • project mode which allows multi file projects
  • examples to get you started

But the thing I'm really liking are the teacher features they're working on. The teacher interface isn't fancy. I like that. Things are simple and clean and they let me get the job done.

I had two extra minutes in class yesterday and in that time, I was able to:

  1. Make a classroom
  2. Invite all my students by email
  3. Create 2 quick assignments.

The assignment page lets you give starter code as well as instructions and it also lets you put in tests that are run when a student submits their work for instant feedback.

I really like the tests feature on projects. So far, I've only played with Python unit tests. Repl.it uses a really easy to follow interface and has a sample test to guide you. There's also an option for input/output matching which includes flexible matching and regular expressions but I haven't played with it yet.

Overall, I'm liking this tool. When the kids get their laptops we'll probably use it somewhat less as they start to learn to use their own systems but I'm glad to have repl.it in my teaching arsenal.

Federal Aid for Code Schools - is this a good thing?

I saw this headline earlier today: The U.S. Just Made a Bold Move to Improve Diversity in Tech.

The article talks about a program by which a number of code schools will be able to accept federal student aid. I don't know if we're talking student loans or grants but I'm not sure it matters.

The headline sounds great. I'm not so sure that this is a good thing.

My thinking's evolved over the years but right now, everything tells me that public funds and for profit education don't mix.

What we, more often than not, end up with is a cash cow for a private concern.

Example one: The edTPA - a required exam for teacher licensing, at least in NY. Prospective teachers pay hundreds of dollars to pass this gatekeeper. Pearson, a private company (and not even an American one) is essentially in charge of teacher licensing. They make the assessments, they grade them, they decide who passes. A foreign company is deciding who teaches our kids and at great expense to those prospective teachers.

We'd be much better off going back to the old days. To become a teacher, you had to pass through "The board of examiners." Basically, to get your permanent license you had to do an oral defense. Teachers would be placed in a room of principals, supervisors, and master teachers for an open grilling. It was cheaper and MUCH more effective.

Example two: The PSAT 8/9, PSAT, and SAT. These are exams that tell us one thing: how kids will do on future PSAT and SAT tests. They're not good predictors of college success but the college board (a non-profit in name only) has convinced us, or at least "convinced" our politicians of the exams importance. So, rather than having individuals make a choice as to whether or not to take these exams, NY forks over who knows how much money per year so that our kids can take a test with the belief that the exam will mystically make them college ready. To make matters worse, students lose a day of instruction and teachers have to proctor the exam instead of teaching.

Example three: Common core tests. Made in secret, graded in secret with cut off scores designed after the fact. Absolutely no educational value but once again, public funds flow freely into testing companies.

The problem is that these private concerns never really have to show results and they're never held accountable and since the money we pay them is hidden in city and state budgets, the taxpayer is none the wiser.

So, what about code schools?

In a similar vein, money will flow from the government to the code schools. The question is, do they really have the secret sauce.

I have lots of friends who run and work in code schools and have met many more. Some code schools are trying to really educate and some not so much. In any case, let's take a look.

You frequently hear about the success stories but for every one of those, you can also find a manager talking about the fact that the code school graduate can't do anything other than ape the narrow tool that they were exposed to in the three or so months at the code school. So, the truth is that results are probably a mixed bag.

Is this good? Well, when you consider the typical code school MO it really isn't.

To attend a for profit code school you have to not only afford the tuition but also be able to sustain yourself for the duration of the program. That makes most code schools options for the well to do - those already well positioned for success.

Then they make the candidates go through pre-work – frequently online course work. So, before you even step into a code school, they know you're likely going to succeed.

Once in, they train the candidates in a narrow slice of tech. I've talked to a number of code school leaders about that. I've asked how well the kids would be able to adapt given the constraints of their 3 month or so training. The typical answer was that the candidate could just re-up and pay again to learn the next limited time only skill.

Should taxpayer dollars go to this? Probably not. There's no indication that code schools can provide meaningful long lasting education to even those who are best prepared to learn on their own. Whats' more, we haven't seen evidence that they have the answers for the under-served. Combine that with government's history of not keeping an eye on and not holding accountable private education providers, I think we're just setting up a new line of corporate welfare that will, on the surface help some but it is in no way the answer.

Too often public/private means that the private entity gets the money and the public gets stuck holding the bag. Better would be to have tech companies foot the bill. Some coding schools already do this. Tech companies that are happy with coding school graduates can finance the program.

What we should be doing is focusing on things like community colleges. Organizations that are supposed to be real, long term, community centers. With moderate tweaking, there's no reason why a community college, not to mention 4 year schools, couldn't provide far superior preparation than even the best code school.

Using Emacs - 14 - Thoughts

Sorry for the incosistancy of the posts. I hope to get to that one video a week soon but I've still got a hectic couple of weeks ahead.

No new material this week, or at least very little. This week, I talk about some thoughts on the "Using Emacs" series.

In the video I talk about Sacha Chua and her work as a leader in the Emacs community. Check out her stuff here: http://sachachua.com/blog/

Here's the video - I hope you enjoy it.

As always, please leave feedback here or on the video.

Relevant links:

Using Emacs - 13 - Yasnippet

It turns out that Elpy, a popular emacs package for python development is much easier to set up than I remember. It turns out all you need is:

(use-package elpy
:ensure t
:config 
(elpy-enable))

The video shows how to install and a bit of use. I don't think it's a package I'm going to use much since I use other tools to do similar things but it's worth checking out.

The main event this week is yasnippet, a package that lets you expand text aliases. Let's say you want to put the fairly standard:

if __name__ == '__main__':
   main()

in my file. I can just type ifm and then hit the TAB key and it would expand to the above code. Yasnippet also lets you leave placeholders for variables, function names and more. It's a pretty neat package.

I use it for boilerplate code. The example in the video shows how I set up a snippet for the boilerplate code used when creating an application with the Flask python microframework.

Setting up yasnippet is as easy as:

(use-package yasnippet
  :ensure t
  :init
    (yas-global-mode 1))

and it has built in support for tons of langauges. You can also easily create your own snippets. See the documentation for details on the file format. Just create a text file for the snippet and place it in a subidectory under the snippets subdirectory of .emacs.d. The name of the subdirectory should be the name of the emacs mode for which the snippet is defined. I put up the snippet I use for flask so feel free to check that out.

Relevant links:

Using Emacs - 12 - Flycheck, Jedi, Python

This week, we're going to look at my setup for Python programming.

I'm an educator, not a professional developer so I'm not working in huge code bases with dozens or more files at a time. I do periodically work in medium size code bases and will talk about cross file navigation and project management later on. There are also more powerful emacs Python packages. One being elpy. Elpy looks pretty cool but for me, it's overkill.

Today's about the basics.

The first tool I show is flycheck. It does code checking on the fly and supports tons of languages. You might have to install some external checkers though. For instance, I installed pylint for python syntax checking with:

sudo pip install pylint

Cofiguring flycheck is as easy as:

(use-package flycheck
  :ensure t
  :init
  (global-flycheck-mode t))

The video all shows how I like to run Python from within emacs.

The other tool I use is Jedi. It provides more extensive completion for Python.

Here's the setup:

(use-package jedi
  :ensure t
  :init
  (add-hook 'python-mode-hook 'jedi:setup)
  (add-hook 'python-mode-hook 'jedi:ac-setup))

The last hook sets up the autocomplete.

For jedi to work, you'll need to install the jedi server which is done in emacs by running M-x jedi:install-server. For that to work, though, you'll need to have Python Virtualenv istalled. I did that with:

EDIT: I just got a report that you might need to also install epc (sudo pip install epc).

sudo pip install virtualenv

Here's the video:

Relevant links:

Ed Disruption - why it's different

Earlier today I read this post by Eliot Horowitz, founder and CTO of MongoDB.

Eliot titled the post "Innovate vs Appropriate" and talks about the importance of knowing when to come up with something new vs when to use the accepted tool, technique, or method. Eliot, of course is discussing this as it applies to MongoDB and it's well worth a read but it got me thinking about the ever popular need to "disrupt" education.

I've witnessed this disruption or Ed Reform for the last decade plus. The basic notion that public education isn't working so we need to disrupt things. We've suffered through:

  • Vouchers
  • Charters
  • Online "learning" replacing teachers
  • Teach for America and other temp type efforts
  • Merit pay
  • VAM for teacher evaluation
  • and more

These disruptions are brought to you by your friendly neighborhood billionaire "philanthropist" or your politicians.

By and large, they haven't worked.

Bill Gates got us to close down community schools and create small ones. While we did need more small schools, overall it didn't work (link, link). VAM teacher evaluation is arbitrary and capricious, merit pay has never worked, nor does the online thing. Meanwhile, charter schools by and large don't do better than public schools.

Rather than saving our schools, these efforts have lowered teacher morale and done little for our most vulnerable children.

So, what's the difference between ed disruption and the tech world? Well, for starters, those disrupting education totally ignore the very advice that Eliot posted about today.

Disruption to and of our public schools hasn't been a matter appropriating what works and innovating what needs to be innovated but rather a playground for pet projects of politicians and well meaning rich folk. Rather than looking at something simple that works, like, say, smaller class sizes, we get computerized testing. Instead of experienced teachers, we get inexperienced newbies that leave after their commitment is up.

Why the difference? It hit me while reading Eliot's post. When a founder is "disrupting" he has skin in the game - it's his company - sink or swim. Not so for education reformers. Politicians merely need to be re-elected.Sso as long as something looks good short term, it is good. Those who disrupt schools are never held accountable. We got small schools and VAM from among other places, Bill Gates. He admitted his reforms didn't work but was there any penalty for disrupting so many lives? Nope. For politicians, it's the same story. As Mayor Mike Bloomberg once said "If they don't like my education policy, they can boo me at parades."

Can we fix this? Sure, but not unless those forcing the changes have real skin in the game. Will it happen? I'm not holding my breath.


Enter your email address:

Delivered by FeedBurner

Google Analytics Alternative