Clojure track hints


I’m working through the clojure track as my june choice after failing prolog for may. I’ve noticed the hints to be lacking.

“Interest is Interesting” - has empty hints, it just restates the problem. Interest is Interesting in Clojure on Exercism

“Reverse String” - has no hints at all. Nor an introduction. I assume the purpose is to not use the clojure.string.reverse function . Reverse String in Clojure on Exercism

“Annalyn’s Infiltration” - Task 3 hint says “all true” but that’s incorrect. Annalyn's Infiltration in Clojure on Exercism

“Squeaky Clean” - The Task 2 hint suggests using Character.isISOControl . But I can’t figure it out how to use it. Of all the community solutions, I only found one that uses it. And all the solutions are using -> threads, map, and filter. Maybe this shouldn’t be catagorized as a learning exercise. Squeaky Clean in Clojure on Exercism

Would you be up for fixing them?

If so, please elaborate on the infelicities and provide diffs of proposed changes so that these can be discussed.

 unchanged line
-deleted line
+added line
 unchanged line
-deleted line
+added line

The source code for the hints can be found in the track repo, e.g. here: clojure/exercises/concept/annalyns-infiltration/.docs/ at main · exercism/clojure · GitHub

Thanks for the feedback. You’re right, the syllabus is a work in progress and many if not most of the exercises are far from where they should be.

Reverse-string is a practice exercise which don’t have hints so that’s normal.

I didn’t realize that Interest is Interesting was missing hints, so thanks for pointing that out! I’m planning to devote special attention to the hints going forward, because I’ve realized that they are a huge opportunity to point students to the relevant documentation which is incredibly important.

The main point of Squeaky Clean is to teach how to use the methods in Java’s Character class. In the hint, isISOControl is actually a link to the Java docs for that method, but I now see that it’s not exactly clear because it just looks like it’s displayed as a code symbol in the markdown, you have to actually hover over it in order to tell. I bet we could do something about that, by like explicitly showing the url with “See here” or something.

I think I’m going to skip jurassic july (having already missed may) so I’m up for proposing changes til August for the exercises I attempt. Should I continue this thread or a new thread per exercise?

After poking around the github link that MatthijsBlom gave, it turns out interest is interesting does indeed have hints, but they’re just not being shown. Maybe the bullet point is causing problems? Is the diff working?

# Hints

## Calculate the interest rate

- - You can refer back to the [conditionals][conditionals] concept if you need to remember how to return values based on an input value.
+ You can refer back to the [conditionals][conditionals] concept if you need to remember how to return values based on an input value.

## Calculate the annual balance update

- - The [`bigdec`][bigdec] function can be used to coerce a number to a [BigDecimal][bigdecimal].
+ The [`bigdec`][bigdec] function can be used to coerce a number to a [BigDecimal][bigdecimal].

## Calculate how much money to donate

- - The [`int`][int] function can be used to coerce a number to an integer.
+ The [`int`][int] function can be used to coerce a number to an integer.

Haha, you’re right! Indeed it’s not even the first time I messed that up. Surprised no one else noticed before, the hints were added like a year ago…

Wait, now I’m confused because apparently I added the hyphens to attempt to fix the hints: Add hyphens to fix hints (#488) · exercism/clojure@cc88110 · GitHub

It must have been broken for some other reason

EDIT: It’s because the hints are missing the task numbers. The bullets are supposed to be there. I’ll submit a PR. Thanks!

EDIT: Add task numbers to hints by bobbicodes · Pull Request #561 · exercism/clojure (

The hint message itself makes it clear it’s a java method, link or no link. But it took me forever to find out how to actually call it using / instead of . and other syntax (namespace?) stuff.

What i wanted to say is that I’m not sure about how to proceed using it. Threads, map, filter haven’t been introduced yet. There are no loops that I know of (I just started and probably wrong), so recursion with cons/conj? but that feels too advanced also.

For now I’m just skipping to another exercise and sleeping on it.

This is very valuable feedback. I made another PR adding an example interop call to the exercise introduction: Improve squeaky-clean introduction by bobbicodes · Pull Request #562 · exercism/clojure (

An established Clojure meditation practice: Hammock Driven Development - Rich Hickey - YouTube

You need to read the documentation/examples for each of the functions and spend some time outside Exercism to learn more about how the language works and how it is normally used. If you expect to learn Clojure just by following a Syllabus, you’ll be disappointed and give up. You can also ask for a code review for each of the exercises. A mentor will point out the issues and how these can be addressed.

Then what makes exercism special? What’s the point of having a syllabus track? Locked solutions and locked exercises to force me to leave exercism? Once I leave to learn a language elsewhere, why should I even bother coming back?

I’m on exercism and doing these introductory exercises because I expect to learn something other resources might have glossed over or missed. I enjoy the focused practice on specific topics. I enjoy practicing the fundamentals.

Mentoring is not available until AFTER the exercise is solved. Maybe I’ll just copy and paste a solution to get access.

To be clear, I disagree with this. I think it’s entirely feasible to learn a language with Exercism’s syllabuses - people do it daily.

But they’re a work in progress, and so there are often holes/gaps, which is why this feedback is so valuable (as Bobbi says) :slight_smile:

1 Like

If it means anything, I looked through the entire clojure section of my book to learn at the end “Clojure has excellent Java integration… …We did not use the existing Java libraries at all.” :face_exhaling:

My goal is to provide as complete of a stand-alone guide as possible, and any places where it falls short are my fault, not a shortcoming of courses in general.

While it is valid that you will surely benefit from a variety of learning sources, our goal is to help you, to the greatest extent possible, to navigate you through the concepts without confusion or the need to look elsewhere. This is easier said than done however.

The ultimate “test” I think is trying the syllabus out on someone who is a beginner to coding in general, which is the focus of the Jumpstart: Clojure series I’m doing with Jonathan.

@TutorialTatoe All i’m saying is that if you are frustrated - and it’s evident that you are - then that means the syllabus is probably not working very well for you. But this is normal because there are no sites that contain the perfect information. That’s why you need to use multiple sources and not get fixated on one. Open up the docs and read them. Setup Clojure locally and write some simple programs. Try an online REPL.

Exercism is nothing more than another tool that can assist in the process of learning.

@porkostomus , could you look at the Bird Watcher exercise? Same issue as the other, hints not showing, github has hints but not numbered

Yes, I’ll fix this right now :grinning:

1 Like

Hi, I haven’t given up on clojure.


Hint 4 - I suggest removing Hint 4 entirely. I fail to see how :as all is useful for this task 4, nor do I see any community solutions that use it. It’s misleading. Perhaps just repeat Hint 3 the & combines tail elements

Hint 5 - The difficulty of Task 5 is not in the destructure but in the re-structure. Here, I’m not sure what kind of hint to give, because that depends on the intent of the task.

My solution destructured the face-cards and nested many cons, with a if for the nil case. It’s a bit long and single purpose, but it was good practice doing extra destructuring and using the vector concepts introduced in the earlier exercises to rebuild the vector. I also played around with reduce and filter but felt complicated.

The community solutions mostly use remove and flatten . I like the few solutions that use concat and into because the values order feels more explicitly important, whereas flatten feels like it was chance that the values were in the correct order.

I’m not sure if the hint should be to practice the old (not beautiful code) or to introduce something new. (or both?)

1 Like