mboost-dp1

Eight important books for software developers


Gå til bund
Gravatar #2 - Niklas H
30. dec. 2010 21:50
Jeg synes at Code Complete mangler på den liste.
Gravatar #3 - zook
1. jan. 2011 19:36
Hvis man skal snakke om bøger der ændrer måden man tænker om software konstruktion, mener jeg at der også bør være andet end blot imperative metodlogier repræsenteret.

Design mønstre bogen er eksempelvis ikke særlig anvendelig med et rent funktionelt sprog som Haskell, da der ofte er bedre måder at løse de samme problemer på.

Nu er jeg ikke synsk men jeg kunne godt forstille mig at funktionelle programmører bliver en mangelvare i 2011. Fordelene vil, efterhånden som antallet af kerner øges (i desktop og mobile computere), blive gjort meget synlige, imo.
Gravatar #4 - Windcape
1. jan. 2011 19:44
Effective Java (2nd Edition)
Hvad laver den på en generel liste?
Gravatar #5 - Windcape
1. jan. 2011 19:45
zook (3) skrev:
Hvis man skal snakke om bøger der ændrer måden man tænker om software konstruktion, mener jeg at der også bør være andet end blot imperative metodlogier repræsenteret.
Listen er skrevet til/af Java programmører, så da de ikke har mulighed for funktionel programmering direkte i Java, så bliver det sikkert ignoreret.
Gravatar #6 - Windcape
1. jan. 2011 19:46
Derudover synes jeg at Uncle Bob's "Clean Code" mangler!
Gravatar #7 - zook
1. jan. 2011 19:47
Så burde den vel have heddet "Eight important books for java developers". But ohh well. Kan godt se det er en blog om java udvikling :)
Gravatar #8 - arne_v
2. jan. 2011 19:31
#4 & 7

Den Bloch bog er Java specifik. De andre er ikke. Erstat den med Richter hvis du er .NET udvikler.
Gravatar #9 - arne_v
2. jan. 2011 19:34
#3 og 5

De fleste af bøgerne er ikke engang OO specifikke.

Og hvis man med Java mener Java platform i modsætning til Java sproget, så er det den foretrukne platform for funktionel programmering.

Gravatar #10 - zook
2. jan. 2011 20:12
Præmissen er at man som udvilker bør bruge 3/8 (har ikke selv læst Pragmatic Programmer) af sin læsning på bøger som udelukkende omhandler imperativ udvikling.

Det virker i mine øjne en smule kort-sigtet at begrænse sig til så lille en del af sprogenes stam træ.
Gravatar #11 - arne_v
2. jan. 2011 20:21
#10

Givet hvor stor en andel af udvikling der foregår i sprog som er imperative, så synes jeg ikke at 3/8 er for meget.
Gravatar #12 - zook
2. jan. 2011 20:36
Tror det er et spørgsmål om perspektiv.

