Μακάρι να ήταν τόσο εύκολο να γράψεις μια εφαρμογή. Να πάρεις ένα API, να γράψεις λίγο κώδικα ακόμα και να τελειώνεις. Είτε μιλάμε για Java, είτε για C# είτε για C++ (με τις κατάλληλες βιβλιοθήκες) οι εφαρμογές απαιτούν πολύ περισσότερα από την απλή επανάληψη κάποιου standard κώδικα. Ούτε η χρήση patterns σε σώζει. Ναι, κάποια pattern λύνουν ένα πρόβλημα, αλλά πως τα συνδυάζεις? Ποιό απ' όλα επιλέγεις? Που θα βάλεις το domain logic?
Και οι εφαρμογές που ζητούνται σήμερα είναι πολύ πιο περίπλοκες απ' ότι στο παρελθόν. Μπορεί με το JSF και το CAB να υλοποιείς το MVC για το presentation, αλλά κανείς δεν πολυνοιάζεται πλέον γι αυτό. Τώρα θέλουν πολλές, πολλές φόρμες για πολύ, πολύ business logic. Και φυσικά να είναι ωραίες. Κάποτε ένα "Content Management System" οι ελληνικές εταιρείες το χρέωναν 30 μύρια. Τώρα, ένα από τα τσάμπα είναι 30 μύρια φορές καλύτερο.
Μήπως στο server? Κάποτε έστελνες μερικές εγγραφές στη βάση και ήσουν εντάξει. Τώρα πρέπει να στέλνεις εκατοντάδες ταυτόχρονα, με ασφάλεια, σε transactions και δεν συμμαζεύεται. Οπότε το θέλεις το JBoss και το COM+, γιατί το RMI και το Remoting δεν βγαίνουν πέρα. Θα γράψεις το λεγόμενο boilerplate κώδικα, μετά όμως πρέπει να γράψεις και το δικό σου, app-specific κώδικα. Και εκεί αρχίζουν τα δύσκολααααα.
Εν κατακλείδι. Είναι πολύ εύκολο να αποδείξεις ότι κάποιος αντέγραψε. Μόνο που δεν στηρίζεται στην ομοιότητα των string των προγραμμάτων. Από τη στιγμή που κάποια γνώση είναι κοινό κτήμα, όσοι και να τη χρησιμοποιήσουν, δεν υπάρχει πρόβλημα. Η χρήση κάποιου boilerplate κώδικα δεν δημιουργεί ούτε δικαιώματα ούτε υποχρεώσεις. Είναι ο app-specific κώδικας ο οποίος αποκαλύπτει τη "λαδιά". Αυτό όμως χρειάζεται εξέταση από κάποιον που μπορεί να ξεχωρίσει τα δύο.
Ομοιότητες ... ααααχ ... μπορείς να ακούς άτομα να κουβεντιάζουν μαζί, να λένε ότι χρησιμοποιούν τα ίδια APIα, τα ίδια patterns και μετά να βλέπεις τον κώδικα και να μην υπάρχει καμμία σχέση.
Υ.Γ. Θυμήθηκα τώρα κάτι άλλο. Το βιβλίο του Διομήδη Σπινέλλη, το "Code Reading", όπου λέει ότι πρέπει να χρησιμοποιούμε όμοια block κώδικα για όμοιες δουλειές, για να μπορεί όποιος θέλει να τα διαβάσει εύκολα. Π.χ να χρησιμοποιούμε ένα στάνταρ μπλοκ για το parsing του command line. Όχι πολύ σχετικό με την κουβέντα, αλλά καλή ιδέα
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos