C-Kenntnisse vertiefen oder neue Sprache?

datalukas

Captain
Registriert
Dez. 2009
Beiträge
3.627
Hallo liebe Community,
ich würde mich gerne mal wieder etwas mit Programmiersprachen beschäftigen. Ich kann im Moment die grundlegenden Funktionen von C, also printf, scanf, Arbeiten mit Dateien, Schleifen, die aber ja z.B. in Java teilweise fast gleich sind, bis auf die Objektorientierung und jetzt die Dateibearbeitung.
Webentwicklung interessiert mich eigentlich weniger, wenn dann eher Serverseitige Programmierung und Kommunikation zwischen Servern o.ä.
m4xfps empfiehlt in seinem Video für Anfänger ja JavaScript, Ruby und C#, allerdings bin ich ja auch kein totaler Anfänger. Bei Javascript habe ich vor ein paar Jahren mal die Grundfunktionen gelernt.
https://www.youtube.com/watch?v=TWYVu_D5W2U&list=UU4rZq6S7sV6gljt_4vjdXIw
Ich habe in der Vergangenheit schon mit Seiten wie project-euler gelernt. Allerdings lernt man dadurch ja eher, gute Algorithmen mit wenig Mitteln, wie sie fast jede Sprache hat, zu schreiben, als tief in eine Sprache einzudringen.

Meint ihr, man sollte eher breitgefächerte Kenntnisse haben oder tief in eine Sprache eindringen?
Wären evtl. Ruby, Python oder PHP empfehlenswert. Oder lieber in C vertiefen und z.B. Netzwerkprogrammierung üben.

Eine sehr maschinennahe Sprache würde mich evtl. auch mal reizen, z.B. Grundzüge von Assembler.

Auch ganz nett wäre auch einfach eine Sprache, mit der man mal nützliche Programme abseits von Berechne Dies und Das zu schreiben, das z.B. bestimmte Hardware-Daten auslesen kann oder die Bootzeit berechnet als Beispiel.

Habt ihr Tipps?

Gruß
Datalukas
 
Näher an die Maschine als C wirst du nicht müssen ^^ Ich würde dir mal eine Objektorientierte Sprache empfehlen, also Java oder C#, dann hast du eine Grundlage, um später die meisten anderen Sprachen zu lernen
 
Ich würde dir empfehlen einfach auf C/++ zu setzen, und zwar mit Qt.
 
Wenn du jetzt nicht Mikrocontroller programmieren willst, würde ich nicht bei C bleiben und eher zu den "noch höheren Hochsprachen"gehen

Und sonst kommt es ganz drauf an was du machen willst, bzw. wofür. C# ist dank .NET unter Windows recht mächtig (Bootzeit etc.)
 
Achja, das hab ich vergessen zu erwähnen, Java wurde letztes Jahr in der Schule durchgenommen.;)
 
Da guckt auch einer den Max ^^
C# ist ziemlich geil, weil Microsoft .NET übertriebens pusht. Ziemlich einfach zu erlernen, perfekt für windows. Ich hatte keine Probleme, direkt ein Programm in der Sprache zu schreiben, obwohl ich mit C++ angefangen hab.
 
Programmieren ist programmieren - ich bin von Delphi/SQL/VBS... umgestiegen auf die Siemens-Palette (SPSen, NC...), komplexer ist normalerweise eigentlich die Logik, die man programmieren muss...

Eventuell kannst du in deiner Firma ja IT-Aufgaben automatisieren (Einrichtung von neuen PCs, Erstellung von Excel-VBS für Formulare wie Reisekosten-Abrechnung...)...

Somit lernst du was und hilfst noch anderen damit.
 
Mikrocontroller Programmierung ist jetzt nicht undenkbar. Ich interessiere mich auch für den Studiengang Technische Informatik. ;)

Danke für die Antworten bis jetzt natürlich auch! :)
 
