+ Die Fachgruppe
+ Algorithmen
+ Berichte
+ Programmierung
 - Goldene Regeln
 - XML-Dateiformat
 - Erklärungen zu XML
 - XML-Import
 - Downloads
 - Doppelsternprojekt
+ Rezensionen
+ Links
- Kontakt

Intern:
- Login

Der Einstieg in die astronomische Programmierung

Software selbst zu programmieren ist einfacher als man es sich für gewöhnlich vorstellt. Die Schwierigkeit besteht vielmehr darin, die Fülle an Information, die im Netz vorhanden ist, zu sichten und zu bewerten – insbesondere, wenn man keine Programmiererfahrung besitzt.

Diese Seite ist ein Angebot der VdS-Fachgruppe Computer-Astronomie und richtet sich an all jene Sternfreunde, die gerne das Entwickeln von Astrosoftware erlernen möchten. Die Seite versucht nicht, einen kompletten Programmierkurs anzubieten – dies kann zum einen von uns einfach nicht geleistet werden und zum anderen ist dies auch nicht erforderlich, da bereits eine Vielzahl an hervorragenden Lehrmitteln, nicht nur im Netz, vorhanden sind. Zielsetzung ist vielmehr, einen Leitfaden zur Orientierung zu geben, anhand dessen Astroamateure zielgerichtet nach weiterführende Information suchen können und ihre Projekte planen können.

Weshalb eigentlich programmieren?

Obwohl im Internet eine breite Palette astronomischer Software verfügbar ist, gibt es eine Vielzahl von Gründen, sich näher mit dem Programmieren näher zu beschäftigen:

  • Der Wunsch zum Selbermachen: bei vorhandener Software fehlen Funktionen oder die Benutzeroberfläche soll nach eigenen Vorstellungen gestaltet werden.
  • Künstliche Welten schaffen: Simulationen sind etwas völlig Eigenständiges. Sie erschließen diejenigen Teilgebiete der Astronomie, die weder durch direkte Beobachtung noch durch Theorien beschrieben werden können. Mit einer Simulation schafft sich der Programmierer eine eigene künstliche Welt, mit der er spielen kann und aus der sich Erkenntnisse durch Vergleich mit der Realität gewinnen lassen. Darüber hinaus lassen sich Sachverhalte betrachten, die in der Natur so nicht vorkommen.
  • Für Beruf und Studium: viele technische, natur- und wirtschaftswissenschaftliche Studiengänge erfordern Programmierkenntnisse. Welche bessere Möglichkeit gibt es, sich diese schon im Vorfeld mit der Entwicklung astronomischer Software zu erwerben? Fundierte Softwarekenntnisse erweisen sich zudem immer wieder als Türöffner im Berufsleben.
  • Detailwissen erwerben und Zusammenhänge verstehen: kaum eine andere Tätigkeit vermittelt derart tiefe Einblicke in ein Thema wie das Ausprogrammieren am Rechner. Obendrein werden das Tüfteln, das Abstraktionsvermögen und das analytische Denken geschult.
  • Fehlendes Angebot: zu manchen Teilgebieten der Astronomie ist schlicht kein Angebot an Software verfügbar – gerade bei spezielleren Fragestellungen oder individuellen Auswerteverfahren.

Die Auflistung ließe sich leicht fortführen.

Die Möglichkeiten, die man heutzutage für die astronomische Programmierung antrifft, können besser kaum sein. Die Hardware birgt, was Speicher und Rechenleistung betrifft, keine nennenswerten Einschränkungen mehr; für die Entwicklung stehen zahlreiche, oft kostenlose und leistungsfähige Tools bereit und für Benutzeroberflächen bzw. Grafik sind fertige und äußerst leistungsfähige Codebibliotheken verfügbar. Der Entwicklung eigener Software steht von technischer Seite somit nichts im Wege.

Was benötige ich für das Programmieren?

Für das Entwickeln von Software ist ein gewisses Maß an logischem Denken, etwas Abstraktionsvermögen und Kreativität sowie eine Prise Engagement in der Sache ganz hilfreich. Die Anforderungen lesen sich zunächst schwieriger als es hinterher in der Praxis wirklich ist.

