Freiberuflicher Haskell-Entwickler Dr. Henning Thielemann
Ich entwickle für meine Kunden wissenschaftliche Software.
Um was es da so geht, kann ich wahrscheinlich am einfachsten
an meinen bisher bearbeiteten Projekten verdeutlichen:
-
2018:
Entwurf und Implementierung einer
typsicheren Schnittstelle
von
LAPACK,
einer Bibliothek für effiziente numerische lineare Algebra,
zu Haskell.
-
2016-2017:
Entwicklung von zwei WWW-Schnittstellen zur Erzeugung von
"TopicExplorern"
und dem Sammeln von japanischen Blog-Artikeln.
TopicExplorer ist ein Projekt aus dem Bereich des maschinellen Lernens
am Institut für Informatik an der Martin-Luther-Universität Halle-Wittenberg.
Das TopicExplorer-System findet automatisiert charakteristische Themen
in einer großen Menge an Textdokumenten.
Unter anderem erlaubt das System,
die Entwicklung von Themen über die Zeit hinweg zu untersuchen.
-
2015-2016:
Für das Berliner Leibniz-Institut für Gewässerökologie und Binnenfischerei
IGB
entwickelte ich im Rahmen des Projektes "XenoCall" eine
automatisierte Erkennung
von Lauten des afrikanischen Krallenfrosches xenopus laevis.
Diese dient zur Auswertung von mehreren Gigabyte an Audioaufnahmen,
die bei mehrtägigen Versuchen anfallen.
-
2013-2014:
Für die Firma TetraVue
habe ich eine Sensorkalibrierung entwickelt
und diese zusätzlich auf eine GPU übertragen.
-
2013:
Für das
Ingenierbüro Guttenberg & Hördegen GbR
habe ich eine Bibliothek zur Energieflussanalyse grundlegend überarbeitet
und um zahlreiche zentrale Funktionen erweitert.
Als wissenschaftlicher Mitarbeiter des
Zentrums für Technomathematik
an der Universität Bremen habe ich unter anderem
-
für die Firma Mahr
einen Prototypen für eine Bahnsteuerung erarbeitet,
-
für die Firma Bruker Daltonics
eine Basislinienkorrektur für die MALDI-TOF-Spektrometrie entwickelt.
Zur allgemeinen Unterhaltung habe ich in Haskell einen
Web-Server entwickelt,
welcher andere WWW-Seiten in markante Dialekte
oder Fantasiesprachen übersetzt.
Das sogenannte "Parallelnetz" wird immer mal wieder
in Presse und Rundfunk vorgestellt.
Stärken
Meine Stärken sind:
- sehr disziplinierte Programmierung
- Kreativität
- analytischer Scharfsinn
- ein Blick für Fehler und Problemquellen
Technik
Funktionale Programmierung mit Haskell
Um wirklich diszipliniert programmieren zu können,
bediene ich mich am liebsten der Programmiersprache Haskell.
Die allermeisten gängigen Programmiersprachen
(C/C++, Java, C#, Python, PHP, Perl, Ruby)
sind imperativ, orientieren sich also im Groben daran,
wie die Mikroprozessoren arbeiten.
Funktionale Sprachen wie Haskell, OCaml, ML hingegen
orientieren sich an der Mathematik, insbesondere an mathematischen Funktionen.
Es ist daher möglich, Beweise zu führen,
dass ein Programm bestimmte Eigenschaften aufweist
oder bestimmte Fehler nicht enthalten kann.
Diese Beweise führt man mit Hilfe des Typsystems
und sie werden vor dem Fertigstellen eines Programmes
vom Haskell-Übersetzer geprüft.
Es ist (in gewissen Grenzen) also nicht möglich
fehlerhafte Programme auszuliefern.
Seine große Stärke spielt dieses Typsystem dann aus,
wenn man in einem großen Programm
eine ganz grundlegende Funktion ändert oder erweitert.
So eine Änderung kann Anpassungen
an ganz vielen Stellen des Programmes erfordern und mehrere Tage dauern,
aber wenn am Ende der Typprüfer grünes Licht gibt,
ist die Chance sehr groß, dass das Programm wieder einwandfrei läuft.
In herkömmlichen Sprachen gehen solche großen Änderungen meistens damit einher,
dass schon mal funktionstüchtige Teile auf einmal Fehler aufweisen,
oder dass aus Angst vor Fehlern große Aufräumarbeiten im Programm
ewig hinausgeschoben werden,
und so bekannte Fehlerquellen bestehen bleiben
und die Entwicklung neuer Funktionen immer schwerfälliger wird.
Freie Software
Bei freier Software geht es nicht um kostenlose Software,
es geht auch nicht um Hobby-Software zweifelhafter Qualität.
Es geht vor allem um Investitionsschutz.
Ein Anwender setzt ein Programm nicht einfach mal so ein
und morgen ein anderes.
Vielmehr wird er sich, manchmal über Jahre,
intensiv in die Programmbenutzung einarbeiten,
das Programm für seine Ansprüche einrichten
oder erweitern, falls es das zulässt,
wird damit Dateien erstellen,
die nur von diesem Programm verarbeitet werden können.
Und dann geht der Programmhersteller pleite,
oder verkauft seine Entwicklungsabteilung,
oder der Hersteller ändert seine Strategie grundlegend.
Nehmen sie zum Beispiel Adobe InDesign.
Über ein Jahrzehnt haben sich Anwender daran gewöhnt,
haben damit Dokumente gestaltet und sich über Tipps und Tricks ausgetauscht.
Dann führte Adobe ein Mietmodell mit Online-Zwang ein,
womit das Programm für etliche Anwender unzumutbar wurde.
Sie haben dann nur die Wahl: Friss oder stirb -
Bleibe bei einer alten Offline-Version und
werde von aktuellen Entwicklungen oder neuen Rechnergenerationen abgeschnitten,
wechsle zur Konkurrenz und
verliere den Zugriff auf alle deine bisher gespeicherten Dokumente
oder ergib dich dem neuen Online-Zwang,
und hoffe darauf, dass es keine weiteren Verschlechterungen geben wird.
Anderes Beispiel:
Das Programm MuPAD ist ein Computeralgebrasystem,
welches sich als preiswerte Alternative (ich glaube, etwa 150€)
zu den großen Systemen Mathematica und Maple etablierte.
Dann wurde es von MathWorks aufgekauft,
in das furchtbare MatLab integriert und zum gut siebenfachen Preis verkauft,
vergleichbar mit der Konkurrenz.
Gespeicherte MuPAD-Sitzungen wurden auf einen Schlag unlesbar.
Bei freier Software läuft das anders. Beispiel StarOffice:
Es hat mehrere Wechsel und Umbenennungen und Abzweige gegeben,
womit alle Versuche von Firmen wie Oracle abgewehrt wurden,
die Benutzer zu gängeln.
Die mit StarOffice und seinen Nachfolgern erzeugten Dokumente
lassen sich nach wie vor lesen und weiterverarbeiten.
Der langen Vorrede kurzer Sinn:
Zum einen benutze ich für meine Arbeit fast ausschließlich freie Software.
Das garantiert,
dass meine Programme auch in vielen Jahren noch benutzbar sein werden.
Zum anderen veröffentliche ich möglichst viele meiner Programme
und Funktionsbibliotheken als freie Software.
Andere Benutzer haben dann davon einen Nutzen,
bringen aber auch Erweiterungen und Fehlerkorrekturen ein.
Wenn ein Auftraggeber ein Bedürfnis an Schutz von Betriebsgeheimnissen hat,
so lasse ich die auftragsspezifischen Teile meiner Programme
für einen gewissen vereinbarten Zeitraum geschlossen.
Beratung
Ich muss nicht immer neue Projekte aus dem Boden stampfen.
Ich helfe auch gerne in anderen Projekten aus.
Sie suchen für Ihre Aufgabe eine verlässliche Programmiersprache,
welche Fehler vermeiden hilft und mit der man Programme langfristig warten kann?
Sie haben von den Vorzügen funktionaler Programmierung gehört
und erwägen einen Umstieg?
Sie haben bereits einen Umstieg probiert,
es tun sich aber größere Schwierigkeiten auf?
Sie haben bereits ein Projekt in funktionaler Programmierung entwickelt,
aber im Laufe der Zeit ist es sehr unübersichtlich geworden?
Ihr Projekt läuft so gut, dass Sie Verstärkung für Ihre Entwicklung benötigen?
In all diesen Fällen sind Sie bei mir genau richtig!
Das kann ich für Sie tun:
- Kritische Fragen stellen, die schon lange niemand mehr gestellt hat,
- Fehler in Programmen suchen und beseitigen,
- Programme so abwandeln, dass gewisse Fehler ausgeschlossen sind,
- Programmteile so strukturieren,
dass sie für verschiedene Anwendungen wiederverwendet werden können,
- Programmteile vereinfachen,
- Programmteile besser wartbar machen,
- Programmteile portierbar machen,
- Programme so strukturieren,
dass mehrere Entwickler reibungslos parallel daran arbeiten können,
- Entwickler zu neuen Programmtechniken, Spracherweiterungen
und Bibliotheken beraten,
- Entwickler zu Fehlervermeidungstechniken
und zur besseren Programmstrukturierung anleiten,
- neue Funktionen für Programme entwickeln
in Hinblick auf Fehlervermeidung und gute Programmstruktur,
- Vermittlung zu anderen Experten der funktionalen Programmierung.
Erfahrungen
Bei mir können Sie auf Erfahrungen mit funktionaler Programmierung
in Haskell seit 2003 zurückgreifen.
In dieser Zeit habe ich etwa 100 Pakete auf
Hackage
veröffentlicht.
Schon zuvor habe ich mich aber auf die Programmierung
mit ausdrucksstarken sicheren Sprachen wie Modula-3 konzentriert.
Meine Erfahrungen im Überblick:
- deklarative Hochsprachen: Haskell
- imperative Hochsprachen:
Modula-3,
Cluster (Amiga), C/C++, Python, MatLab
- (imperative) Maschinensprachen:
Z80-, MC680x0-, DSP56000-, x86-Assembler,
LLVM
- Computeralgebrasysteme: mathematica, mupad
- Seitenbeschreibungssprachen: HTML, HSC, PostScript, LaTeX
- Versionsverwaltungssysteme:
Darcs, Git, CVS, Subversion
Im allgemeinen bin ich an mathematischen Problemstellungen interessiert.
Spezialisiert habe ich mich dabei auf:
-
Audiosignalverarbeitung
- Wavelets, Subband-Coding, Lifting
-
Mathematische Notation
-
Maschinelles Beweisen
Kontakt
Ihre Fragen können Sie frei von der Leber weg an
richten.
Erstellt: | 2013-02-11 Henning Thielemann |
Mit HSC verarbeitet seit: | 2013-02-11 |
Zuletzt geändert: | 2020-06-08, 17:37 |
Meinung des HTML-Prüfers: |
|
Überwachungszustand: | |
|
|
Hier noch ein paar schwachsinnige E-Mail-Adressen zur Fütterung von SPAM-Adresssammlern.
Die Adressen sind mit Hilfe von Markov-Ketten zufällig aus realen Namen
zusammengewürfelt
und existieren mit sehr großer Wahrscheinlichkeit nicht.
|