Ralf LämmelSoftware Languages Team
University of Koblenz-Landau, Germany http://www.softlang.org/
Making a failing project succeed?!
© 2010-16 101companies Project
101companies is asoftware chrestomathy
Chrestomathy; Greek vs. English
chresto — useful
mathein — to learn
A chrestomathy collecting software systems
© 2010-16 101companies Project
Chrestomathies in linguistics and philology
A collection of literary passages in typically one language from
one or more authors compiled by one or more chrestomathy authors as an aid in learning a language.
© 2010-16 101companies Project
Program and software chrestomathies
The Evolution of a Haskell programmer99 Bottles of BeerOO ShapesRosetta CodeBeautiful CodeNOPThe Computer Language Benchmarks Game
101companies (The `101’ project)
http://softlang.uni-koblenz.de/chrestomathy/
© Ralf Lämmel, 2015, Software Languages Team, Faculty of Computer Science, University of Koblenz-Landau
http://www.roesler-ac.de/wolfram/hello.htm
© Ralf Lämmel, 2015, Software Languages Team, Faculty of Computer Science, University of Koblenz-Landau
99 bottles of beer
© Ralf Lämmel, 2015, Software Languages Team, Faculty of Computer Science, University of Koblenz-Landau
The evolution of a Haskell programmer http://www.willamette.edu/~fruehr/haskell/evolution.html
Freshman Haskell programmer
Sophomore Haskell programmer, at MIT
Junior Haskell programmer
Senior Haskell programmer
Memoizing Haskell programmer
Pointless Haskell programmer
Iterative Haskell programmer
Accumulating Haskell programmer
Continuation-passing Haskell programmer
Boy Scout Haskell programmer
Combinatory Haskell programmer
List-encoding Haskell programmer
Interpretive Haskell programmer
...
Implementing factorial
© Ralf Lämmel, 2015, Software Languages Team, Faculty of Computer Science, University of Koblenz-Landau
$ more Program.java
class Program {
public static void main(String[] args) {
}
}
$ javac Program.java
$ java Program
$
NOP in Java
© Ralf Lämmel, 2015, Software Languages Team, Faculty of Computer Science, University of Koblenz-Landau
NOP in Python (interpreted)
$ more Program.py
$ python Program.py
$
© Ralf Lämmel, 2015, Software Languages Team, Faculty of Computer Science, University of Koblenz-Landau
NOP in Python (scripted)
$ more Program.py
#! /usr/bin/env python
$ ./Program.py
$
© 2010-16 101companies Project
What’s 101?
“101” is short for “101project” which is short for“101companies Project”
“101companies” refers to “101 ways of building a Human-resources management systemfor a conceived company”.
© 2010-16 101companies Project
What’s 101? 101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
A conceived human resources management system (HRMS) to be
modeled and implemented time and again, thereby collecting community knowledge about
software languages, technologies, and
concepts
What’s 101?
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
Data model with companies, departments, and employees. Functional requirements such
as “salary total”. Non-functional requirements such
as “distribution”.
What’s 101?
© 2010-16 101companies Project
What’s 101? 101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
Mostly, these are implementations of the
101system; they vary in the following dimensions:
• Used programming languages• Used libraries/frameworks• Implemented features sets• Applied design patterns• ...
What’s 101?
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
What’s 101?Company X:
Swing + JDBC
Company Y: SWT + Hibernate
Company Z: GWT + MongoDB
...
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
What’s 101?
Different featuresDifferent designs
Different technologiesDifferent languages
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
What’s 101?
Technologies / Languages
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
A confederated (GitHub-based) open-source
repository which holds all code artifacts:
• Code for contributions• Other illustrative code• Infrastructure of 101• Version history of 101wiki• ...
What’s 101?
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
What’s 101?Files of a contribution
© 2010-16 101companies Project
What’s 101? 101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
A highly structured, semantically enriched, and
linked-data enabled wiki for text and triples along different namespaces:
• Docs for contributions• Feature model of 101system• Entries for sw languages• Entries for sw technologies• Entries for sw concepts• ...
What’s 101?
© 2010-16 101companies Project
101wiki’s namespaces4 Software Languages Team, University of Koblenz-Landau
Fig. 1. Namespaces managed on the 101wiki (shortlisted).
2.3 The 101wiki
The wiki comprises of wiki pages, which in turn break down into sections, whichmay also be addressed, in principle, in a URI-based manner. Pages refer to eachother via plain links or semantic properties (see below). All pages are organizedin namespaces to distinguish major content categories on the wiki; see Figure 1.
The namespace-based organization of the 101wiki and the virtual layout ofthe 101repo are designed to be in sync. That is, the top-level folders of the repocorrespond to the namespaces on the wiki. The second-level folders of the repocorrespond to the member pages on the wiki. Beyond that level, all files andfolders are conceptually associated with the member page.
2.4 Semantic properties
Recently, the 101wiki has been turned into a semantic wiki, inspired by SemanticMediaWiki [10]2. Semantic properties are used specifically for assigning ‘types’to links. Consider, for example, the following links as rendered on the 101wikipage for the Prolog language:
‘this’ proxies for the current page (i.e., the page for Prolog). There are threelinks in which ‘this’ is involved. First, ‘this’ is said to be an ‘instance of’ theconcept ‘Logic programming language’. Second, ‘this’ is said to be an ‘instanceof’ (as in ‘element of’) the namespace ‘Language’. Third, a certain contribution,i.e., ‘prologStarter’ is said to ‘use’ ‘this’ (i.e., Prolog). The first two links (with
2 http://semantic-mediawiki.org/
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
What’s 101?A wiki page
for a contribution
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
What’s 101?
Top 2 sections ofthe earlier page
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
What’s 101?
The metadata section ofthe earlier page
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
An open, extensible, computational infrastructure for analyzing 101repo&wiki
and synthesizing information:
• Dump of 101wiki• Facts extracted from 101repo• Inferred metadata of 101repo • ...
What’s 101?
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
What’s 101?Derived metrics data
for a source file
{size: 769,loc: 25,ncloc: 26,relevance: "system"}
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
A linked data layer on top of 101 to surface all entities in a systematically discoverable
and connected manner:
• List of all namespaces ➭ List of namespace members ➭ List of subfolders and files• Links to GitHub, 101wiki, ...• Support for JSON, RDF, HTML• ...
What’s 101?
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
What’s 101?Members of
contributions namespace
© 2010-16 101companies Project
What’s 101? 101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
Members of contributions namespace
© 2010-16 101companies Project
What’s 101? 101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
The root folder of a contribution
© 2010-16 101companies Project
What’s 101? 101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
Fragments of a particular source file
© 2010-16 101companies Project
101 = 101system+ 101contributions+ 101repo+ 101wiki+ 101worker+ 101explorer+ 101people+ ...
Various stakeholders:
• Contributors (development)• Technologists (demonstration)• Ontologists (formalization)• Teachers (utilization)• Learners (utilization)• ...
What’s 101?
© 2010-16 101companies Project
What’s 101 good for?
© 2010-16 101companies Project
What’s 101 good for?The guide through the software galaxy
Technology comparison
Programming education
Test-harness for language technology
Feature detection
Fact extraction
…
© 2010-16 101companies Project
The Hitchhiker's Guide to the Software Galaxy
Wannabe Wikipedia for Software Developers. :-)
What is 101 good for?
© 2010-16 101companies Project
Too much software technologies. Too much software languages.
Too little time.
101 supports examples, abstractions, and analogies.
EMF
SQL
TENEO
Java
XSD
DOM
Antlr
OWL
UML
XMI
Ecore
SQL DDL
XLSTSaxon
Hibernate
Awk
Json
Yacc
JAXP
RestOWL
RDF
ATOM
SparQLXSLT
DTD
BNF
XSD
OCL
Prolog
grep
MOF
OMG
QVT
jDOMRose
Protegé
XQuery
ODM
XMLSpy
JPA
JAXB
JDBC
ODBC
MySQLArgoUML
Jean
Jena
Jena
Ralf
Dragan
TXL
VLDB
EMF.gen
ORACLE
TCS
XText
Teneo
Jersey
GWT
Sesame
Stratego
XPATH
JeanBeans
UTF8
ASCII
RDFa
RDF(S)
RDFS
CFG
LALR
ER
SLE2010xerces
xalan
saxonsax
sed
XSD
JMI JMF
SBVR
What is 101 good for?
© 2010-16 101companies Project
101 is a knowledge resource for technological space travel.
http://upload.wikimedia.org/wikipedia/en/thumb/6/66/E_t_the_extra_terrestrial_ver3.jpg/220px-E_t_the_extra_terrestrial_ver3.jpg
© 2010-16 101companies Project
101 is a knowledge resource for technological space travel.
Sesame
XMIModelwareXMLware
JavawareJDBC
Dataware
JDOM
Ontoware
JenaHibernate
EMF.genJMITeneo JAXB
JPA
© 2010-16 101companies Project
101 is a knowledge resource for technology comparison.
© 2010-16 101companies Project
101 is a knowledge resource for programming education.
• Lecture First steps• Lecture Basic software engineering• Lecture Searching and sorting• Lecture Basic data modeling• Lecture Higher-order functions• Lecture Type-class polymorphism• Lecture Functors and friends• Lecture Monads• Lecture Parsing and unparsing• Dry run for final• Lecture Generic functions• Final
Figure 9. Lectures in the functional programming course.
6.2 Course contentMost of the content is readily available via the wiki pages for con-tributions, concepts, and others. The only course-specific content isthe lineup of all lectures and per-lecture scripts for the itemized andlinked content of the lectures.
Figure 9 shows the lineup of the lectures for the course. Twolecture slots are repurposed for the final exam and its dry-run. Inthe next edition of the course, we expect to make space for anextra lecture slot, in which case we plan to cover functional datastructures as an additional topic.
Figure 10 shows a particular lecture script, as it is rendered onthe 101wiki. Thus, each lecture comes with a headline (a title), asummary, a longer list of concepts, and a shorter list of 101haskellcontributions covered by the lecture. This also clarifies the modusoperandi of the lecturer: the listed concepts are illustrated in someorder; the listed contributions are eventually explored. The exactorder is unspecified; it may be influenced by the dynamics ofthe lecture. If time turns out to be insufficient, some concepts orcontributions may also be delegated to the lab.
6.3 EvaluationThe authors’ university runs evaluations for all courses. However,student participation in the polls is voluntary. The questionnairesare relatively complex, which may add to the low turnout. 10 outof 73 enrolled students submitted their scores for the functionalprogramming course. All results are available from this paper’swebsite. The authors’ experience with other introductory courses(first or second semester) suggests that these courses tend to beless well received. (A significant percentage of students cancelstheir studies during this period; there is no ‘numerus clausus’ forcomputer science.) The present course received mostly favorablescores. The course received an overall score of 2.3 (‘good’) on a1-5 (very good to insufficient) scale.
In Figure 11, we show poll results for a question related tothe use of practical examples. We take the results to mean thatthe balanced use of the 101system as the running example wasappreciated.
The written final contained basic tasks for the first seven lecturetopics of Figure 9 and almost all the students succeeded in theexam. (This is rather surprising for a first/second semester course.)As we have not held the course previously, we cannot comparelearning results.
7. Related workWe set up a scope for the related work discussion. The presentpaper is concerned with aggregating, organizing, accessing, andmaintaining knowledge in the programming domain, to be useful,
Figure 10. The script for a lecture on higher-order functions.
�53*���5���%0*��>11)0���582(0%+)2�()5�*82/7-32%0)2��53+5%11-)582+
������ �9% <6��86:)5782+ )-7)�
�)5��-)��),5)2()�,%7�)-2)2�*0@66-+)2�82(�/0%5)2 45)',67-0�
75-**7�9300�=875-**7�+%5�2-',7�=8 2�1:����6���
�
�
�
�
�
�
��
�
��
�
�)5��-)��),5)2()�:%5�&)5)-7��%8*��)67%0782+69356',0>+)()5� 78(-)5)2()2�)-2=8+),)2�
75-**7�9300�=875-**7�+%5�2-',7�=8 2��1:��6�������
�
�
�
�
�
��
��
�
��
�
�)5��-)��),5)2()�)5187-+7)�(-)� 78(-)5)2()2�=8�3**)2)2�-6/866-32)2�
75-**7�9300�=875-**7�+%5�2-',7�=8 2� 1:� ��6�������
�
�
�
���
�
���
���
�
���
�
�)5��-)��),5)2()�+%&�%8*��)-75>+)�()5� 78(-)5)2()2�)-2,-0*5)-',)6��))(&%'/�
75-**7�9300�=875-**7�+%5�2-',7�=8 2��1:����6�������
�
�
�
�
�
���
���
�
��
�
�2:)2(82+6��82(��5%;-6&)=8+�2:)2(82+6��82(��5%;-6&)=8+
�1��%,1)2�()5�")5%267%0782+�-67�)6�+)082+)2��)-2)2�)=8+�=:-6',)2�7,)35)7-6',)1�#-66)2�82(�()66)2�2:)2(82+�,)5=867)00)2�
75-**7�9300�=875-**7�+%5�2-',7�=8 2�1:� � 6���
�
�
�
��
�
�
��
�
��
�
�-)��2,%07)�()5�")5%267%0782+�:85()2�-2�%2+)1)66)2)1!1*%2+�(85',�45%;-62%,)��)-64-)0)��=����26',%882+61%7)5-%0���%00&)5-',7)�)7'���9)5%26',%80-',7�
75-**7�9300�=875-**7�+%5�2-',7�=8 2��1:���6�������
�
�
�
�
�
���
�����
�
�����
�
�',�:85()�=85�/5-7-6',)2��86)-2%2()56)7=82+�1-7�()2�2,%07)2�()5�")5%267%0782+�%2+)5)+7�
75-**7�9300�=875-**7�+%5�2-',7�=8 2��1:� 6������
�
�����
�
�
�
����
�����
�
����
�
�)-2�#-66)2667%2(�-67�2%',�()5��),59)5%267%0782+:)6)270-',�,?,)5�%06�935,)5�
75-**7�9300�=875-**7�+%5�2-',7�=8 2�1:� ��6���
�
�
�
��
�
�
��
�
�
�
�8*:%2(�%2�$)-7�82(��5&)-7�67%2()2�-2�%2+)1)66)2)1")5,>072-6�=81��)52)5*30+�
75-**7�9300�=875-**7�+%5�2-',7�=8 2�1:� ��6��
�
�
�
��
�
�
��
�
��
�
#)-7)5)��5%+)2�=85�")5%267%0782+#)-7)5)��5%+)2�=85�")5%267%0782+
�',�,%&)�()2�(-)��),5)2()�2�%8A)5,%0&�()5�")5%267%0782+�/327%/7-)57�2�.% �
2)-2 ��
#)22�.%���-7�()5��55)-',&%5/)-7�()6�()5��),5)2()2%8A)5,%0&�()5�")5%267%0782+)2�:%5�-',�=8*5-)()2�
75-**7�9300�=875-**7�+%5�2-',7�=8 2�1:��6�
�
�
�
�
�
�
�
�
�
�
#)22�.%���8',�%8A)5,%0&�932�")5%267%0782+)2�:85()2�5%+)2�(85',�()2�(-)��),5)2()�2�=8*5-)()267)00)2(&)%27:357)7��
75-**7�9300�=875-**7�+%5�2-',7�=8 2�1:��6�
�
�
�
�
�
�
�
�
�
�
Figure 11. Course evaluation: satisfaction of the students withpractical illustrations on 1-6 scale (higher is better).
specifically, for learning. Our approach is worked out well in thefunctional programming context.
MOOCs Massive open online courses (MOOCs [36, 48]) providea ‘content delivery model’, which optimizes the aspects of accessi-bility of course content and group experience. Our research focusesinstead on ontology development and knowledge integration.
E-Learning Semantic enrichment of teaching content, is alsoan established idea in E-learning [31, 32]. Our approach makesan original contribution in so far that external resources andchrestomathy-based source-code examples are integrated as well.
A functional programming
course
© 2010-16 101companies Project
101 is a knowledge resource for programming education.
Concept coverage of contributions
Terms in [46] only: Local scope, Value, Complexity, Proof , Calcula-tion, Equational reasoning, Head, Equality, Programming, Queue, Ar-gument, Result, Base case, Partial application, Program, Tuple, Set,Program design, Type checking, Higher-order function, Name, Alge-braic data type, Infinite list, Float
Terms in [21] only: Haskell script, too generic term, Equation, Func-tion application, Parser combinator, Identity element, Declaration,Function definition, Product function, Lambda abstraction
Terms in [39] only: Foreign function interface, Predicate, Opera-tor precedence, Polymorphism, Thread, Performance, MVar, Profiling,TCP, Directory, Property, Loop, Technology:Parsec, Parsing, Monadtransformer, Pointer, Technology:HPC, Type system, User interface,Language:XML, Core, Technology:Glade, Exception, Error, Process,Type signature, Type definition, Program optimization, Data type, Tech-nology:GHC, Pure function, Association list, Query, Output, UDP, Ta-ble
Terms in [34] only: Fmap function, Accumulator, type-class instance,Functor, Data structure, Monadic value, Import, Factorial, Zipper,Condition, Expression, Sum function, Applicative functor
Terms in more than one book: Monoid, Character, Type-class in-stance, Bit, List comprehension, Testing, Fold function, Operator, Lazyevaluation, Recursion, I/O system, Number, State, Input, Haskell pack-age, Type, String, Type class, Random number, Tree, Command, Parser,Filter function, Code, Data constructor, Pattern, Integer, Database,Catamorphism, Evaluation strategy, Action, Technology:GHCi, Text,Tail, Regular expression, Map function, Language:Haskell, Induction,Function, Pattern matching, Prelude, Stack, Eager evaluation, List,Maybe type, Monad, Module, Guard, Boolean, File
Figure 7. Comparison of the different Haskell textbooks
Figure 8. Vocabulary usage for [21] at a given point in time.
Figure 8 illustrates monitoring of vocabulary usage. Such ta-bles are computed from a given state of the wiki. Derived terms(shown here for one book only) are listed vertically and ordered bythe number of referring contributions. Contributions are listed hor-izontally and ordered by the number of referenced terms. The bigbullets indicate direct references, whereas the small bullets reporton indirect references. For each term, the counts of directly and in-directly referring contributions are shown. For each contribution,the counts of directly and indirectly referenced terms as well asuniquely (directly) referenced terms are shown. For brevity, the ta-
ble is cut off horizontally and vertically not to show more terms andcontributions without any direct references.
Such monitoring tables can be used to drive improvement ofcoverage/interlinkage. We use guidelines as follows. Each reifiedtextbook term should be referenced directly by some number ofcontributions (e.g., 1). Each contribution should refer directly tosome number of terms (e.g., 3). Each contribution should referuniquely to some number of terms (e.g., 1).
Clearly, the figure shows the situation at a point in time, whennot yet many textbook terms are directly referenced. Thus, the fig-ure suggests that the cut-off terms need to be referenced from ex-isting contributions, or perhaps suitable contributions are missing.Likewise, the cut-off contributions need to be better linked to thevocabulary, unless they address concepts out of the scope for thebook at hand.
6. A chrestomathy-based course101haskell, as described in the present paper, was used in an intro-ductory functional programming course during summer semester2013 at the authors’ university.12 (2/3 of the students were in thesecond semester and had already basic Java programming skills.The remaining students were in the first semester.) The presentsection describes the underlying teaching concept, motivates desig-nated course content on top of 101haskell, and discusses a limitedcourse evaluation.
6.1 Teaching conceptWe highlight aspects that set apart the present teaching conceptfrom common practice. These aspects relate to the use of the101haskell and infrastructure of 101.
“Favor live programming.” Most of the lecture time is dedicatedto live programming, where all relevant concepts are systematicallyillustrated. The list of concepts for each lecture is published onthe 101wiki. The illustrations given during live programming areessentially variations on the illustrations readily available on thewiki. More complex examples, such as non-trivial 101haskell con-tributions, are not developed from scratch. They are readily demon-strated, as available from the 101repo. Slides are not used. Someamount of wiki content may be projected, though. Also, 101wikipages may contain embedded media.
“Embrace multiple external resources.” Past teaching experi-ence has suggested that our students are hardly willing to followgiven textbook recommendations; instead, unstructured search ispopular. In this course, we respond to this attitude by helping thestudents leverage available online resources more systematically.In particular, Wikipedia, HaskellWiki, and Haskell textbooks arereadily linked from the course material, as discussed in §5.
“Complement the running example.” The lectures spend consid-erable time on explaining all concepts with the help of diverse, ba-sic examples which are unrelated to the 101system. Even these ex-amples are available through the 101repo. Implementations of the101system serve typically as less basic illustrations. The home-work assignments are not necessarily tied to the 101system. Occa-sionally, an assignment could be concerned with the modificationof a given contribution.
“Open source and open linked data.” Absolutely all course ma-terial is open. Reuse in courses and collaborative advancement isappreciated and straightforward. In particular, reuse does not causeany copyright issues whatsoever because lecturers may reuse wikicontent and repo content simply by linking to it, without copy-and-paste as needed for slide-based reuse.
12 http://101companies.org/wiki/Course:Lambdas_in_Koblenz
© 2010-16 101companies Project
101 is a playground for student projects.
Machine learning for document structure
Clustering to find relevant API subsets
IR (IDF etc.) to check wiki completeness
Cosine/Spearman-based similarity of code
Feature location and machine learning
Comment sentiment analysis
© 2010-16 101companies Project
How is / was the project failing?
The contribution process is unclear.
The quality of the contributions “varies”.
We stopped attracting more contributions.
Several capabilities became defunc.
© 2010-16 101companies Project
How / why was / is / will the project succeed(ing)?
Several papers leveraged the project.
There is increase in # students on the project.
Several courses depend on the project.
This Dagstuhl is quite inspiring / helpful.
© 2010-16 101companies Project
Thanks!