Software Empfehlung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
yawe
User
Beiträge: 14
Registriert: Mittwoch 18. September 2013, 08:46

Hallo Leute
Als erstes ne kurze Vorstellung (bin neu im Forum), arbeite geschäftlich mit Python benutze dort eine bestimmte 3d Software, in der ich kurze Programme erstelle um die Arbeit meiner Kollegen zu erleichtern, natürlich auch meine :D , zuhause benutze ich gelegentlich die Software IDLE.
Da ich mittlerweile gesehen habe das Python Spaß macht, und man mit wenig Aufwand Großes erreichen kann möchte ich mein Wissen a weng erweitern, deswegen im Folgenden meine erste und wichtigste Frage!!!

Welche Software könntet ihr mir empfehlen um Skripte zu schreiben o. auch zu vergleichen ob und welche Unterschiede es zwischen zwei Versionen eines Skriptes gibt.
BlackJack

@yawe: Falls mit Software die Frage nach einem Editor oder eine IDE gemeint ist: Darüber gibt es hier schon ein ellenlanges Thema. Frag 5 Leute und Du bekommst 10 unterschiedliche Empfehlungen. Falls Du schon eine IDE oder einen Editor für andere Sprachen verwendest, könntest Du schauen ob der auch Python unterstützt. Ansonsten habe ich den Eindruck, das viele einen Editor einer grossen IDE vorziehen.

Zum Vergleichen von zwei Datei(ständen) verwendet man normalerweise das Konsolenprogramm ``diff`` oder eines der zahlreichen grafischen Frontends dafür. Wenn man eine Versionskontrolle verwendet (was man tun sollte), dann bietet die üblicherweise auch an, dass man verschiedene Versionen vergleichen kann. Auch hier gibt es in der Regel grafische Frontends, oder man kann auf ein grafisches Diff-Programm zurückgreifen.
peddy
User
Beiträge: 121
Registriert: Montag 30. Juni 2008, 13:51

Nach meiner Erfahrung ist ein guter Editor oft besser geeignet als eine dicke Entwicklungsumgebung, wenn man nur gelegentlich programmiert oder kleine Projekte hat. Da du kein OS nennst ist es schwierig einen Tipp zu geben. Ich persönlich verwende am liebsten den Vim Editor mit ein paar lieb gewonnenen Plugins. Nett finde ich auch Ninja-IDE, was in Python geschrieben ist.

PS Zum vergleichen von Dateien nehme ich manchmal auch vimdiff statt diff auf der Konsole.
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Was genau ist denn an einem Editor eigentlich besser? Ich höre das immer, dass „richtige“ Programmierer nur den Editor nehmen, aber so eine IDE hat doch wirklich nützliche Funktionen: Debugger, Springen zu Funktionsdefinition oder einige andere Sachen.

Besonders der Debugger ist doch wichtig, besonders für Leute die nur gelegentlich programmieren, um auch mal zu überprüfen, wo denn die Probleme im Programm liegen. Oder was ist an einem Debugger so schlimm?
lunar

@Hellstorm Diese Features hat auch ein besserer Texteditor.
BlackJack

@Hellstorm: Vorweg: Es kommt auch auf die Programmiersprache an. Ich könnte mir *nicht* vorstellen Java ohne IDE zu schreiben, weil dort die IDE tatsächlich Vorteile bietet.

Einen Debugger brauche ich in Python nicht. Oder nur *ganz* selten. Ich denke das liegt hauptsächlich an drei Dingen: Man kann mit ``print`` oder dem `logging`-Modul und `type()` und `repr()` sehr einfach Debugausgaben zu einem Programm hinzufügen um zu überprüfen ob bestimmte Programmteile ausgeführt werden, in welcher Reihenfolge, und welche Werte dort jeweils vorliegen.

