improve-getting-started 2021-08-25

@pez has joined the channel

set the channel description: Where we ask the questions: What do beginners struggle with? https://clojureverse.org/t/what-do-beginners-struggle-with/5383 and What can we do to lessen the struggle?

Jakub Holý (HolyJak) 2021-08-25T14:35:57.000700Z

@holyjak has joined the channel

@seancorfield has joined the channel

I think @alexmiller should be added as well, but I also think he is invited everywhere 😃

Also @yogthos might be interested.

Alex Miller (Clojure team) 2021-08-25T14:43:03.003500Z

@alexmiller has joined the channel

👋 1
👋🏻 1

set the channel topic: How can we make the journey from curious about Clojure to REPL-ing away in the editor a delightfully smooth experience?

❤️ 1

I asked around at Pitch for people who had just started with Clojure and immediately got in contact with such a person. We agreed to try an async interview and I wrote down some questions. The respons was a cheerful “Great questions!” so I think it might be something to build from. Sharing them here so that we can collaborate on improving on the list.

❤️ 1

Not sure if you others can edit the snippet, but otherwise I can be the edit monkey. 😃

Would you be interesting in having other beginners answer these questions? I'd be happy to answer them myself and might also be able to help with collecting from others. (For example, I could create a Google Form that we could post in the #beginners channel asking for responses. We could maybe even add the link to the channel description so that it doesn't get lost.)

Would I be interested? Do bears shit in the forest? (As we say in Swedish). Haha. Let me be clear: Yes, I would be interested! Sounds great with a Google Form.

😄 English has the same idiom (though we usually say "woods" rather than "forest"). I'll create a to-do for porting your snippet to a Google Form. I'll aim to complete it by the end of this weekend.

❤️ 1

@pez Here is a first draft of a Google Form version of your questionnaire: https://forms.gle/ZLDqBNXCnkm7hksG8 / https://docs.google.com/forms/d/12pOyLmSxMuZs_OGP5Lv4vOPKY-Z08oQy0vfNJtGJIXg/edit?usp=sharing. I have modified it slightly, consolidating some questions and adding others. I still have not yet filled it out myself, which I think will likely lead to further revisions. (Unfortunately, I might not get time to do that until next weekend.) For additional inspiration beyond your questionnaire, I drew from the https://www.surveymonkey.com/results/SM-S2L8NR6K9/ and the https://insights.stackoverflow.com/survey/2021. I would welcome your feedback on how to improve the form!

Posted! I'll let you know when we get responses.

Thanks, @pez. I can see the value of having a more qualitative prompt about demographics. I'll let you know once I've made that edit.

@pez I've now edited the form to replace the quantitative demographic questions with a single qualitative question. I've also filled out the form myself and you can view the responses https://docs.google.com/forms/d/12pOyLmSxMuZs_OGP5Lv4vOPKY-Z08oQy0vfNJtGJIXg/edit#responses or in a https://docs.google.com/spreadsheets/d/17E0zLsFXvZILTpRn8S-ruSI1DtTPfjcK4vlcs0c_9_g/edit?usp=sharing. I'd welcome any thoughts you have about next steps. A couple of questions I have: • Does seeing my responses make you think of any additional edits you would like to make to the form? • Should we just focus for now on gathering responses and then summarizing what we learn in this channel?

Robocode! I didn’t know you could use Clojure to create robots. Sorry for totally derailing this, but Robocode happens to be something I have spent A LOT of time with. I once started https://robowiki.net/ and am still visiting https://literumble.appspot.com/Rankings?game=minirumble now and then to see that my Pugilist is still competing in the top. 😃 (Haven’t been Robocoding for more than a decade though.)

🤖 1

Super cool! Robowiki was very helpful in that project. I wound up just doing a Clojure implementation of https://robowiki.net/wiki/Walls_(robot) (cleverly named Enclojures) that beat my colleague's much more ambitious attempt to create a robot from scratch.

As a potential next step for the form, I could share with newly onboarded Nubank engineers to get more data points. What do you think?

Yes, that sound like an awesome next step!

👍 1

@michaelefryar thanks for doing this! I think we can replace all those quantitative questions about age, sex etcetera with one question where we just ask the respondents to describe themselves a bit if they like. The nature of the questions isn’t such that we will get a lot of answer that we need to tabulate across various dimensions. I think we will get a much better idea of who the respondent is if they describe themselves in whatever way they like. So a questions like If you like, please tell us a few things about yourself, e.g: Where do you live? How old are you? What are your hobbies? Whatever, or even nothing.

