SlideShare a Scribd company logo
1 of 32
Download to read offline
SoftwareEngineeringPrinciples
Softwareengineeringiswhathappenstoprogrammingwhenyouaddtimeand
otherprogrammers.
JaapGroeneveld-jGroeneveld.de
SoftwareEngineeringdealswiththe
challengesof
Communicationbetweenpeople
Communicationovertime
Changingrequirements
Tamingcomplexity
Cleancodeismoreabouthumansthanits
abouttech.
2
Whyinvestincleancode?
Minimizestimespendonreadingandunderstanding
Easiertogrowinthefuture
Lesshuntingforbugs
Easieronboarding.
=>MessycodeisTechnicaldebt.Youwillpayforitdowntheroad.
Messycodehastheuncannyabilitytoslowdownanydeveloperandmakehiswork
muchharder
3
4
BadCodesmells
Rigidity.Thesoftwareisdifficulttochange.Asmallchangecausesacascadeof
subsequentchanges.
Fragility.Thesoftwarebreaksinmanyplacesduetoasinglechange.
Immobility.Youcannotreusepartsofthecodeinotherprojectsbecauseofinvolved
risksandhigheffort.
Opacity.Thecodeishardtounderstand.
NeedlessComplexity.
NeedlessRepetition.
5
6
Principles
Keepitsimple,stupid(KISS)
Youarenʼtgonnaneedit(YAGNI)&PrematureOptimization
Don'trepeatyourself(DRY),singlesourceoftruth.
Don'tconfusesyntacticandsemanticdry-ness
Clearisbetterthanclever.
"Short"doesnotmeaneasytoreadandunderstand.
Avoid"magic"(unobviousbehavior).
Practiceconsistency.
Keepthetestsclean.
Ifyouletthetestsrot,thenyourcodewillrottoo.
Prepareforchange
AlwaysaskhowwillthiscodebehaveifXchanges(butkeepYAGNIinmind) 7
CleanCode-Namingguidelines
Namesareforhumans
Choosedescriptiveandunambiguousnames.
Makemeaningfuldistinction.
Usepronounceablenames.
Usesearchablenames.
Replacemagicnumberswithnamedconstants.
Avoidencodings.Don'tappendprefixesortypeinformation.
8
CleanCode-Namingguidelines
Example
d := 12 // elapsed time in days
// vs
elapsedTimeInDays := 12
9
CleanCode-Explanatoryvariables
func doSomething() {
defer StartTimer()()
// ...
}
// vs
func doSomething() {
stopTimer := StartTimer()
defer stopTimer()
// ...
}
Yesitsonelinemore...
10
CleanCode-Onewordperconcept
Havingaclearterminologyiskeytonotgetconfused.
Itsmoreimportanttobeconsistentthentobeperfect.
Examples?
11
CleanCode-Functionguidelines
Small.
Doone"thing".(SRP-SingleResponsibilityPrinciple)
Usedescriptivenames.
Havenosideeffectsifpossible.
Preferfewerarguments.
Don'tuseflagarguments.Splitmethodintoseveralindependentmethodsthatcanbe
calledfromtheclientwithouttheflag.
12
CleanCode-Commentingguidelines
Onlycommentthewhyandonlyifnotobvious
Alwaystrytoexplainyourselfincode.
Useasexplanationofintent.
Useasclarificationofcode.
Useaswarningofconsequences.
Don'tcommentoutcode.Justremove.
13
StepdownRule
Codeshouldbereadfromtoptobottomlikeanarticle.
Wewanttoreaditasasetof"paragraphs"eachdescribingthecurrentlevelofabstraction
andreferencingdown.
Placefunctionsinthedownwarddirection.
Declarevariablesclosetotheirusage.
Keeplinesshort.
Usewhitespacetoassociaterelatedthingsanddisassociateweaklyrelated.
SeealsoCohesion...
14
Stepdown-Example
package api
func CreatePost(w http.ResponseWriter, r *http.Request) {
post, err := getPostFromRequest(r)
if err != nil {...}
err = validatePost(post)
if err != nil { ... }
err = savePost(post)
if err != nil { ... }
http.WriteHeader(201)
}
func getPostFromRequest(r *http.Request) (Post, error) { ... }
func validatePost(post Post) error { ... }
func savePost(post Post) error { ... }
15
Lineofsight
Alignthehappypathtotheleft;youshould
quicklybeabletoscandownonecolumntosee
theexpectedexecutionflow
see src/lineofsight.go
https://medium.com/@matryer/line-of-sight-in-code-186dd7cdea88 16
Lineofsight
Donʼthidehappypathlogicinsideanestofindentedbraces
Exitearlyfromyourfunction
Avoidelsereturns;considerflippingtheifstatement
Putthehappyreturnstatementastheverylastline
Extractfunctionsandmethodstokeepbodiessmallandreadable
Ifyouneedbigindentedbodies,considergivingthemtheirownfunction
https://medium.com/@matryer/line-of-sight-in-code-186dd7cdea88 17
CleanCode-Dedicatedvaluetypesoverprimitivetype.
func getUserData(userID string) {}
// vs
type UserID string
func getUserData(userID UserID) {}
Impossibleto"accidentally"assignsomethingelse
EasytofindwhereUserIDsareused(searchabilitythroughstaticanalysis)
Preventspositionalproblemsinfunctions
Allowsaddingfunctionstothetype
see typed_primitives.go
18
CleanCode-Avoidimplicitdependency
type Processor struct {
SomeData []string
}
func (p *Processor) Init() {
p.SomeData = []string{"foo", "bar"}
}
func (p *Processor) Step() {
element := p.SomeData[0]
// do something with element
}
Youhavetoknowthatyouhavetocall Init beforecalling Step ,otherwisetheprogram
willcrash.
19
CleanCode-Avoidimplicitdependency
func NewProcessor(someData []string) *Processor {
return &Processor{
SomeData: someData,
}
}
type Processor struct {
SomeData []string
}
func (p *Processor) Step() {
element := p.SomeData[0]
// do something with element
}
See http.Request vs http.NewRequest
20
CleanCode-Avoidimplicitdependency
Anotherexample
func GetFoo(w http.ResponseWriter, r *http.Request) {
dataStore := r.Context().Value("FooDataStore").(FooDataStore)
all := dataStore.All()
_ = json.NewEncoder(w).Encode(all)
}
func main() {
err := http.ListenAndServe(":8080", http.HandlerFunc(GetFoo))
if err != nil {
log.Fatal(err)
}
}
panic:interfaceisnil
21
CleanCode-Avoidimplicitdependency
Basicallyifyouhaveto"know"somethingthatmightbeanimplicitdependency
func GetFoo(dataStore FooDataStore) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
all := dataStore.All()
_ = json.NewEncoder(w).Encode(all)
})
}
func main() {
dataStore = NewFooDataStore()
err := http.ListenAndServe(":8080", GetFoo(dataStore))
if err != nil {
log.Fatal(err)
}
}
Weenforcecorrectusage 22
SOLIDPrinciples
RobertC.Martin
SingleResponsibilityPrinciple
Open-ClosedPrinciple
LiskovSubstitutionPrinciple
InterfaceSegregationPrinciple
DependencyInversionPrinciple
23
SRP/Separationofconcerns
Abstraction,increasemodularity
Lessneedtoknow/workonmultiplepartsofthecode(cognitiveload)
Easiertochangeimplementations
Easiertoisolatebugs
Seealsolayerarchitecture,coupling
24
CouplingvsCohesion
25
CouplingvsCohesion
Couplingreferstotheinterdependenciesbetweenmodules,whilecohesiondescribes
howrelatedthefunctionswithinasinglemoduleare
Highcoupling,lowcohesion=>
Lowcoupling,highcohesion=>
26
27
Highcohesion
SeeStepdownRule
Declarevariablesclosetotheirusage.
Dependentfunctionsshouldbeclose.
Similarfunctionsshouldbeclose(samefileorsamepackage).
SRPishelpful
28
Lowcoupling
DependencyinversionPrinciple
High-levelmodulesshouldnotdependonlow-levelmodules.Bothshoulddepend
onabstractions(e.g.interfaces).
InterfaceSegregationPrinciple
Thebiggertheinterface,theweakertheabstraction
29
DependencyinjectioninGo
Implicitinterfaces
DuckTyping
Avoidcyclicdependencies
30
DependencyinjectioninGo
package cli
type DataStore interface {
GetData() model.Data
}
func Run(dataStore DataStore) {}
package persistence
type FileDataStore struct {}
func (s *FileDataStore) GetData() model.Data
package main
func main() {
dataStore := &persistence.FileDataStore{}
cli.Run(dataStore)
}
31
Literature
Lessonslearntfrom“TheCleanCode”
RottingdesignBINGO!
SixShadesofCoupling
TheforgottenrealmofCohesion
32

