This podcast talks about how to program in Java; not your tipical system.out.println("Hello world"), but more like real issues, such as O/R setups, threading, getting certain components on the screen or troubleshooting tips and tricks in general. The format is as a podcast so that you can subscribe to it, and then take it with you and listen to it on your way to work (or on your way home), and learn a little bit more (or reinforce what you knew) from it.
…
continue reading
Content provided by Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones. All podcast content including episodes, graphics, and podcast descriptions are uploaded and provided directly by Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones or their podcast platform partner. If you believe someone is using your copyrighted work without your permission, you can follow the process outlined here https://player.fm/legal.
Player FM - Podcast App
Go offline with the Player FM app!
Go offline with the Player FM app!
Episode 012: Embrace the REPL
MP3•Episode home
Manage episode 225340258 series 2463849
Content provided by Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones. All podcast content including episodes, graphics, and podcast descriptions are uploaded and provided directly by Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones or their podcast platform partner. If you believe someone is using your copyrighted work without your permission, you can follow the process outlined here https://player.fm/legal.
Christoph complicated development by misunderstanding the REPL.
- We go back to the roots of Christoph's experience with Clojure...
- How do I run Clojure code?
- The REPL is fun for evaluation, but how do you run a "real" program?
- Experience in other languages: edit the file, compile, rerun the program
- Mentality: get through the edit, compile, run loop as fast as possible!
- Autobuilder is the logical end.
- "Where's my autobuilder in Clojure?!"
- The REPL model is fundamentally different.
- "[The REPL] is like cutting the Gordian Knot. You change the problem and that's how you solve it."
- "The reason why the problem I wanted solved, wasn't 'solved', is because nobody has that problem because they do things differently here."
- Tactic 1: edit, save, restart the REPL
- "Restarting the REPL isn't super slow, but let's just say it's not instantaneous."
- Tactic 2: edit, save, run
(use 'the.namespace :reload)
in the REPL - "Now I have a REPL history of
use
statements!" - Problems:
- forgetting to reload dependent namespaces
- loading dependencies in the wrong order
- old definitions built up
- Big Problem: function renames left the old version around, so accidental calls using the old name produced no errors and ran old behavior!
- Back to quitting the REPL to clean out the cruft. Ugh!
- Discovered
clojure.tools.namespace
! Reloads everything and cleans out the cruft! - Tactic 3: edit, save,
(use '[clojure.tools.namespace.repl :only (refresh)])
,(refresh)
- Problem:
refresh
would purge itself! - "I don't know why it took me so long to discover the magical
user
namespace!" - The REPL will automatically
use
theuser
namespace. - "I can put code into a
user
namespace and it will be there for me." - Christoph would switch namespaces in the REPL without even stopping to wonder what namespace he started in.
- "It's like walking out of a door and not even thinking about the fact you're in a building. Oh wait! What room did I just leave?"
- Tactic 4: make sure
refresh
is in theuser
namespace, edit, save,(refresh)
- However, Christoph still didn't understand the REPL.
- Just thought the REPL was for:
- reloading the code and restarting
- evaluating snippets of code
- inspecting stuff
- Nate's big ah-ha moment: "Not only is my application inspectable, it's fungible. I can change it in place as it's flying along! I don't have to restart it!"
- Christoph's hint that there was still more came from seeing
comment
blocks in code and reading about vim-fireplace. - "There's a new room you can explore. That room is editor integration with the REPL."
Clojure in this episode:
use
clojure.tools.namespace.repl/refresh
clojure.pprint/pprint
Related projects:
113 episodes
MP3•Episode home
Manage episode 225340258 series 2463849
Content provided by Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones. All podcast content including episodes, graphics, and podcast descriptions are uploaded and provided directly by Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones or their podcast platform partner. If you believe someone is using your copyrighted work without your permission, you can follow the process outlined here https://player.fm/legal.
Christoph complicated development by misunderstanding the REPL.
- We go back to the roots of Christoph's experience with Clojure...
- How do I run Clojure code?
- The REPL is fun for evaluation, but how do you run a "real" program?
- Experience in other languages: edit the file, compile, rerun the program
- Mentality: get through the edit, compile, run loop as fast as possible!
- Autobuilder is the logical end.
- "Where's my autobuilder in Clojure?!"
- The REPL model is fundamentally different.
- "[The REPL] is like cutting the Gordian Knot. You change the problem and that's how you solve it."
- "The reason why the problem I wanted solved, wasn't 'solved', is because nobody has that problem because they do things differently here."
- Tactic 1: edit, save, restart the REPL
- "Restarting the REPL isn't super slow, but let's just say it's not instantaneous."
- Tactic 2: edit, save, run
(use 'the.namespace :reload)
in the REPL - "Now I have a REPL history of
use
statements!" - Problems:
- forgetting to reload dependent namespaces
- loading dependencies in the wrong order
- old definitions built up
- Big Problem: function renames left the old version around, so accidental calls using the old name produced no errors and ran old behavior!
- Back to quitting the REPL to clean out the cruft. Ugh!
- Discovered
clojure.tools.namespace
! Reloads everything and cleans out the cruft! - Tactic 3: edit, save,
(use '[clojure.tools.namespace.repl :only (refresh)])
,(refresh)
- Problem:
refresh
would purge itself! - "I don't know why it took me so long to discover the magical
user
namespace!" - The REPL will automatically
use
theuser
namespace. - "I can put code into a
user
namespace and it will be there for me." - Christoph would switch namespaces in the REPL without even stopping to wonder what namespace he started in.
- "It's like walking out of a door and not even thinking about the fact you're in a building. Oh wait! What room did I just leave?"
- Tactic 4: make sure
refresh
is in theuser
namespace, edit, save,(refresh)
- However, Christoph still didn't understand the REPL.
- Just thought the REPL was for:
- reloading the code and restarting
- evaluating snippets of code
- inspecting stuff
- Nate's big ah-ha moment: "Not only is my application inspectable, it's fungible. I can change it in place as it's flying along! I don't have to restart it!"
- Christoph's hint that there was still more came from seeing
comment
blocks in code and reading about vim-fireplace. - "There's a new room you can explore. That room is editor integration with the REPL."
Clojure in this episode:
use
clojure.tools.namespace.repl/refresh
clojure.pprint/pprint
Related projects:
113 episodes
Alle afleveringen
×Welcome to Player FM!
Player FM is scanning the web for high-quality podcasts for you to enjoy right now. It's the best podcast app and works on Android, iPhone, and the web. Signup to sync subscriptions across devices.