• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

Programmierung lernen

DeCaY4

Guest
Yo, ich mag dieses Semester nun endlich mal etwas tiefer in die materie einsteigen.. gewisse Kentnisse sind nach dem 7. semester WI natürlich vorhanden, aber vielleicht kennt ihr das: es reicht, um Klausuren an einer Universität zu bestehen. Inwieweit man da von Programmierkenntnissen sprechen kann.. :rolleyes:

Mir geht's vorzugsweise um Folgendes: ich hab bisher halt so tolle Programme wie den InsertionSort algo. in ner static methode gecoded, hab auch mal ins AWT eringegeuckt und rudimentäre Kenntnisse von threads (alles JAVA jetzte natürlich). Das Problem dass ich aber generell immer habe, sind fragen wie

- mach ich Methoden static oder nicht?
- wann sollte ich Objekte erzeugen lassen können (das erscheint mir oft ziemlich 'überladen')
- was gehört typischerweise in die main methode rein, was nicht
...

naja so grundlegende Dinge halt. Man sitzt vor ner Aufgabe und hat irgendwie keine Ahnung, wie das zugehörige Programm aussehen soll. Wie geht ihr da denn vor? Sollte ich mir z.b. erstmal die API genauer anschauen, damit ich weitere Möglichkeiten kennenlerne, Probleme zu lösen? Oder mir irgendeine Aufgabe schnappen und versuchen, die zu implementieren?

Yo so generelle Tipps wärn super.. vielleicht auch was Motivatorisches, ich bin immer ziemlich schnell frustriert, wenn zum 8ten mal ne ArrayOutOfBound exception kommt und ich nicht weiß, warum ;)
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
naja solltest dir halt erstmal sicher sein was du für eine sprache lernen / vertiefen willst. je nachdem unibibo und bücher zu holen, grade bei java gibts da doch wie sand am meer ;)
imho lernt man dadraus auch recht viel stilbezügliches und entwickelt schnell nen sinn, was man wie auslagert/deklariert und whatever

motivationstechnisch: kleine sachen anfangen, die aber fertig stellen. nimm dir nichts vor was du net schaffen kannst ;)
 
Mitglied seit
10.08.2000
Beiträge
12.908
Reaktionen
1
schau in open source quellcode, aus beispielen lernt man sehr viel und es gibt mehr als genug open source java programme (da du vorkenntnisse hast solltest du den kram direkt halbwegs verstehen können)
dazu gibts auf galileocomputing viele ebooks, java wird da auch sehr umfangreich behandelt

ganz nett ist es auch, einfach mal ein kleines spiel zu programmieren (oder wie gesagt ein open source spiel auseinanderzunehmen)
nen tetris, pacman, asteroids, irgendwas auf dem level
falls es grafisch anspruchsvoller werden soll: es gibt auch open gl java libs, jogl nennt sich das ganze, hab aber das letzte mal vor c.a. 1,5 jahren damit gearbeitet
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
Original geschrieben von MegaVolt

falls es grafisch anspruchsvoller werden soll: es gibt auch open gl java libs, jogl nennt sich das ganze, hab aber das letzte mal vor c.a. 1,5 jahren damit gearbeitet

wäre für ihn imho schon wieder zuviel des guten... wie gesagt, es gibt nix frustierenderes als ein "projekt" das unfertig auf der festplatte verstaubt weil man sich zu hohe ziele gesteckt hat.
 
Mitglied seit
10.08.2000
Beiträge
12.908
Reaktionen
1
Man kann auch kleine opengl sachen programmieren, ein Voronoi Programm mit verschiebbaren Punkten etc ist mit entsprechenden Vorkenntnissen in wenigen Stunden geschrieben, wenn man sich erst reinarbeiten muss halt in ein paar Tagen.
Der Vorteil an grafischen Programmen ist halt, dass man sehr schnell einen sichtbaren Erfolg vorzuweisen hat. Als ich angefangen hab zu programmieren fand ich es furchbar langweilig, dass ich jetzt gerade nen tollen Algorithmus gebastelt hab aber der doch letztendlich nix beeindruckendes konnte. Ein Programm dass einige Dreiecke auf den Schirm zeichnet und dabei noch etwas Interaktion erlaubt ist einfach motivierender ;)

Zu der Mothoden-Frage:
Java ist objektorientiert, d.h. statisches programmieren sollte die Ausnahme sein (eigentlich nur bei mathematischen Funktionen sinnvoll).
main besteht grundsätzlich aus wenigen Aufrufen:
pre_loop, main_loop, post_loop
In der pre_loop initialisierst du dein Programm (Grafikcanvas zeichnen, OpenGL Display oder sowas vorbereiten, Steuerung starten), die main_loop ist das eigentliche Programm, im wesentlichen listener die auf Benutzereingaben warten und diese dann entsprechend umsetzen, post_loop beendet das Programm, d.h. evtl irgendwas auf die Platte sichern.

