Fachinformatiker Anwedungsentwicklung! Welche Programmiersprache?

Worauf ich hinauswollte ist die Meinung die vor meinem Post haufenweise verkündet wurde: C++ verzeiht keine Fehler. Das heißt ja wohl, dass es andere Sprachen, die hier empfohlen werden, also Java und C#, Fehler verzeihen.
Da hast du was falsch verstanden.
Es ging mir darum dass C zum Teil logische Fehler zulässt welche die moderneren Sprachen direkt erkennen. Fehler bleiben es auch da.
Siehe Arraybeispiel: Der Speicherfehler mit C kommt unter Umständen vom OS, aber für den C-Compiler ist ein Zugriff "out of bounds" erlaubter Code der allenfalls mit einer Warnung kommentiert wird. Wenn man nicht gerade einen Virus schreiben will("aus versehen" out of bounds so lesen und schreiben ist der gängigste Trick bei parasitären Programmen) ist es dann doch angenehmer wenn sowas schon beim Kompilieren das Problem aufgedeckt wird oder zumindest ein definierter Fehler Auftritt statt dass schlicht Schwachsinn passiert.
 
Ich merke schon, nicht nur an der Auslache über meinen Alternativvorschlag mit "Delphi", dass wir hier nicht wirklich auf einen gemeinsamen Nenner kommen.

Letztlich geht es darum dem Jungen eine 'anfängliche' Programmiersprache vorzuschlagen, doch irgendwie hauen sich hier alle die Köpfe ein, warum die Sprache besser ist und warum jene ..

Also Fakt ist, "C" ist und bleibt für Anfänger schwierig.
Es kommt drauf an, was genau in seinem künftigen Betrieb programmiert/entwickelt wird, und daran sollte er sich richten.

Wenn es irgendwelche Programme mit grafischer Oberfläche für Windows-Systeme werden sollen, ist nahezu jede Objektorientierte Sprache gut.
Ratsam ist immer eine, die weit verbreitet ist. Das ist nunmal "C", "Java" und Delphi (..etc. pp.).

"C" verzeiht nunmal wenig Fehler (hmmm ... déjà vu ?? ;) ) weshalb man hier doch auf etwas 'einfacheres' zurückgreifen sollte.

Java ist sehr C - ähnlich, jedoch können Anfänger sehr gut damit Programme schreiben ohne erst den Code lange nach Syntaxfehlern zu durchforsten und Speicherlecks zu schließen ...


Deshalb an den Themenstarter: Probier einfach etwas rum wenn du die Chance hast. Sieh dir ein paar Beispiel-Projekte in z.B. C# oder Java an, ließ ein wenig was über die Syntax und den Aufbau ...
Hol dir vielleicht noch ein paar mehr Meinungen ein, ohne dass sich die Forenmitglieder von der Hauptfrage zu sehr abwenden und entscheide vielleicht dann.

Hast ja noch ein wenig Zeit ... nur warte nicht zu lange wenn du das vorhast. ;)
 
Ich finde vorallem interessant, dass C++ beides bietet, die hardwarenahe strukurierte Programmierung UND OOP. klar ist OOP die Zukunft, aber man sollte trotzdem das andere nicht vernachlässigen.

Sorry, dass ich da widersprechen muss, aber wer momentan studiert lernt, dass man Objekte auch in funktionalen Programmiersprachen (als Beispiel sei mal wieder das össelige Scheme genannt :ugly:) viel besser repräsentieren kann ^^

Aber was auf jeden Fall stimmt ist, dass OOP-Sprachen jetzt und auch noch einige Zeit at the TOP bleiben :)
Außerdem sollte sich ein Informatiker (Fach/Hobby/....) immer möglichst die Sprache zur Problemlösung auswählen, die am geeignetsten ist.

Ich merke schon, nicht nur an der Auslache über meinen Alternativvorschlag mit "Delphi", dass wir hier nicht wirklich auf einen gemeinsamen Nenner kommen.
Meine Meinung: Um sich darauf vorzubereiten ist die Sprache eigentlich egal! Nur eine OOP-Sprache wirst du wahrscheinlich auch weiter im Beruf nutzen, weshalb das wohl am sinnvollsten ist.
Man schaue sich ein wenig um und nehme für den Anfang das, was einem am besten liegt. Später kann man sich dann auch an "schwierigere" Sprachen setzen.
 
