Skip to content

Instantly share code, notes, and snippets.

Created August 11, 2017 20:56
Show Gist options
  • Save anonymous/c22bf95ec8995b7ec2e4d87caec570c3 to your computer and use it in GitHub Desktop.
Save anonymous/c22bf95ec8995b7ec2e4d87caec570c3 to your computer and use it in GitHub Desktop.

As the Co-Founder and Dean of Flatiron School I thought it important to write a response to the recent implication that because a school switched their curriculum focus from Ruby to Java that means the Ruby and Ruby on Rails Job Market is Waning or the popularity and importance of Ruby and Ruby on Rails is diminishing.

During my career as a programmer I have worked primarily in ASP, Javascript, PHP, C#, and Ruby with a sprinkling of many other languages including Java. As a teacher, I've taught Web Development with Ruby on Rails and Javascript for over 5 years and helped thousands of students begin their careers in code.

At Flatiron School we are obsessed with the employment outcomes of our students. For 4 years we've taken it upon ourselves to publish an independently audited and verified Jobs Report detailing how our graduates perform in the job market. We're proud that for 4 years with over a thousand graduates we've maintained a 97% and above employment rate in technical roles.

The truth is that the language a programming school teaches should not be a direct correlation to the job market. We are a pioneer in Bootcamps and in even in 2012, Java and PHP had larger markets than Ruby. Bootcamps are not effective by simply teaching toward the largest employment market. What has made our graduates succeed is a curriculum that teaches programming beyond a specific language by focusing on abstract and universal concepts and most importantly, the meta-skill of learning how to learn. Sure, a Flatiron School alumni knows Ruby and Javascript proficiently, but what makes them so competitive is that they can learn anything pretty fast. Our graduates go on to work in every language I can name, including an engineer writing Java for Boeing 757s.

The very idea that a programmer should be defined by their first language seems tremendously myopic to me. No programmer worth their salt defines themselves as solely a Ruby programmer or a PHP programmer. We are programmers and programming languages are just our tools and we can adapt our toolset to different circumstances and problems. Branding new programmers as “Java” or “Python” by their bootcamp seems hazardous to me lest the student forever limit their potential by the language they were told they mastered, never taught how to learn something foreign, and lacking the confidence to see their identity outside a language. The tension of vocational schools is blending practical, market-driven, curriculum with more holistic, universal, and philosophical skills that prepare them not just for a first job, but rather a prolific career.

The claim that there is less demand for Ruby programmers is irrelevant. As I mentioned and will expound on, I do not believe in teaching people how to be a “Language” programmer. We can continue teaching Ruby first and I’m confident are graduates will still be competitive applicants despite the perceived demand for Ruby in the job market. However, I think it’s important to say that I think Ruby is still an in-demand skill and a growing job market. Ruby on Rails is still the language of startups, spawning new coanies with every execution of “rails new.” Beyond startups, massive, publicly traded and private companies, have been using Ruby and its ecosystem for years and I don’t see that stopping any time soon. From Ruby on Rails being the primary backend for companies like Shopify, GitHub, Twitch, Airbnb, and more to Chef being a Ruby DSL, there are just so many amazing opportunities for Ruby work. Is it as big as Java? No. But that doesn’t matter because the market for Java and Ruby is hardly saturated and programmers shouldn’t vet opportunities by language anyway.

I don’t think it is educationally prudent to develop a curriculum around being a “Java” or “Ruby” or “Language” programmer as that homogenizes your graduates, confines their job opportunities, limits their competitiveness, and fails to prepare them for a career of lifelong learning. Citing a waning popularity of Ruby and Ruby on Rails for a curriculum switch seems suspect to me because in our experience with our thousand of graduates, we see no such lack of demand, I see companies of every size continuing to embrace Ruby, and a great school should qualify a graduate to work in any language they desire to master.

