Slide 1

Slide 1 text

the future of development are our jobs getting harder or easier? Dr Holly Cummins Senior Principal Software Engineer, Quarkus @[email protected] Red Hat Voxxed Days Thessaloniki October 19, 2024

Slide 2

Slide 2 text

@holly_cummins #RedHat hi!

Slide 3

Slide 3 text

@holly_cummins #RedHat senior principal software engineer hi!

Slide 4

Slide 4 text

@holly_cummins #RedHat senior principal software engineer helping to build Quarkus hi!

Slide 5

Slide 5 text

@holly_cummins #RedHat Caused by: java.io.IOException: Invalid Magic at org.jboss.jandex.Indexer.verifyMagic(Indexer.java:2090) at org.jboss.jandex.Indexer.indexWithSummary(Indexer.java:2479) at org.jboss.jandex.Indexer.index(Indexer.java:2452 true story

Slide 6

Slide 6 text

@holly_cummins #RedHat Caused by: java.io.IOException: Invalid Magic at org.jboss.jandex.Indexer.verifyMagic(Indexer.java:2090) at org.jboss.jandex.Indexer.indexWithSummary(Indexer.java:2479) at org.jboss.jandex.Indexer.index(Indexer.java:2452 true story Invalid Magic?!

Slide 7

Slide 7 text

@holly_cummins #RedHat we didn’t always have magic

Slide 8

Slide 8 text

@holly_cummins #RedHat punched cards 1804 - 1960s

Slide 9

Slide 9 text

@holly_cummins #RedHat https://github.com/chrislgarry/Apollo-11/blob/master/Comanche055/IMU_COMPENSATION_PACKAGE.agc 1969

Slide 10

Slide 10 text

@holly_cummins #RedHat TCF 1/PIPA1 +1 NOOP # LESS THAN ZERO IMPOSSIBLE. RELINT # Page 299 IRIGCOMP TS GCOMPSW # INDICATE COMMANDS 2 PULSES OR LESS. TS BUF # INDEX COUNTER - IRIGX, IRIGY, IRIGZ. IRIGX EXTEND DCS DELVX # (PIPA PULSES) X 2(+14) DXCH MPAC CA ADIAX # (GYRO PULSES)/(PIPA PULSE) X 2(-3) * TC GCOMPSUB # -(ADIAX)(PIPAX) (GYRO PULSES) X 2(+14) EXTEND # DCS DELVY # (PIPA PULSES) X 2(+14) DXCH MPAC # CS ADSRAX # (GYRO PULSES)/(PIPA PULSE) X 2(-3) * TC GCOMPSUB # +(ADSRAX)(PIPAY) (GYRO PULSES) X 2(+14) # EXTEND # *** # DCS DELVY # *** (PIPA PULSES) X 2(+14) # DXCH MPAC # *** # CA ADOAX # *** (GYRO PULSES)/(PIPA PULSE) X 2(-3) * # TC GCOMPSUB # *** -(ADOAX)(PIPAZ) (GYRO PULSES) X 2(+14) CS NBDX # (GYRO PULSES)/(CS) X 2(-5) TC DRIFTSUB # -(NBDX)(DELTAT) (GYRO PULSES) X 2(+14) IRIGY EXTEND DCS DELVY # (PIPA PULSES) X 2(+14) DXCH MPAC CA ADIAY # (GYRO PULSES)/(PIPA PULSE) X 2(-3) * TC GCOMPSUB # -(ADIAY)(PIPAY) (GYRO PULSES) X 2(+14) EXTEND DCS DELVZ # (PIPA PULSES) X 2(+14) DXCH MPAC CS ADSRAY # (GYRO PULSES)/(PIPA PULSE) X 2(-3) * TC GCOMPSUB # +(ADSRAY)(PIPAZ) (GYRO PULSES) X 2(+14) # EXTEND # *** # DCS DELVX # *** (PIPA PULSES) X 2(+14) # DXCH MPAC # *** https://github.com/chrislgarry/Apollo-11/blob/master/Comanche055/IMU_COMPENSATION_PACKAGE.agc 1969

Slide 11

Slide 11 text

@holly_cummins #RedHat 1974 image courtesy of Smithsonian Institute, https://americanhistory.si.edu/collections/search/object/nmah_334396 altair 8800

Slide 12

Slide 12 text

@holly_cummins #RedHat 1974 image courtesy of Smithsonian Institute, https://americanhistory.si.edu/collections/search/object/nmah_334396 altair 8800 switches for input

Slide 13

Slide 13 text

@holly_cummins #RedHat 1974 image courtesy of Smithsonian Institute, https://americanhistory.si.edu/collections/search/object/nmah_334396 altair 8800 light bulbs for output switches for input

