Toon posts:

Python vs Ruby

Pagina: 1
Acties:
  • 1.567 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,

Ik ben een hobbyist-programmeur die voor zijn werk (medicus) enkele dingetjes wil kunnen ontwikkelen, mn database gerelateerd. Als fanatiek Mac en Linux user is cross-platform development (Windows XP, Mac OS X en Linux) een absolute eis, geen Win-only technieken.

Voor web-development gebruik ik PHP, echter ik zoek iets waarmee ik redelijk snel iets voor de destop kan bouwen (mn database dus). Java of C++ lijkt me hier te lastig voor, heb daar geen ervaring mee.

Ik denk over Python of Ruby. Wat zijn jullie ervaringen?
(ik weet dat er wat topics over geweest zijn, maar niet met deze specifieke insteek: cross-platform GUI standalone apps, waarbij ik de database en alle noodzakelijke dingen graag mee wil verpakken in 1 installer, zodat de gebruikers deze alleen maar hoeft te runnen)

Looking forward... kan dit met Python? (heeft initieel mijn voorkeur, betere ondersteuning en opgezet door Nederlander ;-) hoewel Ruby on Rails misschien nog wel een reden is pro Ruby, maar ik lees dat deze minder ondersteuning heeft - minder classes of zoiets...)

Pieter

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Het maakt echt bar weinig uit ... pak 'n euro en gooi kop of munt.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • rainmaker2k
  • Registratie: Juli 2002
  • Laatst online: 04-02 15:47
Ruby on Rails is een webplatform. Aangezien je een desktop applicatie wil maken lijkt me dat niet echt handig. Python is dan toch wel het enige wat dan nog overblijft.

edit: ik lees net dat je er GUI uitbreidingen zijn voor Ruby, wxRuby en QT/Ruby. Misschien dan toch maar Ruby? Ik heb geen ervaring met beide talen, maar zo op het eerste gezicht ziet Ruby er makkelijker uit.

[ Voor 38% gewijzigd door rainmaker2k op 06-09-2006 22:58 ]


  • r5d
  • Registratie: Februari 2002
  • Niet online

r5d

Read more, write less...

Met beide talen heb ik weinig ervaring (Rudy geen, Python een beetje) maar ik weet wel:

Python is een taal die in de academische wereld is ontstaan en daar ook een (redelijk) grote aanhang kent. Gezien het feit dat je medicus bent is dit wellicht een voordeel. Ik denk aan projecten als BioPython. Maar verder, zoals kenneth al aangaf, maakt het eigenlijk niet zoveel uit. Beide talen lijken behoorlijk op elkaar:

- Object Oriented
- Diverse standaard functies/libs m.b.t Networking, Filehandling, etc
- Grafische libraries (wxPython, TK/Inter, wxRuby, etc)
- (Web frameworks)
- X-platform

[edit]
Forget BioPython, het gaat je om database handling niet om specifieke bioinformatica meuk lees ik net 8)
[/edit]

[ Voor 9% gewijzigd door r5d op 06-09-2006 23:19 ]

Later betaal je meer, maar dan heb je wel een gratis datalimiet....


  • Johnny
  • Registratie: December 2001
  • Laatst online: 13-02 11:27

Johnny

ondergewaardeerde internetguru

Je bent niet de enige met die vraag, op het moment maken nerds overal op internet vergelijkingen van deze twee talen, dus hier wat leesvoer:

http://blog.ianbicking.org/re-ruby-and-python-compared.html
http://blog.ianbicking.org/ruby-python-power.html
http://andrewlsmith.blogs...s-python-not-ruby-or.html
http://mail.python.org/pi.../2005-October/305692.html
http://www.jgc.org/blog/2...tcl-ruby-is-new-perl.html
http://dev.rubycentral.com/faq/rubyfaq-2.html
http://c2.com/cgi/wiki?PythonVsRuby
http://www.rexx.com/~oinkoink/Ruby_v_Python.html
http://www.devnewz.com/2006/0125.html

Ruby is nog vrij nieuw en wordt gemaakt door een kleine club mensen die nogal eigenzinnig zijn over wat ze wel en niet toevoegen, een van die dingen is unicode-ondersteuning, dat vinden ze niet zo belangrijk dus steken ze er niet veel tijd in en dus zuigt Ruby zwaar als je iets maakt dat meerdere talen moet ondersteunen.

[ Voor 3% gewijzigd door Johnny op 06-09-2006 23:33 ]

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Johnny schreef op woensdag 06 september 2006 @ 23:28:
Ruby is nog vrij nieuw en wordt gemaakt door een kleine club mensen die nogal eigenzinnig zijn over wat ze wel en niet toevoegen, een van die dingen is unicode-ondersteuning, omdat het Amerikanen zijn hebben ze het zelf niet nodig, dus zien ze het belang er niet van dus steken ze er niet veel tijd in en dus zuigt Ruby zwaar als je iets maakt dat meerdere talen moet ondersteunen.
Klok, klepel. De uitvinder van Ruby is een Japanner; hij heeft principiële bezwaren tegen Unicode, wegens de manier waarop karakters uit Chinees/Japans worden toegekend. Unicode-support is dus inderdaad nog niet optimaal, en ik lees hetzelfde over de XML support in Ruby.

Python is al een stuk ouder, een stuk volwassener. Ik vind de taal zelf een stuk prettiger (heb wel veel naar Ruby advocates gekeken, maar niet zelf geschreven) dan PHP. Wordt breed gebruikt, grote toekomst in verband met dingen als IronPython (Python op .NET), Jython (Python op de JVM) en PyPy (een zeer ambitieus project om Python te draaien via Python; ik weet er het fijne niet van, maar het idee is dat er optimalisaties mogelijk zijn omdat een compiler/interpreter in Python beter beheersbaar is dan een compiler/interpreter in C). Zie trouwens ook dit artikel van vermaarde software developer Joel Spolsky. Python hangt aan dat er slechts 1 (of een beperkt aantal) manier moet zijn om iets te doen, Ruby is typisch aanhanger van zoveel mogelijk manieren om iets te doen (TOOWTDI vs TIMTOWTDI, ofzo).

Rustacean


Verwijderd

Kijk naar de syntax van beide talen, kies welke je fijner vindt. Ik voor mij verkies Python boven Ruby, omdat ik blokvorming door indentatie geweldig vind, en een hekel heb aan sigils, die er bij Ruby behoorlijk veel inzitten. Nogmaals, kwestie van smaak.

Kwa uitdrukkingskracht zijn ze beiden ongeveer gelijk.

Kwa libraries zijn er voor Python meer, omdat die taal al langer bestaat.

Kwa GUI heb je met allebei de talen pech; het is een HEL om met Python een GUI applicatie te maken en ik stel me voor dat het met Ruby niet veel beter zal zijn (En dan bedoel ik hel in vergelijking met RAD tools zoals Delphi. Je kan het natuurlijk altijd slechter treffen, en sommige mensen zullen zeggen dat het allemaal best meevalt, maar ik vind het verre van comfortabel om een GUI app in Python te klussen. Ach misschien ben ik verwend ;)).

  • Matthis
  • Registratie: Juli 2004
  • Laatst online: 12-02 21:57
en php-gtk? gtk.php.net
als je toch al ervaring hebt met PHP en het slechts "dingetjes" zijn, dus vermoedelijk geen al te grote projecten?

  • Aloys
  • Registratie: Juni 2005
  • Niet online
ik vond zelf toch echt wel dat java een stukie makkelijker was.... en uiteraard genoeg informatie :D

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 14:51
Aloys Akkerman schreef op donderdag 07 september 2006 @ 00:14:
ik vond zelf toch echt wel dat java een stukie makkelijker was.... en uiteraard genoeg informatie :D
Met stom is ^^ :)

Zeker als je al PHP kent is JAVA niet al te moeilijk om te leren en is het ideaal om cross-platform desktop applicaties mee te maken.

Overigens kun je met PHP zelf ook desktop apps maken, maar da's op z'n zachtst gezegd niet ideaal :)

[ Site ] [ twitch ] [ jijbuis ]


  • 12_0_13
  • Registratie: April 2004
  • Laatst online: 12-02 13:19
Neem Python, dan kan je Django gebruiken (www.djangoproject.com). De Python versie van Ruby on Rails, alleen sneller ;)

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Python is ouder, met een stabielere hoeveelheid gebruikers en veel meer libraries. Bovendien is het opgezet door iemand die een goed bruikbare taal wilde ontwikkelen en daarvoor veel discussie met anderen is aangegaan; niet door iemand die alleen maar zijn taal wilde ontwikkelen. Ik heb geen ervaring met Ruby, wel met Python, maar uit gesprekken met collega's met zowel Ruby als Python ervaring of alleen Ruby ervaring is mijn conclusie dat Python overzichtelijker en consistenter is. Bepaalde constructies in Ruby vind ik gedrochten (en op Oosterse grammatica ge-ent); die moet ik in Python nog tegenkomen.

Persoonlijk verwacht ik dat Ruby een 'not Python' hype is, terwijl Python zich als blijver bewezen heeft. Maar dat is niet meer dan een gut feeling.

[ Voor 8% gewijzigd door Confusion op 07-09-2006 07:27 ]

Wie trösten wir uns, die Mörder aller Mörder?


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Ruby een hype? Het gaat al jaren mee, nu met RoR is er even een hype, maar vooral in het Oosten is er een trouwe schare die Ruby aanhangt.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

Verwijderd schreef op woensdag 06 september 2006 @ 22:31:
...
Voor web-development gebruik ik PHP, echter ik zoek iets waarmee ik redelijk snel iets voor de destop kan bouwen (mn database dus). Java of C++ lijkt me hier te lastig voor, heb daar geen ervaring mee.
...
Als je al ervaring met web-dev hebt, kan je natuurlijk ook gewoon een lokaal servertje draaien (webbrick in ruby, ptyhon weet ik niet direct...) met daarop je webapp (evt. met AJAX) . Dan hoef je je bestaande vaardigheden niet uit te breiden.

  • Boss
  • Registratie: September 1999
  • Laatst online: 16:23

Boss

+1 Overgewaardeerd

Als het je echt om database applicaties gaat zou je ook eens kunnen kijken naar FileMaker. Dit is vergelijkbaar met MS Access, maar je kan hetzelfde bestand op Mac en PC gebruiken. Er zijn ook servers voor beschikbaar en voor zover ik weet goed schaalbaar.

