Wie kann man auch ohne Abitur oder Fachhochschulreife eine Ausbildung zum Programmierer machen?


28.01.2020, 09:10

https://pastebin.com/29abbtnE?fbclid=IwAR0t9KcvdptDJ561RMMorOeAkkkiYy4inMINXi2VBFV8BClbEDHaPQtMlB0

Dieses Programm ist nicht perfekt und auch nicht besonders Ressourcenschonend. Trotzdem will ich es einmal als Beispiel für das was ich bisher kann hier einstellen.


29.01.2020, 12:19

https://pastebin.com/WHLSLKH4

Hier ist ein Beispiel für ein Programm an welchem ich zur Zeit schreibe. Es soll ein Menü erzeugt werden b.z.w. eine Steuerungs-TUI.

7 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Programmieren kann man sich selbst beibringen. Dazu gehört aber viel Disziplin. Viel Lesen und Probieren sind absolutes Muss.

Und dann wird es sein, dass du die falsche Sprache oder das falsche Thema gut kannst.

Programmieren ist so breit gestreut wie medizinische Themen. Du willst vom HNO Arzt sicher nicht am Knie operiert werden.

Fazit: es geht auch ohne, insbesondere in der freien Wirtschaft, aber der Weg ist dort vermutlich steiniger als über eine normale Ausbildung.

Tipp: viel lesen und probieren.

Aron5 
Fragesteller
 27.01.2020, 19:51

Ich versuche gerade programmieren zu lernen, merke aber dass eine Ausbildung besser wäre.

1
Senbu  27.01.2020, 20:21
@Aron5

Programmieren ist nicht das wichtigste. Das wissen wie das System läuft und andere allgemeine IT Kenntnisse werden sehr hilfreich sein. Jemand der auf der Tastatur Code eintippen kann aber nicht weiß wie sein System funktioniert ist auch nicht das wahre.

1
gogogo  27.01.2020, 20:26
@Senbu

Auf jeden Fall. Programmieren braucht sehr viel Hintergrundwissen.

0
Aron5 
Fragesteller
 27.01.2020, 21:47
@Senbu

Programmieren bedeutet ja auch dass man weiß wie Programme b.z.w Software funktioniert. Natürlich gibt es viele die nicht programmieren sondern nur Code eintippen können. Und wie das System funktioniert wissen sowieso viele nicht! Gerade wenn man nur hohe Programmiersprachen wie Java oder Python kann.

0
Senbu  27.01.2020, 22:47
@Aron5

Ich sage es mal wie mein Lehrer auf der FOS. Coden kann jeder, der es schafft Zeilen nach einer gewissen Syntax mit Wörter vollzukleistern. Programmieren hingegen können nicht alle und gut Programmieren noch weniger. Vereinfacht: kodieren ist einfach, programmieren ist schwer. Das merkt man, wenn man versucht bedeutendere Algorithmen zu entwickeln.

Ich meinte auch etwas Wissen über Datenbanken, Netzwerke, Protokolle, Standards/normierungen, Wissen wie Software in der Tiefe funktioniert, Erfahrung mit dem Betriebssystem(auch wie es funktioniert), uvm...

1
Lamanini  28.01.2020, 20:53

Ob man die „falsche“ Sprache kann ist egal, wenn man das Prinzip verstanden hat kann man andere Sprachen in ein paar Wochen lernen.

0
gogogo  28.01.2020, 21:59
@Lamanini

Jein, trotz guter C++ Kenntnisse habe ich für Java 5,5 Monate gebraucht, um auch die Ideen hinter der Sprache vollständig zu erfassen.

Zeit von bloody Beginner bis Oracle Prüfung für Java 6.

Da geht es um mehr als nur Syntaxunterschiede.

0
Lamanini  28.01.2020, 22:14
@gogogo

Wie oft hast du denn gelernt, und für wie lange so?

Und man muss nicht eine Sprache „vollständig“ erfassen, niemand kennt alles.

