Programming thread

  • 🐕 I am attempting to get the site runnning as fast as possible. If you are experiencing slow page load times, please report it.
all the syntax you really need to denote any tree structure is ( )
this post was paid for by the lisp internet defense force
I wonder who could be behind this post...
clisp-menorah.webp
 
>libraries cost money
Run away at C speeds
Technically Matlab doesn't cost money
doge-pirate.webp
At least Matlab still appears to offer functionality that justifies its niche as crazy expensive proprietary software. For example, I've heard that Matlab's DSP functionality still doesn't have a real open source competitor yet. But in the world of data science, SPSS has been on a long decline, its lead having been gobbled up by R and, more recently, Python. Here's pricing to put Paradox Interactive to shame:
Screenshot 2025-07-24 at 07-50-56 IBM SPSS Statistics.webp
Looks like you have to pay extra for features that are in R's base or readily available with install.packages().
 
Last edited:
Technically Matlab doesn't cost money
View attachment 7684906
At least Matlab still appears to offer functionality that justifies its niche as crazy expensive proprietary software. For example, I've heard that Matlab's DSP functionality still doesn't have a real open source competitor yet. In the world of data science, SPSS has been on a long decline, its lead having been gobbled up by R and, more recently, Python. Here's pricing to put Paradox Interactive to shame:
View attachment 7685029
Looks like you have to pay extra for features that are in R's base or readily available with install.packages().
That seems pretty reasonable compared to some of the shit I had to work on before: https://www.progress.com/openedge/features/abl

