Kolejny język programowania - jaki wybrać?

0

Wiem, że takich tematów było już miliony, jeśli nie miliardy albo nawet więcej, jeśli programiści istnieli przed Wielkim Wybuchem, ale chciałbym poruszyć ten temat biorąc pod uwagę moje doświadczenie i potrzeby.
Potrzebuję w miarę elastycznego, a przy tym jak najbardziej wydajnego (oczywiście wydajność działania jest największym priorytetem) języka programowania, który powinienem opanować. Projekt, za który zamierzam się zabrać będzie projektem, który z takimi zagadnieniami, jak projektowanie i tworzenie interfejsu będzie miał niewiele wspólnego. Znajomi programiści wspomnieli o tym, że do jego realizacji będzie przydatna także wiedza o sieciach neuronowych, co wskazuje na to, że komunikacja z odpowiednim silnikiem baz danych też będzie niezbędna.
Będzie to program, który po wpisaniu odpowiedniej frazy będzie wykonywał spore ilości obliczeń (niekoniecznie matematycznych w przenośnym tego słowa znaczeniu), ale nie ma on pracować w interakcji z więcej niż jednym użytkownikiem na raz. Ale chyba nie muszę się rozpisywać na temat specyfikacji tego programu, ze względu na to, że sama fraza "sieci neuronowe" wyjaśnia już stanowczo dużo.
Moje dotychczasowe doświadczenie opiera się o wykorzystanie takich języków, jak Delphi (~2 lata), PHP (~4 lata), JavaScript (bliżej nieokreślony czas użycia). Liczby w nawiasach uwzględniają tylko czas, w którym korzystałem z tych języków w działalności zawodowej. Znam też co-nieco C++, a nawet próbowałem się uczyć Javy, ale stwierdziłem, że w celu realizacji mojego projektu powinienem się skonsultować z szerszym gronem programistów.
Wymagania co prawda już określiłem, ale powtórzę i dodam coś jeszcze: najbardziej zależy mi na wydajności; kolejne wymaganie to elastyczność (chodzi jednocześnie o składnię, jak i przenośność; następnie jak największy udział w rynku. Wydajność - tego chyba nie muszę wyjaśniać, wspominając jedynie, że mój projekt nie ma być aplikacją webową. Elastyczność - elastyczna składnia jest wskazana, ale wiem, że co zbyt elastyczne, to niekoniecznie wydajne, więc to jest drugie miejsce - uwzględniając oczywiście przenośność (chcę uniknąć sytuacji, w której projekt upadnie z powodu przestarzałych bibliotek czy nieodpowiedniego systemu operacyjnego). Udział w rynku wiąże się z tym, że w przyszłości może nastać potrzeba zatrudnienia kogoś do pomocy.

TL;DR?

Liczę na fachowe odpowiedzi i z góry dziękuję.

1

wiedza o sieciach neuronowych, co wskazuje na to, że komunikacja z odpowiednim silnikiem baz danych też będzie niezbędna

Nie widzę tego ciągu przyczynowo skutkowego. Ani trochę. Co ma piernik do wiatraka?

sama fraza "sieci neuronowe" wyjaśnia już stanowczo dużo

Wyjaśnia że najpewniej nie wiesz że istnieją lepsze i wygodniejsze algorytmy uczenia maszynowego ;)

który po wpisaniu odpowiedniej frazy będzie wykonywał spore ilości obliczeń
(...)
Ale chyba nie muszę się rozpisywać na temat specyfikacji tego programu

A szkoda, bo brzmi to trochę jak coś z zakresu text miningu / data miningu / przetwarzania języka naturalnego i może mógłby ci polecić coś lepszego od sieci neuronowych, bo mam w tej dziedzinie trochę doświadczenia. Ale jak chcesz.