Zweitens schreibt man für gewöhnlich kleine in sich abgeschlossene Code-Teile die man einzeln testen kann, heutzutage auch mit Unit-Tests, und die dann zu komplexeren Lösungen zusammengesetzt werden. Man findet Fehler also in der Testphase, wo man die bisher bestehenden Teile ausprobiert und mit Testwerten füttert.

Und drittens sehe ich den wirklichen Nutzen von Debuggern bei kompliziertem, „kleinteiligen”, aber langem Code wie man ihn häufig in hardwarenäheren Programmiersprachen findet, wo man deutlich mehr Code in einer Funktion oder Methode benötigt um den selben Effekt zu erzielen wie in Python, Code bei dem man mehr Namen hat, weil man für alles mögliche noch Index-, Lauf-, und Hilfsvariablen braucht, und damit auch schneller den Über- oder Durchblick verlieren kann. Bei Python hingegen bestehen Funktionen und Methoden oft aus nur wenigen Zeilen und Schleifen und ausgiebig getestete Algorithmen sind in Funktionen „versteckt”, von denen es viele schon fertig in der Standardbibliothek gibt.

C ist zum Beispiel eine Programmiersprache bei der ich mir vorstellen kann einen Debugger zu verwenden, weil man durch den Compiler nicht so leicht wie bei Python immer wieder kleine Änderungen vornehmen und das Programm neu laufen lassen kann. Man kann auch keine Ausdrücke oder bereits bestehenden Code in einer interaktiven Shell ausprobieren. Hier mal ein Extrembeispiel was ich mit „kleinteiligem” aber langem Code meine (Datentypen und Funktionen aus der Glib, grossteils ungetestet):

Code: Alles auswählen

GHashTable* read_word_file(const gchar *filename, GError **error)
{
    GIOChannel *word_file;
    GHashTable *result;
    gchar *word;
 
    g_assert(filename != NULL);
    
    if ((word_file = g_io_channel_new_file(filename, "r", error)) == NULL) {
        return NULL;
    }
    result = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
    while (
        g_io_channel_read_line(word_file, &word, NULL, NULL, NULL)
            == G_IO_STATUS_NORMAL
    ) {
        g_hash_table_add(result, g_strstrip(word));
    }
    if (*error != NULL) {
        g_hash_table_unref(result);
        result = NULL;
    }
    g_io_channel_unref(word_file);
    return result;      
}
 
void intersection(GHashTable *set_a, GHashTable *set_b)
{
    GHashTableIter iterator;
    gchar *word;
 
    g_assert(set_a != NULL && set_b != NULL);

    g_hash_table_iter_init(&iterator, set_a);
    while (g_hash_table_iter_next(&iterator, (gpointer*) &word, NULL)) {
        if (!g_hash_table_lookup_extended(set_b, word, NULL, NULL)) {
            g_hash_table_iter_remove(&iterator);
        }
    }
}

GHashTable* get_common_words(
    gint filename_count, gchar **filenames, GError **error
) {
    gint i;
    GHashTable *result, *word_set;
 
    g_assert(filename_count != 0 && filenames != NULL);

    if ((result = read_word_file(filenames[1], &error)) == NULL) {
        return NULL;  
    }
 
    for (i = 1; i < filename_count; i++) {
        if ((word_set = read_word_file(filenames[i], &error)) == NULL) {
            g_hash_table_unref(result);
            return NULL;
        } else {
            intersection(result, word_set);
            g_hash_table_unref(word_set);
        }
    }
    return result;
}
Das gleiche in Python (`and_()` ist aus dem `operator`-Modul):

Code: Alles auswählen

def read_tokens(filenames):
    for filename in filenames:
        with io.open(filename, encoding='utf8') as lines:
            yield set(line.strip() for line in lines)


def get_common_tokens(filenames):
    return reduce(and_, read_tokens(filenames))
Hier wüsste ich nicht einmal wo ich den Debugger sinnvoll ansetzen sollte.

