mtnwestruby: Chad Fowler Keynote

mtnwestruby: Chad Fowler Keynote
16 March 2007

Background: Musician. Dropped out of music school to be a programmer.
Programming experience: Perl. Java Enterprise software. Now Ruby.
He’s been organizing international Ruby conferences since 2000, even before he could write a decent Ruby program.

Ruby is at a dangerous crossroads. We need to act, as a community,
to avoid failure. How do we need to behave to remain relevant in the industry —
as programmers, and as a Ruby community? For so long, Ruby has been perceived
as a niche player. The community has been in the habit of fighting, and
defending against FUD. Once we start “winning”, we continue those habits, and
new “converts” to Ruby pickup the same habits. We hear “Ruby doesn’t perform
well”, and we should say “not it doesn’t”. We hear “Ruby doesn’t support
internationalization”, and we should say “no, it doesn’t”.

If you’re at this conference, you’re a pioneer in the dynamic languages
community. In 2001, Matz was the only professional Ruby developer. In 2005,
that had changed because more people were employed to write Ruby code. We’re
“winning” in the sense that we can use Ruby in the workplace. Sun and Microsoft
are hiring people to work on Ruby.

Ruby 2.0 has been vaporware for longer than Perl 6.

The Ruby community of 2006 and 2007 is a melting pot of backgrounds — PHP,
.NET, ASP, 4th Dimension, J2EE, Rails, system admins, the agile community. The
tendency is to take a big community and to run it like a big company. The germs
(PHP programmers) are going to start coming into the community, and
the antibodies are going to start smashing them. There are some germs in the
community that do need to be cleansed. We need to figure out what those germs
are, although some germs we will never get rid of.

There are germs we must be exposed to in order to keep the community strong.

Metaphors influence the way we think about things. Americans think “arguing is war”, and that shapes the way we respond to people in the community. However, not all cultures have that metaphor.

The book “Leading Revolution” by Gary Hamel is worth reading. It has nothing to do with programming. Things designed in Ivory Towers don’t respond well to small evolutionary changes.

If we’re trying to grow as a community, creating a new framework like Rails is a waste of time — there are more interesting problems to solve.

We build systems to support people, and sometimes, geeks forget this fact, and become jerks.

Monkeys in India are brave and annoying when they’re trying to steal food.
In Southern India, they’re controlled by creating holes in the ground, with a larger space at the
bottom. The hole is just big enough for the monkey to slip his hand into, with
food at the bottom in the bigger space. The monkey wants the food, and puts his
hand in. Once he makes a fist by grabbing the food, he can’t pull it out.
Someone comes along and clubs the monkey. The monkey doesn’t let go of the food
because of value rigidity.

In the Ruby community, Chad hopes we are not like the monkey. We need to at
least be cognizant of the rigid values we have, and whether they’re worth
holding onto. Do you identify yourself as a Ruby developer? Hopefully, you are
always reaching for something beyond what you are comfortable with — perhaps
it’s Erlang, Haskell, ocaml, etc. If you’re comfortable, if you know the
answers, you aren’t learning. Try to lead, but also try to be learning
something new.

Chad has done well in the Ruby community by doing the things that no one else
wants to do — organizing Ruby conferences, bringing publicity to Ruby gems.

Linux C++ IDE; NX

Lately, I’ve been developing on Linux. When developing remotely, I can get
along with a shell and vim, with VNC, or with remote-X. However, none of these
options are as fast or as nice as using NX. Here are the instructions to install and use
the NX server and client on Fedora Core 5 and 6:
http://fedoranews.org/contributors/rick_stout/freenx/

What’s the best C++ IDE in Linux? Out of the three IDEs I have evaluated, I’d
recommend either SlickEdit or NetBeans C++. I haven’t tried Emacs. I’ve installed KDevelop, but haven’t tried it much yet.

Eclipse CDT

  Overall: Immature and over complicated. I prefer vim with a ctags file, jedit, nedit, or gedit.
  Code Completion: Broken -- rarely works
  Search by Symbol or Reference: Broken
  Debugger support: Yes. Ugly user interface
  Custom build (bjam): Yes
  Project support: Yes. Automatically adds new files, removes old files from workspace
  Refactoring support: No
  Subversion support: Yes, with plugin

SlickEdit

  Overall: Excellent IDE
  Code Completion: The best of the bunch, but not as good as Visual Studio
  Search by Symbol or Reference: Excellent
  Debugger support: Yes. Difficult to setup
  Custom build (bjam): Yes
  Project support: Yes
  Refactoring support: Good
  Subversion support: Yes
  Notes: Has fairly good key emulation support for Visual Studio, Vim, Brief, Emacs, etc.
  Language Support: Tagging and syntax highlighting for C++, Java, Perl, Python and Ruby (to name just a few).

NetBeans C++

  Overall: Better than Eclipse CDT
  Code Completion: Yes
  Search by Symbol or Reference: Yes
  Debugger support: Yes, but haven't yet figured out how to set breakpoints.
  Custom build (bjam): Yes
  Project support: Not yet evaluated
  Refactoring support: No
  Subversion support: Yes, with plugin or with NetBeans beta 6.0.

KDevelop

  Overall: Not yet evaluated
  Code Completion: Yes
  Search by Symbol or Reference: Symbol - Yes (using ctags); Reference - Unknown.
  Debugger support: Yes
  Custom build (bjam): Most likely
  Project support: Yes
  Refactoring support: Unknown
  Subversion support: Yes

