Esthétiques et éthiques des codes sources

Introduction

Esthétiques du code

Idéaux de programmation

Styles de programmation

Jugement des formes et des fonctions

La question du jugement

Instances

Éthiques alternatives

Éthiques majeures

Éthiques mineures

Conclusion

Esthétiques et éthiques des codes sources

Pierre Depaz (NYU Berlin)


Introduction


Des sciences politiques par le design de jeux vidéos, jusqu'à l'étude du code.


# all the names of god, nick montfort (2014)
{print"a"x++$...$"x$.,$,=_;redo}
_atk_atl_atm_atn_ato_atp_atq_atr_ats_att_atu_atv_atw_atx_aty_atz_aua_aub_auc_aud_aue_auf_aug_auh_aui_auj_auk_aul_aum_aun_auo_aup_auq_aur_aus_aut_auu_auv_auw_aux_auy_auz_ava_avb_avc_avd_ave_avf_avg_avh_avi_avj_avk_avl_avm_avn_avo_avp_avq_avr_avs_avt_avu_avv_avw_avx_avy_avz_awa_awb_awc_awd_awe_awf_awg_awh_awi_awj_awk_awl_awm_awn_awo_awp_awq_awr_aws_awt_awu_awv_aww_awx_awy_awz_axa_axb_axc_axd_axe_axf_axg_axh_axi_axj_axk_axl_axm_axn_axo_axp_axq_axr_axs_axt_axu_axv_axw_axx_axy_axz_aya_ayb_ayc_ayd_aye_ayf_ayg_ayh_ayi_ayj_ayk_ayl_aym_ayn_ayo_ayp_ayq_ayr_ays_ayt_ayu_ayv_ayw_ayx_ayy_ayz_aza_azb_azc_azd_aze_azf_azg_azh_azi_azj_azk_azl_azm_azn_azo_azp_azq_azr_azs_azt_azu_azv_azw_azx_azy_azz_baa_bab_bac_bad_bae_baf_bag_bah_bai_baj_bak_bal_bam_ban_bao_bap_baq_bar_bas_bat_bau_bav_baw_bax_bay_baz_bba_bbb_bbc_bbd_bbe_bbf_bbg_bbh_bbi_bbj_bbk_bbl_bbm_bbn_bbo_bbp_bbq_bbr_bbs_bbt_bbu_bbv_bbw_bbx_bby_bbz_bca_bcb_bcc_bcd_bce_bcf_bcg_bch_bci_bcj_bck_bcl_bcm_bcn_bco_bcp_bcq_bcr_bcs_bct_bcu_bcv_bcw_bcx_bcy_bcz_bda_bdb_bdc_bdd_bde_bdf_bdg_bdh_bdi_bdj_bdk_bdl_bdm_bdn_bdo_bdp_bdq_bdr_bds_bdt_bdu_bdv_bdw_bdx_bdy_bdz_bea_beb_bec_bed_bee_bef_beg_beh_bei_bej_bek_bel_bem_ben_beo_bep_beq_ber_bes_bet_beu_bev_bew_bex_bey_bez_bfa_bfb_bfc_bfd_bfe_bff_bfg_bfh_bfi_bfj_bfk_bfl_bfm_bfn_bfo_bfp_bfq_bfr_bfs_bft_bfu_bfv_bfw_bfx_bfy_bfz_bga_bgb_bgc_bgd_bge_bgf_bgg_bgh_bgi_bgj_bgk_bgl_bgm_bgn_bgo_bgp_bgq_bgr_bgs_bgt_bgu_bgv_bgw_bgx_bgy_bgz_bha_bhb_bhc_bhd_bhe_bhf_bhg_bhh_bhi_bhj_bhk_bhl_bhm_bhn_bho_bhp_bhq_bhr_bhs_bht_bhu_bhv_bhw_bhx_bhy_bhz_bia_bib_bic_bid_bie_bif_big_bih_bii_bij_bik_bil_bim_bin_bio_bip_biq_bir_bis_bit_biu_biv_biw_bix_biy_biz_bja_bjb_bjc_bjd_bje_bjf_bjg_bjh_bji_bjj_bjk_bjl_bjm_bjn_bjo_bjp_

La poésie en code pose la question de ce qui peut être exprimé.


The Art of Computer Programming1, une notion populaire mais pas explicitée.


Pourquoi avoir une opinion esthétique sur quelque chose qui est voué à disparaître?


L'ordinateur comme organe prosthétique de philosophie234


Le code source comme témoin de l'expression56


Qu'est-ce qu'on représente dans les codes sources? Comment, et pourquoi?

Qu'est-ce qu'on juge dans le code? Comment, et pourquoi?


Esthétiques du code

Jugement de formes et des fonctions

Éthiques de la programmation


Esthétiques du code


L'expérience esthétique est différente de l'expérience artistique, et se décline dans une esthétique du quotidien789.


Le jugement esthétique comme révélateur de l'environnement10:

Idéaux de programmation

Différentes métaphores pour faire sens du matériau11.


Le code source comme littérature. 121314

(textualité, communication, compression)


Le code source comme architecture.15

(construction, artisanat, structure)


Le code source comme mathématiques. 16

(logique, implémentation, objets computationnels)


Les valeurs consistantes:


Le logiciel est un artefact abstrait.1819

et l'expérience esthétique affecte le fardeau cognitif associé à la compréhension.


Un même but faciliter de la traduction le monde pour la machine de manière fonctionnelle, se décline de différentes manières.


Styles de programmation


Le style de programmation, ou comment le choix entre tabs vs. spaces peut prendre des airs de guerre de religions?


La tension entre individuel et collectif, la proposition de se présenter au monde. 2021


Le style individuel est l'expression d'une préférence, et donc d'un jugement personnel.

Si Kafka écrivait du JavaScript22

function sayIt(firstWord) {
  var words = [];
  return (function sayIt(word) {
    if (!word) {
      try {
        return sayIt();
      } catch (e) {
        // quitting at last an unsettling recursion,
        // the array was trasformed into a monstrous string
        words = "there's been a hideous bug";
        return words;
      }
    } else {
      words.push(word);
      return sayIt;
    }
  })(firstWord);
}

Le style sert de structure d'expression, une structure partagée qui devient vision de comment bien faire.23



Le style a comme contrainte l'outil (le langage de programmation)


A language that doesn't affect the way you think about programming, is not worth knowing.24

(est-ce applicable à la manière dont on considère le monde?)



Le style comme modalité épistémologique2526.


Différents styles épistémologiques auxquels ont applique différentes valeurs27:


Les esthétiques du code sont des styles de représentation de la fonction d'un artefact computationnel sur le monde.

Cette action sur le monde se fait de plusieurs manières, qui vont au-delà du superficiel.

Jugement des formes et des fonctions

La question du jugement

Il y a une relation entre esthétique et éthique, mais elle est difficile à qualifier28.


Ce qu'on peut voir, et ce qu'on doit cacher, est autant esthétique que politique29.


La visibilité par défaut: les primitives et les first-class citizens.


L'éthique peut guider l'esthétique, mais le jugement esthétique peut aussi révéler une éthique30.

Refik Anadol - Machine Hallucination, 2022
Refik Anadol - Machine Hallucination, 2022


L'exemple de la linked list:

void remove_cs101(list *l, list_item *target)
{
        list_item *cur = l->head, *prev = NULL;
        while (cur != target) {
                prev = cur;
                cur = cur->next;
        }
        if (prev)
                prev->next = cur->next;
        else
                l->head = cur->next;
}
void remove_elegant(list *l, list_item *target)
{
        list_item **p = &l->head;
        while (*p != target)
                p = &(*p)->next;
        *p = target->next;
}

Les jugements des différentes manières d'écrire (du code) vont donc révéler des préjugés et des attentes.


Instances


Le hack et l'optimisation des resources.

float Q_rsqrt(float number)
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;

    x2 = number * 0.5F;
    y = number;
    i = *(long *)&y;           // evil floating point bit level hacking
    i = 0x5f3759df - (i >> 1); // what the fuck?
    y = *(float *)&i;
    y = y * (threehalfs - (x2 * y * y)); // 1st iteration
                                         //  y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration,
                                         // this can be removed

    return y;
}

