• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

C; Wo anfangen?

guru

Well-Known Member
Themenstarter #1
Guten Tag!

Da ich jetzt in der Informatik tätig bin und mich nebenbei selbst gewinnbringend weiterbilden möchte, suche ich als Ausgleich zu meiner Java-Lernerei Studiensoftware, um meine C-Kenntnisse zu vertiefen. Nur, wo beginne ich?

githib.com/bsdforen scheint etwas leer zu sein. Von powerd verstehe ich jetzt auch nicht allzu viel. Mit den verfügbaren Openbooks komme ich gut zurecht. Kurz gefragt; wie habt ihr angefangen, zu committen? Direkt auf freebsd.org? Oder seid ihr selber auf kleine Projekte wie TWM oder feh zugegangen?

Cheers,
guru
 

Yamagi

Possessed With Psi Powers
Mitarbeiter
#3
Das ist eine nicht unkomplizierte Frage. Ganz grundsätzlich würde ich die Frage nicht so sehr von der Projektgröße abhängig machen, sondern von eigenen Interessen und dem menschlichen Faktor. Überlege erst einmal, ob es in Programmen, die du regelmäßig nutzt, fehlende Funktionen gibt. Also Dinge, die dir sinnvoll erscheinen, aber bisher nicht eingebaut wurden. Danach schaust du dir an, wie das jeweilige Projekt mit Beiträgen umgeht. Das sind Fragen wie:
  • Werden Pull Request oder (inzwischen selten geworden) Patches überhaupt akzeptiert oder rotten sie einfach unkommentiert auf alle Ewigkeiten im Bugtracker oder auf Github herum? Ist Letzteres der Fall, muss man sich gar nicht die Mühe machen.
  • Wie ist der Ton innerhalb des Projekts? Gibt es freundliche, konstruktive Diskussionen oder ist das Niveau weit unter der Gürtellinie und gute Kritik besteht darin, dass am Ende jemand heult? Bei Projekten ab einer gewissen Größe ist ein Code of Conduct (Jehova!) oft aber nicht immer ein Zeichen dafür, dass innerhalb des Projekts ein gewissen Niveau aufrechterhalten wird.
Wenn man sich für ein Projekt und einen Beitrag entschieden hat, ist es meist eine gute Idee vorher zu fragen wie das Interesse an der eigenen Idee ist. Es ist einfach doof, wenn man Stunden Arbeit investiert hat und dann gesagt bekommt, dass es ja alles ganz schön ist, aber nicht in den Fokus des Projekts fällt und man daher kein Interesse hat.

Und nochmal speziell zu FreeBSD: FreeBSD ist gerade für Neulinge ein zweischneidiges Schwert. Einerseits ist es etabliertes Projekt mit einem hohen Qualitätsstandard und vielen ausgesprochen fähigen Leuten. Man kann als FreeBSD Contributor viel lernen, mehr als in so manchen anderem Projekt. Aber FreeBSDs hoher Qualitätsstandard kann für Neulinge auch sehr frustrierend sein, beispielsweise wenn ein Patch über Wochen oder sogar Monate im Review hängt und es immer wieder an Kleinigkeiten wie Code-Style scheitert. Außerdem ist es allein schon durch die schiere Projektgröße schwer Gehör zu finden und verlangt ein wenig Engagement, man sollte zumindest auf den wichtigsten Mailingslisten (freebsd-current@ und der für den jeweiligen Patch themenbezogenen) Liste aktiv zu sein. In die IRC-Chans (vor allem #bsddev auf EFNet) zu schauen, schadet auch nicht. Aber da stellt sich wieder das Problem mit der Zeitverschiebung in die USA. Die neuen FreeBSD Office Hours sind auch recht interessant, heute Abend um 20 Uhr deutscher Zeit ist z.B. eine allgemeine Fragestunde. Details gibt es unter https://wiki.freebsd.org/OfficeHours
 

Idefixx

Well-Known Member
#4
Guten Tag!
. . . suche ich als Ausgleich zu meiner Java-Lernerei Studiensoftware, um meine C-Kenntnisse zu vertiefen. . . .
Da stellt sich doch als erstes die Frage, wo würdest Du Dich selbst einordnen:
1) Anfänger (fällt wohl weg)
2) Fortgeschrittener Anfänger
3) Mittleres Niveau erreicht (schon gute Kenntnisse)
4) Fortgeschrittenes mittleres Niveau
etc.

Ohne Selbsterkenntnis auf welchem Niveau man steht, kann man nur scheitern.
 

Athaba

Libellenliebhaber
#5
Auch wenn es hier ohnehin schon mehrmals erwähnt wurde möchte ich nur unterstreichen den eigenen Interessen nachzugehen. Für's lernen ist es einfach nur hinderlich, wenn man kein Interesse/Verständnis von der Thematik hat die man implementiert. Und sei es auch nur um etwas nachzuvollziehen, Code lesen und dann kommt man schonmal schnell ins tüfteln. Nur dann auch schauen, die Dinge wirklich zu verstehen, damit man nicht Missverständnisse in sein Gedankenkonstrukt einbaut, die viele Jahre nachwirken können.