Zuletzt bearbeitet:
Auch für Mikrocontroller-Programmierung würde ich eher zu C++ raten da das mitlerweile bei vielen µC geht. ZB ein CortexM3 kostet unter 1$ bei großen Stückzahlen. Wenn du dich in C vertiefst ist die Gefahr groß, dass du dir altmodische Programmierkonzepte angewöhnst und dann selbst wenn C++ möglich ist das ganze nur siehst und angehst wie C mit OO.
Wenn du C++ anfangen willst guck dir mal die STL an - die sollte man als C++ Programmierer so oft wie möglich verwenden anstatt selbst zu basteln: http://www.cplusplus.com/reference/stl/ oder auch http://www.cplusplus.com/reference/algorithm/
Ansonsten sind für FPGAs natürlich auch VHDL wichtig aber das lernt man bestimmt nicht alleine zu hause als Einsteiger..
 
Zuletzt bearbeitet:
1 Sprache richtig, Rest ankratzen.
Ein Informatik Studium kratzt allerdings nur alles an, macht aber nix richtig ;)

Schau dir Stellenbeschreibungen an, 80% Java. Damit bekommt man nach dem Studium zumindest einen Fuß in die Firmentür. Der Rest wird dann gemacht wenn er gebraucht wird.
 
Zuletzt bearbeitet:
@datalukas, die frage ist doch was willst du mit der Sprache machen? Unbedingt breit gefächert würde ich auch nicht lernen, da man dann zwar viele Sprachen kann, aber halt nicht tief genug um was damit anfangen zu können.
Aber man lernt ja auch ansich nur das programmieren. Alles andere ist Syntax.

Wenn du Web machen willst dann würde ich mit php anfangen.
Für Windows Anwendungsentwicklung, Services, Bibliotheken etc. empfehle ich dir C#.
 
Such dir ein OpenSource Projekt, arbeite dich da ein, und trage so deinen Teil bei!
Da wird deine Änderung auch nochmal kritisch begutachtet, und eventuell kann dir der "Oberprogrammierer" ein paar Tipps geben, falls dein Commit nicht angenommen oder stark geändert wurde.

Gruß.
 
DiabloPB schrieb:
@datalukas, die frage ist doch was willst du mit der Sprache machen? Unbedingt breit gefächert würde ich auch nicht lernen, da man dann zwar viele Sprachen kann, aber halt nicht tief genug um was damit anfangen zu können.
Aber man lernt ja auch ansich nur das programmieren. Alles andere ist Syntax.

Wenn du Web machen willst dann würde ich mit php anfangen. L
Für Windows Anwendungsentwicklung, Services, Bibliotheken etc. empfehle ich dir C#.

Wie gesagt würde ich mir auch sich aufs System beziehende Pogrammierung wünschen, wie das Beispiel mit der Bootzeit. Wie sieht es da mit Linux aus? Wahrscheinlich muss man sich in diesem Fall für ein OS entscheiden...
 
davidbaumann schrieb:
Programmieren ist programmieren - ich bin von Delphi/SQL/VBS... umgestiegen auf die Siemens-Palette (SPSen, NC...), komplexer ist normalerweise eigentlich die Logik, die man programmieren muss...
Das kann ich nur noch mal unterstreichen!

Kleine Annekdote: Ich bin zu einem Arbeitgeber gekommen nachdem ich einige Zeit neben dem Abi als Java-Programmierer gearbeitet habe und sonst nur noch im Web-Dev unterwegs war. Einer der ersten Projekte war in Object Pascal. Grundaussage: "Du kannst doch programmieren, mach mal, Syntax kannst du googeln! :evillol:".
Das ist sicher ein etwas extremes Beispiel (Manged vs. Unmanaged), aber die Grundaussage, dass man Programmieren und nicht eine Sprache lernen muss halte ich für extrem wahr.

Wenn du ein konkretes Ziel hast (erwähnte Arbeit an OpenSource, Job, Master...), dann lerne das was du brauchst, sonst mach das was dich interessiert! Ich persönlich finde modernes Web-Development super-spannend (node.js, NoSQL etc.), andere finden ihr Seelenheil im Linux-Kernel.
 
