Expressive Syntax

A blog about software, culture, psychology and philosophy.

WorthWild

Recently, I had the honor of working with a really excellent team on a really excellent project.  Check out WorthWild.com.  It is a crowdfunding platform for environmental initiatives.  I feel really proud of the work that we did and I’m glad that the website is helping entreprenours, teachers and environmentalists raise money for their green projects.  

Don’t call me smart

image

It seems so natural to talk about programmers in terms of their talent or intelligence, but talking about it in this way might actually be doing harm.

"He is really smart."  "She has a lot of talent." "They are all geniuses."

These seem like such complementary things to say.  How could they possibly be doing harm?

The problem is that these kinds of accolades focus on innate ability instead of effort, which squashes a growth mindset.

What is mindset?

Mindset is simply one’s implicit views of where ability comes from.  For example, you have a more fixed midset if you believe that ability is an innate thing, like eye color.  On the other hand, if you believe that ability can be developed with practice and hard work, like a muscle, you have a growth mindset.  

According to researcher Carol Dweck, mindset affects our behavior in all sorts of important situations.  For example if you believe intelligence is innate, then you only care about looking smart and are therefore more likely to avoid challenging situations where you might look dumb; situations like pair programming or speaking at a meetup, for example. But if you don’t feel the need to prove your intelligence, there is no risk and you are more willing to embrace challenges.  

Here’s another example. Learning to program is hard. If you think that ability is innate, then you see effort as an sign of incompetence.  When things are hard it means you’re not good and setbacks have a really negative meaning to you; they indicate low intelligence.  So your tendency is to get defensive, hide mistakes and conceal deficiencies or avoid the effort of learning all together. On the other hand, if you have a growth mindset, you see effort and hard work as enjoyable and critical to growth.  When you have a setback you see it as an opportunity to learn.  

People with a fixed mindset also ignore useful feedback, feel threatened when others succeed and give up easily. On the other hand, those with a growth mindset embrace feedback, are inspired by the success of others and are more persistent. 

Another interesting thing that Dweck and her colleagues discovered was that it was very easy to influence other people’s mindset.  If you praise someone for being a “smart programmer” you immediately put them into a more fixed mindset. While praising their effort has the opposite effect. 

Whenever I praise programmers that I admire, I try to be precise about what it is that I admire.  Sandi Metz is one of the most well respected rubyists in the community not because she is smart but because of the things she has done and the knowledge that she has acquired. She has a ton of experience with Ruby and OOP. Her talks and her blog posts are always informative and thoughtful.  You can tell that she puts a lot of effort into her code and into her writing.  And since I love her work and want her to produce more, I hope that if she ever reads this, that my praise actually encourages her to make more stuff and not just feel good about the stuff that she has already made. I hope my praise bolsters her growth mindset

I think this also relates to the topic of diversity in the computing community. The stereotype of the male programmer is part of our culture.  The vast majority of programmers that we see on TV and in the movies are male.  This leads to a subconscious, and false cultural belief that programming ability is more innate for boys than it is for girls. While we can’t change what we see in the media, we can shift the focus in our community away from innate ability and more toward effort and practice. The more we can do that, the more accessible programming becomes for all people. 

wabi-sabi code

wabi-sabi is a concept originating in Japan that is part world-view, and part aesthetic.  The world-view appreciates slowness and attention, while embracing imperfection and impermanence. The aesthetic emphasizes asymmetry, incompleteness and simple craftsmanship. 

What does wabi-sabi code look like?

Keep your code small.  Tend to it often as you would tend to a bonsai tree. Let it grow naturally and trim it carefully. 

image

Use rituals to draw attention to things.  TDD can be as zen as the tea ceremony.

image

An object that does one thing is more beautiful than an object that does 10 things.

image

Slow down.  

image

Sublime Text Plugins for Rails Development

Sublime Text has a ton of great plugins. Here are some of my favorites:

