Zum Inhalt springen

Whiz-zarD

Mitglieder
  • Gesamte Inhalte

    2076
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    50

Alle Inhalte von Whiz-zarD

  1. Hä? Man kann doch nur alte Prüfungen kaufen.
  2. Wenn ich diesen Quatsch lese, muss ich an Postal denken.
  3. Und das sind Aufgaben für eine Einstellung?🤨 Kein Wunder, dass alle über den Fachkräftmangel jammern...
  4. Ach so und du hast gleich erkannt, was richtig und was falsch ist? Richtig oder falsch entwicklen gibt es eigentlich nicht, wenn am Ende des Tages das erwartete Ergebnis rauskommt. Was es aber gibt, ist das einhalten von Richtlinien und Qualitäten. Ich würde auch mal behaupten, dass selbst heute die meisten Entwickler nicht wissen, was Objektorientierung wirklich hervorgebracht hat. (Spoiler: Vererbung von Polymorphie ist es nicht.)
  5. Die Mär vom "falschen Lernen"... Das lese ich so oft und ist auch totaler Quatsch, wenn ich sehe, wie so manche überstudierte Entwickler mit teuren Zertifikaten und 20+ Jahren Berufserfahrung entwickeln. Da bekomme ich oft einen Schreikrampf. Ja, viele Tutorials und Bücher sind nicht das Gelbe vom Ei, besonders nicht diese, die gleich mit einer grafischen Oberfläche anfangen. Von diesen würde ich abraten aber was soll an Autodidakt so schlimm sein? Im Grunde ist jeder Entwickler ein Autodidakt. Jeder, der sich mit einer neuen Technologie auseinandersetzt, lernt es autodidaktisch. Man rennt ja nicht gleich zur nächstbesten Schulung. Um in seinem Job gut zu werden, muss man aber sein Können reklektieren können. Feedback einholen, Feedbach verstehen und auch Feedback berücksichtigen. Das gilt sowohl für angehende Azubis, als auch für Senior-Entwickler. Wer das nicht kann, ist auch kein guter Entwickler. Darum, lasst doch einen angehenden Azubi in einer objektorientierten Sprache prozedural entwickeln, wenn er es halt erstmal nicht besser weiß. In der Ausbildung bekommt er ja das Feedback, um sich zu verbessern. Jeder hat doch mal klein angefangen. Blick doch mal auf euren ersten Code zurück. Der war mit Sicherheit auch nicht clean und wenn alle studierten Entwickler und ausgelernten Fachiformatiker sauber entwickeln würden, gäbe es doch überhaupt keinen Legacy Code. Die Welt ist aber voll davon. Wenn, dann würde ich aber schon mit der Sprache anfangen, die auch im Betrieb verwendet wird, sofern sie schon bekannt ist. Also um gute Tipps geben zu können, müsste man erstmal wissen, ob die Sprache bekannt ist.
  6. Wie soll die Formel =(A1:A99999)<>"" funktionieren? A1:A99999 ist ein Vektor und kein einzelner Wert. Die Formel wird immer FALSCH zurückliefern. Darüber hinaus ist das extrem inperformant. Formeln werden bei jeder Zellenänderung neu berechnet und jedes Mal erzeugt er diesen enorm großen Vektor. Je mehr du von diesen Formeln verwendest, desto mehr Zeit braucht er für die Berechnung, was irgendwann dazu führt, dass Excel aus sehr langsam wird. Mir schließt sich auch nicht, was das soll. Benutze doch einfach intelligente Tabellen. https://www.hands-on-excel.com/intelligente-tabellen/ Die haben den Vorteil, dass sie noch eine spezielle Zellenangabe besitzen, die sich dynamisch verändert, sodass man solche Spielereien wie A1:A99999 nicht benötigt. https://support.microsoft.com/de-de/office/verwenden-von-strukturierten-verweisen-für-excel-tabellen-f5ed2452-2337-4f71-bed3-c8ae6d2b276e Verstehe ich nicht. Was soll denn bei =ZEILE(A2:A99999) Auch rauskommen? Lies dir doch mal die Dokumentation durch: "Gibt die Zeilennummer des Bezuges zurück." Was soll er denn bei der Formel zurückgeben, wenn du ihm 99998 Zeilen gibst? Da kannst du auch gleich 2 schreiben. Ich glaube einfach, dass du nicht verstanden hast, was du da eigentlich tust, da du in allen Punkten die Funktionen völlig falsch verwendest.
  7. Ist das die vollständige Lösung? Das ist syntaktisch komplett falsch. Ein INSERT-Statement hat keine WHERE-Klausel. Auch werden hier überhaupt keine Daten selektiert. Meine Lösung würde so aussehen: CREATE TABLE MitgliedArchiv AS SELECT * FROM Mitglied LEFT JOIN Angebot ON Angebot.mitgliedid = Mitglied.idmitglied WHERE Angebot.mitgliedid IS NULL DELETE FROM Mitglied WHERE idmitglied IN (SELECT idmitglied FROM MitgliedArchiv) In der MitgliedArchiv-Tabelle liegen ja nun die inaktiven Mitglieder. Also muss man doch jetzt beim Löschen einfach nur die IDs der inaktiven holen.
  8. Eine Tabelle stellt ja kein ER-Modell dar, da das R - also die Beziehungen - fehlen. Also ist dein ER-Modell nichts weiter, als die Darstellung einer einzigen Entität. Google Sheets ist ja auch keine Datenbankmanagementsystem, sondern ein Tabellenkalkulationsprogramm.
  9. Die Ausbildungsordnung sowie der Ausbildungsrahmenplan sind Bundesweit gültig. Das war schon immer so. Lediglich bei der Gestaltung Abschlussprüfungen hat (oder hatte?) BW eine Sonderwurst. Und ja, dies ist der aktuelle Ausbildungsrahmenplan. Sieht man auch in der Fußzeile: Die vorherige Ausbildungsordnung bzw. der vorherige Ausbildungsrahmenplan waren von 1997. Du siehst also, dass sich die Dinge nicht so schnell ändern.
  10. Weil Anzahl der Möglichkeiten nicht linear steigt, sondern exponentiell. 1 Stelle = 94^1 = 94 Möglichkeiten 2 Stellen = 94^2 = 8.836 Möglichkeiten 3 Stellen = 94^3 = 830.584 Möglichkeiten ...
  11. Für mich ist das eher ein Hinweis auf ASCII vs. Unicode. ASCII braucht pro Zeichen genau 1 Byte, während ein Zeichen in Unicode variabel groß sein kann. Wenn der Maximalwert ausgeschöpft werden soll, ließe sich das auch besser umschreiben, da die Angabe von 1 Byte überhaupt kein Sinn machen würde.
  12. Aber was möchtest du mit den Zahlen erreichen? Das ist doch nur eine Multiplikation. 1 * 15 = 15 2 * 15 = 30 3 * 15 = 45 ... Im Grunde reicht es doch, wenn du in der Waffe-Klasse den Multiplikator bereitstellst und dann den Wert ausrechnest: class Waffe { private const int _multiplikator = 15; public int Level { get; set; } public int Wert => Level * _multiplikator } var waffe = new Waffe(); waffe.Level = 3; Console.WriteLine(waffe.Wert); // Gibt 15 auf dem Bildschirm aus. Du musst schon schreiben, was der Computer machen soll. Von alleine passiert da nichts. Um es vielleicht anders darzustellen: var waffe = new Waffe(); waffe.Name = nameTextBox.Text; waffe.AbLevel = Convert.ToInt32(abLevelTextbox.Text); waffe.VNum = Convert.ToInt32(vNumTextbox.Text); // ... Natürlich ist dies nur eine vereinfachte Darstellung, da Fehler nicht behandelt werden. Auch würde man es professionell anders lösen aber ich möchte nicht zu viel Verwirrung stiften.
  13. Ich verstehe noch nicht so ganz, was das jetzt mit 15, 30, 45, ... zu tun hat. Da C# ja eine objektorientierte Sprache ist, würde man für die Werte eine Datenklasse schreiben und die Werte in eine Instanz dieser Klasse speichern. Die Instanz kann man dann ja der nächsten Form übergeben und die kann damit machen, was sie will. Wenn ich das richtig verstehe, dass soll im Bild 1 eine Waffe konfiguriert werden. Also hätte man eine Klasse namens "Waffe" und all ihre Eigenschaften würde man als Property implementieren: class Waffe { public string Name { get; set; } public int AbLevel {get; set; } public int VNum {get; set; } // ... } Um dann eine Instanz zu erzeugen schreibt man dann: var waffe = new Waffe(); waffe.Name = "Ultimative Waffe"; waffe.AbLevel = 100; waffe.VNum = 50; // ... Und das übergibst du dann später der nächsten Form. Wenn ich dich richtig verstanden haben sollte.
  14. Die Delegates sind ja keine Zauberei. Die sind lediglich nur eine Liste von Funktionszeigern. Eine Methode ist im Grunde ja auch nichts weiter als eine Referenz auf einen Speicherbereich. Ich verstehe aber immer noch nicht so ganz, wieso du dies löschen möchtest. Ich habe da nur ein Verdacht, wieso du das tun möchtest aber wenn ich richtig liege, dann muss ich dir sagen, dass die Delegates dafür nicht gedacht sind. Ich vermute mal, dass du die aufzurufenden Methoden per Multithreading abarbeiten möchtest und daher mehrere Instanzen von der Caller-Klasse erzeugst, die alle die gleichen Methodenaufrufe bekommen und du dann die herauslöschen möchtest, du dann schon aufgerufen wurden. Liege ich da richtig? Dafür sind Delegates aber nicht gedacht. Delegates werden einfach in einem Thread sequentiell abgearbeitet. Wenn du nebenläufige Aufgaben erledigen möchtest, gibt es die Klasse Task<T>, die solche darstellen und ausgeführt werden. Mit den Methoden Task.WhenAll() bzw. Task.WhenAny() kann man dann auf die Ergebnisse der Tasks warten: class Program { public static async Task Main(string[] args) { var tasks = new Task<(string, bool)>[] { new Task<(string, bool)>(() => { Console.WriteLine("Start Task 1"); Thread.Sleep(1000); Console.WriteLine("End Task 1"); return ("Task 1", true); }), new Task<(string, bool)>(() => { Console.WriteLine("Start Task 2"); Thread.Sleep(100); Console.WriteLine("End Task 2"); return ("Task 2", false); }) }; foreach (var task in tasks) task.Start(); foreach (var result in await Task.WhenAll(tasks)) Console.WriteLine($"{result.Item1} => {result.Item2}"); } } Das Threadhandling übernimmt dann die CLR bzw. das .NET Framework für uns. Dein Beispiel mit dem Bescheidsager und Ausführer lässt sich auch eleganter lösen, denn im Grunde ist dies das Decorator Pattern. Du schreibst ein Interface, was sowohl dein Bescheidsager, als auch dein Ausführer implementiert. Im Konstruktor vom Bescheidsager gibst du dann eine Instanz vom Ausführer mit, die dann nicht null sein darf. Dann sparst du dir auch dieses lästige if-then-else bei der Ausführung. interface IAusfuehrer { bool Ausfuehren(); } class Bescheidsager : IAusfuehrer { private readonly IAusfuehrer _ausfuehrer; public Bescheidsager(IAusfuehrer ausfuehrer) { _ausfuehrer = ausfuehrer ?? throw new ArgumentNullException(nameof(ausfuehrer)); } public bool Ausfuehren() { Console.WriteLine("Starte Methode"); return _ausfuehrer.Ausfuehren(); } } class Ausfuehrer : IAusfuehrer { public bool Ausfuehren() { Console.WriteLine("Ausfuehrer wird ausgeführt"); return true; } } class Program { public static void Main(string[] args) { var ausfuehrer = new Ausfuehrer(); var bescheidsager = new Bescheidsager(ausfuehrer); Console.WriteLine(bescheidsager.Ausfuehren()); } }
  15. Und woher weiß du, welches du entfernen möchtest? An irgendwas muss man ja das Objekt erkennen können. Sei es auch nur der Klassentyp. Dann muss man halt selber die Methode in der Invocationlist finden. Aber das ist doch recht verquirlt. Die sollen ja auch aus irgendeinen Grund entfernt werden. Wäre es dann nicht sinnvoller, bei der Registrierung zu prüfen, ob die Methode aufgerufen werden soll? Dann spart man sich das Entfernen und kann jede Methode einzeln steuern. Also sowas wie: if(...) c.DoAction + = ... if(...) c.DoAction + = ... if(...) c.DoAction + = ...
  16. Naja, man muss ja nicht unbedingt gleich ne Applikation bauen. Man kann auch unabhängig davon seine Programmiererskills erweitern, indem man sich z.B. Programmierprinzipien oder -Methoden anschaut. z.B. SOLID oder auch TDD lässt sich auch mit einfachen Aufgaben üben. Auf exercism.org gibt es auch einen PHP-Track. Das interessante an der Plattform ist halt, dass man auch Tipps von Mentoren holen kann.
  17. Puh, wo soll man da anfangen? Im Grunde ist da so ziemlich alles nicht richtig. Ich würde dir mal raten, mit dem Debugger zu arbeiten und dir mal Schritt für Schritt anschauen, was du falsch machst. Du rufst z.B. die Versuche()-Methode ja immer wieder neu auf und da deine Variable i eine lokale Variable ist, wird sie nach jedem Verlassen und Versuche() aus dem Speicher gelöst und beim Eintreten neu gesetzt. Außerdem hast du auch eine Rekursion gebaut, da Login() sich selbst aufruft. Wenn man etliche Male das Passwort falsch eingibt führt dies unweigerlich zu einer StackOverflow Exception. Zusätzlich wird in der Versuche()-Methode deine Eingabe doch überhaupt nicht überprüft. Du gibst dort ein Input vor und dieser entspricht dem Passwort. Der Code wird also nie die Variable i runterzählen.
  18. Das Type Name Handling fehlt. Die DeserializeObject()-Methode hat noch eine weitere Signatur, womit man eine Konfiguration mitgeben kann. In dieser Konfiguration muss man dann mitgeben, dass er das Type Name Handling aktivieren soll: var config = JsonConvert.DeserializeObject<Config>(configString, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects }); Erst dann erzeugt er das gewünschte Objekt. https://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm
  19. Präzisiere deine Frage. Welche Fehler?
  20. Wo soll das Geld auch herkommen? Im Grunde konkurrieren Agenturen ja mit den Webseiten-Baukästen. Da ist nicht mehr viel Geld zu holen. Die Agenturen machen nur noch das Design. Viel Programmierung wird da sowieso nicht stattfinden. Mehr als die Templates in PHP bauen, wird da wohl nicht passieren. Wenn die Agentur die Webseite dann noch betreiben soll, geben die meisten Agenturen es auch nur an einen Hoster weiter. Wenn man sich als Softwareentwickler weiterentwickeln möchte, sind Agenturen aus meiner Sicht eine schlechte Wahl.
  21. siehe Wikipedia: Also bei 6 HDDs mit jeweils 1 TB wäre die verfügbare Kapazität 1 TB. Was der Lehrer meint ist RAID 01. Also 3 HDDs gebündelt mit RAID 0 und diese wiederum werden über RAID 1 gespiegelt.
  22. So, wie du dir das denkst nicht. Nein. Man könnte aber dennoch einen Hashwert generieren und diesem einen Fingerabdruck zuordnen. Wenn der Scanner dann einen Fingerabdruck erkennt, wird dann der zuvor generierte Hashwert genommen. Dieser Hashwert wäre aber unabhängig vom Fingerabdruck. Ich kenne mich aber damit nicht aus. Man müsste ja irgendwie die Fingerabdruck- und die Metadaten speichern.
  23. Beim Fingerabdruckscanner wird aber kein Hashwert erzeugt, sondern es findet eine Mustererkennung statt.
  24. Die Sätze lauten: Alles ist ein Objekt Objekte kommunizieren durch das Senden und Empfangen von Nachrichten (welche aus Objekten bestehen) Objekte haben ihren eigenen Speicher (strukturiert als Objekte) Jedes Objekt ist die Instanz einer Klasse (welche ein Objekt sein muss) Die Klasse beinhaltet das Verhalten aller ihrer Instanzen (in der Form von Objekten in einer Programmliste) Der sechste Satz war mehr eine Eigenschaft von der Programmiersprache Smalltalk. Wie gesagt, Vererbung und Polymorphie gibt es auch in C. Mittels Polymorphie werden Treiber geschrieben, indem man den FILE-Struct als Schnittstelle betrachtet. Vererbung lässt sich realisieren, wenn man zwei Structs schreibt und deren Gemeinsamkeiten doppelt implementiert und in eine Reihenfolge bringt. So wurde auch auch die Einfachvererbung in C++ implementiert. Deswegen müssen in C++ auch in der Header-Datei die privaten Methoden und Felder definiert werden, damit der Compiler sie sortiert. Damit hat C++ sogar die Datenkapselung von C kaputtgemacht, da die Header-Datei private Dinge verrät. Somit ist auch die Datenkapselung nichts OOP-spezifisches. OOP hat lediglich nur Vererbung und Polymorphie vereinfacht. Der wahre Vorteil von OOP ist aber die Umkehr der Abhängigkeit. Erst mit OOP ist es möglich, Abhängigkeiten in eine Klasse reinzureichen. Dies ist mit prozeduralen Programmiersprachen nicht möglich gewesen, da die Abhängigkeiten zur Kompilierzeit bekannt sein müssen. Offenbar ja nicht. Sonst müsste man ja nicht so viel über Inversion of Control und Dependency Injection reden. Ich selber habe ja eine Assistentenausbildung gemacht. Die Schule ist integriert in einer FH und wir haben überwiegend die gleichen Vorlesungen besucht und Übungen gemacht, wie die FH-Studenten. Lediglich die Bewertung der Übungen und die Klausuren waren nicht ganz hart. Die FH genießt auch in Norddeutschland einen sehr guten Ruf. Ich kenne also die Inhalte eines FH-Studiums und ich bin der Meinung, dass man diese Inhalte auch gut in eine duale Ausbildung packen könnte. Dafür müsste aber die Ausbildung umstrukturiert werden, indem Betriebe das praktische lehren und Schulen tiefer in die Materie gehen. Also dass Schulen zeigen, z.B. wie Datenstrukturen funktionieren, Arten von Softwarearchitekturen, welche Probleme Nebenläufigkeiten haben können, etc. Das sind Themen, mit denen sich ein Entwickler täglich rumschlagen muss aber in der Ausbildung viel zu kurz kommt. Nein, hat es auch nicht. Ich finde aber auch die Frage nicht wirklich für relevant, da alle Sprachen für den Larifari-Unterricht an Schulen geeignet sind und eher dazu dient die Versäumnisse der Betriebe zu kompensieren. Vielmehr stelle ich den Sinn des derzeitigen Programmierunterricht an Berufschulen in Frage.
  25. Und was genau habt ihr da gemacht? Aber die Theorie von OOP ist doch sehr schnell erzählt. Das hat Alan Key in fünf bzw. sechs Sätzen geschafft aber der wahre Vorteil von OOP wird doch nie behandelt. Dann werden sie aber nicht richtig ausgebildet. Eine Schule sollte dann nicht die Versäumnisse der Betriebe kompensieren. Schule und Betrieb sollten sich eigentlich ergänzen. Ich bin der Überzeugung, dass eine duale Ausbildung ein FH-Studium ebenbürdig sein kann, wenn man die Ausbildung besser strukturieren und die Ausbildungsbetriebe mehr kontrollieren würde. Die IHK hat aber ein Interessenskonflikt, da die Betriebe Mitglieder der IHK sind und bei Problemen wird dann oft, zu gunsten der Betriebe, beide Augen zu gedrückt und dann kommt da eben so ein Murks raus.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...