40 ms·
Building a Startup on Clojure
- onion2k 4y agoIf I was choosing a language to base the tech stack for a startup on these days I'd be very reluctant to pick anything that didn't have a local user group. Slightly more esoteric languages that enable you to write better code faster are brilliant, but if you're successful enough to grow quickly, or you can raise funding, you'll need to hire devs relatively early on. If you've chosen a stack that's too esoteric then this will be a huge blocker to making any real progress. When I did my last startup we switched from a Python API to Node for this reason. Python is a great language but there are no devs available where I live. I can't even imagine considering Clojure unless I was in a major tech hub. The move to remote work is probably going to be a massive benefit to building in less mainstream languages.
- DrBenCarson 4y agoCounterpoint: building in esoteric languages can serve as a filtering mechanism in and of itself. Given how broad the swaths of JavaScript and Java developers are, they can be much more hit-or-miss.
- onion2k 4y agoCountercounterpoint: People can be terrible at Clojure. The distribution of ability probably doesn't vary much between languages.
- masklinn 4y agoIt absolutely does, because there’s a self-selection in being interested in an esoteric langage (assuming it’s not a corporate oddball or legacy langage) which raises the average above the background of targeting “employable” langages: people going through this process show more interest in the field. Though that doesn’t mean they’ll be more productive, and then adds hiring challenges. So the break-even is not simple. One of pg’s early essays was on exactly that subject (“the python paradox).
- kagakuninja 4y agoAs a Scala dev, I had a similar belief as you: Scala using companies seemed to have higher calibre programmers. Until my current job at a major Telecom. The code is all Scala, but written by a bunch of ex-Java devs. I have made attempts at education, and the code is improving, but the fundamental structure of the services are bad, and there is still a lot of bad code. I am not saying this as a FP purist, some of the code would be bad by the standards of Java programming. Bad programmers then hire other bad programmers. Because it is hard to find experienced Scala developers, they have brought in people with java experience, or big data Python programmers who claim to have some experience using Scala with Spark. I am now involved in the hiring process, and it is slow and dismal. To be fair, the kind of contractors this company hires are mediocre, regardless of language. The features of Scala create novel ways for confused programmers to screw up, and we aren't even doing anything esoteric, like pure FP. I suspect there are some similar traps in Clojure.
- throwaway5959 4y agoHad this exact experience trying to hire at startups for Scala/Spark. There’s only so many Scala devs to go around. It also doesn’t help that “good” Scala is highly subjective, with different levels of Scala from better Java to functional paradise. I’ve been happily coding (and hiring) in Python for the last four years or so. Still doing Rust and some Scala at home where deadlines don’t exist and hiring is a non-issue.
- deleted 4y ago[deleted]
- bcrosby95 4y agoScala's problem here is largely historical. When it was released, there were two camps to adopt it: people that wanted an FP, and people that wanted a better Java. Since Java went through a long period of stagnation, most of the Scala code out there is written by Java developers that just wanted a better Java. Kotlin has stepped in and replaced Scala for "better Java" role. But this history has left a pile of crap code written by people who didn't want to use Scala. Clojure doesn't have this problem because you couldn't ever use it as just a better version of Java.
- Huh1337 4y agoCounterpoint counterpoint: Esoteric languages attract PL nerds, who are much more interested in using every new/different "expressive" feature of the language than in getting business done using clear code understandable by anyone on almost any level.
- jmfldn 4y agoCounterpoint X 3 True. But if you have a good well-enforced, sane style guide, then expressive powerful languages can be a good thing. If you hire devs who care more about playing with the language than delivering value then you're hiring the wrong people. You can't ditch these languages because some people are sometimes attracted to them for the wrong reasons.
- WFHRenaissance 4y agoCounterpoint Part 4: Esoteric languages by-nature have smaller populations of devs. They demand higher salaries for their specialist work. This can hurt you as you scale - salaries continue to increase (secularly), and the pool of possible engineers begins to shrink within your locale.
- jmfldn 4y agoYep. This is also true. Hopefully WFH helps there. In my niche Scala it does. We can hire more broadly. We also hire ppl with an aptitude for Scala and keep our style simple. That helps.
- closeparen 4y agoIf you hire developers based on the languages they know / think of languages and stacks as part of the long-term identity of a developer, then you should not use esoteric ones. This is well known! On the other hand significant parts of the industry don’t do the former, so they are free to do the latter. As an example, nobody knows Go when we hire them to write it.
- tensor 4y agoI actually did start a company using Clojure. All these points are true. Yes, it helped filter candidates in the early days, and also helped attract people to jobs that might otherwise not be that interesting or competitive. It's difficult for pre-funded companies to compete with the FANG companies. However, there were negatives. At the time the Clojure library landscape was less mature. Clojure developers would also tend to abandon projects to create "the next best version" which made migrating and keeping up with the libraries of the day difficult. Most of the libraries were very rough around the edges too. On the other hand we could use any Java library which was a boon. As the team grew, it became harder and harder to hire people in larger numbers. Especially in a single timezone. Also it became apparent that many of the people who were very happy in the early days, were increasingly less happy as we added standardization and protocol to our dev process. As some commenters pointed out many of the people attracted to Clojure liked playing with the latest and greatest, and things were "boring" when they couldn't work with whatever the latest fast changing trend in the community was. Trying to teach people Clojure also an issue. For some it was challenging, and for others, they were not really interested in using it. It was a good learning experience, but I don't think I'd do it again. There is something to be said for using "boring" technology for the majority of your tech stack.
- rr888 4y ago> building in esoteric languages can serve as a filtering mechanism in and of itself. Yes, definitely in growth periods you get the best developers migrating to it. I'd say Rust is like this now. The problem is a few years time they'll move on to the next big thing leaving you stuck. I'd think Clojure is in this spot right now.
- vikeri 4y agoHaving been at a Clojure startup I can second this, despite our non existent brand we found great candidates. And teaching a smart junior developer Clojure wasn't harder than teaching people Ruby or Java. As soon as the initial lisp shock is over learning is much faster due to the simplicity (it's just data).
- jwr 4y agoGood point! In my experience, you don't need to hire "Clojure developers". Look for good candidates that have worked with functional programming languages and you'll be fine. They'll get up to speed in a matter of weeks. Any flexible and educated developer can use Clojure, it's not magic. In other words, it's not about hiring a "Clojure developer", it's about hiring a good developer.
- jaxr 4y agoProbably worth bringing to attention the python paradox essay: http://www.paulgraham.com/pypar.html http://www.paulgraham.com/pypar.html
- drikerf 4y agoI haven't gotten to that stage yet. But I think it's difficult to hire good devs for all stacks, be it Python, Ruby, JS. Clojure community is super friendly and full of very talented developers and I'd love to pay someone to write Clojure :). Yes, remote work for sure is an edge when hiring! Also reminds me of the essay "The Python Paradox" by Paul Graham (http://www.paulgraham.com/pypar.html http://www.paulgraham.com/pypar.html)
- heneryville 4y ago2 years ago I was hired into a Clojure based start-up with no experience in Clojure. It is easy to learn, and I love it now. One of my duties is hiring, and we don't look for developers with Clojure experience. Instead we look for developers with good skills in any language, and trust they'll be able to figure out Clojure. In a way, it has actually widened our hiring pool since we can't be shackled to the XXX years of experience in YYY approach.
- gdsdfe 4y agoStill hiring? :)
- heneryville 4y agoWe're paused right now since we're prepping for a funding round. However, have you checked out the Clojurians slack? They have a #jobs channel which is pretty good.
- outworlder 4y ago> If you've chosen a stack that's too esoteric then this will be a huge blocker to making any real progress. Clojure is... esoteric now? I would understand if we were talking about, I don't know, INTERCAL. But Clojure? Is Scala 'esoteric' too? > Python is a great language but there are no devs available where I live. Ah, I see. Yeah, by that measure Clojure will be esoteric indeed. Python developers being rare is very surprising.
- bsder 4y ago> Python is a great language but there are no devs available where I live. Wow. Where on Earth do you live? Real question, not being sarcastic. Presumably not the US. I've found Python developers even in some fairly small towns (approx 25K people).
- zerr 4y agoHow long does it take for some non-Python dev to become a Python dev? One week? Two?
- JonChesterfield 4y agoSyntax is probably within an hour. Spurious colon in a few places, whitespace deemed more important than lambda. Brief confusion over the scoping rules. Then the library ecosystem is probably good for a lifetime.
- onion2k 4y agoLearning a language like Python is easy enough, but the hard bit is actually unlearning the language you came from. If you give a JS dev a couple of weeks to learn Python they'll probably succeed, but their code will be 'python syntax written with a JS thought process'. The code will work but it won't be good code. Sometimes that's fine, but as the foundations of a startup? Getting to the point where you're writing good Python and taking advantage of what the language provides, knowing the ecosystem, and building things that other Python devs won't look at and think "Wtf?" takes much longer than weeks.
- mradek 4y agoAlso a point for node: in the time people have argued about how node sucks (some valid points, all easily mitigated) and how X is better, they could have already shipped a bunch of nice features. Focusing only on web stuff.. If you have a good grasp of design patterns and you can build out your system in a modular way, I think node is a great starting point. I love starting with node because typescript is awesome, the performance is nice, the community support is tremendous, the scaling is easy, and finally it’s easy to move off it. If some part of the system starts becoming a bottleneck, just swap that piece out for something more suitable. One thing I like about this time right now is that most things are built just fine to be used in creating something new and useful products.
- LAC-Tech 4y agoHave we learned nothing from covid? You don't need to limit your talent pool to your own backyard. Especially since you're not in a major tech hub, by your own admission.
- freilanzer 4y ago> but there are no devs available where I live If only there was a worldwide information technology network allowing people to work together remotely.
- meerita 4y agoQuestion for Clojure's pros: as a designer I started programming javascript for a long time, now I can do my own APIs on Node easily, would it be hard to do APIs in Clojure? Can you recommend me a video course for learn it?
- drikerf 4y agoClojure is great for writing backends. Checkout Ring and Compojure. Simple libraries for making an API :).
- meerita 4y agoWill check those, thanks.
- heneryville 4y agoI learned by reading through a book, then working through problems on https://4clojure.oxal.org/ https://4clojure.oxal.org/. If you've got JS experience it won't take too much effort to pick up. Don't get too carried away with forming the perfect tail recursive pure functional monad or whatever. Get into just doing what you're trying to do quickly, then after you're competent, read other people's code to correct your style.
- meerita 4y agoI always go pragmatically, I don't focus too much on ultra complicated architectures, but more on get things done.
- slifin 4y agohttps://www.learnreitit.com/ https://www.learnreitit.com/
- mulberrybush 4y agoJacek Schae's courses on reitit for the backend and reagent, reframe for the front end are very good https://www.jacekschae.com/ https://www.jacekschae.com/
- beiller 4y agoI worked at a startup that was built on Clojure. It had trouble finding developers for reasonable salaries at the early mid stage. They decided to switch the stack to python at that point. Just an anecdote!
- silentsea90 4y agoBuilding a company in Python feels like a bet against yourself ie the company/codebase will never get big enough that using Python (lack of static typing etc) will ever be a problem
- throwaway5959 4y agoIn monoliths sure, but if you’re building services that are compact and tested it’s less of an issue.
- guhidalg 4y agoTypes are tests run by the compiler. You shouldn't avoid testing, just let the compiler do it for you.
- throwaway5959 4y agoI’m aware. Before Python I wrote primarily in Scala and I do Rust on the side. Good luck hiring at scale for those without either offering a really interesting product to work on or lots of $$$. Even then, still easier to hire for Python.
- silentsea90 4y agoJust as the other commenter says, types are half the testing done for free which is a massive improvement.
- keithasaurus 4y agoIt's pretty easy to enforce static typing in python these days. mypy and pyright are both pretty mature.
- ducktective 4y agoWhile we are at it, anyone knows what's the Common Lisp story in webdev? Both backend and frontend?
- mejutoco 4y agoNot an expert, but I would expect hunchentoot https://edicl.github.io/hunchentoot/ https://edicl.github.io/hunchentoot/ for the backend and a Common Lisp "dsl" generating javascript for the frontend.
- aidenn0 4y agoI am a hobbyist lisp developer and have written webapps in CL. I use cl-who[1] for generating html and parenscript for javascript. I use clack on the backend, but hunchentoot is probably more popular. Both backends have plenty of routing libraries available (hunchentoot comes with a decent one baked in, clack does not). postmodern is a Postgres specific sql backend that is great. There are database-agnostic SQL libraries as well (clsql and cl-dbi I believe are the two big ones) but I haven't tried them. 1: People whose opinions I trust have told me that spinneret is a better choice. It did not exist when I learned cl-who. cl-who is "good enough" for me that I haven't switched.
- vindarel 4y agoWe have a number of libraries that are easy to use together for the backend, no fancy web framework (build your auth page yourself), no fancy client-side lispy libraries. We might have a Fighweel-like tool, but no one is interested (Trident-mode for Emacs). There's one framework that looks promising to build fully dynamic apps in pure CL with one code base (websockets inside). It provides a GUI-like experience to build all kind of apps (a website, a chat, the snake game…): https://github.com/rabbibotton/clog/ https://github.com/rabbibotton/clog/ I am using Hunchentoot, a routing library on top (easy-routes), the Mito ORM, and for the client side I am conservative: HTML templates with Djula, interactivity with HTMX, Vue if required, JS. The great thing is that I can build a standalone binary of my web app, including the static assets, the webserver, the lisp compiler and debugger… for ±28MB unzipped and instantaneous startup times. https://lispcookbook.github.io/cl-cookbook/web.html https://lispcookbook.github.io/cl-cookbook/web.html https://github.com/CodyReichert/awesome-cl#web-frameworks https://github.com/CodyReichert/awesome-cl#web-frameworks https://lisp-journey.gitlab.io/blog/lisp-for-the-web-deploy-with-systemd/ https://lisp-journey.gitlab.io/blog/lisp-for-the-web-deploy-...
- ghufran_syed 4y agofyi @drikerf, newsletter signup is not working, the error says “magic link failed to send”
- drikerf 4y agoWow, thanks! Recently migrated and seems something went wrong. Fixed now :)!
- drfuzzy89 4y agoAlways great to see more start ups being built on Clojure! For folks interested, this is a great talk on the same subject: https://youtu.be/L9KcoRZcdbc https://youtu.be/L9KcoRZcdbc Full disclojure: I work for the company in the talk, though I'm not one of the presenters.
- pedrodelfino 4y agoThe pun is nice (the lecture also seems interest)! I can't believe I never use this pun on my Clojure job...
- alfl 4y agoEchoing some of the other posters here: Clojure is fantastic, hiring (several) Clojure developers is hard. Conversely, you can also get to the end of your roadmap quickly (Clojure being great) and end up overstaffed. There's a different line to walk with languages like Clojure. Source: I walked this line.
- jwr 4y agoHaving built a business on Clojure: I'd highly recommend it. Stable, developed in a mature way over many years, with a fantastic and mature community. Together with ClojureScript it's one of very few solutions for writing server/browser apps with shared code, which enables interesting economies.
- udkl 4y agoI would love to read a little about partsbox and the clojure behind it. Do you have an article published ?
- jwr 4y agoNo, I don't, but I probably should write one. I write about my experiences in various posts/comments from time to time, but that is lost after several minutes, as The Internet moves on to the next shiny thing :-)
- iLemming 4y agoI have not built a business with Clojure and I wouldn't recommend it. For the reason that I'm hoping one day to build one and beat the averages. Stay away from Clojure, or else... :)
- ithrow 4y agoBesides being fun for sure because you can use whatever you want for your own stuff I don't see what's special about clojure here. They are using react (behind a wrapper), IME, clourescript is not worth the hassle. On the server they are using ring/compojure which is similar to js/express, python/flask that can get the job done equally well in this case. The story would be more interesting if they were using something like datomic instead of postgres since datomic is were clojure could differentiate itself. Keep in mind that they have to juggle between almost four different languages, Java, Javascript, Clojure and Clojurescript, almost because there are differences between Clojure and Clojurescript. Instead of for example just using one language: JS.
- jwr 4y ago> clourescript is not worth the hassle ClojureScript is one of the main reasons why Clojure makes sense in my business. I can use the same language and share the same business logic code between the server and the browser app. That's huge! Also, I avoid a load of problems related to communication and serialization, because the native serialization format is EDN, e.g. Clojure data structures. There is no need to adapt your data structures to the limitations of, say, JSON.
- thih9 4y agoIf using the same business logic is one of the main reasons, why not JavaScript / TypeScript? Also, what are the limitations of JSON that EDN handles better?
- ajgrover 4y agoI don’t use Clojure but based on a quick search, EDN is extensible so you can serialize things like datetimes and UUIDs with type information rather than as plain strings
- leiferik 4y agoSome advantages of EDN: * Can represent sets `#{1 2 3 4 "foo" "bar" true false}` (JSON only supports arrays) * Maps/sets can contain arbitrary EDN as keys/values. `{[1 2] "foo", 5 :a, "5" :b, true -1, false 5}` or `#{[1 2] #{3 4} (5 6)}` (JSON only supports string keys on "objects") * Supports clojure types like keywords (`:foo`, `:bar/baz`) and symbols (`foo`, `bar/baz`), and can be extended to support other values as well
- hypersoar 4y agoFor me, the killer feature of Clojure is "REPL driven development". The ability to get rapid feedback as you build things up is incredible. I'll make a comment form and evaluate expressions within it to try things out as I go. By the time I've written any reasonably complex function, all of the pieces have been tested on various examples. Once I'm done, the comment form leaves a helpful record of my thought process. If you're wondering what's so great about the Clojure repl (and other lisp repls) in particular, the thing is that you never have to actually type something into it. You can run evaluations from the code file itself. The structure of lisps makes it clear exactly which code you want to evaluate. To do this, I use the excellent CIDER package for emacs. I understand Calva for VS Code and Cursive for IntellJ offer similar functionality. Here's a good talk on what this looks like: https://www.youtube.com/watch?v=gIoadGfm5T8 https://www.youtube.com/watch?v=gIoadGfm5T8
- pedrodelfino 4y agoI kind of agree with you. I used to work with Common Lisp in a Desktop App (Nyxt browser). I had some fun playing with Racket. And I love Emacs. So, I am already into the Lisp idea. But, I was kind of disappointed with Clojure which is new in my life and has been used in my current job. Maybe you have a backend bias in your testimony? I have been working with ClojureScript (re-frame and reagent) on front-end stuff and, unfortunately, the REPL does not seem to help me that much on my workflow. I miss the REPL driven development, by the way... The real "interactive programming" seems to happen on Chrome Dev Tools + Browser's reactions to Chrome Dev Tools tweaks on the UI + (lastly) changes on the source code via the editor (Emacs in my case). Namespaces as prefix of invocations on the REPL are not that trustworthy on ClojureScript, apparently. It could also be that I am a noob and I missed something, so... How do you feel about ClojureScript?
- drikerf 4y agoDon't know about your exact environment but I've structured my code so most of it is in .cljc files which can be evaluated in browser and on server. This allows me to evaluate/test/run things easily in the emacs repl. For view code I think hot reloading has been a great thing with Clojure/Script too. Everything is reloaded properly and the state remains.
- bhanumanish 4y ago
- deleted 4y ago[deleted]
- as4hretret 4y ago
- ar7hur 4y agoWe built Wit.ai on Clojure and it was one of the best decisions we’ve ever made. Most engineers we hired has no prior experience but learned quickly. It gave us a great advantage to hire the best.
- fredrikholm 4y agoGreenspun's tenth rule, adopted for 2022: > Any sufficiently complicated TypeScript or Java program contains an ad hoc, > informally-specified, bug-ridden, slow implementation of half of Clojure. Once you grokk the approach and workflow Clojure takes in solving problems, the distance between having an idea and writing a rock solid implementation of that idea is the shortest I've experienced in my ~20 years of programming. If you want to write succinct, transparent code whilst minimizing the future potential of introducing bugs, Clojure is as good as it gets.
- synthc 4y agoCute, but i'll counter with this one: > Any sufficiently complicated Clojure program contains an ad hoc, > informally-specified, bug-ridden, slow implementation of half of Spring.
- xapata 4y agoIncluding Spring itself? Jokes aside, can't Clojure simply call whatever you want from the JVM?
- dekelpilli 4y agoMaybe theoretically true (I'm not sure about the extent of the completeness), but definitely not practically true when it comes to annotation-driven-development frameworks such as Spring.
- xapata 4y agoAh. While objects have their uses, I think the Clojurist might prefer, well, closures. That's not to say one is better than the other, just that the Clojurist probably won't miss the style of the Spring framework.
- bcrosby95 4y agoAh, Spring - freeing Java developers from the horror of typing "new" since 2002.
- georgeoliver 4y agoIt was interesting to me the author seems to use 'old-school' Clojure, for lack of a better phrase, with lein as the build tool, etc., rather than more recent tools/stacks; I don't use Clojure myself, is my impression off?
- jwr 4y agoSomething being "more recent" doesn't necessarily make it better :-) I use leiningen, too. I tried other approaches, but had trouble getting them to do everything that I need (for example, AOT compilation of the entire code that goes into the final .jar), and I couldn't really see any massive advantages.
- synthc 4y agodeps is more flexible, but I you just want to run a repl, build and deploy code then lein still works fine. I usually default to leiningen: I can't be arsed to spend time configuring deps to do what lein does out of the box. (For example: building an uberjar)
- mulberrybush 4y agoI was lost when I moved to deps from lein, but just forking and cloning https://github.com/practicalli/clojure-deps-edn https://github.com/practicalli/clojure-deps-edn as $HOME/.clojure solved the problem - this base deps.edn contained all the aliases I needed - creating a new project, searching and adding dependencies, hooking up data inspectors like portal or reveal, testing, code coverage, benchmarking, building uberjar etc. Moving to deps also introduced me to polylith [1], which has been very useful for building large multi-component projects [1] https://polylith.gitbook.io/polylith/ https://polylith.gitbook.io/polylith/
- synthc 4y agoTo me it is kind off crazy when a build tools needs some 3rd party config library to make it usable.
- mylons 4y agore-iterating what onion2k said, hard pass on building a company around an esoteric language. enjoy attempting to hire people to work on this. best case you get an eager programmer wanting to learn the language. worst case you get zero experienced hires unless you’re a massive success.
- haolez 4y agoThe real worst case scenario is facing a competitor that's much faster than you on implementing new features and testing hypothesis. Using an esoteric language might be one of the leverages that this competitor has against your tight mainstream stack.
- Scarbutt 4y agoIn 2022 thinking that your esoteric language is going to help you implement new features faster than with a mainstream language is just plain language zealotry.
- haolez 4y agoI disagree.
- mylons 4y agolove the substance in your comment
- JonChesterfield 4y agoOn the basis that esoteric languages come with fewer libraries and new features largely involve gluing libraries together to make things like other things that already exist?
- mylons 4y agoi’ve worked with people like you in the past. they all write books for their language now. none of them correct. it’s almost never the language that holds you back. it’s the organization and it’s priorities. an easy example is instagram and their use of python. they crushed with a language that clojure folx look down on.
- ldite 4y agoAh clojure. It's all fun and games until five years down the line, you've had 100% dev churn, and you have a 100kloc codebase that nobody understands, full of functions that don't give the slightest hint of the shape of the data they're processing (it's all lists!) yet down the bottom of the callstack there's some function that'll explode if the map doesn't have whatever magical key it expects. If you're really lucky, someone will have thrown in a bunch of 'specs' that make a bunch of assertions about the data, put them on the API entry points, and then scattered some slightly different specs with slightly more restrictive assertions on various 'internal APIs', resulting in random explosions in production! And the joy of working with an esoteric language is that it attracts esoteric developers, who often get frustrated by the requirements of being a software engineer in a large company (i.e. everything that's not writing code), which leads to the aforementioned 100% dev churn (after a lot of shouting).
- CyberDildonics 4y agoWhat worries me the most about clojure and languages like it, is that seems to be for people who want to be clever with how they write programs, when that is the opposite of what I want from people I work with.
- christophilus 4y agoYeah. Personally, I really love writing Clojure. But I’ve never run it in production because I have the same reservations. I’d be the overly clever dev in this scenario.
- freilanzer 4y agoAs opposed to the paradigms of beautiful design that are Java codebases.
- CyberDildonics 4y agoWhat does a bad java program have to do with a language who's advantage and use case is to be clever on an expression level?
- invalidOrTaken 4y agoMy company (as in "I work there," not "I own it") is I think unique in that it started as an Elixir/TypeScript shop, things went seriously downhill, they brought in a new engineering team (I'm on it), we switched to Clojure, and we're doing fine. If I were to start a new company I'd absolutely run it on clojure. Even without frontend/backend code reuse, REPL-driven dev---paredit is the killer app for me. It just makes editing text files, which is what we're doing if we admit it, so much easier. It's a data point.
- powersurge360 4y agoThis might actually be the first thing I've seen pop up organically about Elixir that isn't red hot glowing praise. Can you elaborate on what was going wrong and if it was anything specific to Elixir/Typescript?
- invalidOrTaken 4y agoFrom what I can gather the old CTO did some things that were...less than ethical. As far as the code goes, they wrote a custom DB that is O(nm) when counting tables---that is, it must count every record in the DB to count how many tables there are. (Incidentally, I had forgotten this the other day and tried to do a "quick" table count...oops!) I don't know Elixir or TS well enough to say if we have Ex/ts problems---from what I can tell: - Elixir seems alright, I'd love to learn what the BEAM magic I keep hearing about is - however, syntactically I find it pretty garbage, or at least uninspired. (Note that I am a spoiled Clojure guy and have this reaction to Python, Ruby, etc. I acknowledge people can get productive work done in them.) - TS I have ha-ha-kinda-seriously trauma about from a previous job. I'm not a good person to ask here b/c I'm pretty firmly pro-dynamic in the Type wars. I will say that it is pretty freaking great to be able to have an emacs buffer open w/a repl to the cljs frontend we have for other apps, and that I really miss it whenever I have to go through the ts code.
- deleted 4y ago[deleted]
- marrone12 4y agoOne thing to note about coding in Clojure — if you never learned Java, you hit a wall at a certain point. I only know scripting languages and I had fun writing little scripts in clojure, but at a certain point the lack of java knowledge and it's class system / standard libraries held me back from doing more serious things.
- bambam24 4y ago
- vario 4y agoWhat does everybody think here of C#? I've just made foray into it and I like it a lot compared to Python, Java etc. It almost feels like Kotlin, but with certain even cooler properties.
- guhidalg 4y agoC# is great. You get: - Tons of developers know it - Tons of Java developers can be made to know it with ease - A good default IDE experience within VS and VSCode, and a JetBrains product if you prefer it. - A good LSP implementation with OmniSharp if you don't want to use an IDE. - ASP.NET, a good default Web framework. - NuGet as a package manager with tens of thousands of packages. - Better than java reflection and runtime generics. - Cross-platform CLI tooling since .NET Core, now it's just .NET. - Ability to deploy self-contained applications. - Mono version of C# is used for making games. - A continuously evolving cohesive language with minimal competitors (like Groovy, Kotlin, Scala, Clojure, etc... on the JVM) - F# if you want a stricter functional language that interoperates with C# seamlessly. - PowerShell as a way of interactively running any .NET assembly, regardless of how it was compiled. And many more... C# is one language you can build a career on and also use for hobbying and have fun. The haters will complain that MSBuild (the default build system) and Visual Studio suck. If you've tried them in the past, you're probably right. Try them again in 2022 and see if your opinion doesn't change.
- vario 4y agoThank you. I tried a JetBrains product and Visual Studio but VS was both faster (on my Mini Mac ARM M1) and the visual aesthetics were better--not to mention the overall IDE experience was very comfy, it felt like VS was strictly made for C#. I do want to branch into F# and FP but i didnt want to miss on the C# train so i tried it and it blew my mind how well the language has been designed (i mean at C# 10, .NET 6). They even made the Java-esque boilerplate thingies become automated so the code reads and feels almost like a better version of Javascript. I am a new programmer (with only Intermediate Python and tid bits of CS under my belt) but i think choosing C# for a language made sense because of all the things you mentioned, and it also helps that it is aesthetically very beautiful, and worlds apart from C and C++ in many respects.
- logistark 4y agoWell, i have to add having developing in a Clojure shop that starting to develop a new feature with Clojure is easier than Kotlin, you don't have to care almost about of the shape of the data. But later, this is a pain, you need a lot of discipline to document because you would look back at this code a who knows what data are you receiving. In addition i have to say, that a lot of libraries are falling into clj-commons because the original developers no longer works on the project, other like compojure, that is mentioned in the blog post last stable release is from 2016 and version 2 is in alpha since then. I am curious why are you using c3p0 on 2022 when hikaricp is being maintained, and last release of c3p0 is from 2019. Also no support for R2DBC. My impression is that in the last 2 years, the ecosystem has shrink, less talks, less new libraries, new libraries that are no longer maintained. Others problems arise is that Clojure lag a bit with compatibility with new Java features, still i think Clojure cannot pass Clojure functions as parameter to Java functions. It results in awkwardly having to reify Java function interface to pass function when using a Java library. No conversion from Java 8 CompletableFuture to clojure async primitives in 2022. And i think they not going to support it in the near future. What i am saying is that Java is in the future, and Clojure is in the past. They just cannot catch with new Java features and i doubt they are going to support it ever. You can still run it on modern jvm because they update the bytecode but that is all.
- newlisp 4y agoOthers problems arise is that Clojure lag a bit with compatibility with new Java features, still i think Clojure cannot pass Clojure functions as parameter to Java functions. It results in awkwardly having to reify Java function interface to pass function when using a Java library Ouch, Java 8 was released in 2014. To be fair, Clojure was never a community project though.
- lemper 4y agosome recruiters tried to recruit me a while back. too bad they wanted an experienced clojurist for their client. i mean, it's good and all but it's too hard to find some corps which use clojure around here where i live. so, yeah. while i'm excited with lisp, i don't think i have the gut to start my own shop with clojure as the main language.
- domparry 4y agoOur experience building a business with Clojure has been amazing. It has helped us to attract extremely strong engineers, and churn has not been a concern in the slightest. We've taught people (from code beginners to experienced engineers) Clojure, and all of them are able to start adding value in a very short space of time. We're six years in and there are no signs of increased maintenance difficulty due to the language. We follow the Polylith Architecture (https://polylith.gitbook.io/polylith/ https://polylith.gitbook.io/polylith/), which has given us yet another boost in developer happiness, speed of delivery, and ease of maintenance. There are many extremely large Clojure code bases out there (Ladder life, Lemonade, Simply life, Wallmart, Nubank, Atlassian) not suffering from the maintainability issues that some people here have described. After six years, I would absolutely (without hesitation) start another business with Clojure as the core.