The Python workshop on November 19-20th at the EITN was the first course organised at European Insitute of Neuroscience in Paris. The course offered a practical introduction to Python programming and scientific software development for PhD students and post-docs. The programme followed closely the syllabus recommended by the Software Carpentry.
To ensure the best learning environment, we offered only limited number of seats at the course. Soon after opening the registration we reached the maximum of 35 registered participants from across several disciplines (physics, biology, neuroscience). Most students were from around Paris, but a few also came from other French universities (Lyon) and abroad (Belgium). This included mostly students working towards their PhD degree, then post-docs and four faculty members and one undergraduate. The experience with programming was quite widely distributed from people with no prior experience to seasoned programmers, who wanted to switch from another computer language (such as Matlab, C/C++ or R).
The course consisted of four separate modules each run by one instructor (Andrew Davison, UNIC, CNRS; Konrad Hinsen, CBM, CNRS; Marcel Stimberg; IdV, INSERM; Bartosz Telenczuk, UNIC/EITN, CNRS), who were helped by five teaching assistants (Loïc Estève, NeuroSpin, INRIA; Domenico Guarino, UNIC, CNRS; Detlef Holstein, UNIC, CNRS; Alexandre Kempf, UNIC, CNRS; Maria Teleńczuk, IdV, INSERM). The detailed schedule and materials are available from course website.
In the morning of the first day, instructors and assistants helped to install the Python software on three main operating systems (Windows, MacOS and Linux) and solved common installation problems. For most participants this worked quite well and they were ready to follow the lectures and do the exercises on their laptops. The minor glitches were only in choosing the right version of the anaconda installers (32- or 64-bit) and installing nano editor on Windows (the software carpentry installer did not integrate with the Git Bash installation). Some students had problems with their system python/git/bash, but they were resolved after following the installation at the website. We also provided a back-up solution when the software could not be installed due to system configuration issues (virtual machine), but no one had to use it.
The first tutorial was given by Marcel Stimberg, who presented how to automate common tasks using "bash" shell. He started with the very basic operations on the file system and introduced a text editor used for the rest of the course (nano). He then moved to more advanced topics, such as creating pipes, iterating over files and writing simple bash scripts. Although the time did not allow to cover some topics such as finding files, for many participants this was a first introduction to the command-line interface of operating systems, and others enjoyed the systematic overview of shell commands and their options.
The afternoon session was led by Konrad Hinsen, who covered the basic syntax of Python language and scientific programming in Python. He started with reading data from external files, calculating various statistics and plotting the results. The switch from shell to Python was too quick for some students, so Konrad slowed down to allow them to catch up before more advanced topics were introduced. In the second part of his lecture, he discussed parsing data from text files, using for-loops in Python and defining functions. He also presented several programming tools and editors for Python and highlighted their benefits and drawbacks. Although the participants appreciated this introduction and most of them stayed long after the planned closing time of this session, it was definitely too short to dig deeper into the Python environment. In the future, we might offer a follow-up workshop covering these more advanced topics. We ended the day with a pleasant get-together in a local pub which allowed more informal interactions between students and faculty.
The second day was opened by Andrew Davison who gave an introductory lecture to keeping track of file versions with git. He led the participants methodically through configuring git, setting-up first repository, adding files to the repository and working with git locally. He introduced all topics with illustrative examples and he left time for participants to replicate all the steps on their computers. He then used entertaining role-playing of Dracula and Wolfman to show how to use git for collaboration using remote repositories and GitHub and also how to merge different version of the files shared by the collaborators. As for other modules the three-hour session was not enough to cover advanced features of git (like branching), but Andrew left the students more comfortable with basic git commands for everyday use.
The course was closed by a tutorial by Bartosz Teleńczuk, who re-visited programming in Python language and presented how to work with structured data using a popular Python library called pandas replacing the standard SQL lesson of SC syllabus. As a continuation of the morning lecture he started with a demonstration how to contribute to existing open-source projects, such as pandas or numpy, on Github. The participants could work on their version of the materials he shared on GitHub and solve the included exercises. He used an interactive environment called IPython notebook, which minimised the problems with the initial setup while allowing to responding interactively to participants' questions. Apart from the basics of pandas, he covered Python's dictionaries and various ways of array indexing. Again the limited time did not allow to discuss more advanced topics, but the students were offered some starting pointers for self-study.
For most instructors and helpers this was the first experience with a Software Carpentry workshop. They praised the general quality of the SC materials and most students appreciated the steady flow of the lessons. Many students enjoyed the practice-oriented introduction to programming in Python, but some would prefer a more classical overview of the language syntax. The students did not use the post-it notes as instructed — they either didn't use them at all or kept the green one sticked to their laptops at all times (we used green for completed task and red to signal a problem/question). Perhaps next time we could instruct helpers to encourage students to use them more. The logistics worked quite well thanks to a good local team (4 people: one for the website and coordination between speakers and helpers; one resposible for finances and venue; one taking care of the registarations, bookings and coffee breaks; and one for IT support). On the first day we had nearly one hour of delay because the speakers lunch draged out much past the planned 1.5h slot, which was bad for the general atmosphere of the afternoon session. The programming experience of the students was quite broadly distributed — from no experience at all to experienced programmers, which made it difficult to adjust the level. From the initial feedback we learnt that the novice programmers enjoyed the course a lot, but for advanced participants it might have been too slow and too shallow (we didn't get much negative feedback, but this is probably due to the response bias). We didn't ask for interim feedback during the classes, but next time it might be better to ask for feedback before each coffee break.
In general, the atmosphere of the workshop was very friendly and informal allowing for many interesting exchanges between students and the faculty. Everyone agreed that such courses should be continued in the future both at the beginner and more advanced levels.