-
Notifications
You must be signed in to change notification settings - Fork 123
/
ch04.txt
595 lines (516 loc) · 62.3 KB
/
ch04.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
# Τεχνικές
![](feynman-understand.md){.epigraph}
![](abs-tools.md){.include}
## Το περιβάλλον ανάπτυξης λογισμικού
Η διαδικασία υλοποίησης ενός συστήματος διάδρασης ανθρώπου και υπολογιστή
μπορεί να διευκολυνθεί, αν ο προγραμματιστής έχει στη διάθεσή του
επιμέρους εργαλεία και τεχνικές, τα οποία βοηθούν στην κατασκευή των υποδειγμάτων
και, κυρίως, στην κατασκευή του τελικού συστήματος διάδρασης. Τα συστήματα
υποστήριξης της κατασκευής διάδρασης είναι σχετικά απλά
στην περίπτωση του παραδοσιακού επιτραπέζιου συστήματος,
γιατί το λεξιλόγιο της διάδρασης (π.χ. παράθυρο, μενού, φόρμα, παλέτα, έγγραφο, κτλ.)
είναι σχετικά περιορισμένο. Η σχεδίαση για τον διάχυτο ΗΥ έχει αυξήσει
και ουσιαστικά έχει αλλάξει τις παραμέτρους της διάδρασης
τόσο, ώστε τα περισσότερα εργαλεία να είναι ακατάλληλα,
αφού δεν μπορούν να δώσουν μια πλήρη εικόνα της εκτέλεσης
στην τελική συσκευή του χρήστη. Από την άλλη πλευρά,
οι γενικές τεχνικές των προδιαγραφών διατηρούν την αξιοπιστία τους,
όπως το μοντέλο ελεγκτής-όψη, οι δηλωτικές γλώσσες προδιαγραφών,
και τα διαγράμματα ροής και κατάστασης.
^[@fig:grail-flow]
^[@fig:max-language]
![](grail-flow.md){.figure}
![](max-language.md){.figure}
Τα περισσότερα βιβλία προγραμματισμού διαλέγουν από την αρχή κάποια
από τα τρέχοντα διαθέσιμα εργαλεία, δίνοντας έμφαση, συνήθως, στη γλώσσα προγραμματισμού (π.χ. Java),
το λειτουργικό σύστημα (π.χ. Windows), και το περιβάλλον ανάπτυξης (π.χ. Eclipse)
και, από εκεί και πέρα, περιγράφουν τα επιμέρους ζητήματα. Αντίθετα, σε αυτό το βιβλίο,
αντιμετωπίζουμε όλα τα εργαλεία του προγραμματισμού ως ζητούμενα,
τα οποία έχουν διαφορετικές τιμές, ανάλογα με τις απαιτήσεις του έργου.
Για τον σκοπό αυτό, δίνουμε μια επισκόπηση των διαθέσιμων εργαλείων και των τεχνικών ανάπτυξης
με έμφαση στα κριτήρια επιλογής τους, ανάλογα με τις περιπτώσεις του προγραμματισμού της διάδρασης.
Επίσης, σε αντίθεση με τα περισσότερα βιβλία που επιλέγουν περισσότερο ή λιγότερο ρητά
μια δημοφιλή τεχνική και διαδικασία ανάπτυξης, εδώ περιγράφουμε τις ιδιότητές τους
και αξιολογούμε την καταλληλότητά τους ανάλογα με το ζητούμενο. Για παράδειγμα,
κάποια βιβλία θεωρούν δεδομένο ότι θα πρέπει να ξεκινήσουμε τον προγραμματισμό
μόνο αφού έχουμε καθορίσει με ακρίβεια τις προδιαγραφές, αλλά υπάρχουν πολλές περιπτώσεις χρήσης,
στις οποίες ο ίδιος ο προγραμματισμός της διάδρασης μπορεί να μας βοηθήσει να κατανοήσουμε καλύτερα
ποιες είναι οι προδιαγραφές. Είναι τόσα πολλά τα πιθανά επιμέρους εργαλεία που έχει ανάγκη
ένας προγραμματιστής, ώστε δημιουργήθηκε μια νέα κατηγορία υπερ-εργαλείου,
το ολοκληρωμένο περιβάλλον ανάπτυξης, το οποίο περιλαμβάνει όλα τα παραπάνω μέσα στην ίδια εφαρμογή.
Το ολοκληρωμένο περιβάλλον ανάπτυξης αποτελείται από μια οργάνωση εργαλείων
με εύκολη πρόσβαση σε δομές και σε τεχνικές που βοηθούν στην παραγωγή του τελικού προϊόντος.
Ανάλογα με την εμπειρία και τις προτιμήσεις του κατασκευαστή,
το περιβάλλον ανάπτυξης μπορεί να έχει πάρα πολλές μορφές και επίπεδα λειτουργίας.
Για παράδειγμα, οι αρχάριοι χρήστες, συνήθως, διευκολύνονται
από οπτικά περιβάλλοντα ανάπτυξης λογισμικού, τα οποία δεν δίνουν άμεση πρόσβαση
στον τελικό πηγαίο κώδικα, αλλά δίνουν πολύ εύκολη πρόσβαση σε βασικά μοτίβα χρήσης.
Από την άλλη πλευρά, οι έμπειροι κατασκευαστές, οι οποίοι θέλουν να φτιάξουν κάτι εντελώς καινούργιο,
όχι μόνο χρησιμοποιούν πολύ απλά και ευέλικτα εργαλεία (π.χ. έναν απλό επεξεργαστή κειμένου),
αλλά ξοδεύουν και αρκετό χρόνο φτιάχνοντας δικά τους εργαλεία και τεχνικές.
Ανάμεσα σε αυτές τις δύο ακραίες περιπτώσεις, υπάρχουν πάρα πολλά εργαλεία και τεχνικές
τις οποίες μπορεί να χρησιμοποιήσει κάποιος, ανάλογα με τις ικανότητες και τον σκοπό του.
^[@fig:eclipse-ide]
^[@fig:processing-ide]
![](eclipse-ide.md){.figure}
![](processing-ide.md){.figure}
Ιδιαίτερη αναφορά αξίζει να γίνει στο ολοκληρωμένο περιβάλλον του Processing,
το οποίο έχει φτιαχτεί σκόπιμα έτσι ώστε να μοιάζει περισσότερο
με εφαρμογή εκτέλεσης πολυμεσικών αρχείων παρά με ένα προγραμματιστικό περιβάλλον.
Σε αντίθεση με τα δημοφιλή ολοκληρωμένα περιβάλλοντα,
η εμφάνιση του Processing είναι πολύ λιτή,
πράγμα που έχει γίνει για να διευκολύνει τον νέο προγραμματιστή.
Ίσως περισσότερο αντισυμβατική και από την εμφάνιση είναι η ορολογία σε αυτό το περιβάλλον,
αφού σκόπιμα αναφέρεται στον πηγαίο κώδικα ως σχέδιο, και όχι ως αρχείο ή ως κώδικα.
Η πρόθεση των σχεδιαστών είναι να παροτρύνουν τον προγραμματιστή
σε αυτό το περιβάλλον να πειραματιστεί και να βελτιώσει την ιδέα του,
κάνοντας δοκιμή και λάθη. Σε αντίθεση λοιπόν με την παραδοσιακή συμβουλή
της αρχικής αναλυτικής σχεδίασης ενός προγράμματος πριν από την υλοποίησή του,
το περιβάλλον Processing προτρέπει στον αυτοσχεδιασμό και στην εξερεύνηση.
Τα εργαλεία που διευκολύνουν την ανάπτυξη υλικού και λογισμικού διάδρασης
έχουν αποδειχθεί ιδιαίτερα αποτελεσματικά σε πολλές περιπτώσεις,
αρχίζοντας από το γραφικό περιβάλλον του επιτραπέζιου υπολογιστή.
Κάθε κατασκευαστής ενός λειτουργικού συστήματος παρέχει, σε διαφορετικό βαθμό,
ένα σύνολο από μοτίβα, τα οποία επιτρέπουν μια ομοιόμορφη εμφάνιση και,
κυρίως, μια συνεπή συμπεριφορά ανάμεσα στις πολλές διαφορετικές εφαρμογές χρήστη.
Ήταν η Apple αυτή που πρώτη έδωσε στους κατασκευαστές εφαρμογών ένα σετ από οδηγίες και
μοτίβα συνεπούς σχεδιασμού της διάδρασης με τον υπολογιστή Macintosh,
ενώ, ταυτόχρονα, τα αντίστοιχα εργαλεία ανάπτυξης του λογισμικού σέβονταν αυτές τις οδηγίες.
Για παράδειγμα, η θέση, η εμφάνιση και η λειτουργία των κουμπιών
που καθορίζουν το μέγεθος του παραθύρου έχουν προκαθορισμένες ιδιότητες,
ώστε να μοιάζουν ανάμεσα στις διαφορετικές εφαρμογές του χρήστη,
δημιουργώντας μια αίσθηση οικειότητας. Ο κατασκευαστής εφαρμογών χρήστη
μπορεί πάντα να αγνοήσει τις οδηγίες και τα έτοιμα μοτίβα,
αν επιθυμεί να φτιάξει μια εφαρμογή που έχει λόγους να διαφέρει,
όπως για παράδειγμα σε εφαρμογές μουσικής και επεξεργασίας εικόνας.
Πέρα από την Apple, και οι άλλοι κατασκευαστές λειτουργικών συστημάτων
με γραφικό περιβάλλον, σε μικρότερο (π.χ. Linux) ή μεγαλύτερο βαθμό (π.χ. Windows),
παρέχουν πλέον τα αντίστοιχα σετ οδηγιών, καθώς και έτοιμα δομικά στοιχεία
κατασκευής της διάδρασης.
^[@fig:visual-basic-form-designer]
Υπάρχουν δύο κύριοι λόγοι για τους οποίους ένας κατασκευαστής της διάδρασης
θα ήθελε να κινηθεί έξω από την ασφάλεια που του προσφέρει
το στενό και προκαθορισμένο σύνολο οδηγιών που του παρέχει ο κατασκευαστής
της αρχικής πλατφόρμας. Ο πρώτος λόγος είναι να θέλει να φτιάξει μια εφαρμογή,
η οποία πρέπει να δείχνει και να συμπεριφέρεται διαφορετικά,
επειδή αυτό εξυπηρετεί τις ανάγκες του. Χαρακτηριστικά παραδείγματα
είναι τα skinable mp3 players, όπως το WinAmp,
καθώς και οι εφαρμογές με φίλτρα ψηφιακής φωτογραφίας, όπως το Kai Tools.
Ο δεύτερος και σημαντικότερος λόγος που κάνει έναν κατασκευαστή
να κινηθεί έξω από τους κανόνες είναι η ανάπτυξη ενός συστήματος
το οποίο δεν μοιάζει καθόλου με το σύστημα του υπολογιστή εργασίας του,
όπως για παράδειγμα η ανάπτυξη κινητών εφαρμογών σε επιτραπέζιο υπολογιστή.
![](visual-basic-form-designer.md){.figure}
![](windows-mobile.md){.figure}
Κάποιες από τις πρώτες προσπάθειες κατασκευής κινητών εφαρμογών έμοιαζαν πολύ
με τις αντίστοιχες επιτραπέζιες (π.χ. οι πρώτες εκδόσεις των Windows Mobile).
^[@fig:windows-mobile]
Φυσικά, αυτό δε βοήθησε στην αποδοχή αυτών των κινητών εφαρμογών στα πρώτα στάδια,
μέχρι που η Apple με το iPhone έδωσε έναν νέο ορισμό του πλαισίου μέσα στο οποίο
θα πρέπει να κινούνται οι εφαρμογές χρήστη στις κινητές συσκευές, για να είναι χρήσιμες,
εύχρηστες και αποδεκτές. Αντίστοιχα, κάθε νέα τεχνολογία που μετατοπίζει τη διάδραση
πέρα από τον επιτραπέζιο υπολογιστή, αντιμετωπίζει τις ίδιες προκλήσεις. Στα πρώτα στάδια,
οι κατασκευαστές εφαρμογών χρήστη θα δανειστούν (λανθασμένα) πάρα πολλά στοιχεία
από συσκευές που φαίνονται παρόμοιες, αλλά στην πορεία και μετά από μερικούς κύκλους
δοκιμής και λάθους, θα καταλήξουν σε ένα ενημερωμένο σύνολο από οδηγίες και εργαλεία,
που θα τους βοηθήσουν στην παραγωγή κατάλληλων εφαρμογών χρήστη. Συνοπτικά,
όταν κατασκευάζουμε εφαρμογές οι οποίες θα εκτελεστούν σε υπολογιστή που διαφέρει από τον επιτραπέζιο,
θα πρέπει να προσέχουμε πρώτα από όλα τις συσκευές εισόδου και εξόδου
(είναι πληκτρολόγιο και ποντίκι ή μήπως κάτι άλλο;) και το πλαίσιο χρήσης
(είναι περιβάλλον γραφείου και εργασία με εκδόσεις ή κάτι άλλο;).
Το τελικό αποτέλεσμα και, κυρίως, το πεδίο ορισμού στο οποίο μπορεί να κινηθεί
ένα νέο πρόγραμμα διάδρασης, εξαρτάται από τα βασικά μοτίβα σχεδίασης που είδαμε παραπάνω.
Επίσης, εξαρτάται και από τα εργαλεία, την οργάνωση και τη διαδικασία κατασκευής.
Όπως ακριβώς τα βασικά σχεδιαστικά και τεχνολογικά μοτίβα,
τα οποία έχει στη διάθεσή του ένας κατασκευαστής μπορούν να δώσουν
συγκεκριμένες μορφές και λειτουργίες στη διάδραση,
έτσι και η μέθοδος κατασκευής μπορεί να επιτρέψει ή να αποτρέψει
κάποιες μορφές και λειτουργίες της διάδρασης.
Τα πρώτα συστήματα προγραμματισμού της διάδρασης
δεν είχαν καμία διαφορά από εκείνα για τον προγραμματισμό του συστήματος,
οπότε πολλοί δυνητικοί κατασκευαστές της διάδρασης
δεν είχαν καταφέρει να δώσουν τη συνεισφορά τους.
Μετά τη δεκαετία του 1970, οι αντικειμενοστραφείς γλώσσες προγραμματισμού
(π.χ. SmallTalk, C++, Java, JavaScript) και τα οπτικά περιβάλλοντα ανάπτυξης
(π.χ. KidSim, MIT Scratch, Processing)
επέτρεψαν σε γνώστες της περιοχής του προγραμματισμού της διάδρασης να συμμετάσχουν.
Ταυτόχρονα, η διευκόλυνση κάποιων πτυχών του προγραμματισμού της διάδρασης,
ακόμη και από τον τελικό χρήστη, ολοκληρώνει τη διαχρονική τάση
που ενθαρρύνει τη συμμετοχικότητα του τελικού χρήστη,
όχι μόνο στην απλή χρήση, αλλά και στη δημιουργία.
## Εργαλεία ανάπτυξης
Για πολλά χρόνια η ανάπτυξη και η εκτέλεση εφαρμογών στον επιτραπέζιο υπολογιστή
ήταν μονόδρομος, αφού οι άλλες μορφές υπολογιστή δεν ήταν ιδιαίτερα διαδεδομένες.
^[@olsen2009building]
Πάντα υπήρχαν υπερ-υπολογιστές, καθώς και παιχνιδομηχανές,
αλλά η ανάπτυξη για αυτές τις πλατφόρμες γινόταν από ειδικευμένο προσωπικό,
που λάμβανε την αντίστοιχη εκπαίδευση.
^[@grudin1990computer]
Η ανάπτυξη και η εκτέλεση εφαρμογών διάδρασης στον επιτραπέζιο υπολογιστή έχει πολλές παραμέτρους,
τις οποίες πρέπει να αξιολογήσει ο κατασκευαστής και δεν είναι καθόλου τετριμμένη περίπτωση.
Όμως, έχει ένα βασικό πλεονέκτημα σε σχέση με την ανάπτυξη για τον κινητό και διάχυτο υπολογισμό.
Η βασική διαφορά στην ανάπτυξη λογισμικού διάδρασης
ανάμεσα στον επιτραπέζιο και τον κινητό ή διάχυτο υπολογισμό είναι το γεγονός
ότι το πρόγραμμα εκτελείται στην πρώτη περίπτωση πάνω στον ίδιο τον υπολογιστή ανάπτυξης,
ενώ στη δεύτερη περίπτωση το πρόγραμμα εκτελείται πάνω σε διαφορετικό υλικό.
Όταν το πρόγραμμα που κατασκευάζουμε εκτελείται τελικά πάνω σε διαφορετικό υλικό
από εκείνο του υπολογιστή ανάπτυξης, τότε η δυνατότητα που έχουμε
για την εφαρμογή του ανθρωποκεντρικού κύκλου σχεδίασης μειώνεται
ανάλογα με τον βαθμό και το είδος της διάδρασης. Αν, για παράδειγμα,
κατασκευάζουμε ένα πρόγραμμα για ένα έξυπνο κινητό που έχει πληκτρολόγιο
και δεν έχει οθόνη αφής, τότε μπορούμε, σχετικά εύκολα,
να κάνουμε τις επαναληπτικές δοκιμές της διάδρασης πάνω στον επιτραπέζιο υπολογιστή,
ο οποίος έχει πληκτρολόγιο που, ναι μεν διαφέρει από το μικρό πληκτρολόγιο του κινητού,
όμως δεν είναι δραματικά διαφορετικό. Στην περίπτωση, όμως,
που το έξυπνο κινητό έχει μόνο πολυαπτική οθόνη αφής,
τότε η δοκιμή της διάδρασης στον επιτραπέζιο υπολογιστή γίνεται πιο δύσκολη,
αφού, συνήθως, δεν συνοδεύεται από παρόμοια συσκευή εισόδου. Η δοκιμή της διάδρασης
γίνεται ακόμη δυσκολότερη, όταν η διάδραση βασίζεται σε αισθητήρες εισόδου,
όπως ο εντοπισμός θέσης ή το γυροσκόπιο, αφού αυτά δεν υπάρχουν στον επιτραπέζιο υπολογιστή
και απαιτείται πλέον η σύνδεσή του με την τελική συσκευή
για την πραγματοποίηση των επαναληπτικών δοκιμών κατά το στάδιο της ανάπτυξης.
Όπως είδαμε παραπάνω, το βασικό μειονέκτημα της κατασκευής
στην περίπτωση του κινητού και διάχυτου υπολογισμού
είναι ότι τα περισσότερα εργαλεία ανάπτυξης
είναι διαθέσιμα κυρίως για τον επιτραπέζιο υπολογιστή,
ο οποίος μπορεί να διαφέρει, από λίγο έως πάρα πολύ, από την τελική πλατφόρμα,
αναφορικά με τις συσκευές εισόδου και εξόδου. Για παράδειγμα,
ένας επιτραπέζιος υπολογιστής έχει είσοδο, κυρίως, από το πληκτρολόγιο και το ποντίκι,
ενώ ένα έξυπνο κινητό έχει είσοδο, κυρίως, από μια πολυαπτική οθόνη.
Το αποτέλεσμα είναι ότι, εκτός από κάποιες απλές επιλογές αντικειμένων πάνω στην οθόνη,
πολλές από τις πιθανές διαδράσεις, οι οποίες είναι χρήσιμες στο έξυπνο κινητό,
δεν είναι διαθέσιμες για δοκιμή στην πλατφόρμα ανάπτυξης,
όταν αυτή είναι ο επιτραπέζιος υπολογιστής.
Από αυτήν την άποψη θα μπορούσαμε να υποθέσουμε ότι
τα μελλοντικά εργαλεία ανάπτυξης για κινητό υπολογισμό
θα εκτελούνται απευθείας πάνω στο κινητό.
Αυτό φυσικά υπαγορεύει ένα πολύ διαφορετικό μοντέλο ανάπτυξης
αναφορικά με τα εργαλεία και τις διαδικασίες κατασκευής του προγράμματος διάδρασης.
![](smalltalk.md){.figure}
![](lilith-modula.md){.figure}
Η κατασκευή προγραμμάτων διάδρασης διευκολύνεται από εργαλεία και τεχνικές,
^[@graham2004hackers, @mcconnell2004code, @thimbleby2007press]
τα οποία είναι τόσο διαφορετικά όσο και το εύρος
των συσκευών εισόδου, εξόδου και υπολογισμού.
^[@noble2009programming]
Επιπλέον, τα εργαλεία και οι διαδικασίες κατασκευής
εξαρτώνται από τις προτιμήσεις του κατασκευαστή,
οι οποίες μπορεί να γίνουν αρκετά πολύπλοκες
στην περίπτωση μεγάλων οργανισμών και ομάδων ανάπτυξης,
επομένως, τότε αναφερόμαστε στην κουλτούρα ανάπτυξης του κάθε κατασκευαστή.
^[@fig:smalltalk]
^[@fig:lilith-modula]
Μετά τον καθορισμό του στόχου και των αναγκών του χρήστη,
το επόμενο βήμα είναι η επιλογή των εργαλείων ανάπτυξης,
καθώς και ο καθορισμός του πλάνου ανάπτυξης
που θα διευκολύνει τη σωστή παράδοση του προγράμματος της διάδρασης.
Το πλάνο ανάπτυξης περιλαμβάνει ένα σύνολο από παραδοτέα της μορφής αναφορά ή υπόδειγμα,
ενώ η σωστή οργάνωση της ομάδας ανάπτυξης περιλαμβάνει ρόλους,
όπως προγραμματιστής, δοκιμαστής, αναλυτής-σχεδιαστής.
Σε ένα πραγματικό έργο ανάπτυξης λογισμικού,
αν ο οργανισμός χρησιμοποιήσει περισσότερους ανθρώπινους πόρους
από όσους χρειάζεται, θα πέσει έξω οικονομικά,
αφού το να δουλεύει το έργο δεν είναι ο μοναδικός στόχος ενός οργανισμού.
Θα πρέπει το έργο να έχει παραχθεί και με βιώσιμο κόστος,
ώστε να είναι ανταγωνιστικό. Υπό αυτήν τη σκοπιά,
θα πρέπει να γίνει μια συζήτηση για τη σκοπιμότητα της
επιλογής των εργαλείων ανάπτυξης, η οποία να βασίζεται
στις δεξιότητες των προγραμματιστών,
αλλά και στους στόχους του έργου.
^[@andrew2000pragmatic]
Το πιο σημαντικό, διαχρονικά, εργαλείο στην ανάπτυξη νέων συστημάτων
είναι ο επεξεργαστής κειμένου. Η σημασία του κειμένου οφείλεται στο γεγονός
ότι οι περισσότερες γλώσσες προγραμματισμού είναι γραπτές.
Αν και η επεξεργασία κειμένου είναι μια σχετικά απλή δραστηριότητα,
υπάρχουν πάρα πολλά είδη επεξεργαστή κειμένου,
γιατί οι προτιμήσεις των προγραμματιστών και
οι απαιτήσεις των έργων ανάπτυξης έχουν μεγάλη ποικιλία. Για παράδειγμα,
μπορούμε να χρησιμοποιήσουμε από έναν επεξεργαστή κειμένου γενικής χρήσης,
που συνήθως είναι ελεύθερα διαθέσιμος με το λειτουργικό σύστημα του υπολογιστή,
μέχρι έναν εξειδικευμένο επεξεργαστή κειμένου που είναι μέρος
ενός εξειδικευμένου συνόλου εργαλείων ανάπτυξης για μια συγκεκριμένη πλατφόρμα υπολογιστή.
Ανάμεσα σε αυτά τα δύο άκρα υπάρχει ένα πολύ μεγάλο φάσμα από είδη επεξεργαστών κειμένου,
τα οποία διευκολύνουν τη συγγραφή, την ανάγνωση και τις αλλαγές στον κώδικα,
καθώς και τις συνήθειες του προγραμματιστή.
^[@fig:emacs-ide]
^[@fig:vim-ide]
Η σχετική σημασία του επεξεργαστή κειμένου μειώνεται στις περιπτώσεις
που έχουμε μια μετατόπιση προς οπτικές γλώσσες προγραμματισμού και
προς ολοκληρωμένα περιβάλλοντα ανάπτυξης.
![](emacs-ide.md){.figure}
![](vim-ide.md){.figure}
Μετά τη συγγραφή του πηγαίου κώδικα, το επόμενο βασικό εργαλείο
που απαιτείται για τον προγραμματισμό είναι η δυνατότητα της μετάφρασης
ή της μεταγλώττισης σε εκτελέσιμο κώδικα της τελικής πλατφόρμας.
Στο πλαίσιο του προγραμματισμού και ειδικά των λειτουργικών συστημάτων,
αυτό είναι μια μεγάλη ενότητα, αλλά στο πλαίσιο τηςκατασκευής της διάδρασης
η προτεραιότητα είναι στη γρήγορη δημιουργία εναλλακτικών προγραμμάτων και, κυρίως,
στις επαναληπτικές αλλαγές. Για τον σκοπό αυτό, αν υπάρχει μια παράμετρος
της κατασκευής κατά τον προγραμματισμό της διάδρασης που έχει μεγάλη σημασία,
αυτή είναι η ταχύτητα με την οποία μπορεί ο κατασκευαστής να εναλλάσσει
την ανάπτυξη με τη δοκιμή.
^[@reas2007processing, @victor2012learnable]
Όσο πιο γρήγορα μπορεί ο κατασκευαστής να περνάει από το στάδιο
της σχεδίασης της διάδρασης στο στάδιο της δοκιμής της διάδρασης,
στο πλαίσιο δοκιμών είτε με ειδικούς είτε με τελικούς χρήστες,
τόσο πιο γρήγορα το πρόγραμμα της διάδρασης θα αποκτήσει την επιθυμητή ποιότητα.
Καθώς τα προγράμματα διάδρασης γίνονται περισσότερο σύνθετα και πολύπλοκα,
η σημασία των παραπάνω βασικών εργαλείων και διαδικασιών,
π.χ. επεξεργαστής κειμένου, μετατροπή σε εκτελέσιμο, γίνονται λιγότερα σημαντικά
από την πλευρά του προγραμματιστή της διάδρασης, αφού προτεραιότητα έχει η επιλογή
του κατάλληλου πλαισίου προγραμματισμού ανάλογα με τις ανάγκες. Για παράδειγμα,
ο προγραμματισμός της διάδρασης για μια εφαρμογή που θα εκτελείται στο διαδίκτυο
επιβάλλει τη χρήση των τεχνολογιών του ιστού και ειδικά εκείνων που διευκολύνουν
τη δημιουργία της διάδρασης στο τερματικό του χρήστη. Στην περίπτωση που είναι αναγκαίο
η δικτυακή εφαρμογή να εκτελείται σε τερματικές συσκευές διαφορετικού μεγέθους,
επιβάλλεται η χρήση των αντίστοιχων τεχνολογικών αρχετύπων που διευκολύνουν
την κλιμάκωση της εφαρμογής σε συσκευές χρήστη με διαφορετικές δυνατότητες,
π.χ. επιτραπέζιος, φορητός, κινητός, τάμπλετ κτλ. Ταυτοχρόνως,
αν η δικτυακή φύση της εφαρμογής απαιτεί και τη διατήρηση της κατάστασης,
τότε επιβάλλεται και η χρήση των τεχνολογιών του εξυπηρετητή σε απομακρυσμένο υπολογιστή.
![](android-emulator.md){.figure}
![](geolocation-simulation.md){.figure}
Εξίσου πολύπλοκο τεχνολογικό πλαίσιο μπορεί να έχουμε και για την ανάπτυξη
μιας εφαρμογής επιτραπέζιου υπολογιστή, όταν υπάρχει η απαίτηση
η είσοδος να γίνεται από συσκευή χειρονομίας και
η έξοδος να γίνεται σε περιβάλλον εικονικής πραγματικότητας.
Γίνεται, λοιπόν, κατανοητό ότι σε ένα τόσο διευρυμένο τεχνολογικό πλαίσιο,
αναφορικά με τις συσκευές εισόδου και εξόδου με τον χρήστη,
ο προγραμματισμός της διάδρασης έχει περισσότερο να κάνει με τη δοκιμή και
την επιλογή των κατάλληλων για την περίσταση εργαλείων π.χ. βιβλιοθήκη προγραμματισμού,
παρά με τις λεπτομέρειες της υλοποίησης, οι οποίες μπορεί να είναι τόσο διαφορετικές
όσο και οι διαφορετικές πλατφόρμες ανάπτυξης, π.χ. επιτραπέζιος ΗΥ, απομακρυσμένος εξυπηρετητής
και εκτέλεσης, π.χ. έξυπνο κινητό, έξυπνο ρολόι, μάσκα εμβύθυσης. Φυσικά,
υπάρχουν κάποιες σταθερές αξίες που, ισχύουν ανεξάρτητα
από το τεχνολογικό πλαίσιο και τις λεπτομέρειες της κάθε βιβλιοθήκης προγραμματισμού,
όπως είναι ο συνεχής έλεγχος που είδαμε στην προηγούμενη ενότητα,
καθώς και ο έλεγχος σε ένα περιβάλλον που θα μοιάζει με αυτό της τελικής πλατφόρμας εκτέλεσης,
τον οποίο θα δούμε στην επόμενη ενότητα.
Όταν η τελική εφαρμογή έχει ως πλατφόρμα εκτέλεσης την ίδια την πλατφόρμα ανάπτυξης,
π.χ. ανάπτυξη εφαρμογής για την επιφάνεια εργασίας σε επιτραπέζιο υπολογιστή,
τότε η μετατροπή του πηγαίου κώδικα σε εκτελέσιμο κώδικα
μπορεί να δοκιμαστεί άμεσα από τον προγραμματιστή πάνω στον ίδιο υπολογιστή. Στην περίπτωση, όμως,
που η τελική πλατφόρμα εκτέλεσης είναι διαφορετική από την πλατφόρμα ανάπτυξης μιας εφαρμογής,
τότε η δουλειά του προγραμματιστή διευκολύνεται από έναν προσομοιωτή. Στην περίπτωση
που η εφαρμογή δεν έχει διεπαφή με τον χρήστη, τότε ο προσομοιωτής είναι αναγκαίος
για τη δοκιμή και την αποσφαλμάτωση του πηγαίου κώδικα. Όμως, στην πιο ενδιαφέρουσα περίπτωση
στην οποία η τελική εφαρμογή περιλαμβάνει και την ανάγκη για διάδραση με τον χρήστη,
τότε έχουμε την απαίτηση ο προσομοιωτής να είναι κάτι παραπάνω από ένα μαύρο κουτί.
Αν και στην απλή εκτέλεση κώδικα υψηλού επιπέδου για μια διαφορετική τελική συσκευή
είναι δόκιμο να χρησιμοποιήσουμε την έννοια του εξομοιωτή (emulator),
αυτό σίγουρα δεν είναι σκόπιμο για την περίπτωση του προγραμματισμού της διάδρασης,
όπου η χρήση του προσομοιωτή (simulator) είναι περισσότερο εύστοχη.
^[@fig:android-emulator]
^[@fig:geolocation-simulation]
Ένας προσομοιωτής για τη δοκιμή εφαρμογών με διάδραση, χρήστη,
οι οποίες εκτελούνται σε διαφορετική πλατφόρμα ανάπτυξης,
θα πρέπει να περιλαμβάνει και την αντίστοιχη διεπαφή
ή τουλάχιστον κάποια προσομοίωση αυτής. Για παράδειγμα,
ο προσομοιωτής για τα έξυπνα κινητά τηλέφωνα περιλαμβάνει οθόνη,
τα αντίστοιχα εικονικά κουμπιά και την προσομοίωση για κάποιες χειρονομίες.
Η οθόνη του προσομοιωτή δεν είναι ίδια με αυτήν της τελικής συσκευής,
αφού η οθόνη του υπολογιστή ανάπτυξης τις περισσότερες φορές έχει διαφορετικές προδιαγραφές,
αλλά σίγουρα είναι πολύ κοντά. Από την άλλη πλευρά, οι συσκευές εισόδου σε ένα έξυπνο κινητό,
π.χ. κουμπιά πάνω στη συσκευή, αισθητήρες κίνησης και θέσης, πολυαπτική οθόνη,
είναι πολύ διαφορετικές από το πληκτρολόγιο και το ποντίκι του επιτραπέζιου υπολογιστή ανάπτυξης,
με αποτέλεσμα ο βαθμός προσομοίωσης της διάδρασης να είναι μικρός.
Συμπερασματικά, ο προσομοιωτής είναι ένα αναγκαίο κακό
που διευκολύνει μεν τις δοκιμές κατά τα πρώτα στάδια της ανάπτυξης,
αλλά δεν μπορεί να αντικαταστήσει τις δοκιμές στην τελική συσκευή,
επειδή η διάδραση με τον χρήστη δεν μπορεί να προσομοιωθεί εν γένει. Μάλιστα,
όσο πιο πολύ διαφέρει η διάδραση με τον προσομοιωτή από εκείνη με την τελική συσκευή
τόσο πιο αναγκαίο είναι ένα μεγάλο μέρος της ανάπτυξης να γίνει στην τελική συσκευή.
Από την άλλη πλευρά, ο εξομοιωτής είναι αναγκαίος
όταν θέλουμε να κατασκευάσουμε ένα νέο περιβάλλον προγραμματισμού της διάδρασης.
^[@ingalls2020evolution]
![](pygmalion.md){.figure}
![](programming-example.md){.figure}
Ο οπτικός προγραμματισμός έχει γνωρίσει μεγάλη αποδοχή στις περιπτώσεις
της εκμάθησης προγραμματισμού, στον αντικειμενοστραφή προγραμματισμό
και, ειδικά, στον σχεδιασμό της διεπαφής με τον χρήστη. Αρχικά,
ο οπτικός προγραμματισμός επιτρέπει την οπτική οργάνωση και την επισκόπηση
στην περίπτωση που έχουμε πηγαίο κώδικα μεγάλης κλίμακας. Σε αυτήν την περίπτωση,
ο οπτικός προγραμματισμός λειτουργεί ως ένα επίπεδο αφαίρεσης των λεπτομερειών της υλοποίησης,
έτσι ώστε ο κατασκευαστής να μπορεί να εστιάσει αρχικά στον συνδυασμό των επιμέρους αντικειμένων
και στη συνολική αρχιτεκτονική της διάδρασης. Με αυτόν τον τρόπο,
ο αντικειμενοστραφής προγραμματισμός μπορεί να διευκολυνθεί από ένα οπτικό περιβάλλον προγραμματισμού.
Στην περίπτωση του σχεδιασμού της διεπαφής με τον υπολογιστή,
ο οπτικός προγραμματισμός επιτρέπει στον κατασκευαστή να χρησιμοποιήσει έτοιμα μοτίβα
ή να φτιάξει δικά του. Για παράδειγμα, η Visual Basic ήταν μια πολύ διαδεδομένη γλώσσα προγραμματισμού
για το λειτουργικό σύστημα Microsoft Windows, γιατί παρείχε ένα οπτικό περιβάλλον σχεδιασμού της διεπαφής.
Ο προγραμματιστής μπορούσε να διαλέξει οπτικά τα εικονίδια, τα μενού και τις φόρμες
που ήθελε να συμπεριλάβει στην εφαρμογή του και έπειτα να τα συνδυάσει
με τις ενέργειες και τις λειτουργίες του προγράμματος. Με αυτόν τον τρόπο,
δημιουργείται ένας διαχωρισμός ανάμεσα στη διεπαφή και την υλοποίηση των λειτουργιών,
ο οποίος διευκολύνει και τον καταμερισμό της εργασίας ανάμεσα στους προγραμματιστές των λειτουργιών
και σε εκείνους της διεπαφής.
^[@fig:pygmalion]
^[@fig:programming-example]
Οι γλώσσες προγραμματισμού με την ευρεία έννοιά τους είναι οι δομικές τεχνολογίες
για τα συστήματα διάδρασης, αφού με αυτές υλοποιούνται και με αυτές καθορίζεται η ποιότητα
των διαδραστικών συστημάτων. Οι γλώσσες προγραμματισμού που βασίζονται σε γραπτό κείμενο
είναι ο βασικός τρόπος διάδρασης για όσους θέλουν να κατασκευάσουν ένα διαδραστικό σύστημα,
ακόμη και αν αυτό χρησιμοποιεί μια άλλη συμβολική γλώσσα πέρα από το κείμενο
για την αλληλεπίδραση με τον χρήστη. Για παράδειγμα, το UNIX κατασκευάστηκε με τη γλώσσα προγραμματισμού C,
αλλά οι χρήστες θα αλληλεπιδράσουν με ένα κέλυφος, το οποίο παρέχει ένα σετ από βασικές εντολές
που μπορούν να συνδυαστούν σε απλά προγράμματα. Αντίθετα, το σύστημα του Alto βασίζεται μόνο στην Smalltalk,
η οποία, εκτός από γλώσσα προγραμματισμού, καθορίζει και τη συμπεριφορά του συστήματος διάδρασης συνολικά
τόσο στη βάση του όσο και στις τελικές εφαρμογές, ενώ στο UNIX
αν θέλουμε μια νέα διαφορετική εντολή ή κάποιες σημαντικές αλλαγές στο σύστημα, αυτό μπορεί να γίνει με τη γλώσσα C.
Το χάσμα ανάμεσα στη γλώσσα προγραμματισμού και στη διάδραση γίνεται ακόμη μεγαλύτερο
κατά τη μετάβαση στις γραφικές διεπαφές επιφάνειας εργασίας,
όπου η διάδραση βασίζεται στον απευθείας χειρισμό αντικειμένων στην οθόνη.
Για να γεφυρωθεί αυτό το χάσμα προγραμματισμού, έχει αναπτυχθεί η τεχνική του προγραμματισμού με παραδείγματα,
όπου ο προγραμματιστής, αντί να περιγράφει στον υπολογιστή πώς θα εκτελέσει μια λειτουργία,
χρησιμοποιεί τη διάδραση με απευθείας χειρισμό, για να δείξει το αποτέλεσμα που θέλει.
Η τεχνική του προγραμματισμού με παραδείγματα μπορεί θεωρητικά
να δώσει τις δυνατότητες του προγραμματισμού σε χρήστες με μικρότερες δεξιότητες,
αλλά, στην πράξη, δεν έχει αποδειχτεί χρήσιμη ούτε εκπαιδευτικά
ούτε στην αποτελεσματικότητα των νέων δημιουργιών,
αφήνοντας έτσι όλο το βάρος στην ανάπτυξη δεξιοτήτων με τις γλώσσες προγραμματισμού
ή, ακόμη καλύτερα, στην ανάπτυξη νέων γλωσσών προγραμματισμού.
Τελευταία σε αυτήν την ενότητα αφήσαμε τη γλώσσα προγραμματισμού, επειδή,
τουλάχιστον στην περίπτωση του προγραμματισμού της διάδρασης,
έχει τη λιγότερη σημασία σε σχέση με τις παραμέτρους που εξετάσαμε παραπάνω.
Τα περισσότερα βιβλία για τον προγραμματισμό ασχολούνται αποκλειστικά με μία γλώσσα προγραμματισμού.
Αυτό είναι σωστό μόνο στην περίπτωση που κάποιος θέλει να μάθει την συγκεκριμένη γλώσσα προγραμματισμού
και λάθος όταν κάποιος θέλει να μάθει τη λογική πίσω από τον προγραμματισμό υπολογιστών,
πράγμα πιο σημαντικό από τις συντακτικές λεπτομέρειες της κάθε γλώσσας.
Η γλώσσα προγραμματισμού είναι σίγουρα μια σπουδαία παράμετρος,
τόσο για την εκμάθηση προγραμματισμού όσο και την κατασκευή της διάδρασης,
αλλά δεν είναι η μόνη παράμετρος, ούτε η σημαντικότερη.
Ειδικά για τη συγγραφή κώδικα κατά τον προγραμματισμό της διάδρασης
ισχύει ότι η κατάλληλη γλώσσα είναι εκείνη που διευκολύνει τη γρήγορη δημιουργία
και την επαναληπτική αλλαγή για πολλά εναλλακτικά υποδείγματα υψηλής πιστότητας.
Για την κατασκευή της διάδρασης, αυτό που έχει μεγαλύτερη σημασία από τη γλώσσα προγραμματισμού
είναι ο μεταφραστής αυτής της γλώσσας στο τελικό εκτελέσιμο πρόγραμμα για κάποιον υπολογιστή.
Ο προγραμματιστής που έχει την κατανόηση και, κυρίως, τον έλεγχο του μεταφραστή
είναι ελεύθερος τόσο από την ίδια την γλώσσα προγραμματισμού όσο και από το υλικό εκτέλεσης.
Ιδανικά, ο προγραμματιστής που έχει και την κατανόηση του πεδίου εφαρμογής,
μπορεί να δημιουργήσει μια γλώσσα για αυτό ακριβώς το πεδίο,
έτσι ώστε το πρόγραμμα ως κείμενο να είναι πολύ κοντά στις ιδιότητες αυτού του πεδίου.
Για την υλοποίηση του μεταφραστή μιας νέας γλώσσας μπορεί να χρησιμοποιηθεί μια ήδη υπάρχουσα γλώσσα
και η ανάπτυξη μπορεί να γίνει σε διαφορετικό υπολογιστή από αυτόν της τελικής εκτέλεσης.
Εναλλακτικά, ένας μεταφραστής μπορεί να γραφτεί στην ίδια τη γλώσσα που μεταφράζει.
Σε αυτήν την περίπτωση, η υλοποίηση μπορεί να ξεκινήσει από ένα υποσύνολο της γλώσσας,
η οποία υλοποιείται απευθείας στο χαρτί σε συμβολική γλώσσα μηχανής.
Για την καλύτερη φορητότητα της γλώσσας,
ο προγραμματιστής μπορεί να ορίσει μια ενδιάμεση εικονική μηχανή,
οπότε η γλώσσα μπορεί να τρέξει και σε διαφορετικό υλικό.
Αυτού του είδους τα αυτόνομα συστήματα είναι δυσκολότερο να σχεδιαστούν αρχικά,
αλλά είναι περισσότερο προσαρμόσιμα σε διαφορετικές ανάγκες, μέσω των επεκτάσεων.
## Συνεργατική κατασκευή και ιδιοκτησία
Σε αυτήν την ενότητα
περιγράφουμε τις ιδιότητες που παρουσιάζει μια γενιά οργανισμών,
οι οποίοι προσπαθούν να μεγιστοποιήσουν τους δεσμούς τους με άλλους
συγγενείς οργανισμούς.
Το όραμά τους στηρίζεται σε μια διαφορετική φιλοσοφία
για την ιδιοκτησία και την αξία,
ενώ ο ακρογωνιαίος λίθος για αυτό το οικοδόμημα
είναι η συνεργασία των προγραμματιστών μεταξύ τους, καθώς και
ο προγραμματισμός της διεπαφής του προγραμματιστή,
ο οποίος αποτελεί ειδική περίπτωση του προγραμματισμού της διάδρασης
με αποδέκτη έναν χρήστη, τον προγραμματιστή.
Σε πολλά από τα δημοφιλή βιβλία προγραμματισμού και σχεδίασης λογισμικού
υπάρχει η εξειδανικευμένη εικόνα ότι η σχεδίαση ξεκινάει από μια λευκή σελίδα.
Στην πράξη αυτό είναι πολύ σπάνιο, μάλιστα, στις περισσότερες περιπτώσεις
στις οποίες η σχεδίαση ενός προγράμματος ξεκινάει από μια λευκή σελίδα,
συνήθως οδηγείται προς μια σχετικά ελλιπή εκδοχή ενός προγράμματος
που ήδη υπάρχει κάπου αλλού σε πολύ πιο βελτιωμένη μορφή.
Φυσικά, υπάρχουν και οι εξαιρέσεις, για τις οποίες θα πρέπει να δημιουργηθεί
μια πραγματικά πρωτότυπη εφαρμογή στον υπολογιστή,
αλλά στις περισσότερες περιπτώσεις αυτό που βλέπουμε είναι παραλλαγές
ή, ακόμη καλύτερα, δημιουργικές συνθέσεις πάνω σε βασικά αρχέτυπα που ήδη υπάρχουν
και τα οποία αναφέρονται σε κάποιες ανθρώπινες ανάγκες και συνήθειες.
Στο πλαίσιο του διαμοιρασμού εργαλείων και τεχνικών,
έχει δημιουργηθεί μια ευρεία κίνηση από χομπίστες και ερευνητές, οι οποίοι συνεργάζονται,
είτε σε ειδικές συναντήσεις είτε με τη βοήθεια του δικτύου
για τη σχεδίαση και την κατασκευή νέων εργαλείων που διευκολύνουν τη δουλειά τους
ή απλώς για διασκέδαση, χωρίς να έχουν εξωτερικά κίνητρα.
Η κίνηση του *φτιάξτο μόνος σου* σίγουρα δεν είναι νέα και δεν αφορά μόνο το υλικό και το λογισμικό,
αλλά πλέον αναπτύσσεται και σε αυτόν τον τομέα πολύ γρήγορα
και προσφέρει ιδέες που δεν θα βρούμε στο εμπόριο.
![](xerox-colab.md){.figure}
![](makerspace.md){.figure}
Η διαδικασία της συνεργατικής σχεδίασης έρχεται να ενισχύσει
τον ήδη σημαντικό ρόλο του χρήστη στην κατασκευή της διάδρασης.
Ο ρόλος του τελικού χρήστη ενός υπολογιστικού συστήματος
είναι κεντρικός στη διαδικασία της ανθρωποκεντρικής σχεδίασης,
αφού με βάση τον χρήστη καθορίζονται οι προδιαγραφές του συστήματος
και γίνονται οι ενδιάμεσες αξιολογήσεις της καταλληλότητάς του.
Στη συνεργατική σχεδίαση ο χρήστης κρατάει αυτόν τον κεντρικό ρόλο
και επιπλέον αναλαμβάνει έναν ρόλο δίπλα στους σχεδιαστές του συστήματος,
το οποίο, πιθανώς, να χρησιμοποιήσει στο μέλλον είτε ιδιωτικά είτε στην εργασία του.
To πρόγραμμα Apple Hypercard ήταν από τα πρώτα εμπορικά λογισμικά ευρείας χρήσης
που έδωσαν στους τελικούς χρήστες πολλές δυνατότητες αλλαγής της συμπεριφοράς του,
μια πρακτική που συνεχίστηκε με τη δυνατότητα αυτοματοποίησης συχνών ενεργειών
σε επίπεδο λειτουργικού συστήματος (π.χ. Apple Scripts) ή εφαρμογών γραφείου
(π.χ. Microsoft Office Macros). Σταδιακά, η ενίσχυση του ρόλου του χρήστη
ως ισότιμου σχεδιαστή και κατασκευαστή του προγραμματισμού της διάδρασης
καλύπτει όχι μόνο το λογισμικό αλλά και το υλικό του υπολογιστή,
αφού με τη διάχυση των οικονομικών και ευέλικτων μίκρο-υπολογιστών
(π.χ. Arduino, RaspberryPi κτλ.) οι χρήστες μπορούν να κατασκευάσουν αυτό που θέλουν.
Με αυτόν τον τρόπο, στα αρχικά κινήματα ανεξάρτητων κατασκευαστών βιντεοπαιχνιδιών,
έρχονται να προστεθούν τα ομότιμα εργαστήρια κατασκευής νέων τεχνολογιών διάδρασης,
τα οποία έγιναν γνωστά με ονόματα όπως makerlab και hackerspace.
^[@fig:xerox-colab]
^[@fig:makerspace]
Η ιδιοκτησία ενός συστήματος διάδρασης είναι ένα πολύπλοκο φαινόμενο,
γιατί ένα σύστημα διάδρασης είναι, συνήθως, μια σύνθεση από υλικό και λογισμικό
η οποία απευθύνεται σε έναν άνθρωπο, στον χρήστη του. Από τη μια πλευρά,
το υλικό και το λογισμικό καλύπτονται από διαφορετική νομοθεσία για την ιδιοκτησία,
με το υλικό να καλύπτεται από δίπλωμα ευρεσιτεχνίας (πατέντα),
ενώ το λογισμικό να θεωρείται κείμενο και να καλύπτεται από την πνευματική ιδιοκτησία.
Από την άλλη πλευρά, η ανθρωποκεντρική διαδικασία ανάπτυξης ενός συστήματος διάδρασης
άπτεται της νομοθεσίας για την εργονομία, η οποία αφορά κυρίως τις πατέντες. Οι παραδοσιακές επιχειρήσεις
στον χώρο του λογισμικού είναι υπερπροστατευτικές με την πνευματική ιδιοκτησία τους
και περιχαρακώνουν την περιοχή που τους ανήκει. Αντιθέτως, οι επιχειρήσεις
που βασίζονται στις τεχνολογίες του υπολογισμού και του δικτύου προσπαθούν
να είναι όσο γίνεται περισσότερο ανοικτού κώδικα
και ταυτόχρονα να δημιουργούν συνέργειες με άλλες επιχειρήσεις.
^[@fig:github-contributions]
^[@fig:github-profile]
![](github-contributions.md){.figure}
![](github-profile.md){.figure}
Στην πράξη, το νομικό πλαίσιο είναι τόσο ασαφές και πολύπλοκο
εξαιτίας της φύσης των συστημάτων διάδρασης, που οι εταιρείες οχυρώνονται
με όσες περισσότερες πατέντες μπορούν να αγοράσουν ή να κατοχυρώσουν,
κάνουν εκατέρωθεν μηνύσεις και, τελικά, συμβιβάζονται εξωδικαστικά.
Για παράδειγμα, εταιρείες όπως η Microsoft ή η Apple,
οι οποίες αναπτύχθηκαν πριν από την εξάπλωση της δικτυακής κουλτούρας,
βασίζουν τη δραστηριότητά τους σε σχετικά κλειστά συστήματα,
τα οποία προστατεύουν με πολλούς τρόπους. Ένας τρόπος
με τον οποίο προσπάθησαν οι εταιρείες του χώρου να προστατέψουν το λογισμικό τους
και ειδικά το τμήμα της διεπαφής είναι οι πατέντες. Η Apple, στα τέλη της δεκαετίας του 1980,
είχε κάνει μήνυση στη Microsoft για την ομοιότητα που παρουσίαζε
η διεπαφή των πρώτων εκδόσεων των Windows με το αντίστοιχο λειτουργικό σύστημα του Macintosh.
Μία δεκαετία αργότερα, η Amazon προσπάθησε να κερδίσει μία πατέντα για τη δυνατότητα
που έδινε στους αγοραστές να ψωνίζουν με ένα μόνο κλικ του ποντικιού
ένα προϊόν από το δικτυακό μαγαζί της.
Πολλοί επικριτές τους έχουν παρομοιάσει τις παραπάνω πατέντες
με την προσπάθεια να κερδίσει μια εταιρεία την πατέντα για ένα εργαλείο όπως το σφυρί:
δεν υπάρχουν πολλοί τρόποι με τους οποίους να μπορεί ο άνθρωπος να κρατήσει και να χρησιμοποιήσει ένα σφυρί
και αν κάποιος κατοχυρώσει αυτήν την πατέντα, αποκτά ένα ανταγωνιστικό πλεονέκτημα,
το οποίο τελικά δεν θα βοηθήσει την κοινωνία συνολικά. Ενώ, λοιπόν, είναι αποδεκτό
ότι η αποτελεσματική προστασία της πνευματικής ιδιοκτησίας είναι ένα σημαντικό κίνητρο για τους δημιουργούς,
ταυτόχρονα, έχει γίνει κατανοητό ότι υπάρχει μια πολύ λεπτή διαχωριστική γραμμή
ανάμεσα στην καινοτομία που πρέπει να προστατευτεί και στο προφανές
που πρέπει να είναι διαθέσιμο σε όλους. Δυστυχώς,
αυτή η λεπτή διαχωριστική γραμμή δεν είναι ευδιάκριτη,
ενώ, με τη συνεχή εξέλιξη της τεχνολογίας και των ανθρώπινων αναγκών, είναι μετακινούμενη.
Οι οργανισμοί και οι εταιρείες της οικονομίας του δικτύου εντοπίζουν και ορίζουν
την ταυτότητα και τον σκοπό τους όχι με βάση μια αγορά,
αλλά με βάση τους συνδέσμους συνεργασίας που έχουν με όλους τους παίκτες σε μια αγορά.
Για παράδειγμα, πάρα πολλά από τα δεδομένα της Google και του Twitter είναι ελεύθερα διαθέσιμα,
επειδή, η αύξηση της χρήσης τους κάνει τις ίδιες τις εταιρείες πιο σημαντικές,
αν και έτσι δίνουν πρόσβαση σε αυτά και στους ανταγωνιστές τους.
Με άλλα λόγια, αυξάνει έμμεσα την αγορά τους. Συνοπτικά, η πρώτη προσέγγιση
βλέπει την αγορά σαν μια πίτα σταθερού μεγέθους, από την οποία προσπαθεί να πάρει
το καλύτερο ή το μεγαλύτερο κομμάτι. Η δεύτερη προσέγγιση φαντάζεται μια πίτα που μεγαλώνει συνέχεια.
Την ενδιαφέρει να κρατήσει το κομμάτι που έχει, ενώ δεν την πειράζει και να χάσει κάτι από αυτό,
αρκεί η συνολική πίτα-αγορά να μεγαλώνει και το δικό της κομμάτι να βρίσκεται σε ανάπτυξη.
Αυτή η μικρή φαινομενικά διαφορά αντιμετώπισης της αγοράς λογισμικού
έχει πολύ μεγάλες συνέπειες στην επιχειρηματική πρακτική
και το ακριβές μείγμα της μπορεί να υλοποιηθεί με βάση τον τρόπο
με τον οποίο ορίζει μια εταιρεία τη διεπαφή του προγραμματιστή.
![](extras-ch04.txt){.include}