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
@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
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
@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?
#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!!