Welche Programmiersprache? C/C++ oder Python

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hi,
    ich bin ganz frisch hier und mein Raspi ist auch noch ohne Lackschäden. Ich möchte den Raspi für einfache Steuerungsaufgaben verwenden, und die Kommunikation mit der Außenwelt soll über Sockets erfolgen. Kann man sowas mit Python machen, oder braucht man Threads und kommt nicht an C/C++ vorbei? Und: finde ich irgendwo ein lauffähiges Komplett-Projekt, das ich einfach rüberbügeln und mich von da aus weiter vortasten kann? Die konkrete Aufgabe zum Start: Die Impulse an einem GPIO-Pin zählen und,wenn eine Anfrage über TCP/IP (Send/Receive) kommt, den Zählerstand zurücksenden. Sowas könnte es eigentlich fertig geben.
    Viele Grüße
    maddinvs

  • Python bietet, auf jeden Fall, mehr Komfort und ist leichter zu lernen. Das gilt sowohl bzw. vor allem für den Einstieg in die Programmierung als auch beim Umstieg von anderen Sprachen wie z.B. PHP, Javascript, Java, C# usw.

    PS: ich gehe davon aus das du kein C/C++ Veteran bist, sonst hättest du diese Frage nicht gestellt ;)

    Einmal editiert, zuletzt von Herb (28. November 2013 um 20:40)

  • Hallo Maddins,

    wenn du noch nie programmiert hast kann ich dir C empfehlen denn sie zählt meiner Meinung nach als Mutter der Programmiersprachen. Python ist natürlich wie schon im vorriegen Betrag erwähnt wird einfacher wenn du aber ein mal was Systemnahes programmieren möchtes wäre C vorteihafter.

    Grüße Aroxus

  • ich bin für C weil ich da in Atmel und PI programmieren kann und zum Teil Quellcode beiderseits verwenden kann

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Moin maddinvs,

    aus Deiner Anfrage lese ich irgendwie heraus, dass es Dir weniger um die Programmierung und mehr um das Ergebnis geht (btw: beim Steuern bist Du mit Deinem Vorhaben noch lange nicht ... das ist erstmal nur eine Messaufgabe ).
    Eine vernünftige Programmiersprache wie C lernt man nun mal nicht so schnell nebenbei sondern sie setzt schon voraus, dass man sich mit der Materie auseinandersetzt und man sich bewusst ist, was man tut.

    In Deinem Fall wäre es imho besser, Du würdest bei einer script-Sprache bleiben. Da liegt der Fokus dann eher darauf, was dabei herauskommt und die Gedanken, die sich ein C-Programmierer teilweise machen muss, nimmt Dir der jeweilige Interpreter ab.
    Zudem ist solch eine script-Sprache imho einfacher zu lernen.

    Solltest Du Dich allerdings wirklich näher und intensiver mit Programmierungen beschäftigen wollen, dann empfehle ich Dir dringend C - zum Einstieg vllt. sogar ein paar Grundlagen Assembler - und zum Vertiefen des Gelernten nebenbei noch ein wenig Digital-Elektronik.

    cheers,
    -ds-

  • Liebes Forum,
    find ich ja echt toll, wieviele Leute in kurzer Zeit ihre Hilfe anbieten. Zu meinem Hintergrund (das hätte ich vielleicht gleich sagen können): ich bin in C/C++ ziemlich zu Hause, aber nur unter Windows und Visual Studio, bin daher also verwöhnt, was die Entwicklungsumgebung/Debugmöglichkeiten angeht. Von daher würde ich C auch bevorzugen, aber ich habe ingesamt den Eindruck, dass mit Python schon jede Menge Zeugs vorhanden ist und nur dazugelinkt werden muss (Internetzugriff, Kameramodule, MySQL...), und ich im Moment noch nicht einschätzen kann, ob das mit C auch so wäre. Und ganz wichtig sind natürlich die Debugfunktionen. Ich kann auch da nicht einschätzen, welche Sprache die besseren Tools bietet. Irgendwie gibt es ja auch die Möglichkeit, einen Crosscompiler unter Visual Studio zu integrieren. Funzt das zufriedenstellend?

    Grüße von
    maddinvs

  • Hi,

    naja ... die Frage ist, was ist C/C++ für Dich?

    Wenn Du die von Mic .... ( :baeh2: ... ich kanns nicht aussprechen ) ... aus Redmond gelieferte Entwicklungs-Umgebung mit den integrierten Bibliotheken meinst, dass wirst Du so was nicht unter Linux finden. Das ist imho auch logisch, denn wir reden da von einem Unternehmen, das das gesamte OS incl. der Schnittstellen (gerne) als Monopol in der Hand haben möchte und dies durch sehr viel closed source vorantreibt.
    Unter Linux gibt es dennoch sehr gute IDEs, z.B. Geany oder, was ich bevorzuge, Code::Blocks, mit Crosscompilern, Oberflächen-Einbindung, ... .
    Das kann natürlich nicht so perfekt :fies: sein wie beim Fensterln, weil ja nicht nur die eigenen sondern auch fremde Tools mit eingebunden werden können. Aber es ist beachtlich und macht mir mehr Spass, weil ich auch mal die Ursache für ein Problem in den zugehörigen Sourcen oder Buglisten finde, als in dieser FAQ aus Amiland, wo dann meist - wenn überhaupt - ein workaraound drin steht.

    Vom Kern her sind C/C++ allerdings vollkommen identisch.
    Und ob Du Dir jetzt Python zusätzlich und dann die spezifischen Erweiterungen für Linux reinziehst, oder die GTK oder wie auch immer Erweiterungen für C/C++, macht imho keinen Unterschied, falls Du in C/C++ tatsächlich firm bist.

    bye,
    -ds-

  • Hallöchen,

    wenn es hier schon um C/C++ versus Python geht, dann kann ich vielleicht hier meine Frage nach einer Buchempfehlung für Python stellen. Bin programmiertechnisch nicht völlig unbegabt - vor Jahren im Selbststudium C gelernt, dann berufsbedingt C# lernen müssen und seit RPi offen für ALLES. Habe etliche C-Bücher aus der Zeit und mag es nicht in pdf's zu blättern (na ja in Ausnahmen schon). Handhabe es bei einer neuen Sprache eigentlich so, 5 Bücher und der Mix ist es.

    Für Tipps bin ich dankbar - ach ja vielleicht noch ein wichtiger Hinweis - mit meinem RPi will ich schwerpunktmäßig "Messen, Steuern Regeln"......

    Gruss

    Tom

  • Ich bin mal so frei und klinke mich hier rein :)

    Möchte mir auch nach Weihnachten einen Pi zum basteln und entdecken zulegen, und so stellt sich auch mir die Frage nach der passenden Sprache.
    Lerne aufgrund meines Informatikstudiums gerade C, weshalb ich da gerne bleiben möchte. Das klappt bisher auch alles recht gut, ich kann aber halt noch nicht auf wirklich viel Erfahrung zurück blicken.
    Könnt ihr mir vielleicht ein Tutorial nennen, welches das GPIO ansteuern mit C einsteiger-freundlich erläutert? Deutsch oder Englisch ist dabei egal :)
    Habe bisher nur Tutorial gefunden, welche mit der WiringPI API arbeiten.
    Wäre beim 'Alles selber machen' der Lerneffekt nicht deutlich stärker? Oder sollte man sich den Quellcode von WPi einfach nur mal durchlesen?

  • Python ist wie fast jede Skriptsprache. Schnell zum Lernen, langsam in der Ausführung.
    Für zeitkritische Programme würde ich C nehmen. Wenn du mit Python aber noch nicht programmiert hast dann fange damit an. Es ist nicht verkeht mehrere Sprachen zu lernen.
    Welche ist besser oder schlechter gibt es bei den Programmiersprachen nicht, sonst wären sie nie entstanden. Jede Sprache ist auf dem für sie bestimmten Gebiet die Beste.

    "Ein jeder, weil er spicht, glaubt auch über die Sprache sprechen zu können."
    J.W. Goethe

  • Zitat: "ich bin in C/C++ ziemlich zuhause"

    Warum dann zu einer interpretativen Sprache wechseln?

    Du hast ja offensichtlich mehr "Angst" vor einer weniger komfortablen IDE. Wenn man C/C++ halbwegs beherrscht, sollte das aber nur ein sekundäres Thema sein. Es gibt viele Varianten, sich - auch nur auf die Kommandozeile beschränkt - eine komfortable Entwicklungsumgebung zu erstellen. Vom Mausschubsen muss man dann aber vereinzelt Abstand nehmen.

    Sorry, wenn ich es etwas krass ausgedrückt habe, aber für eine effiziente Programmierung ist C (nach ASM) die erste Wahl - insbesondere, nachdem Du bereits Erfahrungen hast!

    Wer aber gänzlich frisch in die Programmierung einsteigt, ist mit Python auf alle Fälle besser bedient. Nachdem auch Basic empfohlen wurde: Python ist die bessere Wahl!

    Ansonsten kann ich nur dreamshaders Beiträgen uneingeschränkt zustimmen. ;)

    Gruß, mmi

  • Hallo,
    ich bin jetzt ein Stückchen weiter, habe mir ein das dicke Buch von Bartmann geliehen und mich jetzt mit Geany angefreundet und bin schwer begeistert, dass alles ziemlich auf Anhieb funzt. Ich habe ein Programm gefunden, um per Server-Socket eine TCP-Verbindung aufzubauen.
    Das Problem ist nur, dass das Programm nichts anderes macht als am Port zu lauschen. Ich würde ihn aber hauptsächlich gerne was anderes machen lassen,und nur wenn was über den Port reinkommt, ihn antworten lassen. Bei Mic.. würde ich das über Threads oder eine CallBack-Funktion machen. Kann mir jemand sagen, wie das beim Raspi geht?


    Viele Grüße
    maddinvs

    hier das listing
    [code=php]
    /* A simple server in the internet domain using TCP
    The port number is passed as an argument */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>

    void error(const char *msg)
    {
    perror(msg);
    exit(1);
    }

    int main(int argc, char *argv[])
    {
    int sockfd, newsockfd, portno;
    socklen_t clilen;
    char buffer[256];
    struct sockaddr_in serv_addr, cli_addr;
    int n;
    if (argc < 2) {
    fprintf(stderr,"ERROR, no port provided\n");
    exit(1);
    }
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
    error("ERROR opening socket");
    bzero((char *) &serv_addr, sizeof(serv_addr));
    portno = atoi(argv[1]);
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(portno);
    if (bind(sockfd, (struct sockaddr *) &serv_addr,
    sizeof(serv_addr)) < 0)
    error("ERROR on binding");
    listen(sockfd,5);
    clilen = sizeof(cli_addr);
    newsockfd = accept(sockfd,
    (struct sockaddr *) &cli_addr,
    &clilen);
    if (newsockfd < 0)
    error("ERROR on accept");
    bzero(buffer,256);
    n = read(newsockfd,buffer,255);
    if (n < 0) error("ERROR reading from socket");
    printf("Here is the message: %s\n",buffer);
    n = write(newsockfd,"I got your message",18);
    if (n < 0) error("ERROR writing to socket");
    close(newsockfd);
    close(sockfd);
    return 0;
    }[/php]

    Einmal editiert, zuletzt von dbv (10. Januar 2014 um 21:07)

  • Gott als Perl-Fan tut mir das in der Seele weh: Natürlich Python.

    Wenn Du Anfänger bist wird nichts was Du auf einem Pi machst in der performance einen Unterschied machen zwischen c/c++ und Python.

    Threads gibt's auch in Python und wenn Du das "global interpreter lock" als Problem ansiehst bist Du kein Anfänger mehr.

    Der Unterschied ist halt dass Du mit Python (hey und mit Perl! :-=) eine riesige Menge an Bibliotheken einsetzen kannst die Dir viele Probleme abnehmen (vom Email-Verschicken bis zum Zugriff auf die GPIO-Ports) und die leichter einzusetzen sind als die entprechenden c/c++ Bibliotheken (die es natürlich auch gibt).

    Wenn Du ernsthaft programmierst wirst Du um C irgendwann nicht mehr herumkommen, aber für Deine Anwendungsfälle ist Python definitv die richtige Wahl (Perl wäre natürlich noch besser hat aber eine steilere Lernkurve ür Anfänger:-=)


  • ... ich bin in C/C++ ziemlich zu Hause, aber nur unter Windows und Visual Studio, bin daher also verwöhnt, was die Entwicklungsumgebung/Debugmöglichkeiten angeht. Von daher würde ich C auch bevorzugen, ...

    Hi morgon,
    prinzipiell würde ich Dir - mit blutendem Herzen - recht geben, aber ... (siehe oben ;) ...)

    cheers,
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!