Ocena "trudności" aplikacji od strony backendu.

0

Siema.

Za rok kończę studia inżynierskie i w sumie pora, żebym zaczął pisać pracę. Do końca następnego tygodnia musze podać ostateczny temat pracy. Mam przygotowane kilka tematów i jeden z nich chciałbym zrealizować, jednak zanim zgłoszę ten temat chciałbym go z Wami przedyskutować, mianowicie jak trudne będzie jego zrealizowanie, biorąc pod uwagę moje umiejętności programowania i webdevu.

Chciałbym zrobić stronę internetową, która (najprościej mówiąc) będzie internetowym systemem do przeprowadzania egzaminów dla nauczycieli. Aktualnie wyobrażam sobie to tak, że na stronie będą dwa typy kont użytkowników: dla nauczyciela i dla ucznia. Nauczyciel będzie mógł w swoim koncie tworzyć egzaminy (w formie np. formularza z odpowiedziami A, B, C, D lub wpisaniem odpowiedzi), do których dostęp będzie dawać poszczególnym użytkownikom (wpisując np. unikalną nazwę użytkownika). Uczeń za pomocą konta uczniowskiego widzi na swoim koncie dostępne testy, rozwiązuje je, po czym po przesłaniu testu odpowiedzi są porównywane z poprawnymi odpowiedziami i jest wyliczany wynik, a także ocena.

Podczas rozbudowy aplikacji, w zależności od tego co będę potrafił zrobić, będą dodawane nowe funkcje, jak np. egzamin na czas, przeglądanie wyników dotychczasowych egzaminów, tworzenie grup przez nauczyciela, w których będzie mógł umieszczać wszystkich z danej klasy, ustawienie dostępności egzaminu w określonym zakresie czasowym (np. poniedziałek godzina 8:00-9:00) możliwość wysyłania wiadomości między użytkownikami (chociaż tego na tą chwilę raczej nie planuję). Oczywiście strona będzie przystosowana do wyświetlania zarówno na desktopie, jak i urządzeniach mobilnych.

Chciałbym się zapytać, czy stworzenie takiej aplikacji jest trudne?

Jeżeli chodzi o moje umiejętności, to dotychczas programowałem w zasadzie tylko w C++ i Javie. Z Javy przerobiłem książkę H. Schlidta „Java – przewodnik dla początkujących. Ogarniam w zasadzie wszystkie przedstawione tam zagadnienia OOP i zrobiłem potem kilka bardziej rozbudowanych programów, jakieś menadżery hotelarstwa, symulatory księgarni itd. Z algorytmiką też nie było u mnie większych problemów, potrafiłem tworzyć funkcje/metody, które w jakiś bardziej skomplikowany sposób przetwarzały dane albo coś robiły.

Niestety, z czasem doszedłem do wniosku, że nie chcę programować w Javie i ostatecznie stwierdziłem, że jeżeli zostanę zawodowym programistą, to raczej pójdę w webdev. Tylko problem polega na tym, że webdevu zacząłem się uczyć niedawno. Póki co jedynie dobrze ogarniam czystego html, css i framework Bootstrap. Teraz jestem w trakcie nauki JavaScript i potem chcę przejść do nauki PHP i MySQL. Niestety, z racji tego, że nic jeszcze nie programowałem w backendzie, to nie wiem, czy dałbym radę napisać powyższą apkę. Trochę się zorientowałem w temacie i rozmawiałem z kolegami z uczelni, że mógłbym wykorzystać do backendu framework Laravel – podobno z jego pomocą można dość łatwo napisać tego typu aplikacje, z kontami użytkowników.
Generalnie teraz planuję wyuczyć się jeszcze JS, potem ogarnąć czystego PHP i MySQL z poniższej książki:

https://helion.pl/ksiazki/php-i-mysql-dla-kazdego-wydanie-iii-marcin-lis,phmdk3.htm#format/e

I potem ogarnąć jakiś kurs Laravela. Nie wiem ile zajmie mi nauka tego wszystkiego, ale do końca czerwca, ewentualnie lipca powinienem się wyrobić. I zastanawiam się właśnie, czy to wystarczy, żeby zrobić taką apkę i żeby była udana na tyle, żebym mógł się obronić przynajmniej na 4? Wydaje mi się, że sama zasada działania apki, to raczej nie będzie nic trudnego, np. jeżeli chodzi o sprawdzanie testów – po prostu po zakończeniu testu, jest on wysyłany na serwer (chyba xd), gdzie jakaś funkcja sprawdza poprawne odpowiedzi i zwraca wynik, który jest następnie gdzieś zapisywany w bazie danych. Mam koncepcję jak to wszystko mniej więcej zrobić, tyle że gorzej to dla mnie wygląda bardziej od strony kont użytkowników i bazy danych, gdyż tak mówiłem, nigdy nic nie robiłem w backendzie.

