Wie schwer ist programmieren?

...komplette Frage anzeigen

5 Antworten

Programmieren ist eine Frage des Trainings. Bei mir war die größte Hürde am Ball zu bleiben und mich immer weiter dazu zu motivieren. Ich denke auch wenn man höhere Mathematik nicht spielend leicht versteht kann man gute Programme schreiben. Man sollte aber ein gewisses logisches Verständnis mitbringen um beispielsweise Algorythmen zu verstehen.

Wenn hierbei von Algorithmen die Rede ist meint man in etwa soetwas: https://de.wikipedia.org/wiki/Bubblesort

Bei diesen Algorithmus werden die Zahlen nach größe sortiert. Dabei wird immer die linke Zahl mit der Rechten verglichen und wenn nötig getauscht. Das ist einer der einfachsten Algorithmen, aber mit soetwas musst du dich in etwa herumschlagen.

Es ist es auf jedenfall Wert und bisher hab ich nur wenige (äußerst dumme) Menschen gesehen denen ich es von der logik her nicht zutrauen würde sich programmieren anzueignen.

Okay, vielen Dank. Wozu braucht man so einen Algorythmus?

0
@Ichmagdichsarah

Nun ja, Algorithmen sind logische Vorgehensweisen. Man benötigt sie in einfachsten Fällen um zB deine Dateien nach Namen zu sortieren (Bubblesort) und in komplexeren Fällen zB um zu berechnen wie man mit geringsten Widerstand durch die Erdkruste an seine Ölquelle kommt oder wie man aus einem Labyrinth herauskommt. Man muss dabei verstehen das Computer nur nach einen bestimmten Plan arbeiten können, während Mensch meist ihre Erfahrungen nutzen um zum Ziel zu kommen. Darauf bauen meistens Algorithmen auf.

War das in etwa verständlich erklärt? Weiß nicht genau wie man soetwas am besten beschreibt. :)

0

Ja, das war verständlich, danke :)

0

Bitte glaube mir: Schwierige Mathematik braucht man zum Programmieren nun wirklich nicht.

Es ist also kein Wunder, dass du noch nicht auf sie gestoßen bist.

Die mit Abstand schwierigste Teilaufgabe des Programmierens besteht darin, unbeabsichtigt gemachte Fehler aller Art finden zu müssen (sog. Debugging).

Dies zu erleichtern, muss man lernen, den eigenen Programmen gewisse Struktur zu geben, die notwendig sein kann, gewisse Fehler schnell zu lokalisieren.

Ansonsten ist noch wichtig:

Jedes Programm ist dazu da, ein gewisses Problem mit seiner Hilfe schnell zu lösen. Damit muss, wer dieses Programm zu schreiben hat, natürlich erst mal die anwendungstechnische Seite, insbesondere das zu lösende Problem, verstanden haben.

Daraus folgt: 

  • Ist das Problem mathematischer Art, muss man natürlich was von Mathematik verstehen.
  • In jedem anderen Fall, muss man so gut wie nichts von Mathematik verstehen.
0

TDD und das Debugging wird um ein Vielfaches kürzer und einfacher. :D

0
@rmnstr

Das ist -- meiner Erfahrung nach -- nur in kleinem Ausmaß richtig. 

Aber ganz sicher helfen vorhandene Unit Tests, neu in den Code gekommene Fehler frühest möglich gewahr zu werden.

0
@grtgrt

Man muss es halt schon auch richtig machen.

Erstens sind Unit Tests nur ein Teil von TDD (Unit Tests, Component Tests, Integration Tests, System Tests, Exploration Tests).

Zweitens sollte man zuerst den Test schreiben und danach den Production Code. (das Interface kann dann beispielsweise mit der IDE automatisch generiert werden)

Also immer erst den Test schreiben, dann den Production Code, der genau diesen Testcase abhandelt. Somit kannst du immer sicher sein, dass sämtlicher Production Code funktioniert. Und wenn mal plötzlich ein Test fehlschlägt, weiß man genau, was man davor gemacht hat. Ob das nun das Hinzufügen neuer Funktionalität war oder ein einfaches Refactoring ist ganz egal.

Natürlich sollte im Idealfall TDD von Anfang an gemacht werden. Bei einer Codebase von 200.000 LOC damit anzufangen, wird schwierig und kann es Monate dauern, bis man eine vernünftige Code Coverage erreicht hat.

0
@rmnstr

Ich weiß, was du meinst. 

So vorzugehen setzt aber voraus, dass du vorher eine sehr konkrete, genaue Schnittstellenspezifikation erstellt (oder vorgegeben bekommen) hast. 

In keinem der vielen Projekte, an denen ich beteiligt war, hatte man derart detaillierte Spezifikationen. Selbst dann nicht, wenn vorher wirklich ausführliche Dokumente der Art "System Architecture" und "Component Specification" entstanden waren. 

