Σύντομη περιγραφή ΜαθήματοςΤο μάθημα συνίσταται στην ανάπτυξη λογισμικού για την επίλυση ενός σημαντικού προβλήματος της Πληροφορικής, τη χρήση του λογισμικού σε μια πρακτική εφαρμογή και την πειραματική αποτίμηση του λογισμικού που αναπτύχθηκε. Η προσέγγιση στοχεύει στην εξοικείωση με τον προγραμματισμό μεγάλης κλίμακας, συχνά με χρήση ανοικτών βιβλιοθηκών λογισμικού, μέσω συνεργασίας σε ομάδες, καθώς και στην ανάπτυξη δεξιοτήτων για την υλοποίηση και πρακτική χρήση γνωστών, αποδοτικών αλγορίθμων. Χρησιμοποιείται η γλώσσα C/C++ σε σύστημα Linux. Τα θέματα που καλύπτονται περιλαμβάνουν την υλοποίηση αποδοτικών αλγορίθμων, την πειραματική αξιολόγηση τους, τις αρχές οργάνωσης και σχεδίασης λογισμικού, τη χρήση ανοιχτών βιβλιοθηκών και εργαλειών λογισμικού, όπως τις βιβλιοθηκές Qt, Boost, Gnuplot, LAPACK, Eigen, πλατφόρμες Δοκιμών Μονάδων Λογισμικού (Unit testing), συστήματα ελέγχου εκδόσεων και συνεργατικής ανάπτυξης (git, SVN) καθώς και τη συνεργατική υλοποίηση μεγάλης κλίμακας.
Δίδονται τρεις εργασίες σχεδίασης και ανάπτυξης λογισμικού για την επίλυση δύσκολων αλγοριθμικών προβλημάτων με έμφαση στις γνωστικές περιοχές της επιστήμης δεδομένων και της υπολογιστικής γεωμετρίας.