Skip to main content
CF

Classic Season 5

3h 32m 54s
English
Paid

Welcome to Classic Season 5! Dive into a series of lessons where you will learn advanced programming concepts, practical applications, and refactoring techniques. Let’s explore how to optimize your code and enhance your understanding of various programming languages and frameworks.

Lesson 1: What Goes in Active Records

In the "What Goes in Active Records" series, we explore design constraints for ActiveRecord models. This lesson addresses the challenge of long test files for small classes. By creating a new value class and tightening interfaces, tests become shorter and easier to understand. The refactoring leaves the tests isolated from Rails, significantly boosting efficiency and speed.

Lesson 2: Collapsing Services into Values

Building on the previous lesson, this session converts the Subscription value object to a database table and ActiveRecord model. Initially, the User class managed subscription logic, which gets streamlined by extracting to its own model. This raises important questions about the suitable location for logic in a complete system.

Lesson 3: Understanding Rubinius

Rubinius, a Ruby implementation, blends Ruby with C++. We’ll review its structure, focus on load order, and object system bootstrapping. This session includes a practical exercise: removing a feature by updating related source files and verifying changes through tests and inspections.

Lesson 4: Comparing Python and Ruby Object Systems

While Python and Ruby offer dynamic expressiveness, their approaches diverge. Python emphasizes attributes, whereas Ruby focuses on methods. This delineation influences language peculiarities, including Python's focus on correctness and Ruby's efficiency in method handling.

Lesson 5: Validating Data Integrity in Rails

Exploring Rails apps, this lesson highlights the pitfalls of controller-level data validation and ActiveRecord limitations. We examine bypass strategies, their consequences, and solutions via real database constraints to maintain robust data integrity.

Lesson 6: Decoupling with Actor-based Concurrency

Addressing hard coupling in code, this session suggests separating object boundaries to enhance design and testing. We explore alternative dependency management methods beyond dependency injection, enabling smooth transitions to actor-based concurrency models.

Lesson 7: Overcoming Primitive Obsession

Primitive obsession, or using basic data types in place of domain-specific objects, compromises design clarity. This lesson reviews the Screencast class transition to a structured object model, showcasing how this shift affects software architecture.

Lesson 8: Isolated Testing without Stubs or Mocks

Discover methods for writing isolated tests by separating data from behavior in objects. Testing focuses on value parts, preventing dissonance with production code. This approach serves well for data-heavy classes, avoiding complexities linked to stubs and mocks.

Lesson 9: Multi-paradigm Refactoring

This screencast covers refactoring across imperative, object-oriented, and functional paradigms. Beginning with imperative form, the lesson transitions through object-oriented approaches to functional solutions, highlighting strengths and limitations of each.

Lesson 10: Bug Report to Test Driven Development

Transform bug reports into tests for targeted defect resolution. This lesson emphasizes step-by-step test-driven development, facilitating problem-solving even when stack traces are deceptive or incomplete.

Lesson 11: Test Style Transition to RSpec

Pre-BDD test cases often lacked expressiveness. We refactor Hamster's test suite to an example style, balancing test coverage and readability with human-readable specifications for effective testing.

Lesson 12: Exploring C and Its Unit Tests

Most underlying software systems are crafted in C. This session introduces a C-based project, discussing its unit tests and structural similarities to object-oriented design principles, despite being lower-level.

Lesson 13: Analyze System Performance Tools

Performance analysis ranges from load average simplifications to detailed DTrace insights. Here, we evaluate tools like /usr/bin/time for measuring involuntary context switches, crucial for detecting system behavior anomalies.

Lesson 14: Implementing Theoretical Actor Syntax in Ruby

Utilizing Ruby's flexibility, this session demonstrates implementing theoretical actor syntax in practical code. By progressively making syntax operational, this lesson reveals the actor model’s potential.

Lesson 15: Asynchronous Test Execution Techniques

This lesson presents ways to run tests asynchronously using tools like tmux and Unix primitives. Learn to communicate between processes for smoother and more efficient test management strategies.

Lesson 16: Comprehensive Test Recommendations

A comprehensive guide to test design covers separating unit and integration tests, using stubs strategically, and listening to test setup complexities. Adopting these practices leads to streamlined and effective testing.

Lesson 17: Embracing Rails Primitives for Refactoring

While often critiqued, this session shows when Rails primitives offer optimal design solutions. By refactoring controllers, behavior is effectively separated, leaving controllers streamlined for HTTP interactions.

About the Author: Destroy All Software

Destroy All Software thumbnail

Destroy All Software is the long-running technical-screencast publication of Gary Bernhardt, one of the most distinctive voices in software craftsmanship online. Gary is best known for the legendary Wat lightning talk on JavaScript / Ruby quirks and for his deeply opinionated, deeply rigorous screencasts on testing, type systems, and code design.