Auf dem PC benötigt man bestimmte Software. Häufig werden Programmiersprachen in Form von sogenannten integrierten Entwicklungsumgebungen ausgeliefert. Diese enthalten i.d.R. einen komfortablen Editor zum Eingeben seines Programmcodes, einen Compiler zum Übersetzen des Programmcodes in ausführbare Programme, einen Debugger für die Fehlersuche und weitere hilfreiche Tools.

Wie geht man an das Programmieren heran?

Es gibt zahlreiche Bücher sowie Tutorials im Netz, die mit vielen Beispielen ausgestattet sind. Am besten, man nimmt sich solch ein Buch oder Tutorial Stück für Stück vor und verändert oder erweitert die Beispiele nach eigenen Wünschen. Zur Auswahl von Büchern findet sich unten weitere Info.

Was sollte ich als erstes programmieren?

Im Mittelpunkt steht die Idee des Programms: was soll eigentlich programmiert werden? Die konkrete Idee ist wesentlich wichtiger als die Frage nach der „besten“ Programmiersprache oder dem „richtigen“ Betriebssystem.

Womit soll man beginnen? Möchte man mit dem Erstlingswerk den professionellen Computersimulationen nacheifern? Oder sollte man nicht doch besser die Welt der Planetariumsprogramme revolutionieren? Gemach, gemach! Wenn man sich gleich zu Anfang eine zu schwierige Aufgabe wählt, sind Mißerfolge und Frustrationen unvermeidlich. Eine Software wie das beliebte Kartendruckprogramm Cartes du Ciel wurde zwar auch von einem einzigen Entwickler erstellt, jedoch setzt dies eine langjährige Praxis voraus. Ein realistisches Ziel muß also her.

Für sein erstes Projekt sollte daher unbedingt ein weniger komplexes Thema gewählt werden. Dies kann z.B. ein Be- und Umrechnungsprogramm mit Benutzeroberfläche sein. Auch Konverter zum Austausch von Daten zwischen verschiedenen Applikationen mit zueinander inkompatiblen Datenformaten sind ein dankbares Gebiet. Dies sind alles Aufgaben, an denen die Astronomie geradezu reichhaltig ist und die einem schon bald Erfolgserlebnisse bescheren.

Welche Tools brauche ich?

Die ersten Schritte – Sprache und Programmiertools

Es wurde oben bereits erwähnt, daß die Wahl der Entwicklungsumgebung bzw. der Programmiersprache weniger wichtig zu nehmen ist als das Ziel, das man vor Augen hat, nämlich das fertige Programm. Dennoch kommt man schon bald an diesen Punkt: nach welchen Kriterien sollte die Programmiersprache bzw. die Entwicklungsumgebung ausgewählt werden?

Eigentlich ist die Wahl der Sprache (fast) egal. Man kann die Auswahl mit einigen Aspekten verknüpfen, von denen hier einige genannt sind:

  • Aktualität: eine Entwicklungsumgebung sollte eine für die Aufgabe ausreichende Leistungsmerkmale besitzen und zugleich aktuell sein. Von älteren Sprachen (Fortran, Cobol) ist abzuraten. Das gleiche gilt für Exoten, da Dokumentation meist Mangelware ist.
  • Vorkenntnisse: wenn man bereits über Kenntnisse im Umgang mit einer Programmiersprache verfügt, z.B. aus dem Informatikunterricht, so kann man diese Sprache (oder ihre Nachfolger) weiter nutzen, da der Einarbeitungsaufwand am geringsten sein wird.
  • Industriestandards: möchte man eine Programmiersprache auch aus beruflichen Gründen oder für das Studium erlernen, so kann man eine der Sprachen aus der professionellen Softwareentwicklung auswählen. Welche das sind, kann man leicht aus den Stellenanzeigen ersehen.