Kan anbefale følgende præsentation(hvis min påstand virker meget fremmed): [url= 2010: Rob Pike, "Public Static Void"[/url]

og følgende læsning: Design Patterns 15 Years Later: An Interview with Erich Gamma, Richard Helm, and Ralph Johnson

Der er også andet på vej i horizonten, spørgsmålet er selvfølgelig om tidspunktet er nu for at lære noget andet. Men det vil jeg mene er enhver udviklers eget ansvar selv at vurdere.
Gravatar #13 - Windcape
2. jan. 2011 23:56
#12

Rob Pike gentog sin kritik af imperative sprogs boilerplate på JAOO, men hvad han ikke tager med er at vi slet ikke skriver eller bekymre os om den del.

Udviklingsværktøjer gør at imperative sprog i høj grad skriver sig selv, hvor modsat de funktionelle sprog, stadigvæk mangler værktøjer, og derfor tvinger programmøren til at bruge mere tid på at skrive selve koden.

F# er dog en undtagelse.

arne_v (9) skrev:
Og hvis man med Java mener Java platform i modsætning til Java sproget, så er det den foretrukne platform for funktionel programmering.
Har du nogen tal på det? Jeg har lidt svært ved at tro på at Scala (som er multi-paradigm, ikke purt funktionelt) er "den foretrukne platform" for funktionel programmering.

Min erfaring er nærmere at Java programmører normalt er ligeglade med det funktionelle paradigm, hvor at det i C# trives mere. (F# virker mere kendt hos C# udviklere, end Scala gør det hos Java udviklere).
Gravatar #14 - arne_v
3. jan. 2011 00:37
#12 & 13

Det er værd at huske på at funktionel programmering er gammel. Den er faktisk ældre end objekt orienteret programmering.

Men den har aldrig slået rigtigt igennem.

Nu er der en vis forventning om at:
multi core CPU => multi threaded programmer => funktionel programmering

Men det er indtil videre kun en teori.

Der ses en øget brug af funktionel programmering specielt i Scala, men det er stadig kun special formål ikke mainstream formål.
Gravatar #15 - Windcape
3. jan. 2011 00:47
#14

FP som paradigm er ellers ret populært i .NET i dag. LINQ har åbnet øjene for mange.
Gravatar #16 - arne_v
3. jan. 2011 00:55
Windcape (13) skrev:
Har du nogen tal på det? Jeg har lidt svært ved at tro på at Scala (som er multi-paradigm, ikke purt funktionelt) er "den foretrukne platform" for funktionel programmering.


En søgning på dice.com siger:

Scala 42
Clojure 17

F# 3

Erlang 25
Lisp 18
Haskell 5
OCAML 4

Windcape (13) skrev:
Min erfaring er nærmere at Java programmører normalt er ligeglade med det funktionelle paradigm, hvor at det i C# trives mere. (F# virker mere kendt hos C# udviklere, end Scala gør det hos Java udviklere).


F# fik en masse omtale. Og jeg tror at en masse C# udviklere har snuset lidt til det.

Men hvem bruger det?

Scala liver måske nok et diskret liv, men det bliver brugt.

Alle ved at Twitter bruger det til deres backend.

Version2 havde en historie omkring hvordan en energi børs migrerer til Scala:
http://www.version2.dk/artikel/11389-energiboers-d...

Novell bruger det til deres cloud baserede collaboration platform.

LinkedIn, Siemens og Sony bruger også Scala til nogle (vistnok mindre) ting.


Gravatar #17 - arne_v
3. jan. 2011 00:58
#15

Nu skal der lidt mere end brug af LINQ (eller XSLT eller SQL) til for at jeg vil kalde noget for FP.
Gravatar #18 - Windcape
3. jan. 2011 01:18
arne_v (16) skrev:
En søgning på dice.com siger:
Det kan fortolkes på 2 måder.

Enten at Scala er meget populært, eller det er *ved* at blive populært, hvor at de gængse platforme som Erlang og Haskell, mister popularitet.

Men Haskell kunne jo sagtens stadigvæk være mere populært.

arne_v (17) skrev:
Nu skal der lidt mere end brug af LINQ (eller XSLT eller SQL) til for at jeg vil kalde noget for FP.
I sig selv, ja. Men rent konceptmæssigt har introduktionen af LINQ, gjort at næsten alle .NET programmører jeg har snakket med, har kigget dybere ind i funktionel programmering.

arne_v (16) skrev:
F# fik en masse omtale. Og jeg tror at en masse C# udviklere har snuset lidt til det.

Men hvem bruger det?
Helt rigtigt, det er svært at sige.

arne_v (16) skrev:
Scala liver måske nok et diskret liv, men det bliver brugt.
Måske mere i USA end i Europa. Specielt i Danmark virker det ikke særlig "in".
Gravatar #19 - arne_v
3. jan. 2011 01:24
Windcape (18) skrev:
Det kan fortolkes på 2 måder.

Enten at Scala er meget populært, eller det er *ved* at blive populært, hvor at de gængse platforme som Erlang og Haskell, mister popularitet.

Men Haskell kunne jo sagtens stadigvæk være mere populært.


Generelt må man formode at de skills der efterspørges i job annoncer afspejler det arbejde der skal laves (nyudvikling eller vedligehold).

Det afspejler åbenlyst ikke eksisterende kode mængde.

Men hvis ikke ny kode vil dominere gammel kode indenfor FP, så bliver FP ikke en success!
Gravatar #20 - arne_v
3. jan. 2011 01:27
Windcape (18) skrev:
Måske mere i USA end i Europa. Specielt i Danmark virker det ikke særlig "in".


Energi børsen er fransk.

Siemens og Sony koncernerne er heller ikke amerikanske, men jeg kan naturligvis ikke udelukke at deres Scala udvikling sker i USA.

Jeg tror på at Scala ikke er populært i Danmark. Men det overlever Scala nok.
Gravatar #21 - arne_v
3. jan. 2011 01:28
Windcape (18) skrev:
Helt rigtigt, det er svært at sige.


Den eneste jeg kender som arbejder med F# er Jon Harrop - og han er mere berygtet end berømt.

Gravatar #22 - zook
3. jan. 2011 07:50
Jeg tror ikke at funktionelle sprog behøver erstatte eksisterende løsninger. Fordelene ved at bruge et funktionelt som et lim sprog mellem eksisterende teknologier, er en øget produktivitet (mindre kode, mere produktivitet) og en øget tiltro til at ens kode rent faktisk virker når først compileren har accepteret det.

Men jeg benægter ikke at det er et svært paradigme skift. Jeg har selv brugt det sidste års tid på at lære Scheme og Haskell. Jeg startede som teenager med at programmere i maskinkode og har siden været alle de almindeligt anvendte imperative sprog igennem. Personligt har springet været større end jeg husker Object Orientering var i sin tid. Kan varmt anbefale Structure and Interpretation of Computer Programs som en teoretisk introduktion med fokus på MIT Scheme(som er et overraskende simpelt sprog). Jeg valgte Haskell som supplement da det som et rent funktionelt sprog tvinger en til at danne nye vaner som programmør. Der er ganske enkelt ikke ret meget genkendeligt at falde tilbage på. Hvilket når man snakker om paradigme skift, er en god ting.

Når det så er sagt, så har det for mig handlet om at genfinde glæden ved at programmere. Hvilket jeg nok må indrømme var noget jeg i C++ og Java for længst havde mistet. Jeg arbejder stadig med begge sprog, i kraft af at jeg udvikler til Android, men jeg arbejder næsten udelukkende med dem fra Haskell af.
Gravatar #23 - Windcape
3. jan. 2011 08:07
Haskell er nok ikke det ideele sprog, da det er et meget komplekst sprog.

Jeg vil hellere anbefale folk F#, da de fleste alligevel har haft et kursus i ML/OCalm på uni, på et eller andet tidspunkt.

Personligt synes slet ikke springet var særlig stort. At vende sig til 50 nye ASCII operators er langt sværerer end at forstå konceptet bag funktionel programmering.

Og når man bare een gang har lavet tail-recursion i et funktionelt sprog, så bliver man fusteret hver eneste gang det skal gøres i et imperativt sprog :p
Gravatar #24 - zook
3. jan. 2011 08:40
Tja, jeg vil nu mene at C++ er endnu mere komplekst. I sær hvis du vil anvende templates. Hvilket i dag nærmest er et krav i form af boost og andre vigtige biblioteker.

Jeg vil ikke mene der er nogen årsag til bekymring omkring operatorer i Haskell.
Sproget stiller de faciliteter til rådighed som er nødvendig for at gøre operatorer brugbare.
Ifølge http://www.cs.ut.ee/~varmo/MFP2004/PreludeTour.pdf så definerer Prelude modulet 22 polymorfiske operator. Prelude er opstarts miljøet i Haskell. Kigger man på hvilke operatorer der er tale om, vil jeg nødig være uden de fleste af dem, i et hvilket som helst sprog.

Som Rob Pike nævner ville man nok, hvis man havde kendt til ordet design mønstre, have kaldt et funktions kald for et design mønster tilbage da den slags var betragtet som værende udfordrende.
Heldigvis har funktions kald siden hen vist sig at være så nyttige at de er at finde i næsten alle sprog i dag.

Men kan godt se at newz.dk er det forkerte sted for en sådan diskussion :)
Gravatar #25 - Windcape
3. jan. 2011 09:30
zook (24) skrev:
Tja, jeg vil nu mene at C++ er endnu mere komplekst. I sær hvis du vil anvende templates. Hvilket i dag nærmest er et krav i form af boost og andre vigtige biblioteker.
C++ er et kapitel for sig selv. Jeg synes kun det er værd at fokusere på Java og C# når det handler om at kombinere mainstream imperativ programming med funktionel programmering.