Dan ben je sneller op weg dan wanneer je met een of ander scripttaaltje aan de slag gaat.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 14:44
Ik heb zelf een klein beetje ervaring met het maken van applicaties in Python en wxPython. Zelf vond ik dit niet echt lekker werken. Echter een tussenframework als PythonCard maakt dingen al een stuk prettiger en kun je zelfs eenvoudig schermpjes in elkaar slepen.

Met Ruby heb ik geen directe ervaring. Heb me wel wat verdiept in RoR en de taal Ruby op zich, maar ik vind de syntax van Ruby te ranzig(in vergelijking met Python) om daar echt iets mee te gaan doen. Dan gebruik ik iever één van de Pythonvarianten: Turbogears / Django.

Verwijderd

Topicstarter
Dank voor de vele reacties. GTK-PHP heb ik bekeken, maar ik wil graag een standalone applicatie gebundeld met database, en dan heb ik het idee dat Python wat beter is uitgewerkt dan GTK-PHP (oogt me net iets te hobbyistisch)...

Python heeft ook mijn voorkeur boven Ruby, deels gevoelsmatig...heb het idee dat die taal wat meer "staat", zeker als mensen van Google er ook veel mee doen.

Java: wel, lijkt me toch al een stukje omslachtiger, maar misschien ben ik te negatief. Hoor echter dat mensen met Python toch erg snel iets in elkaar kunnen zetten, en juist als het niet al te grote projecten zijn, lijkt me dit ook voldoende.

GUI: wel, als je met een beetje scripten elementen toevoegt aan een GUI, is het mij ook al goed. De GUI zelf zal niet al te complex zijn, verwacht ik...

Maar goed, misschien zou ik nog eens opnieuw naar Java moeten kijken. Lokale webserver is geen optie, Java misschien, dank je voor Django-tip - kende ik niet - en ik ben toch heel benieuwd om ervaringen te horen van mensen die GUI database apps met Python hebben gemaakt.

Pieter

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 14:44
Als de GUI niet al te complex wordt en je wilt graag Python gebruiken zou ik als ik jou was wel wxPython icm PythonCard overwegen.

Verder zou je voor DB-communicatie naar de volgende dingen kunnen kijken:
http://initd.org/tracker/pysqlite
http://dev.mysql.com/downloads/python.html
http://www.sqlobject.org/

  • bodiam
  • Registratie: December 2001
  • Laatst online: 31-12-2024
Verwijderd schreef op donderdag 07 september 2006 @ 10:20:
Java: wel, lijkt me toch al een stukje omslachtiger, maar misschien ben ik te negatief. Hoor echter dat mensen met Python toch erg snel iets in elkaar kunnen zetten, en juist als het niet al te grote projecten zijn, lijkt me dit ook voldoende.
Pieter
Geen idee of je te negatief bent, maar wat bedoel je met "omslachtiger"? Schermpjes bouwen in Java, en ik gok in elke taal, is een vrij arbeidsintensief traject, tenzij je een Visual Builder gebruikt, zoals VB en Delphi hebben. Ook voor Java zijn er diverse (ook gratis) schermbouwers, waarbij Matisse (gratis, en standaard in NetBeans) 1 van de betere schijnt te zijn (ikzelf heb minimale ervaring ermee).

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 14:51
Verwijderd schreef op donderdag 07 september 2006 @ 10:20:
Java: wel, lijkt me toch al een stukje omslachtiger, maar misschien ben ik te negatief. Hoor echter dat mensen met Python toch erg snel iets in elkaar kunnen zetten, en juist als het niet al te grote projecten zijn, lijkt me dit ook voldoende.
Tja, wat ik zei, als je al PHP kent is JAVA eigenlijk maar een relatief kleine stap :) Ik ben zelf begonnen met PHP, een jaar later moest ik voor m'n studie een cursus JAVA leren. Dat vak heb ik zonder enige moeite en zelfs zonder hoorcolleges te volgen in een keer gehaald. Het laatste practicum bestond uit een simpel rekenprogramma schrijven met een GUI, na 7 weken een uurtje of twee per week eraan besteden was dat voor mij geen enkel probleem. Qua leercurve zeker niet een enorm omslachtige of moeilijk taal, maargoed ik ken zelf Python en RoR niet dus veel meer kan ik er helaas ook niet over zeggen :)

[ Site ] [ twitch ] [ jijbuis ]


Verwijderd

Topicstarter
Wel, het klinkt hier uiteindelijk toch allemaal best aardig pro-Java. Nu wil ik niet zeggen dat ik een ervaren PHP programmer ben, ik begin geleidelijk aan wel netter te programmeren en meer met functies te werken, maar om te zeggen dat het nu allemaal even OO is... nu nee. ;-)

Op zich heb ik begrepen dat qua snelheid de Java 5 zeker de moeite is, en zeker voor het soort applicaties dat ik voor ogen heb, zal de meerwaarde van C++ beperkt zijn, en derhalve m.i. de investering qua tijd niet waard.

Echter, in hoeverre spelen bij Java nog de VM-problemen? Kun je eenvoudig twee versies compileren, eentje met en eentje zonder VM en de gebruiker bij twijfel gewoon de VM-versie laten installeren? Of kan hij dan wellicht problemen ervaren met andere apps, die een andere VM-versie gebruiken die niet compatible is met de huidige versie (heb eens wat horen zeggen dat daar nogal eens wat moeilijkheden mee zouden zijn, maar weet niet in hoeverre dit een broodje aap is).

Ik kan er opnieuw naar kijken, als Java inderdaad zo lekker zou werken.... Ik denk een open deur, maar wil dat ook een beetje goed samengaan met het bundelen van een (gratis) database versie, of een andere oplossing, zodat je makkelijk database-appjes kunt maken (ik zou verbaasd zijn met het antwoord "nee", wacht eigenlijk meer op een beetje toelichting).

En qua GUI: SWT? Of heeft Swing inmiddels ook een beetje native Mac OS X interface gekregen?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 13-02 18:09
Had laatst een beetje geprutst met Boa, kon je toch aardig snel wat GUI stuff in elkaar friemelen met Python.

Misschien iets voor jou? http://boa-constructor.sourceforge.net/

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

offtopic:
Boa Constructor _o-

Die naam, hoe verzinnen ze het d:)b

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Cloud
  • Registratie: November 2001
  • Laatst online: 01-02 22:50

Cloud

FP ProMod

Ex-moderatie mobster

kenneth schreef op donderdag 07 september 2006 @ 08:01:
Ruby een hype? Het gaat al jaren mee, nu met RoR is er even een hype, maar vooral in het Oosten is er een trouwe schare die Ruby aanhangt.
Heb zelfs ergens gelezen (weet niet pcies waar, volgens mij O'Reilly) dat in het Oosten Ruby veel meer gebruikt wordt dan Python. Hier in het westen is het dus vooral Python nog dat in gelijke situaties gebruikt wordt. Met RoR (dat dus voor publiciteit zorgt) kan Ruby hier ook nog wel es goed op komen :) Helaas is webondersteuning voor RoR nogal schaars dus vooral mensen met eigen servers kunnen hiermee werken. M.i. is dit nog een van de zaken die Ruby tegenhoudt om écht goed op te komen in het westen.

Zelf (als Java programmeur) heb ik wel met Ruby gewerkt, en ik moet zeggen dat het me wel bevalt. De syntax is alleen erg wennen, net als een paar andere zaken. Python heb ik verder geen ervaring mee.

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Verwijderd

FragFrog schreef op donderdag 07 september 2006 @ 17:03:
Tja, wat ik zei, als je al PHP kent is JAVA eigenlijk maar een relatief kleine stap :)
Dit betwijfel ik ten zeerste. Een taal is maar een manier om je uit te drukken. Dus hoe groot de overstap zal zijn is naar mijn mening afhankelijk van je manier van uitdrukken.

Wanneer we de gangbare manier van uitdrukken in beide talen vergelijken kom ik juist tot de conclusie dat deze talen (relatief) enorm veel uit elkaar liggen. De overstap van php naar een ruby of python is naar mijn mening een kleinere. Dus ik denk dat TS daarin een logische keuze heeft gemaakt.

Wat betreft ruby versus python. Ik opteer voor het eerder genoemde "flip-a-coin" methodiek.

Verwijderd

Topicstarter
Interessant... jullie meningen verschillen evenveel als die van een paar dokters onderling ;-)

Toch nog even over Java: ik wil ook de gebruiker een makkelijk eindresultaat geven. Als ik bv kijk naar Eclipse, dan kun je een enkele installer downloaden en heb je geen gezeur met een VM. Is dit omdat de makers van Eclipse zo geniaal zijn, of is dat voor simpele geesten zoals ondergetekende ook te doen?

Qua GUI zal Java op zich wel beter zijn, en het lijkt me interessant om die taal te beheersen (een beetje), alleen moet het wel een doel hebben. Zal in ieder geval beter te doen zijn dan C++ met Qt, lijkt me... dus als Java tov Python een hoop voordelen biedt en PHP-kennis een overstap iets eenvoudiger maakt, best...

Als Java toch een heel stuk hoger ligt, dan moet ik misschien toch de GUI mogelijkheden van Python verder bekijken....

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 12-02 12:22
Verwijderd schreef op donderdag 07 september 2006 @ 23:20:
...

En qua GUI: SWT? Of heeft Swing inmiddels ook een beetje native Mac OS X interface gekregen?
De aqua look en feel van Java is errug goed naar mijn idee. Je moet alleen wel wat met dingetjes rekening houden die erg meevallen. Het is allemaal zelfs extreem goed gedocumenteerd:

http://developer.apple.co...a14Development/index.html
http://developer.apple.co...tion/Java/index-date.html

Zijn ook goede artikelen over te vinden:
http://today.java.net/pub/a/today/2003/12/08/swing.html
http://today.java.net/pub/a/today/2004/01/05/swing.html

Maar dat zijn vaak niet meer dan aftreksels van de Apple docs.

offtopic:
Overigens komt in OS-X Leopard ook DTrace en ik heb zo'n gevoel dat daarbij ook Java ondersteunt gaat worden. Meer daarover met linkjes op mijn blog:
http://blog.leenarts.net/2006/08/15/dtrace-in-os-x/

(Schaamteloze plug, maar waarom iets opnieuw tiepen als het al ergens staat.)

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

In plaats daarvan kun je beter naar SQLAlchemy kijken.

Nadelen van Java: statische typering kost wel veel tijd/moeite maar levert niet veel op, geen first-class functions, kenkerlange startup-tijd van de VM, hoog geheugengebruik. I'm not a fan.

Rustacean


  • FragFrog
  • Registratie: September 2001
  • Laatst online: 14:51