Slide 14

Slide 14 text

@holly_cummins #RedHat java 1995

Slide 15

Slide 15 text

@holly_cummins #RedHat large language models + prompt engineering 2023

Slide 16

Slide 16 text

@holly_cummins #RedHat “meta-programming” large language models + prompt engineering 2023

Slide 17

Slide 17 text

@holly_cummins #RedHat “meta-programming” large language models + prompt engineering 2023

Slide 18

Slide 18 text

@holly_cummins #RedHat “meta-programming” large language models + prompt engineering 2023

Slide 19

Slide 19 text

@holly_cummins #RedHat “meta-programming” large language models + prompt engineering 2023

Slide 20

Slide 20 text

@holly_cummins #RedHat “meta-programming” large language models + prompt engineering 2023

Slide 21

Slide 21 text

@holly_cummins #RedHat “meta-programming” large language models + prompt engineering 2023

Slide 22

Slide 22 text

@holly_cummins #RedHat “meta-programming” large language models + prompt engineering 2023

Slide 23

Slide 23 text

our modern stack

Slide 24

Slide 24 text

application our modern stack 1843

Slide 25

Slide 25 text

transistor networks application our modern stack 1947 1843

Slide 26

Slide 26 text

transistor networks application machine codes our modern stack 1947 1940s 1843

Slide 27

Slide 27 text

transistor networks application assembler machine codes our modern stack 1947 1940s 1947 1843

Slide 28

Slide 28 text

transistor networks application high-level language assembler machine codes our modern stack 1947 1940s 1956 1947 1843

Slide 29

Slide 29 text

transistor networks application high-level language assembler machine codes libraries our modern stack 1947 1940s 1956 1947 1960s 1843

Slide 30

Slide 30 text

transistor networks framework application high-level language assembler machine codes libraries our modern stack 1947 1940s 1956 1947 1990s 1960s 1843

Slide 31

Slide 31 text

transistor networks framework application high-level language assembler machine codes libraries our modern stack ai coding assistant 1947 1940s 1956 1947 1990s 1960s 2020s 1843

Slide 32

Slide 32 text

transistor networks framework application high-level language assembler machine codes libraries our modern stack ai coding assistant abstraction 1947 1940s 1956 1947 1990s 1960s 2020s 1843

Slide 33

Slide 33 text

@holly_cummins #RedHat the story of our industry is increasing abstraction

Slide 34

Slide 34 text

@holly_cummins #RedHat the story of our industry is increasing abstraction

Slide 35

Slide 35 text

@holly_cummins #RedHat the story of our industry is increasing abstraction not everyone is happy about that

Slide 36

Slide 36 text

@holly_cummins #RedHat package com.example; import org.jboss.logging.Logger; public class MyService { private static final Logger log = Logger.getLogger(MyService.class); public void doSomething() { log.info("It works!"); } } example: quarkus logging

Slide 37

Slide 37 text

@holly_cummins #RedHat package com.example; import org.jboss.logging.Logger; public class MyService { private static final Logger log = Logger.getLogger(MyService.class); public void doSomething() { log.info("It works!"); } } example: quarkus logging import io.quarkus.logging.Log; Log

Slide 38

Slide 38 text

@holly_cummins #RedHat

Slide 39

Slide 39 text

@holly_cummins #RedHat

Slide 40

Slide 40 text

@holly_cummins #RedHat “horrible”

Slide 41

Slide 41 text

@holly_cummins #RedHat

Slide 42

Slide 42 text

@holly_cummins #RedHat if one is not able to write a simple code and depends on generated code, then he is not a developer

Slide 43

Slide 43 text

#RedHat why would people dislike abstraction? they say higher abstraction means stupider developers*

Slide 44

Slide 44 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant

Slide 45

Slide 45 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant developer skill?

Slide 46

Slide 46 text

@holly_cummins #RedHat gate- keeping

Slide 47

Slide 47 text

@holly_cummins #RedHat people used to say the same thing about garbage collection

Slide 48

Slide 48 text

@holly_cummins #RedHat “Avoid using any language that uses ‘garbage collection’ memory management. It teaches bad habits and makes for lazy, sloppy engineers.” –anonymous, 2005 “ http://ex-mentis.blogspot.com/2006/05/are-paul-graham-and-joel-spolsky-right.html

Slide 49

Slide 49 text

@holly_cummins #RedHat “when programmers rely on a GC implementation to clean up their mess, they become lazy.” –M., 2006 www.skyos.org/board/viewtopic.php?p=91820&sid=e56df2df37ff899da22c8ace

Slide 50

Slide 50 text

@holly_cummins #RedHat “Garbage collection encourages lazy programming habits, which I’ve seen in quite a few Java developers.” – anonymous, 2006 https://slashdot.org/story/06/08/07/2126253/xcode-update-gives-objective-c-garbage-collection

Slide 51

Slide 51 text

@holly_cummins #RedHat rust

Slide 52

Slide 52 text

@holly_cummins #RedHat rust

Slide 53

Slide 53 text

@holly_cummins #RedHat

Slide 54

Slide 54 text

@holly_cummins #RedHat garbage collection users were more likely to complete the task in the time available, and those who did so required only about a third as much time (4 hours vs. 12 hours)

Slide 55

Slide 55 text

#RedHat why would people dislike abstraction? they say higher abstraction means slower code*

Slide 56

Slide 56 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant

Slide 57

Slide 57 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant execution speed

Slide 58

Slide 58 text

“higher level languages are slower”

Slide 59

Slide 59 text

- not true* “higher level languages are slower”

Slide 60

Slide 60 text

- not true* “higher level languages are slower” *mostly

Slide 61

Slide 61 text

- not true* “higher level languages are slower” *mostly *sometimes

Slide 62

Slide 62 text

- not true* - irrelevant even if true “higher level languages are slower” *mostly *sometimes

Slide 63

Slide 63 text

@holly_cummins #RedHat Java can be faster than C

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

No content

Slide 66

Slide 66 text

No content

Slide 67

Slide 67 text

No content

Slide 68

Slide 68 text

<10% speed diff

Slide 69

Slide 69 text

@holly_cummins #RedHat Quarkus can be faster than plain Java

Slide 70

Slide 70 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant

Slide 71

Slide 71 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant how does this happen?

Slide 72

Slide 72 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant how does this happen? smart people dig down the stack, so we don’t have to

Slide 73

Slide 73 text

@holly_cummins #RedHat mechanical sympathy

Slide 74

Slide 74 text

@holly_cummins #RedHat example: quarkus’s (re)discovery of the jvm type pollution bug

Slide 75

Slide 75 text

@holly_cummins Francesco Nigro and Andrew Haley read 20,000 lines of ASM ASM

Slide 76

Slide 76 text

@holly_cummins #RedHat private static int extractSize(Object it) { if (it instanceof Collection) { return ((Collection>) it).size(); } else if (it instanceof Map) { return ((Map, ?>) it).size(); } else if (it.getClass().isArray()) { return Array.getLength(it); } else if (it instanceof Integer) { return ((Integer) it); } return 10; } // Note that we intentionally use "instanceof" to test interfaces as the last resort in order to mitigate the "type pollution” // See https://github.com/RedHatPerf/type-pollution-agent for more information if (it instanceof AbstractCollection) { return ((AbstractCollection>) it).size(); } else if (it instanceof AbstractMap) { return ((AbstractMap, ?>) it).size(); } else if (it instanceof Collection) { return ((Collection>) it).size(); } else if (it instanceof Map) { return ((Map, ?>) it).size(); } return 10; }

Slide 77

Slide 77 text

@holly_cummins #RedHat private static int extractSize(Object it) { if (it instanceof Collection) { return ((Collection>) it).size(); } else if (it instanceof Map) { return ((Map, ?>) it).size(); } else if (it.getClass().isArray()) { return Array.getLength(it); } else if (it instanceof Integer) { return ((Integer) it); } return 10; } // Note that we intentionally use "instanceof" to test interfaces as the last resort in order to mitigate the "type pollution” // See https://github.com/RedHatPerf/type-pollution-agent for more information if (it instanceof AbstractCollection) { return ((AbstractCollection>) it).size(); } else if (it instanceof AbstractMap) { return ((AbstractMap, ?>) it).size(); } else if (it instanceof Collection) { return ((Collection>) it).size(); } else if (it instanceof Map) { return ((Map, ?>) it).size(); } return 10; }

Slide 78

Slide 78 text

@holly_cummins #RedHat private static int extractSize(Object it) { if (it instanceof Collection) { return ((Collection>) it).size(); } else if (it instanceof Map) { return ((Map, ?>) it).size(); } else if (it.getClass().isArray()) { return Array.getLength(it); } else if (it instanceof Integer) { return ((Integer) it); } return 10; } // Note that we intentionally use "instanceof" to test interfaces as the last resort in order to mitigate the "type pollution” // See https://github.com/RedHatPerf/type-pollution-agent for more information if (it instanceof AbstractCollection) { return ((AbstractCollection>) it).size(); } else if (it instanceof AbstractMap) { return ((AbstractMap, ?>) it).size(); } else if (it instanceof Collection) { return ((Collection>) it).size(); } else if (it instanceof Map) { return ((Map, ?>) it).size(); } return 10; } not a fan of the fix