Wracając do meritum:
Rzuć okiem na benchmark zrobiony przez kolegę @Wibowit https://github.com/tarsa/TarsaLZP/blob/master/README.md
To porównanie algorytmów kompresji, ale generalnie dobrze obrazuje jak wygląda wydajność obliczeń w różnych językach. Szybkość pisania i debugowania kodu ma tą samą kolejność, ale odwróconą. W Pythonie kod napiszesz raz dwa, w javie trochę ci to zajmie a w C/C++ zdążysz osiwieć zanim skończysz debugowanie.

0

Doceniam Twoją odpowiedź i dziękuję za zainteresowanie.

wiedza o sieciach neuronowych, co wskazuje na to, że komunikacja z odpowiednim silnikiem baz danych też będzie niezbędna
Nie widzę tego ciągu przyczynowo skutkowego. Ani trochę. Co ma piernik do wiatraka?

Powinienem przeprosić, że nie podałem informacji o tym, że dane używane przez program będą także przechowywane, a nie tylko analizowane - wina leży po mojej stronie, bo faktycznie z mojej wypowiedzi nie wynika, że coś później z tymi danymi miałoby się dziać, a dodatkowym "zbiciem z tropu" mogło być użycie informacji, że nie będzie to program wykorzystywany przez więcej niż jednego użytkownika. Oczywiście to bzdura, ale też nie do końca. Program sam w sobie faktycznie nie musi komunikować się z więcej niż jednym użytkownikiem podczas swojego działania, ale więcej niż jedna instancja programu uruchamiana przez więcej niż jednego użytkownika mogłaby zmienić obraz funkcjonalności przy odpowiednim zastosowaniu bazy danych.

bo brzmi to trochę jak coś z zakresu text miningu / data miningu / przetwarzania języka naturalnego

Tak, słuszne spostrzeżenie. Powiedzmy, że projekt ten ma zostać częścią innego projektu, który przypuszczalnie i tak nie dojdzie do skutku. Jednak czy stwierdzenie "przypuszczalnie nie dojdzie do skutku" powinno przekreślać próbę zapoczątkowania takiego projektu? Przejdźmy do rzeczy. W niedługim czasie zamierzam zasięgnąć wiedzy związanej z budową słowników przetwarzających tekst komputerowo, jednak nie chciałbym korzystać z możliwości, jakie one oferują. Mam świadomość, że budowa konkretnych języków może się znacznie różnić (porównując triangiel języków polskiego, angielskiego i japońskiego na przykład), ale w moim odczuciu słowniki takie jak chociażby ten udostępniany przez Google nie spełnia moich oczekiwań. Nie sądzę, że jest napisany źle - wręcz przeciwnie. Jest wystarczająco dobry, aby można było go udostępnić jako słownik online. Ale dla mnie to za mało. Mam świadomość tego, że mogę się mylić, ale przemyślenia związane z tematem takiego słownika pozwalają mi sądzić, że ten stworzony przez Google ma zbyt małe możliwości jak na możliwości samego koncernu. Może jest to kwestia zasobów, może kwestia pieniędzy, może jedno i drugie, a może żadnego z wymienionych. Nie chciałbym się nad tym jednak skupiać - moim celem jest raczej podjęcie próby stworzenia czegoś, co może się okazać przydatne przynajmniej mi w stopniu zadowalającym, mając na uwadze to, że mogę napotkać trudności nie do przeskoczenia. Jeśli jednak uda się osiągnąć coś, co pozwoli przynajmniej nakierować mnie na coś odpowiedniego, to będzie już dla mnie satysfakcjonujące.
O sieciach neuronowych wspomniałem dlatego, że polecili mi je znajomi. Temat nie jest mi w odpowiedniej mierze znany, ale nie sądzę, aby pojawił się problem z odpowiednim wykorzystaniem zasobów wiedzy zgromadzonej w internecie lub w książkach, nawet, jeśli niektóre źródła mogą tą wiedzę prezentować w sposób nieodpowiedni. Stwierdzenie to kierowane jest przekonaniem, że wiedza z jednego źródła, bądź kilku źródeł spokrewnionych, nie może być na tyle pewna, by można było ją wykorzystać bez zahamowań (mam na myśli raczej założenie, że człowiek, który faktycznie chce posiąść odpowiednią wiedzę, wie, co robi i jest świadomy tego, jakie konsekwencje może za sobą nieść użycie tego, czego w danej chwili chce użyć - w tym przypadku jest to wiedza).
Jeśli jesteś w stanie podać bardziej odpowiednie dla projektu słownika rozwiązania strukturowe (bo zakładam, że będą to rozwiązania strukturowe), nie krępuj się. Jestem pewien, że Twoja opinia będzie przydatna. Problemem w tej sytuacji jest jednak to, że nie znasz specyfikacji systemu, jak chcę stworzyć, a nie jest to raczej coś, co dałoby się opisać na kartce papieru i to w jedną noc. Nie uważam, że nie wiesz, że takie systemy są na tyle rozbudowane, że nie jest w stanie ogarnąć ich pojedynczy człowiek - taka myśl jest słuszna, ale kto powiedział, że cały system od początku do końca będę konstruował samodzielnie? Tak, wiem, że napisałem o możliwości szukania pomocy od kogoś trzeciego w poprzednim poście i nie myślę, że to przeoczyłeś.
Tak, czy inaczej, liczę na to, że spróbujesz wypowiedzieć się co do tego, co w ogóle mógłbyś powiedzieć na temat tego projektu po przeczytaniu tej skromnej części informacji.

