SlideShare a Scribd company logo
Life Beyond Rails
Building Cross Platform Applications
DEMO
@parasquid
Chief Problem Solver
at Mindvalley
Life Beyond Rails: Creating Cross Platform Ruby Apps
Why not Ruby on the
browser and on mobile?
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
Dead end product
Life Beyond Rails: Creating Cross Platform Ruby Apps
So what if voyager can go to
Mars, or dive in the ocean
So what if your hackathon was
written in JS that runs on both
server and client
So what if your legacy code was
written in Ruby (cross platform!)
Can you reuse a
significant portion of the
code you wrote?
Cross platform is useless
if your code can't be
reused.
Reuse of prior work across
multiple platforms is the biggest
reason why you want cross
platform support
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
“cross platform” is mostly
solved in the physical
world
Life Beyond Rails: Creating Cross Platform Ruby Apps
cable
usb powerbank
usb camera
usb phone
usb ereader
Life Beyond Rails: Creating Cross Platform Ruby Apps
• How does this work?
• Which things can I use this
with?
• What can this do?
• How does this work?
• Which things can I use this
with?
• What can this do?
Encapsulation
Polymorphism
Life Beyond Rails: Creating Cross Platform Ruby Apps
(DESCRIPTOR)
• open()
• close()
• read()
• write()
• seek()
You’re not a beautiful or unique snowflake.
-Tyler Durden, Fight Club
–Linus Torvalds
“Use common tools to
operate on different things.”
principle: common tools operating
on different things
technique: polymorphism
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
Surface Area of the
API is small
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
principle: information hiding
technique: encapsulation
Oooh. But I already
know OOP.
OOP is about
programming with objects
OOP is about
programming with
objects
OOP is about the
organization of your
program
• Procedural
• Object Oriented
• Functional
• Prototype based
• Rails-way based
• Hybrid / Combination
How are
things
connected?
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
Rails is omakase.
I [am] … the head chef of the
omakase experience that is Rails
-DHH
To Rails or not to Rails
Life Beyond Rails: Creating Cross Platform Ruby Apps
–Kent Beck
In a connected system, elements are highly
available to each other (via global state, for
example). Adding the first feature to a
connected system is cheap. All the resources
you need are available. However, the cost of all
those connections is that subsequent features
are very likely to interact with previous features,
driving up the cost of development over time.
–Kent Beck
A modular design has connections deliberately
kept to a minimum. The cost for the first feature
is likely to be higher than in the connected
system, because you need to find the necessary
resources and bring them together, possibly re-
modularizing in the process. Features are much
less likely to interact in a modular system,
though, leading to a steady stream of features at
relatively constant cost.
Life Beyond Rails: Creating Cross Platform Ruby Apps
Stay on the connected curve until the climb
phase, then switch to the modular curve.
Kent Beck
Life Beyond Rails: Creating Cross Platform Ruby Apps
App
Rails
request-response
App
Telnet
Web sockets
streaming
App
RubyMotion
mobile
App
Opal
browser
App
mRuby
hardware
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
Programming is the act
of managing complexity.
Programming is the act
of managing complexity.
Programming is the act
of managing complexity.
Write flexible,
maintainable,
reusable code
@parasquid
Chief Problem Solver
at Mindvalley

More Related Content

What's hot (20)

PDF
Intro to elixir and phoenix
Jared Smith
 
PDF
Serverless Application Model - Executing Lambdas Locally
Alex
 
PPTX
Test automation with Cucumber-JVM
Alan Parkinson
 
PPTX
Programming for the Internet of Things
Kinoma
 
PDF
Reacting to the Isomorphic Buzz
Bruce Coddington
 
PDF
2010-07-19_rails_tdd_week1
Wolfram Arnold
 
KEY
Integration Testing With Cucumber How To Test Anything J A O O 2009
Dr Nic Williams
 
PPTX
Day 8 - jRuby
Barry Jones
 
PPTX
Untangling - fall2017 - week 9
Derek Jacoby
 
PDF
Building Composable Serverless Apps with IOpipe
Erica Windisch
 
PPTX
Untangling11
Derek Jacoby
 
PDF
Phoenix for Rubyists
Doug Goldie
 
PPTX
Untangling - fall2017 - week 10
Derek Jacoby
 
PDF
Donald Ferguson - Old Programmers Can Learn New Tricks
ServerlessConf
 
PPTX
Configuration As Code: The Job DSL Plugin
Daniel Spilker
 
