Ruby, Python vs Java,C++

Opublikowane przez Jarosław Zabiełło Mon, 14 Nov 2005 20:41:00 GMT

Od czasu do czasu na grupach dyskusyjnych mają miejsce przepychanki na temat wyższości jednych języków nad drugimi. Czasami takie dyskusje wywołują sporo emocji. Zmęczony ciągłymi ogólnikowymi sloganami o tym jak to w C++ lub Javie pisze się lepiej i szybciej (dobry dowcip) programy niż w językach dynamicznych takich jak Python czy Ruby, postanowiłem rzucić małe wyzwanie miłośnikom tych języków.

Zadanie polegało na napisaniu wyszukiwarki do polskiego tekstu Koranu (w sumie nie widziałem nic takiego, stąd pomysł). Aby nie było za banalnie, trzeba było napisać taki kod który by automatycznie wyssał przekład Koranu ze strony internetowej http://www.planetaislam.com/koran.html następnie przetworzył go i wstawił do bazy mysql oraz przełączył się w tryb wyszukiwania fraz.

Wyzwanie zostało przyjęte i… mijają tygodnie za tygodniami a moi dyskutanci nie są w stanie przedstawić żadnego działającego kodu w Javie ani w C++. Tak to teoria zderza się z praktyką. Oto naprędce stworzona wersja w Ruby:

require 'mysql'
require 'open-uri'

@przeklad = 'bielawski'
@conn = Mysql.new('localhost', 'login', 'hasło', 'koran', 3308)