0
gogogo  29.01.2020, 07:04
@Lamanini

Täglich gut 2 Stunden.

Ein Kollege hatte mich wegen meiner schlechten LearningByDoing JavaKenntnisse mehrfach angegriffen. Er war der Guru.

Nach der Prüfung wa mein Wissen deutlich besser und er kommt nun bei Fragen auf mich zu.

Angriffe gab es nie wieder.

So einiges wie Destruktoren, unsigned Variablen und andere APIs machten die neue Sprache nicht so einfach.

Die Prüfung erforderte gut 65% vollständig richtige Antworten, alles andere als leicht. Aus Angst und Kosten habe ich gut gelernt. 90%.

1
Lamanini  29.01.2020, 16:43
@gogogo

Du hast unsigned in Java verwendet? Das gibt es da doch gar nicht? Und auch Destruktoren.

Und auch diese Konzepte kann man einfach mitnehmen in die nächste Sprache.

Im professionellen Umfeld ist alles so abstrakt aufgebaut, dass es definitiv nicht sprachengebunden ist. Ich hab zum Beispiel einen Job bekommen für eine Sprache, die ich zu dem Zeitpunkt nicht konnte. Einfach weil die Firma wusste, dass es vielmehr darum geht, dass du das Konzept verstanden hast. Eine neue Sprache lernst du in einem relativ kurzen Zeitraum, wenn du schon programmieren kannst.

0
gogogo  29.01.2020, 16:52
@Lamanini

Klar, Java habe ich erst später in der Firma gebraucht.

Du hast mich falsch verstanden. Ich wollte in Java gerne unsigned int und Destruktoren verwenden, die es ja nicht gibt. Also muss man umdenken in die neuen Konzepte.

0
Chaxda  11.02.2020, 19:06

Hab's vor vielen Jahren schonmal probiert Mit Java. Ernüchternd. Möchte aber irgendwann wieder in Angriff nehmen

1
gogogo  12.02.2020, 07:05
@Chaxda

Habe mir auch vor Jahren als Ziel gesetzt, Java zu können. Andere Programmiersprachen kannte ich schon.

Es gab damals eine Prüfung von Oracle zu Java6. Die ist hart, man muss den Stoff wirklich gut kennen.

Hatte dazu ein Buch auf Englisch, welches ich 5,5 Monate intensiv gelesen und geübt habe. Die Prüfung habe ich dann mit 90% bestanden.

Danach war ich bei der Arbeit Guru für Java6.

1

Das Niveau in der Softwareentwicklung ist verdammt niedrig bezogen auf das, was tatsächlich benötigt wird. Der Wunsch nach einer gewissen Grundbildung und die Auseinandersetzung mit gewissen Komplexitäten ist damit absolut verständlich.

Das Problem ist: Wenn schon Menschen mit hohem Bildungsgrad nicht in der Lage sind nach einer Ausbildung qualitätiv hochwertige Software zu entwickeln, dann werden es die anderen eher auch nicht schaffen, wobei man natürlich dort auch Ausnahmen hat.

Aber letzendlich geht es nicht um die Ausnahmen. Davon gibt es leider viel zu wenig als dass der Bedarf an fähigen Entwicklern gedeckt werden könnte.

Aber wenn du eine Ausnahme sein möchtest rate ich dir JETZT SOFORT mit dem Programmieren anzufangen. Je früher desto besser. Deine Programme könntest du zumindest als "Werkstück" vorweisen, womit du Interesse, Wille und bestimmte Fähigkeiten unter Beweis stellst.

Abitur oder FHS sind nicht notwendig um Programmierer zu werden. Aber verdammt hilfreich.

Aron5 
Fragesteller
 28.01.2020, 09:06