PDF
Learn Elixir at Manchester Lambda Lounge
Chi-chi Ekweozor
 
PDF
Web Development using Ruby on Rails
Avi Kedar
 
PDF
Modernizing Legacy Applications in PHP, por Paul Jones
iMasters
 
PDF
Rob Gruhl and Erik Erikson - What We Learned in 18 Serverless Months at Nords...
ServerlessConf
 
PPTX
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
Sencha
 
Intro to elixir and phoenix
Jared Smith
 
Serverless Application Model - Executing Lambdas Locally
Alex
 
Test automation with Cucumber-JVM
Alan Parkinson
 
Programming for the Internet of Things
Kinoma
 
Reacting to the Isomorphic Buzz
Bruce Coddington
 
2010-07-19_rails_tdd_week1
Wolfram Arnold
 
Integration Testing With Cucumber How To Test Anything J A O O 2009
Dr Nic Williams
 
Day 8 - jRuby
Barry Jones
 
Untangling - fall2017 - week 9
Derek Jacoby
 
Building Composable Serverless Apps with IOpipe
Erica Windisch
 
Untangling11
Derek Jacoby
 
Phoenix for Rubyists
Doug Goldie
 
Untangling - fall2017 - week 10
Derek Jacoby
 
Donald Ferguson - Old Programmers Can Learn New Tricks
ServerlessConf
 
Configuration As Code: The Job DSL Plugin
Daniel Spilker
 
Learn Elixir at Manchester Lambda Lounge
Chi-chi Ekweozor
 
Web Development using Ruby on Rails
Avi Kedar
 
Modernizing Legacy Applications in PHP, por Paul Jones
iMasters
 
Rob Gruhl and Erik Erikson - What We Learned in 18 Serverless Months at Nords...
ServerlessConf
 
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
Sencha
 

Similar to Life Beyond Rails: Creating Cross Platform Ruby Apps (20)

PDF
RESTful Rails Development Building Open Applications and Services 1st Edition...
fanelosiwo
 
PDF
RESTful Rails Development Building Open Applications and Services 1st Edition...
arbeausentie
 
KEY
Ruby On Rails
Eric Berry
 
KEY
Why ruby and rails
Reuven Lerner
 
PDF
49.INS2065.Computer Based Technologies.TA.NguyenDucAnh.pdf
cNguyn506241
 
PDF
Aspose pdf
Jim Jones
 
PDF
Bhavesh ro r
bhavesh-gloscon
 
DOC
Ruby On Rails
iradarji
 
DOCX
Rails Concept
Javed Hussain
 
PDF
Rails - getting started
True North
 
PDF
[.Net开发交流会][2010.06.19]better framework better life(吕国宁)
Shanda innovation institute
 
PDF
Better Framework Better Life
jeffz
 
PDF
Ror Seminar With agilebd.org on 23 Jan09
Shaer Hassan
 
PDF
Ruby on Rails
Momentum Design Lab
 
PDF
RubyEnRails2007 - Dr Nic Williams - Keynote
Dr Nic Williams
 
PDF
Ruby On Rails Basics
Amit Solanki
 
PDF
Ruby On Rails
Balint Erdi
 
KEY
Better framework, better life
Daniel Lv
 
PDF
Welcome To Ruby On Rails
Kevin Lawver
 
PDF
What is Ruby on Rails?
Karmen Blake
 
RESTful Rails Development Building Open Applications and Services 1st Edition...
fanelosiwo
 
RESTful Rails Development Building Open Applications and Services 1st Edition...
arbeausentie
 
Ruby On Rails
Eric Berry
 
Why ruby and rails
Reuven Lerner
 
49.INS2065.Computer Based Technologies.TA.NguyenDucAnh.pdf
cNguyn506241
 
Aspose pdf
Jim Jones
 
Bhavesh ro r
bhavesh-gloscon
 
Ruby On Rails
iradarji
 
Rails Concept
Javed Hussain
 
Rails - getting started
True North
 
[.Net开发交流会][2010.06.19]better framework better life(吕国宁)
Shanda innovation institute
 
Better Framework Better Life
jeffz
 
Ror Seminar With agilebd.org on 23 Jan09
Shaer Hassan
 
Ruby on Rails
Momentum Design Lab
 
RubyEnRails2007 - Dr Nic Williams - Keynote
Dr Nic Williams
 
Ruby On Rails Basics
Amit Solanki
 
Ruby On Rails
Balint Erdi
 
Better framework, better life
Daniel Lv
 
Welcome To Ruby On Rails
Kevin Lawver
 
