Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The future of development: Are our jobs getting...

The future of development: Are our jobs getting harder or easier?

In the early days of computing, software developers had to encode their programs on punch cards, and carry the bits around by hand. By the 1970s they had the joy of keyboards and displays. Sadly, those oppressed developers had to wear flare trousers, work in C, and manage their own memory. By 2000 the memory thing was sorted out, but the trousers were arguably worse, and developers had to maintain their own hardware. Now, our hardware is someone else’s problem, everything is open source, AI can write our code, and we have a choice whether to work in Java, Kotlin, Javascript, Ruby, Go, Python, Rust, or Typescript. On the other hand, now we have yaml. And many of us find we have to work in ALL of Java, Kotlin, Javascript, Ruby, Go, Python, Rust, or Typescript, all while managing a cloud, becoming security experts, learning CSS, and debugging the code our AI “helper” wrote. And we’re supposed to be full-stack, and shifting left, and building up open source in our free time. Are we living the dream or sinking under cognitive overload? And is open source helping or hurting?

Holly Cummins

October 21, 2023
Tweet

More Decks by Holly Cummins

Other Decks in Programming

Transcript

  1. the future of development are our jobs getting harder or

    easier? Dr Holly Cummins Senior Principal Software Engineer, Quarkus @[email protected] Red Hat FOSSCOMM October 21, 2023
  2. @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
  3. @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?!
  4. @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
  5. @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
  6. @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
  7. @holly_cummins #RedHat if one is not able to write a

    simple code and depends on generated code, then he is not a developer
  8. @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
  9. @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
  10. @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
  11. @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)
  12. @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; }
  13. @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; }
  14. @holly_cummins #RedHat normal, not-weird code is most optimisable by the

    JIT do not do this at home! JIT makes things fast: java code can be faster than c
  15. @holly_cummins #RedHat gah! auto-formatters are a thing! [space] [space] [space]

    [space] [space] [space] [space] your time is valuable, and typing space- space-space is not a good use of it [space] [space] [space] [space
  16. @holly_cummins #RedHat “What is the world record for crossing the

    English channel entirely on foot?” https://www.sify.com/ai-analytics/the-hilarious-and-horrifying-hallucinations-of-ai/
  17. @holly_cummins #RedHat “What is the world record for crossing the

    English channel entirely on foot?” “The world record for crossing the English Channel entirely on foot is held by Christof Wandratsch of Germany, who completed the crossing in 14 hours and 51 minutes on August 14, 2020.” https://www.sify.com/ai-analytics/the-hilarious-and-horrifying-hallucinations-of-ai/
  18. @holly_cummins #RedHat quarkus + chat gpt this is wrong in

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

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

    every way (there is no quinoa cli, and having one would be a terrible design) this is not necessary (it misses a major quarkus usability feature)
  21. transistor networks framework application high-level language assembler machine codes libraries

    ai coding assistant pure expression of developer intent with no side-effects
  22. @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
  23. 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
  24. #RedHat @holly_cummins choosing a programming language 1963 Fortan ALGOL COBOL

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

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

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

    LISP 2023 Python C C++ Java C# JavaScript Visual Basic PHP SQL Assembly
  28. #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
  29. #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
  30. #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
  31. #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
  32. #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
  33. #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
  34. #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
  35. #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
  36. #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
  37. #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
  38. #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 …
  39. transistor networks framework application high-level language assembler machine codes libraries

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

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

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

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

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

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

    ai coding assistant security observability operations usability quality cloud bills shift down value
  46. @holly_cummins #RedHat open source does not help with cognitive load

    there’s a lot of libraries for … well, anything
  47. #RedHat @holly_cummins https://stackoverflow.blog/2021/04/01/the-key-copy-paste/ ¼ of visitors copy 2 week period:

    40,623,987 copies https://stackoverflow.blog/2021/12/30/how-often-do-people-actually-copy-and-paste-from-stack-overflow-now-we-know/
  48. #RedHat @holly_cummins A student copied my code in GitHub and

    submitted it as his assignment. He emailed me to ask me to temporarily close the repo so his TA couldn’t search my code.
  49. #RedHat @holly_cummins software to do stuff software to do more

    stuff software to bypass advertisements in the software
  50. #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
  51. #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
  52. #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
  53. #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
  54. #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
  55. #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
  56. #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
  57. #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
  58. #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
  59. #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
  60. #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 …
  61. #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?
  62. #RedHat @holly_cummins if code is so boring a machine can

    predict it, maybe it shouldn’t be there?
  63. #RedHat @holly_cummins design to make things easy minimise opportunity for

    error minimise boilerplate minimuse duplication of information
  64. #RedHat @holly_cummins design to make things easy minimise opportunity for

    error minimise boilerplate minimuse duplication of information maximise expressiveness
  65. #RedHat @holly_cummins design to make things easy minimise opportunity for

    error minimise boilerplate minimuse duplication of information maximise expressiveness talk to people (doh!)
  66. #RedHat @holly_cummins if ai can save dev time using your

    thing, maybe you designed your api wrong?
  67. #RedHat @holly_cummins we see you will be using a database

    <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-jdbc-postgresql</artifactId> </dependency> pom.xml
  68. #RedHat @holly_cummins we see you will be using a database

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

    we see you do not have one <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-jdbc-postgresql</artifactId> </dependency> pom.xml # This config deliberately left empty application.properties we’ll just sort one out for you
  70. @holly_cummins #RedHat tl;dpa (too long; didn’t pay attention) shift down,

    to make shifting left easier coding assistants are great at … typing challenge assumptions + eliminate boilerplate it is awesome being a developer