If the first language a school teaches is not directly tied to career outcomes and less important than meets the eye, why does Flatiron School continue to teach Ruby first instead of the new hotness that is Javascript or some other cutting-edge language like Java? What is really important about the first language a student learns?

Programming is an art. Just like poetry or dance or music, the particular style or language of expression, french poetry or spanish, modern dance or ballet, classical music or techno, is of little importance to the art. Poetry is not about Italian or English or German, but rather poetry is about abstract ideas like rhyme, meter, imagery, metaphor, rhythm, form and more - universal concepts that any language can express. Programming is not about Ruby or Java or Javascript or C#. Programming is about abstraction, semantics, encapsulation, logic, interface, and more and those ideas are expressed in every programming language.

As a beginner programmer, the most important thing to really learn are those universal ideas to code expressed through your first language. The danger is that if you are taught a first language in the spirit of “this is all you need to know to get a job” you’ll never learn to recognize those concepts and miss the forest for the trees and not understand how to approach a new language. Tragically, you’ll also miss all the beauty and elegance there is to code.

The joy of programming does not hide in the technical implementations of one language or another, it is found in the wonder of the medium itself, in the “science of operations” as Ada Lovelace called it. Ada goes on to prophesize, “the science of operations, as derived from mathematics more especially, is a science of itself, and has its own abstract truth and value.” Learning to code without learning to recognize the abstract truth in the craft is tragic. A language is never the most important thing to learn when learning to code. The most important thing to learn when learning to code is the absolutely astonishing beauty of code. Students should fall profoundly in love with code.

We teach students to love code first and foremost and Ruby is an attractive choice for the task. What makes Ruby such an amazing first crush for programmers is inherent in the design of the language. Yukihiro Matsumoto, known as Matz, the Japanese inventor of the language, explicitly states his desires with the language, “The goal of Ruby is to make programmers happy. I started out to make a programming language that would make me happy, and as a side effect it’s made many, many programmers happy.”

Programming languages are invented for hundreds of reasons, almost all of which have to do with the environment of the code - to compile easily across platforms, to optimize parallel processing, to “run faster,” and the such. As far as I know, the only programming language in history invented for your happiness is Ruby. The Ruby language values you, the programmer, over the machine. An early and prolific Ruby programmer known as _why_the_lucky_stiff describes Ruby: “Ruby is so... To code ruby is really to love, to feel passion, to feel pleasure, it stirs you inside so greatly, it’s such a beautiful language, also erotic i would say. Method calls striped, undressed of their parenthesis, chaining them together raw like... Just red ebullient jewel.”

These human-centric values are echoed again in many design choices of the language, perhaps the most inspiring is the choice in Ruby to provide many ways of accomplishing the same task. Implementation choice is generally seen as a deficit of a language, in fact Python states in “The Zen of Python” the following value: “There should be one-- and preferably only one --obvious way to do it.”

Ruby provides an endless manner of ways to doing something. Matz was asked once at a conference why he would design a language with so many ways to do the same thing and I think his answer speaks to the true heart of the Ruby language, “I want to make Ruby users free. I want to give them the freedom to choose. People are different.” To me that isn’t about programming, or certainly not just about programming, it is a cultural value, the importance of freedom. To Matz, freedom is expressed by the ability to choose. What’s “right” for one person might not be “right” for another and neither are wrong, they are just different, and they should be allowed to be different without judgement. I believe in that value in life, from religious freedom to marriage equality, to political affiliation, and certainly in code.

Values like happiness and freedom might seem frivolous and foreign when embraced by a programming language. After all, who cares about the ideology of a programming language, certainly not the computer processing the code, so what’s the point, what does Ruby gain by prioritizing the programmer over the machine? And why do these nuances in the languages design matter when considering what language to teach a programmer first?

