ruby on rails class nov 16-19

I am excited to be teaching a Ruby on Rails class at Marakana in San Francisco on Nov 16-19th. I’ve come to feel that the 1 day workshops just give participants a taste of the technology and a quick peek at the power of Ruby on Rails. After working on the course materials, I still feel that 4-days is a short time, but I am excited to have the opportunity to spend that much focused time teaching a group of students in a small, hands-on class. If you have a need to learn Ruby on Rails, please sign up.

Note: this class has been given many times before at Marakana, so the testimonials are for previous classes with another instructor. I’ll be bringing in some fresh ideas from my teaching experience, but I’ll also be leveraging Marakana’s experience of what has worked well in the past.

For some, this is a high priced training. You are paying for a great training facilities, class materials and an experienced instructor. In terms of value delivered, I expect that to be well worth it and I hope my students will feel that to be true when they finish the class. However, I know there are a lot of people who cannot afford such a class who could really benefit from it. If you read this blog, you know that I do a lot of volunteer work in outreach to women with the Free SFRuby Rails Workshops. I feel strongly that we all need to do what we can to make our community what we want it to be. I’d like it to be diverse in terms of age, race, class, gender and any other aspect of the general population. I am thrilled that Marakana feels the same way and we have agreed to offer full or partial scholarships for one or two students in the class.

Scholarships available
If you feel that your presence will increase diversity in the Ruby on Rails community and that taking this class could have a positive impact on your life and you would not otherwise be able to afford the class, please fill out this short form. Our decision on the candidate will balance your need, how much taking this course will have a beneficial effect and your potential impact on the community. Bonus points for bloggers and twitterers or people who otherwise spread their know-how.

Special thanks to Marko Gargenta and Anna Billstrom for helping to make the scholarships happen.

Posted in general | Leave a comment

mobile phones are the new computer

The mobile phone is the new computer.  The desktop computer is not going away, but the smartphone market is growing fast.  Phones are being used as computers by more people and for more purposes. Just as we still have supercomputers today but most people use desktop computers everyday, soon desktop computers will be relegated to the specialist and elite professional, and most people will use their mobile phones for their computing needs. 

Already there are more mobile phones than computers connected to the internet.  Smartphones are generally cheaper than computers. With their primary role as communication devices, they are often more useful.  The smartphone of today will be the standard phone a few years from now.  With profits from applications growing, we’ll see continued subsidies of the hardware and operating systems by manufacturers and carriers, keeping new phones cheap or free. 

We’re also seeing a change in how people use computers.  More often applications we use are centered around communications (more commonly termed “workflow”) than the more traditional personal computer task of document creation.  In the business world, we file expense reports, approve decisions, or comment on proposals.  As consumers, we read reviews, send short notes to friends, and share photos.  Email is the killer app of the late 20th century, rather than the word processor or spreadsheet.

I’ve never been a gadget geek and have skirted getting into mobile application development before now.  The actual engineering challenges of working with native code on a device doesn’t scare me, but just didn’t seem worth it.  Developing apps for a phone typically meant that you were working for a carrier, directly or indirectly subjected to the whims of a monstrously large company, and often disconnected from the people actually using the application.  Mobile development also seemed to attract the same style of engineer as game development: interested in the tech for itself, with less interest in the end result, and a feeling that the application is “cool” because it runs on a gadget, independent of its usefulness.  Mobile apps weren’t attractive to me as a developer or someone who might use them.  I always said that I would start using a PDA when they had the resolution and battery life of paper, and the phone was suited for direct communication with another human being via voice.

Last year, I started to notice a change.  App development on an iPhone seemed like a different thing.  Applications ranged from useful to silly. Whether they were expressive or empowering, they were more about the people who they were built for, than about those who they were built by.  I bought an iPhone and wrote a couple of toy apps in ObjectiveC, but more notably, I started using my phone as more than a phone: for email, finding directions, micro-blogging, and even the idle entertainment of web surfing.

The iPhone has revitalized the landscape for mobile application development.  However, with all due respect, the BlackBerry had pioneered the “phone as computer” experience, but its focus on business users and Microsoft compatibility has not drawn mass adoption (despite a large group of avid followers).  What we’re seeing now is that BlackBerry’s cutting edge in the business world is complimented by the iPhone’s consumer appeal.  Further, Palm has reinvented its mobile platform and seeks to bring the best of both with a dynamic consumer experience and more power for the applications.  While the iPhone is growing, Symbian and RIM (BlackBerry) still dominate the market

