Co wybrałbyś/wybrałabyś do stworzenia projektu od zera?

2

Cześć. Zbieram się do klepnięcia swojego projektu więc wpadłem na pomysł tego tematu. Może akurat ktoś z was jest na etapie projektowania kartka/głowa/złote myśli/zaawansowana implementacja swojego pomysłu zechce się podzielić informacją ;-) Jeżeli nie masz żadnego pomysłu w planach, a masz coś do powiedzenia również zapraszam.

  • Kategoria projektów jest dowolna ale liczą się idee realizowane po pracy, a nie w pracy: web, mobile, desktop, IOT i wszystko inne co można pod to podpiąć. Ogólnie więc panuje dowolność.

Zasady 'zabawy' w poście są następujące:

  • Opisz co tworzysz* (Niewymagane - nie musisz zdradzać swojego pomysłu)
  • Dlaczego planujesz stworzyć/tworzysz ten projekt? (Dla odstresowania po pracy, zabawa, poznanie nowego języka, frameworka, biblioteki, inny powód(jaki?))
  • Co Twój projekt ma robić? Jaki problem rozwiązujesz?
  • Jakie ograniczenia posiada Twój projekt?
  • Jakich technologii i dlaczego używasz w projekcie? Istotnym elementem tego punktu jest uzasadnienie. (Np. Kotlin, Spring Framework, PostgreSQL, Angular 2)
  • Jakie narzędzia wykorzystujesz? Dlaczego takie? (Np. Jira, Slack, Trello, Github)
  • Jeżeli wykonałeś już jakieś postępy wykraczające poza projekt na papierze/w głowie - daj znać jakie problemy napotkałeś/aś po drodze i jak sobie z nimi poradziłeś/aś?
  • Jeżeli piszesz projekt np. w PHP, a po pół roku postanawiasz przejść na np. Pythona - napisz skąd taka decyzja. Własna zachcianka? Dochodzisz do wniosku, że w Pythonie zadziała coś lepie/szybciej? Inne powody - jakie?
    .
    Myślę, że to takie fajnie skrojone minimum jeśli chodzi o własne prace twórcze. Można się wypowiedzieć nawet nie produkując niczego po godzinach.
  • Gdyby ktoś chciał komentować czyjś wybór i uświadamiać go, że jest bez sensu miło będzie gdy zrobi to w komentarzach w poście do którego chce się odnieść.
  • Podziękowania dla: @WhiteLightning, @cepa za wkład w modyfikację głównych założeń tego tematu.

PS. Wszelkie uwagi mile widziane natomiast pakowanie 100 punktów realizacji mija się z celem. Raczej nikt nie będzie wrzucać user flow, makiet, wbs, przeklejał tasków z trello i tym podobnych ;-)

Dziękuję i życzę miłej zabawy :P

2

Gdybyś dzisiaj miał/a siadać od 0 do projektu własnego pisanego po godzinach (i trzymamy się tematu aplikacja web/mobile) to jakiego stacku byś użył/a i dlaczego?

Scala. Scala.js na froncie, Scala.JVM na backendzie. Doświadczenie mam z:

Uzasadnienie:

  • jeden i ten sam język na froncie i backendzie
  • nawet wiele funkcji z Javy jest przepisanych do Scala.js, więc można w bardzo dużym stopniu współdzielić kod
  • język jest silnie typowany, zwięzły i ogólnie moim zdaniem najlepszy z dostępnych do tych zastosowań (web) :) (pomijając dostępność programistów of koz, ale przecież chodzi o programowanie dla siebie)
  • w Reactu można pisać w miarę funkcyjnie, a taki styl lubię i dobrze pasuje do Scali
  • nie lubię języków kaczo typowanych
3

Gdybyś dzisiaj miał/a siadać od 0 do projektu własnego pisanego po godzinach
(i trzymamy się tematu aplikacja web/mobile) to jakiego stacku byś użył/a i dlaczego?

Przede wszystkim nie traktowałbym tego w tak bardzo waterfallowy sposób i bym nie decydował o całym stacku na początku. Tzn. na pewno pewne defaultowe decyzje bym podjął - np. jeśli miałbym zrobić zaawansowany interfejs HTML/CSS to użyłbym pewnie Reacta, bo tego zwykle używam, tak samo z innymi narzędziami. Jednak dodawałbym te narzędzia po kolei, wtedy kiedy będą faktycznie potrzebne (zachowując zasadę YAGNI).