Slide 79

Slide 79 text

@holly_cummins #RedHat private static int extractSize(Object it) { if (it instanceof Collection) { return ((Collection>) it).size(); } else if (it instanceof Map) { return ((Map, ?>) it).size(); } else if (it.getClass().isArray()) { return Array.getLength(it); } else if (it instanceof Integer) { return ((Integer) it); } return 10; } // Note that we intentionally use "instanceof" to test interfaces as the last resort in order to mitigate the "type pollution” // See https://github.com/RedHatPerf/type-pollution-agent for more information if (it instanceof AbstractCollection) { return ((AbstractCollection>) it).size(); } else if (it instanceof AbstractMap) { return ((AbstractMap, ?>) it).size(); } else if (it instanceof Collection) { return ((Collection>) it).size(); } else if (it instanceof Map) { return ((Map, ?>) it).size(); } return 10; } not a fan of the fix non-idiomatic

Slide 80

Slide 80 text

@holly_cummins #RedHat private static int extractSize(Object it) { if (it instanceof Collection) { return ((Collection>) it).size(); } else if (it instanceof Map) { return ((Map, ?>) it).size(); } else if (it.getClass().isArray()) { return Array.getLength(it); } else if (it instanceof Integer) { return ((Integer) it); } return 10; } // Note that we intentionally use "instanceof" to test interfaces as the last resort in order to mitigate the "type pollution” // See https://github.com/RedHatPerf/type-pollution-agent for more information if (it instanceof AbstractCollection) { return ((AbstractCollection>) it).size(); } else if (it instanceof AbstractMap) { return ((AbstractMap, ?>) it).size(); } else if (it instanceof Collection) { return ((Collection>) it).size(); } else if (it instanceof Map) { return ((Map, ?>) it).size(); } return 10; } not a fan of the fix non-idiomatic difficult to maintain

Slide 81

Slide 81 text

@holly_cummins #RedHat normal, not-weird code is most optimisable by the JIT do not try this at home JIT makes things fast

Slide 82

Slide 82 text

@holly_cummins #RedHat does higher level stuff make my job easier?

Slide 83

Slide 83 text

@holly_cummins #RedHat does higher level stuff make my job better?

Slide 84

Slide 84 text

#RedHat @holly_cummins it depends.

Slide 85

Slide 85 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant

Slide 86

Slide 86 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant ease

Slide 87

Slide 87 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant ease

Slide 88

Slide 88 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant ease

Slide 89

Slide 89 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant ease

Slide 90

Slide 90 text

#RedHat @holly_cummins forward progress is not inevitable.

Slide 91

Slide 91 text

#RedHat @holly_cummins yaml

Slide 92

Slide 92 text

#RedHat @holly_cummins

Slide 93

Slide 93 text

#RedHat @holly_cummins countries:

Slide 94

Slide 94 text

#RedHat @holly_cummins countries: - GR

Slide 95

Slide 95 text

#RedHat @holly_cummins countries: - GR - SE

Slide 96

Slide 96 text

#RedHat @holly_cummins countries: - GR - SE - NO

Slide 97

Slide 97 text

#RedHat @holly_cummins countries: - GR - SE - NO {'countries': ['GR', 'SE', False]}

Slide 98

Slide 98 text

#RedHat @holly_cummins countries: - GR - SE - NO {'countries': ['GR', 'SE', False]}

Slide 99

Slide 99 text

#RedHat @holly_cummins countries: - GR - SE - NO {'countries': ['GR', 'SE', False]}

Slide 100

Slide 100 text

#RedHat @holly_cummins countries: - GR - SE - NO {'countries': ['GR', 'SE', False]}

Slide 101

Slide 101 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant ease

Slide 102

Slide 102 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant ease

Slide 103

Slide 103 text

#RedHat @holly_cummins

Slide 104

Slide 104 text

#RedHat @holly_cummins java 1995

Slide 105

Slide 105 text

#RedHat @holly_cummins java enterprise java beans 1995 1999

Slide 106

Slide 106 text

“my web site has no frameworks”

Slide 107

Slide 107 text

No content

Slide 108

Slide 108 text

@holly_cummins #RedHat Greenspun's tenth rule of programming

Slide 109

Slide 109 text

@holly_cummins #RedHat “Any sufficiently complicated C or Fortran program contains an ad hoc, informally- specified, bug-ridden, slow implementation of half of Common Lisp." Greenspun's tenth rule of programming

Slide 110

Slide 110 text

@holly_cummins #RedHat “those who forget the past are condemned to repeat it”

Slide 111

Slide 111 text

@holly_cummins #RedHat “those who reject frameworks are condemned to reinvent them”

Slide 112

Slide 112 text

@holly_cummins #RedHat “those who reject frameworks are condemned to reinvent them”

Slide 113

Slide 113 text

@holly_cummins #RedHat choose the right framework

Slide 114

Slide 114 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant

Slide 115

Slide 115 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant cognitive load ai coding assistant machine codes assembler high-level language libraries framework

Slide 116

Slide 116 text

#RedHat @holly_cummins choosing a programming language

Slide 117

Slide 117 text

#RedHat @holly_cummins choosing a programming language 1963

Slide 118

Slide 118 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP

Slide 119

Slide 119 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023

Slide 120

Slide 120 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python

Slide 121

Slide 121 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C

Slide 122

Slide 122 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++

Slide 123

Slide 123 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java

Slide 124

Slide 124 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C#

Slide 125

Slide 125 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript

Slide 126

Slide 126 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic

Slide 127

Slide 127 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP

Slide 128

Slide 128 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP SQL

Slide 129

Slide 129 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP SQL Assembly

Slide 130

Slide 130 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP SQL Assembly Go

Slide 131

Slide 131 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP SQL Assembly Go Scratch

Slide 132

Slide 132 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP SQL Assembly Go Scratch Pascal

Slide 133

Slide 133 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP SQL Assembly Go Scratch Pascal MATLAB

Slide 134

Slide 134 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP SQL Assembly Go Scratch Pascal MATLAB Swift

Slide 135

Slide 135 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP SQL Assembly Go Scratch Pascal MATLAB Swift Fortran

Slide 136

Slide 136 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP SQL Assembly Go Scratch Pascal MATLAB Swift Fortran R

Slide 137

Slide 137 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP SQL Assembly Go Scratch Pascal MATLAB Swift Fortran R Kotlin

Slide 138

Slide 138 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP SQL Assembly Go Scratch Pascal MATLAB Swift Fortran R Kotlin Ruby

Slide 139

Slide 139 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP SQL Assembly Go Scratch Pascal MATLAB Swift Fortran R Kotlin Ruby Rust

Slide 140

Slide 140 text

#RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP SQL Assembly Go Scratch Pascal MATLAB Swift Fortran R Kotlin Ruby Rust …

Slide 141

Slide 141 text

#RedHat @holly_cummins and if you’re using javascript …

Slide 142

Slide 142 text

#RedHat @holly_cummins and if you’re using javascript … 1,300,000 libraries in npm registry

Slide 143

Slide 143 text

#RedHat @holly_cummins and if you’re using javascript … 1,300,000 libraries in npm registry 2,0

Slide 144

Slide 144 text

No content

Slide 145

Slide 145 text

@holly_cummins #RedHat

Slide 146

Slide 146 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant ease

Slide 147

Slide 147 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant ease

Slide 148

Slide 148 text

@holly_cummins #RedHat the ai-lephant in the room

Slide 149

Slide 149 text

@holly_cummins #RedHat

Slide 150

Slide 150 text

@holly_cummins #RedHat

Slide 151

Slide 151 text

@holly_cummins #RedHat video courtesy of

Slide 152

Slide 152 text

@holly_cummins #RedHat

Slide 153

Slide 153 text

@holly_cummins #RedHat

Slide 154

Slide 154 text

@holly_cummins #RedHat

Slide 155

Slide 155 text

@holly_cummins #RedHat quarkus + chat gpt

Slide 156

Slide 156 text

@holly_cummins #RedHat quarkus + chat gpt

Slide 157

Slide 157 text

@holly_cummins #RedHat quarkus + chat gpt this is wrong in every way (there is no quinoa cli, and having one would be a bad design)

Slide 158

Slide 158 text

@holly_cummins #RedHat quarkus + chat gpt this is wrong in every way (there is no quinoa cli, and having one would be a bad design)

Slide 159

Slide 159 text

@holly_cummins #RedHat quarkus + chat gpt this is wrong in every way (there is no quinoa cli, and having one would be a bad design) this is not necessary (it misses a major quarkus usability feature)

Slide 160

Slide 160 text

@holly_cummins #RedHat

Slide 161

Slide 161 text

#RedHat @holly_cummins

Slide 162

Slide 162 text

#RedHat @holly_cummins 70% unnecessary code

Slide 163

Slide 163 text

#RedHat @holly_cummins “lines of code” is not a good productivity metric for people. or machines.

Slide 164

Slide 164 text

#RedHat @holly_cummins copilot users accepted 30% of its suggestions copilot produced 40% of the codebase

Slide 165

Slide 165 text

#RedHat @holly_cummins copilot users accepted 30% of its suggestions copilot produced 40% of the codebase uh oh, what does that say about the information density?

Slide 166

Slide 166 text

