Suche: ASP

Wissenschaft im Diskurs 👍 👎

Regelmäßig erscheinen nicht nur in Fachmagazinen Artikel zu wissenschaftlichen Erkenntnissen, sondern auch in klassischen Nachrichtenmagazinen. Hierbei beobachte ich leider sehr häufig eine große Unsicherheit bis hin zu mehr als fragwürdigen Äußerungen in den zugehörigen Diskussionsbereichen. Daher dachte ich mir, es kann möglicherweise nicht schaden, hier ein paar Aspekte der Natur- und Strukturwissenschaften herauszustellen.

Naturwissenschaften

Naturwissenschaften beschäftigen sich – naheliegenderweise – mit den verschiedenen Erscheinungen der Natur.

Anspruch

Ein verbreiteter Irrtum ist es, Naturwissenschaften als etwas zu sehen, woran man glauben müsste. Im Gegenteil ist es richtig und wichtig, entsprechende Erkenntnisse kritisch zu hinterfragen und zu überprüfen. Naturwissenschaften haben außerdem explizit nicht den Anspruch, Antworten auf den Sinn des Lebens oder ähnliche philosophische Fragestellungen liefern zu können oder auch nur zu wollen.

Naturwissenschaften beobachten natürliche Ereignisse, um auf deren Basis möglichst präzise Beschreibungen und im Idealfall schließlich Vorhersagen erarbeiten zu können. Diese Vorhersagen können sich durchaus auch als unzutreffend erweisen, was für die wissenschaftliche Arbeit jedoch keine "Niederlage" darstellt. Auch daraus lässt sich nämlich neue Erkenntnis ziehen und sei es auch nur, dass man etwas doch noch nicht verstanden hat.

Es gilt im Hinterkopf zu behalten, dass es sich immer um beschreibende Modelle dessen handelt, was Gegenstand der Untersuchung ist. Das heißt nicht zwangsläufig, dass etwas nun "so ist" – Modelle können fortlaufend durch neue Erkenntnisse verbessert oder gar verworfen werden. Im Übrigen können im naturwissenschaftlichen Bereich auch (hinreichend genaue) Näherungslösungen erwünscht und akzeptabel sein.

Finanzen

Naturwissenschaftliche Forschung kostet Geld. Je nach konkretem Vorhaben kann es sich hierbei um Kleinstbeträge mit Küchenutensilien bis hin zu Vorhaben handeln, die außerhalb unserer Erde stattfinden und mehrere Milliarden Euro kosten.

Das Geld wird jedoch nicht, wie oft behauptet, "ins All geschossen" – entsprechend hochwertiges Material kann zwar teuer sein, aber das ist auch schon alles, was dort verbleiben wird. Selbst Weltraumagenturen neigen also keineswegs dazu, Geldscheine in Raketen auf andere Himmelskörper zu befördern. Vielmehr dienen diese Ausgaben insbesondere dazu, die mitunter zahlreichen Mitarbeiter zu bezahlen – von der Förderung der Rohstoffe, über Berater bis hin zu Astronauten. Es ist im Übrigen eine verbreitete Fehlannahme, durch hier "eingesparte" Gelder plötzlich den Welthunger stillen zu können – derartige Probleme sind oftmals ökologischer, sozialer und politischer Art und höchstens am Rande eine Frage des Geldes.

Damit ist leider tatsächlich nicht ausgeschlossen, dass es auch im wissenschaftlichen Betrieb, wie überall sonst auch, zu unnötigen Ausgaben kommen kann. Das finde ich selbstverständlich auch nicht toll und – sofern nicht selbst provoziert – die beteiligten Forscher sicher ebenfalls nicht. Nicht zuletzt möchte ich auch an dieser Stelle noch einmal darauf hinweisen, dass man auch aus augenscheinlichen Fehlschlägen Erkenntnisse ziehen kann.

Grundlagenforschung

Im Bereich der Naturwissenschaften findet, insbesondere an Universitäten, Grundlagenforschung statt. Diese dient als Basis für eventuell mögliche Anwendungen und weitergehende Überlegungen. Diese Grundlagenforschung kann sehr theoretisch sein und mit exotischen Materialien arbeiten; die Nützlichkeit für den Alltag erschließt sich nicht unbedingt sofort. Es handelt sich vordergründig um eine Maßnahme des weiteren Erkenntnisgewinns.