Die beste Programmiersprache, die schier alles kann, gibt es nicht. Stattdessen gibt es ein ganzes Bündel verschiedener Sprachen mit teils unterschiedlichen Ansätzen. Diese Sprachen haben durchaus ihre Berechtigung und zudem eine überzeugte Anhängerschaft. Eine kleine Übersicht soll hier gegeben werden.
  • MS Visual Studio ist eine integrierte Entwicklungsumgebung für Windows und unterstützt die Sprachen Visual Basic, C# und C++. Eine Express-Variante mit eingeschränktem Leistungsumfang ist kostenlos im Netz verfügbar. Für die Anwendungsentwicklung ist diese aber vollkommen ausreichend. Das Visual Studio ist in der professionellen Softwareentwicklung für Windows weitverbreitet.
  • Delphi ist eine auf Pascal basierende objektorientierte Sprache für Windows. Die zum Herunterladen freigegebene Explorer-Version von Turbo Delphi ist im Funktionsumfang geringfügig eingeschränkt. Delphi richtet sich primär an Hobbyprogrammierer und ist eine gute Wahl für Wiedereinsteiger mit Pascal-Kenntnissen. Eine Variante namens Turbo C++ ist ebenfalls erhältlich.
  • JavaScript (nicht zu verwechseln mit Java) erlaubt es, Anwendungen im Browser ablaufen zu lassen. Dies ist eine besonders unkomplizierte Form des Softwarevertriebs: das Herunterladen und die Installation der Anwendung und der damit verbundene Vertrauensvorschuß des Benutzers entfallen. Mit dieser Philosophie folgt JavaScript dem gegenwärtigen Trend zu webbasierten Anwendungen (s. z.B. Google Office).
  • Die GNU Compiler Collection (gcc) ist eine Sammlung freier Compiler des GNU-Projekts, die es gleich für mehrere Programmiersprachen gibt (u.a. C, C++ und Java). gcc liegt für mehrere Betriebssysteme (Linux, diverse Unix-Derivate, Windows) vor. Mit dem gcc ist außerdem das Crosscompilieren für andere Plattformen möglich.
  • Java ist eine Programmiersprache, deren Anwendungen auf allen Plattformen (Windows, Linux und Unix) mit Java-Interpretern lauffähig sind. Die Java-Laufzeitumgebung kann frei von der Sun-Homepage heruntergeladen werden. Java hat ähnlich wie C++ den Scheitelpunkt in seiner Bedeutung für die Informationstechnologie bereits überschritten, ist aber immer noch sehr verbreitet und wird dies voraussichtlich noch lange bleiben.
  • Eclipse ist eine weitverbreitete integrierte Entwicklungsumgebung. Sie vereinigt die Steuerung aller Prozesse, welche die Programmierung begleiten, wie z.B. das Editieren, Compilieren, Debuggen oder die Navigation im Quelltext. Obwohl Eclipse für Java prädestiniert ist, gibt es auch Erweiterungen für andere Programmiersprachen.
  • Python ist Open Source und läuft auf allen Plattformen. Aufgrund der Einfachheit und klaren Strukturierung ist Python für Anfänger der Programmierung leicht zu erlernen. Es gibt zudem sehr leistungsfähige Bibliotheken für Wissenschaft und Technik sowie eine sehr aktive Community.
  • Scilab ist ein freies Softwarepaket zur numerischen Mathematik, welches neben zahlreichen mathematischen Funktionen eine Programmierschnittstelle bietet. Der Vorteil liegt auf der Hand: die Programmierung komplexer mathematischer Routinen in Eigenregie entfällt.

Wo bekomme ich Infos und Hilfe?

Das Programmieren ist weniger schwierig als es den Anschein hat. Die Gilde der Autoren von Programmierbüchern hat den Elfenbeinturm längst verlassen und ein breitgefächertes Literaturangebot hervorgebracht, welches alle Niveaus bedient und den Einstieg erheblich erleichtert. Man steht niemals allein da: im Netz kann auf jede Menge Ressourcen wie z.B. Online-Artikel oder Newsgroups zurückgegriffen werden. Es läßt sich nahezu jede Information bekommen, die man braucht.

