6 ms·
Alright, I tried it. Frankly, I'm confused as to why this is getting so many up-votes. If someone could elaborate what they enjoyed so much, I'd be interested t
by randomdrake 14y ago
Alright, I tried it. Frankly, I'm confused as to why this is getting so many up-votes. If someone could elaborate what they enjoyed so much, I'd be interested to hear.
I didn't enjoy this experience one bit. It didn't feel interactive to me. Each step is basically "Run this query that is already typed out for you" without any explanation, whatsoever, about what each part of what I was writing was doing. This was followed by an invitation to click a link to documentation to try something else on the line of code you don't understand.
It begins with:
>r.db('test').tableCreate('tv_shows').run()
My first questions: what is r? What does db() do? Is there a test database somewhere? Why do I have to call run() when there's a button saying "Run this query"? Do you sometimes not run() things?
The tutorial doesn't remember your position if you go back to it so it's a good thing, I guess, that it opens a new tab for you when you access the documentation to list the tables.
Let's move to the second step:
>r.table('tv_shows').insert([{ name: 'Star Trek TNG', episodes: 178 },
{ name: 'Battlestar Galactica', episodes: 75 }]).run()
Even more questions: What happened to r.db('test') that I needed to use? Is r now that database? Why didn't I just do r.tableCreate('tv_shows') before?
I did this with basically every step of the process but stopped just short of finishing because I wasn't learning much and wasn't sure where it was going. I found myself simply wondering what the heck RethinkDB was.
This tutorial could really use some more explanation, interaction, flow and direction. Tell me what I'm about to do. Tell me why what I'm about to do is worth my time and cool. Start with r, go from there. At least I won't be lost from the get-go.
Let me write stuff out as you're telling me what I'm doing. That's interacting.
- manacit 14y agoI couldn't agree more - it's less a tutorial and more a slideshow of 10 queries and the results. Not only that, but I found the documentation extremely lacking (almost nonexistent) when I was attempting to do the additional queries. When I was confused, there was nowhere to see the 'right answer' for the query and an explanation of why, I just had to guess at the syntax until I got it right.
- alecperkins 14y agoSame. A hint that appears after a wrong attempt at the "before you move on" steps and a full explanation that appears after two would be very helpful, especially with steps 7+. Without those it feels like a puzzle instead of a tutorial.
- coffeemug 14y agoThanks. I'm going to implement exactly this.
- alexpopescu 14y agoAwesome feedback! Let me try to address some of these questions here, before figuring out how to improve the tutorial. `r`: is the top level ReQL namespace that gives you access to the functions defined r.db('name'): is accessing the 'test' database. RethinkDB supports multiple databases. You can specify which one to use on a per connection basis or for each query. The 'test' database is a default database (in principle it's similar to MySQL's test database). Being the default also means that you don't need to use `.db('test')` in each query. `run`: ReQL allows chaining multiple functions together. Basically creating a query is a bit like using a builder pattern. These chained ops are all sent to the server and executed on the database. There is a single roundtrip. Basically `run` tells the query builder: "now it's your time to do something for me". As side comments 1. initially we added much more details about each query, but we ended up with quite a bit of text compared to short queries. We thought it would be more intuitive the reduce the description part and provide links to the API. It looks like that wasn't the best solution. 2. we chose to have the query pre-typed instead of having it part of the description only as we assumed mostly everyone would just copy paste it. Assumption proved incorrect! Thanks a lot! alex @ rethinkdb
- randomdrake 14y agoThanks Alex! Appreciate the response. I'm always learning but I was a special education teacher for a while too so I've got some perspective on getting people to understand things. In regards to your side comments: 1) If you feel like there's too much text compared to short queries, that's fine. I'm not there to write gigantic amounts of code. I'm there to learn and write a few little snippets to understand what I'm doing. 2) As I mentioned in my response to coffee, it's much better to actually type out the stuff as you go. It sinks in and immediately starts to develop a feel for writing in the language. Especially considering the non-traditional querying that you've come up with, I think it's very important to take baby steps and treat it as a new language. To continue along the language analogy: teach us each word so we know what the sentence actually says.
- alexpopescu 14y agoI appreciate your feedback. Really really helpful to us (you should see what it triggered on #irc ;-)
- coffeemug 14y agoThis feedback is wonderful, thank you. It's often hard to do a good job when you're neck deep in your own concepts because you lose perspective. (I'm responsible for the tutorial, btw, and it's my screwup). I'll make everything work better. To answer your questions here: > what is r? It's a module where all the RethinkDB operations are defined. The tutorial is running the same JavaScript driver code as you'd run if you connected to C++ RethinkDB server from node.js, which is why you have to start with `r`. > What does db() do? It refers to a database named 'test'. This is where you're creating the table > Is there a test database somewhere? Yes. It's set up by default at the beginning. > Why do I have to call run() when there's a button saying "Run this query" do you sometimes not run() things? Because you can type multiple queries in the text box. Every time you end a query with `.run()`, that's when it goes to the server and gets executed there. We've been talking about not having people type `.run` for a single query, but it's a bit difficult to solve. > What happened to r.db('test') that I needed to use? Is r now that database? If you omit r.db() at the beginning of the query, it picks a default one (which is 'test'). It's the same as you'd do in MySQL. > Why didn't I just do r.tableCreate('tv_shows') before? We thought allowing tableCreate in a default database allows people to make mistakes too easily, so we disallowed it. It confuses people, so we'll add it back. Sorry for confusion.
- randomdrake 14y agoThanks for the response! I completely understand how easy it is to lose perspective when you're the one behind the concepts. I'd recommend checking out TryRuby from Code School to get a better feel for interactivity in a tutorial. It takes you all the way from "That thing over there is an interactive prompt you are going to type things into." Writing the code out yourself is extremely helpful for learning. Folks learn better by writing down what they are trying to understand while absorbing the information; the same is true for programming.
- coffeemug 14y agoWould you mind if I ping you to try things again after I make some changes? Your feedback is really wonderful, it would be immensely helpful to hear what you think after we fix things up. (I know it takes time, so if you're busy, no worries!)
- Detrus 14y agoIndeed I remember doing MongoDB and Redis online tutorials and typing everything out myself and they felt great. This tutorial was too annoying to finish. Took a big break from coding, thought maybe it's because I'm rusty. Apparently not! So take a careful look at Mongo and Redis tutorials. They made it feel easy, maybe why they got so popular. Could also be that RethinkDB has fundamentally more complex syntax so not as suited to quickstart tutorials. When I did Mongo and Redis I didn't know SQL and didn't have to. With innerJoins everywhere you need SQL as prerequisite.