More Related Content

Similar to Jaap Groeneveld - Software Engineering Principles

Jaap Groeneveld - Software Architecture
Jaap Groeneveld - Software ArchitectureJaap Groeneveld - Software Architecture
Jaap Groeneveld - Software ArchitectureJaapGroeneveld2
 
Camunda Chapter Hamburg - Surviving the hyperautomation low code bubble
Camunda Chapter Hamburg - Surviving the hyperautomation low code bubbleCamunda Chapter Hamburg - Surviving the hyperautomation low code bubble
Camunda Chapter Hamburg - Surviving the hyperautomation low code bubbleBernd Ruecker
 
2011.02.18 marco parenzan - case study. conversione di una applicazione for...
2011.02.18   marco parenzan - case study. conversione di una applicazione for...2011.02.18   marco parenzan - case study. conversione di una applicazione for...
2011.02.18 marco parenzan - case study. conversione di una applicazione for...Marco Parenzan
 
The art of computer programming
The art of computer programmingThe art of computer programming
The art of computer programmingClaude Sajous
 
The Smells Of Bad Design
The Smells Of Bad DesignThe Smells Of Bad Design
The Smells Of Bad DesignJames Peckham
 
The Smells Of Bad Design
The Smells Of Bad DesignThe Smells Of Bad Design
The Smells Of Bad Designguest446c0
 