SmartPhone operating systems actively innovate to keep up with advances in hardware and ease development with improved tools and APIs. These innovations are not purely technical.   The iPhone App Store reduced barriers to application development by providing easy access to distribution.  Unsurprisingly, people will develop more apps when there is an accessible market and distribution channel.  Blackberry App World and Windows Marketplace for Mobile are likely to drive the success of existing applications for those operating systems and draw new developers as well. Also OS-independent frameworks, like Rhomobile and PhoneGap, allow developers to reach people on diverse phones with a single codebase.

In a recent article by Gary Kim, Forrester analyst Julie Ask identifies three things as the killer advantages of mobile devices: “immediacy, simplicity, and context.” When those are combined with usefulness, we’re going to start to see a different flavor of software application emerge that will transform the way we use mobile phones. I do believe that referring to the use of software applications as “computing” will become archaic. The age of software as communications medium will have arrived.

Posted in general | 3 Comments

kickstart book by john sundman

John Sundman is working on a new book: Creation Science. He describes it as “a technothriller about scary science — like designer DNA, brain hacking & mind control, computer viruses and biological viruses.”

Please consider supporting the arts and this experiment by an independent writer in alternative book funding. You can pledge any amount.

John has distributed his previous books for free on the web with a Creative Commons license, with a pledge of $15 or more you will receive a printed copy of the book when it is complete, but you can pledge smaller amounts just to support the effort, or if you can afford it, you can be a patron for $250 and get early drafts of the book.

I reviewed his Acts of the Apostles — my favorite of his three books, and just made a pledge to help him keep working on this one. I look forward to reading it. I think that kickstart provides a neat way for independent writers to be funded.

Posted in general | Leave a comment

stone soup workshop

Participating in the Berkman Center Ruby on Rails Workshop for Women was like making stone soup. Not to diminish my part as a teacher or the efforts of volunteers in San Francisco who worked to create the curriculum over the past several months, but the Boston area had all the makings of a successful workshop before I arrived.

Liana Leahy (@lleahy) and Mary Tolbert (@mtolbert) are vibrant leaders, skilled organizers, as well as strong technologists. Ruby on Rails developers from all of the Boston area were drawn by a clear need for teachers and mentors. Volunteers generously shared their experience and trouble-shooting skills. Andy Grigorowitz taught the group who had no prior programming experience. Jim Barkley and Dev Purkayastha also volunteered to teach, but I think ended up joining the group of amazing TAs. The facilities at Harvard provided a supportive physical environment with wireless connections, power outlets embedded in the desks and microphones for each student to ask a question and be heard. The physical environment and supportive human presence contributed to a sense of abundance that I feel is a key part of the workshop’s success.

As important as the event itself are the activities which follow. Josh Nichols and others from Boston Ruby warmly welcomed workshop participants into their midst. The Boston Ruby group offers frequent meetings on the 1st, 2nd and 3rd Tuesday of every month, representing a thriving community of developers. Because so many local developers showed up and offered friendly assistance, it means that people from the workshop can attend a Boston Ruby meetup or hack session and maybe they will already know someone there. It is a powerful thing feeling that you are amongst friends.

I was inspired and honored to be a part of this event. It is my hope and expectation that the work will continue through the Open Source Code Crunch and future workshops.

Awesome volunteers:

Please let me know if I missed you or a link to your website, blog or twitter. I would love to stay in touch!

Fabulous sponsors:
Hashrocket

EngineYard

GitHub

RailsBridge

Special thanks to

Posted in general | 2 Comments

learning through testing

In my recent explorations of how to teach test-driven development (TDD), I have found a number of people writing about using testing for learning.  First I read how Ross Niemi explored the assert method by testing it. He talked about feeling that he would like to prove that he understood the syntax. Then I read how Mike Clark developed his own test suite to teach himself Ruby. He talks about how he “used the language as a tool to explore itself. In the same way that a test is better than a specification, the language is better than a description of the language. The test is definitive.”

Also, as a response to my last post about test-driven teaching, Seth Walker told me about Ruby Koans, which are a delightful test-driven meditation on Ruby syntax. I find them really fun and have been assigning them as homework in my class.

In my work, I often learn about my design or the implications of my implementation through testing. It is one of the things that is so invigorating about TDD. Discovering testing as a self-paced learning tool was simultaneously surprising and obvious.

Posted in general | 1 Comment

test-driven teaching