zook (24) skrev:
Men kan godt se at newz.dk er det forkerte sted for en sådan diskussion :)
Hvorfor?

Derudover skal diskussionen være ærke-pragmatisk. Alle som forsøger at lede funktionel programmering tilbage ind på den akademiske tankegang, vil bare bevise hvorfor funktionel programmering stadigvæk ikke er "in".
Gravatar #26 - Windcape
3. jan. 2011 09:34
Men problemet med f.eks. Haskell og mange andre funktionelle sprog, er at de mangler grund-funktionalitet som alle imperative (eller ihvertfald object-orienterede) sprog har i dag.

Derfor er multi-paradigm sprog som Scala og F# nødvendige for at få ordenligt udnyttelse. Og jeg mener derfor de er bedre at lære, frem for de pure sprog, da man i Scala og F# faktisk kan lave noget brugbart, frem for rene akademiske øvelser uden mening.

FP handler ligeså meget om at sikre sig mod side-effekter, og have clean, easy-readable, maintainable code. Og det kan man sagtens opnå med paradigmet i sprog som f.eks. C#.

(Java og C++ mangler nogle småting, som f.eks. generators, for at opnå samme effekt som C#, men det er tæt på.)
Gravatar #27 - zook
3. jan. 2011 11:15
Windcape (25) skrev:
C++ er et kapitel for sig selv. Jeg synes kun det er værd at fokusere på Java og C# når det handler om at kombinere mainstream imperativ programming med funktionel programmering.

Fair nok. Kender dog ikke noget til C#.

Windcape (25) skrev:
Hvorfor?

Fordi diskussionen bærer præg af manglende erfaring med funktionelle sprog.

Windcape (25) skrev:
Derudover skal diskussionen være ærke-pragmatisk.

Vil nu nok mene jeg er pragmatisk i min tilgang. Derfor har jeg stadig valgt at prioritere at lære et funktionelt sprog, til trods for at meget af litteraturen er tiltænkt dataloger.
Dog vil jeg mene at der med bøger som Real World Haskell og Haskell School of Expression også er noget for pragmatikere.
Jeg er ikke datalog, men jeg har taget nogle enkelte af de fag som jeg har fundet nødvendige for min egen forståelses skyld.

Windcape (25) skrev:
Alle som forsøger at lede funktionel programmering tilbage ind på den akademiske tankegang, vil bare bevise hvorfor funktionel programmering stadigvæk ikke er "in".

Jeg er sådan set ikke ude på at bevise noget. Du kan tage mine meninger eller råd som du har lyst.

Windcape (26) skrev:
Men problemet med f.eks. Haskell og mange andre funktionelle sprog, er at de mangler grund-funktionalitet som alle imperative (eller ihvertfald object-orienterede) sprog har i dag.

Måske. Jeg valgte Haskell for at slippe for den "grund-funktionalitet" og lære nogen andre måder at løse problemer på.
Funktionelt programmering kræver et andet sæt af mentale værktøjer og når først disse er lært, er det ikke min oplevelse at der mangler noget i sproget, nærmest tværtimod.

Windcape (26) skrev:
Derfor er multi-paradigm sprog som Scala og F# nødvendige for at få ordenligt udnyttelse.

Nødvendige, bestemt. Bedre at lære? Det kommer nok an på hvad man håber på at få ud af det.

Windcape (26) skrev:
Og jeg mener derfor de er bedre at lære, frem for de pure sprog, da man i Scala og F# faktisk kan lave noget brugbart, frem for rene akademiske øvelser uden mening.

Synes det er ærgeligt du ikke formår at adskille tingene. Ja, funktionelle sprog har deres oprindelse og primære udbredelse blandt dataloger. Det gør det altså ikke til en meningsløs akademisk øvelse at lære dem, eller at programmere i dem. Men man er givet vis mere på bar bund når man skal starte forfra. Sådan er det.

Windcape (26) skrev:
FP handler ligeså meget om at sikre sig mod side-effekter, og have clean, easy-readable, maintainable code. Og det kan man sagtens opnå med paradigmet i sprog som f.eks. C#.
(Java og C++ mangler nogle småting, som f.eks. generators, for at opnå samme effekt som C#, men det er tæt på.)

Interessant. Jeg er dog ikke helt enig.
Du udelader at nævne compileren, som er langt mere intelligent i et sprog som Haskell (algebraic data types, lazy evaluation, pattern matching).
Som pragmatiker, har jeg det ganske fint med at compileren/fortolkeren fra start er tiltænkt en hjælpe rolle modsat f.eks. Java. Det er en væsentlig egenskab, som ærligt talt får Java (og beslægtede sprog) til at virke forældet.


Men som sagt, så lyder du som du ved alt hvad du har brug for om funktionelle sprog og fred være med det.
Gravatar #28 - Benjamin Krogh
3. jan. 2011 11:19
#26

Mit største irritationsmoment ved F# er deres svage generics.

Lektien fra Haskell er (om noget) at FP giver nogle meget gode muligheder for at lave type checks, som F# endnu ikke udnytter. Håber at det kommer i næste version.
Gravatar #29 - Windcape
3. jan. 2011 11:57
Du udelader at nævne compileren, som er langt mere intelligent i et sprog som Haskell (algebraic data types, lazy evaluation, pattern matching).
Måske fordi man sjældent/aldrig har brug for det :p
Gravatar #30 - illishar
3. jan. 2011 12:20
#2 Ja, især fordi at de fleste er enige om at listens "The Pragmatic Programmer" er noget fluff i forhold til Code Complete.
Gravatar #31 - illishar
3. jan. 2011 12:45
#27 Du taler meget om at være pragmatiker. Umiddelbart handler pragmatik indenfor "udvikling", meget om at komme fra A til B hurtigst/billigst muligt, evt. krydret med fremtidig betragtninger om efterfølgende vedligehold. Hyppig brug af sætningen "Who gives a shit" forventes.

Funktionel programmering er muligvis det pragmatiske valg i nogle tilfælde (performance), men pragmatisk set er det jo statistisk ikke det første valg man bør overveje. Alene pga. udbredelse, hvis man ikke kan finde på andre modargumenter.

Og med antallet af eksisterende kode-linier, så vil der nok gå rigtig mange år før funktionelle sprog bliver det "pragmatiske" valg. Desværre.
Gravatar #32 - illishar
3. jan. 2011 12:54
zook (27) skrev:
Du udelader at nævne compileren, som er langt mere intelligent i et sprog som Haskell (algebraic data types, lazy evaluation, pattern matching).

Windcape (29) skrev:
Måske fordi man sjældent/aldrig har brug for det :p


Man skal bestemt ikke undervudere static proving og informative warnings. Windcape, du bruger helt sikkert også FxCop o.l. (Som forøvrigt er på top10 over værktøjer som .NET-folk *skal* kende.) Og functionelle sprog har langt bedre betingelser, end hvad FxCop må arbejde med.
Gravatar #33 - Windcape
3. jan. 2011 13:06
#32

Det er rigtigt nok. Men det er ikke features jeg som programmør gør brug af direkte i min kode.

(Og FxCop er gemt pænt væk som "Code Analysis" i Visual Studio 2010 Premium og Ultimate.)
Gravatar #34 - zook
3. jan. 2011 13:37
Det var nu ikke for at anbefale FP som et første sprog. Mener nu iøvrigt heller ikke at bøgerne på listen er særligt egnet til første gangs læsning.

Angående pragmatik. Jeg sidder pt. og arbejder med et projekt som involverer flere C og C++ biblioteker som jeg benytter gennem haskell med FFI. Dog er der visse mangler ved FFI som gør det vanskeligere end det formenligt kunne være at snakke direkte med C++. Tror til dels noget af arbejdet kan automatiseres med output fra gcc-xml. Der er ikke de store problemer med bruge biblioteker med et C api. Det er bestemt muligt at integrere eksisterende løsninger med eksempelvis Haskell, som er hvad jeg arbejder med.

Jeg går udfra de fleste andre funktionelle sprog har lignende muligheder for at snakke med omverdenen. Ser ihvertfaldt hyppigt at der også findes bindings mellem populære biblioteker og sprog som erlang, occaml, scheme osv.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login