Programming thread

Thanks for taking the time to write stuff out. I appreciate when people who know a lot put me in a situation that makes me ask myself "Why did I choose to use this?", so thanks. To be honest, using it as a resume builder was part of it, but the big part is that I'm in a situation where I can devote all my time to a project and learn and build without worry about the dosh, I wanted to try a different approach and learn how to develop using C-like modules instead of the OOP I was used to in C#. I'm curious, if you were able to devote time to a project whatever it is, what would it be?
I already have several projects on my plate which I won't elaborate on so as not to dox myself. But if you gave me a sabbatical? I'd work on an open source implementation of Datomic's backend. It's a "distributed" or "deconstructed" database in which the moving parts live in different processes and can work on different machines.
EDIT: don't let my spergery dissuade you from working on whatever you want to do, I'm just a guy with an opinion.
 
Last edited:
  • Like
Reactions: SickNastyBastard
I already have several projects on my plate which I won't elaborate on so as not to dox myself. But if you gave me a sabbatical? I'd work on an open source implementation of Datomic's backend. It's a "distributed" or "deconstructed" database in which the moving parts live in different processes and can work on different machines.
EDIT: don't let my spergery dissuade you from working on whatever you want to do, I'm just a guy with an opinion.
This is a real cool look at doing databases. I'm watching Ritch Hickey's video on youtube right now and its cool. Its forcing me to google a lot of things to make sure I understand it. Also, I'm unclear about what datomic exactly means when they say "arbitrary transactions".
 
This is a real cool look at doing databases. I'm watching Ritch Hickey's video on youtube right now and its cool. Its forcing me to google a lot of things to make sure I understand it. Also, I'm unclear about what datomic exactly means when they say "arbitrary transactions".
I think the intent is that transactions can contain anything and aren't limited to only one "fact"
 
I think the intent is that transactions can contain anything and aren't limited to only one "fact"
Thanks for turning me on to this, I find this fascinating. It is (at least in my understanding) a completely different approach to the traditional T-SQL databases I've worked with. I'm going through the docs and this is a steep learning curve, at least for me. But, stuff like this makes me super excited.

On another note, I messaged the guy who is teaching the Go class I was going through and asked him about the Rob Pike comment and he pretty much said the same thing you and Rob Pike did. And that as you progress and things get more serious that you'd probably need a different language.
 
  • Informative
Reactions: Shoggoth
Looks like someone is working on a native compiler for Emacs (lisp). Besides the obvious performance gains I'm excited about as an Emacs user I think this dev diary makes for interesting and educational reading.
In case you're not familiar, Emacs is a VM running bytecode (similar to the JVM) which happens to have a crummy editor and is programmed in a bad dialect of Lisp (Emacs Lisp).
 
Looks like someone is working on a native compiler for Emacs (lisp). Besides the obvious performance gains I'm excited about as an Emacs user I think this dev diary makes for interesting and educational reading.
In case you're not familiar, Emacs is a VM running bytecode (similar to the JVM) which happens to have a crummy editor and is programmed in a bad dialect of Lisp (Emacs Lisp).
That's interesting. I don't use Emacs anymore but if it works it's kinda cool. Hopefully it doesn't go the way Guile/Emacs did, but it's less ambitious so I guess there's a chance.
 
Marvin can probably speak more on async/awaits but it's one of the problems of doing async in typed languages, since the async type-ness contaminates all the other types it touches, so from type T you suddenly need to work with Async<T>, which is where fancy-pants things like monads come in.
You could level this argument against something as simple as Option and Maybe, where Optional-ness also pollutes everything it touches. But Options are generally considered the right-thing in typed languages, and the supposed billion dollar mistake of the null value means that even Java programmers are encouraged to use Optionals. In modern Java code, you'll also see Optionals combined with chains of flatMaps, or as a Haskeller would call them, "binds".

The argument that it's important for a typed language to distinguish Optional<T> from T is the same one that says that Async<T> should be distinguished from T. You want the type system to distinguish an honest-to-gods integer from an asynchronous computation that may have a lot of I/O to do before returning an integer, may fail with an exception, or may block forever.