In preparing to teach a new class, Ruby on Rails Fundamentals, I felt strongly that I wanted to teach test-driven development (TDD).  Initially my motivation was that I found it hard to learn TDD when I learned Rails.  I found little instructional material on the web and the variety of test frameworks was a bit overwhelming.  As an experienced programmer, I understood the methodology (although I hadn’t practiced it much), but couldn’t find good resources to teach myself the basic syntax.  I found cucumber quite approachable, but struggled with TestUnit and RSpec (which I eventually learned well through pair programming).  I figured that if people didn’t learn TDD in an introductory class, how the heck were they to learn it at all?  Also, the last thing I want is for graduates of my class to have experience building web applications in Ruby on Rails that have no tests.

There were negative reactions from some folks via email and twitter, but I had just as many people encouraging the teaching of TDD, so I decided to move forward with my plan.  Wolfram Arnold is a big proponent of throwing the newbies into the status quo.  We should teach them the real thing, not yesterday’s news, and certainly not teach them practices that we would frown upon.  I reflected on my own TDD experience and realized that one of the benefits of TDD and one of the things that makes it hard is that I really need to understand what my code is doing to test it.  That might sound strange, but it is surprisingly easy to get an intended high-level effect you want without really understanding exactly what your code is doing, especially with Rails.  If you force yourself to write a test, you are creating a detailed contract with yourself.  It is a crystallization of your design that requires an understanding of the code.  I thought that would be really good for the class.  We could write tests that cover some important details that it is easy to gloss over as a newbie.  In this way, TDD would start as a teaching/learning tool, rather than the design tool that it usually is in a typical development process.

Today I met with another TDD teaching proponent, Alex Chafee.  He had twittered that he always teaches testing first, and I was intrigued. I joined his regular Sunday study group as a TA, where I had fun teaching about nested routes, debugging collection_select, and spreading the word about nested attributes.  After the class, a few students stayed late and joined me as I learned from Alex about his approach to teaching, which he calls test-driven teaching (TDT).  He did this intially in teaching java and more recently teaching Ruby.  For homework assignments he would give student tests and then they would write the code to make them pass.  This is one of those ideas that I hadn’t thought of, but as soon as he told me about it, the idea seemed an obvious way to teach.  What beter way to specify an assignment that to provide a test?

What I’d ike to do for the class is to start with TDT and then shift to TDD once the students are familiar enough with the Ruby syntax and the Rails object model.  It is perhaps aggressive for 6 2-hour classes, but with homework assignments between classes and students who are already programmers, it seems like it could fit into the time frame.

My first challenge is to figure out what are the essential Ruby language constructs that people need to know for writing Rails applications, what would be good exercises for learning those skills, and then write the tests that would require that code to be written.  It feels like a little bit ‘o Ruby jeopardy.  Alex has promised to meet with me again to brainstorm and I’ll publish what we come up with, but if you are reading this and you write Rails applications, I would love your feedback on what are the essential Ruby skills for a Rails engineer (plus any Ruby, Rails or TDD teaching tips would be welcome).

Posted in general | 8 Comments

rhomobile reflections

I’ve been actively developing mobile applications using the new SmartPhone application framework from Rhomobile.  I wrote an overview of the technology, but folks have asked for some more details.  Below are some reflections from my development experience so far:

Rhodes

Rhodes is the client-side framework that Rhomobile offers. This is the key technology that abstracts the device-specific functions and makes Rhodes (mostly) platform independent. The Rhodes architecture is compelling, simple applications are dead simple, but any real application is going to take thoughtful design and implementation work.  This is really what you want of any technology.  A key strength of Rhodes is that it is open source and you can dive into device-specific code if you have a need — I haven’t done this yet, but just knowing it is there makes me confident that I won’t run into a wall as one always fears when adopting a new framework. I have found that Rhodes significantly accelerates development (once you know its ins and outs).

The major drawback to Rhodes is that it is pretty rough around the edges right now.  The docs give you almost all of the information you need and the rest you can pretty much guess.  The hard part is that there are few examples of the design patterns that that you commonly use in any application that goes beyond a toy; however, the Rhomobile team is incredibly responsive on the google group and very welcoming of contributions to the docs on the wiki and the core code, so it is only a matter of time before this is fixed. I have run into a few bugs, but again, open source helps here.