def download(max_chapter=15)
  def clean_html(src) # nie znam biblioteki czyszczacej html wiec robie to regexem
    src.gsub(/&nbsp;/, ' ').gsub(/(<[^>]+>)/, '').gsub(/[ ]{2,}/, ' ').gsub(/&#/, '').gsub(/&quot;/, '"')
  end   
  @lines = []
  1.upto(max_chapter) do |sura|
    url = sprintf('http://www.planetaislam.com/koran/%s/%03d.htm', @przeklad, sura)
    src = clean_html(open(url).read)
    rows = src.scan(/(\d+?)[. ]([^\d]+)/) # wyluskuj wersety i numery rozdzialow
    rows.each do |row|
      @lines << sprintf('%s:%s %s', sura, row[0], row[1].gsub(/[\s]{2,}/, ' ').strip)
    end
    f = File.new("#{@przeklad}.txt", "w") # zapisuje sobie do pliku
    @lines.each { |line| f.write("#{line}\n") }                               
  end
end
def loaded_db
  @conn.list_tables.include?(@przeklad) # Sprawdzam czy juz istnieje tabela z danymi.
end
def load_db
  @conn.query("DROP TABLE IF EXISTS #{@przeklad}")
  @conn.query("CREATE TABLE #{@przeklad} (
    id int(10) unsigned NOT NULL auto_increment,
    sura varchar(255) NOT NULL,
    nr int(10) unsigned NOT NULL,
    verse text NOT NULL,
    PRIMARY KEY (id)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci")
  @conn.query("SET CHARACTER SET latin2")
  @lines.each do |line|
    sura, nr, verse = line.scan(/(\d+?):(\d+?) (.+)/)[0]
    verse.gsub!(/'/,"''") # uzywam topornego sql bo cos mi metoda prepare nie dziala, moze zla biblioteka?
    @conn.query("INSERT INTO #{@przeklad} (sura, nr, verse) VALUES(#{sura}, #{nr}, '#{verse}')")
  end
end  
def search_result(phrase)
  @conn.query("SET CHARACTER SET cp1250")
  sql = "SELECT * FROM " + @przeklad + " WHERE verse LIKE '%" + phrase + "%' "
  c = @conn.query(sql)
  while row = c.fetch_row
    puts sprintf("Sura %s,%s %s\n", row[1], row[2], row[3])
  end
end

if $0 == __FILE__
  if !loaded_db          
    download
    load_db
  end
  search_result('kobieta')
end

A oto ostateczna wersja w Pythonie:

#!python

"""
Wyszukiwarka do Koranu

Przykłady uzycia:
    python koran.py --txt zabijajcie
    python koran.py --sura=ix
    python koran.py --sura=9 --nr=4
    python koran.py --sura=IX --nr=4    

Wymagania:
    interpreter Pythona 2.4 + standardowe biblioteki
    pythonowska biblioteka MySQLdb
    serwer MySQL 4.1

Autor:
    Jarosław Zabiełło http://zabiello.com
"""

import HTMLParser, os, re, urllib2, sys
from optparse import OptionParser
import MySQLdb

class Koran(object):
    dbname ="koran"
    przeklad = 'bielawski'
    lines = []

    def __init__(self):
        self.conn = MySQLdb.connect(
            host='localhost',
            port=3308,
            user='login',
            passwd='hasło',
            db=self.dbname)

    def download(self, max_chapter=15):
        """Sciagam dane z internetu i je troszke oczyszczam z nadmiarowego kodu html"""
        def html_clean(src):
            x = HtmlStripper()
            x.feed(src)
            return src = x.get_fed_data()            
        self.lines = []
        for i in xrange(1,max_chapter):
            url = 'http://www.planetaislam.com/koran/%s/%03d.htm' % (self.przeklad, i)
            src =  html_clean(urllib2.urlopen(url).read()) # pobrany caly plik
            rows = re.findall(r'(\d+?)[. ]([^\d]+)', src) # wyluskuj wersety i numery rozdzialow            
            for row in rows:
                self.lines.append('%s:%s %s' % (i, row[0], re.sub(r'[\s]{2,}', ' ', row[1]).strip()))
        self.lines = [unicode(line, 'iso-8859-2').encode('utf-8') for line in self.lines]
        f = open(self.przeklad+'.txt', 'w')  # zapisuje sobie kopie na dysk
        for line in self.lines:
            f.write('%s\n' % line)
        f.close()

    def loaded_db(self):
        """Sprawdzam czy juz istnieje tabela z danymi."""
        c = self.conn.cursor()
        c.execute("SHOW TABLES")
        rows = c.fetchall()
        if self.przeklad in [row[0] for row in rows]:
            c.execute("SELECT COUNT(*) FROM %s" % self. przeklad)
            return c.fetchone()[0]
        return False

    def load_db(self):
        "Zakladam ze stworzono baze o nazwie self.dbname i laduje dane do tabeli self.przeklad"
        sqls = (
            "DROP TABLE IF EXISTS %s" % self.przeklad,
            '''CREATE TABLE %s (
                id int(10) unsigned NOT NULL auto_increment,
                sura varchar(255) NOT NULL,
                nr int(10) unsigned NOT NULL,
                verse text NOT NULL,
                PRIMARY KEY (id)
            ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci''' % self.przeklad)
        c = self.conn.cursor()
        for sql in sqls: # odtwarzam baze
            c.execute(sql)
        c.execute("SET CHARACTER SET UTF8")
        sql = "INSERT INTO "+self.przeklad+" (sura, nr, verse) VALUES (%s,%s,%s)"
        for line in self.lines:
            found = re.match(r'(\d+?):(\d+?) (.+)', line)
            if found:
                c.execute(sql, found.groups())
        c.close()

    def set_i18n(self, cursor, phrase=None):
        if sys.platform == 'win32': # zakladam ze bede wyswietlal wyniki w okienku konsoli, czyli kodowanie dosowe
            if phrase:
                phrase = unicode(phrase, 'cp1250').encode('cp852')
            cursor.execute("SET CHARACTER SET cp852")
        elif sys.platform == 'linux':
            cursor.execute("SET CHARACTER SET latin2")
        return phrase

    def search_result(self, phrase):
        """Wyszukuje wersetow wg prostej zasady: znadz wszystkie wersety w ktorych gdziekolwiek
        wystepuje fraza phrase. Dla wygody dodalem obsluge polskich znakow spod konsoli dosowej
        i linuksa."""
        c = self.conn.cursor()
        phrase = self.set_i18n(c, phrase)
        sql = "SELECT * FROM " + self.przeklad + " WHERE verse LIKE '%" + phrase + "%' "
        print sql
        c.execute(sql)
        rows = c.fetchall()
        c.close()
        print "Znaleziono %d wersetow:\n" % len(rows)
        for row in rows:
            print "Sura %s,%s %s\n" % (int_to_roman(int(row[1])), row[2], row[3])

    def show_verse(self, sura, nr=0, context=0):
        c = self.conn.cursor()
        self.set_i18n(c)
        if sura.isalpha():
            sura = roman_to_int(sura)
        if sura and nr: # wyswietl pojedyncza sure
            sql = "SELECT verse FROM " + self.przeklad + " WHERE sura=%s AND nr=%s"
            c.execute(sql, (sura, nr))
            verse = c.fetchone()[0]
            print "Sura %s,%s %s\n" % (int_to_roman(int(sura)), nr, verse)
        else: # wyswietl cala sure
            sql = "SELECT nr, verse FROM " + self.przeklad + " WHERE sura=%s ORDER BY nr"
            c.execute(sql, [sura])
            rows = c.fetchall()
            for row in rows:
                print "Sura %s,%s %s\n" % (int_to_roman(int(sura)), row[0], row[1])
        c.close()

class HtmlStripper(HTMLParser.HTMLParser):
    """src: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/440481"""
    def __init__(self):
        self.reset()
        self.fed = []
    def handle_data(self, d):
        self.fed.append(d)
    def get_fed_data(self):
        return ''.join(self.fed)

def int_to_roman(input):
    """src: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/81611"""
    if type(input) != type(1):
        raise TypeError, "expected integer, got %s" % type(input)
    if not 0 < input < 4000:
        raise ValueError, "Argument must be between 1 and 3999"   
    ints = (1000, 900,  500, 400, 100,  90, 50,  40, 10,  9,   5,  4,   1)
    nums = ('M',  'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I')
    result = ""
    for i in range(len(ints)):
        count = int(input / ints[i])
        result += nums[i] * count
        input -= ints[i] * count
    return result

def roman_to_int(input):
    """src: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/81611"""
    if type(input) != type(""):
        raise TypeError, "expected string, got %s" % type(input)
    input = input.upper()
    nums = ['M', 'D', 'C', 'L', 'X', 'V', 'I']
    ints = [1000, 500, 100, 50,  10,  5,   1]
    places = []
    for c in input:
        if not c in nums:
            raise ValueError, "input is not a valid roman numeral: %s" % input
    for i in range(len(input)):
        c = input[i]
        value = ints[nums.index(c)]
        try:
            nextvalue = ints[nums.index(input[i +1])]
            if nextvalue > value:
                value *= -1
        except IndexError:
            pass
        places.append(value)
    sum = 0
    for n in places:
        sum += n
    return sum

if __name__ == '__main__':
    appl = Koran()
    if not appl.loaded_db():
        print 'Pobieram dane z internetu....'
        appl.download()
        print 'Wkladam dane do bazy...'
        appl.load_db()
    parser = OptionParser()
    parser.add_option('--txt', dest='txt', help='wyszukiwana fraza')
    parser.add_option('--sura', dest='sura', help='numer Sury (liczba dziesietna lub rzymska)')
    parser.add_option('--nr', dest='nr', help='numer wersetu dla Sury')
    (options, args) = parser.parse_args()
    if options.txt:
        appl.search_result(options.txt)
    elif options.sura:
        appl.show_verse(options.sura, options.nr)
    else:
        print "Wywolaj z parametrem --help"

W międzyczasie zdążyłem nawet wykorzystać swój kod Pythona aby dodać go jako moduł do Plone. :)

Posted in ,  | Tagi , ,  | 80 comments

Comments

  1. Avatar climbus powiedział about 15 hours later:

    A ty dalej swoje.

    “C++ lub Javie pisze się lepiej i szybciej”

    Napewno nie pisze się szybciej, szczególnie takich programików (skryptów).

    Napewno taki przykład nie wykaże wyższości jednego języka nad drugim. Jednemu bardziej czytelny będzie kod Javy innemu Rubiego. Szybkość przy zastosowaniu nowoczesnych ide może być porównywalna.

    Różnica jest wyczuwalna przy dłuższym obcowaniu z wieloma aplikacjami i rozwijaniu ich.

    Java ma większy dorobek i Ruby czy Python musi udowodnić, że jest lepszy, tańszy aby był stosowany w porównywalnej skali. I tu jest też haczyk. Teraz coś musi być tańsze, niekoniecznie lepsze.

    Np PHP jest dobitnym tego przykładem. Jest na tyle prosty, że przyciąga wielu ludzi, którzy w szybki sposób mogą coś tworzyć. Co z tego wychodzi widać, ale fimom to nie przeszkadza. Za niską cenę mają akceptowalną (przez nich) jakość.

    Co do zadania, to miałem prawie gotowe, ale doszedłem do wniosku, że nie jestem specjalistą od Javy i moje dzieło nie było by dobrym przykładem elegancji, praktyczności czy czegokolwiek tego języka.

    To takie moje trzy grosze.

  2. Avatar JZ powiedział about 17 hours later:

    Nie przekonuje mnie to jak wpierw ktoś podejmuje wyzwanie a potem się wycofuje mówiąc że nie jest specjalistą od Javy. A ja niby byłem specjalistą Rubiego jak pisałem ten kod? Zainteresowałem się Rubym przecież później niż Ty zainteresowałeś się Javą. Trzeba było od razu protestować że to nie jest klasa zagadnień gdzie Java może podskoczyć do Rubiego, czy Pythona.

  3. Avatar climbus powiedział about 18 hours later:

    Chyba będę kiedyś musiał do tego zasiąść bo mi nie dasz spokoju. Prawdopodobnie nie prędko się to stanie, bo mam inne ważniejsze, ciekawsze sprawy na głowie.

    Ale nie bierz tego jako podjęcie wyzwania bo to nie jest dobra płaszczyzna do porównań. Bardziej doświadczenie.

  4. Avatar rsz powiedział 2 days later:

    O ile wiem, to wyzwanie na p.c.l.p. rzucił JZ… gwoli ścisłości tak piszę ;)

  5. Avatar Ranides powiedział 4 months later:

    Czemu to ma służyć? Taki program to możesz napisać w każdym języku wyższego poziomu… Języków się nie porównuje przez pisanie kilkudziesięciolinijkowych skrypcików :/ Praktycznie wszystkie współczesne języki nie są tworzone z myślą o szybkim klepaniu linijek… Napisałeś ten program w kilka godzin? Super – jego profesjonalne testy zajęłyby z dwa dni… Jesteś dumny, bo nie korzystałeś z wykresów UML, nie musiałeś się bawić w definiowanie objektów i nikt nie kazał ci się zastanawiać nad strukturą projektu, w szczególności nad jego rozszczerzalnością? Fantastycznie, spróbuj napisać coś poważnego w kilka osób… zrozumiesz, że takie potyczki nie mają sensu…

  6. Avatar Jarosław Zabiełło powiedział 4 months later:

    Chodziło o praktyczne zweryfikowanie buńczucznej wypowiedzi, że w Javie i w C++ pisze się tak samo szybko programy jak w Pythonie czy Ruby. Rzuciłem więc jakimś przykładem. Wyzwanie zostało podjęte i… nie moja wina, że wyszła z tego kompletna porażka przeciwników Pythona. Trzeba było zaprotestować na początku i zaproponować inne wyzwanie.

    W tym wypadku chodziło o napisanie aplikacji, która sobie pobierze i przetworzy dane z internetu, wsadzi do bazy relacyjnej i następnie przekształci się w wyszukiwarkę działającą z poziomu konsoli. Nie zawsze jest sens tracić czas na wykresy UML, i “profesjonalne testy” (niby co to ma znaczyć?)

    Co do pisania większego programu, to http://bank.muratordom.pl działający w Pythonie był tworzony w zespole paru osób.

    BTW, kod w Ruby napisałem w pół godziny (no ale to było już po napisaniu wpierw kodu w Pythonie który zajął jakieś 2 godziny. Nie pamiętam dokładnie)

  7. Avatar Ihs powiedział 11 months later:

    ...każdy może podać przykład który w danym języku szybciej się napisze. Czy to coś udowodni? wątpie :D

  8. Avatar stforek powiedział about 1 year later:

    commons_http_client + hibernate + lucene

    Chyba zajęłoby podobną ilość miejsca. Ale Java to nie jest język do pisania takich skryptów. Jakoś na razie nie widzę aplikacji na >1 mln linii kodu w Rubym i Pythonie…. A w C++ i Javie jest mnóstwo.

    Szybkość pisania zresztą NIE MA WIĘKSZEGO ZNACZENIA. Implementacja to tylko kilka % czasu produkcji softu. Reszta to analiza, projekt, testy, pielęgnacja. W tym zakresie języki dynamiczne są mocno w tyle poza Javą… Zwięzły kod Perla czy Rubego czyta się gorzej niż Javy. Chociażby przez brak jawnej specyfikacji typów.

  9. Avatar Jarosław Zabiełło powiedział about 1 year later:

    Cały Google stoi na Pythonie jak byś nie wiedział. grono.net było wcześniej postawione na Javie i to w ogóle się nie sprawdziło. Przebudowali to do Pythona i śmiga znacznie wydajniej od wcześniejszego rozwiązania. Java jest szybszym językiem, ale już rozwiązania na niej oparte – niekoniecznie.

    Śmieszne jest to przykładanie “javowych” metodologii do języków dynamicznych. One w ogóle się tam nie sprawdzają. Nie da się pisać w Ruby z mentalnością Javy. Rals daje niezrównanie krótszy i czytelniejszy kod od frameworków Javy. Jest nie tylko szybszy do developingu ale także jest przez to tańszy w utrzymaniu. Zrównanie czytelności Rubiego z Perlem świadczy tylko o tym, że nie masz bladego pojęcia o Ruby.

    Co do typów, to gdyby były takie dobre, to by w Javie nie trzeba było rzutować ich do innych. Z tego robi się potem taki burdel że sam kompilator Javy głupieje (nie jest w stanie skontrolować poprawności wszystkich rzutowań). Kończysz więc w tym samym miejscu co Pythonistas, o błędzie dowiesz się dopiero po uruchomieniu kodu. Tylko że Python jest niezrównanie lepszym narzędziem do wyłapywania i poprawiania błędów.

    A jeszcze co do szybkości, to można przecież generować bytecode JVM za pomocą składni Pythona lub Rubiego. kwestia dopracowania i Railsy będą śmigać na JVM6, why not? Więc o co ci chodzi? O obronę składni języka Java? Każdy wie, że ona jest do bani. :)

  10. Avatar zxc powiedział about 1 year later:

    No dobra to ja mam mniej profesjonalne pytanko :P

    Otóż spór się tutaj toczył o javę a ja jestem w takim problemie że chcę zacząć uczyć się podstaw jakiegoś języka programowania (trochę kiedyś c+) ale teraz się zastanawiam czy wrócić do C+ i zacząć porządną naukę od nowa? Czy po prostu Ruby jest lepszy od C++?? :|

  11. Avatar Jarosław Zabiełło powiedział about 1 year later:

    Jako pierwszy język do nauki? To zdecydowanie Python lub Ruby. A czy Ruby jest lepszy od C++? Wszystko zależy do czego chcesz danego języka używać.

  12. Avatar zxc powiedział about 1 year later:

    No właśnie z tego co widzę to Ruby ma większe zastosowanie w internecie, a co za tym idzie musze znać jeszcze (tzn wypadałoby znać) html, php. css, mysql :P

    Wydaje mi się że C++ nie “ciągnie” za sobą tylu zależności, a też jest bardziej ciekawy (chyba?). Szczerze to ciężko mi się określić czy lepsze jest dla mnie tworzenie programów czy jakiś webowskich rzeczy w Rubym. Ale raczej bardziej mnie kusi ten C++.

  13. Avatar Jarosław Zabiełło powiedział about 1 year later:

    Ruby i Python jako dynamiczne języki (bardzo) wysokopoziomowe mają trochę inne zastosowanie niż niskopoziomowy C/C+. Zależy co cię interesuje, czy pisanie sterowników, czy bardziej ogólne rzeczy. Np. są wersje Pythona i Ruby, które potrafią generować kod CLR dla .NET lub bytecode JVM Javy. Więc używając tej samej, prostej składni, można napisać aplikację webową, skrypt systemowy, aplikację desktopową, aplikację dla .NET lub JVM. Nie wiem co niby ciekawego w C? Pisze się trudniej, dłużej, składnia jest ma lo porywająca. Jeśli chodzi o ciekawość, to stawiałbym na Ruby. To bardzo ciekawy język o dynamice kompletnie poza zasięgiem C+.

  14. Avatar rsz powiedział about 1 year later:

    C/C+ nie służą tylko do pisania sterowników, nie wprowadzaj ludzi w błąd. W C/C++ napisana jest jak dotychczas większość kodu, który ludzie w ogóle na co dzień używają (np. takie przeglądarki netowe).

    A czemu C/C++ miałby być mniej interesujący od Ruby’ego? I czemu wg Ciebie dynamika jest nieosiągalna? Wszystko można zaimplementować w C/C++. Łącznie z dynamiką. Owszem, wymaga to często bardzo wyrafinowanych, często nawet karkołomnych konstrukcji. I to właśnie jest często ciekawe – choć to rzecz gustu. Albo metaprogramowanie templejtami… ach, poezja ;)

    No i trzeba jeszcze wspomnieć, że jeśli ktoś ma na celu pisanie szybkiego kodu, to ma do wyboru praktycznie tylko C/C++ lub fortrana.

  15. Avatar rsz powiedział about 1 year later:

    I skąd wiesz, że grono.net po przepisaniu na pythona działa szybciej niż wersja w Javie?

  16. Avatar Jarosław Zabiełło powiedział about 1 year later:

    Teoretycznie to wszystko możesz sobie napisać i w assemblerze. Są tacy dla których i to będzie “poezją”. Jak ktoś lubi karkołomne konstrukcje, to będzie ich bronił. Ja tam wole prostotę i czytelność. Jak nie muszę, to oszczędzę sobie użerania się z porąbaną składnią takiego C++ lub Javy. Templaty C++ poezją? Spróbuj tą “poezję” debugować jak się coś powali. Powodzenia.

    Ruby daje more fun i umożliwia większą produktywność co zostało obnażone w tym wyzwaniu, gdzie poległa Java i C++ jako języki w których rzekomo “pisze się lepiej i szybciej” niż w Pythonie czy Ruby.

    Co do grono.net to (jak masz tam konto) przeszukaj ich zasoby. Czytałem w środku o problemach jakie były z Javą.

  17. Avatar rsz powiedział about 1 year later:

    Tylko że nie przedstawiłeś wersji w Javie ani C++, więc nie możesz powiedzieć, że poległy…

    Składnia C++ jest spójna (poza kilkoma subtelnymi niejednoznacznościami), acz skomplikowana. Składnia Javy jest spójna i prosta. Czemu twierdzisz, że są “porąbane”?

    Co to znaczy “more fun”? Czy jeśli wódka daje “more fun” niż Ruby – co IMHO oczywiste :)))) – to znaczy, że jest od niego lepsza?

    Jakieś konkrety odnośnie grono.net? Nie mam u nich konta.

  18. Avatar zxc powiedział about 1 year later:

    Hoho… widzę że się dyskusja ostro poruszyła…:D

    Chociaż fakt jedno i drugie ma swoje zalety (oraz wady) tylko zastanawiam się teraz czy da się uczyć dwóch języków programowania równolegle…. hmmm…

    Bo póki co to nadal nie wiem który by lepiej mi pasował… :)

  19. Avatar Jarosław Zabiełło powiedział about 1 year later:

    Oczywiście, że poległy. To był challenge, który został przyjęty. To nie ja miałem te wersje przedstawić ale ci co twierdzili że da się “lepiej i szybciej” pisać w Javie niż w Ruby czy Pythonie. Ani lepiej ani szybciej jak się okazało w tym wypadku. A jeśli to był przykład trudny dla Javy to trzeba było się nie zgadzać na wyzwanie ale od razu protestować.

    Co do more fun, to z tym jest tak jak z jedzeniem owocu którego nie znasz. Musiałbyś trochę poprogramować w Railsach aby to poczuć. W kilka linijek zrobisz to co w innym wypadku musiałbyś klepać w dziesiątkach/setkach linii.

    Co do Javy. Tak, uważam, że ma kiepską składnię. Brak przeciążania operatorów, bardzo długie nazwy metod, brak transparentnych akcesorów. Już chyba C# ma lepszą.

    zxc: weź ty się obudź. W dzisiejszych czasach znajomość kilku języków programowania to nie luksus, to mus.

  20. Avatar rsz powiedział about 1 year later:

    Brak przeciążania operatorów to kwestia semantyki, a nie składni. Długie nazwy metod to kwestia designu bibliotek std, a nie składni. Brak “transparentnych akcesorów” to kwestia dyskusyjna, np. Fowler uważa, że akcesory to w ogóle zło.

    Gdzie masz kody w kilku liniach, co by zajęły w C++/Javie kilkaset??

  21. Avatar Jarosław Zabiełło powiedział about 1 year later:

    Chcesz kolejne wyzwanie? :) Napisz kod klienta i serwera SOAP w C++ oraz Javie. Zobaczymy jaki kod będzie prostszy i krótszy. Podejmujesz wyzwanie?

  22. Avatar rsz powiedział about 1 year later:

    A masz odpowiedni kod w Rubym czy Pythonie? Chodzi o pełną, poprawną implementację. Wyzwanie może być całkiem dobre, bo to nie jest takie typowo “skryptowe” zadanie, gdzie zasadniczo – przyznam Ci oczywiście rację – w Rubym czy Pythonie pisze się szybciej i krócej.

  23. Avatar Piotr powiedział about 1 year later:

    @rsz : znowu dałeś się wpuścić w maliny nawet w PHP (którego nie cierpię ) da się to napisać w ciągu 10-15 minut :) . patrz url ;) . C/C++ jest dobry tylko to problemów klasy “Hard Real Time” np. konkursów ACM,biblotek systemowych lub pisania rozszerzeń do języków skryptowych :).

    Do reszty Java/C# lub Ruby/Python .

  24. Avatar L powiedział about 1 year later:

    Jak tak się tak prześcigacie w tych porównaniach, to ja mam propozycję prawdziwego killera. Napisać aplikację która poszukiwała by wzoru funkcji na podstawie tabeli danych (czyli x i f(x)). Nie chodzi tu o jakiś przybliżanie wielomianem tylko o wzór postaci sin( log(x) )^ 2 – 3x . W lispie to banał, w rubym pewnie też by się dość prosto dało, ale w javie czy C++ to myślę, że było by 10 razy więcej kodu :) W zasadzie nawet ciężko mi sobie wyobrazić jak się zabrać za to Javie. Jak ktoś przedstawi wersje w jakimś języku to ja dodam wersje w Lisp :) Dla nie obeznanych osób z tematem podam, że można wykorzystać algorytm genetyczny lub metodę wyżażania lub metodę gradientową. W sumie całość sprowadza się do wygenerowania na wstępie jakiegoś losowego wyrażenia (lub kilku) i potem modyfikując je można sprawdzać czy generują mały błąd. Moim zdaniem ciekawy temat ponieważ pokazuje możliwości samego języka a nie możliwości bibliotek, frameworków itp.

  25. Avatar Masz powiedział about 1 year later:

    Patrze na tą dyskusję troche z innej perspektwy. Nie jako programista, ale jako inżynier systemu/projektant systemów telekomunikayjnych. Nie jestem pasjonatem programowania, patrze na język programowania jako na narzędzie (jedno z wielu) dzięki któremu dostarcza się PRODUKT. Uwierz, z tej perspektywt C++/Java bardzo zyskują. 1)Performance 2)Solidne platformy, rozwijane od wielu lat, stabilne, rozwijane przez duze koncerny, co do ktorych mozna liczycz na stały maintenance. 3)Rozbudowane i stabilne biblioteki ktore okrzepły już po okresie scierania sie milionow idei i pomysłow jak to się ma zwykle z nowymi cool jezykami/frameworkami. 4)Rzesze programistow, którzy znają dobrze C++/Jave i związane z nią platformy. Duża firma chce mieć pewność, że produkt który zostanie jej dostarczony, będzie mógł być rozwijany z tą samą jakością i że bez trudu będzie można znaleźć do tego ludzi z potwierdzonymi kompetencjami.

    Na prawde, są zastosowania (szczególnie związane z oprogramowaniem o krytycznym znaczeniu dla klienta) gdzie C++/Java jest nie do pobicia i przez wiele następnych lat tak zostanie.

  26. Avatar L powiedział about 1 year later:

    Ale w tej dyskusji zupełnie nie o to chodzi. Zgadzam się w 100%, że jeśli chodzi o wsparcie to Java czy C++ wymiatają jak na razie. Dyskusja ma natomiast wyłonić język w którym można napisać coś najszybciej i najprzyjemniej :) Jeśli chodzi o Java, to jako ‘projektant’ powinieneś wiedzieć, że w Javie już dawno przekroczono wszelkie granice zdroworozsądkowe. Wymagania rynku są coraz większe i potrzeba potężniejszego języka niż Java, po to żeby pisać szybciej i krócej. Zauważ, że jeśli w Rubym można napisać 2 razy krótszy kod (niektórzy twierdzą, że nawet 10x) to do napisania tego kodu potrzebujesz mniejszej ilości programistów. Mniej kodu oznacza lepsze panowanie nad kodem przez zespół. Co za tym idzie późniejsze refaktoryzacje są dużo prostsze. Może właśnie dlatego Ruby z roku na rok zdobywa olbrzymią rzeszę użytkowników, bo potrzebują czegoś więcej niż Javy. Nie zastanawiało Cię dlaczego sam Sun wspiera JRuby?

    Z C/C++ sprawa wygląda trochę inaczej. Języki te na pewno nie umrą szybko bo zastosowanie jest ich trochę inne. C stosuje się i będzie nadal stosować do pisania sterowników/jąder OSów, natomiast C++ świetnie się sprawdza do pisania bibliotek systemowych (i nie tylko), aplikacji w urządzeniach embedded itp. Nie wiem czy zauważyłeś ale w C++ rozwinęło się metaprogramowanie, myślisz, że dlaczego? Może dlatego, że programiści wolą operować na wyższym poziomie abstrakcji i może dlatego, że chcą mieć namiastkę tego co daje dynamiczny język programowania?

  27. Avatar Masz powiedział about 1 year later:

    No jeśli rozważać takie akademickie zagadnienie: “w którym języku pisze się szybciej i przyjemniej” to Python i Rubby z pewnością biją na głowę C++/Javę. Z drugiej strony takie pytanie jest pochodną “metapytnia”: “Którego języka użyć” :-). I tu w wielu obszarach (tele)informatyki C/C++ i Java jest zdecydowanie lepszym rozwiązaniem.

    W dużych (>50 000 men hours) teleinformatycznych projektach, w których brałem udział, które prowadzone były za pomocą cieżkich RUPo podobnych metodyk kodowanie zajmowało okokło 10% czasu przeznaczonego na projekt. W tym kontekście “szybkość pisania” nie jest czynnikiem krytycznym (chodź krótki, elegancki kod to mniej błedów, łatwiejszy maintenance, co jest dużym plusem Ruby/Python). Chce tylko pokazać, że są rejony informatyki, gdzie takie pytanie zacytowane na początku postu nie ma sensu. JEst wiele innych czynników, które determinują wybór języka.

    Co do JRuby vs Java to pewno, że wygląda to obiecująco (jak i inne pomysły typu Jython, groovy itp). Ale to pieśń przyszłości. Przyklad z mojego podwórka: umowa pomiędzy operatorem a dostawcą platformy: maksymalny czas w którym platforma nie działa (wliczając w to planowane restarty związane z upgradem softwaru, korekcjami) to 6 minut w ciągu roku. Jeśli ten czas zostanie przekroczony, to dostawca płaci (B.Wysokie) kary proporcjonalne do długości “przestojów”. Wyobrażasz sobie, że porzuca dobrze znaną (ze swoimi plusami i minusami) technologię i rzuca się w najbliższym czasie na JRuby?

  28. Avatar L powiedział about 1 year later:

    No tak, ale weź pod uwagę, że Java też zdobywała powoli swoją popularność. Każde narzędzie potrzebuje czasu i Ruby ma jeszcze dużo czasu przed sobą. Najpierw musi udowodnić, że nadaje się dobrze do mniejszych zastosowań (to chyba już udowodnił) a potem będzie zdobywał większe rynki :) Java ma także tą przewagę, że wirtualna maszyna Javy jest zainstalowana na większości komputerów. Z drugiej strony zobacz na takiego LISPa, bardzo mało osób go używa, a jednak taki AutoCAD w dużej części został napisany właśnie w Lispie. Ktoś kiedyś nawet powiedział (stara wypowiedź dotycząca C i fortrana), że każdy wystarczająco duży projekt zawiera powolną nie zgodną ze specyfikacją, pełną błędów implementacje połowy Lispa :) Moim zdaniem Ruby doskonale nadaje się dla startupów. Małe firmy chcąc dogonić konkurencje często wybierają języki, które zapewnią im dużą szybkość wdrażania i pogoń za konkurencją w innym wypadku zawsze będą w tyle :)

    Jednak wracając do tematu :) mówimy nie o możliwości wdrażania danego języka w każdy projekt ale o tym jak i w jakim czasie da się w nim coś wykonać. Główne czynniki to CZAS i ROZMIAR KODU, nic więcej :)

    Jeśli masz przykład jakiegoś kodu, którego nie dało by się w krócej napisać w Rubym to wrzuć, zwolennicy Rubiego chętnie z nim zawalczą :)

  29. Avatar Piotr powiedział about 1 year later:

    “Nie jako programista, ale jako inżynier systemu/projektant systemów telekomunikayjnych.” – tu chyba tylko C/C++ bo to są Systemy Czasu Rzeczywistego .

    Ruby ma największe szanse w nawracaniu PHPowców o ile będzie dostępny dobry hosting w Polsce .

  30. Avatar dPeS powiedział about 1 year later:

    Czołem, chciałbym zapytać czy autor pomysłu na konkurs brał udział w jakimś dużym projekcie informatycznym (zespół 5 ludzi, min 1 rok) ?

  31. Avatar alex powiedział about 1 year later:

    Ja proponuje teraz sprawdzic poprawnosc skladniowa programu w Pythonie przed jego uruchomieniem.

    Nikt z was nie zwrocil uwagi na to, ze program w Java czy C++ juz na etapie kompilacji wskaze bledy czy ostrzeze przed instrukcjami z watpliwym sensem.

    A Python czy Ruby?

  32. Avatar Jarosław Zabiełło powiedział about 1 year later:

    Python ma do tego pyLint. Potrafi nawet wyłapać konstrukcje niezgodne z konwencjami PEP 8. W przypadku Ruby podobną robotę stara się wykonywać NetBeans 6.

  33. Avatar Maciej Gorywoda powiedział about 1 year later:

    Ciekawa dyskusja :) Trafiłem tu szukając stron porównujących języki skryptowe, bo mam w pracy spory system do raportowania błędów – JIRA – i chciałbym podłączyć pod niego jakiś język skryptowy, by łatwiej przeprowadzać niektóre co bardziej skomplikowane operacje. Na razie myślę o Lua, albo Groovy, być może też JRuby. Co do wyzwania rzuconego na początku dyskusji – dziwię się, że nikt nie próbował napisać tego w Javie, bo nie wydaje się to zbyt skomplikowane – biblioteki w Javie do łączenia się z internetem i do baz danych są już od lat… W C++ rzeczywiście byłoby trudno, ale za to C++ wydaje mi się jedynym rozsądnym wyjściem gdybym miał pisać program wykonujący wiele skomplikowanych obliczeń: symulacje fizyczne, czy ekonomiczne, sztuczna inteligencja, grafika 3D, itp. Jarosławie, fajny awatar.

  34. Avatar duce74 powiedział about 1 year later:

    Szczerze mowiac ,rowniez znalazlem sie tutaj ,bo chcialem znalezc strony porownujace jezyki Skryptowe. w/g mnie Jarek Zabiełło jest ograniczony jak ten jego Ruby. Sam pracuje jako programista JAVA/PHP (gry internetowe) i znam roznice miedzy jezykami skryptowymi i kompilowanymi (w javie to kwestia sporna). Podany przez Ciebie przyklad jest calkowiecie stronniczy i niesprawiedliwy. Sprobuj napisac program w Pythonie zmieniajacy standarodowe przerwania w procku. W C to sa 3 minuty. Oczywistym jest ,ze jezyki skryptowe sa lepsze do analizy tekstow (bash+awk) i do tego zostaly stworzone. Stwierdzenie ,ze lepszy jest żuk od mercedesa s-klasy bo mozna na nim przewiezc kanape jest rownie trafne. Widac po sposobie rozumowania autora ,ze nie jest gornolotnym informatykiem, Jego pojecie o inzynierii oprogramowania jest marne. Jezeli chce porownywac jezyki na podstawie skryptow 20-linijkowych to gratuluje mu poziomu. Prawda jest taka ,ze jak ktos juz zaznaczl: kodowanie to tylko kilka % projektu. Jezeli chcesz napisac szybko projekt kozystasz z PHP,ROR ,jezeli chcesz stworzyc bezpieczny i wydajny projekt piszesz w J2EE ,ASP.NET. Nie mowie tutaj o aplikacjach desktopowych ,gdzie jezyki skryptowe to totalna porazka. Oczywiscie jak pisalem ,programuje w jezykach i takich i takich ale mam swiadomosc tego ,ze jezyki skryptowe sa tylko narzedziem, chociaz np. w Linuxie bash jest podstawowym elementem systemu. Ja mam wyzwanie dla Autora, nie wiem czy sie go podejmie. Proponuje stworzyc Komunikator internetowy (w javie jeden dzien pisania)z prostym GUI. Moze cos innego? Aplikacja graficzna do obslugi np. lotniska (selekcja bagazy ,bookowanie lotow, sprawdzanie polaczen, generowanie opoznien w XML i umieszczanie tego na stronie). a moze jakies inne “wyzwanie”? Nie boje sie niczego ,co autor moze mi powiedziec JA bede kozystal z PHP/JAVA lub J2EE/J2SE. Jezeli dodam do tego umiejetnosc pisania w C++/assemblerze to moge powiedziec ,ze umiem napisasc duzo. Od web serwisow opartych na SOAP,RMI,XML,XSLT,SOCKET,SERVLET,JSP (moj aktualny projekt) do pisania sterownikow dosowych (moje projekty na studia). Kazdy jezyk jest do czego innnego ale nie mozna ujmowac JAVIe nic,poniewaz takiego wsparcia dla nowoczesnych technologii,frameworkow,dobrych IDE mozliwosc kozystania z UML, czy komponentow nie daje nic poza .NET-em. prosze o kontakt duce74gmailcom autora,chetnie sie z nim sprobuje w programowaniu.

    Nastepna jest kwestia taka ,ze zeby sie nauczyc javy potrzebujesz 2,3 lat ,zeby sie nauczyc C++ potrzebujesz 5,6 ,zeby napisac taki banalny Skrypt jaki przedstawil autor w ROR-ze musisz sie uczyc 2 miesiecy. Nic dziwnego ,ze ktos probuje sie dowartosciowac i chce porownac sie z powaznymi programistami. DLA JASNOSCIBARDZO SZANUJE PYTHONA (najlepszy jezyk skryptowy) , rozumiem zwoloennikow ROR ale nie rozumiem takich ludzi jak Jaroslaw Zabiello ,ktorzy probuja udowodnic swoja wartosc przed innymi jego typu.

  35. Avatar Jarosław Zabiełło powiedział about 1 year later:

    duce74: W zasadzie, to powinieneś mieć zabanowany wpis za głupie ataki ad hominem. W intencji autora nie było napisanie jakiegoś kompleksowego porównania języków dynamicznych z językami systemowymi, ale o podważenie buńczucznej tezy jaka padła kilka w różnych dyskusjach o wyższości tych drugich jako wygodniejszego narzędzia do tworzenia dowolnej aplikacji. Rzuciłem zatem wyzwanie tym mądralom, aby napisali taką przykładową aplikację jak wyżej. Czy dobrałem tendencyjny przykład? Jak najbardziej! Moi oponenci, gdyby mieli więcej oleju w głowie, to by odrzucili to wyzwanie, gdyż wiadomo, że do pewnych zadań jedne języki są lepsze od drugich. Ale oni to wyzwanie przyjęli no to nic dziwnego, że polegli. Zrobili to więc na własne żądanie, a ty pokazałeś tylko to, że nie umiesz czytać ze zrozumieniem.

    Co do aplikacji desktopowych w jęz. dynamicznych, to zobacz np. SPE, niezły IDE do Pythona napisany całkowicie w Pythonie. Albo lepiej, zobacz IronPython który, zdaniem niektórych firm, jest znacznie lepszym wyborem do tworzenia aplikacji w technologii .NET niż VB.NET czy C#. Tak samo JRuby pozwala mi na pełny dostęp do bibliotek Javy bez pokracznej składni Javy. Zaś co do samego C, zobacz jak łatwo używa się C w Ruby. Nie wspomnę o IronRuby, Jython czy języku takim jak Erlang, który do aplikacji sieciowej wielkiej skali nadaje się wcale nie gorzej od Javy czy .NET.

  36. Avatar duce74 powiedział about 1 year later:

    Dobra naleza Ci sie przeprosiny. Popostu nie tylko ja odnioslem wrazenie ,ze Twoj stronniczy przyklad nie jest skierowany do ludzi ,ktorzy powinni go czytac. Przepraszam Cie natomiast ,ze ‘najechalem’ na Twoja osobe ,zamiast na przyklad. Co do Twojej drugiej czesci ostatniego posta: Sama skladnia jezyka nie jest wazna. Iron python ,czy JRuby to wlasnie ulatwienie dla ludzi ,ktorzy umieja skladnie tych jezykow a chca programowac na INNYCH PLATFORMACH PROGRAMISTYCZNYCH – wlasnie powaznych .NET i J2SE/J2EE. Co do w/g Ciebie pokracznej skladni javy – to jest skladnia ,w ktorej przyjeto konwencje najpopularniejszych jezykow programowania. Porownaj ilu ludzi (powaznych programistow ale i nie tylko) pracuje w C/C++/JAVA/C# gdzie wlasnie taka skladnia jest przyjata a ilu pracuje w Ruby. Ona sie rozwija od ponad 20 lat i wiekszosc programistow ja kocha. Ja widzac kod w javie czytam jak z ksiazki ale to kwestia ilosci h spedzonych nad zrodlami.

    Jezeli chodzi o rzeczy typu SPE to jest rowniez ulatwienie dla programistow nie znajacych alternatyw dla swojego jezyka.

    Java (jak i C#) maja wspaniala przenoscnosc (m.in. watki zamiast procedur) sa szybkie, maja bardzo dobre zabezpieczenia i klasy wyjatkow, bardzo dobrze wspomagaja wspolbierznosc, maja bardzo duzo bibliotek napisanych przez doswiadczonych programistow. Maja olbrzymie mozliwosci ,jezeli chodzi o wybor ide i narzedzi testowych/frameworkow. Naprawde nigdy jezyki skryptowe nie dogonia ich w znacznej wiekszosci zadan. C++/Assembler pozostanie przez wiele lat w firmach programujacych systemu wbudowane ,gdzie przenosnosc nie jest wazna ,jak i przy waznych projektach jak pisanie kompilatorow/bibliotek/sterownikow/gier.

    Do tej pory domena jezykow skryptowych byly web serwisy. Ale w dzisiejszych czasach kazdy powazny serwis jest pisany w J2EE lub ASP.NET ,ze wzgledu na wsparcie dla technologii jak CORBA,SOAP,WSDL niezliczone frameworki , mozliwosc pracy w sieciach klastrow, oraz ze wzgledow bezpieczenstwa/wydajnosciowych.

    Jezeli ktos jest hobbysta i pisze dla wlasnej przyjemnosci moze bawic sie w tym ,co mu sie podoba. Ale informatyk pragnacy sie zrealizowac w swojej dziedzinie musi znac technologie wykorzystywane przez powazne firmy (i nie mowie tu o firmach typu “grono” tylko raczej “plusgsm” ,”idea”,obsluga bankow i wyszukiwarek internetowych.

    Po raz kolejny dodam ,ze nie jestem przeciwnikiem jezykow skryptowych ,gdyz do niektorych zadan sa najlepsze. Jednak podwazanie potegi wiodacych jezykow programowania z najlepszym wsparciem i wykorzystywanych w najbardziej odpowiedzialnych projektach jest przesada.

    Pozdrawiam i jeszcze raz przepraszam za wczorajszy post.

  37. Avatar Jarosław Zabiełło powiedział about 1 year later:

    Owszem, podważam “potęgę wiodących języków”, ale to nie znaczy, że podważam jakość i dojrzałość bibliotek dla platform .NET czy J2EE. Przecież mogę do nich uzyskać dostęp z poziomu języków dynamicznych – Rubiego (JRuby, IronRuby) czy Pythona (IronPython i Jython). Więc nie widzę tu jakiejś szczególnej wyższości np. C# nad IronPythonem. Są firmy pracującą w .NET gdzie 95% kodu jest w IronPythonie a nie C#. Przypadek? Nie. Wygoda i większa szybkość tworzenia kodu.

    Co do estetyki, to składnia takiej Javy jest daleka od doskonałości. Brak przeciążeń operatorów, nagminnie stosowane koszmarnie długie (wielbłądzie) nazwy metod i zmiennych, konieczność tworzenia (często bezużytecznych) konstrukcji na wyrost, toporność w konieczności definiowaniu każdej zmiennej którą i tak potem często trzeba rzutować na inny typ (przy czym można to zrobić błędnie a kompilator tego nie wyłapie!) Ech… Jeśli ktoś to kocha, to proszę bardzo. Ale założę się o orzechy przeciwko granatom, że trochę pracy w Pythonie i Ruby a niewiele zostanie z tej miłości.

    Poruszyłeś też kwestię testowania kodu jako przewagę języków mainstreamu, a przecież to języki dynamiczne mają tu przewagę. Znacznie kompilatora jako kontrolera jakości kodu jest niewielkie, to, co się liczy to testy jednostkowe. A te znacznie łatwiej tworzy się w językach dynamicznych. To dla nich znacznie bardziej naturalne środowisko pracy. Gdzie tu jest więc ta przewaga języków głównego nurtu? Że niby mają wiele IDE? Ruby też ma świetny IDENetbeans 6, InteliJ, Aptana RadRails; Python też ma świetny WingIDE Pro, Komodo IDE, SPE. Nawet “koszmarkowy” ;) PHP ma bardzo świetny IDE – Zend Pro. I nie trzeba lepszych, bo jęz. dynamiczne nie potrzebują aż takiej ingerencji w pracę programisty jak C++, Java czy C#.

    Nie lekceważyłbym języków dynamicznych, w niektorych ciężkich zastosowaniach biznesowych (tak, nie chodzi mi o banalne projekty), są znacznie lepsze. Np. nie wiem, czy wiesz ale całe Google w dużej mierze oparte jest na Pythonie. Wiem to, bo rozmawiałem z nimi w centrali w Dublinie. Pythonowy serwer aplikacyjny Zope jest także używany w dużych przedsiębiorstwach, NATO, NASA, organizacje rządowe itp.

    Co do wielowątkowości i współbieżności to myślę, że Java poszła raczej w złym kierunku. Programowanie i debugowanie aplikacji wielowątkowych jest trudne. Bardziej podoba mi się to co proponuje Erlang ze swoimi super lekkimi, izolowanym procesami. Jest to niesamowicie skalowalny i stabilny język wykorzystywany w oprogramowaniu telekomunikacyjnym (tam jest w ogóle wymagany inny, znacznie wyższy poziom niezawodności niż w innych dziedzinach). Ericson ma przestoje rzędu kilku minut na rok w swym systemie opartym na Erlangu (miliony linii kodu).

  38. Avatar duce74 powiedział about 1 year later:

    napisalo do Ciebie okolo 20 osob i wiekszosc z nich uwaza ,ze nie masz racji. Wyjasnij mi prosze teraz dlaczego Twoja swiatla wiedza nie jest popierana przez najwieksze koncerny (no ok jest stosowana ,moze nie w takim stopniu jak J2EE i ASP.NET ale spotykana). Dlaczego na uczelniach wyzszych tysiace madrych glow stawiaja na jezyki kompilowane, dlaczego pracodawcy szukaja programistow jezykow ,za ktorymi ja stoje? Czy nie uwazasz ,ze walczysz z wiatrakami? Znajdujesz przyklady (wyjatki potwierdzaja regule) stosowania jezykow skryptowych do zadan przeznaczonych (z definicji) do jezykow kompilowanych (do binarek ,czy bajtkodow). Nie bedziemy szukac daleko.

    Podaj mi aplikacje mogace konkurowac z wymienionymi ponizej:

    multimedia: mplayer,allplayer,xmms,winamp

    programowanie: Netbeans,Kdevelop,MS Studio,Eclipse (o kompilatory/debugery nie pytam)

    Systemy operacyjne: (bez pytan, ulomnosc jezykow skryptowych)

    komunikatory: irssi,xchat,mIrc,gaim,tlen,gg,kadu

    przegladarki WWW: firefox,ie,opera

    menadzery okien: gnome,explorer,kde,enlightment

    Gry: Warcraft 2(jeszcze nie wydana),Heroes CS,NFS Undergraund

    Wyjasnij mi dlaczego nie pisze sie ich w jezykach skryptowych? Oczywiscie sa biblioteki do pythona pozwalajace obslugiwac grafike/dzwiek/sockety ale sa one marna kopia (czesto napisana w innych jezykach) tego co oferuja Ci kompilowane jezyki programowania.

    Powiedz mi , dlaczego zadna z firm rozwijajacych powyzsze aplikacje nie pisze ich w Pythonie? Bo jest nie dojrzaly? A dlaczego nie pisali go w Perlu?

    A jezeli chcesz mi powiedziec ,ze w .Net ,czy JAVA jest mozliwe wykorzystanie skladni Pythona,czy Ruby – to tylko swiadczy o potedze tyche platform i ich bibliotek. Poza tym to dalej pozostaje .NET i JAVA. Jezeli chcesz napisz sobie parser ,ktory bedzie zamial Ci skladnie Pythona na JAVE. Ostatecznie bedzie to jednak JAVA. Poza tym ja i wiekszosc ludzi woli skladnie javy niz pythona. To ,ze NetBeans wspiera Ruby to tylko plus dla NetBeansa ( IDE JAVY!!!) Nie dla Ruby.

    Powiedz mi jeszcze jedna rzecz. Czy umiesz programowac w Javie ,.Net i C++? Nie pytam o assemblera. Nie chodzi mi tu o pisanie prostych skrypcikow tylko o prawdziwe programy? Ja umiem pisac i w jezykach skryptowych (Bash/AWK, niestety PHP) oraz kompilowanych (JAVA,C++). I dlatego moge powiedziec obiektywnie ,ze zastosowanie tych pierwszych jest ograniczone i mozna ich uzywac ,jezeli stawiasz wyzej szybkosc wykonania nad jakoscia (Web Serwice) lub jezeli piszesz proste skrypty systemowe. Innych rozwiazan dla nich nie widze ,a biblioteki powstaja dla ludzi ,ktorzy nie chca sie uczyc jezykow dedykowanych do jakichs rozwiazan i uwazaja ,ze ich jezyk jest najlepszy.

    Jestem mlody i naprawde najwazniejsze jest dla mnie ,zeby byc dobrym programista/projektantem. Gdybym widzial przyszlosc w tych jezykach (oczywiscie maja przyszlosc w swoich zastosowaniach) to bym sie ich uczyl. Mam swierzy umysl i oceniam sprawy obiektywnie. W przeciwienstwie do Ciebie.

    Co do wielowatkowosci w JVM troche nie masz racji:). Nie bylo mozliwosci wykorzystania procesow ,poniewaz nie wszystkie systemy operacyjne pozwalaja na prawidlowa ich implementacje przez JVM. Wykorzystanie wielowatkowosci bylo jedynym mozliwym rozwiazaniem ,ktore zapewnia przenosnosc kodu (polecam poczytac o tym troche). Poza tym watki sa tworzone szybciej od procesow i praktycznie wszystkie trendy we wspolczesnej informatyce ide w strone ich stosowania. Sa szybsze , dlaje sa czescia programu glownego co zapewnia im komunikacje z calym programem. Istenie mozliwosc zapamietania stanu obiektow miedzy wywolaniami poszczegolnych watkow ,co ma zastosowanie w J2EE, gdyz nie istenieje potrzeba tworzenia nowych obiektow miedzy wywolaniami zadania na serwerze. Super lekkie procesy nadal beda procesami z oddzielnymi segmentami pamieci kodu i danych ,oraz stosow (polecam architekture komputerow i assemblera) i mimo ich super lekkosci beda mniej wydajne od watkow.

    Co do dynamicznego typowania, to ma zastosowanie tylko w szybkim wytwarzaniu kodu. Rzutowanie jawne ma wlasnie na celu ochrone przed bledami ,a nie je powoduja. Dlaczego systemy napisane w ADA95 nie pozwalaja nawet na przypisanie float-a do int-a? zeby powodowac bledy? Nie! poniewaz tego jezyka stosuje sie w programowaniu satelit, sond kosmicznych ,czy sprzetu wojskowego , gdzie nie ma prawa wystapic rzaden blad.

    Kazdy jezyk ma swoje zastosowanie, zastosowanie jezykow skryptowych jest jasne. I nie wmawiaj ludziom ,ze jest to lek na wszelkie zlo. Jezeli umiesz programowac w innych jezykach to dziwie sie czemu tego nie widzisz. jezeli nie umiesz – rozumiem. Kazdy broni swojego.

  39. Avatar Jarosław Zabiełło powiedział about 1 year later:

    Te wpisy robią się chyba zbyt długie jak na komentarz w blogu… Poruszanych jest trochę za wiele wątków. Może lepiej przenieśmy to na pl.comp.lang.python?

    Postaram się skracać. Piszesz że koncerny wolą .NET i Javę. Dlaczego zatem jeden z najpotężniejszych na świecie, Google, postawił na Pythona, a nie na C# czy Javę (choć Javę też trochę używa). Dlaczego Ericson cały swój system teleinformatyczny oparł na jakimś dziwnym Erlangu a nie C++ czy Javie? Proste, Erlang jest lepszy w aplikacjach tej klasy i tej skali.

    Dlaczego jednym z najbardziej rosnących języków jest Ruby, a nie Java czy C#? Dlaczego Sun, tak bardzo związany zawsze z Javą, zaczął inwestować w JRuby? Dlaczego tak wielu czołowych postaci ze światy Javy zachwala Rubiego i ostro krytykuje Javę? To przecież głównie oni, a nie typowi programiści Rubiego, robią ten cały szum wokół wad czy “braku przyszłości” dla Javy. Dlaczego jest tak wiele osób “nawróconych” z Javy do Rubiego, a nie odwrotnie? Dlaczego Microsoft promujący odwiecznie tylko swoje zamknięte technologie i rozwiązania zaczął inwestować pieniądze w open source’owego IronPythona?

    Piszesz, że “większość ludzi woli składnię Javy, a nie Pythona”? Równie dobrze można powiedzieć, że “Miliony much jedzących gówno nie może się mylić. Jedz więc gówno.” Poza tym przeciwstawiłeś Javie zły język. To nie Python, ale Ruby robi zamieszanie w kręgach javowców jak o tym napisałem wyżej. Poczytaj sobie lepiej blogi Bruce Eckela, Martina Towlera, albo zobacz klasyczną już Beyond Java. Z nimi sobie dyskutuj a nie ze mną. To są ludzie z kręgów Javy, więc może bardziej coś do ciebie dotrze. Poszukaj dyskusji o Ruby na portalach Javowych, n p. polskim jdn.pl.

    Uczelnie? Zależy jakie. Na amerykańskim MIT wykładany jest Python. Ciekawe, co? Wiadomo, że uczenie ludzi jako pierwszego języka C# czy Javy jest głupim pomysłem. One wymagają za dużo pojęć do opanowania od razu na sam początek; pojęć i wiedzy niewiele mającej wspólnego z samą ideą programowania obiektowego. Najlepszy język na początek dla studentów (z których i tak tylko garstka później zawodowo zajmie się programowaniem) to Ruby albo Python. Oba są zwięzłe i czytelne i od razu można skupić się na problemie a nie na walce z konfiguracją jakiegoś “byczego IDE”, bo bez czegoś takiego to nie da się przecież normalnie pracować. ROTFL!

    Lansowane wcześniej (przez SUN) przekonanie, że “Java jest dobra na wszystko” upadło. Myślę, że można zauważyć pewien trend, którego nie widzisz ze swoje zamkniętej perspektywy pehapowo-javowo-dotnetowej. Języki dynamiczne wdzierają się coraz mocniej w szeregi starych, opasłych technologii.

    Odnośnie twej pochwały wielowątkowości, to widzę, że nie masz bladego pojęcia o procesach Erlanga. To nie są żadne kosztowne procesy uniksowe. Procesy Erlanga są bardzo szybkie i lekkie. Są tworzone bardzo szybko. I są o niebo bardziej bezpieczne dla aplikacji. Padnięty proces nie ma żadnego wpływu na resztę aplikacji podczas gdy błędnie działający wątek może powalić całą aplikację na kolana. Kompletnie izolowane lekkie i szybkie procesy Erlanga gwarantują znacznie większą niezawodność systemu. Nie ma żadnej współdzielonej pamięci, wyścigów, zakleszczeń i innych tego typu problemów.

    Poza tym wątki są krytykowane też za to, że wprowadzają duży poziom niepotrzebnej komplikacji (próbowałeś kiedyś debugować błędnie działający wątek?) Programowanie współbieżne oparte na wątkach może być traumatycznym doświadczeniem.

    Widzę też, z samej terminologii jaką używasz, że masz stare, dosyć ciasne poglądy. Mógłbyś wyjaśnić mi co to znaczy “język skryptowy”? Od ilu linijek kodu można mówić o programie, a do ilu jeszcze mówimy o skrypcie? Czy Erlang to też dla ciebie język skryptowy?

  40. Avatar duce74 powiedział about 1 year later:

    nie podales mi alternatyw dla programow ,ktore wymienilem. Caly swiat sie myli a garstka nie licznych ma swiatla wiedzie?

  41. Avatar Jarosław Zabiełło powiedział about 1 year later:

    A po co? Przecież języki dynamiczne dopiero od niedawna zdobywają szerszą popularność. Poza tym pewnie nikomu nie będzie się chciało wyważać otwartych drzwi. W pewnych dziedzinach są dopracowane narzędzia i biblioteki i trudno aby to zmieniać tylko dlatego, że w “Ruby pisze się przyjemniej”.

    Choć muszę przyznać, że np. parę IDE napisanych w językach wysokopoziomowych by się znalazło z ktorych chyba najbardziej spektakularny jest Emacs, który dzięki Lispowi ma znacznie większe możliwości niż te wszystkie IDE dla klikaczy razem wzięte. Z mniejszych projektów IDE są (napisane w Pythonie) SPE, Boa Constructor czy , Eric4. Jest też szybki i ładny Arachno IDE (napisany w GNU Smalleiffel’u), itp. itd.

    Podasz mi w końcu definicję “języka skryptowego”?

  42. Avatar duce74 powiedział about 1 year later:

    Koncze ta dyskusje. Jezeli ja Cie nie przekonuje to moze przekona Cie rynek:

    http://www.itjobswatch.co.uk/

    Procent pracodawcow szukajacych pracownikow znajacych:

    -Ruby – lacznie okolo 0,5% -Python – lacznie okolo 0,17% -C++ – lacznie okolo 10% -java – lacznie okolo 25% -J2EE – lacznie okolo 8 procent -.net – lacznie okolo 18%

    Kategoria “jezyki programowania” tabela ”% udzial w ogloszeniach o prace” jezyk,srednia placa,l. ogloszen,%udzial

    SQL £42,208 30910 (13.76 %)

    Java £48,361 29570 (13.16 %)

    C# £42,994 27088 (12.06 %)

    C++ £46,331 15854 (7.06 %)

    ... ...

    Python £44,872 1451 (0.65 %) Ruby £39,123 541 (0.24 %)

    Te rankingi dodatkowo naciaga fakt ,ze pracodawcy wymagaja: “programista java ,znjomosc ruby bedzie dodatkowym atutem.”

    Jezeli jestes pasjonatem i nauczyles sie najprostszego dostepnego jezyka to nie neguj przynajmniej reszty swiata.

    Pozdrawiam Pasjonata

  43. Avatar duce powiedział about 1 year later:

    Autor mnie zablokowal. Swiadczy to o braku argumentow z jego strony.

    zainsteresowanych odsylam na strone:

    http://www.itjobswatch.co.uk/

    znajduja sie tam informacje o popularnosci jezykow programowania i technologii internetowych.

  44. Avatar Jarosław Zabiełło powiedział about 1 year later:

    Nie ja cię zabanowałem ale automatyczny system antyspamowy wgrzany w Typo. Musiałem wejść do panelu, odszukać i ręcznie odblokować. Ty synek jakiś nerwowy jesteś. Miotasz się powtarzając jakieś banały. Że więcej jest ofert dla Javy czy C++? Więcej jest też ofert dla Visual Basic’a. I co z tego? Że średnio więcej płacą? Owszem – “średnio”, bo w praktyce z tym bywa często zupełnie różnie.

    To teraz czekam aż wyjaśnisz co to jest “język skryptowy”. Od ilu linijek kodu można mówić o programie, a do ilu jeszcze mówimy o skrypcie? I czy Erlang to też dla ciebie język skryptowy? I czy Google nie wie co robi stawiając na Pythona, a nie C++, dotneta, pehapa czy Javę?

  45. Avatar Maciek Gorywoda powiedział about 1 year later:

    Moim skromnym zdaniem, nazwa “język skryptowy” odnosi się do sposobu użycia, a nie do długości kodu. Język skryptowy to taki, który jest przystosowany do pisania skryptów, czyli stosunkowo niedużych programów, służących do zautomatyzowanego wywoływania funkcji w programie większym. Z reguły takie przystosowanie oznacza, że język skryptowy daje dużą dowolność – nie wymaga definiowania typów danych, pozwala na dynamiczne dodawanie zmiennych do obiektów, itp.

    Ja to widzę tak: C+, Java i C# są już pewnym standardem. Mają swoje środowiska programistyczne, pisane z myślą o pracy właśnie w tych językach, mają setki bibliotek, a rynek przyjął je jako języki do pisania dużych projektów, bo w związku z wymuszaniem pewnych standardów kodowania, ułatwiają zrozumienie kodu pisanego przez innych. W przypadku C+ dochodzi do tego kwestia szybkości: nie wyobrażam sobie programowania grafiki 3D czy systemów rozproszonych w języku interpretowanym. W innych przypadkach, serwisow internetowych, itp., byc moze rzeczywiscie Python czy Ruby moglby zastapic Jave, ale tez to nie jest tak, ze serwis napisany w Pythonie bedzie od razu o niebo lepszy od swojej wersji w Javie. Powiedzialbym, ze beda porownywalne. A prawa rynku sprawiaja, ze częściej wybierana jest Java.

    Nawiązując do mojego poprzedniego wpisu: w końcu wybrałem Groovy. Z tym, że będę go używał do zbierania statystyk z Jiry (napisanej w Javie), oraz do automatyzowania wielokrotnie powtarzanych operacji – czyli jako typowy język skryptowy. W podobnych charakterze moja firma używa Pythona – główny system pisany jest w C++, w Pythonie pisze się testy i inne skrypty.

  46. Avatar Jarosław Zabiełło powiedział about 1 year later:

    Trochę mętnie jest definiować język skryptowy jako język do pisania skryptów (bo tautologia), a skrypty jako “nieduże programy” (bo co to znaczy “nieduże”?) Jedynie uwaga o tej automatyzacji może mieć jakiś sens, ale będzie tak tylko wtedy, jeśli to jest jedyne zastosowanie danego języka. I tu bym się zgodził. Np. językiem skryptowym można by nazwać bash’a. Na pewno jednak nie można tego samego uczynić w stosunku do Lispa, Pythona, Ruby czy Erlanga. To są języki ogólnego zastosowania i potrafią znacznie więcej niż napisanie jakiego kilku linijkowego skryptu automatyzującego zadania.

    Mówiąc krótko: nazywanie Pythona czy Ruby językiem skryptowym jest błędem. Zwłaszcza w świetle istnienia ich javowo-dotnetowych implementacji (JRuby, IronRuby, Jython i IronPython). Python i Ruby to wysokopoziomowe, interpretowane języki dynamicznie i tak powinno je się określać.

  47. Avatar Jacek powiedział over 2 years later:

    Moje wrażenie jest takie że Java to coś co będzie miało swoje miejsce ale generalnie ciężar będzie sie przesuwał w stronę wyższego poziomu abstrakcji i wygody – czyli Pythona/Ruby/Groovy.

    Argumenty że Java jest lepsza bo używają jej ‘duże firmy’ no ‘więcej szukają javowców’ itd. są dla mnie po prostu śmieszne i raczej świadczą o kompleksach piszącego niż o przyszłości języków.

    Mając okazję pracować przy naprawdę dużym projekcie J2EE mam opinię że Java jest nadużywana – w większości miejsc należałoby ją zastąpić językiem wyższego poziomu (skryptowym) co radykalnie przyspieszyloby dewelopment, testowanie i pozniejsza analize kodu.

    Może Java i daje jakies większe możliwości ale z tego co widzę firmy zatrudniają studenciaków którzy tą javę ledwo znają … i męczą sie z nia produkując koszmarki które sa wpychane klientom… I nie ma tam prawie śladu żadnych możliwości które daje J2EE a których nie ma w PHP

    Efektem sa megabajty fatalnego kodu w Java …

    A mogłyby być setki kB w Java i 3x mniej megabajtow kodu w PHP

    Takie są tylko moje wrażenia bo paru latach pracy z kodem dostarczanym przez “największe światowe korporacje” w “najlepszych technolohiach J2EE” a tak naprawde pisanym przez kiepsko oplacanych studenciakow …

  48. Avatar Leszek powiedział over 2 years later:

    Czy zatem kod napisany w PHP przez tych samym “kiepsko opłacanych studenciaków” będzie już mniej koszmarny, bo jest napisany w PHP albo innym języku skryptowym? Moim zdaniem dobre opanowanie języka typu Java skutkuje tym, że później można pisać dobry w kod w dowolnym innym języku. Niestety poznanie Javy to długie miesiące nauki, a w języku skryptowym szast prast i po tygodniu robimy aplikację. Tylko co z tego skoro ktoś i tak nie rozumie dlaczego zrobił coś w taki czy inny sposób, bo ważne jest tylko, że działa. Ok, zgadzam się, że PHP jest prostszy od Javy, w końcu nie ma połowy funkcjonalności OO jaka jest w Javie. Wystarczy spojrzeć w API PHP – pomieszanie z poplątaniem. W tym to dopiero ludzie potrafią koszmarki tworzyć. Moim zdaniem sensowny wybór to Java+JRuby.

    Java nie jest wybierana w firmach dlatego, że ludzie lubią sie katować wymyślnymi abstrakcjami. To przewidywalna platforma ze silnym wsparciem. Poza tym nie liczy sie tylko język, ale cała otoczka – narzędzia!

    Nie do końca rozumiem twierdzenie, że Google ucieka od Javy na rzecz Pythona. Jak to się ma do GWT i Androida ?

  49. Avatar Jarosław Zabiełło powiedział over 2 years later:

    Nie jest prawdą, że ten, kto nauczy się C++ i Javę to od razu automatycznie będzie w stanie pisać dobry kod w dowolnym języku. Nawyki z pisania w tych językach często bardziej przeszkadzają niż pomagają To co będzie poprawnym podejściem w Javie w Pythonie często okazuje się koszmarkiem. Co do PHP, to masz rację, chaos z poplątaniem, nic dziwnego że w tym języku trudno jest napisać czytelny kod. Osobiście też trochę przychylam się do duetu Java + JRuby. A z tym Google, to nie chodzi o uciekanie od Javy, ale raczej o to, że Google najwyraźniej nie ma najmniejszego zamiaru oprzeć się we wszystkim na Javie, ale wybiera zupełnie inne podejście. Python jest tam podstawą większości ich projektów. Jeśli można mówić o ucieczce, to na pewno uciekają tam od Perla (przepisują stare skrypty na Pythona).

  50. Avatar Leszek powiedział over 2 years later:

    Oczywiście masz rację, że języki te się różnią i nawyki przeszkadzają (widzę to choćby przy pisaniu w Ruby). Ale chodziło mi bardziej o to, że Java zmusza/uczy odpowiedniego podejścia do projektowania i implementacji, i jest to moim zdaniem bardzo ważna rzecz, która procentuje później przy każdym języku i w każdym projekcie. A co uczy takie PHP? Bałaganu. Zresztą nie dziwię się, że ludzie, którzy zaczęli programowanie od PHP piszą bez głowy, bo od kogo tu się uczyć. Ludzie z Zenda zamiast przenosić API na OO i robić generalne porządki przykrywają niedoskonałości języka swoim frameworkiem.

    Oczywiście czasami trzeba pogodzić ze sobą doskonały projekt i działający kod. Tak np. jest w przypadku jądra Linuksa i jądra HURD. Ten drugi jest zaawansowanym, powiedziałbym naukowym projektem, a ten pierwszy po prostu działa i jest udoskonalany na bieżąco na ile się da.

  51. Avatar duce74 powiedział over 2 years later:

    Proponuje przejrzec artykul oto jego wstep:

    Lekkie framework’i jak Hibernate, Spring oraz HiveMind są przyszłością Javy

    Wygląda na to że wielu dziennikarzy zaczęło gorzej pisać o Javie. Niektórzy ludzie zdają się być przekonani o tym, że Java uległa stagnacji i z tego powodu wielu ludzi od niej odeszło. Cóż, pozostali entuzjaści po prostu nadal kodują w tej, dającej więcej radości niż jakakolwiek przedtem, platformie. Inne technologie, takie jak Ruby, PHP, .NET czy Ajax jak dotąd nie generują tylu innowacji w świecie oprogramowania, co Java.

    Wielu ludzi interesujących się Javą podchodzi do niej bardzo krytycznie – niektóre z ich uwag są słuszne. Jednak nie wszyscy zdają sobie sprawę, że w ostatnim czasie większość problemów udało się rozwiązać. W prezentowanym artykule opisano kierunki, w jakie zdaje się zmierzać obecnie Java

    reszte mozna znalezc na: http://www.javasoft.pl/index.jsp

  52. Avatar progeo powiedział over 2 years later:

    Apropos dyskusji – zgadzam sie z opinia, ze decydujace znaczenie ma decyzja firm ktore moga inwestowac tylko w produkty rozwijane i dajace gwarancje, ze beda rozwijane. Place to ciekawy wyznacznik, cos troche innego ponizej: http://www.devtopics.com/most-popular-programming-languages/

    http://antoniocangiano.com/2007/07/05/23-programming-languages-compared-through-their-amazon-book-sales/

    http://www.welton.it/articles/language_popularity.html

    nie jestem profesjonalnym programista – mam nadzieje, ze warto spojrzec na problem “wyzszosci” bardzo szeroko poniewaz potrzeby ludzi sa roznorodne i bardzo dobrze. Ta narzedzie jest dobre ktore spelnia swoja role dobrze – dla kogos kto zna dobrze perla uzywanie cgi jest nadal sensowne chociaz jest tyle nowych narzedzi uzywanych dla potrzeb internetu. Dziekuje.

  53. Avatar adderek powiedział over 2 years later:

    Znam w mniejszym lub większym stopniu : assemblera, pascala, C, C++, JAVA, C#, ksh, bash, awk, dhtml. Jeszcze mi trochę wiedzy brakuje ale nadal się rozwijam. I moja opinia jest następująca:

    1) Nie należy porównywać tych języków w kategoriach “lepszy/gorszy” – ona mają po prostu inne zastosowania (tak jak młotek jest lepszy do wbijania gwoździ niż wiertarka a ta druga do wiercenia jest lepsza od młotka)

    2) Duże firmy albo zazwyczaj inwestują w stabilność kodu i możliwość rozszerzania bez utraty stabilności (kolosalne wieloletnie projekty), albo w szybkość tworzenia aplikacji (przymykając oko na jakość – ona nie przynosi bezpośrednich zysków), więc nie należy uznawać ich za wyznacznik. Co najwyżej fakt, że google odchodzi od perla może świadczyć o tym, że przy złożonych projektach ten język powoduje więcej kosztów i kłopotów niż python (albo po prostu chcieli się pozbyć perla “z trójkąta”).

    3) Gry to coś, w czym się wyciska max. wydajności, więc często się wybiera C++. Czasem jednak produkuje się kicz(?) w innym języku – gdy wydajność nie jest najważniejsza.

    4) Sterowniki to coś, co jest wykorzystywane miliony(?) razy na sekundę. Przyspieszenie polecenia “mov” o 10% oznaczałoby przyspieszenie systemu o 5%-10%. Dlatego do sterowników/jąder wykorzystuje się asm(wydajność:6,stabilność:1,czytelność:1), C(wydajność:4,stabilność:3,czytelność:3), C+(wydajność:3,stabilność:4,czytelność:4).

    5) Coś na szybko = skrypt. Można zmodyfikować bez potrzeby kompilacji.

    6) Każdy język posiada zalety i wady. Świadczą o tym na przykład jython, jruby, c# – czerpiące zalety java. Jednak nie ma idealnego rozwiązania.

    7) W przyszłości powstanie wiele nowych języków. To podstawa postępu. Mieć więcej mniejszym kosztem znaczy pisać szybciej – ale (zazwyczaj) jest to przeciwieństwo pisania kodu stabilnego.

    8) Nie lubię C#. Nie cierpię C#. To jest koszmar: powolne oprogramowanie z utratą kontroli nad alokacją pamięci. Ale wszystko wygląda na to, że to jest przyszłość. Ot – przykład na to, że nie zawsze to co jest fajne wygrywa.

    Obstawiam że ten wątek nigdy się nie skończy :)

    Pozdrawiam i życzę wszystkim czytelnikom powodzenia w dalszej nauce

  54. Avatar swr powiedział over 2 years later:

    Języki takie jak Ruby / Python wygrają na rynku, i to z powodów czysto ekonomicznych. Mniej czasu nad kodem, łatwość uczenia (wspomniane 2 miesiące vs. 2-3 lata), krótszy czas rozwoju i wdrażania aplikacji. To wszystko to są pieniądze. Konkretne pieniądze zaoszczędzone i zarobione (czas dostarczenia produktu/usługi). Przeróżne firmy powstające na rynku będą wybierać właśnie takie technologie, bo dzięki nim mogą mieć więcej tortu. Inne firmy dostrzegają ten proces i inwestują (będą inwestować) w narzędzia, usługi i wsparcie dla dynamicznych języków.

    Dlatego z pewnością większość nowego oprogramowania biznesowego będzie powstawać w językach dynamicznych.

    Co do tradycyjnego oprogramowania, to model biznesowy oparty na kompilowanym kodzie i sprzedaży licencji na korzystanie z oprogramowania też odchodzi do lamusa. Kto w przeszłości ugryzł swój kawałek, ten go trzyma. Ale nie wydaje mi się to drogą dla nowych firm. Koszt wytworzenia dużego programu, wprowadzenia go na rynek, wypromowania marki wydaje mi się zbyt duży. Dodajmy do straty spowodowane piractwem. Za mały zwrot z takiej inwestycji.

    Innym symptomem zmian jest choćby open-source, czyli możliwość taniego i bezpiecznego oprogramowania. I rzesze ludzi połączonych przez internet, którym nikt nie zabroni tworzenia kodu za darmo.

    Internet jako taki to w ogóle czynnik, który mimo wszystko wydaje się niedoceniony, a jest odpowiedzialny za chyba największe zmiany w branży i daleko daleko idące konsekwencje. Dzięki niemu możliwe są nowe trendy, jak np. możliwość zabezpieczenia kluczowych technologii przez tworzenie usług sieciowych, i sprzedaż usług zamiast licencji na korzystanie z oprogramowania.

    To takie moje 3 grosze do dyskusji.

    ps. opieram się jedynie na własnych obserwacjach i przemyśleniach (zbieżność do osób i faktów przypadkowa ;) pps. poza byciem programistą jestem właścicielem firmy software’owej, stąd zdarza mi się intensywnie nad tym myśleć :P

  55. Avatar Samuel powiedział over 2 years later:

    A ja sie podpisuje pod tym co napisal Adderek. Oprogramowanie biznesowe to nie wszystko. A prawde mowiac, gdyby nie to wszystko inne, to oprogramowanie biznesowe na nic by sie nie zdalo ;)

  56. Avatar swr powiedział over 2 years later:

    Nie znam źródła, nie pamiętam gdzie to przeczytałem, ale może ktoś to potwierdzi. Mianowicie, że 70% oprogramowania jako takiego to wewnętrzne oprogramowanie biznesowe. :) Oczywiście ja też się zgodzę, że python czy ruby nie służą do pisania sterowników. Ale sterowniki, systemy i aplikacje jako takie, gry, to wg. tych szacunków, jakieś 30%.

  57. Avatar mario powiedział over 2 years later:

    Kompletnie nie rozumiem o co te kłótnie? Języki dynamiczne służą do pisania czegoś czego wydajność nie ma znaczenia, bo są koszmarnie powolne. Rubiego czy Pythona nie zastosujesz do napisania liczenia np. transformaty furiera, tylko dołączysz bibliotekę napisaną w C/C++, która to realizuje. ostatnio wykonywałem testy prędkości liczenia ciągu fibonacciego rekurencyjnie w różnych językach i Java byłą szybsza od gcc 3.3 i wolniejsza od gcc 4.2, ale te różnice były nieznaczne. Liczyłem wartość dla 43-ciego elementu ciągu i w obu językach trwało to ok. kilkunastu sekund. Podczas gdy chciałem sprawdzić wydajność pythona i rubiego, to niestety musiałem zmniejszyć wartość na 40, bo nie mogłem się doczekać, a w testach i tak python był 150 razy wolniejszy od Javy, a ruby był dodatkowo 2 razy wolniejszy od pythona. Ja rozumiem, że wiele rodzajów programów pisze się w językach dynamicznych szybciej, niestety wiele tych technologii aktualnie dyskwalifikuje wydajność. Wiele firm nie zdaje sobie sprawy jak mocny sprzęt będą musiały zakupić, jeśli chcą uruchamiać swój portal w PHP, pythonie itp, podczas gdy napisanie wersji w Javie rozwiązało by te problemy. Jest wiele przypadków gdzie zastosowanie języków dynamicznych dyskwalifikuje aktualna wydajność ich interpreterów. Jeśli wykonywanie ich przejdzie pod kontrolę maszyn wirtualnych JIT to sytuacja może się zmienić – póki co to wykonywanie kodu w nich jest po prostu koszmarnie powolne. Dodatkową wadą niektórych języków dynamicznych, są słabo rozwinięte biblioteki dodatkowe, np. ruby jakiś czas temu nie miał (nie wiem czy już ma czy nie) biblioteki do generowania PDFa, co dyskwalifikowało framework Ruby on Rails w wielu przypadkach komercyjnych, gdzie generowanie PDFa w aplikacji Webowej było konieczne (w aplikacjach dla biznesu często raporty ściąga się w PDF). Java ma biblioteki do wszystkiego.

    @swr: nie nauczysz nikogo (poza geniuszami) programowania w rubym w 2 lub 3 miesiące od zera, podobnie w Javie czy C++. Bo to za dużo pojęć do poznania w krótkim okresie czasu. Oczywiście doświadczony programista pozna rubiego w 2 lub 3 miesiące podobnie jak i nauczy się Javy w takim czasie. Ja jak poznawałem Javę to się jej uczyłem bardzo krótko (chyba miesiąc) nim zacząłem ją komercyjnie używać, potem po następnym miesiącu praktyki już sobie nieźle radziłem. Zresztą i tak kluczem do poznania aktualnych języków programowania nie jest poznanie ich składni itp, tylko poznanie bibliotek standardowych, bo aktualnie one stanowią największą część języka i efektywne wykorzystanie jakiegoś języka programowania jest możliwe tylko po poznaniu jego bibliotek standardowych.

    PS. Przedstawiłem tylko wady dynamicznych języków programowania bo o zaletach tutaj się wiele pisze. Oczywiście te języki mają zalety i w wielu przypadkach ich użycie jest bardziej uzasadnione niż C/C+/Javy (zwłaszcza do przetwarzania tekstów gdzie wydajność nie ma znaczenia), ale to jaki język wybrać zależy od konkretnego przypadku. Warto pamiętać też, że Javy nie można postawić obok C/C+, bo Java oferuje o wiele łatwiejsze szukanie błędów ale kosztuje zużyciem o wiele większych ilości pamięci niż C/C++, więc na aplikacje desktopowe się średnio nadaje – tylko w szczególnych przypadkach. Za to Java jest świetnym językiem do pisania aplikacji dla biznesu, aplikacji serwerowych, gdzie kontrola nad błędami jest pożądana a zużycie RAMu nie ma wielkiego znaczenia, bo oferuje dużą wydajność.

  58. Avatar Ris powiedział over 2 years later:

    @mario +1

  59. Avatar Jarosław Zabiełło powiedział over 2 years later:

    @mario: To, co piszesz o wydajności miałoby sens tylko, gdyby rozpatrywać języki programowania w oderwaniu od dostępnych dla nich bibliotek. twierdzisz, że języki dynamiczne mają słabe biblioteki? Hehe, no to zmierz się z pythonową biblioteką SciPy – stworzoną do ciężkich obliczeń naukowych. Myślisz, że w C++ zrobisz to szybciej? :)

    Czasem jest dokładnie odwrotnie. W jęz. dynamicznym są biblioteki lepsze od tych co oferuje C++ czy Java. Np. RSpec, genialna biblioteka do testów behawioralnych. Takiego ładnego DSL nie da się po prostu stworzyć w Javie bo jest na to za prymitywna. Vide: car.should have(3).wheels

    Nie można też mylić platformę Javy z językiem Java. Moim zdaniem, jako język, Java nie jest niczym specjalnie atrakcyjnym. Prymitywna składnia, brak przeciążeń operatorów, konieczność definiowania każdej zmiennej, a i tak kompilator nie wyłapuje wszystkich błędów (związanych np. z błędnym rzutowaniem typów). Co innego platforma Javy, czyli JVM i różne biblioteki. Lecz skoro Rails chodzi na JRuby, to upada teza, że Rails nie ma dostępu do tego, do czego ma dostęp Java. Wydajnościowo JRuby on Rails nie jest może powalający, ale już JRuby on Merb śmiga całkiem sprawnie.

  60. Avatar mario powiedział over 2 years later:

    Tylko dla pythona ktoś te biblioteki naukowe w C++ musiał napisać! Python bez C++ by nie istniał – gdyby wszystkie biblioteki były pisane natywnie w pytonie to na wielu polach wydajność tego była by gorsza niż koszmarna. Java ma swoje standardowe biblioteki napisane w Javie i skompilowane do bytecode’u VM Javy i nie przeszkadza to w wydajności. Jeśli chcesz mówić o przydatności pythona czy rubiego do obliczeń to musisz uznać jednak potęgę C/C++, bez których to języków obliczenia w pythonie czy rubym nie miały by sensu.

    Jeśli mówimy już o samej składni to jedną podstawową zaletą składni Javy jest jej przejrzystość i zgodność z C/C+, dzięki czemu programista C/C+ (a takich w owym czasie było najwięcej i chyba nadal jest) przechodząc na Javę nie musi się uczyć znaczenia nowych krzaczków, tylko czuje się ”jak w domu”. Dzięki temu koszt przejścia na Javę (a tym samym przeszkolenia i przyzwyczajenia programistów) został zminimalizowany. Dlatego też python i ruby nie mają takiej popularności jak Java. Oczywiście python i ruby to bardzo dobre języki programowania oferujące wspaniałe możliwości i elastyczność, ale jak każdy mają swoje zalety i wady, a wybór języka zależy od sytuacji. Nie możesz się upierać, że python i ruby jest zawsze lepszy od C/C++/Javy – bo to nie prawda! Łatwiej znaleźć programistę Javy niż Rubiego i łatwiej też napisać złożony system biznesowy w Javie ze względu na duży dorobek tego środowiska.

    Nie upieraj się na siłę – wiem, że Ruby i Python mają dobre biblioteki, ale nie do wszystkiego, bo z tymi językami pracuje o wiele mniej programistów niż z C/C++/Javą. Nie mów o tym jakie biblioteki ma Ruby, ale mów jakich bibliotek nie ma, które ma Java i jakich bibliotek nie ma Java, które ma Ruby. W biznesie to będzie o wiele lepszy wyznacznik przydatności języka dla danego projektu. Jeśli dla danego projektu Ruby: - ma wszystkie wymagane biblioteki - wydajność w projekcie nie ma większego znaczenia - znalezienie programistów nie będzie problemem lub system później nie będzie rozwijany to z powodzeniem można go pisać w Rubym, ale jak sam widzisz te warunki muszą zostać spełnione. Jeżeli nie ma jakiejś kluczowej biblioteki, którą ma Java, a system będzie rozwijany i ew. wydajność też ma znaczenie (a zużycie ramu nie ma) to wybór Javy jest jak najbardziej uzasadniony. Wszystko zależy od potrzeb. Nie wyobrażam sobie np. pisania engineu 3D do gry w Pythonie ani w Javie, lepszy do tego jest C++, bo: - zużywa mało ramu - jest bardzo szybki (również start programu) - ma odpowiednie biblioteki

    Python za to może się nadawać jako język do oskryptowania logiki i AI gry, bo tam obliczenia nie mają znaczenia (zazwyczaj). Choć są do tego celu dobre języki dedykowane (LUA, AngelScript itp).

    PS. Aktualnie całkiem sensowną alternatywą dla Ruby on Rails jest Java + Groovy + Grails. Koncepcja RoR zaadoptowana do Javy, pozwala też używać całego dorobku Javy (np. bibliotek do PDF).

    PS 2. Życzę trochę więcej pozytywnego i konstruktywnego myślenia a mniej walki i upierania się przy swoim ;-). Naprawdę są rozwiązania w których Ruby czy Python jest gorszy do Javy/C/C++. Elastyczność składni języka to nie wszystko.

  61. Avatar Jarosław Zabiełło powiedział over 2 years later:

    Chyba się trochę zagalopowałeś z wnioskami. Ten artykuł do którego są te komentarze, był napisany ponad 2.5 roku i jego celem było tylko pokazanie, że twierdzenie, iż w Jave i C++ “zawsze się pisze szybciej i lepiej” jest wierutną bzdurą.

    Nic dziwnego. W końcu języki jak Python czy Ruby zostały stworzone po to, aby zwiększyć produktywność programisty, a nie aby tworzyć najszybciej wykonywalny kod. Być może nie ma idealnego języka który byłby najlepszym wyborem w każdej sytuacji, ale ja uważam, że języki wysokopoziomowe są w większości przypadków wyborem lepszym. Pisze się w nich przyjemniej, szybciej i wydajność załatwiają odpowiednie biblioteki, jak wspomniana przeze mnie SciPy. Dzięki RubyInline czy Pyrex można też pisać rozszerzenia bez większego wgłębiania się na C.

    Na pewno nie zgodzę się z bzdurami, że nie ma dobrych bibliotek dla jęz. dynamicznych. Wszystko zależy o jaką funkcjonalnośc chodzi. W ostateczności, JRuby/Jython i IronRuby/IronPython mają 100% dostęp do Javy i .NET jeśli jest taka potrzeba. A jak dowodzi przykład z RSpec, czasem jest odwrotnie, bywa i tak, że to Javy nie ma tak dobrych bibliotek jak do Rubiego. :P mało tego. Nie ma i nie będzie, bo tu C++/Java są zbyt mało dynamiczne do takiego ładnego DSL’a jaki ma RSpec.

    To, ile jest programistów w takim czy innym języku, nie ma (przynajmniej dla mnie) aż tak wielkiego znaczenia. To, co ma znaczenie to to, czy jest dobra praca. A pracę, i to dobrze płatną, to znajdą nawet programiści obumarłego Cobola. Nie wiem jak w PL, ale w Irlandii już słyszałem przypadki o zrezygnowaniu z javowca bo nie znał również Rubiego.

  62. Avatar mario powiedział over 2 years later:

    Twierdzenie, że w Rubym/Ptyhonie zawsze pisze się szybciej jest taką samą bzdurą, jak twierdzenie, że w C/C+/Javie pisze się szybciej. Mogę znaleźć po kilka krótkich implementacji wykonujących konkretną czynność, które w C/C+ napisze się szybciej niż w Pythonie czy Rubym. Zresztą co z tego, czasem szybkość pisania kodu pewnych rodzajów aplikacji w językach dynamicznych nic nie daje jak nie znajdziesz programistów, a programistów C/C++/Javy jest o wiele więcej. To ile jest programistów danego języka z punku widzenia projektanta systemu ma duże znaczenie.

    Co do bibliotek, to Ruby dorobił się w końcu czegoś do PDF’a?

    Używanie JRuby czy Jython do wykorzystywania bibliotek Javy uważam za bezsens, bo taki kod jest uzależniony od VM Javy i nie jest kompatybilny ze standardem. Oczywiście kompilowanie kodu Pythona czy Rubiego do bytecodu Javy jest jak najbardziej na miejscu i te języki mogą na tym tylko zyskać.

  63. Avatar Jarosław Zabiełło powiedział over 2 years later:

    Problem w tym, że w pewnych dziedzinach (np. aplikacje webowe) używanie C, czy C++, jest raczej głupotą. Java z kolei, choć dobra do wielkich, skomplikowanych systemów, jest za ciężka w pozostałych przypadkach, tj. tam, gdzie jest potrzebny tylko szybki fronton współpracujący z relacyjną bazą danych. To jest dziedzina, gdzie rządzą lekkie frameworki takie jak Rails, czy Django.

    Co do PDF, to przesadzasz, że nie ma dobrych bibliotek do generowania tego formatu poza Javą. Np. Python ma bardzo dobrą bibliotekę ReportLab. W Ruby, co prawda, nie miałem jak dotąd potrzeby generoowania PDF, ale 5 sekund pytania Googli pokazuje że, jest kilka bibliotek do tego celu. Zresztą, skoro mogę w Rails użyć JRuby to gdzie ty jeszcze widzisz problem?

    Co do bibliotek testujących, to Java dorobiła się czegokolwiek tej klasy co RSpec? Automatyczne testowanie behawioralne to przecież podstawa.

    Nie rozumiem, co ci się nie podoba w używaniu JRuby/Jythona zamiast Javy. To się nieźle sprawdza w praktyce. Wpięcie się do dowolnej biblioteki Javy w JRuby jest banalnie proste. Główną wartością Javy to i tak nie język, ale te biblioteki oraz JVM. Skoro więc mogę mięć i jedno i drugie, ale 10x prościej, to do czego mi (prymitywna i nadmiarowa) składnia Javy?

  64. Avatar mario powiedział over 2 years later:

    1. Co to znaczy, że Java jest za ciężka? Nie rozumiem w ogóle tego argumentu…

    2. W przypadku PDF: koledzy z jednej firmy chcieli jakiś czas temu przejść na Railsy, ale nie znaleźli dobrej biblioteki do generowania PDFa, dlatego zrezygnowali z railsów i przechodzą na grailsy.

    3. Używając bibliotek Javy z Jythona czy JRuby uzależniasz kod od JVM i nie odpalisz go na innym interpreterze pythona/ruby. Oczywiście w konkretnej sytuacji biznesowej może to być uzasadnione, ale wymagało by zarówno specjalistę od Javy jak i pythona/ruby a takich jeszcze ciężej znaleźć.

  65. Avatar Ris powiedział over 2 years later:

    @Jarosław Zabiełło “Java z kolei, choć dobra do wielkich, skomplikowanych systemów, jest za ciężka w pozostałych przypadkach, tj. tam, gdzie jest potrzebny tylko szybki fronton współpracujący z relacyjną bazą danych” Co takiego utrudnia Java w stosunku do Rails?

  66. Avatar Jarosław Zabiełło powiedział over 2 years later:

    @mario: Ad.1 Dziwne, że nic nie wiesz. W necie jest pełno informacji na ten temat. Poczytaj sobie może Więcej niż Java (bardzo fajnie się ją czyta). Zobacz też: Ruby the Rival, Java is losing the battle for the modern Web. Can the JVM save the vendors?, 10 Things Every Java Programmer Should Know About Ruby, Java Programmers Embrace Ruby, Ruby for the Java world, Is J2EE Dead?, Java’s Fear of Commitment, Why is the Java community so enchanted by Ruby?

    itp, itd. Jak trochę poszukasz Googlami, to znajdziesz mnóstwo materiałów na ten temat. Trochę dyskusji (w niektórych brałem udział) znajdziesz na javowym forum jdn.pl: Java i Agile, Scooby Ruby do (on Rails) kontra Java, Statyczne vs dynamiczne

    W wielu przypadkach Java się po prostu nie sprawdza do webu. Nie sprawdziła się w grono.net (zastąpiono ją pythonowym Django) Java też nie sprawdziła się w “large-scale healthcare application” CenterNet (Javę zastąpił tam Rails).

    Co do tego PDF to albo to było dawno temu, albo koledzy nie umieli szukać. Ruby bardzo szybko się zmienia. Jeszcze dwa lata temu prawie nie było książek na jego temat. Teraz jest prawdziwy wysyp. Powstają bardzo ciekawe rozwiązania. JRuby okrzepł, przyśpieszył (jest już miejscami szybszy już od Pythona) i nadaje się do zastosowań komercyjnych.

    Z tym JVM to ty coś mieszasz. Przecież używając JRuby mam dostęp do wszystkich bibliotek standardowych Rubiego. Jeśli więc nie używasz jakichś specjalnych (dostępnych tylko dla Javy) bibliotek, to ta sama aplikacja powinna bez problemu ruszyć zarówno pod Ruby jak i JRuby.

  67. Avatar mario powiedział over 2 years later:

    “Z tym JVM to ty coś mieszasz.”

    Nie mieszam tylko nie pasuje mi używanie bibliotek Javy w Rubym czy Pythonie.

    PS. Nadal nie wyjaśniłeś co to znaczy, że Java jest ciężka…

  68. Avatar Jarosław Zabiełło powiedział over 2 years later:

    @mario: Przeczytaj ze zrozumieniem poprzedni post.

  69. Avatar moro powiedział over 2 years later:

    “mi jezyk w programowaniu nie przeszkadza” – trzeba dobrac jezyk do zadania a nie uzywac jednego “najlepszego” jezyka do wszystkiego. Do pisania aplikacji serwerowych najlepszy bedzie erlang, do sterownikow i systemow embedded C itp. Nie ma sie co spierac, kazdy jezyk ma swoje zastosowanie.

  70. Avatar dmilith powiedział over 2 years later:

    @mario: podejrzewam że nie masz 64bitowego systemu. wystarczy że odpalisz np Netbeans’a 6.1 na 64bit javie. ( u mnie 400MB RAM, po doładowaniu parunastu pluginów dochodzi do 800MB ). To np może znaczyć że Java jest ciężka. Nie odpaliłbym niczego poważnego na 64bit javie na serwerze który nie ma 4GB RAMu.. poza tym wypada wspomnieć o głupim imho zarządzaniu GC w javie, co np dyskwalifikuje ten język do zastosowań “realtime” i powoduje “losowe zamulanie się aplikacji” od czasu do czasu.

    co do rozwoju Rubiego. wystarczy spojrzeć na różnicę w tym, czym był Ruby w momencie tworzenia tego postu, a czym jest teraz. i przede wszystkim: jakie ma wsparcie dużych organizacji oraz ile firm nagle przeszło na języki dynamiczne. myślę że wielu fanatykom języków programowania typu java/ C++ jest coraz bardziej głupio ;} i dobrze

  71. Avatar duce powiedział over 2 years later:

    Wybralem rok temu jave. Klucilem sie z Jarkiem sporo. Teraz mnie ta dyskusja najmniej obchodzi. Zarabiam niemale pieniadze, pracujac dla amerykanskiej firmy. Godzina mojej pracy kosztuje grubo trzycyfrowa liczbe w euro, co przeklada sie czesciowo na moje zarobki. Moi koledzy na studiach pisza w rubym. Dostaja grosze ,bo jak im sie nie podoba, to zatrudnia kogos z gimnazum do pisania. Propo aplikacji biznesowych – jak one przejda na Rubego – to zaczne sie go uczyc. Ale kazdy, kto pisal cos takiego ( projekt, w ktorym jestem liderem kosztowal klienta kilkaset tysiecy dolarow albo i wiecej). Jarku – powodzenia w prowadzeniu bloga – odezwe sie za rok z nowymi sukcesami w JAVIE ;]

  72. Avatar duce powiedział over 2 years later:

    Troche mi sie pomieszalo ctrl+c/ctrl+v, przepraszam ale nie moge edytowac postow. Wielkie firmy jak SAP nie przejda na Ruby. To Ci moge obiecac bo wiem to z autopsji a nie z “rozmowy z kims na czacie w dublinie”. A puki firma placi za moje szkolenia, wyjazdy, certyfikaty, konsultacje – to sie rozwijam duzo lepiej niz piszac w Rubym. Bylbym po prostu lepszym web masterem :) I moglbym najwyzej bloga poprowadzic ;]

  73. Avatar bijacz powiedział over 3 years later:

    chyba już od dawna nikt, nic tu nie pisał, więc odświeżam ;)

    jak dla mnie, dyskusja powinna się skończyć już dawno temu. Q: czemu jest tyle języków programowania na świecie? A: ponieważ większa część tych języków służy do zupełnie innych zadań, jak już ktoś wcześniej wspominał kilka razy. zarówno Jarek Zabiełło jako 1st strona konfliktu, jak i reszta tu odpisująć, jako 2nd strona, mają rację. Java do niektórych zadań się nie nadaje, bo bywa za wolna. Tak samo Python/Ruby nie do wszystkiego się nadają. I dlatego np. kernele OS’ów nadal się pisze w C a nie w Pythonie, Javie lub Fortranie. Zaskoczeniem może być użycie C# w większości jądra MinWin, ale i tak reszta to C/C++ i trochę Asma. Są co prawda alternatywy jak Flash<>JavaFX lub Ajax<>PHP, ale owe alternatywy też mają swoje mocniejsze i słabsze strony.

    To teraz niech pan Jarek Zabiełło napisze, czym lepszy jest Flash od Ajaksa, albo JavaFX od platformy Silverlight? Oczywiśćie z małym przykłądem w postaci zadania. Ja się nie podejmuję zadania – jestem tylko pomysłodawcą. :)

  74. Avatar Jarosław Zabiełło powiedział over 3 years later:

    Ten tekst był pisany ponad 3 lata temu. Trochę się w międzyczasie zmieniło. Java jest co prawda wciąż skostniała (jako język) ale jako platforma ma się dobrze i nie potrzeba w ogóle języka Javy aby z tej platformy korzystać. Są dużo potężniejsze języki (o znacznie większej sile ekspresji i czasem nawet szybsze od samej Javy) jako Scala czy Clojure. A jak ktoś chce jeszcze bardziej dynamicznego podejścia, to jest całkiem nieźle rozwijający się JRuby. Dołączył też Jython, implementacja Pythona w Javie. Główną przewagą platformy Javy nad .NET jest oczywiście multiplatformowość.

  75. Avatar fancy_that powiedział over 3 years later:

    duce może zarabiasz dużo kasy. Ale idę o zakład ze wydupczyłem ładniejsze dziewczyny niż ty i było ich więcej. To dlatego, że moja praca jako informatyka sprowadza się do algorytmu i optymalizacji, a nie bycia skrybą. Powolnie pisano w średniowieczu przepisując każdą stronę pojedynczo, cudnie ozdabiając. Argument o tym, że ‘trudniejsze’ programowanie jest lepsze, bo nie zastąpią Cię gimnazjaliści… jest po prostu debilizmem. To tak jak uciąć sobie nogi, żeby było trudniej się poruszać i z racji niepełnosprawności byłbyś lepszym pracownikiem bo dofinansowania i ulgi dla firmy etc. I nikt by Cie nie zastąpił. To że jesteś lepszy polega na tym, jakie problemy jesteś w stanie rozwiązać, a nie w jak skomplikowany sposób jesteś w stanie to zrobić. inny przykład: to tak jakbyś chciał udowodnić antyterrorystom, że strzelanie z łuku jest lepsze bo jest trudniejsze od strzelania z m16 ;D

    Co do porównywania ilościowego, wpisz w google (opartym na pythonie ;D ) słowo Kopernik, Sokrates, Leonidas. Spójrz na większościowo wybranego kaczyńskiego, albo na większościowo wybranego busha. To co mówi większość jest często głupotą. Tak jak przytaczanie argumentu, ze największe korporacje zatrudniajace starych pryków, którzy co produkt to zjebany (rynek gier i ostatnie popisy Raven i IDsoftware).

    Poza tym co stoi na tym, aby to Twoja firma wprowadzała standardy? Microsoft tak zaczynał i jeśli nie zauważyłeś postawił na swoim nie ważne jak kijowe są ich produkty ;]

    Jeśli chodzi o jave to syf muli kompa i należy unikać za wszelką cene takich badziewi.

    PS: mój nauczyciel z LO też mówił ze w pascalu da sie przecież wszystko napisać >< ps2: i pamiętaj, że w czasie kiedy ty siedzisz i piszesz złożone aplikacje, sterowniki i inne pierdoły ktoś inny posuwa modelki z agencji, dla której zrobił stronę internetową.

  76. Avatar webzio powiedział over 3 years later:

    ale trafilem na dyskusje. o czym gadacie? :} python jest ok, ale nie do wszystkiego. mi bardziej zalezy na odpowiedzi python czy ruby. ma sens, prawda?

  77. Avatar doc powiedział over 4 years later:

    Trafiłem tu bo szukałem tekstu nt. integracji Pythona albo Rubiego z C/C++. A tu taki kwiatek.

    Dobra też mam wyzwanie – niech autor napisze tą bazę danych albo ten serwer http z którymi się łączy w języku skryptowym :) Z pewnością będą to najbardziej niewydolne systemy tego typu na świecie. Każdy z tych języków ma jakieś zastosowanie.

    Java jest skostniała? Ostatnio doszły szablony, adnotacje, pętle foreach, wcześniej reflection API i wiele innych rzeczy. Aplikacje takie jak Eclipse pokazują potencjał Javy – niech ktoś napisze coś takiego w jakimkolwiek języku skryptowym, powodzenia.

    @webzio Ja wolę Python’a bo jego gramatyka jest według mnie bardziej elegancka i klarowna. Ruby jest według mnie za bardzo skondensowany, zbyt dużo “ficzerów” upychanych jest bez składu i ładu, bez generalnej koncepcji rozbudowy języka. Idzie to w kierunku Perla o którym krążą anegdoty, że autorzy po 2 tygodniach nie rozumieją własnoręcznie napisanych w nim skryptów.

  78. Avatar Jarosław Zabiełło powiedział over 4 years later:

    doc: Mógłbyś precyzyjnie zdefiniować co to jest “język skryptowy?” Chodzi o język dynamicznie typowany? Czyli Lisp, Clojure, Erlang czy Smalltalk są “językami skryptowymi”, tak? A widziałeś co potrafi Gemstone napisany w Smalltalku na którym chodzi giełda NY? Albo Open Telecom Platform stworzony w Erlangu ze swoim średnim czasem przestoju rzędu 30 milisekund na rok?

    Czy Java jest skostniała? Zależy w stos. do czego. W porównaniu do tempa i zmian w takim przykładowym C#, to owszem. – jest. Ale czy to z drugiej strony ma jakieś znaczenie? Nie. Bo Java (jako język) nie jest istotna, ważniejsza jest jej platforma, JVM i HotSpot. Nie trzeba trzymać się języka Javy aby pisać aplikacje działające na platformie Javy. Eclipse pokazuje potencjał (języka) Javy? Przecież to możnaby napisać krócej, np. w Scali.

    Co do Pythona, to nie jest to zły język, ale oczywiście zależy z czym porównywać. Znam Pythona od lat i wiem, że Python ma swoje zalety. Ale z drugiej strony muszę przyznać, że Ruby jest językiem ładniejszym, ma dużo bardziej elegancki i spójniejszy model obiektowy, umożliwia pisanie bardziej eleganckiego DSL’a, rozwija się dynamiczniej, ma dojrzalszą implementacją do Javy (JRuby), jest nawet szybszy od Pythona.

    Z tym porównywaniem Rubiego do Perla to powtarzasz stare stereotypy popularne wśród osób które nie znają Rubiego. Fakt, że Ruby jest językiem obiektywnie bardziej skomplikowanym od Pythona , ma też większe API więc jego opanowanie trwa dłużej. Ale po przekroczeniu pewnego progu znajomości, pisze się w nim ładniej i wygodniej niż w Pythonie. Także kod najczęsciej wygląda czytelniej.

  79. Avatar jojob powiedział over 5 years later:

    Bardzo fajna dyskusja trwała tu kilka lat temu :) Osobiście to trafiłem tutaj, jak większość przypadkowo :) Może nie przypadkowo bo po studiach jestem chyba 10 lat. Zawodowo pracowałem w takich dinozaurach programistycznych jak FoxProx lub Delphi. Osobiście jestem jestem fanem C# i Javy między innymi ze względu za niedynamiczne typy danych! Co prawda to w C# i Javie programuje nie zawodowo i nie zarobkowo! FoxPro miał dynamiczne typowanie i to mi się w nim BARDZO nie podobało! Wiem, że świat idzie na przód. Teraz myślę, że zwykłe środowisko Visual C# Express to idealne darmowe IDE ! Nie wiem jakie jest Ruby, ale dla mnie podstawa to jawne rozumienie przez IDE typu zmiennych!

  80. Avatar waldo powiedział over 8 years later:

    Jeśli mogę wyrazić swoje zdanie, to z doświadczenia wiem, że Ruby i Python to świetne języki do nieskomplikowanych programów. Do takich, w których używa się już gotowych bibliotek i które mieszczą się w kilkuset liniach kodu. Przyjemniej i łatwiej się w nich pisze niż w C++ czy w Javie.

    Co innego natomiast, gdy trzeba zrobić większy program. Taki, który nie robi jednego prostego zadania, tylko jest np. dużą aplikacją desktopową. Napisanie czegoś takiego w Rubym czy Pythonie jest po prostu niemożliwe – testowanie, naprawianie i nie daj Boże refactoring takiego czegoś zająłby znacznie więcej czasu niż w przypadku użycia języka statycznie typowanego. Trzeba po prostu brać pod uwagę fakt, że tworzenie programu to nie tylko pisanie kodu, ale i jego dalsze utrzymywanie, pisanie dodatkowych ton testów na rzeczy, których nie trzeba testować w przypadku C+/Javy. Do pewnego stopnia języki dynamicznie typowane mają przewagę, jeśli chodzi o szybkość i łatwość zrozumienia programu, potem zaczynają mocno przegrywać. Więc dla większych programów całkowicie zgodzę się z tezą, że tworzenie w C+/Javie zajmie mniej czasu. Summa summarum!

(leave url/email »)

   Pomoc języka formatowania Obejrzyj komentarz