od 0 do projektu własnego pisanego po godzinach

Ponieważ takie projekty po godzinach nie mają presji czasowej, że trzeba coś dowieźć natychmiast, to bym to zapewne przepisywał po kilka razy, i pewne decyzje technologiczne powzięte na początku mogłyby się pójść je*ać, jeśliby się okazało, że np. dane rozwiązanie technologiczne się nie sprawdza w projekcie.

Także w takich projektach jest duże pole do eksperymentów. Można polecieć na spontan i spontanicznie wymyśleć sobie, że np. "oo, nowa biblioteka X, użyję jej w projekcie i zobaczę co się stanie!" a po dwóch tygodniach używania stwierdzić, że "ee, to jednak był błąd!".

0

@Hispano-Suiza: zdefiniuj typ projektu.

Ja np. po godzinach bawie sie w gamedev. I dawniej to bylo XNA (ktore pomi o ze lubie to obecnie jest trupem). Wiec przrzucilem sie na LIBGDX.
Wiadomo ze musi byc GIT :)

0

@WhiteLightning: Poszedł update posta wyżej w takim razie. Może zrodzi się w nim coś ciekawego :-) Podsumowując: dowolność jeżeli chodzi o to co robimy. Idea przedstawiona jest w poście na samej górze także nie krępuj się ;-)

0

Tak sobie ostatnio myślę, że jakbym miał pisać tzw. launcher do gry, to napisałbym go w stacku NodeJS i Electron. Tworzenie warstwy wizualnej w HTML, CSS i JS jest bardzo przyjemne i łatwe. Trochę słabo, że sam launcher ważyłby ok 50-100mb, no ale by był... ładny. Serwis do komunikacji z tym launcherem, chyba bym się pokusił do napisania w języku GO - kiedyś się nim bawiłem i przyjemnie mi się robiło w nim różne sieciowe rzeczy.

Wracając do Electrona, to jest taka trochę łatwiejsza alternatywa niż łączenie aplikacji napisanej w c++ z chromem, jak robią twórcy League of Legends albo sam Blizzard w swoim Battle.net :P

1

Hmm... przyjmując aplikację webową, wybrałbym pewnie:

  • backend: Java,
  • frontend: ReactJS+Redux, rozważyłbym użycie TypeScript.

Kolejne wybory zależą od rodzaju aplikacji. Gdybym miał szybko oprogramować jakiś proces biznesowy będący częścią większej infrastruktury, pewnie szedłbym w Spring Boota. Za magią nie przepadam, jednak w tym wypadku prawdopodobnie chciałbym po prostu dostać standardowe narzędzia do szybkiego "dogadania" się z resztą i skupić się na logice. Ponadto byłaby to duża zaleta, gdyby projekt trzeba było komuś przekazać.

Inaczej bym podszedł do projektu długoterminowego lub takiego o wymaganiach innych niż "oprogramuj mi to tak, by działało". Tutaj preferowałbym lżejsze, wyspecjalizowane biblioteki takie, jak Ratpack czy jOOQ.

Natomiast własny blog zakodowałem w zeszłym roku w PHP, by móc to uruchomić na praktycznie każdym hostingu w znanym wszechświecie. Backend napisałem w Symfony 3. Front-end jest mniejszy niż "Hello world" w Symfony, więc napisałem go z palca w czystym PHP :).

Aplikacje niewebowe i nie-GUIowe: wszystkie opcje dozwolone, do każdego przypadku podchodzę indywidualnie. Dwa przykłady z ostatnich lat:

  • rozwijałem tego typu projekt przez kilka lat, do którego wybrałem Javę. Jednym z czynników decydujących było to, że projekt współpracował z ekosystemem napisanym w Javie.
  • jakoś rok temu musiałem stworzyć narzędzie systemowe, które miało być lekkie i działać na różnych systemach operacyjnych. Wybrałem Pythona z uwagi na bibliotekę standardową, która posiadała wszystkie niezbędne mi funkcje (w przeciwieństwie do Javy) oraz fakt, że Python był już dostępny na wszystkich docelowych maszynach.

Czym się kieruję:

  • duże/długie projekty: języki statycznie typowane > języki dynamicznie typowane
  • duże/długie projekty: czy istnieje społeczność i dokumentacja dla danego narzędzia,
  • jak dana biblioteka jest napisana (jakość API, rozszerzalność...),
  • okoliczności nietechniczne, np. umiejętności programistów, którzy będą mieć styczność z danym projektem.

