Generelle Fragen zum Programmieren

Smash

Commander
Registriert
Apr. 2005
Beiträge
2.307
Hi,

Da ich vielleicht anfangen will ein bisschen/viel zu programmieren, einfach weil ich Lust auf etwas Neues habe, habe ich noch ein paar generelle Fragen. Zum Thema mit welcher Sprache man anfangen sollte gibt es ja genug Threads und XXXXXXXXX Meinungen. Es wird wahrscheinlich C werden.

Die Fragen:

1. Wie wichtig ist die Arbeitsumgebung? Ich habe hier praktisch gesehen eigentlich nur ein Vista 64 Bit, an dem ich arbeiten würde.

2. Wie schnell veralten solche Sprachen und ändert sich da etwas? Ich finde teilweise Tuts von 2001 oder 2003.

3. Was ist der große Unterschied zwischen C# und Visual.Basic.

4. Ist .NET die Zukunft, in Richtung Microsoft Anwendungen?

5. Was heißt immer objektorientiert? LINK Ist das also sicherer?

6. Wie ist das zusammenspiel zwischen Software und Hardware?

Ich hoffe ihr könnt mir meine Fragen beantworten.
mfg und einen schönen Sonntag Abend.

Smash
 
Visual.Basic ist eine erweiterung von Basic und ist, wie der name schon sagt, nur basisch
Objektorientiert heist, dass man das eigentliche ziel nicht aus den augen verlieren soll
 
F.b schrieb:
Objektorientiert heist, dass man das eigentliche ziel nicht aus den augen verlieren soll

das sollte man natürlich nicht xD
aber "objektorientiert" heisst das man programmcode in "objekten" (~ Klassen) zusammenfasst um so eine Struktur und das komplette Programm zu bekommen
 
Also das mit dem Objektorientiert tut mir leid
Und wie schnell sprachen veralten kommt auf den anwendungsbereich drauf an
 
Objektorientiert heißt in erster Linie, dass man nicht das gesamte Programm in einem runter coded sondern einzelne "Objekte" macht die man ggf auch wieder verwenden kann.

So splittet man das Programm in quasi mini Programme um diese mehrfach einsetzen zu können.


Programmiersprachen veralten je nachdem kaum bis sehr schnell je nach Einsatzgebiet. C++ dürfte aber noch länger state of art sein und wer C kann hat relativ gesehen weniger Schwierigkeiten "aufzusteigen" wichtig bei der Wahl der Programmiersprache ist zu überlegen welche Lösungen man coden will. Es macht z.B. keinen Sinn C++ für etwas zu nehmen was auch ein Batch Skript mit 2 Zeilen schafft.

Verhältnismäßigkeit ist entscheidend.

.NET hat Vor sowie Nachteile. Jeder Linux Benutzer wird dir jedoch an den Hals springen ;)
 
naja ist eigentlich egal welche sprache du lernst .. kennst du eine kennst du sie alle irgendwie ist es sauleicht umzusteigen. würd einfach zufällig eine auswählen wobei ich c++ für eher schwieriger ist, zb bei vererbung komplexer als java, wobei ich c++ am schönsten finde.
irgendwer hat mal gemeint wenn man mathe gern macht programmiert man auch gern c++ .. ;-)
 
Cool, dann haben sich ja die Fragen 2, 3 und 5 geklärt.

Mir ist jedoch noch eine neue Frage eingefallen, und zwar, ist zwar ein übertriebenes Beispiel aber egal:
Aus welchen Sprachen ist denn jetzt zum Beispiel Windows XP geschrieben?

Freue mich über weiter antworten.

mfg Smash
 
Zu 1.
Also ich finde eine Entwicklungsumgebung sehr wichtig. Es gibt welche mit denen komm ich super zurecht und mit anderen auch nicht.

Und zu deiner letzten Frage: So und So. Das Hardware nahe sicher in Assambler/C und der Rest in C++(meine ich)

Grüße

Krizzel
 
Vista 64 ist nicht die Entwicklungsumgebung. Das ist und bleibt ein Betriebsystem wie XP auch ;).
Mit Entwicklungsumgebung ist z.B. VS2008, Elipse, Sharp Develop, etc. gemeint
Diese Progarmme habe einen Kompiler integriert, der das Programm auf knopfdruck lauffähig macht. Dies geht alles auch per Konsole, ist für den Anfang aber nicht unbedingt zu empfehlen.

