themaniacschemer

joined 1 year ago
 

cross-posted from: https://programming.dev/post/24307652

An article (by me) that demonstrates why functional languages are the minimum that one should consider when choosing which programming language to use for some project. The sole reason for that is expressiveness, which is the factor that dictates just how creative and innovative your software can be.

It also provides an interesting example: A custom looping construct defined in just 10 lines of Scheme code, but one with enormous power. This looping construct is a regular, ordinary, portable procedure. If your language can support such a custom looping construct, also as a procedure, it's easy to say it's reasonably expressive.

I must of course address the elephant in the room: The choice of the word "perfect" to describe Scheme.

I gave a definition for what I perceive is perfection: The impossibility of reaching a limit in the extension of the language in question. In plain English, this means Infinite extensibility. And what I mean is that Scheme is perfectly extensible. The choice for this language comes from the definition of the word "perfect": completed; not defective nor redundant; having all the properties or qualities requisite to its nature and kind; without flaw, fault, or blemish. That describes how extensibility is in Scheme, and that's how I judge Scheme.

I don't mean to say that any other language is by definition not perfect because Scheme is, or any such crap. Any language that's infinitely extensible will also receive the praise of being perfect, by my definition. And my view of perfection has nothing to do here with subjective beauty or perceived elegance; it's a precisely defined term rooted in objective criteria (provided in that article).

I hope that clears up the one serious misconception that may arise by reading this article's title. I am not judging based on sentimental opinions; I'm being perfectly rational and logical here. Treat this article as such.

 

An article (by me) that demonstrates why functional languages are the minimum that one should consider when choosing which programming language to use for some project. The sole reason for that is expressiveness, which is the factor that dictates just how creative and innovative your software can be.

It also provides an interesting example: A custom looping construct defined in just 10 lines of Scheme code, but one with enormous power. This looping construct is a regular, ordinary, portable procedure. If your language can support such a custom looping construct, also as a procedure, it's easy to say it's reasonably expressive.

 

An article (by me) which provides a gentle yet thorough discussion on continuations, in addition to exploring modern extensions (as provided by SRFI 226), all while maintaining a positive opinion on continuations, in contrast to any backlash or aversion it may have suffered from before.

If you want an article that dives deep into what continuations are, how they work, plus some extensions, and gives you the mental model with which you can understand them, this article is for you.

 

An article (by me) that presents an opinionated Schemer's opinion on Scheme and its unique philosophy, and what makes Scheme unique above all other languages. It also argues strongly in favor of Scheme's minimalism, and why that's a virtue, not a problem.

In short, what makes Scheme so powerful is its unrivaled nature for building custom embedded languages (which I call algebras), and combining such languages together to produce high level software. I admit this is very similar to Paul Graham's concept of Bottom-up Programming, as presented in his book On Lisp. Only, Scheme does a better job in fulfilling this concept than Common Lisp (hot take).

 

An article (by me) that presents an opinionated Schemer's opinion on Scheme and its unique philosophy, and what makes Scheme unique above all other languages. It also argues strongly in favor of Scheme's minimalism, and why that's a virtue, not a problem.

In short, what makes Scheme so powerful is its unrivaled nature for building custom embedded languages (which I call algebras), and combining such languages together to produce high level software. I admit this is very similar to Paul Graham's concept of Bottom-up Programming, as presented in his book On Lisp. Only, Scheme does a better job in fulfilling this concept than Common Lisp (hot take).

 

An article (by me) that provides a precise definition of what Object Orientation (aka, Object Oriented Programming) is, in addition to critiquing the typical mainstream definitions of OO, and providing a unique perspective on how OO done right actually looks like. By the given definition, Haskell qualifies as an object oriented language, fair and square.

I believe that the best functional languages are those which support Object Orientation well. These include Common Lisp, Scala, OCaml, some Scheme implementations, etc. Can we please spread the word about the concept of Object Oriented Functional Programming? OO only enriches FP, and never conflicts with it. Scala is a great example.

 

An article (by me) that provides a (somehow unconventional) definition of Functional Programming. This definition is rooted in the concept of first class functions (called procedures in that article). Any languages that support first class procedures are by my definition functional languages.

I also explore the theoretical potential of functional programming, its tremendous power, and how (when combined with syntactic abstractions) it brings us close to declarative programming.

 

An article (by me) that demonstrates how programming languages aren't equivalent, meaning, just because they're all Turing-complete, doesn't mean they're all equally powerful, and thus the argument that "the programming language doesn't matter" is inherently flawed and broken.

Main takeaway: Functional languages tend to be more powerful more generally, and that's because they're so expressive. Languages that aren't functional suffer poor expressiveness, especially compared to functional ones.

 

An article (by me) that dives deep into each one of Scheme's unique and distinctive features, and how they all combine together to produce a language with tremendous expressive power, providing support for any arbitrary runtime semantic conceivable, and infinite extensibility.

Also takes a philosophical approach to justifying the need for such an incredibly powerful and expressive programming language, for a practical programmer. It ties together the theoretical power and extensibility of Scheme with the principles of Domain Driven Design.

 

An article (by me) that discusses the concept of generality, provides a definition for it, and explores its relevance in the design of programming languages. Also introduces the concept of expressiveness, its importance, and why Scheme is "infinitely expressive".