Die Größe des Projekts ist so eine Sache. Worum's mehr geht ist, dass du den Teil an dem du arbeitest wirklich verstehen können willst. Und bei großen Programmen ist das dann ein Modul. Niemand kennt alles an FreeBSD, Chromium, etc. komplett. Selbst wenn man es selbst über viele Jahre hinweg programmiert hat und der Code klar und verständlich ist, heißt das nicht, dass man auf Anhieb alles dazu weiß ohne nachzusehen. Aber gerade so ein grundsätzliches Verständnis von dem Code mit dem man zu tun hat ist wichtig. Also wenn du dich mit was auskennst oder dich was besonders interessiert Code lesen und wenn du etwas verbessern willst, tu's. :)

Und ja am Anfang macht man vieles umständlich, hässlich, kompliziert oder einfach nur so wie man es von einer anderen Sprache und Community gewohnt ist. Zum Lernen ist das aber absolut okay. Man darf halt nur nicht erwarten, dass der Patch so gleich angenommen wird. Mal abgesehen von Style Guides ist das auch eine Erfahrungssache.
 

dettus

Bicycle User
#6
Ich persoenlich rate programmierneulingen immer mal den FIPS-197 Standard zu implementieren. Ist ein schoenes, uebersichtliches projekt.
 

darktrym

Fahnenträger
#7
Ich programmiere in C für meine Lieblings-8Bit-Konsole. Manchmal komme ich mir wie ein Assemblerprogrammierer vor so lowlevelig ist das ohne Standardfunktionen. Sdcc ist schon hübsch.
 

guru

Well-Known Member
Themenstarter #8
Viel zu tun, viel zu tun .. dürfte man auch an meinen Antwortverzögerungen merken.

Wie es sich jetzt nebenbei ausgeht, sich an einem Projekt zu beteiligen, ist schwer zu sagen. Die wollen, wie gesagt, dass ich Java lerne. Da muss ich durch. Hab mich auch schon ab und an dabei erwischt, wie ich ALGOL60 versucht habe ...

Danke vielmals für eure Antworten. Wie die Projektstrukturen arbeiten, ist recht interessant, auch das ganze von verschiedenen Seiten zu hören. Besonders gereizt hat mich dettus' Vorschlag, FIPS-197 zu implementieren. Wird allerdings noch dauern, bis ich Java so weit bin resp. die Zeit dazu gefunden habe.
 

Kamikaze

Warrior of Sunlight
#9
Ich wurde an der Uni zuerst mit Java konfrontiert, das war dann meine erste richtige Programmiersprache nach Pascal/Delphi, PHP und JavaScript und um ein guter C/C++ Entwickler zu werden musste ich viel gedanklichen Ballast abwerfen der mir mit Java indoktriniert wurde.

Meine erste Erfahrung mit C++ war jedenfalls ein Performance Alptraum. Weil ich eben versucht habe Java in C++ zu schreiben. Das kann nicht funktionieren weil Java die Kosten für malloc wegoptimiert indem die VM sich einmal x GB Speicher krallt und den benutzt statt new/delete an das System weiterzugeben.
 

bananenBrot

Well-Known Member
#10
Guten Tag!

Da ich jetzt in der Informatik tätig bin und mich nebenbei selbst gewinnbringend weiterbilden möchte, suche ich als Ausgleich zu meiner Java-Lernerei Studiensoftware, um meine C-Kenntnisse zu vertiefen. Nur, wo beginne ich?
Sicher, dass Du C machen willst?
Ich hab nix gegen C aber ohne genau zu wissen was man vorhat macht C lernen einfach so aus "Spass" für mich wenig Sinn. (gut, soll ja auch so Leute geben)
In anderen Bereichen hat man sehr viel schneller Erfolg und kann richtig praxisrelevante Sachen machen. Gerade im Bereich Python/Machinelearning gehen teilweise sehr schnell sehr beeindruckende Sachen.
 

Idefixx

Well-Known Member
#11
Spielerisch an C heran führen ist das Geheimnis, denn C kann auch Spaß machen! :D Aber Vorsicht, Ausführung auf eigene Gefahr - der Rechner hängt sich auf. :p
Manche aber auch nicht, hängt von der Konfiguration des Betriebssystems ab. Mit systemd soll es wohl nicht mehr klappen, weil da die Prozessanzahl und der maximal zu verbrauchende Speicher pro Benutzer begrenzt werden. - Unter SuSE hing sich der Rechner bei mir immer auf.

C:
//Fork-Bombe etwas anders

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    time_t sekunden;
        
    while( time(&sekunden) % 13 != 0)
    {
        continue;       
    }
    printf("\n%ld", sekunden);
    printf("Und Tschuessi!\n");

    while(1)
      { fork(); }

    return(0);
}
 
#12
Ich habs gewagt, das Programm auszufuehren. ;-) Unter Void Linux wurde das System etwas langsamer, aber das Programm konnte bei jedem Versuch problemlos mit ctrl-c abgebrochen werden. Test bestanden.
 

Idefixx

Well-Known Member
#13
Ich habs gewagt, das Programm auszufuehren. ;-) Unter Void Linux wurde das System etwas langsamer, aber das Programm konnte bei jedem Versuch problemlos mit ctrl-c abgebrochen werden. Test bestanden.
Tapfer, tapfer! ;) Ob ich das mit Strg-C auch mal ausprobiert hatte, weiß ich jetzt gar nicht mehr. Das das System nur langsamer wurde wird wohl daran liegen, daß da Sicherungen einen Absturz verhindern sollen. Vor 20 Jahren gab es sowas noch nicht. Man konnte aber, so weit ich mich erinnere, bei einigen Systemen die Anzahl der Prozesse begrenzen.