TL;DR

1

Mówiąc "słownik" chodzi ci jak rozumiem o "translator"?
Generalnie tworzenie translatora trafia na klasyczny problem: aby poprawnie przetłumaczyć pewien zwrot konieczne jest zrozumienie każdego ze słów które się na ten zwrot składają. Jednocześnie aby zrozumieć poszczególne słowa konieczne jest zrozumienie treści jaką niesie za sobą zwrot. I koło się zamyka ;)
Jak trafiasz na słowo "pika" to nie wiesz czy chodzi o broń drzewcową, o pikanie czy o kolor w kartach.
Poza tym rozgraniczmy tutaj też różne języki, bo podejście do nich niestety trudno ujednolicić. Polski to język fleksyjny a nie pozycyjny / izolujący, dlatego analiza tekstu w języku polskim jest dużo bardziej skomplikowana, bo nie tak łatwo dokonać lematyzacji / stemmingu i określania part-of-speech. Dla języków pozycyjnych/izolujacych (np. angielski) masz gotowca w postaci WordNet, dla języka polskiego istnieje kilka akademickich rozwiązań.

Ale google translate opiera się trochę na innej, mniej deterministycznej, metodzie, podobnej chyba do tego co ty chcesz zastosować. Otóż google translate korzysta z uczenia maszynowego i łyka strony w internecie które mają różne wersje językowe i na tej podstawie uczy się jak tłumaczyć całe zwroty.

Jeśli miałbym ci coś podpowiedzieć to zainteresuj się taką tematyką jak Topic Modelling, Latent Semantic Indexing i Latent Dirichlet Allocation. To jest generalnie bardzo ciekawa sprawa, szczególnie w kontekście roztrząsania dwuznaczności tekstu.

W kontekście tematu: zainteresuj się raczej dostępnymi bibliotekami wybierając język programowania :) Bo dla Pythona masz np. nltk, gensim i wordnet, dla javy masz mahout czy mallet. A nie wiem czy C/C++ oferuje coś ciekawego.

0

Ja widziałem sieci neuronowe zrobione w PHP-ie, więc hasło samo w sobie nic nie mówi...

I zgadzam się z przedmówcą, że sieci neuronowe prawie na pewno nie będą najlepszym rozwiązaniem w ww temacie.

Pomocne hasła: NLTK, text mining, web mining.

A Google nie udostępnia słownika tylko program tłumaczący, http://translate.google.com
który potrafi (lepiej lub gorzej) tłumaczyć całe akapity. Z komentarzy pewnego native speakera wnioskuję, że lepiej niż niektóre biura tłumaczeń...

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