Welcome! I don’t know how to advertise this channel, but it would be great to have everyone who cares about this subject in here.

Jakub Holý (HolyJak) 2021-08-25T14:57:53.006900Z

Awesome initiative, thank you!

❤️ 1
Jakub Holý (HolyJak) 2021-08-25T14:58:14.007600Z

Perhaps mention at least in #beginners?

Let’s! What’s a nice intro? … Something like: There is now a channel for improving the beginner’s journey. #improve-getting-started Please join if you think that starting with Clojure should be easy and delightful. And agree that it sometimes isn’t for some (many?) beginners. And that when guiding beginners starting with Clojure we should introduce them to Interactive Programming in the editor as quickly as possible. Please also join if you are a beginner who want to share your experiences with starting with Clojure and help the community improve in this area.

👍🏻 1
❤️ 1

set the channel description: Where we ask the questions: * What do beginners struggle with? https://clojureverse.org/t/what-do-beginners-struggle-with/5383 * What can we do to lessen the struggle? * What can we do to make learning Clojure delightful experiences?

@yogthos has joined the channel

👋

🎉 1
👋 2

@porkostomus has joined the channel

1

@kpavao84 has joined the channel

@smith.adriane has joined the channel

@daveyw1234 has joined the channel

@cp4n has joined the channel

Delighted for this, because I feel I am a "perpetual beginner" even though I've been learning Clojure for 5 years now. I'm an oddball in that I didn't come to this language with much programming knowledge at all, so my "beginner" experience feels very different from the experiences I usually hear about from others.

Please elaborate on how it is different. 😃

If we can make it delightful to pick it up as one of your first languages, a lot is won!

I kinda feel the same way. Been doing the beginner thing for a long time now. I hover around in that gray area between completing one-off problems on codewars and actually doing something with the language

Well, the things most often complained about as beginner stumbling blocks never seem difficult to me at all! I interpret it as just part of the way it works. This stuff was all designed to make sense! But then on the other hand, I usually run into a half-dozen things every day that I'm too embarrassed to even ask because it seems like it should be obvious to anyone who knows anything, haha

Haha, well, I can relate! Though I seldom hesitate to ask anyway. I’m too old and have too little time left to walk in ignorance. 😃

I’m definitely still a beginner.

I find it fascinating to hear what beginners trip over while learning. Sometimes it will be things that I tripped over too (but now so long ago that I might not remember until someone jogs my memory!) and sometimes it's completely new things that would never have occurred to me -- and so I would not have thought to try to call it out in documentation or explain it in a different way. It's all extremely helpful to hear this stuff!

I'm unemployed so one thing I do have is the luxury of taking all the time I need to figure things out on my own as much as possible. But what I could very much use is guidance on how to fill in the missing pieces that I might not even know exist... or they wouldn't be missing. There is a mountain of tacit knowledge that is often taken for granted.

Have you tried the mentored track at http://exercism.io, @porkostomus?

My mentors have been super good at spotting the gaps. It’s crazy how much I learned doing just a few of the exercises. There’s a channel about it that is a bit dormant but wakes up now and then, #exercism

I did, and then I became a mentor which was a rather bold thing to do in retrospect. The gaps I'm referring to are usually not regarding Clojure itself, that's all fine. It's about how it fits into "everything else"

I'm kicking around the idea of making a thing kind of like the converse of @seancorfield's interview mind-map, that would be like my personal "knowledge graph", so that someone experienced in the industry could look at it and say "ah, this is what you're missing"

👍🏻 1

What I wish existed is a set of courses that are written for Clojure developers, but that didn't even teach the Clojure part, but instead focused on the surrounding infrastructure. From my perspective, there's always too much of an assumption that we know that stuff already.

Can you give an example of what this surrounding infra could be?

Ok so here's a funny example. I've been making webapps all this time and I never once used a router. I never understood why I needed one. It was just like last week that I realized what they do and how it could be useful in my app. If only I'd sought better guidance, I feel the right person would have explained that one to me already.

An "unknown unknown". What actually triggered your realization last week? Was it something you read? Something someone said? A code example?

I was actually just doing Math problems on Khan Academy and had this "aha" moment when I figured out I could navigate to the previous questions and back using the browser and thought, "oh, that is cool"! Previously I had this philosophy that I wanted my users to "forget" that they're using a browser and just provide navigation within the app.

💡 1

It’s a broad topic. There are so many ways to build apps. And so many different type of apps. I think it makes sense with the set of courses, though: The anatomy of a SIngle Page Application. The anatomy of an API gateway. Etcetera. Since it often isn’t even Clojure specific, a lot of the material is out there and each course could rather be a curation.

