Theory and Practice for computer science programs

(co-authored with Dr. Ioannis Pandithas)

Let us practice what we preach. This will not only give the world better applications, it will ultimately give the world better theory. (Donald E. Knuth)

I have a friend who is working in the computer software industry and he is responsible for the recruitment of his company. Each time we meet he keeps asking me the same question: “what on earth are they teaching in computer science programs? Graduates are completely incapable of writing a few lines of code”.

There is an ever increasing demand for software developers and it seems that the supply of skilled college graduates is not enough. Efforts like 42 in France and the vast majority of bootcamps around the world as well as the study on creating 500.000 information technology related jobs in Greece (CEPIS, 2016), support the previous statement. There are voices promoting practical skills and a few (McManus, 2012) even suggest to close down computer science programs. It seems though (McAllone, 2016) that bootcamps alone produce skilled workers on specific topics but are not enough for information technology professionals. People who lack any theoretical background and rely on practical skills only tend to produce inferior code and products. Computer science and other related degrees are still very important as they provide broader knowledge and build the necessary abstraction and analytical skills which cannot be acquired by just attending a technical course. It is true that there is a long distance between some academic programs and the industry needs, and this distance cannot be filled by relying on the student’s initiative only (Muller, 2015). As STEM can benefit from humanities instead of being isolated (Kaoni, 2016), practice will always be superior having theory as an underpin; Theory will get into better results taking advantage of practical experiments.

During his speech given in the ancient theatre of Epidaurus, Donald Knuth mentioned that “the discipline of computer science is one in which theory and practice are more intimately related than they are in any other field”. And he added that he was taking occasional leaves of absence in order to do practical work (Knuth, 1996). There is also evidence that practical work in theoretical course improved students’ academic performance, class attendance rate, self-confidence and interest in the topic (Wu et.al., 2014) and (Küppersa et.al., 2016) and Joel Spolsky (2005) prompts students to take programming-intensive courses.

Unquestionably, the future of our technological bloom will depend on computer systems. Computer programs will bear greater complexity and good understanding of the software engineering process and practice will be highly sought after regardless of the computer programming language and / or their framework. The stem of an accomplished programmer is the understanding of software engineering and this understanding is solidified via practicing on an actual application. The amalgam of thinking as a programmer and having a good number of code lines under one’s belt is what makes a good programmer a great one.

Hence, it is very important to integrate theory and practice for optimum results.

In New York College we value the importance of combining Theory and Practice, especially for a computer science program.

  • Any theoretical courses evolved in order to include practical sessions. Even math classes improved by adding topics in R and Matlab.
  • The necessary introductory classes on maths are connected to respective programming classes in order to make it clear where mathematics are necessary.
  • Students are encouraged to start building their online portfolio early on during their studies, demonstrating their work and skills on GitHub and similar online resources.
  • In some classes we experiment by injecting the parallel use of MOOCs so that the content of the class can expand and include more advanced topics.
  • Our instructors have sufficient practical experience in the industry, besides a strong academic background.
  • We complement courses and course assignments with clubs of interest on specialised topics, where like-minded students can meet and learn by using and sharing the technologies and tools they prefer.
  • The innovation and entrepreneurial spirit is gradually injected into our programs, by the existing benefit of joining STEM and humanities students, and by planning respective startup events.
  • We are permanently establishing relationships with several parts of the industry (including computer gaming, big data analytics focused on sports, robotics and automation, open source software communities, etc) in order to give the chance to students to practice, especially during their final project work.

So far we have noticed that our efforts are improving the qualities of our students. Our goal and consistent plans is to keep building a strong theoretical background based on practical knowledge and skills that can give to our graduates all the prerequisites for a successful career.

The measure of success of an academic process reflects on the feedback and career prospects of a school graduate. Adopting the “vocational” styled teaching we have observed that the Engineering and Computing graduates progressed further and farther both academically and professionally. The feedback they received from either their tutors at their postgraduate studies or their supervisors at work was positive. Furthermore, the vast majority of our graduates is currently active in their field of study both professionally and academically. They also have a portfolio to present that is complemented by their projects.

References

CEPIS (2016) Creating 500.000 jobs in Information Technology (in Greek), on their web site, [last accessed: Aug 10, 2016]

Kaoni A. (2016) The Dichotomy of STEM and Humanities is Misleading and Obsolete, Business Partners Online

Klabnik S. (2012) Theory and Practice, on his personal blog, [last accessed: Aug 12, 2016]

Knuth D. (1996) Selected papers on Computer Science, Cambridge University Press

Küppersa B., Dondorfa T., Willemsena B., Pfluga H., Vonhasselta C., Magreana B., Müllera M., Bischofb C. (2016) The Scientific Programming Integrated Degree Program — A Pioneering Approach to Join Theory and Practice, Procedia Computer Science vol.80

McAllone N. (2016) The truth about whether ‘coding bootcamps’ that can get graduates $100,000 exit salaries actually prepare you to be a programmer, Business Insider Tech

McManus J. (2012) More Universities Should Shut Down Their Computer Science Programs, on his personal blog [last accessed: Aug 11, 2016]

Muller G. (2015) Reflective Practice to Connect Theory and Practice; Working and Studying Concurrently, Procedia Computer Science vol.44, 2015 Conference on Systems Engineering Research

Spolsky J. (2005) Advice for Computer Science College Students, on his personal blog, [last accessed: Aug 09, 2016]

Wu H. Hsu P. , Lee C., Wang H., Sun C. (2014) The impact of supplementary hands-on practice on learning in introductory computer science course for freshmen, Computers & Education Journal 70