None of these tools are as good at code completion as Microsoft Visual Studio 2005.

Linux, Asus M2V, Attansic Ethernet and SATA hard drive problems.

At work, I got a shiny new Linux development machine — And AMD 64 Dual Core 3800+ processor running on an Asus M2V 1.xx motherboard.

After installing Fedora Core 6, I ran into two problems. First, the built-in Attansic L1 Ethernet adapter wasn’t recognized. Google research revealed that an Attansic L1 driver will probably appear in the mainline Linux kernel in a few months. Rather than wait, I plugged in a supported Ethernet card.

Second, the SATA hard drive driver timed out. Occasionally, the system froze up without many error messages showing up in the system log. I logged in at the console as root and ran “exec tail -f /var/log/messages” (redirecting syslog to a remote machine is a better solution). The next time the system froze up, I saw more output in syslog. It contained approximately the following:

ata1.00 exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2 frozen
ata1.00 BMDMA stat 0x4 timeout
ata1.00 qc timeout (cmd 0xec)

Google helped me stumble on the following workaround, which seems to work. I don’t know what it does. Edit /etc/grub.conf. Find the lines that say “kernel” and add “acpi=force irqpoll noapic hda=noprobe” to the end, and reboot.

title Fedora Core (2.6.19-1.2911.fc6)
        root (hd0,5)
        kernel /vmlinuz-2.6.19-1.2911.fc6 ro root=LABEL=/ rhgb quiet acpi=force irqpoll noapic hda=noprobe
        initrd /initrd-2.6.19-1.2911.fc6.img

Useful commands (helpfully documented on this blog):

  • dmidecode – tells me what motherboard I have
  • lspci – Tells me what built-in ethernet adapter I have
  • cat /dev/cpuinfo – Tells me about my CPU

Best of Breed, or Best of Mediocrity?

Having worked for some time as a software engineer in the enterprise security
software world, I know that customers (enterprises) look for “best of breed”
software. For a large company customer, this usually means that a software
solution distinguishes itself in some way that makes it work well in their
environment. Often, this translates to reliability, cross-platform support,
person-to-person support and the ability to function beyond what is advertised.

As many are aware, there is “consolidation” going on in the security market.
Big fish are swallowing smaller fish, and it’s lucrative, in the short term,
for everyone except customers. Supposedly, the consolidation means that two
separate products can be “integrated”, or unified. Never mind the previous
competitive relationship that may have existed between the product teams and
their management. For some reason, people seem to think that competition
evaporates and that the two product teams will happily work together to build
the next generation “Best of Breed” software solution.

Not so.

In any big corporation or software company, there are constant power plays
being made. You could call this “decision making”, and if you have uncommonly
good leaders, you might even say good decisions are being made.
Unfortunately, it is human nature for most people to misuse and abuse positions
of power. Instead of making product decisions that are best for their merged
customer base, they make decisions that keep themselves in a position of power.

So, we have two best of breed products: Overdog and Underdog. Underdog is
easier to manage, but isn’t as complete in its offerings. Overdog is more
complete, but is more expensive to deploy and manage. Overdog has the advantage
of being used in Fortune 500 companies. Underdog, on the other hand, is trying
to break into that market space.

Enter Big Fish — a.k.a. Consolidator. Consolidator buys Overdog, and a few
years later, buys Underdog. We take two products, both “Best of Breed” in
different ways, and expect to see them merged together to make something “next
generation” — better, faster, stronger, and easier to use.

Whenever there is a consolidation, talented people get fired, and their
creative ideas and abilities are lost. Product integration never happens as
easily as anyone would like to believe (if it happens at all). And in the end, customers end up with a
product that we can best label as “Best of Mediocrity”. Consolidation means
that customers lose their “Best of Breed” solutions.

What can you expect from Software Consolidators? Mediocre solutions. Look
elsewhere for excellence.

Overtime Considered Harmful

I just read “Overtime Considered Harmful” by Basil Vandegriend. Sometimes, overtime can result in increased productivity and success. However, “Working regular overtime (more than a week or two) has a significant negative impact on a person. Factors such as increased stress, strains on family and personal relationships, less sleep, and less exercise all add up over time to affect an individual’s mental, emotional and physical health. Over time, this can result in increased physical illnesses, lack of motivation, and eventually complete burnout.”

I believe that everyone is different in their capacity to handle overtime. I’ve seen some people that can handle working 60 hours a week for months at a time, with little apparent loss in productivity. Other people can’t handle overtime for more than a few days. Those who work 70 or 80 hours a week to meet a deadline almost always burn out and switch jobs when the death-march ends.

A colleage of mine (I’ll call him Brian) refused to work mandatory overtime in order to meet a deadline. Brian’s coworkers became stressed and tired, and made more mistakes. In contrast, Brian came to work each day refreshed, with a sharp mind. He tackled and solved tough problems, fixed other’s bugs, and smoothed out rough edges. His efforts made it possible for the team to meet their deadline. Without his courage and self discipline, the team would have failed.

We owe it to ourselves, our families, our peers, and our employer to work at a sustainable rate; a rate that will maximize productivity and foster teamwork in the long run; a rate that will allow us to lead happy, balanced lives.