Styles de programmation et éthiques de programmeurs

Introduction

Esthétiques du code

Idéaux de programmation

Styles de programmation

Jugement des formes et fonctions

Le beau et le bon

Quelques instances

Éthiques alternatives

Éthiques majeures

Éthiques mineures

Conclusion

Styles de programmation et éthiques de programmeurs

Pierre Depaz - Universität Basel


Introduction


# all the names of god, in Montfort, N. (2014). #! (Shebang). Denver : Counterpath.

{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_

L'esthétique du code, une notion populaire mais pas explicitée1.


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


L'ordinateur comme organe prosthétique de philosophie234


L'expression à l'épreuve de l'implémentation5.


Le code source comme témoin de l'expression67


Comment s'exprime-t-on dans les codes sources? Pourquoi?

Qu'est-ce qu'on juge dans ces manières de faire? 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 quotidien8910.


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

Idéaux de programmation

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


Le code source comme littérature. 131415

(textualité, communication, compression)


Le code source comme architecture.1617

(construction, artisanat, structure)


Le code source comme mathématiques. 18

(logique, implémentation, objets computationnels)


Les valeurs consistantes:


Le logiciel est un artefact abstrait, 2021

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. 2223


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

Si Kafka écrivait du JavaScript24

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 être, et comment bien faire.25


Des communautés de pratiques stylistiques26:


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.27

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



Le style comme modalité épistémologique2829.


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


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

Cette présentation du code, et représetentation du monde se fait de plusieurs manières, qui vont au-delà du superficiel.

Jugement des formes et fonctions

Le beau et le bon

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


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


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


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

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


L'exemple de la linked list35:

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.


Quelques instances


Le hack et l'optimisation des resources36.

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 haut37, ou bricoler par le bas?38


Universal Modelling Language
Universal Modelling Language


Une maison est une machine pour vivre39 vs. une maison est un espace pour grandir40

Un pattern de reconnaissance41.

/**
	 * Get the escaper instance (and create if needed)
	 */
	protected static function escaper(): Escaper
	{
		return static::$escaper ??= new Escaper('utf-8');
	}

L'anticipation d'autrui dans la communication42.

/*
* 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.
*/

UNIX43, précurseur de l'egoless programming44.


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

L'esthétique mathématique, entre concept45 et heuristique46

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). 4748


Éthiques alternatives


Éthiques majeures


Le contexte de la programmation4950.


La programmation structurée51, 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?52

Even the programmer cannot know the way of decision making in his own program, let alone know what intermediate or final results it will produce. The formulation of a programme is therefore more like the creation of a bureaucracy than the construction of a machine.53


...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.54


Les standards de la conception de langages de programmation:5556


Éthiques mineures


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


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

#! /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);
  }
}

Structures et identités d'une classe62.

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 dominantes63


TrumpScript64, et l'orthogonalité du politique et du technique65.

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-equality66, et l'orthogonalité du féminisme et de la technique67.

#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
 */

Le mineur peut devenir le majeur: le mandarin et le clavier.68

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


Conclusion


Les manières d'écrire les codes sources sont des manières de se concevoir soi-même, son appartenance à un groupe, et ses rapports au monde et à la machine.

Dire qu'un code est beau, c'est aussi juger la pratique de programmation qui en est à l'origine, c'est le moment où le code source devient révélateur socio-économique.