Eine Empfehlung für die ersten Schritte sind, neben Büchern natürlich, Programmierkurse, die in einschlägigen Computermagazinen (z.B. die c't) in loser Folge erscheinen und sich speziell an Einsteiger richten (z. B. [8]). Diese Kurse sind i.d.R. relativ kostengünstig online zu beziehen.

Muß ich etwa erst viele Handbücher lesen?

Das A und O sind gute Bücher. Für den Beginn reicht aber eines vollkommen aus. Mit der Zeit entwickelt sich auch ein Gefühl dafür, welche Bücher einen weiterbringen. Wir empfehlen dringend, vor dem Kauf in Büchern zu stöbern. Auch sollte der Preis nicht die Hauptrolle spielen. Das teuerste Buch ist immer noch dasjenige, das seinen Zweck nicht erfüllt. Speziell zu astronomischen Berechnungen gibt es einige hervorragende Werke, von denen hier nur eine Auswahl genannt wird [2-4].

Tips zum Programmieren

Es gibt ein paar Dinge, mit denen man sich beim Programmieren das Leben um einiges erleichtern kann. Die aufgeführten Punkte sind zum großen Teil Erfahrungswerte, die aus diversen Softwareprojekten hervorgegangen sind.

  • Es ist sehr hilfreich, sich vor dem Schreiben der ersten Programmcodezeile Gedanken über den Funktionsumfang und die Gestaltung des Programms (Stichwort: Softwarearchitektur) zu machen, insbesondere wenn es sich um ein Tool mit mehr als ein paar hundert Zeilen Code handelt. Auf diesem Wege verringert man die Gefahr, sich die Erweiterbarkeit und Wartbarkeit des Programms zu verbauen. Außerdem wird das Programm effizienter und man bekommt ein besseres Gefühl für den zu erwartenden zeitlichen Aufwand.
  • Die Frage, was das Programm leisten und welchen Funktionsumfang es besitzen soll, ist wichtiger einzuordnen als die Frage nach der zu verwendenden Programmiersprache, dem Betriebssystem oder der Plattformunabhängigkeit.
  • Berechnungen und Programmlogik sollten im Quelltext möglichst gut von der Darstellung der Daten und dem Einlesen von Eingaben getrennt werden. Auf diesem Wege gewinnt das Programm eine gute Struktur und zahlreiche Fehler und Nachteile werden von vornherein vermieden.
  • Wenn das Programm veröffentlicht werden soll: Anwender sind einfallsreich, was die Benutzung des Programm angeht. Man wird dies niemals vorher abschätzen können. Programmieren Sie so flexibel wie möglich. Vermeiden Sie willkürliche Beschränkungen der Feldgrößen oder der Anzahl von Datensätzen. Man solle niemals davon ausgehen, daß der Anwender genau weiß, was er tut. Es gibt zahlreiche Variationen der Reihenfolge, in der die Programmfunktionen ausgeführt werden. Sichern Sie Ihr Programm so gut es geht gegen Fehlbedienungen ab (aussagekräftige Fehlermeldungen) – umso mehr, je mehr Einzelschritte für die Programmbenutzung erforderlich sind.
  • Quelltexte sollten stets mit aussagekräftigen Kommentaren versehen werden.
  • Die Begriffe, die im Programmcode verwendet werden, sollten eindeutig und unmissverständlich sein. Abkürzungen sollten vermieden werden, sofern sie nicht gängig sind. Die Nomenklatur sollte eindeutig sein: ein Gegenstand sollte nicht mit mehreren Begriffen bezeichnet werden (z.B. „Hauptspeicher“ und „RAM“) und ein Begriff sollte nicht verschiedene Gegenstände bezeichnen (z.B. „Objekt“). Allerweltsbegriffe sollten vermieden werden (z.B. „Daten“, „Parameter“, „Name“, „Calculate“), stattdessen sollten sie näher bezeichnet werden (z.B. „File name“, „Calculate orbit“). Entsprechend konsequent sollten die Begriffe verwendet werden.
  • Es kann sinnvoll sein, ein Glossar der verwendeten Fachbegriffe anzulegen; auch um die Eindeutigkeit der Begriffe zu untermauern.
  • Für mathematische Verfahren sind zahlreiche Bibliotheken verfügbar (z.B. BOOST). Die Einarbeitung in die Benutzung fremden Codes ist unter Programmierern zwar unbeliebt, jedoch ist in vielen Fällen deutlich weniger Zeit aufzuwenden, als wenn mathematische Routinen selbst programmiert und fehlerbereinigt werden müssen.
  • Debugging: Fehler kommen beim Entwickeln nun mal vor, weshalb die meisten Entwicklungsumgebungen mit einem Debugger daherkommen. Dieser ermöglicht es, ein Programm Schritt für Schritt durchzugehen, um den fehlerhaften Programmcode zu finden. Debugger haben sich als ein außerordentlich hilfreiche Tools erwiesen, weshalb wir unbedingt empfehlen, sich damit vertraut zu machen.

Auf welchen Gebieten der Astronomie kann man eigentlich programmieren?

Es gibt einige Spezialgebiete. Die wichtigsten von ihnen sind die Himmelsmechanik und Ephemeridenrechung, die Astrooptik, die Beobachtungsplanung, die Bildbearbeitung, die Fernrohrsteuerung sowie die Meßwertaufnahme und –analyse.

Objektorientierte Programmierung

Die objektorientierte Programmierung (OOP) hat sich in der heutigen Zeit zu einer bedeutsamen Technik des Programmierens entwickelt. Der Grundgedanke der OOP ist, die Dinge der realen Welt samt ihren Beziehungen zueinander in den Datenstrukturen eines Programm nachzubilden – die traditionelle prozedurale Programmierung leistet dies nicht. Der Vorteil der OOP ist, daß die Programme klarer strukturiert sind und leichter weiterentwickelt werden können. Die OOP hat sich als sehr leistungsfähig erwiesen, vor allem bei Benutzeroberflächen. Viele Codebibliotheken sind objektorientiert gehalten.

Kleiner Tipp

Nutzen Sie die Möglichkeiten der Online-Hilfen, der Community und vor allem das Internet. Viele Dinge findet man durch bloßen Benutzen von Suchmaschinen heraus.

Ausblick

Mit den Fortschritten, die sich einstellen, tritt die Auseinandersetzung mit dem richtigen Gebrauch und Schreibweisen der Kommandos einer Programmiersprache zunehmend in den Hintergrund und man beginnt, sich mehr Gedanken über die Struktur seiner Programme, guten Stil, Effizienz, besondere Vorgehensweisen und Tools zu machen. Man bekommt außerdem ganz andere Perspektiven auf Projektorganisation und technische Zusammenhänge; eine ungemein wertvolle Erfahrung, die man ab einem gewissen Zeitpunkt auf keinen Fall mehr missen möchte.

Literatur

[1] Schäpers/Huttary, Entwicklungshilfe - Programmieren mit dem Visual Studio Express, c't 04-11/2006, online zu beziehen unter www.heise.de/kiosk/archiv/ct

[2] Meeus, Astronomical Algorithms, Atlantic Books, 2005

[3] Montenbruck, Pfleger, Astronomie mit dem Personal Computer, Springer, 2004

[4] Danby et al., Astrophysics Simulations, John Wiley Inc., 1995

[5] Messerschmid & Fasoulas, Raumfahrtsysteme

[6] Rutten, van Venrooij, Telescope Optics

[7] Smith, Practical Computer-Aided Lens Design

[8] http://www.heise.de/ct/08/23/178/

NICHT EINGELOGGT
Copyright © 2010, VdS-FG Computerastronomie
Konzept & Realisierung: wvk-astro graphix | USNIX v. 0.6.0-4
Letzte Aktualisierung: 22.05.2009, 13:51 durch Helmut Jahns
6 Datenbankabfragen
Goldene Regeln | XML-Dateiformat | Erklärungen zu XML | XML-Import | Downloads | Doppelsternprojekt |
Mitgliederbereich: Login