Wenn schon Menschen mit hohem Bildungsgrad nicht in der Lage sind nach einer Ausbildung qualitätiv hochwertige Software zu entwickeln, dann werden es die anderen eher auch nicht schaffen. Ja, das ist leider in allen Bereichen so und ich glaube das liegt auch u.A. daran wie der Stoff vermittelt wird. Wenn ich schon sehe dass mit studierten Physikern genausowenig anzufangen ist wie mit studierten Elektroingenieuren... Natürlich muss man auch selber etwas tun um das Ganze besser zu verstehen. Aber auch ich merke dass ich, trotz Vorwissen aus den Büchern, ich selber auf einmal vor einem großen Fragezeichen stehe wenn ich Aufgaben aus dem Internet lösen soll! Vielleicht stelle ich ja mal ein Codebeispiel hier rein.

1
apachy  29.01.2020, 06:59
Das Problem ist: Wenn schon Menschen mit hohem Bildungsgrad nicht in der Lage sind nach einer Ausbildung qualitätiv hochwertige Software zu entwickeln, dann werden es die anderen eher auch nicht schaffen, wobei man natürlich dort auch Ausnahmen hat.

Da kommen dann aber denke ich viele Sachen zusammen. In kaum einen Bereich liegen Erwartung und Realität soweit auseinander. Die meisten wachsen heute eben mit Windows und Rumgeklicke auf. Zocken Games und träumen davon Spieleentwickler zu werden und dass diese Tätigkeit dem eigentlichen Spielen nahe kommt.

Früher musste man sich mit dem Computer auseinander setzen und hatte eben nur die Kommandozeile. Konfigurationsdateien, Batchdateien usw. waren an der Tagesordnung.

Auch ist immer die Frage was gute Software ist. Den Kunden interessiert erstmal nur, dass sie funktioniert. Qualitätsunterschiede richten sich wohl eher daran, dass der Code für andere Entwickler geschrieben ist, im Sinne von Erweiterbarkeit und co.

Weiterer Punkt heute ist, dass wir zwar einen Bedarf haben an Entwicklern, viele aber für ein höheres Einstiegsgehalt studieren. Praktisch fehlt den Leuten dann aber für diese Stellen mehr als jemanden mit einer Ausbildung.

Da hat man dann im Betrieb einen M.Sc sitzen, ggf. noch mit Doktortitel, der zwar weiß wie ein Compiler aufgebaut ist aber keine brauchbare Software erstellen kann, was als Entwickler seine Aufgabe wäre.

Und dann ist Geld natürlich ein Thema, selbst wenn man Leute hat, die etwas auf den Kasten haben. Anforderungen die sich kurzfristig ändern, Notlösungen, der Rotstift des Kunden.

Am Ende gibt es gewollten Fusch, wo wir quasi den Term technical debt haben. Sprich Schulden aufnehmen, in Bezug auf Wartbarkeit, Erweiterbarkeit und Fehlerfreiheit für die Umsetzungsgeschwindigkeit. Problem an Schulden ist eben, dass man sie zurückzahlen muss, in dem Fall via Refactoring. Wird aber nicht gemacht, da einem das keiner bezahlt.

Wenn der Geschäftsführer entscheiden darf, ob man ein zusätzliches Projekt annimmt, damit den Umsatz hoch treibt und einen dicken Boni am Jahresende kriegt oder quasi umsonst seinen Mist aufräumt, dann ist die Entscheidung klar und das Problem wird eben immer schlimmer.

Eigentlich bräuchte es in der Software wie bei Maschinen bezahlte Wartungen und das nicht im Sinne von Betreuung und den aktuellen Code am laufen zu halten, sondern eben dem Zurückzahlen dieser Schulden mit Refactoring. Bei Maschinen werden auch Teile vorsorglich gewechselt, bevor sie ausfallen, bei Software fehlt dieser Aspekt leider.

Bildung sehe ich da gar nicht als so großes Problem. Wir haben in der Branche wesentlich größere Probleme, die schlechte Software begünstigen. Es ist schon gruselig was da verkauft wird und im Betrieb ist, gerade im Enterprisebereich, obwohl die Software dann gerne sechsstellige Summen kostet, ist sie von der Qualität deutlich schlechter als die Arbeit eines 14 jährigen Hobbyprogrammierers.

