At Helsinki University of Technology, in Telecommunications Software and Multimedia Laboratory we give a course titled "Computer Networks". One of the learning objectives of the course is network programming and routing. Our philosophy of teaching is "learning by doing", which means in practice that one of the requirements for passing the course is a programming assignment. The programming assignment introduces the student to socket programming and gives the student the possibility to practice implementing simplified routing protocols.The solutions to the programming assignments have previously been demonstrated to assistants and the reports were submitted as paper printouts and all students have done the same assignment. The students have complained that the submission method is out-of-date and inappropriate for a course about computer networks since the course curriculum includes many examples of applications that could be used to submit the assignments over the Internet.To answer the above requirements and to reduce the work load of the course personnel without hindering the students learning process, we are implementing an online learning environment for the Computer Networks course. This system creates and sends individual assignments for students, accepts solution submissions via the Internet, and, finally, checks them automatically. The system also notifies the students of possible mistakes in their solutions. This way, the students can learn from their mistakes and fix them and resubmit the corrected solutions. The goal of the implementation is that the teacher only needs to start the system when the course begins and verify the assignment results when students have finished their work.We can achieve multiple learning objectives simultaneously with this online learning system. The students learn how to implement simple user authentication, how to implement real working network programs for the Internet with different application programming interfaces (APIs), and learn how to apply the routing theory into practice. The submission using the Internet frees students from the boundaries of time and place since course assignments can be solved when and where students want to do them. Automatic correction gives fast feedback and allows students to learn from their own mistakes because they can still remember what they have done.The course provides a server and students implement corresponding client software to contact the server. In this phase of the assignment, students rehearse their knowledge of concurrent network programming. The server emulates a network that has several routers. A student's client represents one router whose routing table is calculated on the basis of the information sent by the server. The server can send routing data that is based on simplified versions of routing protocols such as distance vector or link state protocols. In other words, the second phase of the assignment is for learning routing in an internetwork.We believe that our system will have strong positive impact on learning results. Routing is one of the most difficult concepts related to computer networks. Theoretical studying alone does not help to understand the real practical problems. In addition, our system allows combining theory and practicalities since theory presented in the course lectures can be immediately applied in students' own work in a very concrete way.