The CourseFlix listing carries three Destroy All Software titles: Web Framework from scratch (a from-scratch Ruby web framework implementation) and two Classic seasons covering the back catalog of Gary's screencasts. Material is paid and aimed at developers who want to think harder about the craft of writing software, not faster.

Watch Online 18 lessons

This is a demo lesson (10:00 remaining)

You can watch up to 10 minutes for free. Subscribe to unlock all 18 lessons in this course and access 10,000+ hours of premium content across all courses.

View Pricing
0:00
/
#1: Collapsing Services Into Values
All Course Lessons (18)
#Lesson TitleDurationAccess
1
Collapsing Services Into Values Demo
11:11
2
Splitting Active Record Models
10:37
3
Removing a Rubinius Feature
11:41
4
Python vs. Ruby Objects
08:56
5
Where Correctness Is Enforced
09:33
6
Separating Arrangement and Work
10:52
7
Primitive Obsession
15:49
8
Isolating by Separating Value
11:06
9
Imperative to OO to Functional
13:22
10
Debugging With Tests
09:47
11
Test Cases vs. Examples
14:00
12
A Bit of C
11:03
13
Analyzing Context Switches
11:47
14
Actor Syntax From Scratch
14:35
15
Running Tests Asynchronously
08:18
16
Test Recommendations
16:22
17
When Rails Is Right
10:47
18
A Day in The Life
13:08
Unlock unlimited learning

Get instant access to all 17 lessons in this course, plus thousands of other premium courses. One subscription, unlimited knowledge.

Learn more about subscription

Related courses

  • Your training programs | MR ANATOLY (MEN PRO WORKOUT) thumbnailUpdated 2y ago

    Your training programs | MR ANATOLY (MEN PRO WORKOUT)

    By: Mr. Anatoly (Vladimir Shmondenko)
    8 Week Training program for gym. An advanced program for training in the gym, on average 4-5 workouts per week. Home workout program for 8 weeks: You can train
    32m
  • Mind-Blowing Science: Season 2 thumbnailUpdated 2y ago

    Mind-Blowing Science: Season 2

    By: Wondrium (The Great Courses), Scientific American
    Mind-Blowing Science is back! Season 2 of our National Capital Emmy® Award-winning series has arrived and it’s chock full of even more mind-blowing moments as a
    4h
  • Sound Design with Cubase thumbnailUpdated 2y ago

    Sound Design with Cubase

    By: DesignCode (Meng To)
    Many techniques and parameters can be used to create your sound, whether it be from samples or your own recordings. To achieve this you need the right software
    1h 57m

Frequently asked questions

What prerequisites should I have before enrolling in this course?
Prospective students should have a solid understanding of programming concepts and experience with Ruby on Rails, as the course involves advanced topics like ActiveRecord models and refactoring techniques. Familiarity with object-oriented programming and database management will also be beneficial for lessons such as 'Collapsing Services Into Values' and 'Splitting Active Record Models'.
What kind of projects or applications will I work on during the course?
The course involves practical applications that focus on refactoring and optimizing code, such as converting a Subscription value object into a database table and ActiveRecord model in the 'Collapsing Services Into Values' lesson. Students will also explore debugging strategies in 'Debugging With Tests' and the transition between programming paradigms in 'Imperative to OO to Functional'.
Who is the target audience for this course?
The course is aimed at experienced developers who are looking to deepen their understanding of advanced programming concepts, particularly in Ruby on Rails. It is ideal for those interested in improving code efficiency, testing methodologies, and exploring the integration of different programming paradigms.
How does the depth of this course compare to similar offerings?
This course delves into advanced topics such as refactoring, testing, and programming paradigms with a focus on practical applications. It covers unique areas like 'Actor Syntax From Scratch' and 'Primitive Obsession', providing a comprehensive exploration beyond typical intermediate courses that focus solely on basic ActiveRecord or Rails development.
What specific tools or platforms will be used in the course?
The course primarily uses Ruby on Rails, focusing on ActiveRecord for database interactions and refactoring techniques. Additionally, it covers programming paradigms using Python and Ruby, as highlighted in 'Python vs. Ruby Objects', and includes lessons on testing strategies relevant to these environments, like 'Running Tests Asynchronously'.
What topics are not covered in this course?
The course does not cover introductory topics related to Ruby on Rails or basic programming principles. It assumes prior knowledge and does not delve into front-end development or user interface design. The focus remains on advanced programming techniques, refactoring, and efficient testing strategies.
What is the time commitment required to complete this course?
Although the total runtime is listed as 00:00:00, students should expect a significant time commitment given the advanced nature of the topics. Completing 18 lessons, including practical coding exercises and refactoring projects, may require several weeks to fully absorb and apply the concepts, depending on prior knowledge and experience.