> I wanted my users to “forget” that they’re using a browser That’s interesting. A while I obsessed with making the users forget/not notice that they were using an app. 😃 https://github.com/PEZ/clerk

👀 1

I just had an extremely positive thought. Maybe Clojure actually provides the *ideal* learning path for the wider ecosystem, by having it illuminated by such minds? In a way we're getting shown just the right amount of info to grok it but not get lost in it. For the fundamentals, I feel I've gotten pretty far from reading MDN Docs, as far as learning how the Web works. Even stuff considered advanced like the Web Audio API, I've learned by way of the Clojurescript libraries that have used it.

1

@max.deineko has joined the channel

👋 1

@wasser has joined the channel

I was, and still am, a little fuzzy about editor support. I've been using emacs so far and just trying to figure things out as I go (plus emacs is kind of fun), but then I have been wondering about VS Code with Calva. There seems to be a whole lot of effort that has gone into getting you started and just being ready out-of-the-box. Which sounds pretty great. But then the surveys I have seen seem to show that not nearly as many Clojurians use it compared to emacs or intelliJ. Not really sure why that is? Are there differences or shortcomings that beginners should know about before settling with one editor vs another?

Oh, as the creator of Calva I am baffled by the huge market share it has in the survey. It’s third behind two marvellous solutions! Calva is still pretty new. And also has improved a lot recently so it can still grow a bit I think.

You're far too modest @pez!

❤️ 1
☝️ 1

I’d say that if you enjoy Emacs then CIDER is a really good choice. By all means, try the Getting Started REPL in Calva a try (especially now that there is a zero-install option for doing it). That is unique for Calva still. (Though depending on how much Clojure you have picked up, it might be too basic.)

I have actually prepared for Calva’s Clojure guide to be able to plug in to other editors/plugins. Though I haven’t had the time to get the API right yet, so I’ll wait with advertising it broadly. But it lives in that separate repo for a reason!

> Are there differences or shortcomings that beginners should know about before settling with one editor vs another? I don’t think so, actually. It can be a bit painful with large data structure results in Calva, but that is something you usually are not so hindered by as a beginner. And when it becomes a problem people solve it using Reveal and Portal ans such. I am a lot in ClojureScript land and shadow-cljs takes care of this for me.

Jakub Holý (HolyJak) 2021-08-26T09:11:24.024Z

I think Calva's market share is lower b/c it is the youngest of the three and b/c many current devs had prior intellij/emacs knowledge and stuck with the editor. Myself I use Cursive primarily but now also Calva partly (b/c it starts so much faster :))

1
1

@cp4n I think the main thing with Emacs (and Cursive to some extent) is that a large number of developers who came to Clojure historically were either older and/or had Java backgrounds so they already used Emacs or IntelliJ so those are natural for them when learning Clojure. I think anyone coming from a Lisp background is also likely to be an Emacs person. If Clojure had always attracted younger developers, or folks with less Java background, we might see a very different pattern.

So, yeah, momentum as @deleted-user says.

VS Code is probably the fastest-growing editor usage segment in the Clojure world today. My path to VS Code/Calva was from Atom/Chlorine, Emacs/CIDER (on and off for years), LightTable, Eclipse/CounterClockWise, SublimeText/TextMate and a command-line REPL. I'd used Emacs on and off for twenty years by the time I switched away from it to Atom.

My usual recommendation is: use the editor you're most familiar with if it has a Clojure integration available, else use VS Code/Calva.

👍🏻 1

This message was deleted.

Related to this, as a beginner who wanted modal editing, it helped that IntelliJ's IdeaVim works well since that allowed me to postpone a more complicated Vim setup. When I was exploring @pez's https://calva.io/get-started-with-clojure/, one of the first things I did after I'd launched Gitpod was install the vscodevim.vim plugin. Unfortunately, there's an https://github.com/VSCodeVim/Vim/issues/7005 where you can't exit INSERT mode.

That’s a pretty big issue! 😃

🥲 1

@adam.stokes has joined the channel

👋 1

@darrell has joined the channel

@michaelefryar has joined the channel

Hey @pez! As I'm going deeper into clojureland I've been keeping notes on things that I learn, do you think it would be a good idea to have a git repo to store that knowledge to potentially be later used in some sort of website/cookbook/blog posts?

❤️ 1

Ok, great! I think I'm going to put together a google doc with some ideas and will share it out

I once tried to start a “solutions log”. Basically a blog where I was supposed to jot down TIL things. Though I am not very disciplined with such things and also a small log item just grows when i start to jot it down. https://pez.github.io facepalm

