A Beginner's Joy with Ruby
Jason Charnes
Phase 1
Deciding how to learn programming
Mobile App Development?
Desktop/Business Development?
Web Development?
Games?
App Development
iOS: Objective-C, Cocoa Framework
Android: Java
Desktop/Business Development
Java
C++
C#.NET
Web Development
PostgreSQL
MySQL
Cross Browser Compatibility
Web Servers
HTTP Status Codes
Git
Ajax
JSON
SASS
CoffeeScript
PHP
Laravel
CodeIgniter
FuelPHP
HTML
CSS
Responsive Design
Javascript
jQuery
Ruby
Rails
Sinatra
Python
Django
Flask
Where to begin
School, it kind of helped...
Visual Basic 1
Intro to Computer Programming with Java
Problem Solving with Computers using Python
Intro to Computer Science with Java
Where to begin
"PHP is the server side language that everyone uses."
So I started trying to learn it.
Phase Two
Creating arrogant garbage
<?php
$knowledge = "little";
for($i = 0; $i < 100; $i++) {
echo "I'm an amazing genius and I know everything.";
}
echo "I don't realize I only have very " . $knowledge . " knowledge";
?>
Creating Arrogant Garbage
<?php
$name = "Jason";
$time = new DateTime();
?>
<html>
<head>
<title>Server side programming is so easy.</title>
</head>
<body>
<h1>What time is it <?= $name ?>?</h1>
<p>It's <?= $time->format('H:i:s') ?></p>
</body>
</html>
Creating Arrogant Garbage
I just need to learn a some SQL and I will be unstoppable.
Creating Arrogant Garbage
Except...
Things are starting to get messy
Phase Three
It's time for a Change
So I started looking for a framework
CodeIgniter
CakePHP
FuelPHP
Laravel
Countless Others
Time for a Change
Trying to pick one was not easy.
"X framework is the best."
"Y framework is the most advanced."
"Z framework is so behind."
"Ruby on Rails"
Time for a Change
"The Ruby community is condescending and snobbish"
"Ruby and Rails are too opinionated"
"Ruby doesn't scale well"
I fell in Love
Our First Date
I started learning Ruby.
www.tryruby.org
Our First Date
15 Minutes Later:
Wait, so it's really that simple?
Yes.
Wait, so it's really that expressive?
Yes.
Jason, are you impressed?
Yes.
Digging In
I want to create and manipulate an object in Ruby:
p = Person.new
p.name = "Al Gore"
p.known_for = ["Being Vice President", "\"Inventing\" the Internet"]
p.feelings_toward_language = "Simple Enough"
Java (School)
Person p = Person.new();
p.name = "Al Gore";
p.known_for[0] = "Being Vice President";
p.known_for[1] = "\"Inventing the Internet\"";
p.feelings_toward_lanugage = "Not too bad at this stage";
PHP
$p = Person.new();
$p->name = "Al Gore";
$p->known_for = ["Being Vice President", "\"Inventing the Internet\""];
$p->feelings_toward_lanugage = "Not a big fan of '->', but not too bad";
Digging In
I want to reverse a string in Ruby:
"The United States of America".reverse
=> "aciremA fo setatS detinU ehT"
Java (School)
String postConstitution = "The United States of America";
String preConstitution = "";
for(int i = 0; i < postConstitution.length(); i++) {
preConstitution += postConstitution.charAt(i);
}
return preConstitution;
PHP
return strrev("The United States of America");
Digging In
I need to loop through an array or a hash in ruby:
colors = %w{red green blue}
colors.each {|c| puts c}
Java (School)
String[] colors = {"Red", "Green", "Blue"};
for(int i = 0; i < colors.length; i++) {
System.out.println(colors[i]);
}
PHP
colors = ["Red", "Green", "Blue"];
foreach($color in $colors) {
echo $color;
}
Digging In
The fun only continued:
There is an unless operator.
Creating a method is nice.
I don't have to use parenthesis.
I don't have to use semi-colons.
No curly braces!
I can transform long lines of code into one line.
Ruby + Rails
The double edge sword: Scaffolding.
"Don't use scaffolding"
"Don't use scaffolding"
"Don't use scaffolding"
Well. I used it.
Ruby + Rails
It Helped.
I learned controllers.
I learned routes.
I learned views.
I painfully learned models.
Rails Guides and StackOverflow
Ruby + Rails
Models
Are just a Ruby Class
Can get complex code out of the controller
Certain actions can trigger methods
Can handle validation
Have a corresponding db table
Ruby + Rails
ActiveRecord, you beautiful SOB.
Person.all
SELECT * FROM people
Person.find(144)
SELECT * FROM people WHERE id = 144
Person.where(name: "Jason Charnes")
SELECT * FROM people WHERE name = "Jason Charnes"
Ruby + Rails
Views
They link to controller actions well.
Partials allow extraction of reusable code.
ERB, eh... It got old pretty quick. But it was easy to pickup!
<div class="people>
<% @people.each do |p| %> <li><%= link_to p.name, person_path(p) %></li> <% end %>
</div>
Ruby + Rails
REST Controllers
def index
@people = Person.all
end
def show
@person = Person.find(params[:id])
end
def new
@person = Person.new
end
...
Ruby + Rails
Other things it taught me:
Introduced me to gems. Thank God.
Helped me learn JSON and AJAX.
Helped me better understand OOP with Ruby.
Helps me create web applications quickly.
Ruby
Other things I learned:
Makes programming feel like writing a sentence.
Has an amazing community of users.
Makes learning complicated concepts easier.
Is my second wife.
Resources
Google
Stack Overflow
Thanks.
A Beginner's Joy with Ruby
By Jason Charnes
A Beginner's Joy with Ruby
- 2,362