Ask HN: Companies using Racket?
Hello everyone,
I'm looking for companies that are currently hiring Racket developers or did so in the past.
I created https://www.racketjobs.com, because I was myself interested in workplaces that use Racketlang commercially, but couldn't find any. After sharing the site on /r/Racket and a couple of other sites I got a bit more than 100 people to sign up for the newsletter.
If anyone knows a company, using Racket, or a place on the web where I can find open Racket positions, I'd be happy to hear from you. Of course I did my Google searches before.
132 comments
[ 3.0 ms ] story [ 187 ms ] threadNot wanting to support the JVM ecosystem.
Racket is significantly more expressive than clojure in many different ways (nice gui tools, very sophisticated macro system, good IDE)
I wouldn’t want to use racket for applications that would have thousands or millions of concurrent users. For programming in the large, clojure wins by a long shot.
Can you explain why?
Because it's been used more in big prod envs? Or for reason intrinsic to the languages themselves? If the latter, which ones?
What about the battle-tested Linux kernel? If you compile your racket apps to a native binary, you can run it directly on the Linux kernel, and benefit from 25 years of use in production! People deploy Golang and Rustlang apps everyday in prod using that approach it seems to work well for them. Note, both languages are younger than Racket.
Of course you can serve millions of users with Racket, like HN. But the JVM today is much better choice. The JVM's GC is world-class and the number of man-hours put in it is probably many orders of magnitudes more than that of Racket's.
https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
FWIW, I've been staying away from Clojure because of the JVM. A lot of us are wearing the scars of the JVM battles!
[0]: https://blog.racket-lang.org/2018/01/racket-on-chez-status.h...
The difference with Python is probably bigger in programs with a big numeric part, and much smaller in programs with a lot of string. Take that number just as a general guide, not as a precise scaling factor.
Now you will.
Racket vs Python is a "common" comparison. I write the same comment once or twice per year :). (Probably because both are high level and have the batteries included. (The syntax is slightly different :) ))
https://salsa.debian.org/benchmarksgame-team/benchmarksgame/...
2) People show interest in just a few comparisons (much much fewer than are currently shown).
3a) Everything-vs-everything is available, here —
https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
3b) Everything-vs-everything is available, here —
https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
Part of what makes Hacker News fast is that the page only has 4-ish images (if you count the invisible gif that is used for indentation) and a tiny amount of JS.
[0]: https://docs.racket-lang.org/continue/
I don't think that's true (but I also don't understand what is meant by architecture in this context).
There's a simple file upload form example in the Arc community repository. It's so slow that it would timeout on files smaller than 100K. I tried optimizing the POST request parsing, but could still only barely get Arc to handle file sizes of 5M.
Tried making a similar simple file upload form in Racket, and it runs way faster. But it shouldn't be surprising that some languages are less efficient than others, right?
I'm also not sure that most web applications are text-only. Many web applications send and receive other things that plaintext.
A long time ago I read a comment somewhere saying that Arc is interpreted (as in by a program itself written in MzScheme, instead of translated down to MzScheme), which struck me as odd but I didn't check back then, so now I finally went and looked through the Arc history[1] and release 0 already does the translation, so apparently that was just wrong. There can still be reasons why Arc could be slower, though, I remember PG's design called for overloading function calls so that e.g. hash table lookups could be written like function calls, and if implemented naively this could cost a slower than usual type check on each function call and prevent optimizations applied by the MzScheme/Racket compiler like perhaps function inlining. But just a different parsing infrastructure could explain it too (working on strings-as-vectors vs. lazy lists would make a large difference, but I couldn't get down far enough to see how that's implemented; srv.arc in parse-multipart-args uses regular expressions, not sure that's what you optimized?). Anyway, new code always has large potentials for optimization (early lisps were very slow, today's implementations are generally very fast; same was/is true for Java, JavaScript, ..).
[1] http://github.com/arclanguage/anarki
Racket has a lot of well-designed and well-documented libraries that are a joy to work with. In his Racket manifesto Mathias Felleisen (author of The Little Schemer) describes how Racket is supposed to be useful for programmers at any level.
I'm currently working on a web app using the Datalog[1] back end. I guess that's very similar to Clojure's Datomic or core.logic, and I'm not sure which is "best", but Racket is certainly good.
[0]: https://lexi-lambda.github.io/blog/2017/05/27/realizing-hack...
[1]: https://docs.racket-lang.org/datalog/interop.html
DC is compiled to bytecode then interpreted. DC compiler is written in Racket.
I found Racket to be great and highly productive. If you are looking to use racket at work I would recommend you look into working as a software engineer for academia.
If you are the only engineer around, you get to use any language that you want.
There's many fine options for each domain and yeah, you get the choice of them if there's no established languages. But be careful not to go off the deep end on using your favourite langauge for everything.
On small teams it becomes increasingly important to endeavour to objectively scrutinize your own choices as best as possible.
Racket doesn't fall into the category of blub languages.
Not to mention, the metaprogramming facilities are the most advanced in the world.
But I think the implication that a hospital board can confidently hire a developer that is "good", or one that will make good decisions in their behalf is wrong. For proof, see the OP of the thread.
Their decision, I believe, directly harms the hospital's interests. He has essentially become irreplaceable, because they don't have the necessary skill set to confidently hire someone who will be able to replace them. Even if, in the best of cases, OP leaves for a better paying/what have you job hiring someone to fill their void will be hard.
That's not what bothers me most, however. It's the attitude. It's us as developers going: "I picked the best tool for the job, and thus this solution will be intrinsically better for the business". Like we're doing them a favor.
We're not doing them a favor, even if the tool is superior for the use case the difficulty of finding other people who could take over you introduces an amount of risk that almost no business that understand the full implications would allow. Worst case scenario, the tool(s) might need to get re-written from scratch. And the new versions could have bugs the old ones don't, or poorly handle all the one million edge cases that pop up over time.
But the arrogance to say we are picking the best tool for the job, while really picking a tool we wish to use to satisfy ourselves intellectually is what bothers me. If you are forthright and say "Hey, using this will make me happier at my job. And I will thus presumably perform better, and I'm the person in the position to choose what we use" I think that's fair enough. Again, it's the conceit of looking at a business person in the face, and telling them that this tool is the best for the job, when it clearly isn't.
It might be the best tool to programatically encode the job. I can concede that. But I feel that is willful blindness on the part of us programmers to the needs of the business in the pursuit of serving ourselves.
And again, that bothers me. But you might say "Fair enough, and I was in the position to make that call, so I did". It's not like we exist to serve businesses. But to reiterate for the last time: To say this is being done because it is the best suited for the job at hand is wanting to have your cake, and eat it too.
In locations where developers are very thin on the ground (i.e. not Massachusetts...), things might be harder. There's always the possibility of hiring remote.
TCL and Expect seem pretty cool in concept, but Expect's implementation seems awful.
[1]: https://developer.cisco.com/site/pyats/
Also tk was used as Digital Domain (James Cameron FX company) Nuke compositing software. Sooo.. I guess it's fine.
One note about your site: You are subscribing people to a mailing list without sending a confirmation email?
Regarding the subscription: I'm using Mailchimp. A confirmation mail should've been sent out, if you subscribed. I will look into it. Thanks for pointing that out.
Languages like Java make it much easier to treat your programmers as interchangeable parts.
Ah yes, The Slashdot Cynicism.
Guaranteed to get a +5 Insightful.
What is your experience with Racket? Or failing that, Scheme? Or, failing that, Lisps in general?
Early 2010's, I remember my company had a fairly fast, stable and small(LOC wise) data feed processing application in Perl. It just worked, barely any bugs, maintained by 2 - 3 programmers.
Time came around, and your Director level people realized the teams were too small, programmers were having too much fun and more importantly it made programmers felt valuable and hard to be treated as kleenex.
They decided to give some Architect Astronaut love to the application. Then came in Java programmers. Code base size exploded by 500x. Design pattern floods followed. DI to manage complexity which shouldn't have even existed. Hundreds of classes to do things that could be done in hundreds of lines in Perl.
Managers routinely boasted how they managed to grow their teams, about their culture, and how big and great their teams were. They could never make it work as well as it did in Perl. I too moved on. But eventually I saw they just shut down the product.
No manager likes to see their work less valuable or better than that of a programmer.
Languages like Perl, Scala, Clojure, Racket, Common Lisp are never going to see decent adoption in the industry.
I know from what I've read outside of that class that Racket is powerful enough to implement any other programming language as a library. A single programmer leveraging all these features can write an application that uses bespoke domain specific languages for every component. This is wonderful for a solo project but good luck passing that on to the new recruit.
P.S. guilty as charged. I am an old Slashdot reader.
* Poor editor support. Apart from emacs and vi, many widely used editors support syntax coloring, but few do any proper indentation, and none (AFAIK) will do anything like intellisense. Only DrRacket really goes the distance on all those points and it hasn't kept up with the likes of Visual Studio Code or Sublime etc. You may say, just use Emacs! But if another dev doesn't use it they'll just ask for the language plugin for their current editor and then be mystified and frustrated at why they can't be productive.
* Poor performance. Out-of-the-box new Racket code will be slow. You can "precompile" it using Racket's built-in tools, which is great. But the process is complex and error-prone, and deploying your "precompiled" Racket code across a team in heterogeneous environment is not straightforward. My teammates are regularly stumped by how to keep our code running quickly. Racket also lacks effective profiling tools to address this.
That said, as Bjarne Strousup opined: "There are languages people complain about, and there are languages no one uses." I have used Racket in production environment for many years.
Did these students have prior programming experience? Was their reaction due to a particular fault of Racket or would they have disliked any language to which they were not accustomed? Perhaps their reaction was to the idea of functional programming which would have provided a distressing challenge to intuitions developed through object-oriented or imperative programming? What textbook did you use?
It's not that languages like Racket, Rust, Haskell or even something like Prolog and other languages aren't interesting or useful, in many cases they're a better fit for your problems. It's just that without the background in the C-style and object oriented languages it's pretty hard to appreciate the more "niche" language and the problems they solve.
Between Go Rust, F#,Nim, Kotlin etc I think ML-style syntax, and composition over inheritance is generally being preferred in a lot of newer up and coming languages. As well languages like C#/Java/Rust are so multi-paradigm these days the crossover relevance is very high from any one language to another.
I've never seen most languages as drastically different really. Lisps and Prolog certainly are, Rust is a little with the borrow checker, but otherwise I feel like people make much ado about "int x" vs "x :int" and "f(thing)" vs "thing.f()"
I have seen developers complain they had to learn an unpractical "ivory tower" language like Haskell - and then the same developers get totally lost when C# introduced type inference and closures and deferred evaluation of queries.
I later found out that this was apparently due to having been provided with a "teaching" version of the interpreter intended for beginning students (who presuably don't know any better), which makes it even worse.
I would definitely characterize my attitude toward Racket as "hate", and if acbart made the same mistake my (generally quite reasonable and competent) CS professor did, I wouldn't be surprised if their students felt likewise.
The example that you give is not an error in full Racket:
Similarly, full Racket has multiple, powerful macro systems, and more besides, deliberately excluded from the Teaching Languages.* * *
I'm not an academic, but the community and core Racket team are incredibly supportive, and any Comp Sci professor running into difficulties teaching a Racket-based course can easily access plenty of support and guidance, starting by contacting the user mailing list.
I think you still misunderstand; racket doesn't have different interpreter/compiler versions with different language features, racket code explicitly can request different languages via a language directive (I think there is a corresponding UI option in the Dr. Racket UI.) Among the preinstalled options are a series of teaching languages designed to accompany the textbook How to Design Programs, among others.
Your son's case aside.
But CS for a while has been sold as something that anybody can do, is generally the easiest place to be where you can make big money. Even accidental, brush with hardships can make people quit as of this point.
Also read: The perils of Java schools: https://www.joelonsoftware.com/2005/12/29/the-perils-of-java...
I'd say this though - a "cult" following I would note as a likely symptom of a good curriculum, one that does such a good job that it inspires those that go through it to advocate for it strongly. Is that not itself evidence of some indirect sort? I'd say it's better than most out there.
In terms of its advantages, I think a reasonable person can decide if both the advantage is actually an advantage and at least gauge how a curriculum fares on executing on the advantage. For example, the ramping up of difficulty from the teaching languages. Instead of saying "theres little evidence", I would go through the curriculum and its advantages (and disadvantages) like that.
How did you approach teaching it?
Source: took the class with him.
[1] https://github.com/pflanze/chj-schemelib [2] https://news.ycombinator.com/item?id=18045890
It's really nice to be able to do #lang c and just write C that is FFI'd into racket so you can avoid using an external toolchain to compile.
If you're in the Frankfurt area, I will be presenting at the first After Work Racket [2] on Thursday, the 8th. Come join us.
[0] https://linki.tools [1] https://linki.tools/s10 [2] https://www.meetup.com/After-Work-Racket/events/253939676/
I found your meetup and would really like to join - too bad that the company I work for is holding a conference at this day (www.talentthinking.de). So I may join for Episode 2.