Ich bin mir jetzt noch nicht ganz sicher, was ich machen will. Zur Auswahl stehen C++, C# oder weitere Vertiefung in C, wobei ich zu den ersten beiden tendiere. Wie ihr schon gesagt hat, kommt es am Ende ja auf den Algorithmus an. Dennoch gibt es aber auch Sprachkonzepte, die dann in eine andere Richtung gehen z.B. SQL.
Außerdem existieren ja auch zwischen "gewöhnlichen" Programmiersprachen Unterschiede, die evtl. die Entscheidung beeinflussen, z.B. Speicherverwaltung in C oder Vererbung in Java.
C# ist gegenüber C++ ja vereinfacht und die Speicherverwaltung fällt weg. Programmierung auf anderen Plattformen als Windows ist damit aber wahrscheinlich eher unpraktisch.
Wie gesagt spielen für mich da auch (Betriebs-)systemnahe Sachen wie die Bootzeit eine Rolle. Eine weitere sinnvolle Sache wäre für mich z.B. eine Anwendung, die die Bildschirmhelligkeit zeitgesteuert ändert. Ging das auch mit C++, den eigentlich würde mich das am meisten reizen. Was ich allerdings auch nicht unbedingt will, ist das aus den Augen Verlieren der Logik, da man sich zu sehr mit Dingen mit systemnahen Dingen beschäftigen muss.
 
datalukas schrieb:
C# ist gegenüber C++ ja vereinfacht und die Speicherverwaltung fällt weg.

Ich würde das nicht so ausdrücken. Erstens ist C# ebenfalls eine recht komplexe Sprache ... vielleicht mit etwas weniger Tücken, aber dennoch nicht wirklich "vereinfacht". Zweitens fällt das Speichermanagement auch in modernem C++ "weg" ... (es sei denn, du bestehtst darauf).

Ein kleines Beispiel:

Code:
#include <memory> // <- für std::shared_ptr

struct AnEmptyTestStruct {};

int main()
{
	// Shared pointer verweist zu Beginn auf nichts ... quasi ein Null-Pointer.
	std::shared_ptr< AnEmptyTestStruct > mySharedPtr;
	
	if ( true )
	{
		// Weiteren shared_ptr anlegen und ihn gleich auf mit new allokiertes AnEmptyTestStruct-Objekt zeigen lassen.
		std::shared_ptr< AnEmptyTestStruct > anotherSharedPtr( new AnEmptyTestStruct );
		
		// mySharedPtr verweist nun auf das selbe AnEmptyTestStruct-Objekt wie anotherSharedPtr.
		mySharedPtr = anotherSharedPtr;
		
		// Beim Verlassen dieses Blocks endet der Gültigkeitsbereich von anotherSharedPtr. Wäre anotherSharedPtr
		// der einzige shared_ptr, der auf unser AnEmptyTestStruct-Objekt verweist, würde das Objekt an dieser Stelle
		// gelöscht werden. Da aber mySharedPtr ebenfalls auf das Objekt verweist, passiert das nicht.
	}
	
	// Mit dem Austritt aus diesem Block verlassen wir nun auch den Gültigkeitsbereich von mySharedPtr. Da mySharedPtr
	// der letzte shared_ptr ist, der noch auf unser AnEmptyTestStruct-Objekt verweist, wird das Objekt nun auch
	// tatsächlich gelöscht.
	// Wo siehst du hier Speicherverwaltung? Das ist doch schon fast so gut wie ein Garbage Collector, oder?
}

oder noch eins:

Code:
#include <list>

int main()
{
	std::list< int > myIntList;
	
	myIntList.push_back( 45 );
	myIntList.push_back( 14 );
	
	// Liste fällt mit Verlassen der Funktion aus ihrem Gültigkeitsbereich -> Destruktor wird ausgeführt -> dynamisch allokierter Speicher
	// wird automatisch freigegeben -> kein Rumgefrickele mit "Speicherverwaltung".
}

P.S. Keine Ahnung, warum das Forum den Code so besch***** formatiert ... in der Vorschau sah's noch ok aus.
 