#RedHat @holly_cummins if code is so boring a machine can predict it, maybe it shouldn’t be there?

Slide 167

Slide 167 text

#RedHat @holly_cummins 10:1 writing code reading code

Slide 168

Slide 168 text

#RedHat @holly_cummins 10:1 200:1 writing code reading code

Slide 169

Slide 169 text

#RedHat @holly_cummins do we really want to read loads of software-generated boilerplate?

Slide 170

Slide 170 text

#RedHat @holly_cummins better example: letting computers do the hard work with quarkus

Slide 171

Slide 171 text

#RedHat @holly_cummins io.quarkus quarkus-jdbc-postgresql pom.xml

Slide 172

Slide 172 text

#RedHat @holly_cummins we see you will be using a database io.quarkus quarkus-jdbc-postgresql pom.xml

Slide 173

Slide 173 text

#RedHat @holly_cummins we see you will be using a database we see you do not have one io.quarkus quarkus-jdbc-postgresql pom.xml # This config deliberately left empty application.properties

Slide 174

Slide 174 text

#RedHat @holly_cummins we see you will be using a database we see you do not have one io.quarkus quarkus-jdbc-postgresql pom.xml # This config deliberately left empty application.properties we’ll just sort one out for you

Slide 175

Slide 175 text

#RedHat @holly_cummins ai can help us read code

Slide 176

Slide 176 text

ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-SALARY PIC 9(7)V99 VALUE 01 WS-DATE PIC 9(8). 01 WS-MONTH PIC 99. 01 WS-YEAR PIC 9999. 01 WS-PAYMENT-MADE PIC X(3) VALUE 'NO PROCEDURE DIVISION. MAIN-PROCEDURE. PERFORM INITIALIZE-DATA PERFORM CHECK-PAYMENT PERFORM DISPLAY-RESULT STOP RUN. example: using chat-gpt to document a legacy codebase

Slide 177

Slide 177 text

ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-SALARY PIC 9(7)V99 VALUE 01 WS-DATE PIC 9(8). 01 WS-MONTH PIC 99. 01 WS-YEAR PIC 9999. 01 WS-PAYMENT-MADE PIC X(3) VALUE 'NO PROCEDURE DIVISION. MAIN-PROCEDURE. PERFORM INITIALIZE-DATA PERFORM CHECK-PAYMENT PERFORM DISPLAY-RESULT STOP RUN. example: using chat-gpt to document a legacy codebase the documentation chat-gpt wrote is wrong!

Slide 178

Slide 178 text

ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-SALARY PIC 9(7)V99 VALUE 01 WS-DATE PIC 9(8). 01 WS-MONTH PIC 99. 01 WS-YEAR PIC 9999. 01 WS-PAYMENT-MADE PIC X(3) VALUE 'NO PROCEDURE DIVISION. MAIN-PROCEDURE. PERFORM INITIALIZE-DATA PERFORM CHECK-PAYMENT PERFORM DISPLAY-RESULT STOP RUN. example: using chat-gpt to document a legacy codebase the documentation chat-gpt wrote is wrong! umm … actually, the code doesn’t do what we thought it did

Slide 179

Slide 179 text

ai-generated code may not even be faster to write

Slide 180

Slide 180 text

@holly_cummins #RedHat programming in diagrams instead of words turns out to be a lot of work remember model-driven development?

Slide 181

Slide 181 text

@holly_cummins #RedHat it took 4 different prompts for my chat-gpt screenshot

Slide 182

Slide 182 text

@holly_cummins #RedHat “I tried being exhaustive with explanations about things like the data range, input shapes and reasons for parameters, and with enough explanation it will eventually come to the right conclusions - but it’s far more effort to exhaustively explain what I need than to just write the code” https://news.ycombinator.com/item?id=34848353 example: copilot

Slide 183

Slide 183 text

@holly_cummins #RedHat

Slide 184

Slide 184 text

@holly_cummins #RedHat 26% speed-up

Slide 185

Slide 185 text

@holly_cummins #RedHat 26% speed-up (junior devs)

Slide 186

Slide 186 text

@holly_cummins #RedHat

Slide 187

Slide 187 text

@holly_cummins #RedHat senior devs

Slide 188

Slide 188 text

@holly_cummins #RedHat ~0% speed-up senior devs

Slide 189

Slide 189 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant cognitive load ai coding assistant machine codes assembler high-level language libraries framework

Slide 190

Slide 190 text

#RedHat @holly_cummins things you need to do well in 2024:

Slide 191

Slide 191 text

#RedHat @holly_cummins apps things you need to do well in 2024:

Slide 192

Slide 192 text

#RedHat @holly_cummins apps ops things you need to do well in 2024:

Slide 193

Slide 193 text

#RedHat @holly_cummins apps ops devops things you need to do well in 2024:

Slide 194

Slide 194 text

#RedHat @holly_cummins apps ops devops devsecops things you need to do well in 2024:

Slide 195

Slide 195 text

#RedHat @holly_cummins apps ops devops devsecops devbizops things you need to do well in 2024:

Slide 196

Slide 196 text

#RedHat @holly_cummins apps ops devops devsecops devbizops devsecbizops things you need to do well in 2024:

Slide 197

Slide 197 text

#RedHat @holly_cummins apps ops devops devsecops devbizops devsecbizops finops things you need to do well in 2024:

Slide 198

Slide 198 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant shift left

Slide 199

Slide 199 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant quality shift left

Slide 200

Slide 200 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant security quality shift left

Slide 201

Slide 201 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant security observability quality shift left

Slide 202

Slide 202 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant security observability operations quality shift left

Slide 203

Slide 203 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant security observability operations usab quality shift left

Slide 204

Slide 204 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant security observability operations usab quality ud bills shift left

Slide 205

Slide 205 text

#RedHat @holly_cummins shift down

Slide 206

Slide 206 text

#RedHat @holly_cummins shift down let platforms do the work

Slide 207

Slide 207 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant security observability operations usab quality ud bills shift down

Slide 208

Slide 208 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant security observability operations usability quality cloud bills shift down

Slide 209

Slide 209 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant security observability operations usability quality cloud bills shift down

Slide 210

Slide 210 text

transistor networks framework application high-level language assembler machine codes libraries ai coding assistant security observability operations usability quality cloud bills shift down value

Slide 211

Slide 211 text

#RedHat @holly_cummins the big question

Slide 212

Slide 212 text

#RedHat @holly_cummins will ai take our jobs?

Slide 213

Slide 213 text

#RedHat @holly_cummins will ai take our jobs? NO.

Slide 214

Slide 214 text

#RedHat @holly_cummins professional developers in the world https://www.statista.com/statistics/627312/worldwide-developer-population/ https://slashdata-website-cms.s3.amazonaws.com/sample_reports/EiWEyM5bfZe1Kug_.pdf

Slide 215

Slide 215 text

#RedHat @holly_cummins professional developers in the world https://www.statista.com/statistics/627312/worldwide-developer-population/ https://slashdata-website-cms.s3.amazonaws.com/sample_reports/EiWEyM5bfZe1Kug_.pdf machine codes vacuum tube networks

Slide 216

Slide 216 text

#RedHat @holly_cummins professional developers in the world https://www.statista.com/statistics/627312/worldwide-developer-population/ https://slashdata-website-cms.s3.amazonaws.com/sample_reports/EiWEyM5bfZe1Kug_.pdf assembler machine codes vacuum tube networks

Slide 217

Slide 217 text

#RedHat @holly_cummins professional developers in the world https://www.statista.com/statistics/627312/worldwide-developer-population/ https://slashdata-website-cms.s3.amazonaws.com/sample_reports/EiWEyM5bfZe1Kug_.pdf transistor networks assembler machine codes

Slide 218

Slide 218 text

#RedHat @holly_cummins professional developers in the world https://www.statista.com/statistics/627312/worldwide-developer-population/ https://slashdata-website-cms.s3.amazonaws.com/sample_reports/EiWEyM5bfZe1Kug_.pdf transistor networks high-level languages assembler machine codes

Slide 219

Slide 219 text

#RedHat @holly_cummins professional developers in the world https://www.statista.com/statistics/627312/worldwide-developer-population/ https://slashdata-website-cms.s3.amazonaws.com/sample_reports/EiWEyM5bfZe1Kug_.pdf transistor networks high-level languages assembler machine codes libraries

Slide 220

Slide 220 text

#RedHat @holly_cummins professional developers in the world https://www.statista.com/statistics/627312/worldwide-developer-population/ https://slashdata-website-cms.s3.amazonaws.com/sample_reports/EiWEyM5bfZe1Kug_.pdf transistor networks frameworks high-level languages assembler machine codes libraries

Slide 221

Slide 221 text

#RedHat @holly_cummins professional developers in the world https://www.statista.com/statistics/627312/worldwide-developer-population/ https://slashdata-website-cms.s3.amazonaws.com/sample_reports/EiWEyM5bfZe1Kug_.pdf transistor networks frameworks high-level languages assembler machine codes libraries ai coding assistants

Slide 222

Slide 222 text

#RedHat @holly_cummins software is not going away

Slide 223

Slide 223 text

human alarm clock “knocker-up” 1800s

Slide 224

Slide 224 text

human alarm clock 1800s

Slide 225