Keine IDE zu verwenden bedeutet übrigens auch nicht auf einen Debugger verzichten zu müssen. Python hat einen in der Standardbibliothek im `pdb`-Modul. Man kann im Quelltext die Zeile ``import pdb; pdb.set_trace()`` schreiben und an der Stelle wird das Programm dann angehalten und man ist im Debugger. Wenn man eine GUI haben möchte, gibt es WinPDB. Nicht vom Namen irreführen lassen: Das läuft nicht nur unter Windows.

Springen zu Funktionsdefinitionen hat ein guter Texteditor wie lunar schon sagte. Das ist letztendlich nichts anderes als eine spezielle Suchfunktion. Und so viel anderes gibt es bei dynamischen Sprachen ja nicht. Mir persönlich reicht eine Autovervollständigung die sich die Vorschläge aus den offenen Textdateien nimmt. Andere nehmen noch die bei sehr dynamischen Sprachen naturgemäss nicht perfekte statische Analyse von installierten Modulen und Paketen hinzu, die auch die meisten guten Editoren bieten.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Neben dem was BlackJack schon gesagt hat,
Hellstorm hat geschrieben:Was genau ist denn an einem Editor eigentlich besser? Ich höre das immer, dass „richtige“ Programmierer nur den Editor nehmen, aber so eine IDE hat doch wirklich nützliche Funktionen: Debugger, Springen zu Funktionsdefinition oder einige andere Sachen.
Eine IDE ist vor allem mal ein großes Tool was Einarbeitung erfordert, oftmals Sprachspezifisch ist (IDEA funktioniert für die eine Sprache besser, Eclipse für die andere, NetBeans für eine dritte) und oft relativ langsam. Was mich persönlich auch oft ärgert sind die diversen Projektmetadaten, so dass man Projekte teilweise nicht einfach ohne diese eine spezifische IDE bauen kann weil die benötigten Dependencies, Build-Skripte usw nur in einem Format vorliegen was diese eine IDE unterstützt und die anderen vielleicht via schlechten, inakkuraten Importern halbwegs unterstützen.

Was ich auch ein Problem an IDEs sehe ist, dass oft Code geschrieben wird der nur mit IDE überblickbar ist, weil die IDE ja schön Boilerplate generiert, so dass man mit paar Klicks tausende Zeilen Code generiert hat, die leicht zu schreiben, aber furchtbar nachzuvollziehen sind, gerade ohne IDE wird das leicht zum Ding der Unmöglichkeit. Ich habe schon öfters wunderlich komplexe und verschachtelte Programme gesehen, die auf eine sehr komplizierte Art und Weise letztendlich sehr wenig machen, was man nicht in wenigen dutzend Zeilen Code nicht auch geschafft hätte. Klar, IDEs erlauben oftmals wesentlich mächtigeres Refactoring als simple Editoren, aber das wird viel zu selten genutzt. Gerade Leute die nicht so hohe Qualitätsstandards haben schreiben einfach drauf los, solangs kompiliert passt ja alles.

Der Einsatz von Debuggern vereinfacht diesen Ansatz sogar noch. Statt ordentlich testbaren, überschaubaren Code zu schreiben werden Codemonster gebaut. Bei Bugs wird dann an einer Stelle ausgebessert, so dass das für diesen einen Fall passt, aber dadurch steigt die Komplexität des Systemes, statt das Problem durch Vereinfachung zu lösen.

Meiner Meinung nach ist es so dass je besser der Code ist, desto weniger ist eine IDE notwendig, weil der Code einfach überschaubarer und verständlicher ist. Für IDEs gibt es natürlich einen Platz, einige furchtbare Java-Ungetüme möchte ich auch nicht ohne IDE nachvollziehen können weil das einfach zu aufwändig ist, aber wenn ich es vermeiden kann COde zu schreiben für den eine IDE notwenig ist dann mache ich das gerne.

Mit "richtigen" Programmierern hat das meiner Meinung nach wenig zu tun. Ich schreibe meine Programme in nem Editor, nicht mithilfe eines Schmetterlings :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich kann natürlich viele von den von BlackJack und Leonidas genannten Argumenten nachvollziehen, aber...

