5' reading
Μία εμπορική εφαρμογή αποτελείται από τρία μέρη: 1) τις οθόνες που βλέπει ο χρήστης ή αλλιώς Front-end, 2) το μέρος του λογισμικού που υλοποιεί τη λογική της εφαρμογής (Middleware) και 3) την αποθήκη των δεδομένων (datasource, π.χ. Βάση Δεδομένων). Η λογική της εφαρμογής και η Βάση Δεδομένων, δηλαδή το μέρος της εφαρμογής που δεν βλέπει ο χρήστης, είναι το Back-end.
Στο παρόν ποστ θα δούμε συνοπτικά τις βασικές τεχνολογίες και εργαλεία για ανάπτυξη Full-Stack Εφαρμογών.
Τεχνολογίες Back-End
Οι τεχνολογίες που χρησιμοποιούνται στο Back-End αναφέρονται σε γλώσσες προγραμματισμού και εργαλεία, όπως Java EE, ASP.NET Core, Spring, Pyhton, PHP, JavaScript (π.χ. Node.js) κλπ, ενώ στις Βάσεις Δεδομένων οι κυριάρχες τεχνολογίες είναι οι, Oracle DB, MySQL, MS SQL Server, PostgreSQL, H2, καθώς και NoSQL Databases όπως Mongo DB, Firebase, κλπ. Επίσης, χρησιμοποιούνται εργαλεία ORM (Object-Relational Mapping) για τη σύνδεση του Back-End με σχεσιακές βάσεις δεδομένων, όπως JPA/Hibernate, EclipseLink, σε συνδυασμό με Java, Entity Framework (EF), Dapper σε συνδυασμό με ASP.NET Core, κλπ.
Επίσης στο Back-End χρησιμοποιούνται και τεχνολογίες όπως JSP/JSTL, Thymeleaf στην Java, Razor/Blazor στο .NET Core που είναι μεν τεχνολογίες που στοχεύουν στο Front-End αλλά δουλεύουν στο Back-End.
Τεχνολογίες Front-End
Στο Front-end οι τεχνολογίες και τα εργαλεία είναι κυρίως οι HTML, CSS, Vanilla JavaScript ή βιβλιοθήκες JavaScript όπως jQuery, Vue, React, Angular, κλπ. Ιδιαίτερα όταν θέλουμε να αναπτύξουμε SPAs (Single Page Applications) στο Web (όπως για παράδειγμα τα social media) ή γενικά σελίδες που επικοινωνούν με REST APIs, τότε χρησιμοποιούμε συνήθως βιβλιοθήκες της JavaScript όπως αυτές που αναφέραμε. Για Front-End σε κινητά χρησιμοποιούμε συνήθως Java/Kotlin για Android, Objective-C/Swift για Apple iOS ή Google Flutter/Dart, React Native, Ionic για Android και iOS.
Εργαλεία Προγραμματισμού
Σε αυτά να προσθέσουμε και εργαλεία για Dependency Management όπως Maven, Gradle, NuGet, NPM, Yarn, εργαλεία για Testing όπως JUnit, Selenium, κλπ, Virtual Machines και Containers όπως Docker/Kubernetes, περιβάλλοντα cloud όπως Azure, AWS, Google Cloud, περιβάλλοντα προγραμματισμού, όπως IntelliJ, Eclipse, Visual Studio, Visual Studio Code, κλπ. καθώς και άλλα εργαλεία όπως Git/GitHub, Web Servers, κλπ.
Τεχνολογία Λογισμικού
Πρόβλημα στην ανάπτυξη Full-Stack εφαρμογών δεν είναι μόνο η επιλογή της κατάλληλης τεχνολογίας αλλά επίσης η επιλογή της αρχιτεκτονικής διάρθρωσης του λογισμικού. Μερικοί από τους βασικούς στόχους στην ανάπτυξη ποιοτικού λογισμικού που συνδέονται με την αρχιτεκτονική της εφαρμογής είναι το να είναι το λογισμικό επαναχρησιμοποιήσιμο (reusable), εύκολα συντηρήσιμο (maintanable), επεκτάσιμο (scalable) και να μπορεί να τεσταριστεί (testable).
Ιστορικά, η ανάπτυξη προγραμμάτων full-stack ήταν μονολιθική όπως στο Swing της Java. Στο Swing, όλα (front-end, middleware και back-end) αναπτύσονταν μέσα σε μία Java κλάση. Τέτοιες αρχιτεκτονικές χρησιμοποιούνται και σήμερα σε μικρές εφαρμογές. Αργότερα αναπτύχθηκαν και άλλα frameworks όπως JavaFX, WPF, όπου το View ήταν passive (π.χ. XML, XAML).
Σε μεγαλύτερες εφαρμογές θέλουμε να μπορούμε να τις συντηρούμε εύκολα, να τις τεστάρουμε, να τις επεκτείνουμε, να τις αναπτύσσουμε γρήγορα και παραγωγικά και να τις συντηρούμε εύκολα. Η βασική αρχιτεκτονική προσέγγιση για την ανάπτυξη μεσαίων και μεγάλων εφαρμογών είναι το MVC (Model-View- Controller) και εξακολουθητικά η SOA (Service Oriented Architecture) και πιο πρόσφατα τα Microservices. Στο ίδιο πλαίσιο χρησιμοποιούμε και Design Patterns όπως DAO (Data Access Objects) και DTOs (Data Transfer Objects).
Επίσης, σε εφαρμογές Java, όταν θέλουμε μεγάλο perfrormance (π.χ. σε σελίδες που έχουν πολύ μεγάλη κίνηση) θα μπορούσαμε, αντί για Hibernate, να χρησιμοποιήσουμε DAO/JDBC, frameworks όπως Quarkus και Load Balancing.
Αναλυτικές Δεξιότητες
Σε όλα τα παραπάνω να προσθέσουμε, όπως αναφέραμε και σε προηγούμενο άρθρο, και τις αναλυτικές δεξιότητες που πρέπει να έχουν οι σύγχρονοι προγραμματιστές, όπως επικοινωνιακές δεξιότητες, δεξιότητες συν-δημιουργίας με τους χρήστες, συνεργασίας με τα μέλη της ομάδας, καινοτομίας και επιχειρηματικότητας, UX/UI Design. Επίσης, χρειάζεται γνώση ευέλικτων μεθόδων συνεργασίας όπως Agile αλλά και process automation όπως DevOps.
Συμπερασματικά,
Η ανάπτυξη Full-Stack εφαρμογών είναι μία περίπλοκη διαδικασία που δεν μπορεί να διδαχθεί αποσπασματικά. Θα πρέπει οι εκπαιδευόμενοι να κατανοήσουν όλη την ιστορική διαδρομή, τις βασικές τεχνολογίες, τις γλώσσες προγραμματισμού, τις Βάσεις Δεδομένων, τις αρχιτεκτονικές προσεγγίσεις, τα εργαλεία, τα Design Patterns και γενικά όλες τις συνιστώσες που τις αποτελούν. Αυτός είναι και ο σκοπός του Coding Factory.
Προσπαθούμε με καινοτόμες εκπαιδευτικές προσεγγίσεις που βασίζονται σε καινοτόμες μορφές διδασκαλίας, εκπαιδευτικού υλικού, projects, βιωματική μάθηση, συμβουλευτικές υπηρεσίες από μέντορες και στελέχη της αγοράς, να μετατρέψουμε (transform) τους εκπαιδευόμενους σε επαγγελματίες προγραμματιστές σε 6 μήνες.
Happy Coding!