Wieso genau bist du mit den Informatik Vorlesungen unzufrieden? Gerade bei den Übungsaufgaben haben wir fast immer Projekte erstellt die dann später sogar relativ komplex wurden (über mehrere Wochen immer wieder erweitert).
Natürlich ist die Klausur dann eher theoretisch aber für den praktischen Teil sind eben die Übungsaufgaben da. Googeln nach Übungsblättern zu einem Thema das dich besonders interessiert (wir haben hier z.B. Computergrafik Vorlesungen oder auch Webentwicklung Vorlesungen) könnte sich also lohnen.
 

RRA^StArFiRe

Guest
viele programmierer können programmieren, wissen aber die hintergründe gar nicht wirklich so genau.
muss man ja auch nicht, denn du bist programmierer und kein sprachenentwickler.
du benutzt deinen toaster ja auch einfach, ohne genau zu wissen, wie es im inneren da ausschaut. oder fährst mit deinem auto, ohne kfz-mechaniker zu sein.

dafür gibts dann nämlich tolle klassen und libraries für programmierer, damit sie sich nicht allzusehr mit der maschinensprache auseinandersetzen müssen.
natürlich kannste auch alles selber schreiben, oder in c++ schreiben und dann mit assemblereinschüben coden. ist dann aber viel zu kompliziert.

methoden static oder nicht, sagt schon das wort, wenns im ganzen programmablauf nur eine instanz davon geben soll, musst du das static deklarieren. zb. wenn du dir ne klasse schreibst, um oft bentutzte methoden abzulegen. machste dir ne static klasse, dann brauchste nicht immer n neues objekt von der klasse zu erzeugen.

objekte erzeugen oder nicht erzeugen ist in java egal. selten kannste java unbeabsichtigt überladen. denn java hat nen automatischen trashmanager, der unbenutzte objekte und variablen freigibt, sobald man den scope verlässt. deswegen kannste zb. auch ausserhalb ner schleife auf keine variable zugreifen, die du in der schleife deklariert hast.
c++ zb. hat keinen trashmanager, da musste die objekte von hand killen.

und was du in die main schreibst, bleibt deiner programmierstil überlassen.


also wenn du so grundlegende sachen wissen willst, googlst am besten danach, oder wenn allgemein, lad dir einfach n informatikscript runter.
aber wie so´n leicht verwirrter javacrack prof an der uni gesagt hat... programmierer programmieren nur mit halbwissen, wenn man was unbekanntes machen will, lernt mans einfach beim programmieren. und du kannst auch gar nicht wirklich alles wissen, wär viel zu viel. siehst ja wie alle immer von libs reden x_X

programmier einfach was, was du selbst auch benutzen kannst/willst. alles andere wird schnell langweilig, weils einfach nie fertig wird ;D
 
Mitglied seit
10.08.2000
Beiträge
12.908
Reaktionen
1
Original geschrieben von =Starfire=
viele programmierer können programmieren, wissen aber die hintergründe gar nicht wirklich so genau.
muss man ja auch nicht, denn du bist programmierer und kein sprachenentwickler.
du benutzt deinen toaster ja auch einfach, ohne genau zu wissen, wie es im inneren da ausschaut. oder fährst mit deinem auto, ohne kfz-mechaniker zu sein.

dafür gibts dann nämlich tolle klassen und libraries für programmierer, damit sie sich nicht allzusehr mit der maschinensprache auseinandersetzen müssen.
natürlich kannste auch alles selber schreiben, oder in c++ schreiben und dann mit assemblereinschüben coden. ist dann aber viel zu kompliziert.

methoden static oder nicht, sagt schon das wort, wenns im ganzen programmablauf nur eine instanz davon geben soll, musst du das static deklarieren. zb. wenn du dir ne klasse schreibst, um oft bentutzte methoden abzulegen. machste dir ne static klasse, dann brauchste nicht immer n neues objekt von der klasse zu erzeugen.

objekte erzeugen oder nicht erzeugen ist in java egal. selten kannste java unbeabsichtigt überladen. denn java hat nen automatischen trashmanager, der unbenutzte objekte und variablen freigibt, sobald man den scope verlässt. deswegen kannste zb. auch ausserhalb ner schleife auf keine variable zugreifen, die du in der schleife deklariert hast.
c++ zb. hat keinen trashmanager, da musste die objekte von hand killen.

und was du in die main schreibst, bleibt deiner programmierstil überlassen.


also wenn du so grundlegende sachen wissen willst, googlst am besten danach, oder wenn allgemein, lad dir einfach n informatikscript runter.
aber wie so´n leicht verwirrter javacrack prof an der uni gesagt hat... programmierer programmieren nur mit halbwissen, wenn man was unbekanntes machen will, lernt mans einfach beim programmieren. und du kannst auch gar nicht wirklich alles wissen, wär viel zu viel. siehst ja wie alle immer von libs reden x_X