Aktualizacja:

Celem wyjaśnienia paru wątpliwości zgłoszonych przez innych rozmówców: we wpisie skoncentrowałem się na aspekcie wyboru konkretnej technologii i robię to wtedy, kiedy wiem już, co projekt ma robić i jak. Podane przykłady demonstrują praktyczne wykorzystanie wiedzy związanej z celem projektu, wymaganiami, ograniczeniami. Podjęcie określonej decyzji byłoby praktycznie niemożliwe, gdybym tego wcześniej nie zrobił.

4

Podchodzisz do tematu od d**y strony.

Analiza:

  1. Dlaczego chcesz stworzyć projekt? Jak jest jego cel? Dla kogo?
  2. Co twój projekt ma robić, czym ma być? Co "będzie" jak stworzysz projekt?
  3. Co twój projekt NIE robi, jakie ma ograniczenia, itd?
  4. Jaki masz budżet, nie koniecznie hajs ale na pewno czas, do kiedy chcesz go stworzyć?

Projekt:
5. Wymagania, co robi, czego nie robi, jak to robi? User stories, flow, itd itp. Architektura z "wyższej" perspektywy (High Level Design).
6. Interfejs, najprościej zrobić sobie makiety żeby "widzieć" jak to będzie działać. Nawet jak to aplikacja systemowa to chociażby jakie parametry, czy biblioteka jaka ma wystawiać funkcjonalność.
7. WBS, Work Breakdown Structure. Coś jak spis treści twojego projektu. Od wizji do szczegółów opisujesz co trzeba zrobić, np: Logowanie -> Autentykacja, Formularz login, Logout, Reset hasla.
8. Plan projektu, na podstawie WBS co i w jakiej kolejności robić żeby skończyć.

...i dopiero jak mniej więcej znasz odpowiedzi na powyższe...

Rozwiązanie:
9. Jak to ma być napisane? Architektura z "niższej" perspektywy (Low Level Design).
10. Czego użyć do budowy projektu żeby zmieścic się w założeniach i żeby robił to co ma robić.

Implementacja:
11. Nastał czas napierdalania.
.
.
.

Wdrożenie
.
.
.

Profit

1

@Wibowit, @LukeJL, @WhiteLightning, @Garen_eye, @zyxist - wołam z racji tego, że poszedł "mały" update głównego postu. Jeżeli macie ochotę coś dodać to serdecznie zapraszam ;-)

0

Ja wybieram C#. Dlaczego? Bo mogę pisać w web, mogę na desktop (różne systemy), mogę na mobilne. I wszystko to będzie używane w moim projekcie :) Do tej pory siedziałem głównie w desktopie. Teraz jest fajna okazja, żeby zrobić coś bardziej uniwersalnego i poznać nowe technologie.
Z narzędzi: Visual Studio, GIT, Dia (tworzenie diagramów UML) lub Gliffy i prosty klient (nie pamiętam nazwy) do obsługi żądań HTTP.

2
zyxist napisał(a):
  • okoliczności nietechniczne, np. umiejętności programistów, którzy będą mieć styczność z danym projektem.

Umiejętności i chęci. Ja praktycznie tylko tym się kieruje, Generealnie większość projektów da się napisać we wszystkim, a odopowiednio podkur...ni i zmotywowani programiści mają większy wpływ niż drobne różnice w "wydajności" pisania w różnych jezykach/ frameworkach.
Tu jeszcze dochodzi ewentualny czas trwania i utrzymania projektu oraz ewentualnie security. Np. namiętnych JavaSkryptowców namawiam na TypeScript/ Testy i jakiś bezpieczniejszy framework niż jQuery + szczere chęci.

0

Projekt, który rysuje Op is a Faggot w konsoli albo dla utrudnienia w pliku.

0

pół zartem pół serio. Gotowy csm open source i grzebał w kodzie metodą prób i błędów ;=)

0

Wybrał bym Ruby on Rails lub Sinatre, tak się tworzy startupy, jak to zrobili w twitter, a potem jak wyjdzie przepisał go do Scala/Scala.js.

0

C++ na hardcore(żeby sobie przypomnieć http jak działa xd), albo python, ewentualnie java na backend.

Na front klasycznie js,css,html.
Jakieś podstawowe frameworki, żeby od zera nie pisać.

Do weba, a mobile to java klasycznie jest spoko.

Reszta to pomysł.

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