Man weiß mitunter nicht immer bereits im Voraus, wozu eine Überlegung später dienen könnte – und ob überhaupt. Es liegt jedoch in der Natur des Menschen, die Grenzen des Möglichen durch intellektuelle Auseinandersetzung mit dem Gegebenen zu verschieben. Zur Beruhigung sei darauf hingewiesen, dass selbst aus historischer Sicht sehr kuriose Ansätze in heutige Alltagsprodukte einfließen konnten (Stichworte: Quantenmechanik, Zahlentheorie). Ihr solltet also nicht sofort an Verschwendung denken, wenn ihr nicht sofort eine Broschüre mit möglichen Produkten zu einer wissenschaftlichen Theorie finden könnt.

Vertreter

Typische Vertreter der Naturwissenschaften sind die Biologie, Chemie und Physik.

Strukturwissenschaften

Strukturwissenschaften untersuchen abstrakte Objekte auf ihre Eigenschaften und dienen der Modellbildung.

Anspruch

Im Gegensatz zur empirischen Vorgehensweise der Naturwissenschaften basieren Strukturwissenschaften auf einem deduktiven Ansatz, bei welchem – ausgehend von gewissen Grundannahmen – logische Schlüsse gezogen werden. Dies ermöglicht – bei gültigen Schlüssen – tatsächlich absolute, unwiderlegbare Aussagen, die jedoch auch nur soweit gültig sind, wie es die Theorie selbst erlaubt. Wesentliches Element ist die Abstraktion.

Modellbildung

Als sehr einfaches Beispiel sei folgende Überlegung eingebracht: Dass 1 + 1 = 2 ist, dürften die meisten Menschen ohne weiteres Zögern akzeptieren, da es ihnen so beigebracht wurde. Dies ist für die "gewöhnliche" Addition auf natürlichen Zahlen auch völlig richtig und wird sich garantiert niemals ändern, denn im Gegensatz zu natürlichen Phänomenen können hier keine neuen Erkenntnisse auftauchen, die die Aussage widerlegen könnten – vielmehr ist die Theorie absichtlich so konstruiert, dass die Aussage stimmt.

Genauso kann es jedoch auch sinnvoll sein, davon abzuweichen und ein anderes Modell als Grundlage zu verwenden. Sofern wir im Dualsystem rechnen, ergibt sich nämlich die Gleichung 1 + 1 = 10 und in noch spezielleren Algebren ergibt sich gar 1 + 1 = 0 (mod 2). Und tatsächlich ist jede dieser drei Gleichungen in ihrem jeweiligen Kontext richtig und keine der jeweils anderen wurde durch eine dieser Gleichungen widerlegt. Es wäre schlicht umständlich für an das Dezimalsystem gewöhnte Menschen, wenn wir unsere Gegenstände im Dualsystem zählen würden (obwohl aus mathematischer Sicht nichts dagegen spräche).

Ein Computer arbeitet jedoch anders, sodass ein anderes Modell als Grundlage verwendet werden kann – und das funktioniert im Rahmen der Digitaltechnik äußerst gut, wie man nicht zuletzt daran sehen kann, dass ihr hier gerade einen Blog über das Internet lesen könnt, in welchem durchaus sehr spezielle Mathematik zum Einsatz kommen kann, beispielsweise bei Komprimierungen und Verschlüsselungen. Es geht also auch hier letztendlich nicht um "die Wahrheit", sondern vielmehr um passendes Werkzeug zur Lösung einer Problemstellung.

Verbindung

Im Kontext unserer bisherigen Überlegungen sind nun auch die Verbindungen zu den anderen Wissenschaften, beispielsweise der Physik, zu betrachten. Mitunter abenteuerlich anmutende Beschreibungen natürlicher Phänomene bedeuten nun eben genau nicht, dass sich die Natur so verhalten muss, sondern die Natur verhält sich auch völlig ohne unsere Modelle genau so, wie sie es eben macht.

Unsere Modelle dienen lediglich der möglichst präzisen Beschreibung dessen, was wir beobachten können, um davon ausgehend beispielsweise Vorhersagen treffen zu können. Diese Modelle müssen möglicherweise angepasst werden, dies macht jedoch explizit nicht die dahinterliegende Mathematik falsch, sondern bedeutet lediglich, dass das falsche "Werkzeug" gewählt wurde – oder aber Fehler in der Anwendung gemacht wurden. Es sei entsprechend nochmals darauf hingewiesen, dass im Universum also keine Matrizen umherschwirren und auch physikalische Bezeichnungen sollte man nicht immer wörtlich nehmen (Quarks sind also nicht etwa bunt im üblichen Sinne, von "Farben" spricht man hier lediglich im Sinne einer Kategorisierung und "dunkle Materie" meint schlicht einen zumindest bisher nicht sichtbaren Einfluss) – dennoch können sie hilfreich sein, bestimmte Phänomene zu beschreiben.