CraftConf: Surviving the hyperautomation low code bubbl
CraftConf: Surviving the hyperautomation low code bubblCraftConf: Surviving the hyperautomation low code bubbl
CraftConf: Surviving the hyperautomation low code bubblBernd Ruecker
 
A taxonomy of obfuscating transformations
A taxonomy of obfuscating transformationsA taxonomy of obfuscating transformations
A taxonomy of obfuscating transformationsemanuele_nl
 
Cr java concept by vikas jagtap
Cr java  concept by vikas jagtapCr java  concept by vikas jagtap
Cr java concept by vikas jagtapVikas Jagtap
 
Privacy is a UX problem (David Dahl)
Privacy is a UX problem (David Dahl)Privacy is a UX problem (David Dahl)
Privacy is a UX problem (David Dahl)Future Insights
 
What frameworks can do for you – and what not (IPC14 SE)
What frameworks can do for you – and what not (IPC14 SE)What frameworks can do for you – and what not (IPC14 SE)
What frameworks can do for you – and what not (IPC14 SE)Robert Lemke
 
Structured Software Design
Structured Software DesignStructured Software Design
Structured Software DesignGiorgio Zoppi
 
London F-Sharp User Group : Don Syme on F# - 09/09/2010
London F-Sharp User Group : Don Syme on F# - 09/09/2010London F-Sharp User Group : Don Syme on F# - 09/09/2010
London F-Sharp User Group : Don Syme on F# - 09/09/2010Skills Matter
 
Sunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft ForeverSunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft ForeverCyrille Martraire
 
A Gentle introduction to microservices
A Gentle introduction to microservicesA Gentle introduction to microservices
A Gentle introduction to microservicesGianluca Padovani
 
Androides y Mazmorras. Part I (dungeons & robots)
Androides y Mazmorras. Part I (dungeons & robots)Androides y Mazmorras. Part I (dungeons & robots)
Androides y Mazmorras. Part I (dungeons & robots)Jorge Barroso
 

Similar to Jaap Groeneveld - Software Engineering Principles (20)

Jaap Groeneveld - Software Architecture
Jaap Groeneveld - Software ArchitectureJaap Groeneveld - Software Architecture
Jaap Groeneveld - Software Architecture
 
Camunda Chapter Hamburg - Surviving the hyperautomation low code bubble
Camunda Chapter Hamburg - Surviving the hyperautomation low code bubbleCamunda Chapter Hamburg - Surviving the hyperautomation low code bubble
Camunda Chapter Hamburg - Surviving the hyperautomation low code bubble
 
2011.02.18 marco parenzan - case study. conversione di una applicazione for...
2011.02.18   marco parenzan - case study. conversione di una applicazione for...2011.02.18   marco parenzan - case study. conversione di una applicazione for...
2011.02.18 marco parenzan - case study. conversione di una applicazione for...
 
The art of computer programming
The art of computer programmingThe art of computer programming
The art of computer programming
 
The Smells Of Bad Design
The Smells Of Bad DesignThe Smells Of Bad Design
The Smells Of Bad Design
 
The Smells Of Bad Design
The Smells Of Bad DesignThe Smells Of Bad Design
The Smells Of Bad Design
 
Dotfuscator
DotfuscatorDotfuscator
Dotfuscator
 
CraftConf: Surviving the hyperautomation low code bubbl
CraftConf: Surviving the hyperautomation low code bubblCraftConf: Surviving the hyperautomation low code bubbl
CraftConf: Surviving the hyperautomation low code bubbl
 
A taxonomy of obfuscating transformations
A taxonomy of obfuscating transformationsA taxonomy of obfuscating transformations
A taxonomy of obfuscating transformations
 
Resume
ResumeResume
Resume
 
Cr java concept by vikas jagtap
Cr java  concept by vikas jagtapCr java  concept by vikas jagtap
Cr java concept by vikas jagtap
 
Developers survival-guide
Developers survival-guideDevelopers survival-guide
Developers survival-guide
 
Privacy is a UX problem (David Dahl)
Privacy is a UX problem (David Dahl)Privacy is a UX problem (David Dahl)
Privacy is a UX problem (David Dahl)
 
What frameworks can do for you – and what not (IPC14 SE)
What frameworks can do for you – and what not (IPC14 SE)What frameworks can do for you – and what not (IPC14 SE)
What frameworks can do for you – and what not (IPC14 SE)
 
linkedin brainies
linkedin brainieslinkedin brainies
linkedin brainies
 
Structured Software Design
Structured Software DesignStructured Software Design
Structured Software Design
 
London F-Sharp User Group : Don Syme on F# - 09/09/2010
London F-Sharp User Group : Don Syme on F# - 09/09/2010London F-Sharp User Group : Don Syme on F# - 09/09/2010
London F-Sharp User Group : Don Syme on F# - 09/09/2010
 
Sunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft ForeverSunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft Forever
 
A Gentle introduction to microservices
A Gentle introduction to microservicesA Gentle introduction to microservices
A Gentle introduction to microservices
 
Androides y Mazmorras. Part I (dungeons & robots)
Androides y Mazmorras. Part I (dungeons & robots)Androides y Mazmorras. Part I (dungeons & robots)
Androides y Mazmorras. Part I (dungeons & robots)
 

Recently uploaded

Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераMark Opanasiuk
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...marcuskenyatta275
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftshyamraj55
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfFIDO Alliance
 
Microsoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireMicrosoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireExakis Nelite
 
ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty SecureFemke de Vroome
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...CzechDreamin
 
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdfBreaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdfUK Journal
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityScyllaDB
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfFIDO Alliance
 
A Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyA Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyUXDXConf
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekCzechDreamin
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIES VE
 
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...panagenda
 
How we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfHow we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfSrushith Repakula
 
PLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. StartupsPLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. StartupsStefano
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutesconfluent
 
WebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceWebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceSamy Fodil
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeCzechDreamin
 

Recently uploaded (20)

Overview of Hyperledger Foundation
Overview of Hyperledger FoundationOverview of Hyperledger Foundation
Overview of Hyperledger Foundation
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoft
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 
Microsoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireMicrosoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - Questionnaire
 
ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty Secure
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdfBreaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
 
A Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyA Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System Strategy
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří Karpíšek
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and Planning
 
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
 
How we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfHow we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdf
 
PLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. StartupsPLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. Startups
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
WebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceWebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM Performance
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
 

Jaap Groeneveld - Software Engineering Principles