"C" für den Anfang ist schwierig, zumal C wenig Fehler verzeiht.

Du würdest nichts verkehrt machen, wenn du mit Java anfängst.
Da mußt du dich anfangs auch nicht um das Speicheraufräumen kümmern. Das erledigt für dich schon die Garbage collection.

Die meisten Berufschulen lehren auch Java. Manchmal auch erst im 2. oder 3. Lehrjahr.

Mit dem Einstieg in Java, kriegst du schon die ersten Grundkenntnisse der Programmierung.
Objektorientierte Programmiersprachen ähneln sich im Aufbau und der Syntax sehr.

In deiner späteren Prüfung wirst du auch nicht auf dein Aufgabenzettel was in einer bestimmten Programmiersprache runterkritzeln, sondern in eine Pseudocode.

Eine gute Alternative die ich dir zu Java noch empfehlen könnte, wäre Delphi.
Java jedoch ist weiter verbreitet und wird ebenso vielfach für Webdesign, Mobile Geräte (wie Smartphones) und Waschmaschinen verwendet. ;) :D
Also ich frag mich echt immer mit eurer Speicherverwaltung habt.... Habt ihr schon mal angefangen C/C++ zu lernen?

Da habt ihr am Anfang genau NULL damit zu tun. So lange ihr keinen Stack/Heap Overflow habt, kann euch das so was von scheis egal sein, ob man da nun Speicher selbst verwalten muss oder nicht. Und wenn man es machen muss, dann ist das alles recht schnell geklärt. Bei uns wird darauf z.B. in der Info1 Vorlesung (besserer C/C++ Programmierkurs) überhaupt nicht drauf eingegangen. Ich bin selbst drauf gestoßen, das ich ein großes Array nutzen wollte, und dann lustige Fehlermeldungen bekommen habe. Das war dann in ner Stunde dann aber alles geklärt und seit dem ist auch die ach so "schwere" Speicherverwaltung kein Ding :ugly:

Ihr verkennt immer etwas C/C++.

C/C++ eröffnet einem viele Möglichkeiten. Wenn man aber keinen Bock hat diese zu nutzen, kommt man VERDAMMT weit. Seh es wie ein Fernseher mit der Mörder Fernbedienung. Da kannste auch einfach nur den Ein/Aus Knopf nur benutzen, genau wie bei solchen, die eben gar nicht mehr bieten, und schwieriger ist das auch nicht, weil die SO FETT sind, das man sie nicht übersieht. Wenn man aber will/muss, dann kann man aber auch alles mögliche mit machen, wo man bei den anderen Sachen aufgeschmissen ist.

Kurz um, die ganzen komplizierten Sachen kommen in C/C++ eigentlich nur dadurch zustande, das man Performance braucht, und da wirds egal in welcher Sprache kompliziert. Wenn ich z.B. Performance brauche, nutz ich Zeiger und Referenzen. Wenn nicht, kopier ich den Mist halt rum.


Die Anwendungsentwickler die ich kenne haben mit C# gelernt und dabei wohl auch viel mit SQL Server hantiert(Abschlussjahrgang 2011). Soo wichtig ist es aber eigentlich garnicht mit welche C-Dialekt man anfängt.

Was ich bei reinem C (und C++), gerade für Anfänger ohne einen der drüber guckt, unschön finde ist dessen Grundannahme " der Programmierer hat immer recht". Wenn z.B. ein Index aus dem Array läuft wird halt der Speicherbereich darüber gelesen. :klatsch:.
Bei Java, C# etc. merkt solche Fehler schon der Compiler, das kann einem gerade beim Einstieg viel Frust ersparen.
Ja, diese Grundannahme "der Programmierer hat immer recht" ist durchaus mit gewissen Fallstricken versehen :D Hab ich selbst auch schon erlebt. Allerdings fängt man ja langsam an und lernt schritt für schritt das, was man brauch. Wenn einem Performance etc. egal ist, kommt man mit den ganzen fancy Sachen ja gar nicht in Berührung.

Ich nutz z.B. aktuell auch ein Array eines Structs, mit Zeigern auf arrays eines Structs mit Zeigern auf Listen :ugly: Total hässlich, sich das zu überlegen, wie man jetzt auf die einzelnen Sachen zugreifen muss, und wie man das jetzt genau anordnet, damit es modular ist, aber wenn mans einmal hat, dann ist es nur noch copy&paste. Wie so oft halt.


