# Problem Programmieren



## HolgerB (21. Feb 2008)

Hallo,

derzeit mache ich eine Umschulung zum FISI und in dieser Ausbildung ist Programmierung dabei. Java, PHP und SQL sind die Sprachen die wir beigebracht bekommen haben.

Mein Problem ist, dass ich die Programmierlogik nicht hin bekomme. Ich möchte gerne aus Eigeninteresse Programmieren können aber der Knoten im Kopf will nicht platzen. Die Syntax ist nicht das Problem, nur das programmieren an sich.

Bin ich mit 33 schon zu alt um programmieren zu lernen?

Habt ihr eventuell Tipps für mich?

Grüße
Holger


----------



## 0x7F800000 (21. Feb 2008)

> 33 schon zu alt um programmieren zu lernen?


das kann ich leider absolut nicht beurteilen...

Aber was ist denn konkret dein Problem mit der Programmierung? 
Hast du allgemein Schwierigkeiten irgendwelche Algorithmen auszuformulieren oder nachzuvollziehen?
Hast du Schwierigkeiten Überblick zu behalten, wenn die Projekte zu umfangreich werden?
Hast du Probleme damit, überhaupt grob zu umreissen, was zur Lösung eines Problems notwendig ist, 
oder ist es eher so, dass du dir im großen und ganzen gut vorstellst was zu tun ist, dann aber bei der konkreten Umsetzung nicht weiterkommst?

Ich meine: wenn Eigeninteresse vorhanden ist, dann müsste man einfach nur möglichst viel Üben, und vor allem bereits fertiggestellte Projekte kritisch betrachten, und nach Verbesserungsmöglichkeiten suchen...


----------



## HolgerB (21. Feb 2008)

Hallo Andrey,



> Aber was ist denn konkret dein Problem mit der Programmierung?
> Hast du allgemein Schwierigkeiten irgendwelche Algorithmen auszuformulieren oder nachzuvollziehen?



Ja. Zum Beispiel Fakultät, eigentlich einfach nur das in einen Algorithmus umsetzen...



> Hast du Schwierigkeiten Überblick zu behalten, wenn die Projekte zu umfangreich werden?



Ja, oftmals verliere ich tatsächlich den Überblick und verstehe die Zusammenhänge nicht mehr die ich selbst geschrieben habe.



> oder ist es eher so, dass du dir im großen und ganzen gut vorstellst was zu tun ist, dann aber bei der konkreten Umsetzung nicht weiterkommst?



Ich denke das trifft den Nagel auf den Kopf.

Grüße
Holger


----------



## 0x7F800000 (21. Feb 2008)

HolgerB hat gesagt.:
			
		

> Ja. Zum Beispiel Fakultät, eigentlich einfach nur das in einen Algorithmus umsetzen...


nun gut, das hat jetzt meiner meinung nach eher weniger mit Programmierung, sondern eher mit Mathe zu tun. Aber bei allen solchen mathematischen sachen ist es immer praktisch, erstmal mit bleistift einige beispiele nachzurechnen, um sich wirklich klar zu machen, was man dem rechner eigentlich beibringen will... Bei der Fakultät ist es jetzt keine allzu riesige Rechnung:


```
n! =  1*2*3*...*(n-2)*(n-1)*n = Produkt[k=1,n,k]
```
in diesem falle braucht man sich keine algorithmen auszudenken, sondern kann direkt die Mathematische Definition praktisch 1:1 übernehmen:

```
long factorial(long n){
    int result=1;
    for(int k=1; k<=n; k++){
        result*=k;
    }
    return result;
}
```
bist du dir sicher, dass es mit der Programmierung zu tun hat, und nicht zB daran liegt, dass du dich vielleicht mit Mathe nicht wirklich anfreunden kannst, soll auch vorkommen...  :?: 



> Ja, oftmals verliere ich tatsächlich den Überblick und verstehe die Zusammenhänge nicht mehr die ich selbst geschrieben habe.



Hm, vielleicht hilft da eine Tafel, oder Pinwand, wo das gesamte Projekt UML-ähnlich dargestellt wird? Also, nicht für eine halbe stunde, sondern dass es wochenlang auf der wand immer vor den augen rumhängt, und alle momentane änderungen wiederspiegelt. Ich hab mir auch schon überlegt, ob ich mir so eine echte Tafel für zuhause kaufe, wäre eigentlich ziemlich praktisch   



> > oder ist es eher so, dass du dir im großen und ganzen gut vorstellst was zu tun ist, dann aber bei der konkreten Umsetzung nicht weiterkommst?
> 
> 
> 
> Ich denke das trifft den Nagel auf den Kopf.



