ugrás a tartalomhoz

There has to be another way: my entry in the FP vs. OO debate

MadBence · 2015. Feb. 11. (Sze), 18.23
Valóban temetni kellene az objektumorientált programozást?
 
1

Arany középút

Hidvégi Gábor · 2015. Feb. 12. (Cs), 10.33
Megnéztem jópár funkcionális programozási nyelv szintaktikáját (Erlang, Haskell és Lisp), és szerintem egyáltalán nem intuitívak, azaz ránézel a forráskódra úgy, hogy nem ismered a nyelvet, és nem tudod, hogy mi fog történni. Én elhiszem, hogy matematikailag nagyon alá van támasztva minden, de ebben a formában ez kizáró ok, hogy tömegek használják.

Az OOP is ezer sebből vérzik, de ezt már leírtam párszor. A megoldás valahol a kettő között van, mindkét koncepcióból át kéne venni a jó elképzeléseket.
2

Más nyelvek

Poetro · 2015. Feb. 12. (Cs), 11.47
Akkor nézd meg, más nyelvekben, amiknek a szintaktikája közelebb áll a C-hez, ugyanez hogyan néz ki. Mondjuk JavaScript, Python, Ruby. Például:

var url = fieldValues.map(String).map(encodeURIComponent).join('/');
var values = _.chain(groupedFields)
  .map(_.keys)
  .flatten()
  .sort()
  .uniq(true)
  .map(function (key) {
    return [key].concat(
      groupedFields.map(_.property(key)).map(numberOrNull)
    );
  })
  .valueOf()
3

Ez sem intuitív, de JS-ben

Hidvégi Gábor · 2015. Feb. 12. (Cs), 12.08
Ez sem intuitív, de JS-ben például van választási lehetőség.
4

Intuitív

Poetro · 2015. Feb. 12. (Cs), 12.10
Mi szükséges szerinted ahhoz, hogy számodra intuitív legyen? Mindenfajta stílust meg kell tanulni, felismerni benne a mintákat, enélkül nem lehet hatékony programokat írni.
5

Akkor a legegyszerűbb a munka

Hidvégi Gábor · 2015. Feb. 12. (Cs), 12.20
Akkor a legegyszerűbb a munka bárki számára, ha a nyelv szintaxisa a legközelebb áll a természetes nyelvekhez. Természetesen minden stílust meg lehet tanulni, de most akkor mi vagyunk a nyelvért, vagy a nyelv van miértünk?
6

Akkor a legegyszerűbb a munka

Joó Ádám · 2015. Feb. 12. (Cs), 12.49
Akkor a legegyszerűbb a munka bárki számára, ha a nyelv szintaxisa a legközelebb áll a természetes nyelvekhez.


Ez egyáltalán nem biztos.
9

Hanem?

Hidvégi Gábor · 2015. Feb. 12. (Cs), 13.10
Hanem?
10

Bizonytalan.

Joó Ádám · 2015. Feb. 12. (Cs), 13.24
Bizonytalan.
21

:D

szabo.b.gabor · 2015. Feb. 13. (P), 15.06
:D
7

ránézel a forráskódra úgy,

Joó Ádám · 2015. Feb. 12. (Cs), 12.52
ránézel a forráskódra úgy, hogy nem ismered a nyelvet, és nem tudod, hogy mi fog történni


Ameddig nem ismerted az imperatív stílust, addig egy imperatív nyelven írt kódról sem tudtad, hogy mit csinál.

A megoldás valahol a kettő között van, mindkét koncepcióból át kéne venni a jó elképzeléseket.


Ez zajlik, mindkét paradigmába tartozó nyelvek folyamatosan emelnek át eszközöket a másikból.
8

Ameddig nem ismerted az

Hidvégi Gábor · 2015. Feb. 12. (Cs), 13.09
Ameddig nem ismerted az imperatív stílust, addig egy imperatív nyelven írt kódról sem tudtad, hogy mit csinál.

Imperatív (procedurális) nyelvek:

Ezen nyelvek közös jellemzője, hogy a program fejlesztése értékadó utasítások megfelelő sorrendben történő kiadására koncentrálódik.
Ez áll a legközelebb az emberi gondolkodáshoz:
1, arrébb tolom a dobozt; eredmény: oda került, ahova szeretném
2, ha a helyén van a doboz, felnyitom; eredmény: a doboz nyitott
3, ha a doboz nyitott, kiveszem a tartalmát; eredmény: labda

Imperatív nyelvek esetén ha ismered a belépési pontot, tudod, hogy mi a függvény és a változó, akkor átlagos halandóként is érteni fogod, mi fog történni.
11

Imperatív nyelvek esetén ha …

Joó Ádám · 2015. Feb. 12. (Cs), 13.28
Imperatív nyelvek esetén ha … tudod, hogy mi a függvény és a változó, akkor átlagos … érteni fogod, mi fog történni.


Ameddig nem tudtál programozni, addig nem tudtad, mi a függvény és mi a változó (még akkor sem, ha figyeltél matematika órán, mert nem ugyanaz).

Érdemes elolvasni Jeff Atwood ide kapcsolódó írását.
12

Teljesen irreleváns, hogy mit

Hidvégi Gábor · 2015. Feb. 12. (Cs), 14.26
Teljesen irreleváns, hogy mit szólnak egy programkódhoz azok, akik nem tudnak (vagy – a cikk alapján – nem képesek) programozni, és nem is értem, miért kevered ide őket.