Also da muss ich Playa recht geben. Mit C anzufangen wäre ein sehr schwierige Angelegenheit. Am besten du fängst mit C# oder Java an um einmal die Logik und Grundlagen zu lernen.
Wenn man ANSI C nimmt, was jetzt die Deklaration der Variablen auch in den Schleifen zu lässt etc. dann ist das kein Stück komplizierter. Dich zwingt ja keiner, dich mit dem schwierigen Themen zu befassen. Du KANNST es machen, aber für die meisten Sachen musst du es nicht.

Das ist es ja. C/C++ gibt dir viele Werkzeuge an die Hand, die du nutzen KANNST! du wirst aber nur selten dazu gezwungen Sie wirklich zu nutzen.

Ich habe in meine Ausbildung mit Java begonnen (bin kein Fan von Java) und nach 2 Jahren auf C# umgesattelt. Vor zwei Jahren habe ich mich erst in die Welt von c++ begeben und habe dabei sehr viel gelernt und muss sagen, dass ich es nicht umbedingt einfach fand. Anders als bei C# und Java, musst du in c/c++ deinen Speicher selbst verwalten (kein garbage collector :(). Ohne meine Vorkenntnisse (5 Jahre Programmieren mit Java und C#, professionell in der Schule, kein Zuhause Hobby programmieren) wäre ich wahrscheinlich verzweifelt.

Also ich würde dir C# oder Java ans Herz legen. Meiner Meinung ist C# am besten um in die Welt der Programmierung einzutauchen. Das riesige .NET Framework mit den 10000 Klassen und Funktionen werden dich auch dabei unterstützen. Außerdem hast du eine große Community und eine (meiner Meinung die beste) Doc wo du immer nach Hilfe suchen kannst.
Was willst du/er lernen?

Wirklich programmieren und Lösungen selbst entwickeln, oder fertige Sachen zusammenstecken, wo man nicht weiß wies funktioniert....

Klar, das muss man auch können, für die Wirtschaft, wo es oft drum geht schnell etwas zu lösen, das hat dann aber für mich nichts mehr mit Informatik zu tun, sondern wirklich nur noch reines programmieren. Dafür nutz ich aber lieber nen Inder oder whot ever. Der ist billiger. Hier in D sollten sich die Leute schon bitte Gedanken darüber machen, was Sie da grad runter hacken.

