How modern web tech changed the .NET developer forever
In a recent conversation on the .NET Dev Show, Veli Pehlivanov, CTO at Resolute Software, and Sam Basu, Senior Developer Advocate at Progress, reminisced about the evolution of web technologies in the .NET stack. They reflected on their journeys through the changing landscape of web development, sharing valuable insights into the progression of the .NET Framework. From the early days of server-side scripting with ASP to the modern, interactive, and real-time web applications powered by Blazor and Progressive Web Apps (PWAs), the journey has been transformative.
Early days of development and the introduction of the .NET framework
The conversation brought us back to the beginning of the 21st century and the early days of development. Both Veli and Sam started their careers with Visual Basic (VB), particularly VB6, which marked a significant phase in thick client development.
In 2002, Microsoft introduced the .NET framework and ASP.NET, a significant leap forward from the classic ASP, which was inherently not very scalable and often resulted in “spaghetti code”. ASP.NET provided a more structured and powerful approach to web development. Veli noted how it was designed to be familiar to Windows developers, particularly those accustomed to building desktop applications with technologies like VB6 and WinForms. This strategy aimed to smoothen the transition from desktop to web development by offering similar development paradigms.
Sam then highlighted ASP.NET Web Forms as the first significant web development model in .NET. It abstracted much of the complexity of web development, such as HTTP and HTML, allowing developers to focus on the business logic. This historical context was crucial in comparing modern web development with earlier methods. Nevertheless, says Veli, it’s a resilient piece of tech.
It turns out it was a successful bet. Looking back, I still see major Web Forms applications in service, updated and maintained diligently to the point where Microsoft is now pushing engineering teams to modernize these applications out of fear that the technology will eventually become obsolete, but they still believe there’s nothing wrong with it and it still works and gets the job done.
The rise of AJAX and MVC
Early ASP.NET was productive, but things evolved significantly with .NET Framework advancements. The rise of AJAX (Asynchronous JavaScript and XML) and MVC (Model-View-Controller) pushed Microsoft to act and follow suit around 2007-2008. ASP.NET AJAX allowed for partial page updates, enhancing user experiences by enabling more interactive and dynamic web applications without full page reloads, while MVC introduced the separation of concerns:
-
the view (client-side rendering)
-
the controller (server-side processing)
-
the model (data structure)
This change was revolutionary.
Veli elaborated on how MVC was a significant advancement for Microsoft, but it had a notable gap—it didn't address the need for rich client-side interactivity. As the web evolved, simply writing server pages became insufficient. While MVC excelled in server-side rendering, developers had to figure out client-side interactivity on their own.
The transition to ASP.NET Core
The central turning point came around mid-2015 to 2016 with the introduction of ASP.NET vNext, later known as ASP.NET Core, and now casually named Modern .NET. This transition was influenced by the decision to lower the barriers to entry and the need for a more open and collaborative environment, reflecting the broader industry's move towards open source. ASP.NET Core was designed to be modular, cross-platform, and capable of running on Linux, macOS, and various cloud platforms.
Reflecting on this, Veli noted that discussions about server-side vs. client-side components, progressive rendering, PWAs, or real-time communication were almost nonexistent before this transition. Concepts like SignalR, gRPC, and data formats like JSON or MessagePack were still unfamiliar. The focus was simply on moving data between the client and server, with only a few options available.
Fast-forward to today, and the landscape is vastly different. It features streaming rendering, real-time communication, and numerous choices for APIs and data formats. This abundance of options has led to developer fatigue, reminding us of the rapid evolution of JavaScript frameworks from 2009 to 2013, which coined the term "JavaScript fatigue."
Recruiting .NET developers now requires candidates to possess a diverse skill set, spanning backend, full-stack development, Blazor, SignalR, REST APIs, and more. The scope has dramatically expanded from the early days of .NET, necessitating a complete shift in mindset and skill set for developers. This evolution underscores how rapidly developers have adapted and grown in the few years since the launch of Web Forms to modern .NET.
Blazor: A game changer in the .NET ecosystem
One of the most exciting advancements in the .NET ecosystem is Blazor. As an early Blazor adopter, Veli highlighted some significant challenges in its early days.
There was this notion – Microsoft was pitching Blazor as the ability to write your web application completely in C#. Well, we did not really think so because the ability to write C# in the browser with Blazor was awesome, but it nowhere nearly reduced the need to write JavaScript or freed us from the need to understand how things work in the DOM or in the browser APIs.
In the early days, Blazor struggled to gain traction against the argument that developers already heavily invested in JavaScript frameworks like Angular and React saw no compelling reason to switch. The benefits, such as reusing C# code between client and server, didn't seem substantial enough.
However, Blazor quickly evolved and improved, becoming a major player in the web development space. Microsoft incorporated the best practices from modern web technologies and frameworks into Blazor, making it a comprehensive solution for application development. Blazor's flexible hosting models allow components to run on the server, on the client with WebAssembly, or in a hybrid environment with cross-platform applications like MAUI or WPF. This versatility makes Blazor a powerful and engaging choice for developers, positioning it as a one-stop shop for modern web application development.
The tooling for Blazor has also improved, making it easier to create sophisticated user interfaces. The ecosystem now includes extensive component libraries and performance optimizations, enhancing the development experience. JavaScript interoperability has also advanced, enabling better communication between .NET and JavaScript.
Veli discussed a project at Resolute involving a geo-information system, where Blazor was used for the UI, with the map component handled by JavaScript. Blazor allowed the team to abstract and minimize JavaScript interoperability, optimizing performance and simplifying development.
Having said that, it is no longer a matter of Blazor vs. JavaScript or which is superior. Today, Blazor stands out as a truly modular, segmented, and highly extensible framework that offers developers a lot of choices. It doesn't restrict you from using more JavaScript if needed, but instead empowers you to leverage industry best practices across different platforms and facilitates the transferability of skills.
Furthermore, as Blazor evolved through .NET 6, 7, 8, and 9, new features like server-side rendering (SSR) and pre-rendering have been introduced to enhance performance. Veli discussed the new render modes, such as static and interactive streaming, which optimize web applications and align Blazor with other major web frameworks. The pendulum between server-side and client-side rendering continues to swing, offering flexibility based on application needs. Modern frameworks, including Blazor, provide the tools to mix and match these approaches efficiently.
Looking ahead
After a passionate and eye-opening historical throwback, the future looks bright for .NET developers. Modern web development concepts are well-defined and supported in .NET, making it a top choice for web application development.
Stay tuned for more insights, and watch our other streams and webinars. If you have any questions or want to discuss any topic further, please contact us via the contact form.