Documente Academic
Documente Profesional
Documente Cultură
Mastering Ruby In 90 Days (or Less)
FOR ENTREPRENEURIAL WEB DEVELOPERS
Raymond Cudjoe @ HookOps
AKA, Your Virtual Rails Client
347 794 2204 | ReProfit Lab
BUILDING A SOLID FOUNDATION IN RUBY AND RAILS 5
This guide is meant to help you acquire the fundamental skills you need to
become a confident Ruby & Rails developer. Using books, video courses and
practical projects, you'll arm yourself with the tools you need to build web
products, including Ruby, HTML & CSS, CoffeeScript and Rails 5.
Additionally, you will learn about best practices, design patterns and principles,
and the fundamentals of visual design. Our goal is to build a solid foundation
that you can expand on to become a professional software developer who uses
Ruby and related tools to create value for yourself, employers and/or clients.
HOW TO USE THIS GUIDE
The best way to use this guide is to start from the Ruby section and proceed
towards the CoffeeScript section. Each section has a Core Activity and an
Assessment.
The core activities are meant to teach you fundamental concepts, and the
assessments are designed for you to use the concepts in a new, unfamiliar
situation because you can’t master a new skill without applying what you’ve
learned.
It’s essential that you complete all of the core activities and assessments.
There are additional readings for each section for the purposes of professional
development. These readings can be done in-between study sessions or during
your commute to work, but please don’t skip them.
I encourage you to read the entire guide before you start doing anything. It’s
almost, always a good idea to know where you’ll end up before you invest your
precious time and a small fortune in acquiring a new skills.
10 REQUIRED READING AND COURSES
There isn’t a shortage of resources when it comes to learning Ruby and related
tools for building SaaS and web products, so I’m only going to show you the
1
exact books and courses I used to master the “hard skills” of software
development.
You’ll notice I’ve included other resources to help you learn what we’ll
categorize as “soft skills” because the ability to produce working software isn’t
enough to create a remarkable career in software development anymore.
You also need the mindset, motivation and mental models that’ll make you
produce software that makes an impact, so that you can stand out from your
peers. And ensure you’re never undervalued and underpaid.
Here are the books and courses you must have in your library if you’re really
serious about breaking into the uber-profitable software development industry:
1. The Passionate Programmer by Chad Fowler
2. Ruby Programming Course by Pragmatic Studio
3. HTML & CSS by Jon Duckett
4. Smashing CoffeeScript by Alex Hudson
5. Don’t Make Me Think by Steve Krug
6. Instant Sinatra Starter by Joe Yates
7. Everyday Rails Testing with RSpec by Aaron Sumner
8. Ruby on Rails Level I Course by Pragmatic Studio
9. Bootstrapping Design by Jarrod Drysdale
10.Practical Object-Oriented Design in Ruby by Sandi Metz
The first thing you probably noticed is that I didn’t list any of the popular free
resources you’re already familiar with. There’s a simple reason for that. And no,
it’s not because free resources aren’t of high quality and useless.
I rarely recommend free educational material because I want you to invest a
small fortune in your education. It’s a psychological hack that incentivizes you
to follow through with your decision to acquire a difficult skill – you’ll take
ownership of your education when you have skin in the game.
2
HOW TO LEARN NEW SKILLS FASTER THAN YOUR PEERS
In the summer of 2010, I wanted to learn Ruby on Rails while I was still a college
student, but I failed miserably. Then in 2013, I stumbled on a little yellow book
called The First 20 Hours: How To Learn Anything...Fast by Josh Kaufman,
who’s also the international bestselling author of The Personal MBA.
In that book, Josh Kaufman describes his research into the field of Rapid Skill
Acquisition (RSA) and shows us how he used the techniques to teach himself the
basics of Ruby programming and web development with Sinatra and other skills.
After failing to improve fast enough for my liking and almost gave up on
learning web development, I applied the techniques when I decided to learn
Ruby and Rails again.
Needless to say, I improved significantly within a couple of weeks.
Since then, I’ve built Ruby gems and released Rails apps I’m proud of. And I’ve
applied the same techniques to learning various other skills, including
copywriting, marketing automation and data visualization.
Here’s a quick rundown of the 10 major principles of Rapid Skill Acquisition that’s
mentioned in the book. You should note that I’ve added another principle that I
believe makes the entire concept of RSA complete:
1. choose a lovable project
2. focus your energy on one skill at a time
3. define your target performance level
4. deconstruct the skill into subskills
5. obtain critical tools
6. eliminate barriers to practice
7. make dedicated time for practice
8. create fast feedback loops
9. practice by the clock in short bursts
10.emphasize quantity and speed
3
11.teach everything you know
I’ll show you how I applied these 11 simple principles to teach myself Ruby and
Rails in record time. First, we’ll take a look at principle number one, choose a
lovable project, but it’s important to remember that these principles help you
train to become an amateur faster, so that you can enjoy the 10,000 hours of
practice required to become an expert.
1. CHOOSE A LOVABLE PROJECT
I invite you to look back at your schooling days. In high school and college, you
were required to complete several projects for grades.
If I were a betting man, I’d bet $1 you completed most of the projects, $5 you
hated the idea of working on yet another project whenever a new one was
assigned, $10 you waited until the last possible minute to complete them.
And finally, I’d bet $100 you never touched the project again once it was
submitted and graded; it just took up disk space or collected dust.
What you’ve just read is a characteristic of non-lovable projects.
They don’t make you excited enough to give them your full attention and effort.
Despite the obvious fact that you didn’t choose the project, most school projects
do not encourage skill acquisition because they focus on mindless repetition of
what you already know, have no immediate benefit to you, and it’s impossible to
be passionate about them, even if your future livelihood depended on them.
Projects that encourage skill acquisition are the exact opposite of school work. A
lovable project is something you care about and produces a short term value for
you. You are more likely to learn the skills required to complete a project if you
care about the project enough to develop a temporary obsession over it.
I started learning to use Rails because I wanted to develop prototypes for app
ideas I had for startups. Although none of those Rails apps became profitable
products, I was able to practice because I was temporary motivated to launch
4
them quickly. To learn Ruby and related tools fast, you need a practical project
you can work on too.
Josh Kaufman learned Ruby and Sinatra because he needed to rebuild his
personal website to support more concurrent users.
I believe DHH wouldn’t have learned Ruby (or created Rails) if he wasn’t
motivated to build Basecamp with Ruby.
And more recently, I wouldn’t have learned how to build Rubygems if I didn’t
need custom command-line apps for work and wouldn’t have learned to
consume APIs in Ruby if I wasn’t motivated to connect with SaaS founders and
their team.
To come up with project ideas that you can use for practice, choose a SaaS app
you currently pay for or interested in selling, then build a basic version just for
yourself. Most SaaS apps have lots of features to appeal to the various user
groups they serve.
Eliminate the features you’ve never used and build a version that includes just
the features you use often. You don’t have to replicate the UI exactly, unless
you’re already a designer; just rebuild the core functionality / features in it’s
simplest form.
2. FOCUS YOUR ENERGY ON ONE NEW SKILL AT A TIME
In order to practice and complete your project, you need to focus your energy on
one new skill at a time because dividing your attention between many new skills
is a recipe for disaster; a recipe for extremely low skill acquisition.
It’s completely understandable that you want to learn many new skills, but if you
spread your limited time and energy across many skills, it will take longer to
notice a significant improvement in any one of them.
If you only have few hours to devote to learning, you are better off focusing on
one skill until you are proficient before moving on to the next one. Context
switching drains your cognitive energy and hinders your ability to learn, so it’s
5
important to focus on one skill at a time.
It’s hard to resist the temptation of working on multiple skills at a time,
especially if you are a curious person or the kind who just likes learning new
things.
The way to deal with this is to establish a “someday/maybe” list, where you list
things you want to explore when you get a chance. This buys you time and
allows you to focus on your current skill without feeling you have given up on a
chance to learn new things.
In the words of Josh Kaufman, “pick one, and only one, new skill you wish to
acquire. Put all of your spare focus and energy into acquiring that skill, and place
other skills on temporary hold.”
Focusing on one new skill at a time that will put you on the path to mastering
your Ruby and Rails skills in the shortest possible time, and become the software
developer you’ve always wanted to be.
3. DEFINE YOUR TARGET PERFORMANCE LEVEL
Rapid Skill Acquisition is all about knowing your desired target performance
level and finding the shortest, fastest path to get there. Your target performance
level for software development depends on your reason for acquiring the skill in
the first place, but keep in mind that the more specific it is, the better.
What is it that you want to achieve and what will you be able to do when you are
done acquiring the skill? What level of performance is “good enough” for what
you’re trying to accomplish with your software development skills?
How do you know you’re done for now?
Your target performance level should be relaxed as well, making it easier to get
there.
When I started learning web development after reading The First 20 Hours, my
target performance level statement was very specific. I wanted to be able to
6
develop and deploy a Rails application I had envisioned without any
hand-holding.
The only personal advice I’d add is that, don’t put a time pressure or any other
constraint on yourself like I did. The more relaxed your target performance level,
the more confident you’ll feel that it’s possible to achieve, which makes it more
likely that you’ll do what’s required to get there.
You can acquire the related skills for web development faster without getting
frustrated if you shoot for capacity and sufficiency at maximum speed, instead of
perfection.
Keep in mind that the most important part of learning any new skill is breaking
through your frustration barrier, which takes 20 hours of deliberate, focused
practice. Getting to your target performance level should be your next focus.
And from there you can decide whether you want to keep going, perhaps to
world class mastery.
4. DECONSTRUCT THE SKILLS INTO SUBSKILLS
We’ve already covered choosing a lovable skill, focusing one’s energy on one
new skill at a time, and defining a desired target performance level when
acquiring a new skill like web development with Ruby and friends. Now you’ll
see why it’s important to deconstruct a skill into its sub-skills before you start.
Let’s take writing for example.
First you need to know all the alphabets, then learn how to put them together to
make words, followed by constructing meaningful sentences. Then you learn to
write proper paragraphs, and eventually essays.
You can imagine what would happen if you skipped the first two steps and
jumped into constructing sentences – years of frustration and incompetence.
Same goes for other new skills; you can’t learn without knowing the
fundamentals.
7
That’s why it’s important to deconstruct a skill into its sub-skills; doing so will
let you know which ones are critical for beginners and which ones are better left
until you are know enough to handle them.
Here is a brief history of my journey into web development with Ruby and
related tools.
In 2010 (The Social Network is released), I made several attempts to learn web
development because I thought I had a brilliant idea for a web app (if you
guessed a social networking app, you’re right).
I bought every book that showed you how to build an application (in retrospect,
they all showed you how to clone Facebook or Twitter). I muddled through them,
but at the end, I could only repeat what was covered in these books and could
not bring my idea to fruition.
What’s the reason?
If you said that it’s because I didn’t have the fundamentals and that I didn’t
actually understand what was going on, you’re right. I was so frustrated, I
wanted to apply to a web development bootcamp. All my concerns about tuition
didn’t matter anymore.
As I researched and visited their websites, I noticed an interesting pattern.
Their beautifully designed websites didn’t just say they’ll teach you web
development.
Every single program said you will learn web development using HTML & CSS,
JavaScript, Ruby and Rails. They broke web development down into its
sub-skills.
No wonder all the books claiming to teach beginners web development from
scratch never work. These books are usually written for those who have
experience with other programming languages or frameworks and need a crash
course in using another one.
8
So it made sense to focus on the core framework being taught (Rails, for
example) and pay little attention to everything else. Beginners need a solid
foundation upon which to build their skills.
That means, to learn Rails, you need to know Ruby. And to actually change the
default styles in Rails, you need to know HTML & CSS. To do cool animations
like slideshows and pop-ups, you must know how to use jQuery to manipulate
the DOM.
Understanding how to effectively combine all these technologies puts you on the
path of becoming a professional Ruby developer. You’ve already solved half the
problem of learning web development by knowing which sub-skills to learn first,
and which ones to ignore until it’s absolutely required.
5. OBTAIN CRITICAL TOOLS
Assuming you want to learn how to play tennis (think Rafael Nadal, Maria
Sharapova and Serena Williams), you can’t really learn if you don’t have a good
racket and tennis shoes, can you?
Most of us already have the critical tools needed to learn web development, a
computer with a decent internet connection. But, we also need additional
resources to help us with our practice.
People who’ve been programming in their mother’s womb can easily look at
documentations and understand what’s going on. For the rest of us, we need
books, video tutorials, in person classes, problem statements, and/or test cases.
Obtaining these resources beforehand will make it easier to practice and acquire
the skills we want faster. We also need to get the best resources and tools we can
afford to buy or borrow. You don’t want a situation where the tools get in your
way and prevent you from learning, right?
It’s difficult to know which resources teach to your learning style given the
plethora of resources out there, the background of the person who created the
training program, and the outcomes that you expects. Also, some people learn
9
better from books, others from videos tutorials or in-person instructions. Still,
others do better with multi-media.
From experience, it’s better to mix things up.
Take the multi-media approach. Use books, videos courses or in-person
instructions, when appropriate. And if you feel adventurous, use
documentations for each of the technologies you want to learn.
6. ELIMINATE BARRIERS TO PRACTICE
Once you have your tools, you need to remove all obstacles that will prevent you
from achieving your goal. There are barriers that can get in the way of practice
when learning a new skill, thus increasing the time it would take to become
proficient. It’s important you identify these barriers early on and eliminate them
before they affect your efforts.
Barriers to practice include significant pre-practice activities such as misplacing
your tools and resources, not having the correct tool before practice and
skipping setup requirements. Having limited access to resources hinders your
ability to practice too.
Other barriers include environmental distractions such as television, ringing
phones, and emails. Emotional blocks such as fear, doubt, and embarrassment
can also get in the way of learning. Each of these barriers make it harder to
practice and increase the time it takes to acquire a new skill.
You can’t rely on willpower each time to overcome them, so it’s better to invest
some time in eliminating them before you start learning. It takes a lot of
willpower not to check email and Facebook frequently.
I was lucky that I had developed a habit of using only my mobile phone to access
both email and Facebook. All I needed to do was toss my phone somewhere that
wasn’t an arm’s length away, somewhere I couldn’t reach without getting up
from my desk.
10
7. MAKE DEDICATED TIME FOR PRACTICE
Often, when we want to acquire new skills, we also want to keep doing most of
the other things we love doing, so we end up not having the time we need. Thus,
we tell ourselves, we will get around to acquiring the new skill when we “find
time.”
However, no one ever finds time. There are limited set of hours in a day and we
can’t magically find extra time if we don’t actively make it.
You can make time for practice by eliminating low-value use of your time.
Cutting the amount of time you spend watching TV, reading gossip magazines,
playing video games and engaging in other low-value activities can help you find
time for deliberate, focused practice.
By keeping a simple log of your daily activities for a week, you will know which
ones are not necessary, and can be safely eliminated from your daily routine. At
least for the duration of your learning.
In addition to making time for practice, pre-committing 20 hours to practicing
your new skill will help you overcome the obstacles and frustration you are
bound to face when you start learning.
By pre-committing 20 hours and not stopping until you’ve practiced for 20 hours
or reached your target performance level, you ensure that little issues in the
beginning will not stop you.
Finally, the more hours you devote to daily practice, the faster you will acquire
the skill. Practicing for 90 minutes or more a day is ideal for Rapid Skill
Acquisition.
When I started learning, I had a summer job that required that I left home at
noon and I couldn’t do much at night because I was usually tired by the end of
the day. The only way I was able to get 90 minutes or more of practice per day
was to wake up early, usually at 5AM.
11
Around that time, there was no body awake to interrupt me.
I can’t confidently give advice as to what you can do to make time for practice
because we all have different habits and responsibilities. But I’m sure there are
certain habits and activities that aren’t good use of your time.
Keep a log of all your activities for a week to find out which activities you can
safely eliminate and you will have enough time to practice. Obvious ones to
eliminate are long hours of late night TV and Netflix reruns.
8. CREATE FAST FEEDBACK LOOP
Getting fast feedback is likely the most important principle of Rapid Skill
Acquisition. Creating fast feedback loops mean getting accurate information
about your performance as quickly as possible.
The longer it takes to get feedback, the longer it will take to acquire a skill
because you can’t associate your success or failure to a particular activity and
correct your mistakes.
Depending on the skill you are acquiring, you can incorporate feedback from a
number of sources. These sources include coaches, video cameras, computer
programs and training aides that alert you of your mistakes.
You should note that the more sources of feedback you can incorporate into your
practice, the faster you can acquire the skill. One of the reasons learning to
program is easy, fast and mildly addictive is the near instantaneous feedback it
provides.
You write a line of code and you can tell within a few seconds whether it behaves
as expected. If it doesn’t behave as expected, you delete and try again. Feedback
of that sought is bound to make you a better, faster learner.
9. PRACTICE BY THE CLOCK IN SHORT BURSTS
12
Another technique you can use to make your skill acquisition faster is to practice
by the clock in short bursts. You need to practice by the clock in short bursts
because human brains aren’t built to estimate how long an individual has been
doing something.
When you aren’t good at something, you overestimate how long you’ve been
practicing and usually get frustrated when you don’t experience enough progress
that matches the time you think you’ve spent.
Practicing by the clock combats this behavior. Similar to pre-committing at least
20 hours to acquire a skill, you must also pre-commit at least two sessions of
practice per day when learning a new skill.
Set a clock for about 45 minutes per session, and once you start, you can’t stop
until time runs out. The more sustained periods of practice sessions you have,
the faster you’ll acquire your new skills.
10. EMPHASIZE QUANTITY AND SPEED
As a beginner it’s tempting to focus on perfection when learning web
development, which sets you up for frustration. It is more important to focus on
quantity and speed while maintaining a good enough form than focusing on
perfection.
Josh Kaufman tells a story about a pottery class that was split into two. One class
will be judged on quantity of pots made, the other the quality of pots. At the end
of the class, not only did the quantity group have the most pots, they also had
the best pots. Why, you ask?
The quantity group improved on each pot they made, while the quality group
fixated on perfecting the one pot they worked on. By making more pots and
learning from the experience, the quantity group learned what would make the
next pot better than the previous one.
13
Quantity and speed is important in web development as well. The best
developers, musicians, and writers aren’t so because they are geniuses. Instead,
they get better over time, with each new piece they work on.
The more deliberate practice you put in, the faster you can acquire your skills,
the better you get overtime and reach world-class status if that’s your goal.
11. TEACH EVERYTHING YOU KNOW
I added this principle to Josh Kaufman’s Rapid Skill Acquisition techniques
because I believe teaching is the fastest route to mastery and expertise in every
field. To practice this principle, simply maintain a blog, newsletter or answer
questions on forums to share some of things you’ve learned because it solidifies
your understanding of topics.
It’s likely you’re reading this because you visited my blog; this very guide started
it’s life as a blog post back in 2013. If you’ve found value from it, then I
encourage you to teach everything you know too.
It doesn’t matter if this is your first hour of learning web development, there’s
someone out there who knows less than you and will appreciate your
perspective. You don’t have to wait until you’re a “professional developer” to
start being helpful to others.
SETTING UP YOUR DEVELOPMENT ENVIRONMENT
To setup your development environment for Mac OS, follow these instructions.
To setup your development environment for Linux, follow these instructions.
And to setup your development environment for Windows, I’d encourage you to
do a parallel installation of Linux; then setup a Linux development environment.
You can use a text editor you’re already familiar with, but Atom and Sublime
Text 3 are highly recommended. Pick one text editor and master the interface
and shortcuts.
14
You’ll also need a GitHub, GitLab or BitBucket account to host your code,
manage projects and build software alongside other developers; I prefer GitHub
because it’s more popular among Ruby / Rails developers, and has integrations
with advance software delivery tools that you’ll discover later in your career.
TEACH YOURSELF RUBY PROGRAMMING
Ruby is a dynamic, object-oriented programming language that emphasizes
simplicity and programmer productivity. Ruby’s simple syntax and English-like
readability makes it easier to learn compared to other programming languages.
Yukihiro “Matz” Matsumoto from Japan developed Ruby in 1995, but it wasn’t
popular until Ruby on Rails web framework was released in 2005. Ruby is among
the top ten programming languages on GitHub
Learning Ruby will give you the foundation you need to develop Ruby, Sinatra,
and Rails applications, including other rack-based application.
LEARNING OBJECTIVES – You should be able to:
★ Understand and use Ruby Language Constructs
★ Write Object-Oriented programs
★ Understand and apply Object-Oriented Design Principles such as
Polymorphism
★ Use Blocks and Iterators effectively in your Ruby programs
★ Organize your Ruby code for reuse, unit testing and distribution
★ Provide Input/Output support for your applications
★ Write and run Unit Tests with RSpec
★ Package and distribute your code as gems
★ Use proper Ruby Programming Idioms throughout Ruby programs
CORE ACTIVITIES, ASSESSMENT AND RETROSPECTION #1
1. Enroll and start this Ruby Programming course by Pragmatic Studio
15
Please make sure you complete the exercises for each module because
they are essential to your learning. Don’t just download or copy & paste
the solutions.
Also, don’t rush through the course; spend about 45 minutes per session
to avoid information overload and to allow your brain enough time to
process the everything you’ve learned. You can ignore the Bonus Round,
“CrowdFunding” application because it’s superfluous for our purpose of
building a strong a strong foundation in software development with Ruby
in 90 days or less.
2. Start reading The Passionate Programmer by Chad Fowler. Write down or
highlight which tips are relevant to you, considering where you are in your
software development career and what you’re trying to achieve with your
new skills.
3. As you know, software developers learn about new business domains
before they’re able to write software that has the correct business logic.
For your first assessment, go to Khan Academy and watch the first 4
videos on banking. Then write a Ruby app that makes record keeping
easier for a bank in a remote location without an internet connection.
Assume the Ruby app will be used by one “trusted leader” to record every
transaction, instead of pen and paper.
4. Answer the questions below to write your first retrospection, which also
doubles as teaching everything you know about software development
with Ruby so far.
a. Were there any unexpected difficulties and how did you handle
them?
b. How would you evaluate your programming ability?
c. Which areas do you need to work on?
d. If you knew another language already, what’s your impression of
Ruby?
e. Which tips from The Passionate Programmer resonate with you? And
how do you plan to use them to create a remarkable career too?
16
f. Set up a Jekyll site, deploy to GitHub pages & publish your
retrospection.
TEACH YOURSELF HTML / CSS
HTML is an abbreviation for Hypertext Markup Language. Web developers use
HTML to tell web browsers whether a piece of text on a web page is, for example,
a list, header, link, table or an image, and web browsers use this information to
structure and display the page as described.
CSS is an abbreviation for Cascading Style Sheets and it’s used to make web
pages more attractive. Web developers use CSS rules to change, for example, the
color, size, font, and typeface of text on pages.
LEARNING OBJECTIVES – You should be able to:
★ Use HTML TAGS semantically to structure web pages
★ Name Classes and IDS semantically
★ Understand how the Box Model works
★ Understand Floating and Positioning
★ Style text on web pages using CSS
★ Build full layouts for websites
★ Use a grid system or framework
★ Use View Source feature of the browser
CORE ACTIVITIES, ASSESSMENT AND RETROSPECTION #2
1. Skim the Table of Contents, plus the HTML section of HTML & CSS:
Design and Build Websites by Jon Duckett. It’s tedious and boring to code
along, especially if you dabbled with web development before, so it’s
better to use this book as a reference.
2. Write an HTML layout based on your favorite website, or one of these
GitHub Pages themes (there’s a preview link in the README for each
theme). Please don’t do yourself a disservice by using the “View Source”
feature of the browser until you’ve exhausted all options.
17
3. Now, skim the CSS section of HTML & CSS: Design and Build Websites,
then style the HTML page layout you wrote earlier; it doesn’t have to look
exactly the same as the page it’s based on.
4. Start reading Don’t Make Me Think by Steve Krug.
5. Use Skeleton CSS Boilerplate to build a personal webpage. Be sure to
highlight recent accomplishments, skills, activities/hobbies you enjoy,
favorite quotes, as well as images and videos.
6. For your second retrospection, to be publish to your blog, answer these:
a. What advice would you give a person new to designing and building
sites?
b. What are some essential processes, and tips from Don’t Make Me
Think.
TEACH YOURSELF SINATRA AND PADRINO
Sinatra is a minimalist web framework that handles mundane tasks involved in
the functioning of websites. You might know about Rails and its capabilities, but
it’s not always the right tool for the job.
Sinatra does not impose any of the conventions that Rails imposes on developers
and it gives developers greater freedom to structure applications as they see fit.
It’s also a great way to introduce beginners to web development. If you only
want to serve a few web pages, you should consider using Sinatra, the classy web
framework.
LEARNING OBJECTIVES – You should be able to:
★ Differentiate between Modular and Classic Sinatra apps
★ Create and deploy classic style applications
★ Create and deploy modular applications
★ Use a relational database in modular apps
★ Explain HTTP Verbs, Handlers and CRUD
★ Use ERB templates to display dynamic content
★ Test applications with RSpec and Capybara
18
CORE ACTIVITIES, ASSESSMENT AND RETROSPECTION #3
1. Skim Instant Sinatra Starter by Joe Yates and complete this short tutorial,
Designing With Class: Sinatra + PostgreSQL + Heroku. Now, deploy the
website you coded for your assessment in the HTML & CSS section to
Heroku.
2. Go to Rubycon, play around with an objective of figuring out how it works
so that you can develop the same application. You don’t need to use the
same tech stack, but try to duplicate the functionality.
You should note that the tech stack for Rubycon includes, ActiveRecord
for ORM, PostgreSQL for database, RSpec + Capybara for integration
testing, and Skeleton framework for design.
3. Skim the Table of Contents of Everyday Rails Testing with RSpec by
Aaron Sumner, so that you can find chapters that are relevant to testing
your Sinatra application. You’ll also use what you learn here when you
work on Rails apps.
4. Here are a few questions to brainstorm topics for your next retrospection.
a. Write about a difficult problem you faced and how you solved it.
b. Explain a new concept that reflects your understand.
c. If you’ve used Rails before, what are some similarities and
difference?
TEACH YOURSELF RUBY ON RAILS 5
Ruby on Rails, often shortened to Rails, is an open source web application
development framework created by David Heinemeier Hansson in 2005. Rails is
powered by Ruby; hence, the name “Ruby on Rails”. Rails is designed to help
web developers create dynamic websites with minimal configuration.
Today, Rails is used by many companies including Yellow Pages, Hulu and
Groupon to power web applications that are used by thousands of people
19
worldwide. Rails is also popular amongst SaaS startups and there are many
consultancies that specialize in developing Ruby on Rails applications.
LEARNING OBJECTIVES – You should be able to:
★ Create Models, Views & Controllers, with and without Built-In
Generators
★ Create a Forms that saves records into a database
★ Query the database
★ Validate ActiveRecord objects
★ Create One-to-One and One-To-Many ActiveRecord associations
★ Whitelist Attributes In ActiveRecord
★ Implement User Authentication and Authorization
★ Add Pagination when displaying data in your applications
★ Deploy the application to cloud servers
★ Evaluate and choose a Rails starter templates
CORE ACTIVITIES, ASSESSMENT AND RETROSPECTION #4
1. Enroll and start this Rails 5 programming course by Pragmatic Studio.
Again, don’t forget to complete the exercises for each module, and avoid
copying and pasting the solutions so that you’re engaged throughout the
course.
2. Continue reading Everyday Rails Testing with RSpec; and/or move on to
Object-Oriented Design In Ruby. Remember to take notes while reading.
3. Create a Rails version for Rubycon, but this time add user authentication
and authorization, where only administrators can perform CRUD actions.
Ideally, everyone can read/click on links. Signed in users can upvote a link
to bring so that the most popular links is always at the top. As always, use
test-driven development when building your app.
4. For your fourth retrospection, use these questions to brainstorm a topic.
a. What problems did you face, and how did you solve it?
b. What’s your solution to a difficult problem you faces?
20
c. Explain a new concept you learned, including when you’ll apply it?
TEACH YOURSELF COFFEESCRIPT / JQUERY
JavaScript lets web developers add animations, interactivity and visual effects to
websites. However, due to browser inconsistencies, writing pure JavaScript code
is not always practical. JQuery is a JavaScript library that makes it easier to add
interactive features to websites and in some ways, makes it easier to learn
JavaScript.
CoffeeScript is “a little language that compiles into JavaScript.” CoffeeScript was
developed to expose the better parts of JavaScript and it compiles one-to-one
into the equivalent JavaScript. The goal of CoffeeScript is to help developers
write more concise and readily understandable code.
LEARNING OBJECTIVES – You should be able to:
★ Use CoffeeScript to Manipulate the DOM
★ Understand and use Click Handlers
★ Understand and use Event Handlers
★ Know how CoffeeScript is used with forms
★ Understand and implement AJAX requests
CORE ACTIVITIES, ASSESSMENT AND RETROSPECTION #5
1. Skim Smashing CoffeeScript by Alex Hudson, read Understanding
Progressive Enhancement, Progressive Enhancement with CSS, and
Progressive Enhancement with JavaScript.
2. Start skimming Bootstrapping Design by Jarrod Drysdale.
3. Enhance some features in your Rails app with CoffeeScript.
4. For your final retrospect, write about something you found intriguing,
challenging or reflects your understanding of the steps it takes to release a
production quality web app that’s robust and secure, easy to use and
uber-profitable with Ruby and related tools.
21
10 ADDITIONAL READING FOR ELITE RUBY & RAILS DEVELOPERS
1. Pragmatic Thinking and Learning by Andy Hunt
2. Ruby Science by Thoughtbot
3. The Rails 4 Way by Obie Fernandez et al.
4. Multi-tenancy with Rails by Ryan Bigg
5. The Official Rails Guides
6. Metaprogramming Ruby by Paolo Perrotta
7. Confident Ruby by Avdi Grimm
8. Modern Payments Processing by Pete Keen
9. Your Customer Creation Equation by Brian Massey
10. Modular Rails by Thibault Denizet
25 MUST-READ BOOKS FOR PRODUCT CREATORS & MARKETERS
1. Cracking the PM Interview: How to Land a Product Manager Job In
Tech
More than a primer on which interview questions to prep or how to write a killer
resume (although this book cover both), McDowell and Bavaro get to the core of
what the position of a product manager really is. Examine the role from all sides
to learn not only how to land a job, but master your daily responsibilities and
advance your career as well.
2. The Product Manager’s Survival Guide: Everything You Need to Know
Follow this book’s blueprint for graduating from novice to confident product
manager. Start by understanding the keys to success, then learn how to become
a product expert and customer advocate, effectively manage your teams and
increase productivity, and further your career.
3. The Product Manager’s Desk Reference (2nd Edition)
A companion resource to The Product Manager’s Survival Guide, keep this
all-in-one reference on your desk to quickly look up product management
22
strategies, processes, tools, and templates. Haines doesn’t stop at logistics — he
also covers the soft skills you’ll need to lead your team to success, collaborate
with other departments and teams, and communicate with stakeholders.
4. Product Management for Dummies
This comprehensive reference offers easy-to-understand explanations of the
essentials of product management, from defining the product life cycle and
creating a winning product strategy, to gathering customer feedback. This 5-star
reviewed book is an essential addition to your product management toolkit –
whether you’re a novice or experienced veteran.
5. Intercom on Product Management
Available as a free download, this book offers expert guidance on customer
relationships, evaluating your product, deciding which features to improve, and
(just as important) which features to ignore. Authors Des Traynor and John
Collins have compiled a must-read that will set you up to face the tough
decisions you’ll make on the way to building great products.
6. Hooked: How to Build Habit-Forming Products
Use behavioral psychology to hook customers and keep them coming back —
without resorting to expensive and aggressive advertising. Learn how to create
“viral loops” so users instinctively reach for your product, build customer
engagement, and develop products people love.
7. Inspired: How To Create Products Customers Love
Unless your product is valuable, usable, and feasible, it’s not worth building. So
says Marty Cagan, whose book takes you through how you should decide which
products and designs to pursue, how to prove your proposed product will be
successful, defining a minimum viable product, and juggling the conflicting
needs of execs, customers, sales, engineering, and design.
23
8. The Design of Everyday Things: Revised and Expanded
Ever pushed a door handle instead of pulled? Or examined a new device from
every angle, baffled by how to turn the thing on? Cognitive scientist Donald
Norman argues that design isn’t just looks meant to catch a customer’s
attention; it’s the key to why some products satisfy customers and earn their
loyalty while others flop. He’ll remind you not to get caught up in slick
technology and forget that your main job is to solve human problems.
9. 100 Things Every Designer Needs to Know About People
Design isn’t just pretty, it’s purposeful. You want people to respond to your
website in a certain way, or take a specific next action, so learn why people act
the way they do: what grabs their attention? Is peripheral or central vision more
important? What’s the best length for a line of text? What fuels people’s
actions? Dr. Weinschenk uses her 30+ years as a behavioral psychologist to offer
strategies for improving your site’s user experience and boosting conversion.
10. Don’t Make Me Think, Revisited: A Common Sense Approach to Web
& Mobile Usability, 3rd Edition
First published in 2000, this bestseller is considered required reading for web
designers and developers. The updated third edition includes fresh examples and
a new section on mobile usability, plus tips to make navigation intuitive, user
testing efficient (so you can do it more often), and your user experience seamless
across all devices.
11. Innovation Games: Creating Breakthrough Products Through
Collaborative Play
Research all you want, but when it comes time to roll up your sleeves and
develop a product, predicting what your customers want, need, and will actually
pay for can turn into a guessing game. Drawing on years of consulting
24
experience, Hohmann created 12 games development and design teams can play
to get real insights into their end users’ underlying needs and desires.
12. The Lean Startup: How Today’s Entrepreneurs Use Continuous
Innovation to Create Radically Successful Businesses
You’ve heard all about Lean, cutting waste, and process efficiency. All of that
sounds great, but how do you apply those ideas and actually reap those benefits?
Eric Ries shows how you can leverage Lean principles in a practical way to
shorten development cycles, measure actual progress, and create a team that can
adapt and adjust to changes and opportunities instantly.
13. Lean Analytics: Use Data to Build a Better Startup Faster (Lean Series)
What good is it to build a groundbreaking product if nobody wants it? Your
business will fall flat if there’s no market for what you’re offering. By knowing
what to measure and how to analyze the data you gather, you’ll be able to
pinpoint your target customers, confirm whether the problem you’re solving is
real (and profitable), and determine the best version of the product to build.
14. Rocket Surgery Made Easy: The Do-It-Yourself Guide to Finding and
Fixing Usability Problems
Typical user testing is time-consuming and expensive. Learn how to do regular
user testing with a few people who are representative of your end users and get it
done in a single morning. How to text your design to find the most important
problems and target your resources to fix them efficiently using the “least you
can do” approach. By catching problems early, it’s easier to fix them.
15. Dealing with Darwin: How Great Companies Innovate at Every Phase
of Their Evolution
Innovation isn’t just breakthrough technology or a revolutionary new product
that disrupts the entire market. Innovation occurs at all stages of the product, in
both emerging and mature markets. Use his lessons to keep your product and
25
company moving forward, no matter how big you are or how long you’ve been
around.
16. Lean UX: Applying Lean Principles to Improve User Experience
Inspired by Lean and Agile principles, this book will teach you how to develop a
minimum viable product, quickly experiment with different ideas, test them with
real users, and perfect your chosen design. Find stories, guidelines, and
templates to help you collaborate more efficiently with both your development
team and end users, and set up a quick design process that gives users what they
really want.
17. Crossing the Chasm: Marketing and Selling Disruptive Products to
Mainstream Customers (3rd Edition)
Spur adoption not just among early users, but across every customer segment.
Moore defines four stages of how a product spreads among its customer base:
early adopters, the early majority, late majority, and laggards. The trick is
crossing the gap between early adopters and the early majority, a chasm that
many products and companies fail to bridge. Find out how you can spur adoption
not just among your early users, but your entire customer base by capturing the
attention of each vital user segment.
18. Inside the Tornado: Strategies for Developing, Leveraging, and
Surviving Hypergrowth Markets
Once your product launches, you have a very small window of opportunity to
convince mainstream customers to embrace it. This whirlwind is what Moore
calls “the tornado,” and he presents marketers with strategies for reaching
customers quickly so their products don’t take a nosedive after launch. In this
follow-up to Crossing the Chasm, you’ll find strategies for moving between
niche markets and winning as many customers as possible, as quickly as
possible.
19. The Four Steps to the Epiphany
26
Stop focusing on methodologies and start focusing on customers. Too often
development teams build a product and when customers don’t bite, they scrap it
and try again. Instead, Steve Blank focuses on Customer Development — a
concept that’s since become one of the three pillars of the Lean startup. Learn
how to pinpoint the right product for your specific market, using techniques
Blank now teaches at UC Berkeley, Stanford, and the Columbia/Berkeley Joint
Executive MBA program.
20. The Sales Acceleration Formula: Using Data, Technology, and
Inbound Selling to Go from $0 to $100 Million
As an MIT alum with an engineering background, Mark Roberge challenges
conventional sales methods with a metrics-driven, process-oriented approach.
Applying his formula as SVP of Worldwide Sales and Services at HubSpot,
Roberge helped the company grow from a three-person startup to an IPO with
15,000+ customers and a billion-dollar valuation. Learn Roberge’s techniques for
applying data to accelerate sales and generate demand for your product.
21. Priceless: The Hidden Psychology of Value
Product marketers play a key role in getting products off the shelves, and pricing
is a huge part of that equation. In this book, author William Poundstone explains
how behavioral decision theory changes the way business price products, along
with proven strategies you can use to persuade customers to purchase.
22. Marketing of High-Technology Products and Innovations (3rd Edition)
This comprehensive introduction to the world of tech marketing explains all the
variables you’ll need to consider when launching a product, as well as the
logistics for managing the process. From migration paths and types of
innovations to managing customer relationships, you’ll find a good balance of
theory and real-world examples to get the knowledge you need on the world of
tech marketing.
27
23. In Search of Stupidity: Twenty Years of High Tech Marketing Disasters
Some products never take off, and others flop spectacularly. Learn from their
mistakes to make sure the same thing doesn’t happen to you! Chapman points
out all-too-common missteps so you can watch out for them in your own work.
It turns out you don’t always have to have the best or most innovative product —
you just have to make smart decisions.
24. Positioning: The Battle for Your Mind
Your customers have a zillion people talking to them, and they’ve learned to
tune out the noise. How do you get through to them and grab their attention in a
positive way? Learn how to choose the best name for your product, build a
strategy for making the most of your current market position, use the right
metrics to improve your campaigns, and pinpoint your competition’s
weaknesses.
25. To Sell is Human: The Surprising Truth About Moving Others
Whether you’re pitching a colleague on a new idea, convincing your manager to
support a passion project, or trying to sway a customer to switch from freemium
to paid, we all spend our days trying to move others to act. Bestselling author
Daniel Pink teaches you how to truly understand another person’s perspective,
and craft clear, persuasive marketing messaging.
28