Wiem, że się trochę rozpisałem, ale możecie mi coś doradzić, czy zrobienie takiej apki dla pojedynczego, początkującego webdeva będzie zbyt trudne, czy przy odrobinie samozaparcia dam radę do zrobić do końca stycznia przyszłego roku?

P.S Ktoś jeszcze mógłby zapytać: skoro programowałeś w Javie, to może w niej napisz jakąś apkę albo backend?
Sorry, ale nie i nie chcę się rozpisywać dlaczego, bo i tak Was zamęczyłem czytaniem. xD

I mam nadzieję, że dobry dział, w sumie mój problem dotyczy w większej części backendu w PHP.

0

To co opisujesz jest latwe

Niestety, z czasem doszedłem do wniosku, że nie chcę programować w Javie i ostatecznie stwierdziłem, że jeżeli zostanę zawodowym programistą, to raczej pójdę w webdev.

Ale ze jakie jest Twoje wyobrazenie javy? :P

0

Możesz to zrobić a Javie, w PHP lub wielu innych językach. Jeżeli nigdy jeszcze nie tworzyłeś żadnego tego typu serwisu to czeka Cię naprawdę dużo pracy. Oprócz prezentacji samych egzaminów i logiki z tym związanej, czeka Cię np. stworzenie całego panelu administracyjnego dla gezaminatora, jak i przystępującego do egzaminu. Myślę, że zajmie Ci to minimum 6 miesięcy intensywnej pracy (ja powiedzmy byłbym w stanie zrobić to miesiąc - połtora, ale zajmuje się tym od lat). Wszystko oczywiście zależy od rożnych szczegołów w jaki sposób będzie to rozbudowane, więc ocena tego czasu jest przybliżona.

0

Ok, a mógłbyś powiedzieć, jak od strony backendu wyglądałoby działanie takiej apki? Np sprawdzanie egzaminu albo dostęp ucznia do konkretnego egzaminu?
Sprawdzanie egzaminu, to pewnie będzie wysyłany formularz i odpowiedzi ucznia za pomocą jakiejś funkcji/metody będą porównywane z ustawionymi, poprawnymi odpowiedziami nauczyciela i wyniki będzie zapisywany w bazie danych na serwerze.
A sprawdzanie, czy uczeń ma dostęp? Jedyne, co mi przychodzi do głowy, to znowu jakaś funkcja, która po kolei sprawdza wszystkie dostępne egzaminy, i jeżeli uczeń ma do jakiegoś dostęp, to wyświetla mu w panelu, że może włączyć egzamin. Chociaż to rozwiązanie wydaje mi się kiepskie ze względu na wydajność, bo jeżeli na serwerze byłoby 1000 egzaminów, i interesujący nas egzamin byłby na samym końcu, to apka za każdym razem sprawdzałaby wszystkie egzaminy, żeby znaleźć tylko ten jeden i potwierdzić dostęp. Więc podejrzewam, że można byłoby zrobić to na pewno lepiej.

0

SELECT * FROM exams WHERE student_id = id

...tylko ze pewnie w ORMie a nie w golym sql

Gdzie studiujesz tak z ciekawosci?

0

Musisz poznać takie zagadnienia jak autoryzacja i autentykacja - to podstawy do logowania do serwisu, na pewno w dokumentacji Laravera znajdziesz rozdział na ten temat.

Co do egzaminów, to mając relację SQL np. "teacher" (egzaminator), oraz "disciple" (uczeń), tworzysz kolejną relację "exam" (egzamin), i w niej zapisujesz do którego nauczyciela należy: kolumna teacher_id która jest kluczem obcym do relacji teacher, oczywiście tworzysz indeks na ta kolumnę celem optymalizacji szybkości zapytania. Potem tworzysz osobną relację wielu do wielu np. "exam_disciple" gdzie masz dwie kolumny: exam_id, disciple_id w ten sposob łączysz dany egzamin z danymi uczniami którzy go zdają w tej tabeli mogą też być wyniki danego egzaminu, czy egzamin został już zdany etc. Tak to mniej więcej w skrócie wygląda - musisz się dobrze nauczyć teorii baz danych SQL, normalizacji, optymalizacji struktur baz danych etc.

Oprócz przeczytania dokumentacji laravela od deski do deski, najlepsze co możesz zrobić to znaleźć kilka przykładów aplikacji, i poznać je w jaki sposób zostały zbudowane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1