Am Anfang musst du sowieso einmal die Grundlagen lernen. Am Anfang musst du sowieso die Syntax und Semantik der Sprache kennenlernen und auch die Grundlagen wie Datentypen, Schleifen, etc. erforschen die eigentlich in jeder Sprache gleich sind. (Bezogen auf Java und C#. In C++ wirst du einige davon nicht finden.)
Die Grundlagen sind halt in vielen Sprachen ziemlich ähnlich. Daher machts gerade am Anfang auch nur wenig Unterschied, ob man jetzt C/C++ Java, oder sonst was lernt. So lange die Sprache Datentypen kennt, und es nicht so fancy wie Python handhabt, ist das alles sehr ähnlich.
 
Also ich mache gerade den Technischen Assi für Informatik. Letztes Jahr war es noch so das die Schüler C++ lernen mussten. Wir, die neuen, lernen nun C# und ich kann dir sagen es ist wirklich einfach!
Ich persönlich würde sagen das du mit C# anfangen solltest und etwas mit C++ arbeiten solltest.
Du musst für dich schauen was einfacher ist. Ich habe versucht C zu lernen und fand es wirklich schwer! C# vereinfacht alles aufs extremste!
 
Was fandest du denn daran schwer?

In C# bist du halt auf Windows fest genagelt.

In C hat du ein paar Grundlegende Sachen, aus dem du alles andere basteln kannst. Halt programmieren.
 
Was du am Anfang in der Berufsschule lernst ist sprachenunabhängig. Fang am besten mit C#, C++ oder Java an. Objektorientierung wirst du in der Berufsschule auf jeden Fall machen.

Das Niveau in meiner Berufsschule ist so niedrig, dass ich mir da an deiner Stelle keine Sorgen machen würde. Da machen wir in einem halben Jahr Sachen, die du dir an einem Samstag Nachmittag selbst beibringen könntest.

Wenn du dich auf die Ausbildung vorbereiten willst dann lerne die Grundlagen des Programmierens in einer der Sprachen und schau zu, dass du auch gut Englisch kannst. Englische Texte sollte man als Programmierer flüssig lesen und vor allem verstehen können.

Viel mehr würde ich gar nicht machen. Die Ausbildung heißt Ausbildung weil du da was lernen sollst und nicht schon alles mitbringen musst.
 
Hey,

Letztes Jahr war es noch so das die Schüler C++ lernen mussten. Wir, die neuen, lernen nun C# und ich kann dir sagen es ist wirklich einfach!

Jep, genau so war es bei mit Java vor 7 Jahren bzw. C# vor 4 Jahren. Nur hald in einer HTL. :)

In C# bist du halt auf Windows fest genagelt.

Gut das du auf Windows beschränkt bist ist bei C# klar. (Hört mir bitte mit Mono auf.) Jedoch muss ich dazusagen, dass du auch in C++ mit vielen Funktionen (nicht ANSI) auf verschiedene OSs festgenagelt bist. Vor allem wenn es ums Dateisystem geht. (Da hab ich meine ersten Bekanntschaften gemacht. Mutexes etc.) Dann kannst du auch anfangen Codesegmente für jedes OS zu schreiben.
Da ist dann hald die einzige Möglichkeit in Java zu coden, wenn du das umgehen willst.

Aber ich glaube wir verwirren dich nur mehr mit unserem geklappere.

Laut Wikipedia wird in MS Dynamics NAV mit der Programmiersprache C/AL gearbeitet. Diese ähnelt sich am ehersten mit Pascal.

"C/AL (C/SIDE Application Language) ist eine interne Programmiersprache für Microsoft Dynamics NAV auf Basis der C/SIDE-Entwicklungsumgebung. C/AL ist ereignisgesteuert, aber nicht objektorientiert. C/AL zählt zu den Programmiersprachen der 4. Generation. C/AL ist syntaktisch mit Turbo Pascal verwandt, hat allerdings nicht eine so strenge Typisierung wie Pascal.
Praktisch der gesamte Funktionsumfang von Microsoft Dynamics NAV ist in C/AL programmiert und für die Solution-Center zugänglich. Somit kann NAV komplett an die Bedürfnisse und Wünsche der Kunden angepasst werden.
Der Zugang zu C/AL kann optional in einer Entwickler-Lizenz erworben werden. Programmierer erhalten dadurch die Möglichkeit, die Anwendung an ihre spezifischen Anforderungen anzupassen. Die Anwendungsobjekte können durch eine binäre oder textbasierte Import-/Exportfunktion einfach portiert werden."

Quelle: Microsoft Dynamics NAV

Jedoch arbeitet Microsoft an einer neueren Version die auf .Net Basis geschrieben wird. Ich bin mir sicher früher oder später wird Micrsoft den Support für C# ermöglichen. Somit wäre C# eine gute Alternative wenn du was für die Zukunft lernen willst.

"
Die im Dezember 2010 aktuelle Version von Navision ist Dynamics NAV 2009 R2. Parallel zur Weiterentwicklung von Navision entwickelt Microsoft mittel-/langfristig eine Version auf Basis von .NET, die die MBS-Produkte Dynamics NAV, Dynamics AX und Dynamics GP zu einem ERP-System zusammenführen soll. Der Support von NAV (Navision) wurde Anfang 2008 nach offiziellen Angaben von Microsoft [3] auf 10 Jahre erweitert: 5 Jahre Mainstream Support und 5 Jahre Extended Support. Der Support beginnt mit der Version NAV 5.0.
Im ersten Quartal 2008 erschien eine Lösung für kleine Unternehmen und Kleinstunternehmen. Diese Lösung erhielt den Namen Microsoft Dynamics Entrepreneur Solution 2008 und basierte auf Dynamics NAV 5.0. Microsoft hat die Weiterentwicklung von Entrepreneur jedoch eingestellt und eine Herausnahme aus dem Sortiment für Ende 2009 angekündigt, um sein Marketing strategisch auf NAV 2009 konzentrieren zu können. (Verkündet per Brief und Mail an MS Partner sowie auf dem 2008er Microsoft Dynamics ERP Launch in Fürstenfeldbruck, 8./9. September 2008)
Dynamics NAV 2009 erhielt als erstes NAV-Release statt der bisherigen Versionsnummer die bei Microsoft-Software übliche Jahreszahl. Diese Version bot erstmals:
  • Die Auswahlmöglichkeit zwischen dem neuen rollenbasierten Client („Role Tailored Client“) und dem bekannten Client, der nun als „Classic Client” bezeichnet wird.
  • Optionale Drei-Schichten-Architektur statt der bisherigen Zwei-Schichten-Architektur.
  • Änderungen der Benutzeroberfläche, z. B. neues Form-Design, Grafiken (Infoparts), Icons (Papierstapel), Action Panel, „Breadcrumb Bar”, Command Bar.
  • Programmierung erfolgt weiterhin in C/AL, der Quelltext wird aber intern nach C# portiert und eine DLL erstellt.
  • Für die Version NAV 2009 wird für den rollenbasierten Client Microsoft SQL Server 2005 (oder höher) vorausgesetzt, bei Verwendung des bisherigen Clients kann weiterhin der proprietäre "Dynamics NAV Database Server" eingesetzt werden, der aber technisch nicht mehr weiterentwickelt wird."
Quelle: Microsoft Dynamics NAV

Mit freundlichen Grüßen,
Frezy
 
Ich merke schon, nicht nur an der Auslache über meinen Alternativvorschlag mit "Delphi", dass wir hier nicht wirklich auf einen gemeinsamen Nenner kommen.
Ratsam ist immer eine, die weit verbreitet ist. Das ist nunmal "C", "Java" und Delphi (..etc. pp.).
Delphi war schon am verrotten, als ich den Mist in der Schule durchnehmen musste, es wird nicht wieder lebendig und das ist auch gut so :D.
Ich wüsste genau 0 Gründe, weshalb Delphi
- verbreitet wäre
- gut wäre
- gut war
- irgendwelche Vorteile gegenüber einer der lebendigen Sprachen (C,C++, Java, Ruby, Python, C# etc etc) bietet

Daneben kostet es 199€, um an eine aktuelle Delphiversion zu kommen, die nebenbei nichtmal UTF8 oder 64bit beherrscht :ugly:.
Die Entwicklung ist auch jedes Jahr bei nem anderen Unternehmen, es wird hin und her verkauft ....
 
Hey,

So das ist mein letzter Beitrag hier. Wie man sieht hat sich der TE schon lang nicht mehr gemeldet und das endet nur mehr im Chaos.

Also ich frag mich echt immer mit eurer Speicherverwaltung habt.... Habt ihr schon mal angefangen C/C++ zu lernen?

Da habt ihr am Anfang genau NULL damit zu tun.

Dann kommst du aber nicht weit wenn du das so siehst.

So lange ihr keinen Stack/Heap Overflow habt, kann euch das so was von scheis egal sein, ob man da nun Speicher selbst verwalten muss oder nicht. Und wenn man es machen muss, dann ist das alles recht schnell geklärt. Bei uns wird darauf z.B. in der Info1 Vorlesung (besserer C/C++ Programmierkurs) überhaupt nicht drauf eingegangen. Ich bin selbst drauf gestoßen, das ich ein großes Array nutzen wollte, und dann lustige Fehlermeldungen bekommen habe. Das war dann in ner Stunde dann aber alles geklärt und seit dem ist auch die ach so "schwere" Speicherverwaltung kein Ding

Dann will ich nicht wissen wie viele Memory Leaks du in deine Programme gebaut hast. Wenn du glaubst, mit Pointern hat sich das ganze getan, dann solltest du dich noch etwas länger mit der Speicherverwaltung beschäftigen.

Kurz um, die ganzen komplizierten Sachen kommen in C/C++ eigentlich nur dadurch zustande, das man Performance braucht, und da wirds egal in welcher Sprache kompliziert. Wenn ich z.B. Performance brauche, nutz ich Zeiger und Referenzen. Wenn nicht, kopier ich den Mist halt rum.

o.0 mehr sag ich dazu nicht...

Wirklich programmieren und Lösungen selbst entwickeln, oder fertige Sachen zusammenstecken, wo man nicht weiß wies funktioniert....

Du KANNST in C# auch alles selber machen ... musst du aber nicht, da du ein riesiges Framework hast. In C++ hast du das nicht... Auch wir mussten verschiedene Algorithmen (Bubblesort, etc.) programmieren, obwohl eine es eine Alternative im .NET Framework dafür gibt. C# verbietet dir nicht deine Algorithmen selbst umzusetzen, stellt aber viele zur Verfügung. Aber wenn du meinst das man als Programmierer fertige Sachen zusammensteckt, dann hast du wohl noch nicht sehr viel mit dem Beruf zu tun.

Als Programmierer bin ich nicht nur dafür zuständig Code zu schreiben. Viel eher geht es um die Entwicklung eines Algorithmus und ein bestimmtes Problem in die Hand zu nehmen. (Mir kommt vor du beschreibst einen Programmierer als ein Kind mit vielen Legosteinen. Leider ist es damit nicht getan.)

Also wie oben bereits geschrieben, war das mein letzter Beitrag hier. Themenverfehlung... 5... setzen.

Mit freundlichen Grüßen,
Frezy
 
Zuletzt bearbeitet:
Hey,
Dann kommst du aber nicht weit wenn du das so siehst.
Lass mich mal überlegen.. hm.. Ich komm so weit, wie ich kein new/malloc brauch, also schon SEHR weit (Constructor/Destructor klammer ich da aus. Keiner zwingt dich zu OoP). Ergo, gerade wenn man lernt, kommst du mit der explizieten Speicherverwaltung eigentlich gar nicht in Berührung, sondern erst wenn du größere und kompliziertere Projekte machst, dann solltest du aber eh schon wissen was du denn da eigentlich fabrizierst.

Dann will ich nicht wissen wie viele Memory Leaks du in deine Programme gebaut hast. Wenn du glaubst, mit Pointern hat sich das ganze getan, dann solltest du dich noch etwas länger mit der Speicherverwaltung beschäftigen.
Wayne interessiert ein Memory Leak bei nem Programm, das nach ein paar Sekunden/Minuten fertig ist? Zudem, wie willst du ein MemoryLeak ohne new/Malloc erzeugen, und ohne OoP? Bin ich mal gespannt. Es geht ums LERNEN! nicht um "wie schreibe ich eine kommerzielle Software". Da muss man dann nämlich wirklich auf Memory Leaks aufpassen, vor allem wenn das Ding länger stabil laufen soll. Jetzt tun wir aber bitte nicht so, als ob Memory Leaks nur ein Problem von C/C++ ist. Das ist grundsätzlich ein Problem jeder Programmierung ab einem gewissen Komplexitätsgrad, einfach weil kein Code Fehlerfrei ist, und durch solche Fehler eben gerne auch mal Memory Leaks entstehen. Also von daher den Ball mal flach halten, und nicht den Teufel an die Wand malen.

o.0 mehr sag ich dazu nicht...
Ja warum machste denn sonst die Zeiger/Referenc gymnastik. Machste halt call by value und gut ist. Übergeb ich der Funktion halt das 100MB Struct statt einfach den Zeiger darauf. Juckt mich ja nicht. Genau so juckts mich nicht, ob ich das jetzt in nem 1D array mit alignment abspeicher, oder in nem 2D array, oder ob ich 10 mal mehr Speicher verbrauch als nötig, oder ob ich jetzt AOS oder SOA nehm ist dann auch kack egal. Genau so wie Cache-Größen, Cachelines, etc. etc. Mit so was KANN man sich beschäftigen, und damit einiges aus seinem Programm raus holen, aber das ist doch für Leute, die eine Sprache lernen wollen total fürn Arsch. Über so was kann man sich gedanken machen, wenn man Sie wirklich brauch...

Du KANNST in C# auch alles selber machen ... musst du aber nicht, da du ein riesiges Framework hast. In C++ hast du das nicht... Auch wir mussten verschiedene Algorithmen (Bubblesort, etc.) programmieren, obwohl eine es eine Alternative im .NET Framework dafür gibt. C# verbietet dir nicht deine Algorithmen selbst umzusetzen, stellt aber viele zur Verfügung. Aber wenn du meinst das man als Programmierer fertige Sachen zusammensteckt, dann hast du wohl noch nicht sehr viel mit dem Beruf zu tun.

Als Programmierer bin ich nicht nur dafür zuständig Code zu schreiben. Viel eher geht es um die Entwicklung eines Algorithmus und ein bestimmtes Problem in die Hand zu nehmen. (Mir kommt vor du beschreibst einen Programmierer als ein Kind mit vielen Legosteinen. Leider ist es damit nicht getan.)

Also wie oben bereits geschrieben, war das mein letzter Beitrag hier. Themenverfehlung... 5... setzen.
Lesen/Verstehen, das sieht man mal wieder deutlich. Ich sag:" Programmieren ist nicht nur Nimm Bilbiothek XY und wurschtel das mit Bibliothek Z zusammen", und du erzählst mir ich würde genau das Gegenteil behaupten... Wenn du dann schon von Noten anfängst, dann Setzen 6, Textverständnis nicht vorhanden...

Gerade als Anfänger ist es zwar schön und gut, wenn man viele Bibliotheken hat, aus denen man sich bedienen kann, dadurch verkommt Programmieren aber eben genau zu dem von dir verschriehenen Legokasten.... Gerade als Anfänger sollte man lieber mal eine doppelt verkettete Liste selbst implementieren, genau wie die anderen Standardalgorithmen, um ein Gefühl für die Sprache zu bekommen und auch dafür, welche Auswirkungen es hat, wenn man Sachen unterschiedliche implementiert. Gerade ein parallel reduze ist eine gute Fingerübung. Klar nutzt man später gern mal Bibliotheken, einfach weil man ein Projekt fertig machen muss, und eben auch gar nicht die Zeit/das Geld hat, um alles selbst zu implementieren, und zumindest genau so schnell zu sein, wie die Bibliotheken. An denen haben ja viele Leute mitgearbeitet mit guten Ideen. Programmieren ist aber halt schon etwas mehr, denn die Entscheidung ob ich jetzt Bibliothek XY mit diesem oder jenen Sortierverfahren einsetze, die liegt schon noch bei mir. Genau so kann ich durch die ganze Programmstrucktur viel beeinflussen, und auch so manches Problem/zusätzliche Arbeit geschickt einsparen. Das schaff ich aber erst, wenn ich weiß, was da passiert. Wenn Bibliotheken für mich einfach nur Blackboxen sind, in die ich was rein werf und dann kommt hinten wieder was raus, dann ist das zwar praktikabel, aber man sollte doch zumindest den Ansatz einer Idee haben, was da wohl gemacht wird, und spätestens wenn ich wirklich in den Code rein schau, sollte ich verstehen können, was da passiert, und warum etwas so und nicht anders gemacht wird.

Dazu muss ich aber mir halt auch mal selbst gedanken machen und etwas selbst schreiben, auch wenn es dazu schon 10k Bibliotheken gibt, die 1000 mal schneller sind als das was ich da fabrizier. Aber so seh ich dann was gut ist und was schlecht ist.

PS:
Halt den Ball flach und les mein Sach nochmal durch. Du braucht mir nämlich nicht erzählen, das ein Informatiker mehr ist als nur stur irgend welchen Code runter hacken, sondern die Algorithmen und Datenstruckturen sehr wichtig sind. Aber hey, ich bin ein kleines dummes nichts wissendes Kind, was von tuten und blasen keine Ahnung hat, und deswegen auch schon mal um nen Faktor 2 schneller war als der Dozent...
 
Als Programmierer bin ich nicht nur dafür zuständig Code zu schreiben. Viel eher geht es um die Entwicklung eines Algorithmus und ein bestimmtes Problem in die Hand zu nehmen. (Mir kommt vor du beschreibst einen Programmierer als ein Kind mit vielen Legosteinen. Leider ist es damit nicht getan.)

Das ist hier allen vollkommen bewusst, aber warum soll ich das Rad neu erfinden wenn das schon jemand anders getan hat? Klar muss mann als Programmierer Probleme lösen, aber doch nicht unbedingt Probleme die Leute schon vor dir hatten, dafür gibt es dann die Legosteine.:)
 
Jaein.

Du wirst nie DIE perfekte Lösung finden, es sei denn es sind triviale Sachen, wie z.B. Einfach etwas zu sortieren, z.B. in einer Liste. Oft kann man aber hier oder dort eine Abhängigkeit eliminieren, oder auch Strukturen nutzen, so dass das Sortieren schneller geht, weil man schon eine gewisse Ordnung hat, und dann nur noch Teilbereiche sortieren muss.

Sortieren ist ein gutes Beispiel dafür, wo es keinen Sinn macht, das selbst zu implementieren. Dafür gibts Bibliotheken, an deren Speed man wohl nie selbst ran kommen wird. Das steckt ja auch ne ganze Menge höherer Mathematik dahinter.

in den meisten Fällen, besteht deine Aufgabe ja aus mehr als nur das sortieren von Listen etc. Da muss man dann eh selbst Hand anlegen. Genau so kann z.B. sinnvoll sein, das einlesen von Bilddateien selbst zu schreiben, obwohl es dafür auch Bibliotheken gibt, einfach weil man eine bestimme Datenstruktur brauch oder was auch immer.

Z.B. gibts ja auch die Vectoren in der STL. Wenns auf das letzte Quäntchen Performance an kommt, nutzt man aber lieber 1D arrays, und sorgt selbst für alignment. Die Dinger können halt in dem Fall mehr als man brauch, und es gibt ein einfacher Konstrukt, was die Aufgabe auch erfüllt. Für 99,9999999% der Programmierer dürfte das allerdings völlig belanglos sein. Es soll aber das Prinzip verdeutlichen. Wenn du Bibliotheken nutzt, dann haben die immer einen ziemlichen Rattenschwanz an Zeug hinten dran, den du NIE im leben brauchst. Da muss man dann immer abwägen, ob ich das Ding einfach nutzen kann, oder ob es aus welchen Gründen auch immer nicht mehr praktikabel ist.

Insbesondere wenn man dann die Datenstrukturen ändern muss um eine Bibliothek zu verwenden, wirds fraglich, ob es nicht doch besser ist, selbst eine Lösung zu implementieren.

Wie gesagt, solche Überlegungen tauchen aber meist erst bei kommerziellen/laufzeitkritischen Applikationen auf.

Man lernt halt fürs Leben und nicht für den speziellen Fall, und da sind Grundlagen einfach entscheidend. Daher finde ich es absolut richtig, das man am Anfang trotzdem die Probleme durcharbeitet, die schon 10k mal vor einem gelöst wurden, und wo es schon VIEL bessere Lösungen für gibt frei verfügbar. Man lernt einfach etwas dabei, was einem später hilft, wenn man nicht drum rum kommt.

Ist wie die Rettungsübung auf Kreuzfahrtschiffen. Normal total überflüssig, aber wenns dann doch mal knallt, ist man froh halbwegs bescheid zu wissen.
 
Ich hab auch in der FH mit C++ angefangen und entwickle mittlerweile mit C Embedded Software. Insgesamt bin ich zwar schon der Meinung das es nie verkehrt ist C/C++ zu lernen aber wenn ich heute nochmal anfangen müsste wäre mir C# sicher auch lieber bzw. eingängiger. Gerade weil bei C/C++ schon ein paar richtig gemeine Sachen möglich sind, wie z.B.
Code:
[FONT=Arial][COLOR=black][FONT=Courier New]
const unsigned char [/FONT][/FONT][FONT=Courier New][COLOR=black]foo[/FONT][FONT=Courier New][COLOR=black]=1;[/FONT] [LEFT][FONT=Courier New][COLOR=black]unsigned char *[/FONT][FONT=Courier New][COLOR=black]ptr[/FONT][FONT=Courier New][COLOR=black]; // the pointer "target" is not declared const correct would be: const unsigned char *ptr = &foo;[/FONT][FONT=Courier New][COLOR=black]ptr[/FONT][FONT=Courier New][COLOR=black]=&[/FONT][FONT=Courier New][COLOR=black]foo[/FONT][FONT=Courier New][COLOR=black];           // this should at least generate a compiler warning but might not!
*[/FONT][FONT=Courier New][COLOR=black]ptr[/FONT][FONT=Courier New][COLOR=black]=2;             // this will change the value of the constant foo![/FONT][/LEFT]
Klar jetzt werden einige argumentieren, jaja sowas ist doch spezielles Zeugs, aber solche Sachen passieren unwissentlich.
 
Zurück