Verwijderd schreef op vrijdag 08 september 2006 @ 12:23:
Dit betwijfel ik ten zeerste. Een taal is maar een manier om je uit te drukken. Dus hoe groot de overstap zal zijn is naar mijn mening afhankelijk van je manier van uitdrukken.

Wanneer we de gangbare manier van uitdrukken in beide talen vergelijken kom ik juist tot de conclusie dat deze talen (relatief) enorm veel uit elkaar liggen. De overstap van php naar een ruby of python is naar mijn mening een kleinere. Dus ik denk dat TS daarin een logische keuze heeft gemaakt.
Tja, ik ken ruby en python zoals gezegd niet echt, maar qua manier van uitdrukken lijken JAVA en php toch echt wel erg veel op elkaar vind ik. De basis van het omgaan met operators, functies en objecten is in mijn ervaring nagenoeg gelijk. Natuurlijk, er zijn wat verschillen zoals het moeten aangeven van een return type, strong typed variabelen etc, maar qua "taal" komen ze goed overeen - van wat ik kan zien veel meer dan PHP en Python bijvoorbeeld. De achterliggende structuur van Python en PHP lijkt welliswaar weer meer op elkaar, maar in mijn ervaring is het simpeler een nieuwe taal te leren als je de basis dingen al kent en enkel voor taal-specifieke functies in de handleiding moet duiken.

Daarnaast is Python bijvoorbeeld ook gewoon stiekem strong-typed, dus dat maakt al weinig uit :)

Manuzhai: tja, daarin kan ik je enkel gelijk geven. Hoewel er al veel verbeterd is blijven er nog altijd snellere en efficientere talen. Toch denk ik dat het voor cross-platform lichte desktop applicaties geschreven door iemand met PHP kennis nog steeds een goede zo al dan niet de beste keuze is :)

[ Voor 9% gewijzigd door FragFrog op 09-09-2006 06:34 ]

[ Site ] [ twitch ] [ jijbuis ]


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

FragFrog schreef op zaterdag 09 september 2006 @ 06:30:
Tja, ik ken ruby en python zoals gezegd niet echt, maar qua manier van uitdrukken lijken JAVA en php toch echt wel erg veel op elkaar vind ik. De basis van het omgaan met operators, functies en objecten is in mijn ervaring nagenoeg gelijk. Natuurlijk, er zijn wat verschillen zoals het moeten aangeven van een return type, strong typed variabelen etc, maar qua "taal" komen ze goed overeen - van wat ik kan zien veel meer dan PHP en Python bijvoorbeeld. De achterliggende structuur van Python en PHP lijkt welliswaar weer meer op elkaar, maar in mijn ervaring is het simpeler een nieuwe taal te leren als je de basis dingen al kent en enkel voor taal-specifieke functies in de handleiding moet duiken.

Daarnaast is Python bijvoorbeeld ook gewoon stiekem strong-typed, dus dat maakt al weinig uit :)
De basis van het omgaan met operators, functies en objecten is in Java en PHP evenzeer hetzelfde als in Python, Ruby, Lua, Perl, Boo, Groovy en willekeurig welke andere (procedurele) taal. Dat PHP niet op Python lijkt zit hem alleen in de indentatie-requirements van Python (die in feite uniek zijn tussen de meeste talen, alleen Python en talen die erdoor geïnspireerd zijn hebben deze aanpak) en wellicht de strong typing van Python die in verhoogde mate geldt in Java (want daar is de typering ook nog eens statisch).

Ik zie je punt dus niet zo.

Rustacean


Verwijderd

Topicstarter
Wel... via de blog van jeroen leenarts kwam ik uit op wat linkjes over OSX 10.5 waarin Apple blijkbaar ook RoR gaat ondersteunen.. Python zit iig nu al in 10.4

Verder, gestimuleerd door de flipped coin techniek, zou ik dan toch eerder voor Python kiezen, als het deze taal wordt (vergeleken met Ruby).

Ik ben alleen opnieuw aan het twijfelen gebracht over Java... mijn ervaring daarmee dateert alweer van even geleden, en misschien is de stap van PHP naar Java kleiner dan ik denk... Nu kan ik me hierin vergissen, want ik ben zeker geen profi PHP developer, echter ik heb de in loop van de jaren wel wat handigheidjes bijgeleerd en heb een basis met programmeren. (alleen dat OO, dat zit er nog altijd niet echt in)

Dus ik zal nog eens wat gaan nakijken, en me in deze (of een nieuwe - voor zover de zoekfunctie mijn vragen niet al beantwoordt) discussie verder vooral richten op Java vs Python voor light-weighted database driven cross platform applications (waarom hebben we nog een Nederlandse taal eigenlijk ? ;-) )

Dank je voor jullie reacties, en Java vs Pyton blijft me nog even interesseren!

Pieter

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 14:44
Manuzhai schreef op vrijdag 08 september 2006 @ 21:45:
[...]
In plaats daarvan kun je beter naar SQLAlchemy kijken.
Ik heb geen ervaring met SQLAlchemy, en slechts een héél klein beetje SQLObject, maar zou je misschien je bewering kunnen onderbouwen?

Edit: als ik een beetje zoek kom ik tegen dat SQLObject meer bedoeld is voor nieuwe projecten die snel ontwikkeld moeten worden. SQLAlchemy is meer iets als (N)Hibernate en handiger als je een bestaande DB hebt en/of meer controle wilt hebben over db-structuren en queries, waar je met SQLObject niet veel mee hoeft te doen.

[ Voor 31% gewijzigd door Daspeed op 09-09-2006 13:22 ]


Verwijderd

DrClearbottom schreef op zaterdag 09 september 2006 @ 13:08:
[...]

Ik heb geen ervaring met SQLAlchemy, en slechts een héél klein beetje SQLObject, maar zou je misschien je bewering kunnen onderbouwen?

Edit: als ik een beetje zoek kom ik tegen dat SQLObject meer bedoeld is voor nieuwe projecten die snel ontwikkeld moeten worden. SQLAlchemy is meer iets als (N)Hibernate en handiger als je een bestaande DB hebt en/of meer controle wilt hebben over db-structuren en queries, waar je met SQLObject niet veel mee hoeft te doen.
Volgens mij kan je alles wat je met SQLObject doet, in min of meer dezelfde hoeveelheid code ook in SQLAlchemy doen, terwijl SQLAlchemy veel meer mogelijkheden heeft. Verder heeft SQLObject nogal wat quirks, de originele developer (Ian Bicking) heeft dat ook zelf toegegeven. De tendens in de Python-wereld is, voorzover ik dat kan overzien, om in nieuwe projecten vooral SQLAlchemy te gebruiken. SQLObject blijft nog wel een tijdje aanwezig, maar dat komt doordat SQLAlchemy een stuk jonger is en SQLObject dus in een hoop projecten zit.

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Ik werk nu dagelijks in python en om eerlijk te zijn vind ik het geen goeie taal:

- scope definieren door indendatie. Als je iets als C/C++ gewend bent dan is dit echt een hel. Zeker als je IDE je er dan nog mee plaagt... Probeer maar eens een geneste for-lus met wat if's etc overzichtelijk te houden. in C++ kun je doen:
C++:
1
2
3
4
for (int i = 0; i<10;i++)
{
  //veel code
} // for i=1->10

Het is al de eerste keer niet dat door idiote indendatie het programma fout loopt
- loose-typing: Python kent geen types. Het is een beetje revolutie naar VB met zijn Variant-type. Alles is niks, niks is alles.
- C++ compile-time fouten zijn Python-runtime fouten.
Heb je van een variabele een hoofdletter gemist? staat er een 'a' ipv een 'e'? Je vindt het pas als je je code draait. Dit is enorm tijdrovend om telkens alles te moeten draaien om te zien of je geen idiote typfouten hebt. Bovendien kan dit leiden tot code met onvoorspelbaar gedrag in sommige gevallen... denk maar:
Python:
1
2
3
4
5
def SomeFunction(a, b, c):
  if a:
     return b
  else:
     return d

als jij bij het testen van je software altijd het geval (a=true) hebt dan zal je nooit zien dat je code fout is.
- Leg aan een beginnende programmeur maar eens het verschil uit tussen parse-time evalutatie en execute-time evaluatie...
Voor zij die het niet begrijpen:
Python:
1
2
3
4
def SomeFunction(a,b,c):
  return a+b+c+d

d = 10

Maar H!GHGuY, maak je hier niet dezelfde fout als in je vorig voorbeeld? Nee!
wanneer je deze code importeert(dus wanneer python deze code voor de eerste maal leest) wordt de functie toegekend aan SomeFunction (functies zijn ook variabelen!) en wordt 10 toegekend aan d.
Wanneer je SomeFunction aanroept, is d gedefinieerd als global en kan je deze dus gebruiken...

of erger:
Python:
1
2
3
4
5
6
def SomeFunction():
  global d
  d = 10

def SomeOtherFunction()
  return d

Wat gebeurt er als SomeOtherFunction() voor SomeFunction() wordt aangeroepen?
Waar is het principe van "Design by contract" ? Waarom moet ik de implementatie van alles kennen voor ik het kan gebruiken ?
- Hoe kan een taal zich object-oriented noemen als je niet eens encapsulation hebt?
Python:
1
2
3
4
5
6
7
8
class A:
  def __init__():
     a = 10

def SomeFunction():
  mijnA = A()
  mijnA.a = 20
  return mijnA

- Waarom kan je overal een else-clause aanplakken?
Python:
1
2
3
4
5
6
7
8
9
10
11
12
try:
  doeIetsGevaarlijks()
except:
  pass
else:
  nietsGebeurd()
# is bijna gelijk aan (en minder veilig dan?)
try:
  doeIetsGevaarlijk()
  nietsGebeurd()
except:
  pass

Er zit een verschil in: bij de eerste is er geen exception handling op nietsGebeurd(), bij de 2de wel.
Ik vind dit soort constructs te erg voor woorden.
Zie ook:
Python:
1
2
3
4
5
6
7
8
9
10
11
myArray = range(100)
for i in range(len(myArray))
  if myArray[i] > 10:
    doeIets()
  elif myArray[i] > 50:
    break
  elif myArray[i] > 90:
    continue
  doeNogIets()
else:
  doeNiets()

Wat is het nut hier nu van... Het maakt je code helemaal onoverzichtelijk en moeilijk te begrijpen.
- Waarom bestaat try: except: en try:finally maar geen try:except:finally:?
- Waarom moet je bij klasse-methoden telkens "self" meegeven ? Zelfs C++ laat dit over aan de compiler...