Dans la conception de structures architecturales: plannifier par le haut32, ou bricoler par le bas?33


Universal Modelling Language
Universal Modelling Language


Une maison est une machine pour vivre34 vs. une maison est un espace pour grandir35


L'anticipation d'autrui dans la communication36.

/*
* If the new process paused because it was
* swapped out, set the stack level to the last call
* to saveu(u_ssav). This means that the return
* which is executed immediately after the call to aretu
* actually returns from the last routine which did
* the savu.
*
* You are not expected to understand this.
*/

UNIX37, précurseur de l'egoless programming38.


La valeur du résultat, ou la valeur du procédé.

L'esthétique mathématique, entre concept39 et heuristique40

L'identité d'Euler est considérée comme la plus belle expression mathématique
L'identité d'Euler est considérée comme la plus belle expression mathématique


L'accord à l'environnement (fitness). 4142


Éthiques alternatives


Éthiques majeures


Le contexte de la programmation43.


La programmation structurée, entre bureaucratie...

[...] perhaps might we ask if culture decides language and computer languages follow the same patterns as any other language, or vice-versa? Or is it really simpler than all that and the programming language really is an attempt, consciously so, to make computers into super-managers based on the same reasoning that managing is more important than the object of which it is the manager?44


...et industrie.

Structured programming is a philosophy of writing programs according to a set of rigid rules in order to decrease testing problems, increase productivity, and increase the readability of the resulting program.45


