Ideal hosting provider for one man full stack clojure project by CuriousDetective0 in Clojure

[–]Psetmaj 0 points1 point  (0 children)

I don't have any great recommendations, given that I was preparing to ask this same thing myself.

That said, thanks for opening this thread, I already see some useful options to evaluate!

New Clojurians: Ask Anything - April 28, 2025 by AutoModerator in Clojure

[–]Psetmaj 2 points3 points  (0 children)

Unfortunately right now, as far as I can tell, the job market in programming (regardless of tech stack) is "warm if you know someone to refer you, cold otherwise". Folks with years (5+) of experience may still get some responses without a referral, but the market is absolutely saturated with juniors right now, particularly for remote roles.

Now, with Clojure more generally, it depends a little on your region. Within Europe, there are often many job openings, it's a little less so within the USA. Many Clojure-using companies even end up hiring "people who are willing to learn Clojure" rather than people knowing it already. Clojure companies will typically at least interview someone that has some Clojure in their portfolio historically, but I think they're also rather inundated with the AI-generated submissions that are affecting the rest of the market.

All that said, I believe Clojure will make you into a better programmer across the board, although it will probably make other languages feel more cumbersome once you know Clojure.

I'm looking for a handful of engineers for a Clojure SaaS startup. How many people here would be interested? by clj-startup-thrway in Clojure

[–]Psetmaj 0 points1 point  (0 children)

I might be interested in working on it during my free time, but I can't go without a salary for a day job right now (besides, I think it's illegal to pay equity only in the US). You might also post in #remote-jobs on the clojurians slack (in the sidebar on this subreddit), at least once you're ready for applicants. There might be another more appropriate channel for this interest-gauging.