Dit is een kleine greep uit de dingetjes die mij dagelijks storen. Python werkt imo enorm contraproductief voor iemand die een 'echte' taal gewoon is.
Er heeft ooit iemand gezegd: "moest menselijke taal even strikt zijn als een programmeertaal, mensen zouden nooit nog misverstanden hebben". Python veegt hier dubbel en dik zijn broek aan.
Alles kan, alles mag. Het staat toe om dingen te doen die in normale talen niet kunnen omdat het leidt tot slechte code en het zorgt ervoor dat je de volledige implementatie moet kennen voor je het kan gebruiken.

Het enige waar ik Python nog voor wil gebruiken is om "snel iets in mekaar te klieden". En voor zover ik weet was dat ook de oorspronkelijke bedoeling ervan.
Als je jezelf enigszins serieus wil nemen, leer dan eerst een "strikte" taal en bekijk daarna Python en niet omgekeerd, je zou jezelf wel eens in je aders kunnen snijden door eerst de slechte manieren aan te leren.

Dit is bovendien een welgemeende proficiat aan mensen die ooit een groter project in Python hebben gemaakt. Het doet me denken aan skaters die telkens als ze op hun bek gaan terug opstaan... veel moed hebben ze ;)

Over ruby kan ik helaas weinig zeggen, wegens geen ervaring ermee, maar afgaande op de kritiek van anderen in deze topic zou ik dus maar van beide wegblijven.

En om je dan ook, behalve een rant op python, wat constructieve commentaar mee te geven:
kijk eens naar Java of C# (icm met m0n0). Het zijn de ideale tools voor niet-IT'ers om toch iets mee in mekaar te flansen in een minimum van tijd.

ASSUME makes an ASS out of U and ME


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 14:44
Zo, das een heel verhaal HIGHGuY :P
Ik heb geen tijd om op alles te reageren, maar hier alvast een klein beetje tegengas ;)
HIGHGuY schreef op zondag 10 september 2006 @ 11:28:
Ik werk nu dagelijks in python en om eerlijk te zijn vind ik het geen goeie taal:

- scope definieren door indendatie. Als je iets als C/C++ gewend bent dan is dit echt een hel. Zeker als je IDE je er dan nog mee plaagt... Probeer maar eens een geneste for-lus met wat if's etc overzichtelijk te houden. in C++ kun je doen:
C++:
1
2
3
4
for (int i = 0; i<10;i++)
{
  //veel code
} // for i=1->10
Het is denk ik een kwestie van wennen en van smaak. Ik vind zelf de indentatie wel prettig. Wat leest makkelijker?
code:
1
2
3
4
5
6
7
8
9
10
11
for(in i = 0; i < 10; i++){
for (int y=0; y < 20; y++)
{
print(y);
for(int z = 0; z < 4; z++)
{
print(z);
}
}
print(i);
}

of

code:
1
2
3
4
5
6
for i in range(10):
   for y in range(20):
      print y
      for z in range(4):
         print z
   print i
Het is al de eerste keer niet dat door idiote indendatie het programma fout loopt
- loose-typing: Python kent geen types. Het is een beetje revolutie naar VB met zijn Variant-type. Alles is niks, niks is alles.
Python espouses duck typing, also known as latent typing. Type constraints are not checked at compile time; rather, operations on an object may fail, signifying that the given object is not of a suitable type. Despite not enforcing static typing, Python is strongly typed, forbidding operations which make little sense (for example, adding a number to a string) rather than silently attempting to make sense of them.
Python kent dus wel types :)
- C++ compile-time fouten zijn Python-runtime fouten.
Heb je van een variabele een hoofdletter gemist? staat er een 'a' ipv een 'e'? Je vindt het pas als je je code draait. Dit is enorm tijdrovend om telkens alles te moeten draaien om te zien of je geen idiote typfouten hebt. Bovendien kan dit leiden tot code met onvoorspelbaar gedrag in sommige gevallen...
Compile vs Runtime fouten is natuurlijk bij elke gecompileerde taal vs geïnterpreteerde taal en niet alleen bij Python. En ook hier heeft dat weer zo zijn voor en nadelen. Wat bijvoorbeeld als je een bepaald stuk functionaliteit in een programma wilt testen, maar een bepaald gedeelte van je code (wat je niet zult raken tijdens executie-time) geeft nog compile errors? Bij gecompileerde talen zul je eerst (al) die fouten eruit moeten halen terwijl je bij geïnterpreteerde talen gewoon gelijk je test had kunnen doen.
denk maar:
Python:
1
2
3
4
5
def SomeFunction(a, b, c):
  if a:
     return b
  else:
     return d

als jij bij het testen van je software altijd het geval (a=true) hebt dan zal je nooit zien dat je code fout is.
Daarom is unit-testing ook zo belangrijk. Python leent zich daar geloof ik behoorlijk makkelijk voor.
- Leg aan een beginnende programmeur maar eens het verschil uit tussen parse-time evalutatie en execute-time evaluatie...
Voor zij die het niet begrijpen:
Python:
1
2
3
4
def SomeFunction(a,b,c):
  return a+b+c+d

d = 10

Maar H!GHGuY, maak je hier niet dezelfde fout als in je vorig voorbeeld? Nee!
wanneer je deze code importeert(dus wanneer python deze code voor de eerste maal leest) wordt de functie toegekend aan SomeFunction (functies zijn ook variabelen!) en wordt 10 toegekend aan d.
Wanneer je SomeFunction aanroept, is d gedefinieerd als global en kan je deze dus gebruiken...

of erger:
Python:
1
2
3
4
5
6
def SomeFunction():
  global d
  d = 10

def SomeOtherFunction()
  return d

Wat gebeurt er als SomeOtherFunction() voor SomeFunction() wordt aangeroepen?
Waar is het principe van "Design by contract" ? Waarom moet ik de implementatie van alles kennen voor ik het kan gebruiken ?
Heb je hier ook last van als je je code netjes binnen een class zet?
- Hoe kan een taal zich object-oriented noemen als je niet eens encapsulation hebt?
Python:
1
2
3
4
5
6
7
8
class A:
  def __init__():
     a = 10

def SomeFunction():
  mijnA = A()
  mijnA.a = 20
  return mijnA
Ontbreken van encapsulation is aan 1 kant wel jammer, aan de andere kant is het ook wel weer een beetje te begrijpen waarom er voor gekozen is om het niet te doen: 't zorgt voor voor extra werk/code voor een scripting taal die wil dat alles snel kan. Blijft wel een beetje twijfelachtig, misschien was het als optie handiger geweest.

Aan de rest om mij an te vullen ;)

  • Bigs
  • Registratie: Mei 2000
  • Niet online
Ik kan alleen mijn subjectieve mening geven: Ruby is veel leuker om te programmeren dan Python.

Ik ben een paar jaar terug ooit aan Python begonnen, maar kon me er nit echt in vinden. De hele syntax van de taal stond me niet aan.

Ruby vond ik daarentegen vanaf het begin een prettige taal. Het is een beetje de rijdersauto onder de programmeertalen imo. Het zit echt vol slimmigheidjes die je het leven een stuk makkelijker maken. Het enige jammere is dat Ruby op dit moment nog wel iets trager is dan de meeste andere talen, maar hier komt met Ruby 2.0 verandering in. In die versie is het de bedoeling dat Ruby namelijk in een virtual machine komt te draaien.

Verwijderd

- loose-typing: Python kent geen types. Het is een beetje revolutie naar VB met zijn Variant-type. Alles is niks, niks is alles.
Dat is pertinent niet waar. Python is dynamically en strong-typed. Dat wil zeggen dat het type van een variabele niet "compile-time" kent, maar ook dat je geen typen kunt mixen (wat geloof ik bij een VB Variant en in bijv PHP wel kan):

code:
1
2
3
4
5
6
>>> 1 + "1"

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in -toplevel-
    1 + "1"
TypeError: unsupported operand type(s) for +: 'int' and 'str'
- C++ compile-time fouten zijn Python-runtime fouten.
Heb je van een variabele een hoofdletter gemist? staat er een 'a' ipv een 'e'? Je vindt het pas als je

je code draait. Dit is enorm tijdrovend om telkens alles te moeten draaien om te zien of je geen idiote typfouten hebt. Bovendien kan dit leiden tot code met onvoorspelbaar gedrag in sommige gevallen... denk maar:
Python:
1
2
3
4
5
def SomeFunction(a, b, c):
  if a:
     return b
  else:
     return d

als jij bij het testen van je software altijd het geval (a=true) hebt dan zal je nooit zien dat je code fout is.
Type-fouten zijn maar een van de vele soorten fouten. Er zijn een heleboel andere soorten fouten die ook statisch getypete talen niet compile-time kunnen ondervangen. Je hebt in deze talen dus een vals gevoel van zekerheid: je moet altijd al je code testen (bijv., zoals gezegd, via unit tests). Schrijf jij echt C++ code waarvan stukken code niet getest zijn? Misschien staan er wel geen type-fouten in, maar wel logische fouten en die zijn misschien nog wel erger. Ook in statische talen kun je trouwens typefouten maken: als je twee variabelen hebt die qua naam erg op elkaar lijken en hetzelfde type hebben.
- Leg aan een beginnende programmeur maar eens het verschil uit tussen parse-time evalutatie en execute-time evaluatie...
Voor zij die het niet begrijpen:
Python:
1
2
3
4
def SomeFunction(a,b,c):
  return a+b+c+d

d = 10

Maar H!GHGuY, maak je hier niet dezelfde fout als in je vorig voorbeeld? Nee!
wanneer je deze code importeert(dus wanneer python deze code voor de eerste maal leest) wordt de functie toegekend aan SomeFunction (functies zijn ook variabelen!) en wordt 10 toegekend aan d.
Wanneer je SomeFunction aanroept, is d gedefinieerd als global en kan je deze dus gebruiken...

of erger:
Python:
1
2
3
4
5
6
def SomeFunction():
  global d
  d = 10

def SomeOtherFunction()
  return d