Slide 225 text

human alarm clock 1800s - 1940s

Slide 226

Slide 226 text

human alarm clock 1800s finite demand - 1940s

Slide 227

Slide 227 text

human alarm clock 1800s finite demand only employees need waking up - 1940s

Slide 228

Slide 228 text

human alarm clock 1800s finite demand only employees need waking up no one needs waking up more than once - 1940s

Slide 229

Slide 229 text

#RedHat @holly_cummins the more software we have, the more we want

Slide 230

Slide 230 text

#RedHat @holly_cummins

Slide 231

Slide 231 text

#RedHat @holly_cummins software to do stuff

Slide 232

Slide 232 text

#RedHat @holly_cummins software to do stuff software to do more stuff

Slide 233

Slide 233 text

#RedHat @holly_cummins software to do stuff software to do more stuff software to bypass advertisements in the software

Slide 234

Slide 234 text

#RedHat @holly_cummins software to do stuff software to do more stuff software to bypass advertisements in the software software to bypass the bypass software so ads still show

Slide 235

Slide 235 text

#RedHat @holly_cummins software to do stuff software to do more stuff software to bypass advertisements in the software software to bypass the bypass software so ads still show software to monitor the software

Slide 236

Slide 236 text

#RedHat @holly_cummins software to do stuff software to do more stuff software to bypass advertisements in the software software to bypass the bypass software so ads still show software to monitor the software software to debug the software

Slide 237

Slide 237 text

#RedHat @holly_cummins software to do stuff software to do more stuff software to bypass advertisements in the software software to bypass the bypass software so ads still show software to monitor the software software to debug the software software to manage the software

Slide 238

Slide 238 text

#RedHat @holly_cummins software to do stuff software to do more stuff software to bypass advertisements in the software software to bypass the bypass software so ads still show software to monitor the software software to debug the software software to manage the software software to write the software

Slide 239

Slide 239 text

#RedHat @holly_cummins software to do stuff software to do more stuff software to bypass advertisements in the software software to bypass the bypass software so ads still show software to monitor the software software to debug the software software to manage the software software to write the software software to manage the software that writes the software

Slide 240

Slide 240 text

#RedHat @holly_cummins software to do stuff software to do more stuff software to bypass advertisements in the software software to bypass the bypass software so ads still show software to monitor the software software to debug the software software to manage the software software to write the software software to manage the software that writes the software software to try and avoid skynet

Slide 241

Slide 241 text

#RedHat @holly_cummins software to do stuff software to do more stuff software to bypass advertisements in the software software to bypass the bypass software so ads still show software to monitor the software software to debug the software software to manage the software software to write the software software to manage the software that writes the software software to try and avoid skynet software to tell people about software

Slide 242

Slide 242 text

#RedHat @holly_cummins software to do stuff software to do more stuff software to bypass advertisements in the software software to bypass the bypass software so ads still show software to monitor the software software to debug the software software to manage the software software to write the software software to manage the software that writes the software software to try and avoid skynet software to tell people about software software to work out the meaning of life

Slide 243

Slide 243 text

#RedHat @holly_cummins software to do stuff software to do more stuff software to bypass advertisements in the software software to bypass the bypass software so ads still show software to monitor the software software to debug the software software to manage the software software to write the software software to manage the software that writes the software software to try and avoid skynet software to tell people about software software to work out the meaning of life software to gamify software

Slide 244

Slide 244 text

#RedHat @holly_cummins software to do stuff software to do more stuff software to bypass advertisements in the software software to bypass the bypass software so ads still show software to monitor the software software to debug the software software to manage the software software to write the software software to manage the software that writes the software software to try and avoid skynet software to tell people about software software to work out the meaning of life software to gamify software …

Slide 245

Slide 245 text

#RedHat @holly_cummins will the productivity expectation be higher?

Slide 246

Slide 246 text

#RedHat @holly_cummins will the productivity expectation be higher? probably

Slide 247

Slide 247 text

#RedHat @holly_cummins will we spend more time debugging generated code?

Slide 248

Slide 248 text

#RedHat @holly_cummins will we spend more time debugging generated code? probably :)

Slide 249

Slide 249 text

@holly_cummins #RedHat tl;dpa (too long; didn’t pay attention) abstraction is good. shift down, to make shifting left easier don’t generate boilerplate, eliminate it coding assistants are great at … typing it is awesome being a developer

Slide 250

Slide 250 text

slides thank you Holly Cummins Red Hat https://hollycummins.com/jobs-harder-easier-voxxed-thessaloniki/

Slide 251

Slide 251 text

slides thank you Holly Cummins Red Hat https://hollycummins.com/jobs-harder-easier-voxxed-thessaloniki/ stickers!!