Last week I went to NDC London. It was my first time there and I really enjoyed it as it was a chance to listen to some great speakers and talk to other people in the industry.
The day started with a keynote from Hadi Hariri entitled “Welcome to the machine” where the rise of social media and its impacts were discussed. After that I listened to Patricia Aas talking about reading other people’s code with some suggestions like always approaching it as a learning opportunity. The talk also talked about how to introduce new contributors to an existing codebase and the highlight there was about psychological safety in teams.
Next, I listened to Roy Derks explaining why GraphQL makes front-end developers’ life easier and might become the new standard after JSON “defeated” XML. A single endpoint, predictable data structures, easier versioning and documentation were amongst the benefits described.
After lunch it was time to hear Sam Newman talking about security in micro-services covering different points from password security to user authentication and transport security were covered. The need to patch all systems across the stack was highlighted as well as other best practices like accounts per environment and team.
It was then time to hear about scalability of .NET Core apps where David Fowler and Damian Edwards talked about some reasons for applications no scaling and best practices around locking, async and showed how to use the Visual Studio Concurrency Visualizer.
Following that I heard about hidden lessons from the Domain-Driven Design book. Nick Tune encouraged developers to improve their design heuristics, learn the business model and interact with different roles around the business while referring to some techniques like Event Storming, Domain Storytelling.
To end the day, I listened to discussion around the future of .NET that included Mads Torgensen, the lead designer of C# at Microsoft.
Design patterns was my chosen topic to start the day and I was not disappointed by Chris Klug’s talk where he talked about the differences between some confusing design patterns like Adapter, Proxy, Decorator and Bridge. The Factory and Null Object patterns were also introduced as useful patterns to know. The last point on this talk was on how repositories are misunderstood and should only deal with data access.
After that I listened to Kevlin Henney talking about test cases and how they should act as documentation for the code. He suggested to keep the act of tests very explicit instead of hidden on auxiliary methods and talked about splitting different test cases in different classes for better understanding.
The morning ended with Dan North talking about how developers should think beyond their role and have an impact across their team, department and organization.
I started the afternoon by learning how to think like a trainer and about different communication styles and how to adjust to them. Olivia Liddell talked about active listening and empathy and gave some suggestions like avoiding jargon and correcting people as well as asking questions in order to check for understanding.
Oren Novotny presented WPF and Winforms in .NET Core 3 covering how to migrate by using the portability analyzer, migrating to the new project format and migrating the existing libraries to .NET Standard. He also talked about the new MSIX format to package .NET Core applications and some possible issues with the current APIs like the behaviour of Process.Start being different on .NET Core.
Following that I listened to Mark Rendle talking about application performance monitoring covering throughput, timings to status codes and memory usage. Usage of System.Diagnostics.DiagnosticSource alongside InfluxDB and Grafana to produce some nice dashboards with all the data collected.
I have been a listener of the .NET Rocks podcast for a while so I did not pass on the opportunity to be on a live recording of it to finish the day.
The last day started with Scott Hanselman showing the advances of Microsoft regarding open source and cross platform support. After lunch he also talked about how open source and technology can help people with diabetes.
Then I listened to Mark Seemann suggesting a way to avoid leaky abstractions in async code by using behaviour injection instead of returning data from an object.
Just before lunch I learned about functional programming with Scott Wlaschin explaining the meaning of the main terms like monoids, functors, monads and effects. The last talk of the day was also from him where some old languages like ML, Prolog, SQL and Smalltalk can still teach us lessons like the use of consistent models, composability and using minimal syntax.
Bill Wagner talked about the design decisions when async was developed so that the differences between synchronous and asynchronous wouldn’t be very big and introduced async streams as a new feature in C# that should help with performance by allowing to stream chunks of data instead of having to wait for a big dataset to become available. Cancellation is also supported by default as we should just be able to stop enumerating the data structure which would cause the async operation to stop.
This was a great event and a great experience that Redgate has provided me. I’ll be giving some more investigation time to some of the things I heard about. I also can’t wait for the videos to come online for me to review some presentations and to watch others that looked quite interesting but clashed with the ones I went to.