What is Ruby on Rails?
Karmen Blake
 
Ad

More from Tristan Gomez (10)

PDF
The Art of Tracking
Tristan Gomez
 
PDF
Maker's Schedule, Manager's Schedule
Tristan Gomez
 
PDF
When Javascript isn't Javascript
Tristan Gomez
 
PDF
Slack Bots in Ruby
Tristan Gomez
 
PDF
Vue on rails
Tristan Gomez
 
PDF
2FA and OTP
Tristan Gomez
 
PDF
NuBank - Hyperlocal Banking
Tristan Gomez
 
PDF
How I Hire Developers
Tristan Gomez
 
PDF
Nosql kl-2013-04-25
Tristan Gomez
 
KEY
Meaningful metrics
Tristan Gomez
 
The Art of Tracking
Tristan Gomez
 
Maker's Schedule, Manager's Schedule
Tristan Gomez
 
When Javascript isn't Javascript
Tristan Gomez
 
Slack Bots in Ruby
Tristan Gomez
 
Vue on rails
Tristan Gomez
 
2FA and OTP
Tristan Gomez
 
NuBank - Hyperlocal Banking
Tristan Gomez
 
How I Hire Developers
Tristan Gomez
 
Nosql kl-2013-04-25
Tristan Gomez
 
Meaningful metrics
Tristan Gomez
 
Ad

Recently uploaded (20)

PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PDF
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
PDF
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PPTX
UiPath Academic Alliance Educator Panels: Session 2 - Business Analyst Content
DianaGray10
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
UiPath Academic Alliance Educator Panels: Session 2 - Business Analyst Content
DianaGray10
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 

Life Beyond Rails: Creating Cross Platform Ruby Apps