Wat gebeurt er als SomeOtherFunction() voor SomeFunction() wordt aangeroepen?
Waar is het principe van "Design by contract" ? Waarom moet ik de implementatie van alles kennen voor ik het kan gebruiken ?
Globals worden in de Python wereld eigenlijk alleen gebruikt voor constanten. Dit soort code zul je dan ook praktisch nooit tegenkomen.
- Hoe kan een taal zich object-oriented noemen als je niet eens encapsulation hebt?
Hoe kan een taal zich objecft-oriented noemen als functies niet eens objecten zijn? ;)
- Waarom bestaat try: except: en try:finally maar geen try:except:finally:?
In de laatste versie van Python bestaat try:except:finally wel degelijk.
- Waarom moet je bij klasse-methoden telkens "self" meegeven ? Zelfs C++ laat dit over aan de compiler...
Dit heeft te maken met het feit dat Python compile-time nooit kan weten of een method bound of unbound is. En een beetje folklore is het misschien ook wel ;)
Er heeft ooit iemand gezegd: "moest menselijke taal even strikt zijn als een programmeertaal, mensen zouden nooit nog misverstanden hebben". Python veegt hier dubbel en dik zijn broek aan.
Alles kan, alles mag. Het staat toe om dingen te doen die in normale talen niet kunnen omdat het leidt tot slechte code en het zorgt ervoor dat je de volledige implementatie moet kennen voor je het kan gebruiken.
Het verschil tussen Python en bijv C++ en Java is dat Python je een eigen verantwoordelijkheid geeft, waar je een heleboel flexibiliteit voor terugkrijgt. Je kan in Python idd private variabelen (dat wil zeggen: variabelen die geen deel uitmaken van de API, die beginnen volgens de conventie met een underscore) veranderen, maar een beetje programmeur beseft dat dat niet de bedoeling is, neemt zijn verantwoordelijkheid en doet dat niet. Aan de andere kant is het soms, bijvoorbeeld voor debuggers of serializers, verrekte handig om te weten wat de waarde van een private variabele is.

Kijk, als je C++ of Java letterlijk naar Python probeert over te zetten ben je niet goed bezig. Je moet rekening houden met de specifieke krachten en zwakheden van een taal. In het geval van Python hoef je geen class te maken terwijl je maar een nodig functie hebt, heb je geen anonymous classes nodig omdat er first-class-functions bestaan, etc. De programmeercultuur is dus daadwerkelijk anders: Python beschermt jou niet, maar beperkt je ook niet.

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 14:51
DrClearbottom schreef op zondag 10 september 2006 @ 13:38:
Het is denk ik een kwestie van wennen en van smaak. Ik vind zelf de indentatie wel prettig. Wat leest makkelijker?
code:
1
[...]
Non-argument natuurlijk, ook in andere talen indenteer je, enig verschil is dat het niet HOEFT en dat je je eigen indenteer methode mag kiezen. Als je dan de fouten uit jou code haalt en indenteert op de door mij geprefereerde K&R manier ziet het er zo uit:
code:
1
2
3
4
5
6
7
8
9
for(int i = 0; i < 10; i++) {
  for(int y = 0; y < 20; y++) {
    print(y);
    for(int z = 0; z < 4; z++) {
      print(z);
    }
  }
  print(i);
}

En ja, dat ziet er op het eerste gezicht misschien iets ingewikkelder uit dan de python code. Totdat je het vergelijkt met hoe dit eruit zou zien in PHP:
code:
1
2
3
4
5
6
7
8
9
for($i = 0; $i < 10; $i++) {
  for($y = 0; $y < 20; $y++) {
    print($y);
    for($z = 0; $z < 4; $z++) {
      print($z);
    }
  }
  print($i);
}
Het mag evident zijn dat dit een stuk herkenbaarder is voor een PHP / C programmeur dan de python syntax. Sterker nog, er vanuit gaande dat je in JAVA ook best je variabelen door een $ mag laten voorafgaan is de enige reden waarom je niet letterlijk code kan copy-pasten het ontbreken / vereisen van type declaraties. En dat is iets wat je hoe dan ook zal moeten leren om foutieve implicit casts te voorkomen.

Let wel, ik meng me hier niet in de discussie over of python of java beter is, daarvoor ken ik python niet goed genoeg, maar ik durf toch wel te beweren dat voor iemand die de PHP manier van coden kent JAVA sneller aan te leren is dan Python :)

[ Site ] [ twitch ] [ jijbuis ]


Verwijderd

Let wel, ik meng me hier niet in de discussie over of python of java beter is, daarvoor ken ik python niet goed genoeg, maar ik durf toch wel te beweren dat voor iemand die de PHP manier van coden kent JAVA sneller aan te leren is dan Python :)
Dat durf ik te bestrijden. Bij programmeren is syntax niet zo heel erg belangrijk, het gaat vooral om abstracte principes. Er wordt tegenwoordig volgens mij op 2 manieren in PHP geprogammeerd: als een soort Perl (voornamelijk procedureel) en als een slappe vorm van Java (voornamelijk OOP). Als je de laatste vorm gebruikt, is Java inderdaad makkelijk te leren. Je kan deze manier van werken ook in Python gebruiken, alhoewel echte Pythonistas niet zoveel met de Java-manier ophebben en het dus redelijk ongebruikelijk is. Als je de eerste manier gebruikt, kan je die onmogelijk in Java gebruiken. In Python kan dat weer wel, maar ook weer hier is dat enigszins ongebruikelijk (in Python wordt vaak een mix van procedureel, OOP en functioneel gebruikt). Kortom: wat makkelijker te leren is hangt ervanaf hoe je PHP gebruikt. Een programmeur die niet door syntax heen kan kijken, is geen snip waard.

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 14:44
FragFrog schreef op zondag 10 september 2006 @ 15:55:
[...]
Non-argument natuurlijk, ook in andere talen indenteer je, enig verschil is dat het niet HOEFT en dat je je eigen indenteer methode mag kiezen.
Mijn voorbeeld is inderdaad wel een beetje gechargeerd, maar zoals je aangeeft HOEF je niet 1 indenteer-methode te kiezen. En dat is nou juist een beetje een 'probleem', aangezien meerdere programmeurs meerdere stijlen hebben en programmeurs ook wel eens (per ongeluk) kunnen afwijken daarvan. Als een accolade verkeerd staat en je ziet hem niet of hij staat anders waar je hem verwacht dan kan een stuk code lezen en begrijpen best nog wel eens lastig worden.

Python's manier zorgt ervoor dat de code altijd op dezelfde manier leesbaar is, terwijl je dat bij bijvoorbeeld Java en PHP maar moet afwachten.

Dus of het nu een non-argument is... ik vind van niet ;)

  • Soultaker
  • Registratie: September 2000
  • Nu online
HIGHGuY: een groot deel van je kritiek is simpelweg een gebrek aan begrip van de achterliggende concepten. De belangrijkste:
HIGHGuY schreef op zondag 10 september 2006 @ 11:28:
- loose-typing: Python kent geen types. Het is een beetje revolutie naar VB met zijn Variant-type. Alles is niks, niks is alles.
Waarden zijn getypeerd, en variabelen niet. In statisch getypeerde talen is het vaak precies andersom. Dat is heel wat anders dan 'geen types kennen'. Het Variant type van Visual Basic verlegt inderdaad de typering van variabelen naar waarden.
- Leg aan een beginnende programmeur maar eens het verschil uit tussen parse-time evalutatie en execute-time evaluatie...
[..]
def SomeFunction():
global d
d = 10

def SomeOtherFunction()
return d
Variabelen worden at run time gebonden, niet at compile time. Dat betekent inderdaad dat pas at run time bekend wordt of een variabele gebonden kan worden of niet. Wat je met 'parse time evaluatie' bedoeld is zelfs mij een raadsel -- er wordt 'parse time' niets uitgevoerd!

Maar hoe verschilt je voorbeelt van deze code:
Java:
1
2
3
4
5
6
7
8
9
10
11
class Test {
    Foo foo;

    void someFunction() {
        foo->method();
    }

    void someOtherFunction() {
        foo = new Foo();
    }
};
Dat een variabele gedeclareerd is, betekent niet dat 'ie een zinnige waarde heeft. Als someFunction() deel uitmaakt van een publieke interface en er is geen reden om aan te nemen dat someOtherFunction tijdens de initialisatie uitgevoerd zal worden, zul je er in de implementatie van someFunction() gewoon rekening mee moeten houden dat 'foo' nog niet geïnitialiseerd is. In beide talen!
Waar is het principe van "Design by contract" ? Waarom moet ik de implementatie van alles kennen voor ik het kan gebruiken?
Je hoeft niet de hele implementatie te kennen. Voor zover er een contract is, wordt dat in de documentatie uiteengezet, en inderdaad niet in de code. Dat is een groot verschil tussen Python, en een groot voordeel, omdat je nu direct de code kunt schrijven die je wil, zonder dat je allerlei declaraties hoeft toe te voegen, die ook uit de context duidelijk zijn. Dat lever een winst op in productiviteit, en overzichtelijkere code.

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

DrClearbottom schreef op zondag 10 september 2006 @ 13:38:
Het is denk ik een kwestie van wennen en van smaak. Ik vind zelf de indentatie wel prettig. Wat leest makkelijker?
code:
1
2
3
4
5
6
7
8
9
10
11
for(in i = 0; i < 10; i++){
for (int y=0; y < 20; y++)
{
print(y);
for(int z = 0; z < 4; z++)
{
print(z);
}
}
print(i);
}

of

code:
1
2
3
4
5
6
for i in range(10):
   for y in range(20):
      print y
      for z in range(4):
         print z
   print i
Zoals iemand anders al aangaf: het gaat eerder over {} versus indentatie en je kan de C++-code ook mooi indenteren
Python kent dus wel types :)
Ik wist wel dat Python types kent. Ik heb het gewoon wat ongelukkig geformuleerd.
Ik bedoelde dat je niet in een functieheading zoiets kan zetten:
Python:
1
2
def SomeFunction(int a, double b):
   return b/a

Het is zeer moeilijk om code van iemand anders te moeten gebruiken als je niet eens weet welk type variabelen je moet doorgeven. (Ik gebruik CORBA met bijhorende IDL calls. Daarin zitten letterlijk tientallen soorten structs. Ga dan maar even zoeken!)
Compile vs Runtime fouten is natuurlijk bij elke gecompileerde taal vs geïnterpreteerde taal en niet alleen bij Python. En ook hier heeft dat weer zo zijn voor en nadelen. Wat bijvoorbeeld als je een bepaald stuk functionaliteit in een programma wilt testen, maar een bepaald gedeelte van je code (wat je niet zult raken tijdens executie-time) geeft nog compile errors? Bij gecompileerde talen zul je eerst (al) die fouten eruit moeten halen terwijl je bij geïnterpreteerde talen gewoon gelijk je test had kunnen doen.