programmier einfach was, was du selbst auch benutzen kannst/willst. alles andere wird schnell langweilig, weils einfach nie fertig wird ;D

Einspruch: Wirklich keiner aus meinen Informatik Vorlesungen der nur halbwegs was kann geht so vor.
Ne lib benutzen heißt doch noch lange nicht, dass man das zugrundeliegende Konzept nicht versteht :ugly:
Klar lernt man am besten durch Programmieren aber das ersetzt solide theoretische Grundkenntnisse nicht, schreibt man einfach so drauf los kommt nur Müll mit einer furchbaren Laufzeit heraus.
 

Shihatsu

Administrator
Mitglied seit
26.09.2001
Beiträge
49.590
Reaktionen
10.238
Zieh dir fürs Hintergrundwissen "Bruce Eckels - Thinking in Java" rein. Schau dir bloss keine Open source Java Geschichten an - die Chance was suboptimal gecodetes zu finden ist höher als die, was abschaubares zu finden. Wenn du wirklich hart bist - schau dir den Code von Eclipse an. Das wäre dann effiziente Programmierung abgucken.
Die Steuerung eines Programms sollte übrigens nicht die main() übernehmen - sie sollte nur die Steuerungsklasse aufrufen. Klug geschissen? Mitnichten. Die main() sollte so leer wie nur irgend möglich sein. Das argh-array instanzieren und nen controller aufrufen, möglicherweise noch 2-x (x ist hier begrenzt durch arghs[].size()) Log/Debugausgaben rin da. Allerhöchstens noch nen Loggeraufruf. Das wars.
P.S.: Mit Java sollte man wirklich keine OpenGL-Geschichten entwickeln. Geht zwar ohne grössere Probleme, aber die Web-Geschichten sind vieeeel spannender. Und finanziell gesehen auch viel attraktiver :D
 
Mitglied seit
21.07.2002
Beiträge
545
Reaktionen
0
Wichtig ist imo vorallem dass du dir irgendwelche Projekte vornimmst die dich interessieren und die in einem "vernünftigen" Zeitrahmen abzuschließen sind. Ansonsten überleg halt immer bevor du anfängst zu programmieren warum du es so programmieren willst und nicht anders. Das wird zwar zu 99% auch nicht die optimale Lösung sein, aber so merkt man nachher denk ich schneller was warum falsch ist und wie man es am ehesten verbessern kann.

PS: lern kein JAVA, das ist ja nur für langweilige Web Sachen wirklich interessant :hammer:
 

Bronzegraf

Guest
Die Aussage ist zu pauschal um richtig zu sein.

Ich habe bisher noch keine einzige "Web Sache" in Java implementiert oder implementieren müssen. Ansonsten kann es natürlich sein, dass Webentwicklung etwas unspannend ist.

Java ist halt auch gut um Algorithmen zu entwickeln oder verteilte Anwendungen zu schreiben. Gerade Custom-ClassLoaders und Reflection sind nicht zu verachtene Möglichkeiten. Mit einem vernünftigen Programmierstil laufen auch zeitrestriktive (keine Echzeit!) Berechnungen sehr flott ab. Oberflächen lassen sich auch relativ leicht entwickeln, sofern man es denn muss ;)
Ich hoffe ja, dass es irgendwann mal vernünftige Modelle oder Systeme gibt, die die Oberflächen generieren können (auch und vor allem abseits von HTML und Co)

Java hat natürlich auch so seine Schwächen:
* Eine langsam zu fett werdende API
* Halbgares Generics Konzept ohne Typsicherheit/-prüfung
* Zu viele Codeleichen bzw "Deprecated" Funktionalitäten

um mal ein paar zu nennen.

Edit:
Achso, ganz vergessen: auf http://www.javabuch.de/ findest ein gutes Buch (dass Du Dir auch ziehen kannst) um die Sprachmittel von Java kennenzulernen.
 

Shihatsu

Administrator
Mitglied seit
26.09.2001
Beiträge
49.590
Reaktionen
10.238
Original geschrieben von Bronzegraf

Ich hoffe ja, dass es irgendwann mal vernünftige Modelle oder Systeme gibt, die die Oberflächen generieren können (auch und vor allem abseits von HTML und Co)
Vernünftig ist natürlich relativ, aber hast du dir schonmal Java6+neues Swing+NetBeans angeschaut?
http://form.netbeans.org/updates/update55.html
Ansonsten bin ich ja ein Fan von SWT, dafür gibt es auch einen sehr guten GUI-Builder, leider kostet der mal eben schlappe 500 Steine pro Arbeitsplatz :kotz:
 
Oben