Die Frage nach dem finalen "Warum?" kann schließlich niemand beantworten; Religionen deklarieren hier lediglich willkürlich und ohne jegliche Evidenz ihre vorgebliche Überzeugung zur "Erklärung" und schließen weitere Nachfragen aus. Konzeptionell ähnlich gehen Pseudo-Wissenschaften und Verschwörungstheorien vor, welche ohne jegliche Anhaltspunkte (bzw. sogar vielen gegensätzlichen Aspekten) einer Überzeugung anhängen. Bloße Gefühle, Mehrheiten, Meinungen und Sichtweisen genügen dem wissenschaftlichen Anspruch explizit nicht.

Vertreter

Typische Vertreter der Strukturwissenschaften sind die Informatik, Logik und Mathematik.


Bitte beachtet, dass dieser sehr vereinfachte Überblick nicht die ganze Breite der jeweiligen Begriffe und Fachgebiete klären kann, sondern vielmehr dem interessierten Laien eine Möglichkeit der Einordnung geben soll. Sofern ich mit diesem Beitrag dazu anregen konnte, diese Arten der Wissenschaft besser differenzieren zu können und nicht gar nur als "akademische Selbstbeschäftigung" zu betrachten, würde ich mich jedoch sehr freuen.

Weiterführende Informationen und Verweise

Forschungseinrichtungen in Deutschland
Wissenschaftlich orientierte Blogs und Podcasts
Magazine

Die Spektrum der Wissenschaft Verlagsgesellschaft veröffentlicht mehrere (natur-)wissenschaftliche Magazine, darunter insbesondere auch das bekannte Spektrum der Wissenschaft. Die Ausgaben erscheinen monatlich und bieten oftmals auch (ggf. auf Deutsch übersetzte) Artikel direkt beteiligter Forscher.

Interpolierte Zeichenfolgen mit C# 👍 👎

Im früheren Beitrag String.Format per Objekt-Eigenschaften hatte ich eine kleine Erweiterungsmethode vorgestellt, um eine etwas besser lesbare Variante der String.Format-Methodengruppe vorzustellen. Selbstverständlich wird C# aber beständig weiterentwickelt und so gibt es seit C# 6.0 (.NET 4.6) eine entsprechende Möglichkeit, ohne jedoch – wie in meinem kleinen Beispiel – auf die umfangreichen Formatierungsoptionen verzichten zu müssen:
Beispiele für interpolierte Zeichenfolgen
010203040506070809101112131415
// Einfache Verwendung und Methodenaufrufconst string firstName = "Holger";const string lastName = "Stehle";
string formatted = $"{lastName.ToUpper()}, {firstName}"; // "STEHLE, Holger"
// Basis für Zahlenconst int num1 = 42;

formatted = $"dec: {num1}, hex: {num1:X3}"; // "dec: 42, hex: 02A"
// Dezimalstellen für Zahlenconst double num2 = 13.37;

formatted = $"{num2:N3} / {num2:N4}"; // "13,370 / 13,3700" [DE]
Die wesentliche Syntax-Erweiterung ist dementsprechend "$" zur Einleitung derartiger Zeichenketten.

Traceroute per C# 👍 👎

In früheren Beiträgen hatte ich bereits erläutert, wie man per C# auf eine Konsolenausgabe zugreifen und programmatisch einen Ping durchführen kann. Dieser Beitrag soll nun ein einfaches Tracerouting per C# nachbilden. Dazu implementieren wir im Folgenden eine einfache (und wie üblich auf das Wesentliche reduzierte) Klasse, welche die Funktionalität durch sukzessive Erhöhung des TTL-Wertes für schlichte Ping-Pakete umsetzt.
Klasse implementieren
01020304050607080910111213141516171819202122232425
public class Traceroute : IDisposable {    private static readonly byte[] buffer = new byte[] {        0x01, 0x03, 0x03, 0x07    };  // Daten zur Übertragung
private readonly Ping ping = new Ping();

public IEnumerable<PingReply> Send(string hostNameOrAddress, int timeout = 3000) { // Paket mit TTL=1 initialisieren PingOptions pingOptions = new PingOptions(1, false);
PingReply pingReply = null;
do { pingReply = this.ping.Send(hostNameOrAddress, timeout, Traceroute.buffer, pingOptions);
// TTL für nächsten Schritt inkrementieren pingOptions.Ttl++;
yield return pingReply; } while(pingReply.Status != IPStatus.Success); }
public void Dispose() => this.ping.Dispose();}
Die Verwendung gestaltet sich nun sehr einfach:
Klasse verwenden (exkl. Namensauflösung)
0102030405
using(Traceroute traceroute = new Traceroute()) {    foreach(PingReply pingReply in traceroute.Send("coders-online.net")) {        Console.WriteLine(pingReply.Address);    }}
Um die entsprechenden Hostnamen zu den jeweiligen IP-Adressen zu ermitteln, kann beispielsweise die Methode Dns.GetHostEntry(…) dienen:
Klasse verwenden (inkl. Namensauflösung)
0102030405060708091011
using(Traceroute traceroute = new Traceroute()) {    foreach(string hostNameOrAddress in traceroute.Send("coders-online.net").Select(pR => {        try {            return Dns.GetHostEntry(pR.Address).HostName;        } catch {            return pR.Address.ToString();        }    })) {        Console.WriteLine(hostNameOrAddress);    }}