[...]
Daarom is unit-testing ook zo belangrijk. Python leent zich daar geloof ik behoorlijk makkelijk voor.
Zoals je zelf aangeeft: in C++ is het ook belangrijk om unit-testen te doen. Net dat soort dingen kun je ook daar met unit-testen eruit halen. Bovendien moet je niets testen als je programma niet compileert. Want dat wil zeggen dat je code nog niet af is.
Heb je hier ook last van als je je code netjes binnen een class zet?
en
Variabelen worden at run time gebonden, niet at compile time. Dat betekent inderdaad dat pas at run time bekend wordt of een variabele gebonden kan worden of niet. Wat je met 'parse time evaluatie' bedoeld is zelfs mij een raadsel -- er wordt 'parse time' niets uitgevoerd!

Maar hoe verschilt je voorbeelt van deze code:
Java:
1
2
3
4
5
6
7
8
9
10
11
class Test {
    Foo foo;

    void someFunction() {
        foo->method();
    }

    void someOtherFunction() {
        foo = new Foo();
    }
};


Dat een variabele gedeclareerd is, betekent niet dat 'ie een zinnige waarde heeft. Als someFunction() deel uitmaakt van een publieke interface en er is geen reden om aan te nemen dat someOtherFunction tijdens de initialisatie uitgevoerd zal worden, zul je er in de implementatie van someFunction() gewoon rekening mee moeten houden dat 'foo' nog niet geïnitialiseerd is. In beide talen!
Ik moet toegeven dat vanwege de aard van wat ik moet doen ik procedureel moet werken. Hoewel er wel enkele klassen zijn gedefinieerd als hulp.

Wanneer jij een import laat uitvoeren wordt het bestand uitgevoerd. Dit wil zeggen:
Python:
1
2
3
4
def FunctionA():
  // doe iets

b = 10

Tijdens het importeren wordt de functie toegekend aan variabele FunctionA en wordt 10 toegekend aan b. Dit bedoel ik met at parse-time. Ik heb nog fouten uit code gehaald die daaruit voortkomen.

Wat die Java code betreft: Elke Java object is verantwoordelijk voor zichzelf. Wanneer dit object weet dat een variabele null kan zijn dan moet het daar expliciet op controleren. Een basisregel zou toch moeten zijn: een object mag zichzelf nooit in een ongeldige staat brengen.
Type-fouten zijn maar een van de vele soorten fouten. Er zijn een heleboel andere soorten fouten die ook statisch getypete talen niet compile-time kunnen ondervangen. Je hebt in deze talen dus een vals gevoel van zekerheid: je moet altijd al je code testen (bijv., zoals gezegd, via unit tests). Schrijf jij echt C++ code waarvan stukken code niet getest zijn? Misschien staan er wel geen type-fouten in, maar wel logische fouten en die zijn misschien nog wel erger. Ook in statische talen kun je trouwens typefouten maken: als je twee variabelen hebt die qua naam erg op elkaar lijken en hetzelfde type hebben.
als ik de functie
C++:
1
2
3
4
5
double a(int b, double c)
{
   double mijnVar = c/b;
   return MijnVar;
}

vergelijk met
Python:
1
2
3
def a(b,c):
  mijnVar = c/b
  return MijnVar

Wie zal binnen een programma met behoorlijke omvang eerst zijn fout vinden denk je ? Juist ja.
Hoe kan een taal zich objecft-oriented noemen als functies niet eens objecten zijn? ;)
in Java en C# zijn methodes wel degelijk objecten. Reflection heet dat ;)
Het verschil tussen Python en bijv C++ en Java is dat Python je een eigen verantwoordelijkheid geeft, waar je een heleboel flexibiliteit voor terugkrijgt. Je kan in Python idd private variabelen (dat wil zeggen: variabelen die geen deel uitmaken van de API, die beginnen volgens de conventie met een underscore) veranderen, maar een beetje programmeur beseft dat dat niet de bedoeling is, neemt zijn verantwoordelijkheid en doet dat niet. Aan de andere kant is het soms, bijvoorbeeld voor debuggers of serializers, verrekte handig om te weten wat de waarde van een private variabele is.
Python geeft je teveel verantwoordelijkheid. Er is bovendien niets wat ik met C++/Java niet kan wat ik met Python wel kan. Hoe vaak gebeurt het dat je toch maar even snel de verantwoordelijkheid opzij schuift om iets te doen. "Ik wil dit of dat maar het vereist veel werk om het te doen. Als ik tegen de regels zondig heb ik maar 1 regel code nodig... Ach voor die ene keer." Het gebeurt veel en Python laat het allemaal toe. Tot alles mank loopt natuurlijk.

debuggers en serializers kunnen heus propere technieken hebben om aan private variabelen te kunnen hoor ;)
Kijk, als je C++ of Java letterlijk naar Python probeert over te zetten ben je niet goed bezig. Je moet rekening houden met de specifieke krachten en zwakheden van een taal. In het geval van Python hoef je geen class te maken terwijl je maar een nodig functie hebt, heb je geen anonymous classes nodig omdat er first-class-functions bestaan, etc. De programmeercultuur is dus daadwerkelijk anders: Python beschermt jou niet, maar beperkt je ook niet.
Probeer ik ook niet. Ik moet iets doen in Python wat neit bestaat in C++/Java/C#/...
Ik heb Python op een 2tal daagjes behoorlijk aangeleerd en ik vond het meteen afgrijselijk wat je allemaal kan en mag. Python beschermt je niet, het geeft je een duwtje in de rug.
Toen ik Python aanleerde zag ik bij elke "feature" meteen tientallen situaties waarin men ze misbruikt en tot slechte code komt.

Python vereist een scripter die:
a) veel zelfbeheersing heeft om alles "the nice way" te doen
b) heel veel kan onthouden. Veel documentatie schrijft.
c) de taal goed kent

hoeveel (beginnende zoals de TS) ken je er zo?

ASSUME makes an ASS out of U and ME


  • Soultaker
  • Registratie: September 2000
  • Nu online
HIGHGuY schreef op zondag 10 september 2006 @ 20:09:
Wanneer jij een import laat uitvoeren wordt het bestand uitgevoerd. [..] Tijdens het importeren wordt de functie toegekend aan variabele FunctionA en wordt 10 toegekend aan b. Dit bedoel ik met at parse-time. Ik heb nog fouten uit code gehaald die daaruit voortkomen.
Tijdens het laden van een module wordt de code in die module uitgevoerd, inderdaad. Als je een DLL laadt wordt ook code uitgevoerd, als een C++ object linkt worden ook constructors van globale variabelen aangeroepen, enzovoorts. Dat is niet meer dan logisch. Waarom zet je dan initialisatiecode in je module, als het niet de bedoeling is dat die uitgevoerd wordt?
Wat die Java code betreft: Elke Java object is verantwoordelijk voor zichzelf. Wanneer dit object weet dat een variabele null kan zijn dan moet het daar expliciet op controleren. Een basisregel zou toch moeten zijn: een object mag zichzelf nooit in een ongeldige staat brengen.
En hoe verschilt dit dan van de Python code? Als de twee functies los van elkaar staan, dan moet de module er ofwel voor zorgen dat de variabele geïnitialiseerd wordt, ofwel controleren bij het gebruik ervan. Je hebt nu nog steeds niet verklaart waarom de Python code fout is en de equivalente Java code dat niet zou zijn.
als ik de functie
C++:
1
2
3
4
5
double a(int b, double c)
{
   double mijnVar = c/b;
   return MijnVar;
}

vergelijk met
Python:
1
2
3
def a(b,c):
  mijnVar = c/b
  return MijnVar

Wie zal binnen een programma met behoorlijke omvang eerst zijn fout vinden denk je ? Juist ja.
Beetje domme vergelijking. Stel ik ga een HTTP server schrijven in Python, en jij in C. Wie heeft er de grootste kans op allerlei buffer overflows, memory leaks, security holes...? Juist ja.

De reden dat er verschillende talen zijn, is dat er verschillende doeleinden dienen. Als veel verificatie at compile time wil doen, dan moet je niet in Python programmeren (maar eigenlijk ook niet in Java, C of C++). Maar dat diskwalificeert Python niet als lijmtaal, als taal voor rapid prototyping, als taal voor automation, of om een zekere mate van extensibility in te bouwen in een andere applicatie. Daarvoor is Python heel geschikt, omdat het een veilige, simpele en gestructureerde taal is, met een vlakke leercurve.
Er is bovendien niets wat ik met C++/Java niet kan wat ik met Python wel kan.
Die uitspraak kan ik net zo goed omdraaien. (Overigens kun je met alledrie de talen allerlei dingen niet -- de standard libraries zijn niet volledig, en geen van de drie bevat een andere volledig. Om 'alles' te kunnen ben je dus bij alledrie de talen afhankelijk van libraries van derden.)

  • Soultaker
  • Registratie: September 2000
  • Nu online
