Härmel Nestra's thesis topics
ML module level programming compared to GHC type classes
How much are the powerful module level programming utilities of ML possible to be simulated by the GHC type classes and type families? (A similar question, in the other direction however, was investigated by Martin Pettai in his bachelor work in 2005.) The topic is suitable for bachelor students who are interested in functional programming.
Visualization of course materials
The saying that one picture tells more than a thousand words is not a bluff. The more can sequences of pictures, videos and interactive games tell. Good ability to communicate information justifies using pictures also in teaching. For instance, slide shows simulating various algorithms have gained an important position in the Algorithms and Data Structures course structure. These have been generated using a software written by Härmel Nestra. Hiie Vill's bachelor thesis from spring 2016 develops an extension of this software.
There is more to do on visualization of course materials.
- Creating a graphical user interface to the algorithm visualization system. This topic demands wider treatment since just creating a user interface is not enough for a bachelor thesis. For instance, the thesis might provide an overview of Haskell graphics libraries and compare them with Java graphics libraries from the usability aspect. The user interface for algorithm visualization system would be the main illustrating example.
- Visualization of materials of other courses. For instance, facts of various branches of mathematics might be well visualizable.
Mathematical computations
The aim of a bachelor thesis can be computing of a mathematical sequence/quantity farther/more precisely than achieved before, using mathematical knowledge together with the skills of computational optimization obtained during the studies. If good enough ideas arise, the topic may be continued in master thesis.
Presenting Facts of Category Theory with Detailed Proofs
The theoretical studies in programming are often carried out in the category theoretical framework. Category theory is a branch of mathematics that has been turned out to be general enough and convenient to "accommodate" results of theoretical computer science. In a diploma paper, one can choose some new results and present them with complete and detailed proofs (in source materials, proofs are often missing or contain large gaps, filling of which is left to the reader). There should of course be some explanations about applications of the chosen results in computer science.
Developing of BabyPython
Implementing a statically typed sublanguage of Python has been started in 2012 in Filipp Ivanov's bachelor thesis. The applications of this minilanguage (BabyPython) are expected to appear in introductory programming teaching. Static type system enables to report on type errors to the user during compile time. In the case of Python's dynamic type system, a program containing type error might be executed, whence type errors might be hard to discover and localize, in particular for beginners. The language under construction also restricts the syntax of python, excluding all too difficult constructs that are not suitable for using by beginners and might hinder learning the more important constructs. The syntax restrictions have many levels (enabling, for instance, take off restrictions step-by-step as the course goes on).
Firstly, the language created by Filipp Ivanov should be implemented completely. An additional aim would be integrating it into Thonny IDE that is developed by Aivar Annamaa. The topic is suitable for bachelor and master students who are not afraid of programming in Haskell (BabyPython has been implemented in Haskell).
Implementing Functional Programming Languages
Implementing functional languages is a much more advanced task than implementing their classic imperative counterparts. A functional "computer" must be much smarter because unlike in the case of imperative programs, programmers who write code in a functional language do not specify execution details themselves.
A thesis should provide an overview of efficient implementation of functional languages: problems that arise, their solving methodologies, differences caused by lazy and strict evaluation, differences from imperative languages, semantics etc., and provides of course a toy implementation. Depending on the comprehensiveness of treatment, the topic may be suitable for a strong bachelor student who is interested in functional languages and implementation of programming languages, or a master student.
Developing Web using PureScript
Programming languages for web development have been infamous for their insecurity. JavaScript is not the worst instance but nevertheless has its weaknesses. Recently, a new Haskell-like functional programming language PureScript has been created. It is compiled to JavaScript and it is intended for web development. A bachelor thesis should provide an overview of web programming using PureScript and contain a dynamic web site created using PureScript by the author. The topic is suitable for students who would like to create a web site on some topic and seeks a interesting new way of doing it.
Non-standard semantics of programming languages
A standard semantics of a programming language is one that describes the behaviour of programs more or less according to its real execution. Abstraction from details is allowed. A semantics deviating from such is non-standard. But even those semantics have applications. For instance, various collecting semantics are useful in proving correctness of program analysis. In his research, Härmel Nestra has studied transfinite semantics that depict execution of programs as continuing after infinite loops. Applications of such semantics lie in proving correctness of program transformations that remove or change parts of code in such a way that an infinite loop can be replaced with code that halts normally.
It is possible to study which transfinite semantics are suitable for the applications mentioned in the presence of various programming constructs (e.g. probabilistic commands, multi-threadedness, recursion). The topic is entirely theoretical and suits for postgraduate students who like mathematics and want to view programming through the prism of mathematics.