What is a genius programmer?
What is a genius programmer?
In comp.lang.c Mr. Man-wai Chang <toylet.toylet@gmail.com> wrote:
What is a genius programmer?
[...]
On 2026-07-31 19:09, R Kym Horsell wrote:
In comp.lang.c Mr. Man-wai Chang <toylet.toylet@gmail.com> wrote:"According to MIT computer scientist Joseph Weizenbaum, the archetype
What is a genius programmer?
[...]
popularly celebrated as a "genius programmer" or "hacker" is actually
a "compulsive programmer" - a deeply troubled, pathological figure who
has lost touch with reality. In his seminal 1976 book, Computer Power
and Human Reason, Weizenbaum rejects the idea that these individuals
are true creative geniuses. Instead, he describes them as victims of
a psychological compulsion who mistake technical dominance over a
machine for actual power in the real world."
Janis
On 2026-07-31 19:09, R Kym Horsell wrote:
In comp.lang.c Mr. Man-wai Chang <toylet.toylet@gmail.com> wrote:
What is a genius programmer?
[...]
"According to MIT computer scientist Joseph Weizenbaum, the archetype
-apopularly celebrated as a "genius programmer" or "hacker" is actually
-aa "compulsive programmer" - a deeply troubled, pathological figure who
-ahas lost touch with reality. In his seminal 1976 book, Computer Power
-aand Human Reason, Weizenbaum rejects the idea that these individuals
-aare true creative geniuses. Instead, he describes them as victims of
-aa psychological compulsion who mistake technical dominance over a
-amachine for actual power in the real world."
Janis
In comp.lang.c Janis Papanagnou <janis_papanagnou+ng@hotmail.com> wrote:
On 2026-07-31 19:09, R Kym Horsell wrote:
In comp.lang.c Mr. Man-wai Chang <toylet.toylet@gmail.com> wrote:"According to MIT computer scientist Joseph Weizenbaum, the archetype
What is a genius programmer?
[...]
popularly celebrated as a "genius programmer" or "hacker" is actually
a "compulsive programmer" - a deeply troubled, pathological figure who
has lost touch with reality. In his seminal 1976 book, Computer Power
and Human Reason, Weizenbaum rejects the idea that these individuals
are true creative geniuses. Instead, he describes them as victims of
a psychological compulsion who mistake technical dominance over a
machine for actual power in the real world."
LOL. Computer scientist making psychiatric assesments?
On 2026-07-31 20:11, R Kym Horsell wrote:
In comp.lang.c Janis Papanagnou <janis_papanagnou+ng@hotmail.com> wrote:
On 2026-07-31 19:09, R Kym Horsell wrote:
In comp.lang.c Mr. Man-wai Chang <toylet.toylet@gmail.com> wrote:"According to MIT computer scientist Joseph Weizenbaum, the archetype
What is a genius programmer?
[...]
-a popularly celebrated as a "genius programmer" or "hacker" is actually >>> -a a "compulsive programmer" - a deeply troubled, pathological figure who >>> -a has lost touch with reality. In his seminal 1976 book, Computer Power >>> -a and Human Reason, Weizenbaum rejects the idea that these individuals
-a are true creative geniuses. Instead, he describes them as victims of
-a a psychological compulsion who mistake technical dominance over a
-a machine for actual power in the real world."
LOL. Computer scientist making psychiatric assesments?
Actually no; he was viewing and analyzing the situation more on the
level of society (or how computers changed the common mindset about
computers in unjustifiable ways) not a personal one about specific programmers. - A difference is certainly the pervasion of computers
in the 1970's world and today, concerning both, the societies and
the "programmers" (or more generally, the computer experts). While
we have (still) the social stereotype of "hackers" and programmers
that's just a small aspect of the picture.
It was more a plea for keeping the human values (as opposed to the "technocratic").
AI - a common topic nowadays again - BTW, plays also an important
role in that book and most he wrote back then, five decades ago, is
still valid - despite the "progress" in that area.
Janis
In my opinion, the current crop of "AI" -- the quotes are there for a
reason -- show how flawed the Turing test is.-a It completely fails to account for people anthropomorphizing the machines.-a And I think it
shows that Alan Turing didn't understand human nature well enough, when
he thought of this test.
I think we need a completely new definition of AI, if we are ever going
to reach the heights of Star Trek.-a And even then, I think those "AI" machines weren't sentient enough.
How do we even define sentience?
On 2026-07-31 20:11, R Kym Horsell wrote:...
In comp.lang.c Janis Papanagnou <janis_papanagnou+ng@hotmail.com> wrote:
On 2026-07-31 19:09, R Kym Horsell wrote:
In comp.lang.c Mr. Man-wai Chang <toylet.toylet@gmail.com> wrote:"According to MIT computer scientist Joseph Weizenbaum, the archetype
What is a genius programmer?
[...]
popularly celebrated as a "genius programmer" or "hacker" is actually
a "compulsive programmer" - a deeply troubled, pathological figure who >>> has lost touch with reality. In his seminal 1976 book, Computer Power
and Human Reason, Weizenbaum rejects the idea that these individuals
are true creative geniuses. Instead, he describes them as victims of
a psychological compulsion who mistake technical dominance over a
machine for actual power in the real world."
LOL. Computer scientist making psychiatric assesments?
Actually no; he was viewing and analyzing the situation more on the
level of society (or how computers changed the common mindset about
What is a genius programmer?
What is a genius programmer?
Hi,
Understanding the difference between Queue and Mutex?
Mutex: A single binary semaphore
Queue: A condition to signal non empty
-a-a-a-a-a-a A condition to signal non full
-a-a-a-a-a-a A monitor for the critical section
Monitors were invented by Per Brinch Hansen
and C. A. R. Hoare. Although the critical section
could be modelled by a simple mutex,
The condition wait has to leave the critical
section temporarily, so the conditions sit on
the monitor mutex. So who is the biggest moron?
Well Chris M. Thomasson, I already talk like
for one month, about the need for bounded queues,
but all he can present recently was some
C code for a spin backoff mutex?
Bye
Mr. Man-wai Chang schrieb:
What is a genius programmer?
Hi,
The clever soluton by Dmitry Vyukov shows
that the monitor is not necessarily canonical, when
we allow spinning. But spinning sometimes runs
counter to what we expect an operating system
respectively a language runtime does with processes
and threads, namely they are parked.
The absense of parking in GPU can now give the
false impression, that spinning is not allowed.
But why did Dmitry Vyukov develop his solution,
and had a website called 1000 cores? Because
with a large number of cores and certain systolic
payloads, i.e. always enough work for all threads,
the operating systems model of 2000 threads being
parked, this requirement can severly be challenged,
and allows a fundamental rethinking.
Bye
Mild Shock schrieb:
Hi,
Understanding the difference between Queue and Mutex?
Mutex: A single binary semaphore
Queue: A condition to signal non empty
-a-a-a-a-a-a-a A condition to signal non full
-a-a-a-a-a-a-a A monitor for the critical section
Monitors were invented by Per Brinch Hansen
and C. A. R. Hoare. Although the critical section
could be modelled by a simple mutex,
The condition wait has to leave the critical
section temporarily, so the conditions sit on
the monitor mutex. So who is the biggest moron?
Well Chris M. Thomasson, I already talk like
for one month, about the need for bounded queues,
but all he can present recently was some
C code for a spin backoff mutex?
Bye
Mr. Man-wai Chang schrieb:
What is a genius programmer?
Hi,
One core problem in the design of algorithms
for a large number of cores, such as found in a
GPU, and in general, is the fact, that parking
is most often more expensive than spinning.
So if you have short wait times or few waiters ,
the cost model looks favorable if you use
spinning, versus the same thing implemented
with parking. The Java libraries by Doug Lea found
in java.concurrency go even that far to use hybrid
algorithms, that use spinning and parking. I guess
its pretty easy, you just do backoff by using parking.
Bye
Mild Shock schrieb:
Hi,
The clever soluton by Dmitry Vyukov shows
that the monitor is not necessarily canonical, when
we allow spinning. But spinning sometimes runs
counter to what we expect an operating system
respectively a language runtime does with processes
and threads, namely they are parked.
The absense of parking in GPU can now give the
false impression, that spinning is not allowed.
But why did Dmitry Vyukov develop his solution,
and had a website called 1000 cores? Because
with a large number of cores and certain systolic
payloads, i.e. always enough work for all threads,
the operating systems model of 2000 threads being
parked, this requirement can severly be challenged,
and allows a fundamental rethinking.
Bye
Mild Shock schrieb:
Hi,
Understanding the difference between Queue and Mutex?
Mutex: A single binary semaphore
Queue: A condition to signal non empty
-a-a-a-a-a-a-a A condition to signal non full
-a-a-a-a-a-a-a A monitor for the critical section
Monitors were invented by Per Brinch Hansen
and C. A. R. Hoare. Although the critical section
could be modelled by a simple mutex,
The condition wait has to leave the critical
section temporarily, so the conditions sit on
the monitor mutex. So who is the biggest moron?
Well Chris M. Thomasson, I already talk like
for one month, about the need for bounded queues,
but all he can present recently was some
C code for a spin backoff mutex?
Bye
Mr. Man-wai Chang schrieb:
What is a genius programmer?
Hi,
While in 2012 spinning was absolute no go,
reflecting somehow the economic mantra
of rationalization:
rCLI want to say, in all seriousness, that a
great deal of harm is being done in the
modern world by belief in the virtuousness
of work, and that the road to happiness
and prosperity lies in an organised
diminution of work.rCY
-- Bertrand Russell, In Praise of Idleness
My work premis on the other hand, is challenging
the root assumption behind the economic mantra,
which is scarce resources. We can see the GPU
as a device that provides a place for slacking
at the workplace, lifting procrastination to
the status of working:
-a I'm a spinner, I'm a sinner
-a I spin on CAS loops for my dinner
-a Some call it busy-wait, I call it fate
-a When the queue is empty, I just rotate
--- Synchronet 3.22a-Linux NewsLink 1.2When the queue is empty, I just rotate
I have not tested this on VS 2026 yet,-a so
please let me know if this-a doesn't work for
your use case.
Johann | email: invalid -> com | http://www.myrkraverk.com/blog/
Hi,
You should write a blog about it. Could
give new live to the blog in your footer.
The blog has also seen better times,
the last post was July 20, 2020. And then?
The big reset? All brain cells gone?
On 31/07/2026 10:33 PM, Mr. Man-wai Chang wrote:
What is a genius programmer?
I don't know.-a I've found myself to be approximately the smartest
person in any given project.-a I don't do active "IQ" measurements,
nor one-up-manship in team projects.
I've noticed a lot of comp.lang.c regulars think they own the place,
and can dictate who is and isn't a "smart programmer."-a Mostly I find
such posturing stupid.
They know who they are.
On 7/31/2026 9:47 AM, Johann 'Myrkraverk' Oskarsson wrote:
On 31/07/2026 10:33 PM, Mr. Man-wai Chang wrote:
What is a genius programmer?
I don't know.-a I've found myself to be approximately the smartest
person in any given project.-a I don't do active "IQ" measurements,
nor one-up-manship in team projects.
Similar experience sometimes.
I know about where my IQ score is, but don't want to flaunt it,
seemingly, I have enough to do the things that I do, and maybe not
enough for the things I don't do. It seems to roughly balance out in
this sense at least.
One can be, by conventional metrics, near the upper end of human
capability, but among other "actually smart people", just kinda meh...
Usually not worth saying or trying to brag. If others are around a
similar level, they will not care. If others are lower, they will think
one is trying to one-up them, and/or assume that one thinks that being
"more smart" means one is also (or thinks they are) entitled to more or
to special treatment or whatever (or, people might go on the whole "if
you are so smart, why aren't you rich/famous?!" thing).
But, then failing to realize that this is akin to going up to, say,
someone who is 6'4" or whatever and being like, "If you are so giant,
why not knocking over mountains?". Like, in much the same way, a person
can be the tallest person in the room and still not have anything particularly "superhuman" in an absolute sense.
Well, say, because in this case the actual relative/immediate difference
in ability is comparably minor, but compounds over time to lead to
different trajectories. Not all trajectories lead to fame and/or wealth.
Some just lead to a tendency to obsess on technical interests and projects.
Well, and my power isn't really "top of the world" intelligence, but
rather apparently the feature of "near superhuman levels of ability to
focus on technical esoteria" (can obsess on things well past the point
where others would have gotten bored and gone off to something different).
Well, or leave background mental tasks grinding away at random things,
or allowing multiple paths to coexist (sometimes, actually, it is
"mental single-tasking" that is more difficult). Well, or to some
extent, I am fragmented, and while one of my personas manages the
outside world, another goes on obsessing on whatever half-interesting
things I last encountered (well, and the personas can have disagreements
on various points as well; converging when one path or another becomes "sufficiently eliminated").
Well, I am not a person with any real skill at planning or long range thinking, more just sort of a lot of bottom-up patterns and actions that
aim to skew probabilities towards more desirable outcomes (whether or
not any materialize being a more secondary matter).
If one does try to plan something, almost invariably it blows up in some way, with the sequence of events falling out-of-sync with the planned-
for event sequence. Like, it being annoyingly difficult to know in
advance what all things will happen, what everyone will say and how they will respond to each specific scenario, etc; so it is necessary to take
a more probabilistic or heuristic approach to things.
Ability to run scenarios and possible response chains and similar in
advance sometimes fails to keep up with real-time (but, at the same
time, can't really maintain every possible tree in advance either). Not really sure how more normal people manage this stuff.
Well, and sometimes just feeling stupid, where I encountered something
that seemed like a mystery ("why is some code running an order of
magnitude slower than expected?"), only to look at the Makefile and
realized that it was being compiled using stupid flags ("/Os" with MSVC, then looking into it and being like, "Yeah... That seems to have been
the issue...").
Though to be fair, typically the delta between "/Os" or "/O0" and "/O1"
or "/O2" is usually more around 2x than 10x. No real difference between "/O1" and "/O2" in this case ("/O2" is sometimes faster, sometimes
slower, but usually a whole lot bulkier).
I think it was a side effect of before I switched the Makefile to "/Os"
to try to evaluate binary sizes and forgot to switch it back. Then
realized I had misunderstood what "/Os" was supposed to do here
(thinking it was like "-Os" in GCC or similar), hence why it sucked.
Say:
-a GCC:
-a-a-a -O0: "Load, Load. Op, Store"
-a-a-a -O1: Basic opts
-a-a-a -O2: More opts (but stay sane).
-a-a-a -O3: Go fast and break stuff.
-a-a-a -Os: Optimize for smallest binary.
-a Vs, MSVC:
-a-a-a /O0: "Load, Load. Op, Store"
-a-a-a /O1: Fast but Small (less autovectorization)
-a-a-a /O2: Fast but Fast (lots of autovectorization)
-a-a-a /Os: Apparently merely specifies a size-optimization preference.
-a-a-a-a-a Doesn't actually do much on its own.
Annoyingly, MSVC lacks an "optimize everything but disable auto- vectorization" option; because its auto-vectorization is a foot gun
(more so if AVX is enabled, then the program gets actively slower). Presumably MSVC being tuned for CPUs where aggressive auto-vectorization
and using AVX ops when enabled is a net-win (rather than detrimental).
Well, at least luckily I am no longer running a CPU with spectacularly
slow integer divide.
I've noticed a lot of comp.lang.c regulars think they own the place,
and can dictate who is and isn't a "smart programmer."-a Mostly I find
such posturing stupid.
They know who they are.
I used to be more disinclined towards the standards-obsessed "nasal
demons" crowd, but realized they are more just a different perspective
(as in, approaching it from a "plain programmer only that wants to write code that could potentially run on anything" stance).
Whereas, say:
"I have a handful of targets I care about, and all of them work in this particular way." is a different stance, as is "The corpus of existing
code tends to expect this particular language construct to behave in
this particular way, else chaos ensues" (so if implementing a compiler,
it is well advised to keep this particular behavior).
It also being possible to find the line for what places one can cut
corners to avoid needless costs. Some standards went the other direction
and had over-specified some things, and one may find it better to simply disregard the actual standard and take an official stance of non- compliance.
Like, I can be like:
Yeah, my FPU doesn't actually fully implement IEEE-754, but for most
code, it doesn't actually matter (and, for the code that it does, one
can have the option to fall back to trap-and-emulate or similar).
Some use-cases instead need speed as the overriding concern, with any semblance of accuracy being optional. Some others falling into the
domain of needing a certain amount, but beyond this, it ceases to matter.
Typically, the properties that actually matter to code are more indirect things that were not formally specified.
The formats matter though, these are basically non-negotiable in
practice (and there is no obvious "cheaper alternative" either). Say,
while one could save some logic cost in some places by going to a non- normalized format, this would make other cases more expensive, so the normalized-only formats make sense.
Say:
-a *(float *)(&y)=*(float *)(&x);
One making the observation that code exists that will break if y does
not contain a bit-identical copy of x.
Well, and while sub-ULP rounding doesn't usually matter, the ability of exact inputs to produce exact outputs when staying within the precision range of the mantissa, does actually matter.
Like, if one cuts enough corners such that:
-a 1.0-3.0 => -1.999999
This is no longer acceptable (for scalar code), and code will start breaking.
Though, such a restriction can be relaxed for SIMD operations (assuming
that auto-vectorization is not allowed for these ops). SIMD operations
can either go through the SIMD unit (fast but inaccurate) or main FPU (slower but more accurate) depending on specific operation and parameters.
So, practically, one doesn't end up with a single do-everything, but 3 sub-tools:
-a Fast but inaccurate (SIMD unit);
-a-a-a 4 FP-ops per cycle throughput
-a-a-a Claim to accuracy: "Mostly respects all the mantissa bits..."
-a-a-a Only does Binary16 and Binary32 (but, poorly for the latter).
-a Slower but more accurate scalar unit:
-a-a-a Non-pipelined, everything takes 6/10/12 cycles;
-a-a-a Acceptable for more general purpose use.
-a-a-a Can use trap-and-emulate fallbacks for more accuracy.
-a-a-a If not strict-mode enabled, uses DAZ/FTZ.
-a Strict Mode:
-a-a-a Enables trap-and-emulate for accuracy;
-a-a-a Often needlessly slower for most code.
-a-a-a controlled as a compiler command-line option.
-a-a-a-a-a Some instructions need to be explicitly forbidden.
-a-a-a-a-a Load/Store + Convert or Op+Convert: Forbidden.
-a-a-a This mode respecting things like subnormal numbers, etc.
Then, per format:
-a short float : Binary16, assumes speed and low accuracy as priority
-a float-a-a-a-a-a-a : Binary32, scalar form, assumes accuracy (so, main FPU);
-a double-a-a-a-a-a : Binary64, main FPU only
-a long double : Binary128, trap-and-emulate only.
-a-a-a Unlike the others, Binary128 tends to assume strict IEEE semantics.
Can note also:
-a double fma(double x, double y, double z);
-a-a-a Internally needs to use Binary128 for accurate results.
-a long double fmal(long double x, long double y, long double z);
-a-a-a Internally needs to use Binary256 for accurate results.
Realistically, neither larger format can be supported by the FPU, seemed better to invest in 128-bit ALU ops and large-integer arithmetic here.
Note that in this case, in the case of RV64G support, some ops needed to
be implement via trap-and-emulate to match the specified semantics, but
this does mean that (if compiling code with GCC, and GCC uses them implicitly), there is a severe speed penalty.
So, basically:
-a FMADD.D/FNMADD.D/...
-a FDIV.x/FSQRT.x
Are: Don't use, these are slow.
In the case of FMADD and similar, it is because FMADD.x specifies single-rounding,
-a FPU can't do this natively for Binary64.
-a Except for Binaty16 and Binary32, which the FPU can do in HW.
-a-a-a Mostly because, internally, the Binary64 path has enough bits.
Other people are allowed to implement a more proper FPU though, as there
is nothing mandating the FPU needs to suck.
But, this sort of thing can get annoyingly controversial.
I can make the case that for instance Microsoft got wealthy because of
the 1992 memory shortage.
It was probably the primary cause companies
computerizing their offices in the 90s chose IBM compatible PCs over
DEC VAXen, or Unix workstations.
| Sysop: | Amessyroom |
|---|---|
| Location: | Fayetteville, NC |
| Users: | 74 |
| Nodes: | 6 (0 / 6) |
| Uptime: | 45:25:21 |
| Calls: | 1,100 |
| Files: | 1,339 |
| Messages: | 275,372 |