On the awesome side of Rhodes: you are writing Ruby, CSS and HTML and once you know a design pattern, replicating it for another app (or another part of the same app) is trivial, which is typically not the case with languages like C or Java.  It follows a pattern which a lot of mobile developers are using in their native apps of defining UI in embedded HTML controls that call out to native functions.  Rhodes wires in Ruby, so you can easily embed code in HTML (with erb syntax and some useful helper methods borrowed from Rails).  It seems a natural crystallization of the methodologies that manyfolk are building by hand, which is what you want and expect from any good framework.

RhoSync

RhoSync offers some serious magic. You can write a one page of code on the server side that translates your web service or whatever into a generic result set and then automatically syncs it to the client. I’ve written sync code before: even a basic implementation can stretch your brain and take some work to get right. By using RhoSync you can easily get the data from the server onto your client and vice-versa. Then, when you are out of cell-phone range or on a flaky network, your data is still available on the device, without additional development work. This is well-worth the license fee, and it is free for open source apps.

Final Notes

Rhodes 1.2 is a huge step forward.  It is great to see this company quickly addressing known issues and adding features.  RhoHub is a very cool idea.  It is still in private beta (and deservedly so), but it is evolving quickly and I look forward to its public unveiling.

In summary, if you want to get into mobile app development, you know Ruby and you are comfortable on the cutting edge, Rhodes is a great option right now. If you need to develop a mobile app and you plan to spend some serious time on it, it’s worth starting now, even wih the rough spots, since after you climb the learning curve Rhodes and RhoSync will be a huge time saver.

Posted in general | 2 Comments

ruby on rails class

I’ll be teaching Ruby on Rails in a hands-on class in SF. In starts quite soon, on 8/25. It will be suitable for anyone who has attended one of the recent workshops or for anyone who is a programmer already but just doesn’t know Ruby or Rails. For folks who need to install a dev environment, there’s an SFRuby Meetup install fest on 8/24.  You can sign up for the class online.  Here’s the course description:

Ruby on Rails Fundamentals
You will learn how to create data-driven web applications with Ruby on Rails. Through test-driven and exploratory development, you will become familiar with ActiveRecord, including associations. You will gain an understanding of the SQL implicitly written through your Ruby code. You will learn about customizing views, view helpers, routes and controller actions. At the end of this class, the “generate scaffold” command will hold no magic. There will be short assignments that you will be expected to accomplish between classes.

  • 6 weeks, one 2-hour evening class per week, Tuesdays 8/25 – 9/29, 6:30-8:30pm
  • You must bring your own laptop to work on
  • Prerequisite: you must have already installed Ruby and Rails and be comfortable using command line tools. You must have some programming experience, but need not know Ruby.

In keeping with the workshop tradition, we’ll figure out childcare if there are folks who want to enroll in the class and need it.  Depending on the number of kids, the JCC has some different options, so we need to see what’s needed before we make specific plans.  So, don’t let worries about childcare keep you from signing up!  I know this question can be just as important for Dads and for Moms these days.

Many thanks to Andrea Heilbronner for organizing the class and Michael Pope for organizing the Install Fest. It is great to be part of a community who sees a need and makes things happen.

Posted in general | Leave a comment

diversity in open source

Being a woman in open source is “like walking into a sports bar on game night and wearing the wrong team’s jersey… it can be the friendliest group in the world and you will still feel a little awkward”

Kirrily Robert talks about two open source projects that have a majority of developers who are women. She contrasts this with a FOSS study indicating 1.5% of open source developers who are women in an industry with 10-30% women. Her talk starts with sobering facts, then she moves on to tell inspiring stories and provides practical tips on how we can create diverse and welcoming communities.

archiveofourown.org: 100% women (20+) developers, started with beginner programmers, Ruby on Rails and javascript

dreamwidth.org fork of the livejournal code, 40+ coders, 70% female, they recruit non-programmers, and have an inspiring diversity statement: “neurodiversity is a feature not a bug”

You can teach programming, but you can’t teach passion…. and you can’t teach diversity.

Posted in general | 1 Comment

hacker love songs

A rise in hacker love songs points to a positive sign for women in computing.  What better way to feel like software engineering is hot than to hear about it in a clever, catchy tune?

Coder Girl “feels like my first ‘hello world’… her source is tight… sharper than most chicks you know”

Theory Girl “she doesn’t want to code in C or Perl… because she uses an abstract machine… she knows all of Knuth, volumes 1 through 3.

In Code Monkey, Jonathan Coulton comes out as a coder in love, providing a fun glimpse into the life of a web developer. Here is my all-time favorite performance:

Posted in general | 2 Comments