DEV Community

Andreas Müller
Andreas Müller

Posted on

Why software development education has to become more personalized

I am currently reading Robert C. Martins "Clean Architecture", and it really made me think about the following question: What knowledge in software development is actually foundational, and what knowledge only applies to specific roles?

I think the answer is that the amount of knowledge that is relevant only in specific roles is immense. Of course there are foundational aspects, like minimizing coupling and maximizing cohesion, that everyone should know. And yet even at this foundational level there is so little knowledge that is actually universally agreed to be true. Much of the knowledge in our field remains heavily debated to this date. Some think not using TDD is irresponsible, and some thing TDD is impractical, or leads to bad designs (because you're not thinking enough about design before starting implementation).

So how can we educate future software developers in the face of a) so little knowledge which isn't dependent on the context you work in and b) so much knowledge which is still being debated?

I think the answer is to personalize education more, and with AI we are now in a great time to actually do that. Today I vibe coded a small web app that communicated with my local LMStudio server, and what I realized is that vibe coding allows you to learn in a more targeted way than is common in traditional education. For example, it generated me an async function in JavaScript, using the await keyword. I neither knew what an async function was (though I could guess of course) nor what the await keyword exactly did. But seeing those keywords in an actual example allowed me to look them up on the mozilla developer network, and quickly grasp the concepts behind those keywords.

And I think that is how education should change. I reflected on what allowed me to learn about those two keywords. And actually it is just one thing: Being able to read code. Because the syntax of the most common programming languages is really similar to the point that if you can recognize what keywords in one are you can spot what keywords in others are. My ability read the function declaration and spot async as a keyword modifying the function, and spotting await as a keyword, allowed me to look those two keywords up.

Of course some computer science is also necessary, but the basic thing is to teach students to read code and then let them get out there, arm them with AI and let them learn on their own. Then, after a time, you come together with the student again and let them present their code and thus see what they have learned. That is how I would envision software development education going forward. Not this frontal assault of "here is some really fancy mathematics you'll never, ever need in practice" but training them to do what they are going to do:

Learn on their own in an age where personalized learning based on your interests is easier than ever - if it is guided by qualified instructors and done in the right way.

Top comments (0)