A következőt állítottam:
Akkor a legegyszerűbb a munka bárki számára, ha a nyelv szintaxisa a legközelebb áll a természetes nyelvekhez.
Aki nem programozó, annak a számára a programozás nem munka, mert mással foglalkozik. Aki nem képes programozni, annak a számára sem munka a programozás (az elején szenved vele, aztán előbb-utóbb otthagyja).
13

SQL

Poetro · 2015. Feb. 12. (Cs), 14.41
Akkor az SQL könnyű, mert szintaxisa hasonlít a természetes nyelvhez?
SELECT apple FROM apples 
WHERE color IN ('red', 'green') AND size > 5 
INNER JOIN types ON apples.type = types.type 
GROUP BY apple.type
Ráadásul a COBOL, ami az első olyan nyelv volt, aminek a szintaxisa igen közel állt az angolhoz sincs sehol manapság.
15

Kérem az összes nagy darab,

Hidvégi Gábor · 2015. Feb. 12. (Cs), 16.13
Kérem az összes nagy darab, zöld és piros Macintosh és Golden almát külön ládában. Nagyon kell hunyorítani, ha a fenti lekérdezést természetesnek szeretnénk venni, ezért szerintem a fenti kijelentésem alapján az SQL nem egy túl jó nyelv.
17

Kérem az összes nagy darab,

Joó Ádám · 2015. Feb. 12. (Cs), 22.13
Kérem az összes nagy darab, zöld és piros Macintosh és Golden almát külön ládában.
SELECT * FROM apples

WHERE
    apple.size = 'big'
    AND (apple.color = 'red' OR apple.color = 'green')
    AND (apple.type = 'macintosh' OR apple.type = 'golden')

GROUP BY apple.type
Give me all from the apples where the apple’s size is big, its color is red or green and its type is either Macintosh or Golden, in groups of their types.

Az SQL-t kifejezetten azzal a céllal hozták létre, hogy laikus felhasználók angol nyelven érthető lekérdezéseket írhassanak vele. Ennél közelebb jutni egy természetes nyelvhez sosem fogsz.
19

Az SQL nagyszerű addig, amíg

Hidvégi Gábor · 2015. Feb. 13. (P), 10.30
Az SQL nagyszerű addig, amíg ilyen egyszerűségű problémákat kell megoldani. Küldök majd be két blogmarkot a témában.
20

offtopic

pythonozok · 2015. Feb. 13. (P), 11.59
Egykori kollégáim annyira megutálták a java-t, hogy a rendszereik üzleti logikáját átrakták java-ból PL/SQL-be... (jó, az már nem tiszta SQL, de akkor is... :) )
14

Teljesen irreleváns, hogy mit

Joó Ádám · 2015. Feb. 12. (Cs), 14.45
Teljesen irreleváns, hogy mit szólnak egy programkódhoz azok, akik nem tudnak (vagy – a cikk alapján – nem képesek) programozni, és nem is értem, miért kevered ide őket.


Ameddig nem tanultál meg imperatívan programozni, addig te sem tudtál programozni, és a számodra mára intuitív szintakszis ugyanolyan befogadhatatlan volt, mint most a funkcionális.

Mellesleg a C-szintakszis igen messze áll a természetes nyelvekétől.
16

Nem mondtam egy szóval sem,

Hidvégi Gábor · 2015. Feb. 12. (Cs), 17.27
Nem mondtam egy szóval sem, hogy a C az annyira jó lenne, sokkal jobb nála például a Pascal.

procedure Eljaras(Parameter: boolean);
var
  a: integer;
begin
  a := 5;
  repeat
    a := a + 1;
  until a < 10;
  Write('A értéke: ', a);
end;

Ehhez a változó, az eljárás és a ciklus fogalmát kell ismerni.
18

Nem mondtam egy szóval sem,

Joó Ádám · 2015. Feb. 12. (Cs), 22.16
Nem mondtam egy szóval sem, hogy a C az annyira jó lenne


Mégis egy C-szintakszisú nyelvben dolgozol.

sokkal jobb nála például a Pascal
void procedure(bool parameter) {
    int a = 5;
    
    while (a < 10) {
        a += 1;
    }
    
    printf("A értéke: %s", a);
}
Én nem látom egyértelműnek, hogy a Pascal jobban olvasható egy hozzáértő számára. Pont ugyanúgy, ahogy a kezdőként a megértésben sok segítséget adó SQL is fárasztó, és sokkal szívesebben írnék és olvasnék relációs algebrai kifejezéseket helyette.

Ahogy a matematika sem véletlen használ szimbólumokat szöveges leírások helyett.
22

Ameddig nem tanultál meg

Hidvégi Gábor · 2015. Feb. 14. (Szo), 10.49
Ameddig nem tanultál meg imperatívan programozni, addig te sem tudtál programozni, és a számodra mára intuitív szintakszis ugyanolyan befogadhatatlan volt, mint most a funkcionális
Más stílusban és logikával íródnak a funkcionális és az imperatív programok. Például furcsa, hogy iterációval dolgoznak funkcionálisan, nem pedig ciklusokkal, vagy az, hogy nincsenek változók, csak konstansok, azaz például ha van egy függvényed, aminek a bemenete öt alma, a kimenete pedig hat alma, akkor a hat nem úgy áll elő, hogy a meglévő öthöz hozzáadnak egyet, hanem vesznek hat új almát.

Why hasn't functional programming taken over yet?

Abban viszont valószínűleg tévedtem, hogy egy programozási nyelv akkor intuitív, ha közel áll a természetes nyelvhez. Ezt továbbgondolva inkább azt állítom, hogy egy programozási nyelv akkor intuitív, ha közel áll az emberi gondolkodáshoz (a többség gondolkodásához).