Les standards de la conception de langages de programmation:4647


Éthiques mineures


L'esthétique comme manière de (dé)légitimer.484950


Les poèmes en code, tout comme les poèmes en prose, rendent pensable.5152

#! /usr/bin/perl

# repeating history, by pall thalier (2009)

sub relive { $command = shift; print `$command`;}
$bash_history = $ENV{ HOME }."/.bash_history";
while(1){
  open(HISTORY, $bash_history);
  while($moment = ){
    relive($moment);
  }
}

class Proc
                            def in_discomfort?; :me; end
                                                                end
you_are = you = 
   
   ->(you) do
       self.inspect until true
         until nil
               break you
                                                  end
           puts you.in_discomfort?
             you_are[you]
                                                end

you[
          you_are
]

Les languages ésotériques pour questionner les approches dominantes53


TrumpScript54

I will ask you, god hears you;
Our country is, safer god;
make money, 2000000 over 1000000;
Make country safe god.
Our Romney is, country over money;
immigrants are, Romney plus 1000000 over 1000000;
politics is true.
As long as, money less immigrants;:
  make america safer, country over money;
  make hard, america times money;
  make earth, hard is country?;
  if, earth; :
    say safer money
    say "is a divisor"
    Make politics false!
  Our money is, money plus 1000000 over 1000000;!
tell not politics
if, politics; :
  tell "We have a prime"!
else:
  tell "No Prime"!
America is great.

- There are no `import` statements allowed. All code has to be home-grown and American made.
- If the running computer is from China, TrumpScript will not compile. We don't want them stealing our American technological secrets.
- By constructing a wall (providing the `--Wall` flag), TrumpScript will refuse to run on machines with Mexican locales.

C-plus-equality55

#consider 

// The whole idea of main() is frankly Oppressive, in an ideal
// world there would be no main() or subroutine(), only me()
// Edit: Luckily, we now have womain(), but I still think me() is better
xe womain() //the alphabet "m" should be banned because it reminds me of the word "man"
OPENDIALOGUE

// Remember to check your privilege.  Always.
   PrivilegeCheck().
// "std" is sooooo old-fashioned. we use "sti" nowadays.
//cout should be removed immediately as the two letters "co" obviously represent the beginning of a phallus.
   sti::cout of_the_following "Hello, feminists!\n".  //Frankly I feel that line escape codes could be problematic
ENDMISOGYNY.

/*
 * Post-amble: Today I wrote my first reclamation program for the
 * Feminist Software Foundation1  I'm sooooo excited!  ^_^
 * Imma cccdddrrrr loll
 * I'm such a nerd!
 * I think I'll write an essay on this triumph over the Patriarchy!
 * "If you want equal rights, better take equal lefts, too!" <- lol what I say to PATRIARCHY TODAY WITH MY C+= CODE
 */

Conclusion


Do not assume: le mandarin et le clavier.56

La machine à écrire Mingkwai, de Lin Yutang (1947)
La machine à écrire Mingkwai, de Lin Yutang (1947)


Il n'y a pas qu'une seule manière de faire de la programmation,

et il n'y a pas qu'une seule manière de concevoir la programmation.


Quels sont vos idéaux et vos buts quand vous programmez? Qu'est-ce que vous négligez, ou minimisez en poursuivant ce but?

Est-ce qu'il y a une part d'essentiel, d'invariable dans les manières de programmer aujourd'hui? Quelle est-elle?

Quelles sont les aspects arbitraires de la programmation qu'on pourrait faire évoluer?