That said, it sounds like you have been keeping what I really mean with a solutions log. Maybe you should consider trying to do what I tried to do? Take the notes in public.

Ah yea I think that's part of it, I was also going to put down some ideas on a user's first steps, like basic editor selection/setup, perhaps a "coming from X language to clojure" similar to how ruby does it (https://www.ruby-lang.org/en/documentation/ruby-from-other-languages/)

Clojure from Language X. I like it!

@eric799 has joined the channel

My biggest headache as a beginner is "Verbage". You have this beautiful language with all this powerful "List" processing. But its hard for a beginner to know what type of "List" they should be using ... do you use a List, Vector, Map, Hash-Map ... and while a lot of the commands are interchangeable for working on "Lists", not all are ... and then I accidently nested two types, and then it gets even more complicated. TLDR: I find the hardest part is figuring which list represents my data the best and gives me the best tools/commands to use.

➕ 1
🙏 1

@eric799 If you read over https://clojure.org/reference/data_structures does that help and, if not, could you articulate what is missing?

(specifically from Collections onward)

And are either of these two sections from the Learn Clojure guide better/worse? https://clojure.org/guides/learn/sequential_colls and https://clojure.org/guides/learn/hashed_colls

(and a meta-question: would you have found any of those pages easily when trying to figure out "lists" etc?)

I feel like those resources give a good overview of what, but aren't quite as useful when starting out. For example, in python, you use lists for ordered data and dict for associative data. In clojure, there's multiple options for ordered data and it feels like there are multiple options for associative data (even though almost all usage is map literals with assoc,`update`, etc). The other hurdle is that it's not obvious how to write programs with only immutable data. Just listing the operations doesn't provide an approach for writing programs.

Jakub Holý (HolyJak) 2021-08-26T09:18:18.024400Z

Could we say: • use maps for associative data (where map == hash-map) • use vectors for ordered data literals • only rarely you want to explicitly create a list; you will use the Clojure sequence abstraction and lazy lists a lot but indirectly, because they are returned by the sequence functions • use set if you do not care about order but need to make sure there are no duplicates Would that be helpful for a beginner? An explanation of "sequences" and how they differ from vectors/list and few words about laziness would be necessary but somebody has surely written that already.

👍 1

@seancorfield. I've read those before when I was initially trying to learn Clojure, but in the beginning they didn't register with me. The article about sequential collections and hashed collections is what I was looking http://for.It would have been nice if http://ClojureDocs.org had a tutorial style link that when I was researching/googling into, assoc, map, keys, val, etc that lead me to those two or similar articles. Sort of a "If you are trying to do this, do you understand what you are/should be doing with these Collections" kind of help. And now I know Collections is a good way to describe all the types of "Lists" associated with Clojure. Which will help me going forward.

👍🏻 1

I've felt confused over the naming conventions for dependencies and how they relate to the names in the namespace declarations. Also whether you could navigate and browse the namespace contents somehow to get a discoverable overview of the functionality.

🙏 1

Yeah, I don't think there's much beginner-level material that basically says "there is no relationship between a library's name -- the group/artifact of the dependency coordinates -- and the library's namespaces" 😞

Mostly I think setting up and understanding the tooling has been a hurdle to me, which Java version to install on Windows, all the configuration options and alternative command line tools, what does Lein, CIDER, Shadow-js, Figwheel actually do in the background, what does a profile, session and so on mean. I think it would help with more experience of the JVM world.

🙏 1

On Windows, life is certainly a bit more complicated because the CLI installer is still alpha (and requires an up-to-date Powershell), although lein has a .bat script for cmd.exe. I think using WSL2 with Windows makes life substantially easier since so many tutorials etc assume macOS/Linux -- and VS Code has slick integration with WSL2 -- but it's yet another hill for beginners to climb 😐

Yes, thanks for the tip/nudge in direction of WSL 2 and VS Code, it could be that it is the most friendly "native" environment now if the IDE integration works out of the box. I think what could have helped me the most would be an accessible online environment with a platform tooling set up and managed, and a capability to support the full process of constructing and deploying a working web application. Maybe we are getting there. https://www.youtube.com/watch?v=ywUZOOzLX3c

@gis.jonor_clojurians I think the VS Code/Calva Gitpod work is heading in that direction...?

👍 1
👀 1

@logbot has joined the channel

1

Added the two logging bots so we won't lose future conversations!

❤️ 1

(I hope someone is taking copious notes here since all this good stuff prior will be lost in a few days!)

I was relying on logbot, but forgot to add it of course. facepalm