Und zu 6: Unter umständen muss man das tun. Dies kommt aber nur bei Assambler und anderen Hardware nahen Programmiersprachen vor.
Wenn du C#, Java oder andere Hochsprachen programmierst, musst du dich um soetwas nicht kümmern.
Das wird von Frameworks übernommen

Grüße

krizzel
 
Also, gut dann habe ich ja kein Problem mit Vista. Wenn ich jetzt zum Beispiel Visual.C++ auswählen würde, dann kommt mir das alles irgendwie so wie ein Fertig-PC vor, ich meine irgendwie so unrichtig halt^^. :D Außerdem wollte ich ja mit C anfangen.

Klärt mich auf.

Gut, das mit der Hardwäre hätte ich verstanden.

mfg Smash

EDIT: Habe mich jetzt einfach mal an dieses Tut gesetzt und Notepad++ als Editor heruntergeladen. Jetzt fehlt mir aber noch ein Compiler, und irgendwie finde ich keinen einfach, sondern komme immer nur zu diesem gcc.
 
Zuletzt bearbeitet:
Also wenn du Cygwin benutzen willst (kannst) ist die gcc für C perfekt. Ansonsten MinGW oder die einschlägig bekannten Microsoft-Produkte.
 
Würde zu MinGW raten, hatte ich bisher am wenigsten Probleme mit.

Aber wenns nicht unbedingt C sein muss, lieber C# ;)
 
Zuletzt bearbeitet:
Den ersten Tipp, den ich dir geben würde, ist ersteinmal nüchtern zu bleiben. Setz dich ersteinmal mit den Grundlagen außeinander.

Eine Programmiersprache ist, abgesehen von Assembler, eine Abstrahierung von der Maschinensprache der jeweiligen Prozessorarchitektur. Jede Architektur verfügt über eigene Befehle und dementsprechend ist nicht ein System wie das andere. Beispielsweise kannst du keinen 80x86er code auf einem powerpc System ausführen und andersherum. PCs sind sogenannte 80x86er Systeme. Jede Prozessoraurchitektur verfügt über eine eigene Art und Weise Befehle zu erhalten. Dementsprechend verfügt jede Prozessorarchitektur über seine eigene Maschinensprache.

Nun gehen wir einen Schritt höher. Da reiner Maschinencode ziemlich unverständlich und tödlich auf das Gehirn eines Menschen wirken kann, wurden Assemblersprachen entwickelt. Diese sind prinzipiell genau dasselbe wie die Maschinensprachen, mit dem Unterschied, dass die Befehle nicht in hexadezimaler Form angegeben werden, sondern in kurzen und prägnanten Zeichenfolgen.
Grundsätzlich sieht es so aus, dass sämtliche Programmierung in gewöhnlichen Textdateien mit angepasster Dateiendung von statten geht. Diese Textdateien nennt man Quelltexte (auf Englisch "sourcecode"). Diese "sagen" dem Computer, was er tun soll. Assemblerquelltexte werden von sogenannten "Assemblern" in binären computerlesbaren Format übersetzt (das sind die schönen "einsen und nullen" ;)). Da Assembler eigentlich direkt die Prozessorsprache ist, übersetzt er den Quelltext quasi "eins zu eins". Dennoch ist es notwendig, da Textdateien nunmal eine Folge von Zeichen darstellen.
Für Genaueres kannst du dich ein wenig informieren, wenn es dich interessiert.