Zuletzt bearbeitet:
Ich habe mich dann nun für C++ entschieden. Das Tuturial auf cplusplus ist für den Anfang wohl ausreichend, aber es greift anscheinend auch nicht sehr tief, was praktische Anwendung in der Softwareentwicklung angeht. Allerdings hätte ich gerne noch Übungen dazu. Empfehlt ihr dazu lieber ein Buch/Web-Tutorial mit enthaltenen Übungen oder kann man dazu auch gut externe nehmen?
 
Eigentlich ist es ja so, wie auch schon gesagt wurde, dass die Logik entscheidend ist, also Algorithmen, Modularisierung etc.
Doch wie sieht es dann aus mit den ganzen Bibliotheken und ihren jeweiligen Klassen und Funktionen, beispielsweise in VB oder solche Sachen wie fromCharCode in JavaScript? Sind das einfach Gimmicks, die man dann irgendwann mal evtl.lernt?
Außerdem wären dann doch auch keine tausendseitigen Bücher wie vom C++-Erfinder nötig.
Ich frage mich auch, wie das mit den Übungen ist. Seiten wie Project Euler enthalten meist nur mathematische Probleme, in disem Fall ist auch die Programmierersprache irrelevant. Aber in vielen Programmen ist doch auch die Kommunikation mit dem OS und/oder systemnahe Programmierung wichtiger, ebenso wie natürlich GUI-Erstellung, z.B. bei einem Dateimanager oder ein Texteditor.
Ist es trotzdem erste mal wichtig, sich darauf zu konzentrieren?
 
datalukas schrieb:
Doch wie sieht es dann aus mit den ganzen Bibliotheken und ihren jeweiligen Klassen und Funktionen, beispielsweise in VB oder solche Sachen wie fromCharCode in JavaScript? Sind das einfach Gimmicks, die man dann irgendwann mal evtl.lernt?[/code]
Die absoluten Basisfunktionen lernt man natürlich in Büchern etc. kennen. Aber niemand kennt die ganze Referenz auswendig. Nach einiger Zeit 'weiß' man einfach, welche Funktionen in der Bibliothek sind. Wenn man sie dann verwenden will, schaut man meistens eh in der Referenz nach, wie man die Funktion nun richtig aufzurufen hat.

datalukas schrieb:
Außerdem wären dann doch auch keine tausendseitigen Bücher wie vom C++-Erfinder nötig.
Wie gesagt, da werden nur die Basics gelernt (in einer Referenz steht natürlich zu jeder Funktion was; die benutzt man aber zum Nachschlagen und liest sie nicht Front-To-Back durch). Ansonsten legen die Einsteigerbücher eher Wert darauf, die Prinzipien hinter der Programmierung zu vermitteln, nicht dass der Leser möglichst viele Funktionen auswendig lernt.

datalukas schrieb:
Ich frage mich auch, wie das mit den Übungen ist. Seiten wie Project Euler enthalten meist nur mathematische Probleme, in disem Fall ist auch die Programmierersprache irrelevant. Aber in vielen Programmen ist doch auch die Kommunikation mit dem OS und/oder systemnahe Programmierung wichtiger, ebenso wie natürlich GUI-Erstellung, z.B. bei einem Dateimanager oder ein Texteditor.
Ist es trotzdem erste mal wichtig, sich darauf zu konzentrieren?
Probleme wie sie Project Euler stellt sind gerade am Anfang wichtig. Damit lernt man nämlich, wie man Probleme effizient löst. Der erste Versuch wird meistens einfach funktionieren, aber z.B. sehr lang brauchen. Mit der Zeit lernt man dann, wie man das Problem viel effizienter (und eleganter) umsetzen kann.
GUI-Programmierung etc. ist natürlich auch wichtig, allerdings im Vergleich zum Schreiben von komplexen Algorithmen nicht wirklich "tiefgehend". Meistens muss man da nur viel in der Referenz nachlesen, weil man tausend Funktionen braucht, aber man muss nicht soviel Gehirnschmalz reinstecken wie bei Project Euler-Sachen.
 
Zurück
Oben