2
Aron5 
Fragesteller
 29.01.2020, 13:59
@apachy

Ja, das muss man sich mal vorstellen. Dass man so herumschlampt während im Open Source-Bereich teilweise Besseres zu finden ist.

0

Naja, ich kann die Unternehmen verstehen. Früher hat in der Regel ein Hauptschul- oder ein Realschulabschluss ausgereicht, das Niveau ist in den letzten 20 Jahren jedoch so massiv gesunken, dass ich auch nur noch Azubis mit mindestens Fachabi einstelle. Die Erfahrung hat gezeigt, dass Azubis mit der mittleren Reife zu große Probleme in der Berufsschule haben, da enorme Wissenslücken bestehen.

Im Endeffekt bleibt dir nichts anderes übrig als weiter zu suchen bis Du einen Betrieb gefunden hast der kein Fachabi oder Abi voraussetzt. Alternativ wäre es halt gut, wenn Du schon Programmierkentnisse hättest, das macht dann oftmals einen zu geringen Schulabschluss wett. Oder Du machst die Schule weiter bis zum Fachabi.

Visal761  27.01.2020, 19:15

Es gibt durchaus Auszubildende, welche die Ausbildung auch mit der mittleren Reife schaffen. Es ist viel mehr eine Frage des Engagements, sich hinzusetzen und zu lernen. Den Inhalt verstehen wollen - da sehe ich das Problem.

Viele Auszubildende, welche ich bisher mitbetreut habe, hatten schlichtweg kein Interesse daran, Leistung zu zeigen und sich mit dem Inhalt zu beschäftigen.

Daher bin ich davon überzeugt, dass ich motivierter Realschulabsolvent besser geeignet ist als ein mäßig motivierter Abiturient.

2
Messkreisfehler  27.01.2020, 19:17
@Visal761

Da geb ich dir voll und ganz Recht. Natürlich gibt es auch Realschüler die die Ausbildung schaffen würden. Ich hatte jedoch jetzt schon mehrfach das Pech an Azubis zu gelangen die es mit der mittleren Reife nicht geschafft haben, der letzte hat es dann mit Nachhilfe im 3. und letzten Anlauf geschafft. Als ich dann auf Fachabi als Mindestvoraussetzung umgeschwenkt bin, hatte ich zumindest keinen mehr dabei der eine Prüfung 2 mal wiederholen musste.

4
Aron5 
Fragesteller
 27.01.2020, 19:53

Ja, das Niveau ist leider wirklich gesunken weil die Kultusministerien es verbockt haben den Unterricht zu verbessern. Außerdem fehlt überall Geld und Personal für Schulen.

2

Die Ausbildung zum Fachinformatiker/Systementwicklung geht auch ohne Abi o.ä. Meine Firma bildet entsprechend aus. Und es mir piepschnurzegal, was der Abschluss ist. Was mich interessiert ist: a) was kannst Du, b) bist Du psychisch stabil, „normal“ und keine Sozialaufgabe, c) findest Du Deinen Platz in der Firma und bringst mehr als Du kostest.

Das klingt kapitalistisch, aber anders geht es nicht. Ab und zu kann man auch jemand mittragen. Doch die Firma überlebt nicht, wenn sie nicht profitabel ist. Und ich persönlich habe keine Zeit, Händchen zu halten.

Versetze Dich in die Position eines Unternehmers: wann würdest Du Dich selber einstellen?

Aron5 
Fragesteller
 28.01.2020, 21:56