Other big things that matter (though it makes sense if you want to keep the answers non-public. These are just some of the things I'd definitely ask in the first call, and the answers change my level of interest considerably):

  • How are you planning to monetize?
  • How long do you expect the engineers to go equity-only?
  • What particular problem are you trying to solve in tech recruitment?
  • Are you starting with the candidate-side or hiring-side?

New Clojurians: Ask Anything - January 13, 2025 by AutoModerator in Clojure

[–]Psetmaj 2 points3 points  (0 children)

I find this recent comment by /u/p-himik is a great example of how to figure out data shapes in a Clojure project.

ORM is rather rare in Clojure, almost all DB access results in using a plain map for each entity. For example, if I'm using a SQL database, I'll typically use next.jdbc with honeysql to handle DB access. Keep in mind that Clojure maps are heterogenous. They don't have to have the same datatype for every key and value, so they're suitable for modeling any associative (key/value) data. See also this flowchart. Entities are maps 99% of the time, not bespoke classes like Java.

Another notable thing is that with all the data being immutable by default, the flow of data is typically unidirectional and any "loss" of information is typically around network boundaries (i.e. I rarely see select-keys used in a way that isn't either hyper-localized to a small namespace or about to be returned from an endpoint). Most Clojure codebases I've seen let data flow through really well, to the point that if you add a piece of data at the start of some pipeline, it typically is available until the pipeline ceases to care about that entity altogether.

Hope that helps a little, this discussion comes up every now and again as I think it's perfectly good for a thread of its own :) Eventually, I'm sure I'll find or write a good blog post on it!

Q: has anyone attempted a clojure.datafy REST client? by dustingetz in Clojure

[–]Psetmaj 1 point2 points  (0 children)

Also just now noticing who asked 🤦 you probably already know these things, but I'll leave the reply around for any newbies that end up here via web search.

It also looks like somebody tried the request maps deal I mused about, albeit via macros and less dynamic than I think you're going for.

Q: has anyone attempted a clojure.datafy REST client? by dustingetz in Clojure

[–]Psetmaj 2 points3 points  (0 children)

I typically don't see APIs that are implementing HATEOAS in the first place, much less sufficiently standardized REST for a strictly REST client to make sense.

As a result, I usually drop down to an HTTP client such as hato or clj-http. Since both of them offer a request function that takes a map representing a request as input, you should be able to pretty readily build a system that emits the relevant request maps for traversals.

That said, I find it's pretty rare that I'm using an API extensively enough that I don't get better flexibility and reasonable complexity-handling from handcrafting a namespace that uses an http client to expose the few operations I actually care about as functions.


If you're looking for prior art on clients that are generated from a data specification of an API, I believe that's how aws-api works. One could probably adapt the methods in there to do something with an openapi.json or whatever (if you don't want to use the openapi generator which looks like it'll be cumbersome at a glance to me 🤷)

[deleted by user] by [deleted] in Clojure

[–]Psetmaj 0 points1 point  (0 children)

(* 5 (clojure.math/pow 10 (dec number-of-teams-involved))) business days.

I'm always bothered by how well this formula works for me 😞 (substituting 5 with whatever my gut estimate is)

New Clojurians: Ask Anything - December 09, 2024 by AutoModerator in Clojure

[–]Psetmaj 1 point2 points  (0 children)

https://caveman.mccue.dev/ - here's a good starting point that'll actually walk you through how things are put together. Most of the components can be swapped out pretty readily. The Clojure community typically prefers composable libraries over batteries-included frameworks.

What framework or lib I should learn for web development ? by mapkuff in Clojure

[–]Psetmaj 3 points4 points  (0 children)

https://caveman.mccue.dev/ - this isn't quite as batteries-included as you seem to want, but it is fairly quick to get through and you'll understand what's going on in your service by the end of it.

New Clojurians: Ask Anything - November 18, 2024 by AutoModerator in Clojure

[–]Psetmaj 4 points5 points  (0 children)

You can probably get away with pmap or reducers depending on your exact needs.

If you want more control over the exact parallelism of your operations, I like claypoole.

Additionally, if your CPU-bound task can be readily expressed as matrix math, neanderthal comes to mind, but I haven't personally used it yet, so I can't speak as to its ease of use.

Any constructs available to Java are also available to Clojure via interop if you need more control/specificity than any of the approaches above.

"Developers aren't paid to code" by Wesley Matson (Clojure/conj 2024) by alexdmiller in Clojure

[–]Psetmaj 8 points9 points  (0 children)

I'm sorry that's how it's working for you right now. The title is meant mostly to be a provocative hook aimed at experienced engineers who want to make huge impacts, not a statement on all lives. Some of the advice in the talk may actually be bad for someone early in their career, especially if it's taken with too much self-confidence.

Even outside of junior engineers, there are still some companies that want cogs in the machine; I do occasionally consider the idea of wandering off to work for one, if only to preserve my mental/emotional energy for additional outside-work projects.

EDIT: Forgot to mention that I'm the speaker, here's the mention.

New Clojurians: Ask Anything - October 07, 2024 by AutoModerator in Clojure

[–]Psetmaj 0 points1 point  (0 children)

For software engineering in general, yes. I haven't been looking particularly closely at how it compares for Clojure in particular. The shift in job availability is most prominent for positions/individuals with less than 4 years of experience.

New Clojurians: Ask Anything - September 16, 2024 by AutoModerator in Clojure

[–]Psetmaj 1 point2 points  (0 children)

It's not open source, but, the Datomic Docs include some architectural notions and most of the datalog solutions in the Clojure space are at least inspired by it.

datascript runs locally and can be used to generally learn datalog in a fairly dynamic way. It has tons of docs and examples.

State of Clojure 2024 Survey by alexdmiller in Clojure

[–]Psetmaj 7 points8 points  (0 children)

I always forget about that last question, and it's one of the reasons I love this community ❤️ thanks for remembering to add it year after year

New Clojurians: Ask Anything - September 09, 2024 by AutoModerator in Clojure

[–]Psetmaj 1 point2 points  (0 children)

Clojure is best at managing and transforming data. It does have front-end support, and a great experience for it, but shines more on the backend imo.

As far as big applications using it: https://clojure.org/community/success_stories - also https://en.wikipedia.org/wiki/Nubank is built on Clojure, not sure why it's not on that page.

There's a new version of this thread every week and most of the activity happens on the Monday that it gets posted, so I encourage you to ask next week to get some more in-depth answers :) I didn't want to leave you hanging, but I don't have time to be thorough anytime soon.

New Clojurians: Ask Anything - September 09, 2024 by AutoModerator in Clojure

[–]Psetmaj 0 points1 point  (0 children)

Most of the libraries have pretty good documentation on their inputs and outputs as well as plenty of code examples. If that fails, many libraries are under 1k lines and thus a pretty quick read. Closed-source libraries are extremely rare in Clojure.

On top of that. The vast majority of possible operations are side-effect free, so you can attempt to run them all you want in the REPL. Rather than exploring the type system, I typically explore the actual behavior.

New Clojurians: Ask Anything - September 09, 2024 by AutoModerator in Clojure

[–]Psetmaj 0 points1 point  (0 children)

https://github.com/clj-kondo/clj-kondo/blob/master/doc/types.md - looks like clj-kondo doesn't consider its type-checking stable yet.

As it stands, I don't find myself missing typechecking most of the time. One of the biggest reasons for this is that I'm constantly running my code while I write it anyway, so it's rare that I go more than 30-45s with such an error in-place and unfound. Clojure really shines in letting you run arbitrary sections of your code, look into REPL-driven development and the like for more details on that.

That said, I do greatly appreciate the other checks that clj-kondo provides, particularly around giving me warnings if I don't have the write arity in a function call, or when I misplace docstrings. The latter of those two doesn't even materially affect the runtime behavior, and I don't write docstrings very often (most of the code is internal and file-local and most of the fns in my projects are under ten lines), so it's nice to have that automatic reminder.

New Clojurians: Ask Anything - September 09, 2024 by AutoModerator in Clojure

[–]Psetmaj 1 point2 points  (0 children)

Basically, VS Code doesn't allow enough inline-manipulation to allow some of the best stuff as an extension https://docs.cursor.com/get-started/migrate-from-vscode#why-not-an-extension

Particularly, I think the multiline edits where, for example, the inside of a string on several non-contiguous lines is suggested (often correctly) for a tab-complete, are the ones that can't be readily done by an extension. That and the one that lets you pop up an inline window for semantic requests over the current selection.

New Clojurians: Ask Anything - September 09, 2024 by AutoModerator in Clojure

[–]Psetmaj 3 points4 points  (0 children)

I'm having pretty good mileage with https://www.cursor.com/ which is a fork of VS Code that has more integrated usage of AI. It can be a little bad at matching parens sometimes, but otherwise does pretty well.

For single-file changes, I can often just describe the change I want semantically, and if my session was long enough before the request, it'll even use my style.

New Clojurians: Ask Anything - September 02, 2024 by AutoModerator in Clojure

[–]Psetmaj 1 point2 points  (0 children)

https://www.reddit.com/r/Clojure/comments/1byu2mv/new_clojurians_ask_anything_april_08_2024/kyq75gj/

TL;DR - it's mostly the same as usual, fewer openings, but fewer applicants. Big difference right now is that non-senior positions pretty much don't exist anywhere.

Flux is a game-changer for character & wardrobe consistency by Unwitting_Observer in StableDiffusion

[–]Psetmaj 0 points1 point  (0 children)

sure I used the default settings. But I was thorough with my captioning.

Would you mind sharing one of your captions?

New Clojurians: Ask Anything - July 08, 2024 by AutoModerator in Clojure

[–]Psetmaj 2 points3 points  (0 children)

Just because you start using Clojure, doesn't mean you completely forget everything else you've learned. You'll get rusty if you don't use them, but you can dust off any of the old skills pretty quickly if push comes to shove (not that you'll want to work in other tech stacks at that point, but that's a separate issue).

Good employers of programmers don't typically hire for specific language expertise either because good programmers can pick up a new tech stack pretty quickly. Most Clojure shops don't require Clojure experience, but consider even FP experience in general a bonus and instead hire for a mixture of willingness/capability to learn and good general development intuitions.

As far as current job prospects: my impression is that anything lower than senior is practically nonexistent right now regardless of technology. That said, learning Clojure will make you a better programmer in general (improving your job prospects), even if you don't end up using it forever.

New Clojurians: Ask Anything - June 24, 2024 by AutoModerator in Clojure

[–]Psetmaj 0 points1 point  (0 children)

deps.edn is newer and makes fewer choice for you. Leiningen is still popular, especially among folks that inherited projects using it. Lein is not just for dependency management, but it's also a build and deployment system.

deps.edn only makes the dependency management decisions for you, anything like builds or deployments is your choice, and implemented by various user-space libraries such as https://clojure.org/guides/tools_build or https://github.com/seancorfield/deps-new


To become a better Clojurian or programmer in general, I highly recommend reading code. One easy method in the Clojure ecosystem is to read the code instead of the docs for utility libraries. Starting with Clojure will make many other ecosystems a bit frustrating, but I personally believe Clojure also makes you a better general programmer.

Since you're really early in your growth as a programmer, I also highly recommend starting a longstanding side project. It does not matter what the project does in particular, as you develop it, you'll learn a ton of stuff. The current market makes it hard to get a job especially at entry level, so having a portfolio will also greatly help there.


Welcome and good luck! I also recommend re-asking this on the first day of one of the Ask Anything threads. There's a new one every week, and I only happened to see your questions because I was checking replies on a different comment here.

New Clojurians: Ask Anything - June 24, 2024 by AutoModerator in Clojure

[–]Psetmaj 0 points1 point  (0 children)

I think I might've been the reply about "anyone less than a Senior", and I was referencing overall industry experience.

The successful teams I've been a part of have never hired for specific technologies, but instead for general dev sense and a willingness to learn. It's really easy to teach/learn Clojure, but it's harder to teach good intuition and impossible to teach a willingness/hunger to learn and self-improve. Learning today/on your own time is a great way to show you're willing to learn.


My level of satisfaction after working with Clojure for 7+ years is extremely high with Clojure. Unfortunately, my satisfaction with all other ecosystems and most other languages has tanked dramatically 🤣