The issues come with how noisy all this ends up being, in terms of how many types you have to write down (in Java, it's a lot), and how verbose the syntax is for combining asynchronous computations. F# got these issues sorted way early. It made sure the type system stayed close enough to Ocaml that you near enough have global type inference, so you don't have to splatter your code with type annotations, and it introduced computation expressions, a slightly more expressive "do-notation" inspired by Haskell. Ocaml did the same, introducing syntax preprocessors early for writing "do-notation" style async code, a variant of which has now become part of the official language syntax.

Java doesn't have either. I've written a fair bit of production asynchronous code using Java, and it makes my eyes bleed. There were basically only a couple of developers who were expected to read and write it.

The missing part of the monad story is the monad libraries, which none of these languages have, and which are still pretty much unique to Haskell. In Haskell, I can write functions that are generic over all monads, or even broad classes of monad, and then write more functions in terms of those which stay generic. It means that the same code in Haskell is even less noisy and has far less redundancy as common patterns get factored out and used over and over.

The massive difference this makes to coding style is why I don't really talk about monads in languages like F#, Java or Ocaml. I'm not going to call monads a real abstraction in a language unless I can, you know, abstract over them.
 
Last edited:
I have a question guys:
Are you afraid of coming recession/depression? I know there are some layoffs in tech, but also many companies are still hiring, and so far so good.
I am currently employed, but I wonder what skills do you think would be good to acquire to be better equipped for survival?
 
  • Optimistic
Reactions: uncleShitHeel
The missing part of the monad story is the monad libraries, which none of these languages have, and which are still pretty much unique to Haskell. In Haskell, I can write functions that are generic over all monads, or even broad classes of monad, and then write more functions in terms of those which stay generic. It means that the same code in Haskell is even less noisy and has far less redundancy as common patterns get factored out and used over and over.
Scala's cats library does a relatively good job in that regard imho. (And I know Haskell as well) The combo with Monix looks pretty nice in my toy projects. I can't speak to more because I haven't done anything more serious.
 
  • Informative
Reactions: Marvin
Scala's cats library does a relatively good job in that regard imho. (And I know Haskell as well) The combo with Monix looks pretty nice in my toy projects. I can't speak to more because I haven't done anything more serious.
Yeah, I should have mentioned Scala. I used scalaz a lot when I was coding Scala in my day-job. But while it allows you to write abstract monadic code, it brings back a lot of noise by requiring way too many type annotations. And worse, when writing very abstract code, I found myself having to do fairly involved type inference in my head, something that Haskell would have done for me. Sometimes I found it easier to write first in Haskell and then port my solution.

Maybe cats is better, but Scala's general type inference story was awful when I was using it, and I'd be surprised if things have changed much there.
 
I started to learn Java and am wondering if anyone has any good free/cheap IDE suggestions? I use VS code w/ a java pack extension for now, but want some backups just in case
 
cecograph, mea culpa for forgetting to mention you. I blame your less memorable name. But thanks for shedding light on the issue. You touch on why I prefer dynamic languages, but I guess I lack experience with the ML family to know what it's like to work with a proper type system and properly inferred types
That's interesting. I don't use Emacs anymore but if it works it's kinda cool. Hopefully it doesn't go the way Guile/Emacs did, but it's less ambitious so I guess there's a chance.
It's already part of Emacs as an official branch and will hopefully be fully integrated in the future after they finish testing.
Are you afraid of coming recession/depression? I know there are some layoffs in tech, but also many companies are still hiring, and so far so good.
Afraid? Not very. I feel competent enough to be able to find employment. I still get messages from recruiters and have options. Bummed? Absolutely. I like where I work and I was planning on asking for a big raise, but now due to a looming recession all raises are on hold for the foreseeable future. I might have to leave if I want that raise.
I started to learn Java and am wondering if anyone has any good free/cheap IDE suggestions? I use VS code w/ a java pack extension for now, but want some backups just in case
I hate IntelliJ but it's supposed to be good for Java.
Or you can always use Emacs with LSP/DAP
 
IntelliJ IDEA
I gave this a look and it looks like a pretty easy setup. I'm keeping this in mind, thanks.

I hate IntelliJ but it's supposed to be good for Java.
Or you can always use Emacs with LSP/DAP
I haven't tried this in a while. I need to re-skin the IDE so I can have a slick looking environment because I need pretty things. Can't install lsp-mode atm even after trying and adding the melpa-stable package reference.

On that note, can anyone find the picture of Richard Stallman in a sombrero?
 
Anyone remember Turbo Pascal?
This was the primary language taught at my university at the time I attended. To buy a copy for personal use meant purchasing a set of 5.25 inch floppy disks. If I recall, TP also had an object-oriented framework for creating DOS-based applications.

By the time I graduated, the CS department was starting to phase out Borland/Turbo Pascal in favor of C/C++.
(E: Typo)
 
Last edited:
Back