Die Position eines Unternehmers kann ich gut nachvollziehen. Schließlich ist es heutzutage schwer eine Firma zu führen, mit allen Problemen, Aufgaben und Konsequenzen die das Ganze sowohl rein wirtschaftlich als auch vom Personal her nach sich zieht. Aber "...bringst mehr als Du kostest..." ist mitunter auch die falsche Einstellung die dazu geführt hat dass Firmen immer weniger Leute finden die für sie arbeiten wollen. Das ist quasi wieder das andere Extrem. Klar soll jemand nicht mehr kosten als er einbringt. Aber man darf auch qualifizierte Leute, oder solche die sich qualifizieren wollen und engagiert sind nicht mit dauerhaften Niedriglöhnen abspeisen! Das wird vielen Firmen hier in Deutschland noch eines Tages mega sauer aufstoßen wenn sie dann erst recht spät merken wie sie sich ihr eigenes Grab schaufeln. Soll jetzt nicht hißen dass die oben genannte Firma so läuft, sondern es ist ein Phänomen dass ich aus eigener Erfahrung kenne. Viele bieten keine Qualität mehr an, sondern leben nur noch nach dem Prinzip "besser es läuft scheiße als garnicht". Überall wird versucht den Laden mit Leiharbeitern am Laufen zu halten.

0
segler1968  29.01.2020, 02:11
@Aron5

Die eine Frage ist, ob jemand engagiert ist. Also ob er sich weiterqualifizieren möchte. Die andere Frage ist, ob er das ausreichend schafft. Aus Deiner Sicht finden die Firmen immer weniger Menschen, die für sie arbeiten wollen. Das ist richtig, denn wir haben praktisch Vollbeschäftigung. Es gibt riesige Nachfrage, aber schlichtweg kein Angebot mehr.

Das Problem mit den meisten meiner Praktikanten ist, dass ich ihnen nicht zutraue, dass sie leistungsfähig werden. Da gibt es viele Träumer, aber wenig Könner. Die haben schon fast alle einen Job. Motivation alleine reicht eben nicht aus.

1

Indem man sich bewirbt, beim Vorstellungsgespräch und ggf. Probearbeiten, Einstellungstests, Assessment-Center etc. überzeugt. Man sieht zumindest recht viele Ausschreibungen, bei denen es auch ein guter Realschulabschluss tut. Und auch falls nicht - einfach bewerben, mehr als "nein" sagen kann die Firma nicht, und wenn man seine Arbeitsproben irgendwie vermarkten kann (z.B. über einen github-Account), dann kann man auch so reinkommen. Oder du fragst erstmal nach einem Praktikum.

Dein Programm hat aber noch so einige Kinken, das würde ich nicht unbedingt in eine Bewerbung packen.... was mir da spontan auffällt:

if(radicand > 10000000){

die 10000000 ist 'ne Magic Number. Wo kommt die her und warum ist das keine Konstante mit einem sprechenden Namen?

system("clear");

System-Aufrufe sind nicht betriebssystemunabhängig. "clear" etwa dürfte unter Windows nicht funktionieren, weil es das Kommando da nicht gibt (denn dort heißt es "cls".)

double radicand, start, quotient, next_value, precision, result;

Bist du sicher, dass diese Variablen alle vom Typ double sein müssen? Oder könnte es sein, dass es hier und da auch ein integer tun würde? Zum Beispiel bei precision und radicand.

for(precision = 1; precision <= max; precision++){

Es wäre geläufiger, die Variable bei 0 loslaufen zu lassen.

if(precision == max){

Vergleiche von Fließkommazahlen mit "==" sind kritisch, weil gleiche Zahlen binär in Berechnungen unterschiedlich gespeichert werden könnten. https://www.reddit.com/r/C_Programming/comments/4thsn7/comparing_doubles_in_c/

Du nutzt keine Funktionen, sondern hast die komplette Funktionalität in der main-Methode.

Aron5 
Fragesteller
 28.01.2020, 21:43

Vielen Dank für deine Antwort. Das hat mir weiter geholfen! Das mit der 10^6 ist wegen der begrenzten Aufnahmefähigkeit der Forschleife. Die bricht bei höheren Zahlen zusammen und bringt das Programm zum Absturz. Daher meinte ich auch dass es nicht sehr ressourcenschonend ist. Das mit der Betriebssystemabhängigkeit weiß ich und das lässt sich auch m.W. nach nicht ändern, da muss man dann entsprechend anpassen. Oder man definiert ein Makro welches das testet und entsprechend aktiviert was gebraucht wird, aber da kenne ich mich noch nicht so gut mit aus. Double war nötig, leider. Anders geschrieben wäre das sicher nicht notwendig, aber ich weiß es halt im Moment nicht besser. Die Methode von Carmack ist wohl am schnellsten aber da weiß ich nicht wie man die auf höhere Dimensionen anwendet! Das mit dem Vergleich durch == habe ich schon selber gemerkt gestern! Das ist eine unlösbare/nicht ausführbare Anweisung. Man kann die Werte niemals erreichen und dementsrpechend fängt es an oder hört niemals auf. Wie man das besser schreiben kann, ohne dass die Lesbarkeit verloren geht, es soll ja auch nicht zu kryptisch werden, weiß ich auch nicht. Aus Büchern lernt man da nicht so viel. Wie sagt Eskil Steenberg: you don't learn by writing code, but by implementing software.

0
bluebird5  28.01.2020, 22:07
@Aron5
Das mit der 10^6 ist wegen der begrenzten Aufnahmefähigkeit der Forschleife. Die bricht bei höheren Zahlen zusammen und bringt das Programm zum Absturz.

Es geht mir eigentlich eher darum, dass die ZUahl nicht einfach so im Raum stehen sollte, sondern z.B. mit

const int maxValue = 1000000;

definiert sein sollte (die Syntax ist ungetestet, hab ewig kein C programmiert)

 Das mit der Betriebssystemabhängigkeit weiß ich und das lässt sich auch m.W. nach nicht ändern, da muss man dann entsprechend anpassen.

Auf das clear-Screen würde ich dann ganz drauf verzichten, aber es ist gut, dass du das weißt.

Double war nötig, leider.

Glaub ich nicht. Wahrscheinlich sind das Problem Berechnungen wie

next_value = ((quotient + 2 * start) / 3);

, wobei die 2 und die 3 als Integer interpretiert werden und dadurch das ganze Ergebnis zum Integer wird. Probier mal

next_value = ((quotient + 2.0 * start) / 3.0);

und das konsequent in allen Berechnungen im Programm.

 Das mit dem Vergleich durch == habe ich schon selber gemerkt gestern! Das ist eine unlösbare/nicht ausführbare Anweisung.

Das würde ich so https://stackoverflow.com/a/3988883 lösen. Mit fabs, wie in dem Kommentar angemerkt.

Aus Büchern lernt man da nicht so viel. Wie sagt Eskil Steenberg: you don't learn by writing code, but by implementing software.

Joa, teils, teils. Die Bücher geben halt eine Grundlage, wie man den Code schreiben könnte. Wenn man sich seinen Code nur aus dem Internet zusammenklaut, dann implementiert man auch irgendwie Software, gewöhnt sich aber schlechte Angewohnheiten an.

Übrigens viel Erfolg beim Bewerben, fachlich hast du ja durchaus schon ein wenig auf dem Kasten, das musst du nun nur noch irgendwie zeigen.

0
Aron5 
Fragesteller
 28.01.2020, 22:17
@bluebird5

Vielen Dank für die Infos! Das mit den Punkten werde ich noch mal ausprobieren. Übrigens das mit der 10^6 habe ich nachher kommentiert so dass man es sehen kann. Aber eigentlich war das eher behelfsmäßig und eigentlich sollte man die Schleifeniteration wohl eher ganz meiden. Jeder Speicherzugriff kostet Zeit und wenn ich einen Algorithmus finde der sparsamer mit dem Speicher umgeht, ähnlich wie Carmacks Inverted Square Root, würde ich diesen nutzen.

0