Editor's Notes

  • #3: I used Ruby to write a streaming app, a request-response app, a client-side web app, and a mobile app.
  • #4: I'm Tristan, and I'm the Chief Problem Solver at Mindvalley. You can find me on facebook and github @parasquid,
  • #5: But now, I love Ruby. Its currently my favorite language. It's the hammer I use to solve all the problems that come my way.
  • #6: If I can just use Ruby all the time, not just for web but also on the frontend, and in mobile, I'll be happy. Then I thought, hey that's a challenge! So I did, and that was the small project I made.
  • #7: So that's it! It's proof that ruby is cross platform! We can now tell everyone we can also do mobile development, we just need to learn how to compile ruby using RubyMotion. Right? The thing is, I think the meaning of "cross platform" is usually misunderstood.
  • #8: What does cross platform really mean then? In order to understand that, we need to know what cross platform isn’t. What does Voyager 2, your legacy Rails app, and your hackathon prototype have in common?
  • #9: They're dead end products. When the Voyager 2 was made, they didn't intend to repair or update it after launch. If there was any glitch or malfunction, the only way to fix it was to launch another probe.
  • #10: In some ways, it made the design process so much easier. The power cells can be directly welded to the modules because they'll never be taken apart anyway. So what if the antenna can only operate on a fixed frequency? There's no need for a tuning knob because it will never be retuned.
  • #11: Then again, Voyager 2 will never change, and will never be used for a different purpose. You're not touching your legacy Rails app because you "don't fix it if it ain't broke," and you'd prefer to just rewrite it from scratch anyway. Your hackathon prototype works well for the pitch, but is not suited for production purposes.
  • #12: It's the same with your code. Ask yourself the question: can you reuse a significant portion of the code you wrote, if by some magical means you can suddenly run your code in a different platform?
  • #13: Cross platform means absolutely nothing if you can't reuse your code. I'll repeat this again, and you know it's important because I said it twice. Cross platform is useless if your code can't be reused. Interesting isn't it? What benefit is it that ruby runs on an iOS device when you have to rewrite the whole codebase from scratch anyway? You might as well just learn swift and do it the way apple wants you to do it.
  • #14: Reuse of prior work across multiple platforms is the biggest reason why you want cross platform support. So how do you design your code so that it is reusable?
  • #15: Let's take a look at the calculator. Notice how the UI and the domain logic are separate. How in this example, we put the React UI, while in this example, we put the telnet UI and here, we put the iOS ui. It's almost as if you're just able to just swap things around just like that! Right? Do you know what this reminds me of?
  • #16: This. A USB cable.
  • #17: I can use the same cable to charge a cellphone, a powerbank, a camera, and various other things. They all follow the same standard so they are all interchangeable. And I don't have to know which pin of the USB connects carries the electricity--I just know that if I plug one end to a power source and the other end to the device, it will charge. Nobody would think of making a phone that has its power cable attached and not detachable. Well maybe Apple might.
  • #18: in majority of the cases, the cross platform problem is solved in the physical world. We intuitively understand how to design products that can be reused. But because software is intangible it's difficult to apply our experience as meatbags to the act of creating software. So what can we take from designing physical products and apply it to software development?
  • #19: Let's take a look at the USB cable example again.
  • #20: Remember when I said they all follow the same standard? That means the USB cable can treat different objects in the same way. They all have the same USB interface, so from the point of view of the cable, they're all the same thing (even though they're not).
  • #21: How about when I said that I need to care about the electromotive force or which pins carry the electricity? That means I don't even have to know how the cable was made in order to use it! I also immediately know that the cable is not for drying my hair, or for opening a can. It was less complicated because the list of things I can do with the cable was small, and the kinds of things I can use the cable was also small.
  • #22: In effect, you’re replacing the questions on the left with this one question on the right. You’re reducing the surface area of the complexity involved. I think some of you would already know where I’m going here.
  • #23: Instead of asking how does this work, or which things can I use this with, I now just ask: what can this do? Encapsulation: What vs How Polymorphism: What vs Which These two might sound familiar. You'd know them from Object Oriented Programming.
  • #24: But they’re not purely the domain of OOP Here’s an example. what does a storage device, an input device, and a network socket have in common?
  • #25: From the Unix perspective, they’re all files. Everything is a file Well technically, everything is a file descriptor. But have you ever wondered how is this possible? How can you have an operating system treating everything as if it’s a file?
  • #26: There are generally five functions you need to implement if you want to write a device driver for a Unix system. open close read write seek If you implement these (and note that returning nil is an implementation; just take a look at /dev/null) then you conform to the file descriptor POSIX API specification.
  • #27: That also means you get the benefits of getting treated just like every other file. Or, just like what Tyler Durden from fight club says: you are not a beautiful or unique snowflake. And that’s a good thing!
  • #28: That means that you can use common tools to operate on different things. Whether it’s a storage device, a network stream, or the keyboard circular buffer, you can use the common unix tools to operate on them even if you don’t care about whether the device responds — just use /dev/null
  • #29: in this case, common tools operating on different things is the principle, polymorphism is the technique
  • #30: you can also have encapsulation without oop in fact, you’re using it all the time. when you open your browser and go to google.com you don’t really care about how google retrieved the search results; all you’re interested in is what the search results are.
  • #31: in a sense, your only public interface is that of the search bar. it represents the big, complicated machinery that is called google search, and presents it as something that can be easily understood.
  • #32: A more code related example: Let’s take a quick look at the calculator brain. Notice how the Brain class only has a few exposed methods, out of which two are used in react: display, input_char. Three if you count new which creates an object out of the class.
  • #33: Here’s the object that have its methods exposed. This isn’t the best implementation of a calculator, but that’s okay. Notice that I can easily refactor or rewrite this entirely without severely affecting the UI framework. Because the UI framework only know about a few very specific api calls, they don’t know a lot about how the brain operates. They are shielded from changes in the brain.
  • #34: That’s because this object has a very small surface area. Note the distinction here. I didn’t say that the object was small - it really isn't. I said that its surface area is small. If you've ever encountered God objects in your code (hint: check all files in your code that end with "service") then you know the problem very well. You have a very hard time debugging your application because it's just so big and complex!
  • #35: Well. You see, the problem isn't that those objects are too big.
  • #36: It’s because God objects are too fat. When your objects try to expose a lot of methods in its interface, the API surface area of your objects is too wide. And that makes your app complex and difficult to manage because these APIs will get used, and you need to remember all of these things. What connects to where?
  • #37: so the principle here is information hiding, and the technique is encapsulation. this concept allows you to represent something really big and complex with something small and simple by exposing a small surface api.
  • #38: But yeah, we all know about this already, right? Ruby is OOP, we use OOP all the time! Here's the thing: If you ask many programmers what OOP is about, they’ll just tell you it’s using objects to do stuff.
  • #39: They’ll tell you that OOP is about programming with objects. It’s not, that’s just a tautology--saying the same thing twice in different words.
  • #40: So no. It’s not just about programming with objects.
  • #41: It’s a different way of thinking about your code, where you tell an object what you want, instead of asking data from it. It is a method of organization. And it’s just one of many.
  • #42: Just like Functional, Prototype-based, Rails-way based, or a combination of these are. They are all ways to organize your program so you can more easily figure out how things are connected. I think we're doing ourselves a disservice by not going back to basics and experiencing for ourselves a whole new different way of writing our apps.
  • #43: If you want to write cross platform apps, you need to write reusable code. Unfortunately, the Rails way of writing apps is not enough.
  • #44: That doesn’t mean that the Rails way is “wrong” or that we should stop using it because it “promotes bad habits” a framework is, after all, just a tool and it is up to the programmer to decide how to use it.
  • #45: DHH famously said that Rails is Omakase, that he is the head chef that decides the experience that is Rails. And this arrangement has been great because Rails is an awesome framework that makes it really easy to make web applications. And that is where we run into a problem with cross platform support; the Rails way is too web centric that it’s very difficult to reuse prior work for other platforms.
  • #46: Does that mean we should just not use Rails or any other framework at all? Not at all.
  • #47: This is Kent Beck, he is the founder of Extreme Programming, the precursor to what we now call agile software development, and from where we get the scrum methodology. One of his papers talked about connected and modular designs, and the Rails way falls quite near to the connected design model. Here’s what he said:
  • #48: This is one of the reasons why Rails apps can be built so fast. I join hackathons, and I always use Rails because it’s really so easy to just build features because I have access to everything. It’s one of the reasons why bootcamps and one day tutorials can show people the power of programming—because producing a usable output is so easy. Here’s the next thing he said:
  • #49: and so we have a problem. A mature system benefits from a modular design. We know about the factory factory jokes in java, but the reason why there’s so much code monkeys in enterprise application development is because the modular design allows easy distribution of work. but it’s so costly to start modular
  • #50: The advice then, is not to ditch connected designs. Kent Beck recommends to stay on the connected curve until the climb phase, then switch to the modular curve.
  • #51: How do you know when the climb phase begins? That’s when experience comes in. How would you even know what to switch to if you’re not familiar with how modular designs look like?
  • #52: We need to find that knowledge to organize your code as if it was a USB cable. That would be really cool. If you wanted to swap the UI, all you needed to do is to write the UI layer for that framework.
  • #53: It would look something like this [request-response] Rails -- App [streaming] Telnet/Websockets -- App [mobile] RubyMotion -- App [browser] Opal -- App [hardware] mRuby -- App
  • #57: — end of illustrations
  • #58: The rails way is what we're familiar with. Many of us started learning ruby because of rails. I got reintroduced to ruby because Mindvalley uses rails.
  • #59: But my point is, that it’s not the only code-organization technique out there. And we haven’t been seeking them out. Have you tried any of these? Have you tried to at least deviate a little bit from the Rails way? Here you have a command-query separation by Bertrand Meyer, here you have event sourcing which says that all changes to an application state should be stored as a sequence of events, and here we have the DCI paradigm which builds on top of OOP.
  • #60: Our industry is still young, but is now mature enough to recognize that there are many different ways to skin a cat. These are just a few presentations tackling a different face of the same issue: we are too web centric because the Rails way makes it easy to write web applications
  • #61: Tightly coupling with the rails framework works great if you want to create apps that are similar to Basecamp, you’re targeting web only, and you know that's the final iteration of your product. But sometimes, your app is far out different from basecamp. If you are planning to reuse a significant portion of your code across platforms, the rails way is not enough. But more importantly, it’s not the only organizational technique available to you.
  • #62: I think that as programmers, we need to start looking beyond what we’re comfortable with, and start rediscovering solutions to problems that have been solved by other disciplines.
  • #63: But if you had only one idea to take home with you, let it be this: that programming is fundamentally an activity by humans, for humans. Many people think that programming equals coding, and that’s really disappointing. That’s just scratching the surface, because programming is more than that.
  • #64: Programming is the act of managing complexity.
  • #65: We often make the mistake of thinking that we're programming for the computer. No, your computer won't run your program faster solely because you used a well designed architecture. But YOU will be faster, because your wonderful but still limited brain can now comprehend the relationships in the code.
  • #66: By organizing our code and designing it so it’s easy to understand, we free our brains and give it space to think about the stuff that really matters: what is your app supposed to do?
  • #67: When you start focusing on that question, and start expanding your toolbox, you end up with more flexible, maintainable, and reusable code. And that’s it. That’s the answer. That's how you write cross platform apps.
  • #68: I'm Tristan, and I'm the Chief Problem Solver at Mindvalley. You can find me on facebook and github @parasquid Thank you