Ik gebruik CORBA met bijhorende IDL calls. Daarin zitten letterlijk tientallen soorten structs. Ga dan maar even zoeken!
Ik zal je bluf dan maar even callen. Een 'IDL call' is niets. Er is geen enkele eis dat een interfacedefinitie allerlei structs moet bevatten; dat is geheel je eigen keuze. En Python is uitstekend geschikt voor prototyping en testing van op CORBA gebaseerde applicaties -- ik heb het daar zelf voor gebruikt (met OmniORB's Python bindings) en dat beviel uitstekend, juist omdat je over allerlei dingen als memory management en het casten van references niet hoeft na te denken.

Opmerkelijk is ook dat er iets bestaat als CorbaScript, speciaal ontworpen als lijmtaal voor CORBA applicaties, dat ook dynamische typering (en de CORBA DII) gebruikt, en daarin dus veel lijkt op Python. Blijkbaar vond de OMG dus dat er zoveel behoefte is aan een dynamisch getypeerde taal voor gebruik met CORBA, dat ze er zelf een gedefinieert hebben. En dan zou Python niet handig te combineren zijn met CORBA...?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 13-02 18:09
Soultaker, je gaat steeds verder de kant op van 'Python is een mooie lijmtaal', zeg eens eerlijk : Als jij een project had van redelijke omvang en Python en een andere taal naar jouw eigen keuze maar die wel types forceert, implementatie van interfacee scheidt etc zou kunnen oplossen zou je dan voor Python gaan? Zou je dat ook nog doen als er een aantal beginnende programmeurs op het project zouden meewerken wetende dat die al die ongeschreven regels moeten gaan toepassen?

De punten die HIGHGuY aanhaalt zijn regelrecht ook op VB van toepassing en als ik niet Option Explicit zie aanstaan of overal onnodig varianten zie gaat de code terug naar de tekentafel. Het zorgt voor bugs die kompleet onnodig zijn en erg erg moeilijk te ontdekken. Ik ben echt van mening dat een taal als VB je onzorgvuldigheid aanleert omdat het zo weinig forceert.

Ik zie de voordelen van een taal als Python wel in, maar ik zou het enkel als scripttaal gebruiken. Ik heb er zelf een beetje mee gespeeld en moet zeggen dat het gegoochel met lists en maps etc wel erg makkelijk gaat onder Python.

[ Voor 6% gewijzigd door farlane op 10-09-2006 23:29 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • FragFrog
  • Registratie: September 2001
  • Laatst online: 14:51
Verwijderd schreef op zondag 10 september 2006 @ 16:09:
[..] Als je de eerste manier gebruikt, kan je die onmogelijk in Java gebruiken. In Python kan dat weer wel, maar ook weer hier is dat enigszins ongebruikelijk (in Python wordt vaak een mix van procedureel, OOP en functioneel gebruikt). Kortom: wat makkelijker te leren is hangt ervanaf hoe je PHP gebruikt. Een programmeur die niet door syntax heen kan kijken, is geen snip waard.
Afgezien van dat je ook in JAVA voor kleine projecten wel degelijk functioneel kan programmeren (ik heb zelf pas echt OOP geleerd toen ik C++ ging doen): hoe makkelijk je een taal leert is in feite afhankelijk van hoe lang het duurt voor je eigenaardigheden van een taal kent. Als ik dingen hierboven lees over dat in Python het gebruikelijk is om "i in range(10):" te schrijven gaan m'n nekharen al overeind staan: hoezo i in range 10? Wat is i's initiele waarde? Wanneer wordt i geupdate? Hoe kan ik een naar beneden lopende for loop maken? Hoe zorg ik ervoor dat i in stappen van 2 geupdate wordt? En zo zijn er tientallen basisdingen die je niet weet als je van PHP naar Python gaat maar WEL als je van PHP naar JAVA gaat omdat het daarin exact hetzelfde is! Juist dat soort dingen kosten in mijn ervaring 95% van de tijd die je kwijt bent als je een nieuwe taal gaat leren, tijd die je jezelf kan besparen.
DrClearbottom schreef op zondag 10 september 2006 @ 16:10:
Python's manier zorgt ervoor dat de code altijd op dezelfde manier leesbaar is, terwijl je dat bij bijvoorbeeld Java en PHP maar moet afwachten.

Dus of het nu een non-argument is... ik vind van niet ;)
En wat nu als die manier van leesbaar zijn je niet aanstaat? ;) En ja, je moet wat zelf wat beter letten op net werken maar dat noem je een NADEEL van een taal? Goed strict programmeren is in elke taal belangrijk, maar ik wil wel fijn zelf kunnen bepalen op wat voor manier ik dat doe. Ik vergeet nooit closing brackets, en zelfs al zou ik dat doen heeft elke fatsoenlijke editor (UltraEdit12 in mijn geval) de optie functies te collapsen om ze terug te vinden. Sterker nog, ik ga denk ik sneller wat whitespace vergeten dan een bracket, als je op de plaats van een indent geen bracket ziet valt het op, als je ergens na 30 regels indentatie niet meer weet of je nou 2 of 4 spatie's ergens moet hebben zit je een stuk moeilijker te kijken volgens mij.

Sowieso maakt het ook geen donder uit als een andere programmeur een andere indentatiestijl erop na houdt, zolang'ie zich maar netjes aan 1 standaard houdt is het toch wel te lezen. En programmeurs die maar wat aan rotsooien krijgen van mij persoonlijk een schop onder hun kont, daar heb ik geen compiler voor nodig ;)

Tenslotte vind ik whitespace chars als syntaxcode een heel erg verschrikkelijk idee, maar da's meer een gevoelskwestie vrees ik :+

[ Site ] [ twitch ] [ jijbuis ]


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

FragFrog schreef op maandag 11 september 2006 @ 08:26:
Tenslotte vind ik whitespace chars als syntaxcode een heel erg verschrikkelijk idee, maar da's meer een gevoelskwestie vrees ik :+
En iets waar je na een weekje Python programmeren ook wel vanaf bent.

Wie trösten wir uns, die Mörder aller Mörder?


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

FragFrog schreef op maandag 11 september 2006 @ 08:26:
Als ik dingen hierboven lees over dat in Python het gebruikelijk is om "i in range(10):" te schrijven gaan m'n nekharen al overeind staan: hoezo i in range 10? Wat is i's initiele waarde? Wanneer wordt i geupdate? Hoe kan ik een naar beneden lopende for loop maken? Hoe zorg ik ervoor dat i in stappen van 2 geupdate wordt?
for i in range(10) geeft als eerste i de eerste waarde uit de iterable range(10) terug, bij range(10) is dat 0. i wordt logischerwijs geupdate tussen het draaien van twee loops, je kunt er een naar beneden lopende loop van maken met range(9, -1, -1) en een telkens 2 stappen updatende met range(0, 10, 2). Belangrijker is echter dat "for i in" werkt met elke sequence en dat de return value van range() een simpele list is:
code:
1
2
3
4
5
6
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(9, -1, -1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> range(0, 10, 2)
[0, 2, 4, 6, 8]

Een feite is de Python for-loop daarmee veel simpeler dan die in C/C++/Java/PHP, juist omdat je je geen zorgen hoeft te maken over de initiële waarde van i en de vraag wanneer i geupdate wordt. Het is niet toevallig dat Java IIRC in 1.5 ook een dergelijke for-loop heeft toegevoegd (for o : collection ofzo).

Rustacean


Verwijderd

Topicstarter
Goeiesmorgens... voor iemand met slechts beginnende programmeer-kennis een uiterst interessante discussie... niet voor *bij* maar voor *in* het haardvuur! ;-)

Ik ben inmiddels wel redelijk overtuigd geraakt, ook na wat verder zoeken, dat ik me beter toch eens kan gaan herbezinnen op Java, zoals eerder gezegd. De laatste discussies versterken dat beeld, in die zin dat ik niet tien verschillende talen wil leren. PHP ken ik een beetje, en ws is Java daar wel een leuke aanvulling op (voor het niveau dat ik haal).

Praktisch vraagje: vast al eerder over nagedacht, maar kun je Java apps distribueren met een programmaatje dat checkt of je de juiste VM hebt, en anders een nieuwere installeert?

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 13-02 21:23

NetForce1

(inspiratie == 0) -> true

Verwijderd schreef op maandag 11 september 2006 @ 13:23:
Praktisch vraagje: vast al eerder over nagedacht, maar kun je Java apps distribueren met een programmaatje dat checkt of je de juiste VM hebt, en anders een nieuwere installeert?
Zeker, dat kan met Java WebStart. Zie: http://java.sun.com/products/javawebstart/developers.html

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • Soultaker
  • Registratie: September 2000
  • Nu online
FragFrog schreef op maandag 11 september 2006 @ 08:26:
Als ik dingen hierboven lees over dat in Python het gebruikelijk is om "i in range(10):" te schrijven gaan m'n nekharen al overeind staan: hoezo i in range 10? Wat is i's initiele waarde? Wanneer wordt i geupdate? Hoe kan ik een naar beneden lopende for loop maken?
Het is "for i in x" -- die for maakt een heel stuk duidelijker. x kan alles zijn wat een iterator oplevert, een simpel voorbeeld is:
Python:
1
2
for x in [ 3, 1, 4 ]:
  print x

Sorry hoor, maar wat is er nu duidelijker dan dit? Binnen de for lus wordt x steeds gebonden aan één van de waarden uit de lijst. Als je één keer range(10) in de interpreter typt, zie je dat die gewoon een lijst met waarden van 0 tot 10 oplevert, en als je help(range) typt zie je dat range ook een stapgrootte mee kunt geven (die je ook kunt gebruiken om aflopende lijsten te genereren, namelijk door die stappengrootte negatief te maken).

Jij leest één regel Python code, en doet daarna alle mogelijke moeite om vooral niet je vragen beantwoord te krijgen.
Tenslotte vind ik whitespace chars als syntaxcode een heel erg verschrikkelijk idee, maar da's meer een gevoelskwestie vrees ik :+
Whitespace is niet optioneel. Niet (goed) geïndenteerde C/C++ code is praktisch onleesbaar, wat betekent dat in de praktijk 90% van de C/C++ programmeurs (en 100% van alle goede programmeurs) z'n code toch systematisch indenteert. Blijkbaar is dat zinnig, zelfs als de compiler het niet vereist; waarom zou je die informatie dan niet gebruiken om behalve de lezer van de code ook de interpreter te instrueren hoe de code in elkaar zit?

  • Soultaker
  • Registratie: September 2000
  • Nu online
farlane schreef op zondag 10 september 2006 @ 23:27:
Soultaker, je gaat steeds verder de kant op van 'Python is een mooie lijmtaal', zeg eens eerlijk : Als jij een project had van redelijke omvang en Python en een andere taal naar jouw eigen keuze maar die wel types forceert, implementatie van interfacee scheidt etc zou kunnen oplossen zou je dan voor Python gaan?
Als het een groot project is met hoge eisen aan stabiliteit en betrouwbaarheid, dan zou ik inderdaad niet voor Python kiezen. Zeker als de eisen vooraf vastliggen, is het vaak goed om een statische taal te kiezen en dan te beginnen met het vastleggen van interfaces. Voor een design-up-front methodologie is Python niet zo handig. Maar als je werkt aan een project waarvan de eisen nog niet precies vaststaan (ik noemde al rapid prototyping) dan is Python een goede keuze, omdat je snel kunt ontwikkelen en makkelijker wijzigingen kunt doorvoeren.

Het is ook niet zo gek dat tools zoals SCons of Gentoo's portage geschreven zijn in Python: dat zijn typisch tools die andere programma's aansturen (en daarmee het 'echte' werk dus uitbesteden), maar zelf wel flexibel en aanpasbaar moeten zijn. Portage wordt bijvoorbeeld onmeunig vaak geüpdate; dat kan alleen omdat het makkelijk is om Python code terug te lezen (veel makkelijker dan met Perl, bijvoorbeeld), en kleine wijzigingen te maken.

Kortom: het is wat mij betreft geen of/of discussue; Python concurreert niet met C, C++ of Java, hooguit met Ruby, Perl, en (misschien) PHP. De redenering dat Python een slechte taal is omdat sommige dingen beter in Java geschreven kunnen worden, gaat daar volledig aan voorbij.
Zeker, dat kan met Java WebStart. Zie: http://java.sun.com/products/javawebstart/developers.html
WebStart is geweldige technologie! Misschien wel het beste dat uit de hele Java hype voortgekomen is, al wordt het veel te weinig gebruikt.