Package Control is absolutely indispensable. It makes the installation of any other package a breeze.

SideBar Enhancements doubles the usefulness of the sidebar.

Apply Syntax lets you apply the rspec syntax to spec files.  without it, sublime just uses the ruby syntax for all .rb files.

GitGutter shows uncommitted changes next to the line numbers.

CSSComb reorganizes your css for you.  

RSpec adds syntax highlighting and snippets for RSpec

RubyTest lets you run you rspec tests in Sublime.

SCSS adds syntax highlighting and snippets for scss

SublimeLinter + SublimeLinter-ruby help keep code pretty and consistent.

What plugins do you use?  Leave a comment!

Sublime Text: You’re doing it wrong!

One of my favorite things about Sublime Text is that it is very intuitive and newbie friendly.  Unlike Vim or Emacs, you can open it up and start coding without any prior experience, which is great!  However, if you’ve been using Sublime text for a while and you’re still using it like you were when you started, you’re probably missing out.  Sublime Text is a powerful editor with lots of cool features and plugins.  If you’re not taking advantage of them, you’re doing it wrong.

If you’re using your mouse to open files, you’re doing it wrong!  Use ⌘P and type in the file name to instantly search for and open any file.

If you’re looking for commands in the menu bar, you’re doing it wrong! Use ⌘⇧P to open the Command Palette quickly search for and run any command.

If you’re using the terminal to run your code, you’re doing it wrong! Use ⌘B to build/run your code in Sublime.

If you’re using the terminal to run your unit tests, you’re doing it wrong! Use Package Control to find and install a plugin for testing in Sublime.  

If you’re still using the default settings, you’re doing it wrong!  Edit your User Settings to customize sublime just the way you like it. 

vectorbelly:

Even if everything you make is crappy, you’ll still be more interesting than the guy who makes nothing.

vectorbelly:

Even if everything you make is crappy, you’ll still be more interesting than the guy who makes nothing.

(via davecity)

Metacognition: The “24 hour test”

Recently, I’ve been applying for jobs.   I got a response today that included these sentences: “…the next step in the process will be a “24 Hour Test”.  In the next 24 hours, send me something that shows how you think. This should be something quick, like a photo, experience, goal, or really anything, but it shouldn’t take you more than a few minutes.

I considered writing some code. There were probably some interesting things I could have done with loops or hyperlinks to represent how I think.  It would have been nice to show off some of my coding skills but that probably would have taken more than a couple of minutes. 

Eventually, I went with the idea of taking a photo.  I arranged a couple of the books that I had been reading and thinking about and snapped a photo of them. Done. Easy.

It’s an interesting question though, and I couldn’t help thinking about it a bit more. In order to show how you think, you need to be able to think about your own thoughts.  It requires a sort of metacognition; thinking about thinking.  How do you know that you know what you know. etc.  As I pondered it a bit more, I realized that among the books in my ‘24 hour test’ photo, there were some relevant reads.  In “The Inner Tradition of Yoga” Michael Stone prescribes meditation as a way of seeing one’s own mind.  He says “Moments of psychological stillness remind us that there are ways of knowing other than intellectual”  In Andy Hunt’s awesome book, “Pragmatic Thinking and Learning” he describes several practical ways to think about thinking.  He talks about the Dryfus model, Left-Brain/Right-Brain modes of thinking, and other interesting lessons about learning.  ”The Black Swan” covers cognitive biases. Even books on seemingly unrelated subjects contain interesting ideas that are tangential to metacognition.  I’ve learned about epistemology by studying Software Testing. I’ve pondered the meaning of intelligence and self-awareness through the lens of artificial intelligence.  Reading about psychology has illuminated some aspects of my own mind and personality.  It seems like there are a lot of ways to think deeply about thinking deeply.    

Anyway, I’m curious.  How would you show how you think?  How do you think about thinking?  What would you do for the “24 hour test”?