Horrible fucking language (Looks like SQL, isn't set based but cursor based) Distribution is strictly on a "contact us for pricing" basis. UI sizing is defined in characters. The IDE sucks major balls. This is how hellow world looks:
Code:
DEFINE VARIABLE w AS HANDLE NO-UNDO.

CREATE WINDOW w ASSIGN
    WIDTH = 50
    HEIGHT = 5
    MESSAGE-AREA = FALSE
    STATUS-AREA = FALSE.

CURRENT-WINDOW = w.

DEFINE BUTTON btnOK LABEL "OK" SIZE 12 BY 1.2.
FORM
    "Hello World!" VIEW-AS TEXT AT COL 20 ROW 2
    btnOK AT COL 20 ROW 4
    WITH FRAME f SIZE 50 BY 5 NO-BOX THREE-D.

VIEW FRAME f.
ENABLE btnOK WITH FRAME f.
WAIT-FOR "CHOOSE" OF btnOK.
DELETE OBJECT w.

Compiling works by writing code to tell the IDE what files to compile. Which regularily resulted in a bunch of files not getting recompiled when changed and leading to WEIRD bugs.

Oh and it's far easier with it to work directly on a reference to the data in the (proprietary) database than working with a copy. So accidentally updating records is way too easy to do.

And that's just surface level shit, for a more exhaustive, but not exhaustive at all, list go here https://abevoelker.com/progress_openedge_abl_considered_harmful/

NO marketable skills come from working with it, whatsoever.
 
Horrible fucking language (Looks like SQL, isn't set based but cursor based)
mmmmm this is going to be the most delicious COBOLslop i've seen this month we eating good today
Distribution is strictly on a "contact us for pricing" basis.
is it ever encouraging to see that in any scenario? (except where it's some sort of service that always depends on a lot of unforeseeable factors)
DEFINE VARIABLE w AS HANDLE NO-UNDO.
this code is already so readable, it's almost exactly like english! i declare things as niggerlicious no-divine-intellect all the time!
CURRENT-WINDOW = w.
nice magic variable i assume it completely doesn't work and refuses to tell you why if you don't maintain this variable perfectly
WITH FRAME f SIZE 50 BY 5 NO-BOX THREE-D.
"three-d"
ah, it's so readable and easy to understand, because it's spelled out! such brilliant language design
VIEW FRAME f.
"what's a variable declaration?"
at least this method makes it highly readable, since it's in english! i know exactly what it does: either creates a frame and views it or creates a frame that can view (as opposed to a frame that can't view) or maybe something completely different
DELETE OBJECT w.
and this is the cherry on top. some of us like to talk about how every programming problem was solved by lisp programmers in the 60s as a funny joke, but this actually was solved by lisp programmers in the 60s
of course maybe it's like that because every variable in the language has to be "in the database"
 
mmmmm this is going to be the most delicious COBOLslop i've seen this month we eating good today

is it ever encouraging to see that in any scenario? (except where it's some sort of service that always depends on a lot of unforeseeable factors)

this code is already so readable, it's almost exactly like english! i declare things as niggerlicious no-divine-intellect all the time!

nice magic variable i assume it completely doesn't work and refuses to tell you why if you don't maintain this variable perfectly

"three-d"
ah, it's so readable and easy to understand, because it's spelled out! such brilliant language design

"what's a variable declaration?"
at least this method makes it highly readable, since it's in english! i know exactly what it does: either creates a frame and views it or creates a frame that can view (as opposed to a frame that can't view) or maybe something completely different

and this is the cherry on top. some of us like to talk about how every programming problem was solved by lisp programmers in the 60s as a funny joke, but this actually was solved by lisp programmers in the 60s
of course maybe it's like that because every variable in the language has to be "in the database"
Sadly, it's one of the nicer pieces of code written in that shit language. If you ever have to aggregate data from multiple tables, or access multiple rows of one table at once, the gun starts to look quite tasty.

edit: Here's 2 "fun" examples of how shit it is: https://community.progress.com/s/article/000031694 https://docs.progress.com/bundle/abl-reference/page/KEYWORD-ALL-function.html

"Because KEYWORD-ALL recognizes abbreviations, it does not distinguish betweenFORM and FORMAT or between ACCUM and ACCUMULATE." A lot can be gleamed from just that one statement (yes, EVERYTHING can be abbreviated, including DB accesses)
 
Last edited:
I dare you to find a single proprietary language that isn't an unusable turd straight out of hell, missing basic features from 1980 while the reference sole implementation is full of bugs that never get fixed. "Proprietary language" is the reddest of flags for any software, it emits pure 625nm EM radiation.
 
OK fellow autists for the past few years all the software I've written has been for sys admin tasks or data science and it has all worked really well but it's all been quite short. Looking for resources on software architecture so I can broaden my horizons and write more complex code. I'm mainly looking for an object-oriented approach but I figure there's probably functional stuff out there too.
 
OK fellow autists for the past few years all the software I've written has been for sys admin tasks or data science and it has all worked really well but it's all been quite short. Looking for resources on software architecture so I can broaden my horizons and write more complex code. I'm mainly looking for an object-oriented approach but I figure there's probably functional stuff out there too.

Here you go. Wlashins book about domain modeling is fantastic (also the site in general is a fantastic resource)

It definitely leans quite far into enterprise and functional stuff though
 
  • Informative
Reactions: Belisarius Cawl
OK fellow autists for the past few years all the software I've written has been for sys admin tasks or data science and it has all worked really well but it's all been quite short. Looking for resources on software architecture so I can broaden my horizons and write more complex code. I'm mainly looking for an object-oriented approach but I figure there's probably functional stuff out there too.
well i've heard the general trick for writing a huge program is to write a bunch of small programs and glue them together with another small program
the fact that they're all being developed together and linked together into one program is just an implementation detail
just make sure the small programs don't become too dependent on each other (which makes them into big programs, and those are impossible to understand)
you basically already do this when you break shit into functions, this is just a simple level of recursion

also, if you can get away with nice small separate programs, do! 5 small programs are often better than 1 program that is 5 times as big as a small one

anyway on the topic of large scale oop resources i've heard good things about the gang of four oop design patterns book
 
well i've heard the general trick for writing a huge program is to write a bunch of small programs and glue them together with another small program
This might be the hardest and most important problem in programming. Finding the right encapsulation boundary and exposing a good API to make a system understandable and flexible.
 
well i've heard the general trick for writing a huge program is to write a bunch of small programs and glue them together with another small program
I have been learning this more and more as of late, but I still struggle with dependencies.

I think that maybe dependency injection or context sharing might be the solution though?

One problem I have is logging, if I want every program to log then I get one big dependency tree, or I can pass the logger around like a cheap hooker.

The only problem which I haven't quite figured out is what I should do if such a dependency should be optional. Ship a null logger that no-ops? Stub the logger in each program? If it was a normal dependency, I can just turn the logger off statefully and not worry about it locally.

Any advice?
 
well i've heard the general trick for writing a huge program is to write a bunch of small programs and glue them together with another small program
the fact that they're all being developed together and linked together into one program is just an implementation detail
just make sure the small programs don't become too dependent on each other (which makes them into big programs, and those are impossible to understand)
you basically already do this when you break shit into functions, this is just a simple level of recursion

also, if you can get away with nice small separate programs, do! 5 small programs are often better than 1 program that is 5 times as big as a small one

anyway on the topic of large scale oop resources i've heard good things about the gang of four oop design patterns book
I have to, somewhat, disagree/expand on that with you a bit there. IMO the most important part is designing your data representation to be good and reusable. 1 data structure that has 100 functions that can do stuff with it is vastly superior to having 10 datatypes with 10 functions each. Within one program that is pretty easy to do, but as soon as serialization/deserialization is involved it becomes a huge PITA.
The only problem which I haven't quite figured out is what I should do if such a dependency should be optional. Ship a null logger that no-ops? Stub the logger in each program? If it was a normal dependency, I can just turn the logger off statefully and not worry about it locally.
As in turn logger off for some parts of the program or the entire one?
 

Here you go. Wlashins book about domain modeling is fantastic (also the site in general is a fantastic resource)

It definitely leans quite far into enterprise and functional stuff though
Good old Microsoft Visual OCaml
well i've heard the general trick for writing a huge program is to write a bunch of small programs and glue them together with another small program
Obviously but I want to expose myself to theory on the subject so that I don't end up reinventing the wheel
also, if you can get away with nice small separate programs, do! 5 small programs are often better than 1 program that is 5 times as big as a small one
For context, I want to solve problems like "what would be a maintainable way to implement classes for genetic algorithms". I'm not sure the Unix approach applies here.
anyway on the topic of large scale oop resources i've heard good things about the gang of four oop design patterns book
I am not going to say it's a bad book but for my purposes a lot of the material is too high-level and just not adequately hands-on. Look at this:
Screenshot 2025-07-25 09:54:04.webp
I am not going to be writing an entire word processor to go along with the material. Also, all the code examples are in C++ or Smalltalk. While I have written some of both (using Pharo in the latter instance), I know neither very well.
 
This might be the hardest and most important problem in programming. Finding the right encapsulation boundary and exposing a good API to make a system understandable and flexible.
yes it sure does sound pretty simple but it really isn't
One problem I have is logging, if I want every program to log then I get one big dependency tree, or I can pass the logger around like a cheap hooker.

The only problem which I haven't quite figured out is what I should do if such a dependency should be optional. Ship a null logger that no-ops? Stub the logger in each program? If it was a normal dependency, I can just turn the logger off statefully and not worry about it locally.

Any advice?
perhaps try separating the logging logic out from the program logic when possible
e.g. you have some code that runs other code and it is in charge of logging statistics and any thrown exceptions, and the inner code does not care about logging at all, except for maybe returning some extra statistics that could be logged
i also somewhat like the "pass the logger around like a cheap hooker" solution, and there are many tricks you can use to make it so you only have to pass it around a couple times
I have to, somewhat, disagree/expand on that with you a bit there. IMO the most important part is designing your data representation to be good and reusable. 1 data structure that has 100 functions that can do stuff with it is vastly superior to having 10 datatypes with 10 functions each. Within one program that is pretty easy to do, but as soon as serialization/deserialization is involved it becomes a huge PITA.
yes 99% of programming is designing the data structures
serialization can be more or less hard depending on the language but it makes having fewer types of structure even more important
For context, I want to solve problems like "what would be a maintainable way to implement classes for genetic algorithms". I'm not sure the Unix approach applies here.
i guess you would have to write a few genetic algorithms and then figure out what they all share in common and then write some interfaces that let you write code that uses genetic algorithms and code that implements genetic algorithms in a highly independent manner
organizing programs is often quite domain specific apart from a few principles and patterns people use, and there is a notable shortage of silver bullets
 
  • Informative
Reactions: Belisarius Cawl
Back