Bis hinunter zu Klassenentwurf oder gar konkreten Parameterlisten der Klassen-Methoden haben diese Papiere nie gereicht. Aus gutem Grunde: Je mehr Details ein Entwurfspapier enthält, desto schneller wird es überholt sein - also gar nichts mehr nützen (da dann niemand es mehr liest).

Und speziell heute, im Zeitalter von "Agile", wird selbst solche Dokumentation noch reduziert ...

Es bleibt deswegen auch jedem Programmierer selbst überlassen, wie viel Unit Tests er schreibt. Nur wenige schreiben überhaupt welche ...

Sie arbeiten ja stets unter Termin- und Kostendruck, werden also nur welche schreiben, die ihnen selbst helfen (dass sie auch den Kollegen helfen oder gar die Wartbarkeit der entstehenden Software erhöhen würden, ist de-facto für kaum noch jemand interessant).


0
@grtgrt

Ich habe die Erfahrung gemacht, dass eine detaillierte Spezifikation des Features ausreichend ist.

Die Implementierung wird dann beim Tasking/Designing des jeweiligen Sprints (wenn wir schon bei Agile sind) vom Team geplant und vom zuständigen Entwickler dann noch eventuell ein wenig umgeändert.

Agile Entwicklung hat als oberstes Ziel ja die Einhaltung der Termine. Im Notfall muss man dabei eben Features vom nächsten Release streichen.

Entwickler, die keinen Wert auf Wartbarkeit und Dokumentation legen, sind meiner Meinung nach keine guten Entwickler. Immer schön aufregen, wenn man mit schlechtem Code von anderen Entwicklern arbeiten muss, aber selbst auch nichts besseres produzieren. ;)

Auf lange Sicht verringert TDD übrigens Zeit und somit auch Kosten der Entwicklung. Viele kleinere Unternehmen können sich diesen Luxus nur nicht leisten, weil manche Kunden sehr früh Prototypen verlangen.

0
@rmnstr

Was du hier sagst, ist absolut richtig.

0

Mathe und Statistik gehört nunmal zur Informatik dazu... Wenn du vorhast zu studieren oder eine ausbildung zu machen, wirst du zuerst mit Mathe & Statistik konfrontiert... Nebenbei beginnt man auch mit den Basics der Programmierung... Variablen deklarieren, If-else, while, loops etc das sind wirklich die Themen für Anfänger... Wenn du eine Empfehlung für die nächsten Themen suchst für C++ die du durcharbeiten kannst:

  • Arrays
  • Strings
  • Klassen & abstrakte Klassen
  • Operatoren
  • Vererbung & mehrfache Vererbung
  • virtuelle Methoden
  • Strings
  • Exceptions
  • ...

Das wären so die nächsten Themen die man für C++ beherschen sollte... Danach kannst du auch mit anderen Programmiersprachen anfangen (Java & co)
Gruß....

Danke! C++ habe ich wie gesagt nur mal angefangen, aber schnell wieder abgebrochen, da ich mich doch der Webentwicklung zuerst zuwenden wollte :)

0
@Ichmagdichsarah

Wenn du mit html und php anfängst, kannst du dich auch etwas mit Datenbanken beschäftigen (MySQL etc.) ... Auf die Webentwicklung kannst du auch noch das Webdesign aufbauen... Bedeutet Bildbearbeitung, Textbearbeitung, Gestaltungprinzipien, Barrierefreiheit, ... 

0

Die Strings sind sogar so wichtig, dass sie zwei mal in der Liste auftauchen...

0
@qwdfgosmd

Ja mein Fehler :D Anstatt Input Output Stream habe ich Strings zweimal geschrieben... Wobei alles ist wichtig wenn man später sich daamit beschäftigen will...

0

MySql kann ich auch schon :) Mit Bildbearbeitung arbeite ich auch viel, hab aber nicht gerade spitzen Programme...

0

Kommt doch darauf an, was du programmierst. In vielen Dingen brauchst du überhaupt kein Mathe. Programmierst du eine 3D-Engine, dann kommst du ohne lineare Algebra wahrscheinlich nicht sehr weit. In anderen Sachen brauchst du vielleicht Kombinatorik. Das hatte ich zum Beispel mal. Und in wieder anderen Bereichen brauchst du vielleicht Kenntnisse in Physik oder Elektrotechnik. Es hängt halt immer von der Software ab. Die kann viel Fachwissen erfordern. Allerdings liegt die Komplexität ja dann nicht in der Programmierung. Wenn Mathe nicht so dein Fall ist, dann programmiere halt Dinge, wo man nicht so viel Mathe braucht. Für Web-Entwicklung spielt es nicht so die Rolle, wie du ja selbst schon gemerkt hast. Wo ist also das Problem? Willst du es allerdings lernen, dann musst du es halt tun. Es gibt aber dann nicht DAS Mathe für Programmierung. Je nach dem, was du tun willst, könntest du alles mögliche an Mathe benötigen.

Genau 4g schwer

Was möchtest Du wissen?