[ Voor 15% gewijzigd door Soultaker op 11-09-2006 17:55 ]


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Soultaker schreef op zondag 10 september 2006 @ 20:58:
Tijdens het laden van een module wordt de code in die module uitgevoerd, inderdaad. Als je een DLL laadt wordt ook code uitgevoerd, als een C++ object linkt worden ook constructors van globale variabelen aangeroepen, enzovoorts. Dat is niet meer dan logisch. Waarom zet je dan initialisatiecode in je module, als het niet de bedoeling is dat die uitgevoerd wordt?
het doet me teveel denken aan static... static is bad hmmkeej ;)
En hoe verschilt dit dan van de Python code? Als de twee functies los van elkaar staan, dan moet de module er ofwel voor zorgen dat de variabele geïnitialiseerd wordt, ofwel controleren bij het gebruik ervan. Je hebt nu nog steeds niet verklaard waarom de Python code fout is en de equivalente Java code dat niet zou zijn.
Juist. Een Java object heeft een interface en een implementatie. In Python kan je helemaal niets verhinderen.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class SomeClass
{
   private boolean valid;
   private int waarde;
   public SomeClass()
   {
      valid = false
   }
   public void SetWaarde(nieuweWaarde)
   {
     valid = true;
     waarde = nieuweWaarde
   }
   public int GetWaarde() throws InvalidStateException
   {
       if (valid)
           return waarde
       else
            throw new InvalidStateException()
   }
}

Dit in Python kan je niet afschermen zodat het object altijd een geldige staat heeft.
Beetje domme vergelijking. Stel ik ga een HTTP server schrijven in Python, en jij in C. Wie heeft er de grootste kans op allerlei buffer overflows, memory leaks, security holes...? Juist ja.
Tjah, ik zou ook C niet gebruiken daarvoor... Security holes kun je in elke taal hebben.
Bovendien kun je zelfs in bvb C++ heel gemakkelijk buffer overflows en memory leaks voorkomen of verhelpen. Waarin denk je bovendien dat Python geschreven is ? Als daar buffer overflows mogelijk zijn etc...
De reden dat er verschillende talen zijn, is dat er verschillende doeleinden dienen. Als veel verificatie at compile time wil doen, dan moet je niet in Python programmeren (maar eigenlijk ook niet in Java, C of C++). Maar dat diskwalificeert Python niet als lijmtaal, als taal voor rapid prototyping, als taal voor automation, of om een zekere mate van extensibility in te bouwen in een andere applicatie. Daarvoor is Python heel geschikt, omdat het een veilige, simpele en gestructureerde taal is, met een vlakke leercurve.
Juist maar je merkt dat dingen die in andere talen niet kunnen wegens tegen programmeer principes, hier wel kunnen. Ik zou een beginner neit aanraden om dan met zo'n taal te beginnen.
Ik zal je bluf dan maar even callen. Een 'IDL call' is niets. Er is geen enkele eis dat een interfacedefinitie allerlei structs moet bevatten; dat is geheel je eigen keuze. En Python is uitstekend geschikt voor prototyping en testing van op CORBA gebaseerde applicaties -- ik heb het daar zelf voor gebruikt (met OmniORB's Python bindings) en dat beviel uitstekend, juist omdat je over allerlei dingen als memory management en het casten van references niet hoeft na te denken.
Ik gebruik ook OmniORB.
IDL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
module M
{
   interface I
   {
      struct s
      {
          int a,b,c;
          anderType aT;
          long c;
          float f
      }
      void eenFunctie(s parameter);
   }
}

Python:
1
2
s = M.I.s(10,12,14,M.I.anderType(x,y,z), 20L, 10.1)
server.conn.eenFunctie(s)

Als je 150 functies en 75 structs hebt en je gaan zoeken welke parameters je moet meegeven..
daar doel ik op.

ASSUME makes an ASS out of U and ME


Verwijderd

Topicstarter
Dank je, ziet eruit als een nuttige tip.. heb even de site doorgekeken, vereist wel een werkende internet-connectie maar dat zal tegenwoordig wel niet zo'n probleem meer zijn, neem ik aan...

  • Soultaker
  • Registratie: September 2000
  • Nu online
HIGHGuY schreef op maandag 11 september 2006 @ 19:13:
Dit in Python kan je niet afschermen zodat het object altijd een geldige staat heeft.
In Java ook niet -- ik kan de classloader riggen en je bytecode wijzigen. Dat is wat moeilijk dan in Python natuurlijk, maar het punt is dat je in Python gewoon van ongedocumenteerde members af moet blijven. Dat geldt trouwens in elke taal. Dat de interpreter dat niet forceert, betekent niet dat je opeens allerlei objecten 'mag' gaan zitten wijzigen.

Verder kun je je afvragen of een beginner inderdaad in staat zijn om een object op zo'n manier te wijzigen dat 'ie precies doet wat 'ie wil. De kans is groter dat 'ie op zoek gaat naar een gedocumenteerde manier (of een voorbeeld).
Juist maar je merkt dat dingen die in andere talen niet kunnen wegens tegen programmeer principes, hier wel kunnen. Ik zou een beginner niet aanraden om dan met zo'n taal te beginnen.
Daar verschillen de meningen over. Bijvoorbeeld Smalltalk is ontworpen specifiek om door amateurs gebruikt te worden, en om mensen zonder programmeerervaring aan een programmeertaal te krijgen. En wat blijkt nu? In Smalltalk kun je alles wijzigen wat je maar wil. Je kunt het systeem ook goed stuk maken door allerlei rare dingen te doen (bijvoorbeeld door de implementatie van List.size in een draaiende applicatie herdefiniëren), maar wie zegt dat dat niet leerzaam is?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 13-02 18:09
Soultaker schreef op maandag 11 september 2006 @ 17:49:
Het is ook niet zo gek dat tools zoals SCons of Gentoo's portage geschreven zijn in Python: dat zijn typisch tools die andere programma's aansturen (en daarmee het 'echte' werk dus uitbesteden), maar zelf wel flexibel en aanpasbaar moeten zijn.
Hmm interessant dat SCons ... ff lezen.
Kortom: het is wat mij betreft geen of/of discussue; Python concurreert niet met C, C++ of Java, hooguit met Ruby, Perl, en (misschien) PHP. De redenering dat Python een slechte taal is omdat sommige dingen beter in Java geschreven kunnen worden, gaat daar volledig aan voorbij.
Kan ik me helemaal in vinden.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • mithras
  • Registratie: Maart 2003
  • Niet online
Ik sluit me ook aan bij bovengenoemde mening. Ik vond het wel leuk om de discussie python vs. [insert grote bekende taal] te lezen, maar die is eigenlijk uit het verband gerukt. Zoals titel & ts aangeeft, gaat het eerder om python vs ruby (en misschien perl).

Ik ben op dit moment python aan het leren. Ik heb echter totaal geen programmeer ervaring, op php na. Ik gebruik het boek 'Dive into python' van Mark Pilgrim. Het is erg duidelijk. Hoewel door 'derden' gezegd wordt dat dit boek voorkennis nodig heeft, van bijv. Java, Perl of C++, vind ik dat dit niet noodzakelijk is. Er worden wel veel voorbeelden gegeven hoe sommige constructies in andere talen wordt gedaan (voornamelijk Perl).
Daarnaast heb ik een pocket reference aangeschaft. Hoewel ik nu erg weinig tijd heb en het leren van de taal niet opschiet, denk ik dat de reference me later echt wel van pas kan komen.

Hoewel Ruby bij mij heel erg onbekend is, zou ik (als ik er meer van zou hebben geweten) toch voor python hebben gekozen. Ik draai Ubuntu Linux, waar een heel aantal apps in python zijn geschreven. Projecten die zeker wel noemens waardig zijn. Samen met Glade kan je gemakkelijk (en snel) apps bouwen volgens de GTK2 specificaties. Of dit met Ruby kan weet ik niet, maar deze combi werkt erg gemakkelijk. Doordat ik "bewondering" heb voor de bestaande applicaties, heb ik voor Python gekozen, evenals de reden dat ik het snel wilde kunnen (waarvan ik denk dat Java of C# bijv langer duren).

Verwijderd

Soultaker schreef op maandag 11 september 2006 @ 17:38:
Whitespace is niet optioneel. [..] waarom zou je die informatie dan niet gebruiken om behalve de lezer van de code ook de interpreter te instrueren hoe de code in elkaar zit?
Oh deze is makkelijk ;)
Omdat wanneer whitespace characters onderdeel worden van de syntax je minder makkelijk de voorkeuren van een programmeur kan weergeven. Ik ben van mening dat het structureren van code een onnodige bezigheid is. Immers een fatsoenlijke IDE kan het naar eigen persoonlijke voorkeur opmaken.

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Verwijderd schreef op maandag 11 september 2006 @ 22:16:
Immers een fatsoenlijke IDE kan het naar eigen persoonlijke voorkeur opmaken.
Met een fatsoenlijke IDE is het dan ook geen enkele moeite om valide Python code te schrijven ;).

Wat betreft whitespace: je kan op theoretische gronden een voorkeur hebben voor het wel of niet syntactisch betekenisvol zijn van whitespace, maar wie er in de praktijk over valt, is een zeurkous. Ik heb met Python nog nooit moeite hoeven doen om de whitespace goed te krijgen, netzomin als ik met Java ooit moeite heb hoeven doen om leesbare code te schrijven. Maargoed, ik vind code ook nog prima leesbaar als iemand drie bracing stijlen door elkaar gebruikt...

Wie trösten wir uns, die Mörder aller Mörder?


  • Goofy
  • Registratie: April 2004
  • Laatst online: 16-01 20:02
Oef, best veel leesvoer. Maar doe vooral verder, het is zeker wel interessant!

Over die GUI builders voor Python;

http://farpy.holev.com/tools.php

Deze spuwt dus GUI's in een soort van 'algemene' (XML based) taal uit (GUIML), welke vervolgens vertaald kan worden naar wxPython, wxRuby, ... en uiteindelijk eigenlijk alles wat je wilt (voor zover er een convertor beschikbaar is). Ik heb er geen ervaring mee, maar het zou gemakkelijk in gebruik zijn. In ieder geval de moeite waard om eens te bekijken (voor hen die Python niét afzweren :p)?

  • kunnen
  • Registratie: Februari 2004
  • Niet online
FragFrog schreef op maandag 11 september 2006 @ 08:26:
[...]

Tenslotte vind ik whitespace chars als syntaxcode een heel erg verschrikkelijk idee, maar da's meer een gevoelskwestie vrees ik :+

[ Voor 9% gewijzigd door kunnen op 17-09-2006 14:55 ]

Pagina: 1