Programming languages are just tools. The thing about tools is that they seem interchangeable and inconsequential. Seminal programmer Edsger Dijkstra counters, “The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities.” To paraphrase with a cliche, “When all you have is a hammer, everything looks like a nail.” The tool you use will directly influence how you think. How you think about a problem is everything. Thus, the tool you choose to approach a problem will constrain your thinking which will impact your success. Every tool is designed with inherent values. A hammer’s design values the force of the swing, a heavy solid hammer head on top and a light long body to create a long arc for impact. A screwdriver values torque with its long shaft married to a specific screw type and handle perfectly sized to be rotated in your hand. Can you hammer in a nail with a screwdriver, probably. Is it easy, efficient, elegant, or encouraged by the tool? No. The value of a tool defines how it will be used and how a tool can be used is everything to humanity.

What’s all this have to do with Ruby? Well I know that I love Ruby and have never loved a programming language before or since like I love Ruby and I’ve been programming for 20 years and know dozens of languages. And it’s not just me, lots of programmers upon learning Ruby fall in love. _why_the_lucky_stiff expresses the sentiment I think many programmers feel at the root of their love:

“My conscience won’t let me call Ruby a computer language. That would imply that the language works primarily on the computer’s terms. That the language is designed to accommodate the computer, first and foremost. That therefore, we, the coders, are foreigners, seeking citizenship in the computer’s locale. It’s the computer’s language and we are translators for the world.

But what do you call the language when your brain begins to think in that language? When you start to use the language’s own words and colloquialisms to express yourself. How can it be the computer’s language? It is ours, we speak it natively!

We can no longer call it a computer language. It is the language of our thoughts.”

And here’s the thing about Ruby I can’t quite explain and is lost on most inside, and certainly outside, the programming community. Why are Rubyist constantly the inspiration and implementation for so many of the major innovations in modern web development? Web Development today is fast, both in performance and productivity, best-practices and conventions are common across languages, and developer tooling and workflows are now a requirement. Rubyists pioneered rapid development frameworks like Ruby on Rails whose conventions allowed you to build a blog engine in 5 minutes. Ruby on Rails was the first major framework to embrace REST and make it a standard. A few Rubyists thought SVN Version control and the Trac web-interface sucked and embraced Git and built GitHub. The Express.js DSL and so many other Domain-Specific-Languages are created in Ruby and ported to other languages. Heroku, the mother of no-hassle, virtualized, web application hosting, was started by Rubyists for Rubyists. Rubyists have started so amazing companies, GitHub, Twitch, Twilio, AirBNB, Shopify and more. For such a niche language, the impact and influence of Ruby is incredible.

Here’s how I explain it and it goes back to the tools we use. Innovation requires doing something differently. A team of Rubyists are fed up with how Ruby on Rails applications manage dependencies, the open-source programs that your application can use to speed development. To solve the issue they create an open-source software library called Bundler to solve the problem. Every programming language has implemented a Bundler-like solution, including yarn, by facebook, an improvement over npm (node-package-manager), an almost direct port of Bundler. They decided to try something different with Dependency Management.

Around the same time, another group of Rubyists thought it would be amazing if people could rent out their extra living spaces. It was crazy so they used Ruby on Rails to quickly build a working viable product and iterate on it quickly. For years they tinkered and eventually the market and product clicked and we have AirBNB.

I can tell many stories of entrepreneurial success in both the programming and business world with Rubyists at the heart. I’m not claiming an exclusivity in amazing to the Ruby community, but I look around and so many incredible improvements that changed the world in ways we still can’t fully know have a thread in Ruby.

Why do so many Rubyists succeed by innovating and inventing? The Ruby language encourages and empowers innovation. If a hammer is meant to be swung and a screwdriver meant to be turned, Ruby is meant to create. The Ruby tool wants you to be happy and when we are happy we can play and explore. The Ruby tool wants you to value expression and allows you to communicate as purely as a human-language. The Ruby tool wants you to be different and make the language your own. The Ruby programmer inherits these values and they fuel the creative human spirit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment