This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-06-08
Channels
- # babashka (9)
- # beginners (43)
- # biff (4)
- # calva (11)
- # cider (6)
- # clerk (1)
- # clj-kondo (4)
- # cljs-dev (6)
- # clojure (82)
- # clojure-berlin (1)
- # clojure-europe (42)
- # clojure-nl (1)
- # clojure-norway (182)
- # clojure-quebec (1)
- # clojure-uk (19)
- # clojurescript (6)
- # datahike (1)
- # emacs (30)
- # fulcro (5)
- # honeysql (6)
- # hyperfiddle (12)
- # lambdaisland (8)
- # malli (11)
- # off-topic (36)
- # pathom (26)
- # pedestal (1)
- # portal (25)
- # practicalli (1)
- # rdf (29)
- # re-frame (17)
- # reitit (1)
- # releases (1)
- # sci (37)
- # shadow-cljs (15)
- # vim (10)
- # xtdb (13)
Spørsmål om datamodellering i Datomic. Hvis jeg vil lage en oversikt over hvilken teknologi folk foretrekker å bruke (selvrapportert) og har erfaring med, hvordan ville dere modellert preferanse-relasjonen?
:liker
? :person/liker
? :person/liker-teknologi
? :person.liker/teknologi
? :person/ønsker-å-bruke-mer
? (usikker på om den bør være generell, spesifikk, etc).
Ser for meg at det blir en :db.cardinality/many
. Der den peker på en entitet, som feks kan være Clojure eller Datomic.
Eller bør man heller modellere at en person har gitt utrykk for at personen liker noe på et punkt i tid, så det blir som en “observasjon”?
Det er sånne ting som dette som gjør at jeg står litt fast i startgropa med Datomic. Men kanskje svaret bare bør være “start et sted, og migrér deg framover hvis det funker dårlig”.
Her har jeg et veldig konkret eksempel å vise 😅 https://github.com/kodemaker/kodemaker.no/blob/master/resources/db-schema.edn#L474-L482
Jeg vil på det sterkeste anbefale namespaced keys til skjemaet ditt. De skal ligge i en global katalog og bør være kvalifiserte.
> Eller bør man heller modellere at en person har gitt utrykk for at personen liker noe på et punkt i tid, så det blir som en “observasjon”? Dette er jo akkurat datamodellen i Datomic. Du trenger ikke gjøre noe spesielt for å få til denne.
Ser for meg at det kan være spennende å se på dette over tid. Lage preferanse-over-tid diagram ala wikipedia bandmedlemmer-over-tid.
Ja, da kan du bare holde styr på "favoritter nå" som du tenker, og når du vil lage denne grafen kan du be om historikk på attributtet og få alle endringer gjennom tidene.
Sant! Dette svaret var mye enklere enn jeg hadde forventet. Tusen takk! Kjempekult at jeg bare kan se hva dere har gjort på skjemaet direkte. Open source 😸 😍
En ting som ble nevnt litt sånn i forbifarten på meetup’en, men som jeg tror er ille viktig er følgende: Hvis du trenger å ta hensyn til tid, modeller inn domenetid og ikke stol utelukkende på tx tid.
Godt poeng. Vi vil for eksempel ikke kunne “fikse feil i fortiden” hvis vi bare modellerer “liker akkurat nå” med datomic. “per skrev at han likte “mester” i 2003, men han mente å si at han likte “tester”"
Jo, men jeg tror det er mer sånn som f.eks i et CMS der man vil at en artikkel skal publiseres på en gitt dato, eller no. Da må man modellere inn domenetid, men det er sånn man kanskje glemmer å tenke på fordi man tenker at Datomic har tid innebygget.
Og, f.eks hvis man skal lagre en person, så holder det ikke å si at vedkommende er født på det øyeblikket personen ble transacta inn i datomic.
Jeg tror jeg ville voktet meg for å modellere tid med motivasjonen du kommer med over @U3X7174KS. Da kommer du fort til å manuelt modellere tid på alt. Dessuten er det interessant nok at det sto “mester” der i 2003 - for det var det det gjorde.
Ja, man må modellere domenetid selv, men du skal heller ikke kimse av alt du kan bruke datomics tid til 🙂
Ja, den største risikoen for meg personlig akkurat nå er nok at jeg tenker alt for komplisert og roter meg bort i alle eventualitenene.
Kjempekjedelig. Du får heller ikke bruk for spennende makro-baserte biblioteker for å snakke med databasen. Dølle greier.
Modelleringen er som oftest helt rett fram. Det er leverage du får over dataene dine etterpå som er spennende.
Så du denne i Deref i april? https://favila.github.io/2023-04-18/datomic-choosing-ref-direction/ Tenker også at “rett fram” ofte er greit, særlig for components (og akkurat slik du har brukt favorites-at-the-moment og want-to-learn-more). Favila gjør likevel en case for at bakfrem i noen tilfeller bør vurderes. Kanskje ikke en viktig problemstilling for “norske” data. Hans passenger er en frittstående entitet og ikke en komponent, kunne likevel ønske han hadde nevnt isComponent i samme slengen.
Helt enig, men med en bitteliten modifikasjon. Rene funksjoner skal ikke logge. Det medfører at biblioteker med urene funksjoner burde kunne få lov til å logge
Men, mener å huske at dette var en av innsigelsene mine til @UGJE0MM0W sitt et eller annet bibliotek som jeg hadde glemt at jeg hadde innsigelser til? mot?
Når biblioteker logger må de velge et eller annet verktøy for å logge. Det påfører meg potensielt avhengigheter og behov for konfigurasjon. Nei, full stopp.
For prosesser der det kan være interessant å få granulær informasjon er det bedre om man tilbyr en mekanisme for å logge selv. Feks en kanal som emitter logg-data, tap e.l.
Enig. Men synes godt de kan støtte å ta inn en optional logg-funksjon som parameter.
Jeg har gjort det siste i Proletarian. Du kan sende inn en funksjon som blir kalt når det skjer noe. Default-implementasjon: skriv til STDOUT (`println`). Men jeg ligget våken mang en natt og tenkt på dette. Jeg ser at noen bibliotek bruker clojure.tools.logging
, som i seg selv ikke logger, men er en “fasade”, altså at den trenger en implementasjon. Da binder du ikke (som biblioteksforfatter) konsumenten av biblioteket ditt til en bestemt loggimplementasjon. Men du binder deg likevel til noe mer spesielt enn bare en funksjon.
En ulempe, potensielt, er at funksjonen kalles for alle loggmeldinger, mens typiske logg-makroer sørger for at ingenting kalles hvis loggnivået er satt til å ikke logge den aktuelle meldingen. Det blir altså mer jobb, noe som går ut over ytelse. Men da skal du være i en veldig tight loop, og ellers ikke drive med noe IO, hvis det er loggingen som blir flaskehalsen. Jeg har konkludert med at dette ikke er en ikke-sak i Proletarian (som driver med mye IO, nødvendigvis).
Godt poeng. Jeg tenker at det i all hovedsak er prosesser som driver med IO som har glede av å tilby noen form for logging. Mer computational greier bør kunne brytes ned sånn at man kan pusle sammen byggeklossene selv, og strø inn logging selv om nødvendig.
I Proletarian sitt tilfelle (som er en prosess, skulle man kunne si) er det jo fint å kunne se i loggene at jobbene kjører (og evt at det gikk til h*lvete).
Ja, så den må tilby en mekanisme for det. Jeg vil bare ikke ha noe av at den velger loggeverktøy for meg. Og det gjør den heldigvis ikke 🙂
Vi har jo noe slike hos oss:
(defn- do-work-fn [ardoq-ds job]
(fn []
(log/with-tracing!
{:job-id (core/id job)
:job-name (:name job)}
(metrics-service/with-utilization-metric
metrics-service/registry ::metrics-service/thread-utilization
{:thread-name (util/current-thread-name)
:org (get-in job [:searchable-data :org-id])
:task (str "execute-" (name(:name job)))}
(log/debugf "Running job: %s" (job->safe-to-log-details job))
(util/with-suppressed-errors-ignoring-interruption-caused
(trace-service/with-transaction! "job" (name (:name job))
(run-job! (get-system) job)))
(job-done! ardoq-ds job)
(log/debugf "Finished running job: %s" (job->safe-to-log-details job))))))
Min logger
-funksjon, som jeg sender inn til Proletarian, ser slik ut:
(defn logger
[x data]
(case x
::worker/polling-for-jobs
(log/trace x data)
(::worker/handle-job-exception ::worker/handle-job-exception-with-interrupt)
nil ;; Already logged in handle-job-wrapper!
(::worker/sql-transient-exception ::worker/job-worker-error)
(log/error x (dissoc data :throwable) (:throwable data))
(log/info x data)))
Poenget er at konsumenten velger hvilke meldinger de er interessert i, og kan logge dem på det nivået de vil, eller ignorere dem.Dette er den funksjonen som vi submitter til et thread-pool for å kjøre jobben. Dersom vi hadde brukt proletarian, skulle man kunne sett for seg at det var mulig at vi skrev denne funksjonen som vi så ga til proletarian, men at proletarian hadde en default-kjør-jobbene-funksjon som kunne brukes.
Du kan selvfølgelig gjøre som du viser over også, når du kjører jobbene dine. Men den vil kun gi deg informasjon om jobben din, ikke om arbeidet til Proletarian for å orkestrere jobbene.
Så basically, proletarian kunne tilbudt:
(defn run-the-thing
([] (run-the-thing* our-own-runner))
([your-runner] (run-the-thing* your-runner)))
Så kunne jeg skrive min egen runner
med all logging i hele verdenProletarian lar deg gi en worker en loggefunksjon, og så har den en handle-job!
multi-metode, som du kan gjøre hva du vil i.
(worker/create-queue-worker
db
(fn [job-type payload] (jobs/handle-job! job-type payload (assoc system :now (Instant/now))))
{:proletarian/queue :chill-jobs
:proletarian/polling-interval-ms 5000
:proletarian/worker-threads 1
:proletarian/log logger})
Riktig, bortsett fra at handle-job!
nå er en funksjon du sender inn (som i sin tur kan være en multimetode, men det er opp til deg).
generelt er jo logging i logikk en tidvis code smell. Functional core, imperative shell, returner data om hvordan det gikk i stedet for å skrive tekst til en logg 🙂
Huh, godt poeng! "når du bare har funksjoner og data og mapping til funksjonen er tydelig, trenger du ikke grave i hvordan det er gjort" Nå satte du ord på noe jeg ikke har klart å formulere!!!
Særlig når funksjonene mapper fra data til data, og "noe har gått uventet" bare er data.
Absolutt. Så de bibliotekene jeg tenker på er de som har prosesser, hvor det kan være interessant å få informasjon underveis, ikke bare sammen med svaret
Ja, sant. Når du har prosesser (eller tilstandsmaskiner eller asynk-ting), går det jo ikke an å bare returnere data.
Nei, men du kan fortsatt ta imot en funksjon, eller returnere en kanal som kommuniserer underveis.
“fyr med avvikende meninger om software skriver bok om hvorfor hans idéer er bedre enn alle andres”
høres ut som en vel så bra pitch som “fyr som har brukt Kotlin på backend i under ett år når han egentlig gjorde mest app skriver bok om hvorfor Java-folk bør bruke Kotlin til å skrive kode som er mest mulig lik Clojure”
absolutt ingenting. Spurte i slutten av mars, da fikk jeg høre at jeg skulle få kvartalsrapporter, har enda ikke hørt noe 🤷
virker som prosessen dems er “gi ut N Kotlin-bøker, håp at én gjør det bra av seg selv”
min erfaring var helt den samme: fikk veldig god oppfølging under produksjon av boka (masse folk involvert), og når den var ferdig så var den ferdig
for å besytte meg selv fra meg selv har jeg passet litt på at boka ikke er hjertebarnet mitt, så konsekvensen er vel at boka er ingen sitt hjertebarn
forlaget slår meg mest som en gruppe investorer som tilfeldigvis valgte å fokusere på tech-bøker
mulig jeg falt litt mellom to stoler dog, sjefsredaktøren for boka bytta jobb underveis (til Manning, så håper å slenge meg på det toget om det blir flere bøker i fremtiden)
brb, macos har nå sin ~månedlige “klarer ikke å starte noen nye prosesser og må restarte”
tror simulasjonen har en feature hvor de som liker Windows litt opplever flere problemer med macOS enn de som foretrekker macOS
Work’n’surf er et fantastisk konsept. Selvom man kanskje selv har andre preferanser enn surf. Sitter nå og jobber fra Granka mens jeg venter på vinden.
Beste med å jobbe vest-fra er jo at man må stå opp tidlig for å komme seg på jobb til Oslo tid, men da slutter man jo tilsvarende tidlig på jobb 🙂
Jeg hadde noen av mine beste minner noen sinne fra mai før jeg skulle levere masteroppgave — da var jeg i spania med venner. Jobbet jeg med masteren 3 timer hver formiddag, og vi hadde det gøy sammen resten av dagen.
Min neste utfordring når jeg ikke spiller Adventur Delux: Forstå hvordan clojure.walk
og clojure.zip
og tree-seq
(og kanskje flere i samme "familie?") funker, sånn at jeg kan hente ut- og gjøre noe med verdiene bak en arbitrarily nested datastruktur. De to funksjonene virker fantastisk kraftige, men jeg synes de er tricky å forstå.
Nå i første omgang vil jeg bare hente ut alle verdiene bak én key :sshUrl
fra en fæl datastruktur fra Azure DevOps CLI. Jeg har allerede parset datastrukturen fra JSON til en Clojure datastruktur ved hjelp av (cheshire.core/parse-string true)
.
https://stackoverflow.com/a/17332694/195964 er betydelig mindre elegante 😅 Det ante meg at en enklere løsning fantes.
Kanskje jeg skal være "snill speidergutt" og legge inn et bedre svar der også da—Til fremtidige eventyrere.
https://stackoverflow.com/a/76434666/195964! Da har jeg vært nok "snill speidergutt" for i dag. Neste gang jeg har samme spørsmål på nytt, som er høyst sannsynlig, så finner jeg mitt eget svar på Stack Overflow 😂 Det har bitt en gjenganger.
Det er for øvrig min erfaring med Clojure på Stack Overflow generelt så langt. Det finnes vanligvis mange svar på spørsmål, men få av svarene er idiomatiske og like elegante som de man finner her inne på Clojurians eller andre steder.
Jeg skrev litt om walk (og pandoc og babashka) for en stund siden. Det er mye jeg ville gjort annerledes nå. Færre kommandoer og pipes, flere funksjoner og data. Men walk er kult! Med postwalk kan du lage deg selv en interpreter med svært lite kode. https://play.teod.eu/document-transform-pandoc-clojure/
Jeg lurte på akkurat det du lurte på før jeg skrev artikkelen, @leif.eric.fredheim. "walk". Den høres lur ut å kunne. Siden den følger med clojure og til og med har sitt eget namespace. Videre har jeg lyst til å lære meg Zip! Men jeg har ikke funnet noe godt problem ennå; vil gjerne ha noe jeg kan gjøre med zippers først. Da synes jeg det er lettere å lære.
Her er hele Babashka-scriptet mitt jeg har så langt:
(ns leifs-utils.core
(:require [babashka.process :as process]
[cheshire.core :as json]))
; Get all Projects from any Azure DevOps organization.
(defn get-projects [org-url]
(-> (process/sh "az devops project list --org" org-url)
:out
(json/parse-string true)
:value))
; Get all Git repos for a given Project in any Azure DevOps organization.
(defn get-repos [project-id]
(-> (process/sh "az repos list --project" project-id)
:out
(json/parse-string true)))
; Get all Git repos for 'myorg' organization in Azure DevOps.
(def repos (let [org-url " " sample-size 3]
(->> org-url
get-projects
(map :id)
(take sample-size)
(map get-repos)
(tree-seq coll? identity)
(keep :sshUrl))))
Faktisk den første Clojure-koden jeg har skrevet som ikke bare er "tull og tøys" for utforsking og læring.Uten at jeg vet helt hvor konvensjonen stammer fra så er det idiomatisk å bruke to semikolon til blokk-kommentarer: ;;
og enkelte semikolon når du kommenterer “bak” noe kode
Men kommentarene dine over kunne vel så gjerne vært docstrings på funksjonene:
(defn get-projects
"Get all Projects from any Azure DevOps organization."
[org-url]
(-> (process/sh "az devops project list --org" org-url)
:out
(json/parse-string true)
:value))
Jeg blir relativt ofte bedt om å gjøre enkle "search-and-replace endringer" i config filer (f.eks. ingress og appsettings JSON filer, Kubernetes YAML filer) i mange mikrotjenester. Det kan ta fryktelig lang tid, selv om endringene i seg selv er trivielle, fordi jeg må sjekke ut den siste koden, lage ny branch, gjøre endringen, gjøre commit til develop
og push, lage PR, fullføre PR etter review, ny PR fra develop
til master
, kjøre deploy, osv. Alt dette må gjøres for opptil 300 Git repos. Så jeg holder på med et script for å gjøre alt "rundt" selve endringen som har med workflow å gjøre.
Og for å gjøre det enda bedre, har vi repos og pipelines i både Azure DevOps og GitHub, må jeg gjøre ting litt annerledes avhengig av hvor repo befinner seg (vi er i ferd med å migrere alt fra Azure DevOps til GitHub). Så jeg vil "wrappe" begge CLIs under et slags abstraksjonslag.
Nope, vi har en pervers workflow med mye restriksjoner fordi vi har så mange eksterne konsulenter som kommer og går, omskolerte interne trainees, og slike ting. Hele oppsettet er nesten som om det skulle være open source med "untrusted" committers 😅
Og det kan ta mange dager hvis ikke uker før PR-er blir reviewet og godkjent, hehe
Indeed! Men jeg har alliert meg med en god kollega, som for øvrig kanskje dukker opp her snart også, så vi får gjennom PRs med en gang via hverandre. De fleste har en uformell partner til å hjelpe seg med, hehe.
Som jeg har sitert før, @christian767: Alle lykkelige familier er like, hver ulykkelige familie er ulykkelig på sin egen måte.
Det er kjipt når folk ikke stoler på hverandre. Men det tilliten må bygges fra et sted, da. Ofte har det skjedd ting før som har gjort at folk føler at de ikke har kontroll, og må ta styringen på en eller annen måte. Men fryktelig synd når det ødelegger hverdagen til utviklere.
Jeg håper de er fornøyd med seg selv, de som lagde det opplegget der. De klapper hverandre på skuldrene og skuer utover sin velstrukturerte hage av såkalt mikrotjenester hvor ingen får tråkke på gresset. De har sikkert måltall som viser uten en skygge av tvil hvor godt det hele fungerer, vist på store tv-skjermer i kontorlandskapet.
Jeg kom til skade for å foreslå å samle alt i ett monorepo. Det var for tidlig for enkelte 😅
Haha! Det høres kanskje fryktelig ille ut. Men det er mye bra også, da! De fleste problemene vi har kommer av historikken, hvordan det hele startet, hvordan vi har fått fra å nesten utelukket bruke eksterne utviklere til interne (veldig nylig), osv. Alt er i ferd meg å endre seg i riktig retning, og jeg tror de fleste av tingene jeg har nevnt her også vil endres, men det tar tid pga. størrelsen og alt vi har kjørende.
En ting jeg synes er utrolig kult og positivt: Vi investerer mye tid og energi i interne ansatte, og ansetter folk som omskolerer seg fra andre yrker, og lærer dem opp til å bli utviklere. Og folk har veldig mye frihet til å velge hva de vil jobbe med av teams og teknologi. Vi har egentlig ikke et problem med at folk ikke stoler på hverandre heller; de workflow problemene vi har igjen henger igjen fra "gamledager."
Min kollega til venstre for meg er tidligere bilmekaniker, og min kollega rett ovenfor meg er tidligere klinisk psykolog. Jeg har også kollegaer som er tidligere butikkansatte, f.eks. selgere. Alle har en helt fantastisk innstilling og er veldig motiverte og dyktige til å lære seg nye ting.
Etter diskusjonen om HugSQL og HoneySQL over så innser jeg at Datomic har nok en fordel som ikke ble nevnt på meetup: Den har et ergonomisk og kraftig API for les ut av boksen. Ingen makroer, og du trenger ingen tredjeparts biblioteker for helt vanlig bruk. Ser ut til at det går en god del innsats inn i å gjøre SQL-databaser spiselige fra Clojure.
og i Datomic sin sedvanlige positive feedback loop av awesomeness, trenger man ikke å finne opp et spørrespråk som lar deg uttrykke alt i én spørring, siden du helt fint bare kan kjøre en spørring i for-loops eller whatever siden dataene bor hos deg selv
Hva er deres tanker om XTDB vs. Datomic? Min erfaring med de to er litt skumming av dokumentasjon og de eminente Datomic-foredragene. De virker ganske like for meg.
XTDB løser ting som Datomic med god grunn ikke løser, og jeg har ikke helt fått taket i hvilke tradeoffs de gjør som konsekvens
f.eks at databasen bare modellerer databasetid, ikke domenetid. Å modellere domenetid som XTDB gjør vil kreve uante ting av indekseringsprosessen
mulig det er good shit, men har ikke klart å oppdrive gode forklaringer på disse tingene
XTDB mangler kanskje en Rich Hickey som kan krystallklart presentere valgene som er tatt 🙂
Ja, det at Datomic kun har databasetid og ikke domenetid er en ulempe med Datomic, syns jeg. Som jeg nevnte i en annen tråd her, har jeg ikke fått prøvd XTDB2 med valid-from og valid-to ennå, så jeg er foreløpig usikker på om det er riktig av Datomic å overlate dette 100% til applikasjonen eller ikke.. Vi får vel med SQL:2011 før eller siden både databasetid og domenetid i PG også. Hvis domenetid gir out-of-the-box for publisering frem i tid eller priser som skal av og på og sånn, så kan det være ganske nice - dog litt usikker på om det trigges events når ting går inn/ut av validity. Hvis ikke, er det fortsatt litt som må gjøres i domenet;)
Krystallklart vet jeg ikke, men de har skrevet litt om records vs facts og sånn. https://docs.xtdb.com/concepts/trucks-tubes-truth/ https://docs.xtdb.com/concepts/strength-of-the-record/ Uansett interessant med ulike perspektiver!
tror du er inne på det der, ja. Databasetid er gitt, og kan styres av databasen, men en generisk løsning på domenetid på databasenivå (aka databasen forsøker på å out of the box modellere domener?) blir en helt annen sak
> Cabin life it isn’t for everyone. The anxieties caused by mortgage, insurance, water, heat, and electricity bills are replaced by unconventional stress PET PEEVE TRIGGERED, morro dokumentasjon får meg til å falle av kjapt
Helt annen sak, enig. Dog, valid-from og valid-to så man også kan kjøre as-of på fremtidige datoer virker ganske universelt for ganske mange domener. Om det er et abonnement eller ladeavtale eller hva, som man ønsker å modellere. Skjønner godt at Datomic har gjort det enkelt/universelt for seg selv ved å droppe å tenke på det, men samtidig ser vi jo da at det fortsatt er temmelig mye spørsmål rundt dette og mange som ikke grokker Datomic. Det er i grunn litt uforståelig her også, bare at den har du jobbet med lenge;)
Tror Juxt har jobbet mye innen finans. Der kommer kanskje domenetiden fra et annet system. Så da kan de få fine, temporære spørringer selv på data som de ikke lager selv.
> PET PEEVE TRIGGERED, morro dokumentasjon får meg til å falle av kjapt I går likte du ikke beskrivelser av musikk - hva ER det du liker egentlig? 🙂
snakket akkurat med noen om “svisker” og - altså klassisk musikk som folk flest liker, men som ikke er bra nok for oss kjennere
er helt åpen for at XTDB har amazing trade-offs jeg ikke forstår, det er jo virkelig ikke en “open source Datomic” og jeg har ikke grokka den
XTDB har to tidslinjer, som virker interessant nok. XTDB er såvidt jeg vet en skjemaløs dokumentdatabase, og da jeg lærte det falt jeg litt av.
Har ikke sett på XTDB 2.0, men jeg har blitt så konservativ at hele konseptet med en 2.0 av databasen byr meg litt imot 😅
generelt tror jeg mange i Clojure-land er averse til å binde seg til en dependency som forlater deg som er på 1.x og går over på 2.x
ser også ut som XTDB (2.0?) gjør spørringer mot en connection/node, ikke en immutable db-peker? Det er jo et ganske klart skille fra datomic i så fall
min subjektive og helt sikkert feil oppsummering: • Datomic: en positiv feedback loop av ekstremt finjusterte trade-offs • XTDB: ALL THE THINGS (gjør for Datomic det MongoDB gjorde for SQL)
Til noe av det @leif.eric.fredheim skrev over. Jeg pleier å si at det er bortkastet å ha ferske utviklere jobbe hos steder som Ardoq, fordi de ikke skjønner hvor fett det er, sammenlignet med det f.eks @leif.eric.fredheim beskriver (eller jeg selv har opplevd andre steder). Stor grad av tillit, høy hastighet og enkle løsninger. Du skjønner ikke hvor bra det er hvis du ikke har opplevd det motsatte.
I blant kan høy hastighet være utfordrende for ferske utviklere også. Hvis teamet er vandt til å levere features på noen dager, kan det være litt kjipt å sitte og slite med terminalen, Git og hva http er. Jeg hadde feks inntill for noen år siden aldri jobbet skikkelig med tjenester og databaser når det er mange ting som kaller koden din som du ikke helt vet hva er. Opplever samme spriket på produkt. Noen synes det er gøy å ta det de har laget ut til kunder ukentlig eller semi-ukentlig. Eller oftere. Men for en fersk utvikler som skal lære å programmere profesjonelt, tror jeg ro og trygghet er viktig å takle først. Ta "hvordan jobbe med kodebasen" som steg 1. Og noen vil helst ha en jobb der de kan legge inn åtte timer og gå hjem! Da er det jo helt åkei om tempoet er jobb er litt rolig.
Joa, men du vil vel uansett være produktiv og ikke måtte vente i 2 uker på å få maskinen din for så å vente 3 uker på å få tilgang til github og så bruke den neste måneden på å få PR’en din ut i prod?
Da er det vel kulere å ha maskina fra dag en, oppe å gå før lunch og første (trivielle) bit kode ute i produksjon før du går hjem første dag?
relatert. I Basecamp er team-størrelsen som regel 2, virker det som. Designer og utvikler. Ingen mellomledere. https://twitter.com/reworkpodcast/status/1664696698508025856
Har lest boka «Shape Up» som de har skrevet. Mye bra der. Vi har implementert den metodologien på jobb, mer eller mindre, bortsett fra at vi ikke har noen designer, da. Skulle gjerne hatt det, selvfølgelig. Vi leker designere, jeg og produktfyren, som best vi kan.
Kjenner meg igjen! 😁 På prosjektet jeg jobber på nå er vi to (utvikler/produktperson). Vi har fått litt designhjelp tidligere. Men det vi lager når vi skal få ut noe nå ser ikke like bra ut ... Så kommer en designer inn. Flikker litt på avstander, fonter og farger. Plutselig ser det megaproft ut, og designeren har bare brukt noen timer.
I blant kan høy hastighet være utfordrende for ferske utviklere også. Hvis teamet er vandt til å levere features på noen dager, kan det være litt kjipt å sitte og slite med terminalen, Git og hva http er. Jeg hadde feks inntill for noen år siden aldri jobbet skikkelig med tjenester og databaser når det er mange ting som kaller koden din som du ikke helt vet hva er. Opplever samme spriket på produkt. Noen synes det er gøy å ta det de har laget ut til kunder ukentlig eller semi-ukentlig. Eller oftere. Men for en fersk utvikler som skal lære å programmere profesjonelt, tror jeg ro og trygghet er viktig å takle først. Ta "hvordan jobbe med kodebasen" som steg 1. Og noen vil helst ha en jobb der de kan legge inn åtte timer og gå hjem! Da er det jo helt åkei om tempoet er jobb er litt rolig.
At man har høy takt i leveransene sine står ikke i kontrast til hverken 8 timers arbeidsdag (eller kortere) eller at tempoet på jobb er behagelig!
Godt poeng! Men det mistenker jeg at man må ha skikkelig grått utvikler-skjegg for å få til. Eller, det er vel en treningssak.
ser poenget - når man er noob (har sett det i andre, og husker det i meg selv fra når jeg var fersk) blir stressnivået markant høyere om man føler man står i fare for å ødelegge noe osv, og så ender man opp med å jobbe masse ekstra pga impostor syndrome
Og dette blir liksom enda vanskeligere hvis kode er såpass gøy at man holder på litt på fritida også. Når man kanskje heller burde legge fra seg pc-en klokka fem.
Poenget er at man må jo også ha trygge rammer. Man har lyst til å drive effektivt og profesjonelt. Det betyr også at du skal kløne det til skikkelig for at du tar ned prod. Men det håndteres av maskiner og automagiske prosesser, ikke av at gråskjeggene leser koden din når det passer dem
Jeg bomma litt på konteksten “ferske folk”, mitt innspill var litt mer generelt. Men jeg er sikker på at det er mulig å skape et miljø hvor også ferske folk kan være produktive uten å jobbe seg ihjel og få angst.
Det er også viktig for meg å få de nyansatte til å forstå at jeg er gira på deres vegne. Det verste jeg vet er å kjede meg på jobb, så derfor vil jeg at de skal slippe det. Det er derfor jeg ønsker at de skal kunne treffe bakken løpende.
https://stackoverflow.com/a/76434666/195964! Da har jeg vært nok "snill speidergutt" for i dag. Neste gang jeg har samme spørsmål på nytt, som er høyst sannsynlig, så finner jeg mitt eget svar på Stack Overflow 😂 Det har bitt en gjenganger.