@Leonidas: Willst Du wirklich ein Java oder C#-Programm außerhalb einer IDE schreiben? Imho kann man Java - egal wie sauber man dort codet - ohne solch ein Werkzeug nicht ernsthaft programmieren, denn irgend etwas muss die mangelnde Ausdrucksstärke ja wett machen; und genau das tun die üblichen IDEs imho. Getter- und Setter mag ich einfach nicht von Hand schreiben und auf die schnelle an einen anonymen ActionListener zu kommen, den man später einfach in eine benannte Klasse wandeln kann sind einfach Aufgaben, die ich in einem Editor idR. wohl nicht so einfach umsetzen kann.

Über das automatische Generieren von Code auf Basis von XML kann man sich streiten - in manchen Fällen kommt man aber schlecht drum herum (QtJambi). Auch hier ist es imho sehr angenehm, wenn das automatisch passiert.

Kurz um: Ich denke es hängt von der Sprache ab, ob und welche IDE man verwenden sollte. Sofern man die einzelnen Komponenten an sich versteht (Compiler Aufruf, Build-System, Test-Automatisierung, Versionskontrolle, usw) und darauf achtet, dass diese möglichst IDE unabhängig auch funktionieren, macht man imho nichts verkehrt :-)

(Was natürlich nichts daran ändert, dass es da draußen viele Entwickler gibt, die "dank" einer IDE denken, das Entwickeln wäre ohne dieses spezielle eine heilige Programm für ihre Sprache undenkbar :twisted: )
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Hyperion: Der letzte Satz trifft vielleicht auch auf den ein oder anderen Emacs- oder Vim-Nutzer zu. ;-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

BlackJack hat geschrieben:@Hyperion: Der letzte Satz trifft vielleicht auch auf den ein oder anderen Emacs- oder Vim-Nutzer zu. ;-)
:-D Aber bei denen basiert das sicherlich auf Überzeugung und nicht auf Unwissen ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Hyperion hat geschrieben::-D Aber bei denen basiert das sicherlich auf Überzeugung und nicht auf Unwissen ;-)
Das ist reine Religiösität. :D
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hyperion hat geschrieben:@Leonidas: Willst Du wirklich ein Java oder C#-Programm außerhalb einer IDE schreiben? Imho kann man Java - egal wie sauber man dort codet - ohne solch ein Werkzeug nicht ernsthaft programmieren, denn irgend etwas muss die mangelnde Ausdrucksstärke ja wett machen; und genau das tun die üblichen IDEs imho. Getter- und Setter mag ich einfach nicht von Hand schreiben und auf die schnelle an einen anonymen ActionListener zu kommen, den man später einfach in eine benannte Klasse wandeln kann sind einfach Aufgaben, die ich in einem Editor idR. wohl nicht so einfach umsetzen kann.
Deswegen vermeide ich es in der Regel überhaupt mit Java Code zu schreiben. Ich denke aber dennoch dass dieses Boilerplate-generieren an den Symptomen rumdoktort, also quasi Abholfe schafft den ganzen Mist selbst schreiben zu müssen. Aber lesen muss man den Code ja am Schluss auch wieder selbst, es gibt leider keinen Boilerplate-Leser, der den Boilerplate wegmacht damit ich die eigentliche Logik sehe (wobei ich meine sowas wie ein Two-Way-CoffeeScript mal gesehen zu haben, weiß aber nicht wo das war).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@Leonidas: Ich hatte mal ein Eclipse-Plugin ausprobiert das anonyme innere Klassen mit nur einer Methode als „Lambda-Funktionen” dargestellt hat, und man konnte die auch so eingeben. Fand ich als Idee ganz witzig, aber hilft natürlich nicht gegen den ganzen anderen Boilerplate-Code.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Richtig, ich glaube das war was ich meinte! Ich meine dass ich genau davon in IDEA gehört habe. Danke fürs Präzisieren :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten