forked from pibook/text
-
Notifications
You must be signed in to change notification settings - Fork 4
/
ch04.txt
202 lines (119 loc) · 61.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
# Τεχνικές
![](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 είναι τουλάχιστον "σπαρτιάτικη", πράγμα που έχει γίνει για να διευκολύνει τον νέο προγραμματιστή. Ίσως περισσότερο αντισυμβατική και από την εμφάνιση είναι η ορολογία σε αυτό το περιβάλλον, αφού σκόπιμα αναφέρεται στον πηγαίο κώδικα ως "διάγραμμα" (sketch). Η πρόθεση των σχεδιαστών είναι να παροτρύνουν τον προγραμματιστή σε αυτό το περιβάλλον να πειραματιστεί και να βελτιώσει την ιδέα του κάνοντας δοκιμή και λάθος. Σε αντίθεση λοιπόν με την παραδοσιακή συμβουλή της αρχικής αναλυτικής σχεδίασης ενός προγράμματος πριν την υλοποίησή του, το περιβάλλον αυτό προτρέπει στον αυτοσχεδιασμό.
Τα εργαλεία που διευκολύνουν την ανάπτυξη υλικού και λογισμικού διάδρασης έχουν αποδειχθεί ιδιαίτερα αποτελεσματικά σε πολλές περιπτώσεις, αρχίζοντας από το γραφικό περιβάλλον του επιτραπέζιου υπολογιστή. Ο κάθε κατασκευαστής λειτουργικού συστήματος, σε διαφορετικό βαθμό, παρέχει ένα σύνολο από μοτίβα τα οποία επιτρέπουν μια ομοιόμορφη εμφάνιση και κυρίως μια συνεπή συμπεριφορά ανάμεσα στις πολλές διαφορετικές εφαρμογές χρήστη. Ήταν η Apple που πρώτη έδωσε στους κατασκευαστές εφαρμογών ένα σετ από οδηγίες και μοτίβα σωστού σχεδιασμού της διάδρασης με τον υπολογιστή Macintosh, ενώ ταυτόχρονα τα αντίστοιχα εργαλεία ανάπτυξης του λογισμικού σέβονταν αυτές τις οδηγίες. Για παράδειγμα, η θέση, η εμφάνιση και η λειτουργία των κουμπιών που καθορίζουν το μέγεθος του παραθύρου έχουν προκαθορισμένες ιδιότητες ώστε να μοιάζουν ανάμεσα στις διαφορετικές εφαρμογές του χρήστη, δημιουργώντας μια αίσθηση οικειότητας. Ο κατασκευαστής εφαρμογών χρήστη μπορεί πάντα να αγνοήσει τις οδηγίες και τα έτοιμα μοτίβα, αν επιθυμεί να φτιάξει μια εφαρμογή που έχει λόγους να διαφέρει.
Πέρα από την Apple, και οι άλλοι κατασκευαστές λειτουργικών συστημάτων με γραφικό περιβάλλον, σε μικρότερο (π.χ., Linux) ή μεγαλύτερο βαθμό (π.χ., Windows), παρέχουν πλέον τα αντίστοιχα σετ οδηγιών, καθώς και "προκάτ" δομικά στοιχεία κατασκευής της διάδρασης.
^[fig:visual-basic-form-designer]
Υπάρχουν δύο κύριοι λόγοι για τους οποίους ένας κατασκευαστής της διάδρασης θα ήθελε να κινηθεί έξω από την ασφάλεια που του προσφέρει το στενό και προκαθορισμένο σύνολο οδηγιών που του παρέχει ο κατασκευαστής της αρχικής πλατφόρμας. Ο πρώτος λόγος είναι να θέλει να φτιάξει μια εφαρμογή που πρέπει να δείχνει και να συμπεριφέρεται διαφορετικά - επειδή αυτό εξυπηρετεί τις ανάγκες του. Χαρακτηριστικά παραδείγματα είναι τα skinable mp3 players καθώς και οι εφαρμογές με φίλτρα ψηφιακής φωτογραφίας (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}
Εξίσου πολύπλοκο τεχνολογικό πλαίσιο μπορεί να έχουμε και για την ανάπτυξη μιας εφαρμογής επιτραπέζιου υπολογιστή όταν υπάρχει η απαίτηση η είσοδος να γίνεται από συσκευή χειρονομίας και η έξοδος να γίνεται σε περιβάλλον εικονικής πραγματικότητας. Γίνεται, λοιπόν, κατανοητό ότι σε ένα τόσο διευρυμένο τεχνολογικό πλαίσιο, αναφορικά με τις συσκευές εισόδου και εξόδου με τον χρήστη, ο προγραμματισμός της διάδρασης έχει περισσότερο να κάνει με τη δοκιμή και την επιλογή των κατάλληλων για την περίσταση εργαλείων (π.χ., βιβλιοθήκη προγραμματισμού), παρά με τις λεπτομέρειες της υλοποίησης, οι οποίες μπορεί να είναι τόσο διαφορετικές όσο και οι διαφορετικές πλατφόρμες ανάπτυξης (π.χ., επιτραπέζιος ΗΥ, απομακρυσμένος εξυπηρετητής) και εκτέλεσης (π.χ., έξυπνο κινητό, έξυπνο ρολόι). Φυσικά, υπάρχουν κάποιες σταθερές αξίες που ισχύουν ανεξάρτητα από το τεχνολογικό πλαίσιο και τις λεπτομέρειες της κάθε βιβλιοθήκης προγραμματισμού, όπως είναι ο συνεχής έλεγχος που είδαμε στην προηγούμενη ενότητα, καθώς και ο έλεγχος σε ένα περιβάλλον που θα μοιάζει με αυτό της τελικής πλατφόρμας εκτέλεσης, τον οποίο θα δούμε στην επόμενη ενότητα.
Όταν η τελική εφαρμογή έχει ως πλατφόρμα εκτέλεσης την ίδια την πλατφόρμα ανάπτυξης (π.χ., ανάπτυξη εφαρμογής για την επιφάνεια εργασίας σε επιτραπέζιο υπολογιστή), τότε η μετατροπή του πηγαίου κώδικα σε εκτελέσιμο κώδικα μπορεί να δοκιμαστεί άμεσα από τον προγραμματιστή πάνω στον ίδιο υπολογιστή. Στην περίπτωση όμως που η τελική πλατφόρμα εκτέλεσης είναι διαφορετική από την πλατφόρμα ανάπτυξης μιας εφαρμογής, τότε η δουλειά του προγραμματιστή διευκολύνεται από έναν προσομοιωτή. Στην περίπτωση
που η εφαρμογή δεν έχει διεπαφή με τον χρήστη, τότε ο προσομοιωτής είναι απλά αναγκαίος για τη δοκιμή και αποσφαλμάτωση του πηγαίου κώδικα. Όμως, στην πιο ενδιαφέρουσα περίπτωση που η τελική εφαρμογή περιλαμβάνει και την ανάγκη για διάδραση με τον χρήστη, τότε έχουμε την απαίτηση ο προσομοιωτής να είναι κάτι παραπάνω από ένα μαύρο κουτί. Αν και στην απλή εκτέλεση κώδικα υψηλού επιπέδου (π.χ., Java) για διαφορετική τελική συσκευή είναι δόκιμο να χρησιμοποιήσουμε την έννοια του εξομοιωτή
(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. Το χάσμα ανάμεσα στην γλώσσα προγραμματισμού και στην διάδραση γίνεται ακόμη μεγαλύτερο κατά την μετάβαση στις γραφικές διεπαφές επιφάνειας εργασίας, όπου η διάδραση βασίζεται στον απευθείας χειρισμό αντικειμένων στην οθόνη. Για να γεφυρωθεί αυτό το χάσμα προγραμματισμού έχει αναπτυχθεί η τεχνική του προγραμματισμού με παραδείγματα, όπου ο προγραμματιστής αντί να περιγράφει στον υπολογιστή πως θα εκτελέσει μια λειτουργία, χρησιμοποιεί την διάδραση με απευθείας χειρισμό για να δείξει το αποτέλεσμα που θέλει. Η τεχνική του προγραμματισμού με παραδείγματα μπορεί θεωρητικά να δώσει τις δυνατότητες του προγραμματισμού σε χρήστες με μικρότερες δεξιότητες, αλλά στην πράξη δεν έχει αποδειχτεί χρήσιμη ούτε εκπαιδευτικά, ούτε στην αποτελεσματικότητα των νέων δημιουργιών, αφήνοντας έτσι όλο το βάρος στην ανάπτυξη δεξιοτήτων με τις γλώσσες προγραμματισμού ή ακόμη καλύτερα στην ανάπτυξη νέων γλωσσών προγραμματισμού.
Τελευταία σε αυτήν την ενότητα αφήσαμε τη γλώσσα προγραμματισμού, επειδή, τουλάχιστον στην περίπτωση του προγραμματισμού της διάδρασης, έχει τη λιγότερη σημασία σε σχέση με τις παραμέτρους που εξετάσαμε παραπάνω. Τα περισσότερα βιβλία για τον προγραμματισμό ασχολούνται αποκλειστικά με μία γλώσσα προγραμματισμού. Αυτό είναι σωστό μόνο στην περίπτωση που κάποιος θέλει να μάθει μια γλώσσα προγραμματισμού, και λάθος όταν κάποιος θέλει να μάθει τη λογική πίσω από τον προγραμματισμό υπολογιστών -πράγμα πιο σημαντικό από τις συντακτικές λεπτομέρειες της κάθε γλώσσας. Η γλώσσα προγραμματισμού είναι σίγουρα μια σπουδαία παράμετρος, τόσο στην εκμάθηση προγραμματισμού όσο και στον προγραμματισμό της διάδρασης, αλλά δεν είναι η μόνη παράμετρος, ούτε η σημαντικότερη. Ειδικά για τη συγγραφή κώδικα κατά τον προγραμματισμό της διάδρασης, ισχύει ότι η κατάλληλη γλώσσα είναι εκείνη που διευκολύνει τη γρήγορη δημιουργία και επαναληπτική αλλαγή για πολλά εναλλακτικά πρωτότυπα υψηλής πιστότητας.
Για την κατασκευή της διάδρασης, αυτό που έχει μεγαλύτερη σημασία από την γλώσσα προγραμματισμού,
είναι ο μεταφραστής αυτής της γλώσσας στο τελικό εκτελέσιμο πρόγραμμα για κάποιον υπολογιστή.
Ο προγραμματιστής που έχει την κατανόηση και κυρίως τον έλεγχο του μεταφραστή
είναι ελεύθερος τόσο από την ίδια την γλώσσα προγραμματισμού όσο και από το υλικό εκτέλεσης.
Ιδανικά, ο προγραμματιστής που έχει και την κατανόηση του πεδίου εφαρμογής,
μπορεί να δημιουργήσει μια γλώσσα για αυτό ακριβώς το πεδίο,
έτσι ώστε το πρόγραμμα ως κείμενο να είναι πολύ κοντά στις ιδιότητες αυτού του πεδίου.
Για την υλοποίηση του μεταφραστή μιας νέας γλώσσας μπορεί να χρησιμοποιηθεί μια ήδη υπάρχουσα γλώσσα
και η ανάπτυξη να γίνει σε διαφορετικό υπολογιστή από αυτόν της τελικής εκτέλεσης.
Εναλλακτικά, ένας μεταφραστής μπορεί να γραφτεί στην ίδια την γλώσσα που μεταφράζει.
Σε αυτήν την περίπτωση, η υλοποίηση μπορεί να ξεκινήσει από ένα υποσύνολο της γλώσσας,
η οποία υλοποιείται απευθείας στο χαρτί σε συμβολική γλώσσα μηχανής.
Για την την καλύτερη φορητότητα της γλώσσας,
ο προγραμματιστής μπορεί να ορίσει μια ενδιάμεση εικονική μηχανή,
οπότε η γλώσσα μπορεί να τρέξει και σε διαφορετικό υλικό από άλλους ή μελλοντικά.
Τα αυτόνομα συστήματα είναι δυσκολότερο να σχεδιαστούν αρχικά,
αλλά είναι περισσότερο προσαρμόσιμα σε διαφορετικές ανάγκες μέσω των επεκτάσεων.
## Συνεργατική κατασκευή και ιδιοκτησία
Σε αυτήν την ενότητα
περιγράφουμε τις ιδιότητες που παρουσιάζει μια γενιά οργανισμών
που προσπαθούν να μεγιστοποιήσουν τους δεσμούς τους με άλλους
συγγενείς οργανισμούς.
Το όραμά τους στηρίζεται σε μια διαφορετική φιλοσοφία
για την ιδιοκτησία και την αξία,
ενώ ο ακρογωνιαίος λίθος για αυτό το οικοδόμημα
είναι η συνεργασία των προγραμματιστών μεταξύ τους, καθώς και
ο προγραμματισμός της διεπαφής του προγραμματιστή,
ο οποίος αποτελεί ειδική περίπτωση του προγραμματισμού της διάδρασης
με αποδέκτη έναν χρήστη -τον προγραμματιστή.
Σε πολλά από τα δημοφιλή βιβλία προγραμματισμού και σχεδίασης λογισμικού υπάρχει η εξειδανικευμένη εικόνα ότι η σχεδίαση ξεκινάει από μια λευκή σελίδα. Στην πράξη αυτό είναι πολύ σπάνιο, μάλιστα στις περισσότερες περιπτώσεις όπου η σχεδίαση ενός προγράμματος ξεκινάει από μια λευκή σελίδα, συνήθως οδηγείται προς μια σχετικά ελλιπή εκδοχή ενός προγράμματος που ήδη υπάρχει κάπου αλλού σε πολύ πιο βελτιωμένη μορφή. Φυσικά υπάρχουν και οι εξαιρέσεις, όπου θα πρέπει να δημιουργηθεί μια πραγματικά πρωτότυπη εφαρμογή στον υπολογιστή, αλλά στις περισσότερες περιπτώσεις αυτό που βλέπουμε είναι παραλλαγές, ή ακόμη καλύτερα, δημιουργικές συνθέσεις πάνω σε βασικά αρχέτυπα που ήδη υπάρχουν και τα οποία αναφέρονται σε κάποιες ανθρώπινες ανάγκες και συνήθειες.
Στο πλαίσιο του διαμοιρασμού εργαλείων και τεχνικών, έχει δημιουργηθεί μια ευρεία κίνηση από χομπίστες και ερευνητές οι οποίοι συνεργάζονται, είτε σε ειδικές συναντήσεις είτε με τη βοήθεια του δικτύου για τη σχεδίαση και κατασκευή νέων εργαλείων που διευκολύνουν τη δουλειά τους ή απλώς για διασκέδαση, χωρίς να έχουν εξωτερικά κίνητρα. Η κίνηση του Do-It-Yourself σίγουρα δεν είναι νέα, και δεν αφορά μόνο το υλικό και λογισμικό, αλλά πλέον αναπτύσσεται και σε αυτόν τον τομέα πολύ γρήγορα, και προσφέρει ιδέες που δεν θα βρούμε στο εμπόριο.
![](xerox-colab.md){.figure}
![](makerspace.md){.figure}
Η διαδικασία της συνεργατικής σχεδίασης έρχεται να ενισχύσει τον ήδη σημαντικό ρόλο του χρήστη στον προγραμματισμό της διάδρασης. Ο ρόλος του τελικού χρήστη ενός υπολογιστικού συστήματος είναι κεντρικός στη διαδικασία της ανθρωποκεντρικής σχεδίασης, αφού με βάση τον χρήστη καθορίζονται οι προδιαγραφές του συστήματος και γίνονται οι ενδιάμεσες αξιολογήσεις της καταλληλότητάς του. Στη συνεργατική σχεδίαση ο χρήστης κρατάει αυτόν τον κεντρικό ρόλο και επιπλέον αναλαμβάνει έναν ρόλο δίπλα στους
σχεδιαστές του συστήματος που πιθανώς να χρησιμοποιήσει στο μέλλον είτε προσωπικά είτε στην εργασία του. To πρόγραμμα Apple Hypercard ήταν από τα πρώτα εμπορικά λογισμικά ευρείας χρήσης που έδωσαν στους τελικούς χρήστες πολλές δυνατότητες αλλαγής της συμπεριφοράς του, μια πρακτική που συνεχίστηκε με τη δυνατότητα αυτοματοποίησης συχνών ενεργειών σε επίπεδο λειτουργικού συστήματος (π.χ., Apple Scripts) ή εφαρμογών γραφείου (π.χ., Microsoft Office Macros). Σταδιακά, η ενίσχυση του ρόλου του χρήστη
ως ισότιμου σχεδιαστή και κατασκευαστή του προγραμματισμού της διάδρασης καλύπτει όχι μόνο το λογισμικό αλλά και το υλικό του υπολογιστή, αφού με τη διάχυση των οικονομικών και ευέλικτων μικρο-υπολογιστών (π.χ., Arduino, RaspberryPi, κτλ.) οι χρήστες μπορούν να κατασκευάσουν αυτό που θέλουν. Με αυτόν τον τρόπο, στα αρχικά κινήματα ανεξάρτητων κατασκευαστών βιντεοπαιχνιδιών, έρχονται να προστεθούν τα ομότιμα εργαστήρια κατασκευής νέων τεχνολογιών διάδρασης, τα οποία έγιναν γνωστά με ονόματα όπως
makerlab, hackerspace.
^[fig:xerox-colab]
^[fig:makerspace]
Η ιδιοκτησία ενός συστήματος διάδρασης είναι ένα πολύπλοκο φαινόμενο, γιατί ένα σύστημα διάδρασης είναι συνήθως μια σύνθεση από υλικό και λογισμικό που απευθύνεται σε έναν άνθρωπο, στον χρήστη του. Από τη μια πλευρά, το υλικό και το λογισμικό καλύπτονται από διαφορετική νομοθεσία για την ιδιοκτησία, με το υλικό να καλύπτεται από δίπλωμα ευρεσιτεχνίας (πατέντα, αγγλ. patent) ενώ το λογισμικό να θεωρείται κείμενο και να καλύπτεται από την πνευματική ιδιοκτησία (copyright). Από την άλλη πλευρά, η
ανθρωποκεντρική διαδικασία ανάπτυξης ενός συστήματος διάδρασης άπτεται της νομοθεσίας για την εργονομία, που αφορά κυρίως τις πατέντες. Οι παραδοσιακές επιχειρήσεις στον χώρο του λογισμικού είναι υπερπροστατευτικές με την πνευματική ιδιοκτησία τους και περιχαρακώνουν την περιοχή που τους ανήκει. Αντιθέτως, οι επιχειρήσεις που βασίζονται στις τεχνολογίες του υπολογισμού και του δικτύου προσπαθούν να είναι όσο γίνεται περισσότερο ανοικτού κώδικα και ταυτόχρονα να δημιουργούν συνέργειες με άλλες
επιχειρήσεις.
^[fig:github-contributions]
^[fig:github-profile]
![](github-contributions.md){.figure}
![](github-profile.md){.figure}
Στην πράξη, το νομικό πλαίσιο είναι τόσο ασαφές και πολύπλοκο εξαιτίας της φύσης των συστημάτων διάδρασης, που οι εταιρείες οχυρώνονται με όσες περισσότερες πατέντες μπορούν να αγοράσουν ή να κατοχυρώσουν· κάνουν εκατέρωθεν μηνύσεις, και τελικά συμβιβάζονται εξωδικαστικά. Για παράδειγμα, εταιρείες όπως η Microsoft ή η Apple, οι οποίες αναπτύχθηκαν πολύ πριν τη διάχυση της δικτυακής κουλτούρας, βασίζουν τη δραστηριότητά τους σε σχετικά κλειστά συστήματα, τα οποία προστατεύουν με πολλούς τρόπους. Ένας τρόπος με τον οποίο προσπάθησαν οι εταιρείες του χώρου να προστατέψουν το λογισμικό τους -ειδικά το τμήμα της διεπαφής- είναι οι πατέντες. Η Apple στα τέλη της δεκαετίας του 1980 είχε κάνει μήνυση στη Microsoft για την ομοιότητα που παρουσίαζε η διεπαφή των πρώτων εκδόσεων των Windows με το αντίστοιχο λειτουργικό σύστημα του Macintosh. Μια δεκαετία αργότερα, η Amazon προσπάθησε να κερδίσει πατέντα για τη δυνατότητα που έδινε στους αγοραστές να ψωνίζουν με ένα μόνο κλικ (*one-click buying*) του ποντικιού ένα προϊόν από το δικτυακό μαγαζί της.
Πολλοί επικριτές τους έχουν παρομοιάσει τις παραπάνω πατέντες με την προσπάθεια να κερδίσει μια εταιρεία πατέντα για ένα εργαλείο όπως το σφυρί: δεν υπάρχουν πολλοί τρόποι που να μπορεί ο άνθρωπος να κρατήσει και να χρησιμοποιήσει ένα σφυρί, και αν κάποιος κατοχυρώσει αυτήν την πατέντα αποκτά ένα ανταγωνιστικό πλεονέκτημα που τελικά δεν θα βοηθήσει την κοινωνία συνολικά. Ενώ, λοιπόν, είναι αποδεκτό ότι η αποτελεσματική προστασία της πνευματικής ιδιοκτησίας είναι σημαντικό κίνητρο για τους δημιουργούς, ταυτόχρονα έχει γίνει κατανοητό ότι υπάρχει μια πολύ λεπτή διαχωριστική γραμμή ανάμεσα στην καινοτομία που πρέπει να προστατευτεί και στο προφανές που πρέπει να είναι διαθέσιμο σε όλους. Δυστυχώς, αυτή η λεπτή διαχωριστική γραμμή δεν είναι ευδιάκριτη, ενώ με τη συνεχή εξέλιξη της τεχνολογίας και των ανθρώπινων αναγκών είναι μετακινούμενη.
Οι οργανισμοί και οι εταιρείες της οικονομίας του δικτύου εντοπίζουν και ορίζουν την ταυτότητα και τον σκοπό τους όχι με βάση μια αγορά, αλλά με βάση τους συνδέσμους συνεργασίας που έχουν με όλους τους παίκτες σε μια αγορά. Για παράδειγμα, πάρα πολλά από τα δεδομένα του Google και του Twitter είναι ελεύθερα διαθέσιμα, επειδή -αν και έτσι δίνουν πρόσβαση σε αυτά και στους ανταγωνιστές τους- η αύξηση της χρήσης τους κάνει τις ίδιες τις εταιρείες πιο σημαντικές. Με άλλα λόγια αυξάνει έμμεσα την αγορά τους. Συνοπτικά, η πρώτη προσέγγιση βλέπει την αγορά σαν μια πίτα σταθερού μεγέθους από την οποία προσπαθεί να πάρει το καλύτερο ή μεγαλύτερο κομμάτι. Η δεύτερη προσέγγιση φαντάζεται μια πίτα που μεγαλώνει συνέχεια. Την ενδιαφέρει να κρατήσει το κομμάτι που έχει, ενώ δεν την πειράζει και να χάσει κάτι από αυτό, αρκεί η συνολική πίτα-αγορά να μεγαλώνει και το δικό της κομμάτι να βρίσκεται σε ανάπτυξη. Αυτή η μικρή φαινομενικά διαφορά αντιμετώπισης της αγοράς λογισμικού έχει πολύ μεγάλες συνέπειες στην επιχειρηματική πρακτική και το ακριβές μείγμα της μπορεί να υλοποιηθεί από τον τρόπο που ορίζει μια εταιρεία τη διεπαφή του προγραμματιστή.
![](extras-ch04.txt){.include}