Nun gehen wir noch eine Stufe höher. Da Assemblercode recht kompliziert ist/wirkt und vor allem nicht auf andere Architekturen portierbar ist, gibt es die sogenannten "Hochsprachen", welche letztenendes genau das sind, was man heutzutage unter "Programmiersprache" versteht. Die Quelltexte dieser Programmiersprachen werden ebenfalls übersetzt, genauer "kompiliert". Dies übernimmt der sogenannte "compiler". Er übersetzt den Quelltext architekturspezifisch so, dass wiederum architekturangepasster binärcode herauskommt. Desweiteren sind die Hochsprachen um einiges einfacher, komportabler und effektiver.
Bei den Hochsprachen unterscheidet man wiederum zwischen zwei Dingen: Erstens, ob es sich überhaupt um eine Sprache handelt, deren Quelltexte man überhaupt übersetzen muss, oder ob es sich um eine interpretierte Sprache handelt. Die Quelltexte der interpretierten Sprachen werden von einem "interpreter" gelesen, welcher selbst jedoch kompiliert ist, und sagt dem System, was er nun machen soll.
Als zweites spielt der "Programmierstyle" eine Rolle. Man unterscheidet zwischen funktional, objektorientiert, prodezural etc. Die Sprache C ist prodezural, das heist das Programm ist wie eine Art Fluss. Das fängt an einem Punkt an, rattert die Funktionen durch und trifft irgendwann auf das Ende. Objektorientierte Programmierung geht einen anderen Weg, indem man sagt, alles sind Objekte, welche handeln können, über Eigenschaften verfügen etc. Man stellt sich also wirkliche Objekte vor und beschreibt sie virtuell. C++ ist eine objektorientierte Sprache, genauer gesagt eher eine hybride, da du mit C++ auch prodezural programmieren kannst, da es voll zu C kompatibel ist.
Desweiteren überschneiden sich Sprachen teilweise. Zum Beispiel ist es möglich, mit Assembler und C verschiedene Funktionen zu schreiben und diese mit C++ nutzen. Warum? Weil letztenendes alles wieder zum System zurückfließt. Desweiteren findest du bestimmte Konzepte in vielen verschiedenen Sprachen wieder, Syntax kann ähnlich sein etc.


Zwischen dir und dem System liegt im wesentlichen der "Kernel". Nur dieser ist in der Lage das System direkt anzusprechen und sämtliche Vorgänge auf einem modernen Betriebssystem sind auf ihn zurückzuführen. Außer dem Kernel ist beispielsweise keiner berechtigt, den physikalischen Speicher zu nutzen. Woher dein Programm Speicherplatz und Zugriff auf alles Mögliche erhält, darum musst du dir keinerlei Gedanken mehr machen. Das haben Andere für dich übernommen.
Gewisse Sprachen sind für Systemprogrammierung vorgesehen, wie beispielsweise C, C++ und D. Die meisten Kernel und Treiber sind mit C geschrieben. Dies gilt auch für Windows. Prinzipiell sind aber auch andere Sprachen möglich, auch wenn die falsche Meinung herumschwirrt, es sei nur mit C möglich.


