When we launched the first Software Development School, we lacked well-qualified personnel to teach. Now Microsoft is actively promoting its technology and investing in training, so if you want to get taught, you can find all required information yourself and become a programmer. We’ve been employing new developers who use the same technologies as we do but we needed something to help them get engaged in work quickly. This is how we started thinking about running or own Software Development School.
How We Started the School and Why Me
My name is Suren, and I want to say a little about my teaching experience. Over 9 years of development, I have gained a lot of experience that I wanted to share. At the same time, it seemed to me that working with interns was not always as efficiently as possible, because you cannot always find enough time for well-structured training in a working day.
The other extreme is university teaching, which requires specialized education (+ done!), a strong desire to teach and share practical experience (+), free schedule (—), love of academic knowledge (—) and a lot of spare time to prepare (—).
Finally, the .NET Development School based on the IT University of Digital Design was a perfect option for me. as it was for the company too: by having a school, we were able to choose the best students, train and invite them to work with us.
Getting Ready for School
If you haven’t been a teacher before or if you do not want to follow a someone else’s curricula, then you would need to spend at least 3 hours to prepare a 1-hour lecture. I also decided not to follow any trodden paths and make the program relevant. I wanted to include the latest tricks, tips and hints, because a good IT teacher is even more about experience than knowledge (which is now more about Google: there are probably no coders who write code without internet). Also, it’s a little harder to work with a tech-savvy audience, because you do not always understand where to start from. So for the first school, I decided to dwell on the information I learned at work, referring to general concepts and terms.
And Still a Little Bit of Theory
I prepared carefully for the first lecture: figured out the plan and made notes of what I had to say. By the end of my lecture, I realized that only 10 minutes had passed, and it was time to start improvising. Soon I understood that students came here to learn about real examples, so we moved on to tips on naming, structuring databases, learning how to transfer data to the frontend and back. The latest 3-4 lessons turned into short masterclasses: I coded together with students, stopping for explanations and questions. For example, “Here we connect to a database in order to use these methods or these properties”, “Here we install an additional library via NuGet to interact with a database as a set of entities”. It became clear that these lessons were as efficient as they might be, but their intensity does not allow students to perceive all information in full. I had to shift focus, alternate types of information, etc. It depended on students a lot: those who didn’t take time to learn everything from the lesson, couldn’t achieve the result.
Let’s Move on to Practice
Of course, theory is useful. If you don’t know terms, you won’t be able to start practice, but because of the short training periods, we had to choose accents. During a lesson we shared a maximum of information, and some people dropped out, but those who came to the company as interns have already learned the information and were ready to work. Our goal is to attract the best staff, so the level of education and expectations from students were very high!
Curriculums often have a lack of applied tasks, and I realized that even when showing specific examples, students do not always understand how to use it later. In addition, if by the end of the course you expect students to have a sufficient level of knowledge to create a simple application, then you need to go this path with them at least once. Therefore, we decided to proceed to the “Do” stage (or rather, the “Repeat After Me” stage), and soon began to learn creating our own application.
I explained what designing a database architecture is, how to work with it, and during a lecture, we started developing an application. As part of the development, I brought up various issues: interacting with file systems and databases, working with images, uploading/downloading files in the interface, direct loading. Generally, it was all about learning what features a programming language has, and how it can be used as part of test development. We used an example of a simple photo-sharing application with an ability to choose additional functionality (identifying geolocation, messaging, etc.). It helped us learn general principles of interaction with the platform. All students graduated with an unlimited access to video content of the course.
Making the app more diversified
The process was divided into several stages: we designed the database itself, filled it with content, added a rendering form and user profile editing tools. Everything was interconnected: if in lesson 1 we talked about templating on a client side, then we were doing everything on a server side at the next stage by using a templating form language which was being rendered on backend and frontend. It let us create an application that shared content immediately and uploaded it further, keeping the style and reconfiguration templates. We delved into technology and learned to build queries to find answers quickly, to work with databases, servers and to deal with security issues. At every step, I coded in real-time, made requests and showed how to get things right. It helped students to understand the basics of system design. Then everyone could come up with new ideas and show it in the final project.
In the second school we managed to structure the practical data that a developer needs to get to work. As a result, we got the largest number of interns who joined different teams: from business processes automation to mobile development.
An ability to find the required information quickly is very important for developers. The key point is to formulate a right search query. My first mentor constantly sent me to Google, answering my questions with links to search results. He taught that requesting information is an art. Formulating the right thought is useful here, or Google may ignore you.
A beginner’s search query: how to embed a database in a project / errors of embedding a database in a project / *error text itself*.
An experienced developer’s search query: include localdb in C#.
Conclusion: it is always better to search in English since most of the manuals are not translated into Russian or were translated by a person who does not know the terminology. Terminology is important while searching. For example, in this query, one of the types of the database inside the project is called LocalDB.
Equalizing the level of knowledge
The graduates’ level of knowledge at 2 schools fully satisfied me. But I was worried that the knowledge of students of different classes could differ.
The set of tools I use for work is much wider than I give to the class. This time we got to the concept of SPA applications which we did not have enough time at first two classes. As a result, we updated the training plan, increased the duration and the number of lessons to equalize the level of knowledge.
I make frequently made errors during masterclasses on purpose to get closer to a real situation. For example, when we make an Ajax request and incorrectly specify the types, we cannot understand why the backend processes it, but the frontend considers it an error, or when we send data in the wrong data type to the backend and it notifies that nothing has been received. Then I show the debugging process by pointing what exactly is going wrong and why it might appear. This lesson will be especially helpful as a video recording.
To refresh the knowledge, use video recordings and chats for communication. Students will always have a complete code and an ability to ask questions.
Use real tasks for teaching
At Digital Design, we have a staff problem: there are no developers with our stack for the junior position. Even if a developer has studied the issue well, it is unlikely that he will be able to combine knowledge of technologies to solve a specific problem. It is impossible to learn a programming language without tasks. School graduates can start writing code after internship and it can be implemented to the project after 1-2 iterations. The better we teach in class, the faster students will start working on projects, and every project is the essence of an IT company.
A piece of advice
For students. I would advise students and young professionals to take part in meetups, listen to online and offline reports, be aware of all relevant events. In addition, use a student discount to attend events (spoiler: once you’re not a student, everything will be much more expensive).
For IT specialists. Try teaching! Even if you think that there is nothing unique about what you can teach, remember that your experience can become a real insight for somebody. If you work in one area for a long time, it may seem that nothing interesting is happening, but there is always something that you know better than others. In addition, some of your routine tasks may be a real challenge for others!
Instead of conclusion
I am sure that using the “abstract educational institution — company’s school — internship — work” scheme is more effective than typical “abstract educational institution — internship — work”. After 500 hours of internship students do not always receive what we teach at Developers school in a few months. School is enough to gain general knowledge and start working. It is our experience, and now we send internship applicants to our school first.