[Haskell-cafe] Engineering Value of Functional Programming

jo at durchholz.org jo at durchholz.org
Sat Dec 7 18:56:26 UTC 2024


On 07.12.24 19:20, Jerzy Karczmarczuk wrote:
> Joachim Durchholz observes (in reaction to Mostafa Touny):
> 
>> application programming is finding, integrating and using the best 
>> libraries for the project. 
> Hmm. Nothing more?

Heh. I might have overlooked something.

 > No original algorithm design?

I haven't done that in decades for any application programming.
Never for UX, almost never in the backend.

The vast majority of backend(!) programming work is "please transform 
data A, combine it with B, and we'll deal with performance issues when 
they arise".
Frontend work is more about correct validation and layout so it matches 
what the UX designer wanted.

The biggest sort-of algorithmic work I did in the past 10 years was 
integrating a test system with standalone application.
The biggest technical obstacle was to implement a table structure so the 
test system knew that the fields it was seeing in the UI were really 
part of a table. No real algorithmic work, the interfaces were all 
predefined, I just had to implement them, and I believe I used some Map 
data structures provided by the language's standard library.
The main challenge was a correct implementation of the 
incompletely-specified API of the test system. That's not algorithmic 
work, that's experimenting until it works(TM).

 > No cooking of specific (problem-oriented) data structures?

Domain objects, yes. But these are very straightforward; they may even 
be associated with computations, but that's just processing, there's 
usually no loops except for summation. Computing a histogram would be 
the limit of what you'd do there, usually.

Essentially, you map everything to primitives, records, lists, and maps, 
and that's all you need.

Algorithmic is needed if the performance is bad and neither caching nor 
adding a map helps. Even O(N²) is often accepted because N is usually 
limited to some fairly low number, if the system ever scales up enough 
that this starts to bite you, you'll have to refactor and even partially 
rewrite it anyway.

> And who worked out those "best libraries"?

Specialists.
Not application programmers.

Nobody codes a new ray-tracing engine anymore, unless for an ICFP contest.
Which _is_ fun, but application programming does not do that kind of 
task. Application programming is about collecting data, doing some O(N) 
calculations on it, and shoving it to the next place, plus obviously UX.

> Further reading makes me curious what is Jo's  definition of the 
> "methology", since the fragment:
> 
>> /.../ that's not methodology, just practical experience, since the 
>> type system are given anyway so there's no methodology to teach.
> -- is something I find a bit distant from the world of teaching.

Well, I've been in the industrie (hah!) for decades now, and that's what 
I observe.
As an application programmer, you still need to know about O limits (and 
most know horribly little about that kind of stuff), but algorithms - 
that's specialist work.

The last time I saw the lead programmer do algorithmic work was when our 
design had data in different services that had to be updated 
transactionally.
It was an attempt at reimplementing two-phase commit within a single 
phase, which couldn't work; the better solution was shifting service 
responsibilities slightly so the transaction would run within a single 
service.

You may find that disappointing, but it's what all those people do once 
they hit the industry - except those few who actually hit a job where 
advanced work is actually needed.

Regards,
Jo


More information about the Haskell-Cafe mailing list