na, das hört sich doch schon recht ermutigend an, die techniken für die konkrete Umsetzung kann man sich durch viele kleinere Übungen mit der zeit aneignen, und diese dann einfach in immer größeren Projekten anwenden. Besser als wenn man einfach nur verloren rumsitzt und nicht weiß wo man überhaupt anfangen soll und wo man hin will...


----------



## Jango (22. Feb 2008)

HolgerB hat gesagt.:
			
		

> Mein Problem ist, dass ich die Programmierlogik nicht hin bekomme.


Logik (logisches Denken) spielt in der Programmierung eine Schlüsselrolle und sollte schon von der Schulzeit her vorhanden sein. Das Gleiche gilt für Mathematik. Gibt es da erhebliche Defizite, beschäftigt man sich besser mit etwas Anderem. 
Harte Worte, aber ehrlich.  :wink:


----------



## foobar (22. Feb 2008)

> Bin ich mit 33 schon zu alt um programmieren zu lernen?


Mach dir keinen Kopf das wird schon werden. Programmieren lernt man nicht an nem Wochenende. Wenn man etwas wirklich will, dann schafft man es auch egal wie alt oder was auch immer.


----------



## HolgerB (22. Feb 2008)

Hi,

vielen Dank für eure Antworten.

In der Tat bin ich nicht so der Mathe Freund, mag aber daran liegen das ich schon ein paar Tage aus der Schule raus bin. :roll: 

Der UML-Tipp ist nicht schlecht. Meine Dozenten raten immer dazu, bevor man überhaupt anfängt sich Gedanken zu machen was man will und dieses grafisch (UML etc.) darzustellen und bei Algorithmen einen "Schreibtisch-Test" durchzuführen usw.. Bisher habe ich das nur als unnötige Arbeit angesehen. Ich denke das muss ich ändern.

Diese Lektion muss ich nun umsetzen.

Thx, 
Holger


----------



## 0x7F800000 (22. Feb 2008)

HolgerB hat gesagt.:
			
		

> In der Tat bin ich nicht so der Mathe Freund, mag aber daran liegen das ich schon ein paar Tage aus der Schule raus bin. :roll:



In der Schule macht man IMHO ja auch kaum "Mathematik", sondern betreibt irgendwie Anwendung der Grundrechenarten auf Alltagsprobleme... :roll: Aus meiner Sicht habe ich in der Schule absolut nichts von Mathematik gehört, ich war da absolut nicht in der Lage, alles herzuleiten und zu begründen, warum ich eigentlich das tun darf, was ich da die ganze Zeit gemacht habe...  (Kann ich im Moment zwar auch nicht, aber wenigstens habe ich schlechtes Gewissen deswegen  :wink: )

Da wundert es mich nicht sonderlich, dass dieses ganze Wissen eine äußerst kurze Halbwertszeit hat, weil es eben nie wirklich verstanden, sondern nur antrainiert wurde...

Wie wörs mit 'nem Semesterchen Mathe :### ? Schaden würds wohl nicht...

...

Aber eigentlich find ich es auch nicht unbedingt erforderlich, viel Mathe-Hintergrundwissen zu haben, um ordentlich Programmieren zu können (hängt natürlich vom einsatzgebiet ab: wenn du irgendwann mal Physik-Engines für Egoshooter schreiben willst, wäre das wohl nicht verkehrt, aber bei solchen Netzwerkprogrammierungs-sachen ist ein guter Überblick meiner Meinung nach wesentlich wichtiger als Mathe...)


----------



## Vicky (29. Jun 2011)

Hallo Leute, 

ich muss eine Studienarbeit in Programmierung machen. Dazu habe ich mir überlegt, das Kartenspiel Halli Galli zu programmieren (Früchtekarten und Hotelglocke). Ich hab einfach überhaupt keine Ahnung, wie ich anfangen soll und bin echt am verzweifeln =(

Das Kartenspiel funktioniert folgendermaßen: 
Die Karten werden unter den Mitspielern aufgeteilt, die Fruchtseite verdreckt auf dem Tisch. Dann beginnt einer nach dem anderen eine Karte aufzudecken. Das geht solang, bis von einer Fruchtsorte 5 offen auf dem Tisch liegen, dann wird auf die Glocke, die in der Mitte der Spieler steht, "gehauen". Der, der als erstes geklingelt hat, bekommt alle karten, die offen da liegen. Diese Karten legt er unter seinen Stapel. Dann beginnt es wieder von vorne. Gewonnen hat der, der am Schluss alle Karten besitzt.
Als programmierte Version hätte ich mir das so vorgestellt:
- 30 Spielkarten (3 Fruchtsorten)
- das Spiel wird zu zweit gespielt und beide bekommen eine Taste, mit der Sie Karten "rauslegen" können und eine Taste, mit der sie drücken können, wenn insgesamt 5 gleiche Früchte zu sehen sind. 


Ich weiß nicht, wie ich das anpacken soll....


----------



## Marcinek (29. Jun 2011)

Mach lieber eine kaufmänische Anwendung, wie einen Shop oder eine DVD Verwaltung.


----------



## Andi_CH (29. Jun 2011)

Und das soll jemand lösen der nicht einmal weiss wie man ein banales Kartenspiel programmiert ???:L

Mein Vorschlag ist, dass du (TO, nicht Marcinek  ) dich erst einmal um einen Entwicklungsprozess und UML kümmerst, dann dein Problem (ob es nun ein gaga-Spiel oder was auch immer ist) analysierst, designest und dann die gefunden Klassen in Java umsetzt.

Ich weiss ja nicht was bei euch "Studienarbeit" bedeutet, aber mindestens bei uns werden die als Abschluss eines bestimmten Studienteiles geschrieben und dann kann man von den Studenten erwarten, dass die in etwa wissen wie man so etwas anpackt. Ich rate mal wild drauflos - die Dozenten waren unfähig? Na ja, es mag solche geben, aber es kommt viel öfter vor, dass die Studenten in den Vorlesungen sizten, meinen sie hätten etwas begriffen und dann den Anschluss verpassen.

Geh doch deine Unterlagen durch und du wirst sicher etwas finden.


----------



## Landei (29. Jun 2011)

@Vicky: Bevor du weitermachst musst du erst einmal die Frage klären, wer die "Mitspieler" sein sollen, denn Multi- und Single-Player-Spiele unterscheiden sich ganz grundsätzlich. Willst du mehrere menschliche Mitspieler, lässt sich das kaum ordentlich auf einem Rechner umsetzen, das heißt du brauchst eine Client-Server- (bzw. Peer-to-Peer-) Architektur. Reichen Computergegener aus, musst du denen natürlich künstliche Intelligenz ("KI" oder englisch "AI") spendieren, was sich aber für dieses Spiel nicht besonders schwer anhört.

Willst du beides (Client-Server-Architektur und KI) umgehen, solltest du statt einem Echtzeit- ein rundenbasiertes Spiel in Betracht ziehen, da sich das auch für mehrere Spieler an einem Rechner gut umsetzen lässt (solange alle Informationen "offen" liegen wie bei Brettspielen, sonst hat man das Problem mit dem "in die Karten gucken").


----------



## Andi_CH (29. Jun 2011)

HolgerB hat gesagt.:


> Der UML-Tipp ist nicht schlecht. Meine Dozenten raten immer dazu, bevor man überhaupt anfängt sich Gedanken zu machen was man will und dieses grafisch (UML etc.) darzustellen und bei Algorithmen einen "Schreibtisch-Test" durchzuführen usw.. Bisher habe ich das nur als unnötige Arbeit angesehen. Ich denke das muss ich ändern.



Das ist nicht ganz richtig formuliert. Du verwendest UML um deine Gedanken darzustellen - sie zu ordnen, den Überblick zu bewahren.
Sobald du dich in den Code vertiefst, ist es nur noch mit viel Übung möglich, den Überblick zu bewahren.

Erst schreibt man auf WAS das Programm machen soll (vielleicht auch, was es nicht macht) auf keinen Fall kümmert man sich m das WIE. Es ist sogar noch irrelevant in welcher Sprache das später implementiert wird und teilt das Gesamtproblem in Teilaufgaben auf..

Dann unterscheidet man Teilaufgaben

Hier beginnt der Loop (vielleicht ändert man das oben später noch, aber eigentlich ist es nicht die Meinung, weil der Kunde ja wissen müsste was er will 

Man wählt eine Teilaufgabe aus 

Mit UML Diagrammen stellst du die Klassenstruktur dar und was als Schreibtischtest bezeichnet wurde, könnte man mittels Objektszenarien realisieren. Man spielt den ausgewählten use ase (Teilaufgabe) auf Papier durch - welche Klasse nimmt den Request entgegen, welchen anderen Klassen liefern welche Teilresultate und was geschieht mit dem Resultat.

Dann implementiert  man alles, was man für diese erste Teilaufgabe braucht und testet das.

Das Ganze wird so lange widerholt, bis das Programm fertig  ist

Na ja - so in etwas läuft heute jeder seriöse Entwicklungsprozess ab ;-)


----------