Objekte mit C# dynamisch erzeugen 👍 👎

Insbesondere bei der Entwicklung von unterstützenden Tools kann es hilfreich sein, Objekte dynamisch erzeugen zu können, ohne vorher den konkreten Typ zu kennen. Ich habe so etwas beispielsweise einmal im Rahmen einer interaktiven API-Dokumentation genutzt. Das .NET-Framework bietet hierfür die Activator-Klasse.

Als Basis für das Beispiel soll folgende triviale Klasse dienen:
Beispielklasse
01020304050607080910111213141516
public class Person {    public string FirstName {        get; set;    }
public string LastName { get; set; }
public Person() {}
public Person(string firstName, string lastName) { this.FirstName = firstName; this.LastName = lastName; }}
Hiervon können wir nun dynamisch ein Objekt erzeugen:
Objekt dynamisch erzeugen
01020304
Activator.CreateInstance(Type.GetType("Person"), new[] {    "Holger",    "Stehle"});
Dieses Vorgehen ist jedoch nur in Ausnahmefällen zu empfehlen, da ihr schließlich die Vorteile der statischen Typisierung größtenteils verliert. Es bietet sich daher je nach Anwendungsfall die Verwendung von Schnittstellen (z. B. bei Plugins) oder die Verwendung generischer Programmierung (z. B. zur internen Abstraktion) an.

Die in diesem Beitrag vorgestellte Klasse bietet auch eine Variante mit Typparameter an:
Objekt per Typparameter erzeugen
01
Person person = Activator.CreateInstance<Person>();
Diese Funktionalität ist in der Praxis zur "normalen" Entwicklung jedoch nur bedingt hilfreich, schließlich musste dazu der Typ bereits vorab bekannt sein und ihr hättet das Objekt auch einfach per new erzeugen können.

Mit generischer Programmierung zeigt sich ein weiteres Einsatzfeld, welches sich jedoch mit einer entsprechenden Einschränkung des Typparameters auch anderweitig lösen lässt und für mehr Unterstützung des Typsystems sorgt, da ihr für eure Zwecke weitere Einschränkungen (wie beispielsweise Schnittstellen) angeben könnt:
Objekt per Typparameter-Einschränkung erzeugen
01020304050607
public static class ObjectUtility {    public static T CreateInstance<T>() where T : new() {        return new T();    }}
Person person = ObjectUtility.CreateInstance<Person>();

C#-Member als obsolet kennzeichnen 👍 👎

Hin und wieder kann es sinnvoll sein, Programmelemente (z. B. Eigenschaften oder Methoden) als obsolet zu kennzeichnen. Dies ist insbesondere bei der Umsetzung allgemeiner Programmbibliotheken hilfreich, beispielsweise um den Anwender auf eine entfallende bzw. verbesserte Funktionalität hinzuweisen.

.NET stellt hierfür das Obsolete-Attribut zur Dekoration entsprechender Teile bereit. Die Verwendung ist intuitiv:
Programmelemente als obsolet kennzeichnen
01020304050607080910111213
[Obsolete("Bitte verwenden Sie .NET-Standardfunktionalität.")]public static class Sorting {    [Obsolete("Bitte verwenden Sie zumindest " + nameof(Mergesort) + ".", true)]    public static string[] Bogosort(string[] data) {        /* ohne Implementierung */        return data;    }
public static string[] Mergesort(string[] data) { /* ohne Implementierung */ return data; }}
Bei Verwendung dieser Klasse erscheint nun folgende Warnung in Visual Studio:
"Sorting" ist veraltet: "Bitte verwenden Sie .NET-Standardfunktionalität."
Bei Verwendung der Methode Bogosort erscheint zusätzlich folgender Fehler:
"Sorting.Bogosort(string[])" ist veraltet: "Bitte verwenden Sie zumindest Mergesort."

Project links

Categories / Archive  |  Übersicht RSS feed

Tags

Search