Wybór technologii do projektu

0

Witam,
pytanie brzmi jak dobrać technologię do projektu lub jakie kryteria należy rozpatrzyć przy wyborze technologii?

Temat brzmi trochę ogólnie, więc dokładnie mówiąc chodzi mi o wybór języka programowania. Zrobiłem sobie listę według własnych kryterii i na tej liście mam coś takiego:

  1. C#
  2. Java
  3. Python
  4. C++
  5. PHP
  6. JavaScript

PHP i JS oczywiście tylko i wyłącznie do zastosowań webowych (chociaż widziałem, że da się tworzyć aplikacje desktopowe, ale zostawmy to). Reszta nadaję się do aplikacji webowych i desktopowych.

Rozważmy najpierw aplikacje desktopowe. Teoretycznie C++ pod względem wydajności powinien tu wygrać, ale rozpatrzmy taki przypadek, że w C++ nie ma tzw. "odśmieczacza" (chyba jak dobrze pamiętam to garbage collection) i przykładowo jak przez przypadek gdzieś zapomnimy zwolnić pamięć w C++ to np. wydajność naszej aplikacji/ systemu może spaść. poza tym przykładowo nasz zespół czuje się lepiej w C# czy Javie czy Pythonie to chyba lepiej odpuścić sobie C++. Podsumowując, w powyższym przykładzie powinniśmy wybrać nie C++?

Teraz rozważmy Jave, C# i Pythona w kontekście aplikacji desktopowych. To może zacznijmy od C#. Po pierwsze jest to technologia nie darmowa (przynajmniej przy pierwszym projekcie), po drugie ściśle związana z Microsoftem, co wyklucza przenośność (chociaż już widziałem, że da się odpalać na linuxach, nie wiem jak na mac). Wydaje mi się, że tu jest fajnie jak mamy już konkretnego odbiorce naszego projektu, który wiem że na 100% będzie używał Windowsa.
Jeśli chodzi o przenośność to z mojej listy mamy Jave i Pythona. Szczerze mówiąc nie wiem co tu porównać, oprócz tego że oba są darmowe i podejrzewam że pod Jave jest więcej bibliotek i frameworków. Jeszcze pozostaje taki fakt, że Python można używać nie tylko na PVM, ale np. JVM.

Jeśli chodzi o aplikacje webowe to najpopularniejszy będzie php, jest darmowy i łatwy dostęp do hostingu. Myślę, że php można wykorzystać do prostych stronek i aplikacji webowych. JavaScript (może warto dodać, że korzystamy z np. modułu express w node.js i oczywiście samego node.js też), po pierwsze sami sobie piszemy serwer, na ogół te serwery są wydajniejsze od innych.
A Java i C# to chyba do bardziej jakichś rozbudowanych aplikacji firmowych (korporacyjnych). Problemu tu może być jeszcze serwer, który jest mniej dostępny od zwykłego Apache.

Tak na marginesie nie zauważyliście ostatnio, że zrobił się jakiś trend na języki z maszyną wirtualną i javascript, czy tylko mi się tak wydaje.

To tak co mi przyszło do głowy pod jakimi względami możemy wybierać technologię. Pytanie czy coś jeszcze byście dopisali?

0

Nie wyobrazam sobie zbytnio pisania wielkich aplikacji w Pythonie.
Co do C++ i GC to tak naprawde istnieje szablon, ktory realizuje sprzatanie za nas <memory>, a co do samych memory leak'ow to wiekszosc systemow nowoczesnych zwalnia zaalokowana pamiec po zakonczeniu procesu. Znaczenie maja te wycieki tak naprawde tylko w dwoch przypadkach: kiedy alokujemy duzo pamieci i program moze sie wysypac w trakcie normalnego dzialania, badz kiedy program ma dzialac w petli nieskonczonej przez dluzszy okres.

0

Nie wyobrażam sobie zbytnio pisania wielkich aplikacji w Pythonie.
A co złego jest Pythonem? Czy ja czegoś nie wiem?

Myślę, że nie ma jedynej słusznej drogi. Masz do dyspozycji wiele sprawdzonych języków, przy czym nie jest ważne na który się zdecydujesz, a w którym najlepiej sobie radzisz.

0

W naszej firmie w pythonie napisany jest wielki system informatyczny klasy ERP. Więc tez nie rozumiem argumentu z przeciwskazaniami do pythona. Szybko sie w nim pisze i aplikacja tez dziala bardzo szybko

0

Jeśli chodzi o Javę to tutaj masz listę hostingów: Hosting dla aplikacji webowych na platformę Java Wcale nie jest mało tych hostingów, ale typowo polskich raczej nie ma. Praktycznie na każdym z tych hostingów Javy możesz używać języków innych niż Java, ale też kompilowanych do bajtkodu, np języka Scala (polecam Scalę).

Jeśli chodzi o Pythona, to sam robiłem w nim projekt, w mojej firmie też się go używa i mam tam z nim styczność. Ogólnie moje wrażenia nie są zbyt miłe, wadą jest przede wszystkim cecha podstawowa Pythona, czyli brak kontroli nad polami w obiektach. W Pythonie (jak i chyba większości języków skryptowych) w dowolnym momencie można dodać lub usunąć pole lub metodę z obiektu lub całej klasy. Dlatego przy literówkach Python może po prostu dodać nowe pole z zepsutą nazwą zamiast rzygnąć błędem - ergo, trzeba testować nawet głupie przypisania. Ponadto refaktoring w Pythonie jest dużo gorszy od refaktoringu w takiej np Javie - z racji tego, że w Pythonie jest kacze typowanie, IDE dość często myli się jeśli chodzi o znalezienie miejsc, w których występuje dany typ obiektu.

0

W Pythonie (jak i chyba większości języków skryptowych) w dowolnym momencie można dodać lub usunąć pole lub metodę z obiektu lub całej klasy.
To akurat pożądana cecha, ponieważ świetnie współgra z dekoratorami, a sam kod jest bardziej elastyczny. No, ale jeśli nie umie się programować to i tym można się zrazić :D

Dlatego przy literówkach Python może po prostu dodać nowe pole z zepsutą nazwą zamiast rzygnąć błędem - ergo, trzeba testować nawet głupie przypisania.
W dobrych IDE nie piszę całych nazw zmiennych z palca. Zwyle 2 litery, a potem podpowiadanie. Poza tym live parsing wyraźnie podkreśla błędy składniowe. Także nie ma takiego dramatu o jakim tu piszesz. To kwestia doboru odpowiednich narzędzi.

Ponadto refaktoring w Pythonie jest dużo gorszy od refaktoringu w takiej np Javie - z racji tego, że w Pythonie jest kacze typowanie, IDE dość często myli się jeśli chodzi o znalezienie miejsc, w których występuje dany typ obiektu.
Dzięki duck typing masz statyczny polimorfizm i sam kod jest o niebo prostszy niż gdyby był tworzony w Javie.

0

@Wibowit PyCharm (IDE do Pythona zrobione przez JetBrains) można specyfikować typy argumentów metod w docstringach i wtedy on sobie ogarnia podpowiadanie składni. Oczywiście tracisz tutaj trochę tą elastyczność związaną z duck typingiem, ale coś za coś.

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