Die Standardmöglichkeiten der Sprache C wird dir über die Standardbibliothek und den damit verbundenen zugrundeliegenden Systemfunktionen bereitgestellt. Bibliotheken (*.dll/*.lib -> auf Englisch library, kurz lib) beinhalten Funktionen, welche andere entwickelt haben, damit du sie leicht nutzen kannst, ohne wissen zu müssen, wie genau sie funktionieren, nicht jedesmal das Rad neu erfunden zu müssen oder sie einfach nicht jedesmal neu programmieren möchte. Durch dieses Prinzip wird das Programmieren an sich immer abstrakter, da Bibliotheken auf Bibliotheken aufbauen und zum letzendlich gewünschtem Ergebnis führen. Somit ist es über eine Game-Engine, die letztenendes nicht weiteres als eine Bibliothek ist, einfach möglich, eine Funktion zum rendern und anzeigen einer Quakemap oder anderen Formaten zu ermöglichen. Die Funtionen an sich kennt dein Programm nicht direkt, du sagst ihm lediglich, dass es sie gibt und wie sie zu handhaben sind. Dies geschieht über das Einbinden der header (*.h). Wenn du dein Programm nun kompilierst, hinterlässt er eine Referenz auf die Funktion und "sucht sie dann irgendwo anders". Es entstehen Objektdateien (*.o), welche in der Form jedoch noch nicht nutzbar sind. Das letzendliche Zusammensetzen des Projektes übernimmt der "linker". Er fügt alle übersetzten Teile zusammen und löst die Funktionsaufrufe auf. Zuletzt verpasst er den zusammengefügten Objektdateien ein Binärformat, sodass du die Bibliothek/das Programm auch auf deinem Betriebssystem ausführen kannst.


Prinzipiell benötigst du zum Programmieren folgendes:
- Editor
- Compiler
- Linker (oft mit dem compiler mitgeliefert und automatisch nach dem compiler aufgerufen)
- eventuell ein buildsystem

Zum letzten Punkt sei gesagt, dass es bei einer angemessenen Projektgröße extrem nervig ist, alles immer wieder manuell kompilieren zu müssen. An diesem Punkt setzen die buildsysteme an und haben folgende zwei Funktionen:
- Automatisierung des Übersetzungsprozesses
- Verhinderung, dass Dateien, die gar nicht geändert worden sind, noch einmal übersetzt werden


Unter Windows sind IDEs (Integrated Development Envoirment -> Entwicklungsumgebungen) üblich. Diese verbinden quasi die oben genanten Dinge in einem Programm. Viele Programmierer unter Windows sind sich gar nicht dessen bewusst, dass sie gar keine IDEs benötigen. Ob du welche nutzt oder nicht, hängt von dir ab. Ich würde es dir nicht raten, wenn jedoch doch, benutz nicht Visual Studio sondern besorg dir irgendetwas simples, dass dir einfach nur die nötigsten Funktionen mitliefert.


PS: Hoffe das war nicht zu viel xD
 
Zuletzt bearbeitet: (Rechtschreibung und Grammatik)
Wow, BigChiller, das ist ja mal ein Beitrag.*Respekt*

Aber ich verstehe nicht weiso du von Visual Studio abrätst. Ich finde es ist eine echt super Entwicklungsumgebung.
Viele Feauters die das Programmieren sehr erleichtern, wodruch man sich auf das wesentliche konzentrieren kann.

Und ich bin der Meinung, zum Einstieg in die Programmierung ist eine Hochsprache besser geeignet.
Wenn man mal was hardwarenahes programmieren muss, kann man sich in die Materie einarbeiten.

Grüße

krizzel
PS.:
BigChiller schrieb:
Grund: Rechtschreibung und Grammatik
Dann berichtige noch Standard.;)
 
Smash schrieb:
Hi,

Da ich vielleicht anfangen will ein bisschen/viel zu programmieren, einfach weil ich Lust auf etwas Neues habe, habe ich noch ein paar generelle Fragen. Zum Thema mit welcher Sprache man anfangen sollte gibt es ja genug Threads und XXXXXXXXX Meinungen. Es wird wahrscheinlich C werden.
Ich würde auch mit C anfangen, da das sehr gut geeignet ist, um Grundlagen zu schaffen, auch wenn es am Anfang etwas frustrierend ist, weil man damit absolut nichts machen kann.
Die Fragen:

1. Wie wichtig ist die Arbeitsumgebung? Ich habe hier praktisch gesehen eigentlich nur ein Vista 64 Bit, an dem ich arbeiten würde.
Wenn du mit C anfängst, dann kannst du grundsätzlich auf so gut wie allem programmieren, was eine Tastatur hat. Ich würde dir aber raten, das Visual Studio einzusetzen, da das für den Anfang auch in der Express Edition ziemlich brauchbar ist. Von diversen Freeware Umgebungen halte ich nicht wirklich viel. Auf keinen Fall sollte man sich mit irgendwelchen alten Dos basierten Editoren wie vi oder irgendeinem Dos Murks herumschlagen.
Wenn ein Programm halbwegs sauber programmiert ist, dann läuft es auf 64Bit und 32 Bit gleich. Man braucht es nur durch den Compiler jagen.
2. Wie schnell veralten solche Sprachen und ändert sich da etwas? Ich finde teilweise Tuts von 2001 oder 2003.
C hat sich schon seit Ewigkeiten nicht verändert. Das ist immer noch bis auf ein paar Zusätze auf dem Stand der 70er bzw. bei C++ von den 80ern. Bei aktuellen Programmiersprachen tut sich schon einiges.
3. Was ist der große Unterschied zwischen C# und Visual.Basic.
C# ist an die Syntax von C angelehnt, um C++ Programmierern (und von denen gibt es eine ganze Menge) den Umstieg zu erleichtern. VB.NET baut auf Visual Basic auf, hat aber seine Altlasten schon ziemlich entsorgt und ist meiner Meinung nach C# im Komfort bei Weitem überlegen, wenn man sich einmal daran gewöhnt hat.
Man sollte VB.NET halt nicht mit dem alten VB6 verwechseln, das z.B. immer noch in Access Makros zu finden ist. Es gibt zwar immer noch ein paar Dinge, die gewöhnungsbedürftig sind (z.B. dass beim impliziten Umwandeln von Gleitkomma in Integer gerundet wird oder dass man bei der Deklaration eines Feldes nicht die Länge, sondern den Index des letzten Elements angibt.
Vom Funktionsumfang sind C# und VB.NET her so gut wie gleich. Alle Funktionen des .NET Frameworks sind von allen Sprachen gleich verwendbar. Man kann z.B. in C# eine Klasse definieren und in VB.NET oder C++ davon ableiten und umgekehrt.
Grundsätzlich kann man jedoch sagen, dass man bei C/C++ eher näher an der Hardware programmiert, als in VB.NET. Deshalb sind mathematische Algorithmen in C/C++ schneller, aber dafür ist es auch sehr viel umständlicher. C# ist so ein Mischding. Nicht wirklich schnell, aber gleichzeitig auch etwas umständlicher als VB.NET, vorausgesetzt man kann beide Sprachen
4. Ist .NET die Zukunft, in Richtung Microsoft Anwendungen?
In Zukunft wird kaum mehr eine Anwendung ohne das .NET Framework auskommen.
5. Was heißt immer objektorientiert? LINK Ist das also sicherer?
Objektorientierte Programmierung ist ein absolut notwendiges Features einer modernen Programmiersprache. Am Anfang würde ich mich jedoch noch nicht darum kümmern, sondern einmal schauen, dass du Schleifen, Funktionen etc. gut beherrschst und dafür ist C gut. Um die objektorientierte Programmierung zu üben, würde ich dann aber schon auf eine andere Programmiersprache umsteigen (Java oder VB.NET). Mit C++ würde ich es nicht probieren. Da wirst du viel zu sehr von der ganzen Pointerei abgelenkt. Ich habe es in Java gelernt und kann sagen, dass das ganz gut war dafür. VB.NET ist aber denke ich auch sehr gut dafür geeignet, da es von der Syntax her sehr intuitiv ist und man die ganze Unterstützung des .NET Frameworks hat mit vielen Klassen, die man gut Ableiten könnte und man kann auch ziemlich problemlos diverse andere Features ausprobieren (Threads, Collections, Network/File Streams etc.) Weiters hat man eine ziemlich umfangreiche Hilfe, wo man schnell Beispiele finden kann.
6. Wie ist das zusammenspiel zwischen Software und Hardware?

Ich hoffe ihr könnt mir meine Fragen beantworten.
mfg und einen schönen Sonntag Abend.

Smash

P.S.: Tu es dir gar nicht an, dich damit herumzuquälen, was ein Compiler, Linker etc. ist. Das verwirrt dich nur. Weiters rate ich stark davon ab irgendwelche einfachen Notepads zu benutzen. Da steckt man vor allem am Anfang mehr Arbeit rein, wie man das ganze zum Kompilieren/Linken etc. bringt bzw. in die Fehlersuche, wie in das lernen der eigentlichen Programmiersprache. Es ist nicht schlecht, wenn man weiß, wie z.B. die Übersetzung in Quellcode und dessen Ausführung passiert, genauso wie es nicht schlecht ist, wenn man weiß, wie die Cache Hierarchie in einer CPU oder der Thread Scheduler von Windows, die Codierung der Daten bei GBit LAN etc. funktionieren, aber wirklich notwendig ist das für den Anfang wirklich nicht. Du solltest lernen einen einfachen Ablauf zu programmieren mit if Bedinfungen, while, for und vielleicht switch case. Damit schau, dass du lernst einen normalen Ablauf zu programmieren. Wenn du das kannst, dann versuche ein paar Funktionen zu schreiben mit Rückgabewert. Wenn das auch hinhaut, kümmerst du dich um Felder, dann Strukturen und dann Pointer. Wenn du das alles halbwegs kannst, dann würde ich sagen lass es mit C bleiben und versuche dich an einer modernen Programmiersprache. Meine Empfehlung ist wie gesagt VB.NET, aber wenn dir die C Syntax gefällt, kannst du auch C# oder Java (aber wenn dann mit einer ordentliche Entwicklungsumgebung mit einem guten GUI Designer) nutzen. (je nach Geschmackssache). Hier würde ich sagen, dann die objektorientierte Programmierung mit Konstruktoren, Methoden, Datenvariablen und Ableitungen wichtig sind. Dann auf jeden Fall noch Exceptions (vor allem das Abfangen, z.T. auch das Erzeugen mit Throw). Weiters noch Diverse GUI Elemente (Textfelder, Listboxen etc.), Collections, Threads, Zugriffe aufs Dateisystem, diverse String Funktionen, Network Streams (also mit IP,Port auf einen selbst programmierten Server verbinden und dann Daten hin und her schicken). Weiters sind noch Datenbanken wichtig. Hier wäre es gut, wenn du etwas SQL lernen würdest bzw. allgemeine Datenbank Modellierung (was ist eine Primärschlüssel, wie Verknüpfe ich Tabellen so, dass nachher auch etwas vernünftiges raus kommt etc.). Dann kannst du versuchen von deinen Programm auf die Datenbank per SQL zuzugreifen.
Erst wenn du das alles geschafft hast, kannst du dich mit weiteren Dingen auseinandersetzen. Bis dahin wird es für dich auch noch nicht notwendig sein, selbst Header Files zu erstellen bzw. deinen Code auf mehrere Source Files aufzuteilen, weil mit dem Visual Studio 2008 (und teilweise auch 2005) man locker 1K Zeilen in ein File stopfen kann, ohne dass es unübersichtlich wird. Wenn man natürlich im vi mit seinen 20 Zeilen Sichtbereich, keinen einklappbaren Funktionen und sehr mühsamen Scrollfunktionen kämpft, dann ist der Punkt natürlich schon viel früher erreicht.
 
Zuletzt bearbeitet:
Auf keinen Fall sollte man sich mit irgendwelchen alten Dos basierten Editoren wie vi oder irgendeinem Dos Murks herumschlagen.
vi ist nicht "Dos-basiert" und auch kein Murks. Es ist mit gutem Recht einer der meistbenutzten Texteditoren und schlägt jeden anderen Editor, den ich bisher gesehen habe um Längen.

Ich würde jedem, der sich zutraut, die Bedienung zu lernen wärmstens ans Herz legen, sich die freie vi-implementierung VIM anzusehen.

http://www.vim.org
 
Zuletzt bearbeitet:
1.) Sorry habe mich vertippt. Satz sollte lauten:
Auf keinen Fall sollte man sich mit irgendwelchen alten Editoren wie vi oder irgendeinem Dos Murks herumschlagen.

2.) Der vi ist vielleicht für irgendwelche alte Unix Gurus, die den schon seit 30 Jahren verwenden und keine Maus bedienen wollen zum Schreiben von Notizen (wofür man unter Windows Notepad verwendet) ganz brauchbar, aber zum Programmieren sicher nicht. Da fehlen einem so gut wie alle Features einer Entwicklungsumgebung:

a) Keine Überwachung von Variablen, da
b) Keine Debug Funktion in irgendeiner Form
c) Kein automatisches Kompilieren d.h. man kann sich extra Make Files schreiben etc.
d) Keine irgendwie gearteten Funktionen, dass man den Code von Funktionen einklappen kann d.h. es wird schon ab 200 Zeilen unübersichtlich und kann alle auf 100 Files aufteilen.
e) Keine Vervollständigung von Namen beim Tippen. Man kann sich also alle Variablennamen genau merken und sieht es erst am Syntax Highlighting.
f) Kein Features wie Profiling etc.

Man kann also nur auf gut Glück etwas eintippen und dann hoffen, dass das richtige rauskommt. Wenn nicht, dann kann man sich 100K Debug Ausgaben einbauen (je nachdem, was man testet mehr oder weniger detailliert). Wenn man die Methoden einer Klasse wissen möchte, dann kommt man ohne Manual überhaupt nicht weiter oder muss raten usw.
Wenn man irgendeinen Performancerelevanten Vorgang testen will, dann hat man sowieso schon ein Problem, wenn der Durchlauf einer Schleife unter der Genauigkeit der Systemzeit liegt (bei Windows 15ms, bei Linux weiß ich nicht). Man hat keine brauchbare Möglichkeit herauszufinden, ob z.B. das Netzwerk, die internen Berechnungen im Programm oder die Datenbank im Hintergrund bremst. Man sieht nur das Gesamtergebnis, dass alles nicht 1ms braucht, sondern 5ms, aber den Grund zu finden ist so gut wie unmöglich.
 
Die Sache ist aber doch, dass der "PRogrammierer" den Job machen soll und nicht die IDE.
Die kann es nämlich nicht.
Features hin oder her, VI ist sicher kein schlechter Editor und für einige Programiersituationen durchaus sinnvoll.
Das Bild mit den "alten Unix Gurus" wird eigentlich nur von denen gefördert, die mit VI nicht effizient umgehen können, und dann meinen den Editor verteufeln zu müssen, anstatt das zu akzeptieren.
(ist natürlich auch nur ein Vorurteil)
Die ganzen "Features" haben natürlich irgendwo ihre Berechtigung.
Aber sie machen nur Sinn, als Arbeitserleichterung und nicht als Arbeitsersatz.
Grundsätzlich sollte man als guter Programmierer nur "Features" nutzen, deren Arbeit man auch selbst tun könnte. Trifft das auf irgendwelche Leistungsmerkmale nicht zu, ist es Zeit zu lernen, wie sie funktionieren. Natürlich muss man das moderieren. Im professionellen Kontext kommt es dauernd vor, dass man Dinge verwenden muss, die man nicht durchblickt.
Umso wichtiger ist es, deren Leistung abschätzen zu können, und zu wissen was sie machen, wenn man schon nicht genau weiß, wie sie es tun.
"Auf gut Glück eintippen und hoffen..." ist genau das, was nicht passieren soll.
Die Korrektheit von Programmen, oder auch nur ihre genaue Funktion (was sie also wirklich genau tun) ist etwas, dass die Maschine nicht verarbeiten kann.
Genau das ist der Job eines guten Programmierers. Zeilen runterschrubben und den Anweisungen von Fehlermeldungen folgen, kann jeder Zwerghamster. (mit viel viel Training, ok)
Man kann es auch etwas spöttischer Formulieren.
1. Die Rechenmaschine kann weit weniger, als der Mensch in seinem Kopf.
(allerdings kann sie sehr gut für ressourcenraubende Knechtarbeit eingesetzt werden)
2. Ergo, Wenn der Programmierer es nicht kann, kann es die Maschine schon gar nicht.
3. Umso mehr Hilfsmittel der Programmierer braucht, um seine Arbeit zu tun, umso schlechter ist er.

Das ist natürlich ziemlich übertrieben und nur in ziemlich engen Grenzen richtig.
Aber wenn jemand wirklich lernen will, wie der Hase läuft, dann muss er nunmal bei der Physik des Laufens und der Anatomie des Hasen anfangen, und sicher nicht beim "Bunt Anstreichen des Hasenkäfigs".
Die Wahl der Entwicklungsumgebung ist eine Sache, die man als Programmierer selbst vornimmt.
Man nimmt die Umgebung, die einem den größten Erfolg verspricht. Wenn man die Entscheidung nicht treffen kann, ist das überhaupt kein Problem. Dann muss man die entsprechenden Erfahrungen eben erstmal machen. Wenn man die Grundlagen noch nicht kennt, kann man nicht beurteilen, was eine IDE alles haben muss.
Aber egal wieviel man damit arbeiten und wieviel man ausprobiert, kann man diese Frage nicht beantworten ohne zu lernen, was hinter der IDE steckt.
Wer nicht weiß, wofür man einen Compiler braucht, der kann auch nicht entscheiden ob die IDE damit so umgeht, wie man das möchte. Wer nicht weiß, wie der Erzeugungsprozess der Programme funktioniert, kann auch nicht entscheiden welche IDE das auf die gewünschte Weise tut. (man kann ja noch nichtmal die "gewünschte Weise" finden)

Den anderen Vorschlägen stehe ich deshalb ziemlich kritisch gegenüber.
Meiner Meinung nach (und aller die ich persönlich dazu gefragt habe), ist das der genau verkehrte Ansatz, um wirklich gut zu werden.
Wenn man nur damit rumspielen will ohne ernsthafte Absichten zu haben, ok.
Für den Fall halte ich mich ganz weit aus der Argumentation heraus, da will ich nichts zu sagen. (das kann ich nämlich nicht nachvollziehen)
Keine eigenen Header zu schreiben, nicht zu wissen was ein Compiler macht, irgendwann ein Bisschen SQL lernen, ...
Das ist imho die Verkörperung des falschen Weges. Wie man zudem Objektorientierung als absolut notwendig und gleichzeitig das Aufteilen von Funktionalität als unnötig ansehen kann, verstehe ich überhaupt nicht.
Der Mangel an Grundlangenkenntnis und Grundlagenverständniss ist der Grund überhaupt, wenn solche "Programmierer" Schwierigkeiten haben.
Die einfachen Elemente einer Sprache wie C, hat man nach einem Wochenende intensiver Beschäftigung so weit verstanden, dass man weiß, ob es Sinn macht sich weiter damit zu beschäftigen.
Ich kann überhaupt nicht nachvollziehen, dass Elemente wie "Bedingungen", "Schleifen" oder einfache Datentypen soviel Bedeutung einheimsen.
Das sind schließlich genau die Dinge, die fast vollständig mathematisch motiviert sind und nicht aus der "Computerwelt" kommen.
Vielleicht liegt es aber genau daran?
Interessant und "programmierbezogen" wird es doch erst, wenn man sich mal einen Moment Zeit nimmt und schaut, wie ein Programm von der Maschine verarbeitet wird.
Für den Algorithmus ist es egal, wie eine "Bedingung" verarbeitet wird. Wenn man aber sieht wie aus einer Bedingung oder Schleife plötzlich Sprunganweisungen werden,
und die Maschine den Kontext wechseln muss begibt man sich in den wirklichen Bereich des Programmierens. Wer die Umstände der Maschinen auf denen er arbeitet ignoriert,
muss sich gefallen lassen, dass er lediglich angewandte Mathematik betreibt. (was ja nichts schlechtes ist)
Es ist ja schon seltsam, dass so viele Leute "Programmieren lernen" wollen, anstatt zu fragen, was Programmieren eigentlich ist.
Natürlich ist da der Reiz der Ergebnisse. Klar ist es "toll", wenn man sieht wie man den Computer "kontrolliert". Natürlich freut man sich, wenn das erste Programm läuft, oder irgendwann die erste GUI zu sehen ist.
Aber nur für diesen Selbstzweck lernt man es eigentlich nicht.
Programmieren lernen ist die handwerkliche Grundausbildung des "Informatikers".
(praktischen Mathematikers, Entwicklers ...)
Es ist nichts weiter, als das Wissen und die Fähigkeiten zum Umgang mit den Maschinen.
Genauso wie jemand der Automotoren entwickelt, lernen muss, welchen Regeln die Maschinen und das Material unterlegen, muss es auch der, der Aufgaben mit dem Computer verrichten will.
Ein "guter Programmierer" ist noch lange kein guter "Algorithmenentwickler" oder ein "guter Designer".
Es "guter Programmierer" ist jemand, der eine Anweisung effizient und unter Berücksichtigung der Gegebenheiten auf einem Computersystem umsetzen kann.
(sofern die Anweisung dafür modelliert ist)
Die Frage ist also eigentlich "Wo solls hingehen? Warum Programmieren lernen?"

-- -- muckelzwerg
 
Muckelzwerg: Ein schöner Text. Sowas hätte ich hier jetzt nicht erwartet.

€:
a) Keine Überwachung von Variablen, da
b) Keine Debug Funktion in irgendeiner Form
Vim ist ein Editor. Aber man kann aus ihm einen Debugger aufrufen. Bspw. gdb.
c) Kein automatisches Kompilieren d.h. man kann sich extra Make Files schreiben etc.
Automake, Autoconf (vgl. a/b)
d) Keine irgendwie gearteten Funktionen, dass man den Code von Funktionen einklappen kann d.h. es wird schon ab 200 Zeilen unübersichtlich und kann alle auf 100 Files aufteilen.
Ich bedaure dich für deine knappe Aufmerksamkeitsspanne. Außerdem kann Vim folding.
e) Keine Vervollständigung von Namen beim Tippen. Man kann sich also alle Variablennamen genau merken und sieht es erst am Syntax Highlighting.
Vim kann das.
f) Kein Features wie Profiling etc.
gprof (vgl. a/b/c)
 
Zuletzt bearbeitet:
Zurück
Oben