Almost ten years ago, I have started to teach Software Engineering at the Frankfurt University of Applied Sciences. Since 2012 I'm giving two courses there, Software Engineering and Distributed Systems. Both courses were offered in English for international students as a part of their master program.
I was thinking about the best way for students to learn these two extremely important computer science topics. I'm aware, Software Engineering can be learned at any Computer Sciences university. But I’ve been in in the software industry for a very lomg time and know many stories about universities and software development. Most (possibly all) managers and software lead developers are not impressed by student skills learned at universities. There was traditionally too much theory without relation to real live software requirements. Technologies that are learned are usually too old and not appliable. I was studying in former Yugoslavia and later in Germany and finally in the UK. So, I have experienced education systems in the eastern and western European hemisphere in three languages. I think I learned a lot about different education systems and was ready to combine the best of all.
Back in 2012, I was already a long-term Microsoft Most Valuable professional for technology stack internally called Connected Systems and had almost 20 years of experience as a developer, architect, speaker and author. My motivation was to use a chance at the university and design these two courses the best possible way, for students. It was a nice feeling to be demanded to create the content, but I was not alone. There was a system influencing many things.
In software engineering students typically learn UML, documentation, framework and many other useful and unuseful things. For example, if you know a lot about Sequence Diagrams it does not make you a developer or architect. Nobody will pay you for making diagrams. Even more important, you cannot deeply understand a sequence diagram if you never tried to integrate two or more software systems that are incompatible to each other. Also, you cannot be a software architect if you have not been a developer, for a long, long time. This is definitely my lesson learned. Thias is even a hardly learned lesson after tons of diagrams and millions of lines of code.
I think, the best way to learn software is make the software. And the best way is to learn it exactly as professionals would do. I’m not saying that everything is perfect what professionals and professional technologies do (believe me, it is not), but students should learn real things, the good ones and also bad things = real things.
So those days I designed the Software Engineering course with a focus on Microsoft Solution Framework, starting with Waterfall and Rational Unified Process. And all this with .NET 3.1 and C# (the year 2012 +/-). Everybody asked me why C#? Why Microsoft? I explained that it is one of the most popular frameworks on the planet. At every university we learn Python, C++, JAVA. In the real-life, most of the new software in the industry today is not written in C++ and Python. JAVA is a great one, but C# and .NET too. So, why universities in the world do not offer more of C?. I’m not saying that is the best language because there is no best language. Every language has a purpose. If you work especially as a software engineer in Germany (just an eample) you will most likely have to do something in .NET.
Last but not least, I’m Microsoft Most Valuable Professional and Regional Director, so I know something about that platform. I think it is ok, that Students learn from people who are engaged in the development of the software platform and who use it every day in real-life project.
In the beginning, students learned in my SE course how to build SOAP web services, then REST web services. After that (approx. 2015-2018), we shifted the focus to IoT and later (>2019), step by step we landed to the cloud and AI. In 10 years the content of my courses changed as the industry change. This is not easy for me and also not easy for students, but it is real. It is also a lesson that students need to learn. Technology is changing very fast.
In the course Distributed Systems, students learned about messaging, integration, architecture styles and Azure Service Bus. Lot of messaging, lot of concurrent and parallel execution.
But my problem was the exam. The students were required to pass the exam, which is reasonable, because we think that way. I did my best to define the exam questions to be as realistic as possible. I defined a pool of questions, and the exam board has chosen 50% of them for the examination. I have to say, this was not a good idea. Why? It was not realistic to check the knowledge by multiple choice questions or similar. I designed exams as we at Microsoft design certification exams. Many of my MVP fellows are engaged in Microsoft exam design. We talked a lot about the best way to check the knowledge. And, I have given up. I know that we today still have such official exams, also at Microsoft (and also all other have them). But, this is wrong. It is not real and I hope we will find better ways.Why do I have to learn to write a code if questions can be answered by using another more efficient learning technique? The best learning way is combination of theory and learning on doing.
I believe, the theory helps to learn a lot from experience of others and doing itself has an unforgivable effect on the brain. This is how our brain work, which is a field of my research.
For this reason I changed the examination for both my courses at the university. There is no exam anymore. Students must do projects and I track the progress togehter with my assistants. Period, for period, for period. Developers, developers, developers.
I teach the theory including exercises for three months and then help students to do their projects for the next three months.
The Software Engineering course changed over time. Today this course includes modules about Scoping projects, Scrum, Git and C# .NET 5.0 today. All student projects in Software Engineering are related to artificial intelligence.
For all our communication we use Linked-In private group and GitHub repositories (It is free for universities). So, no paper at all. We have been digital from the begining. Today both courses are delivered via MS-Teams. This is different than before COVID time, but everything else is same.
Some projects can be done in a group and some projects are individual projects. That means, every students must be able to work alone and in the team. We implement ML/AI algorithms .NET/C# and we experiment with algorithms. So again, everybody asked me why C# and not Python? Because you can learn AI and Python everywhere, but nowhere AI and C#. Does this make a sense? Ohh, yes believe me. There is no any customer who pays you for AI. Customers want solutions for their problems. And if the majority of problems is solved in JAVA or .NET, then the Python might not be very helpful in that ecosystems. Similar, if you want to read a book, which is originally written in Russian, your are most likely not going to learn Russian language. You will rather wait on translation of the book, for a good reason.
Finally, the original course Distributed System was changed a year ago into Cloud Computing. After students complete the Software Engineering they learn how to use the cloud (in this case Microsoft Azure). And again, why Azure? So to save 1000 words, here is a picture that explains why.
In this course, we learn about compute, data, storage, containers etc. The students are required to scale their already completed Software Engineering AI project by using cloud services. They briefly migrate their existing project to the cloud. Isn't that what the whole industry is doing these days? It is. We learn what we need in the creative and realistic way.
After a decade of education, I know my students, find very quickly good jobs. Most of them are still in touch with me and some of them work for daenet.
Dear reader, if you are a student and want to learn this way, feel welcome. I promise, it will not be easy, but you will learn useful, modern and exciting technologies, my promise every year.
Today, I have about 150-200 student heroes who are active in our project repositories and no single exam question.
The only pain, mostly my pain, is to keep running successfuly so many projects. But this is a lesson that teachers need to learn and find a way to improve it. Anyhow, I believe that our education system must be changed from the ground up. We have to learn to be more creative and have to adapt what we learn and how we learn at the same speed as the world is changing.