2. About me
32 years old;
Programming for ~12 years;
Did mostly .NET;
Worked on Web and Desktop apps, DBs, Web/Win Services, IDE plug-ins,
SPAs, mobile apps, integrations;
3. About me
32 years old;
Programming for ~12 years;
Did mostly .NET;
Worked on Web and Desktop apps, DBs, Web/Win Services, IDE plug-ins,
SPAs, mobile apps, integrations;
Never liked it.
6. But now we have .NET Core and a new
open-source MSFT, right?
7. But now we have .NET Core and a new
open-source MSFT, right?
https://github.com/NuGet/NuGetGallery/pull/4437
Wrong
8. .NET Core + Linux =
C#;
ASP.NET Core;
EF Core;
SQL Server for Linux;
Visual Studio for Mac;
<something> Core;
9. DISCLAIMER
Subjective matter!
You will have your project’s requirements;
Not every project is a “green field” project;
This is not about “all new shiny things are better”.
10. Pain of using “magic” frameworks
You install NHibernate;
Everything works as expected;
You create your first entity – so far so good;
You create second entity – it doesn’t work;
You spend 3 hours to understand that the problem is that your new entity
has “Date” property and it is not escaped in generated T-SQL.
16. Principle 1: “less magic”
Avoid accidental complexity at all cost;
Magic things: ORMs, AOP, overuse of conventions, code generation,
reflection etc.;
Willing to trade some effort for the full control over solution.
17. The “it works on my machine” pain
You do the change and test it locally – it works;
You push your changes to repository;
CI build fails with “Cannot load an assembly”;
You spend next 3 hours trying to understand why.
22. Principle 2: predictable state
Reproducible builds: “single script to rule them all”;
Transient dependencies, lock files;
Immutable servers/infrastructure;
Configuration-driven environment.
23. The “edit, compile, wait, repeat” pain
You do the change to the model/view/controller;
You compile your 35 projects solution - 30 sec;
You reload your browser and wait for:
IIS to reload the app – 5 sec;
Your app to initialize – 15 sec;
The page to load – 2 sec;
You manually restore the page state – 5 sec;
24. The “edit, compile, wait, repeat” pain
You do the change to the model/view/controller;
You compile your 35 projects solution - 30 sec;
You reload your browser and wait for:
IIS to reload the app – 5 sec;
Your app to initialize – 15 sec;
The page to load – 2 sec;
You manually restore the page state – 5 sec;
And it did not work;
Repeat.
25. The “edit, compile, wait, repeat” pain
https://faculty.washington.edu/ajko/books/cooperative-software-development/history.html
28. Principle 3: next level
Not just time travel, I want to observe changes across time at one glance;
Not just hot reload, I want to see changes for all states, on all pages;
Visual programming?
Programming by example?
See Bret Victor’s work, e.g.
http://worrydream.com/#!2/LadderOfAbstraction
29. Principle 3: build feedback
Run entire test suite on every commit;
Run all linters on every commit;
Deploy 10 version of the app per day;
Receive notifications on every failure: Slack integration for CI builds and in-
app critical errors;
30. Principle 3: shorten feedback loop
As a programmer, I want to see the effect of the changes I do
immediately so that I could be more efficient;
31. The “your skills are now obsolete” pain
You start as a .NET programmer in 200X;
You learn ASP.NET Web Forms: the event model, the View State, the Ajax
Toolkit, etc.;
32. The “your skills are now obsolete” pain
You start as a .NET programmer in 200X;
You learn ASP.NET Web Forms: the event model, the View State, the Ajax
Toolkit, etc.;
Time passes, you are in the 201X;
You now have a part of your brain that is forever lost.
How to disable
ViewState
https://commons.wikimedia.org/wiki/File:Brodmann_area_45_lateral.jpg
33. The “your skills are now obsolete” pain
You start doing SPAs in the 201X;
You learn AngularJS: the template language, the directives, the custom
HTTP client, etc.;
34. The “your skills are now obsolete” pain
You start doing SPAs in the 201X;
You learn AngularJS: the template language, the directives, the custom
HTTP client, etc.;
…
See the pattern?
35. Principle 4: things I cannot reuse
WebForms;
WinForms;
SharePoint;
Visual Studio + R#;
AngularJS http client;
“Click to deploy to Azure”;
and many more.
36. Principle 4: things I can reuse
JavaScript;
Object Oriented/Functional programming, SOLID;
Event-driven/reactive systems;
Web, http, networks;
SQL;
Emacs/Vim;
Actor Model;
Stream Processing;
Machine Learning;
Statistics;
UX;
And many more.
38. Principle 4: composition and reuse
As a programmer, I want to be able to reuse the skills and knowledge I
have when working on a new project so that I could be more efficient and
be in demand on job market;
39. Summary
Business value first, technical wizardry second;
Automate all the things!
Do not make compromises with technology, ask for more!
Learn how to build systems, not how to use frameworks.
We will now do programming on linux using .NET Core, ASP.NET Core, EF Core and SQL for linux?
We will now do programming on linux using .NET Core, ASP.NET Core, EF Core and SQL for linux?
I am not against these tools, I am against not changing, since this will not remove the pain
Sometimes, after all (non)functional requirements and limitations are considered, you as a tech specialist make a decision to use technology A or B. This is the time to think of your principles.
Put down your headphones and listen to what your teammates are talking about in the room?
Is it “how to do this in this framework?”, “how do I configure that?”, “how do I deploy it?” or “what did you do to make it work?”
Or is it “do I understand this business rule right?”, “what should happen if user does this?” or “maybe we have contradiction in these requirements?”
Do you need to have 5 operations on 3 core entities? Do plain ADO.Net or dapper
Do you have 24-screens CRUD app? Use EF
Do you need to have 5 operations on 3 core entities? Do plain ADO.Net or dapper
Do you have 24-screens CRUD app? Use EF
Do you need to have 5 operations on 3 core entities? Do plain ADO.Net or dapper
Do you have 24-screens CRUD app? Use EF
Single script build:
Must have for OSS
Must have for inhouse too – days on setting up the environment for new developers?
Instead of “Consolidate packages” button in VS.
You could actually google for ready configurations (e.g. for hosting wordpress), not “how-to” articles with screenshots of the old IIS version
You could actually google for ready configurations (e.g. for hosting wordpress), not “how-to” articles with screenshots of the old IIS version
Did you have a day when you spent entire day working hard but at the end of the day felt that you accomplished nothing?