Nie tylko C#
Ekosystem Microsoft dla programistów
Kim jestem
● Nazywam się Hubert Taler (@htaler)
● Ukończyłem Uniwersytet Szczeciński (WE)
● Od 1998 roku zawodowo pracuję jako programista
● Od 2012 roku w BLStream jako SSE
● blstream.com
Agenda
● Historia .NET i IDE od Microsoftu
● Historia C# jako próby stworzenia języka od początku obiektowego
● Stan teraźniejszy: komponenty, funkcje, struktura frameworku, ekosystem
● PRZERWA
● Zmiany w C# 6, nowe funkcje frameworku,
● Warsztat pracy programisty C#
● Pułapki i niespodzianki w czasie codziennej pracy programisty
TROCHĘ HISTORII
Rok 1997
Początki .NET
● W 1997 roku zaczyna się Project Lightning / Project 42
● Inna proponowana nazwa: COM Object Runtime (COR) - stąd mscorlib.dll
● Nazwa kodowa loadera: fusion (stąd: fuslogvw.exe)
● C# wywodzi się z “Project Cool” - miał być implementacją Javy?!
● Najważniejsze komponenty: CLR i C# na początku
● Colusa: Language neutral OmniVM (Omniware)
● OmniVM uruchamiało C, C++, VB i (podobno) Java
● Sun: wymyśliliśmy maszynę wirtualną!
● Microsoft: nieprawda!
C# i jego początki
● Architekt C#: Anders Hejlsberg, oficjalnie 1998
● Próba stworzenia języka od podstaw obiektowego
● Model PME: properties, methods, events
● Zintegrowana dokumentacja, atrybuty (components hosts)
● Wcześniejsze próby: J++, J#, Visual Basic
● Rzeczy które były załatwiane konwencją lub wzorcem w innych językach
tutaj są wbudowane
● Pierwsza edycja: 1.0, 2002, Visual Studio .NET
C# Evolution
- Pierwsze wydanie (2002)
- 2.0: Generics, Partial, Anonymous methods, Nullables, getter/setter
accessibility, statics (2003)
- 3.0: Implicitly typed local variables (var), auto properties, lambda
expressions, object and collection initializers, partial classes (2007)
- 4.0: optional parameters, generic covariance (2010)
- 5.0: async, caller info attribute (2012)
- 6.0: b. dużo zmian (2015)
- 7.0: w formie propozycji, budowa listy funkcji do dodania
JAK TO WYGLĄDA TERAZ
Co dostaniemy teraz? Framework
.NET Framework – podstawowe cechy
• Common Language Infrastructure
• Biblioteki (BCL, FCL) [System.*, Microsoft.*]
• Assemblies
• .NET Core (cross platform, open source)
• Interoperability
• Niezależność od języka
• Portowalność (Mono, .NET Micro Framework, Portable.NET (GNU))
• Memory Management, garbage collector
Co dostaniemy teraz? Narzędzia developera
•Visual Studio Community 2015
–Expression Blend
•Azure (w tym VM)
•.NET Framework / Core / Visual Studio Code
•SQL Server Express
•Visual Studio Online
•Kod źródłowy, projekty Open Source, Roslyn
Dlaczego warto?
● Windows Store
● Windows App Studio
● Analityka i inne w Azure
● Próbujemy za darmo
● WCF  Web API
● Integrated tests
● Community
● Projekty open source
● Integracja z innymi językami i środowiskami
.NET 2015, C# 6.0
Co nowego w .NET 2015?
● ASP.NET 5
● ADO.NET – always encrypted
● 64-bitowy kompilator just-in-time
● Usprawnienia w Assembly loaderze
● Dużo zmian w klasach bazowych
● Nowa klasa AppContext
● Task dziedziczy Culture i UICulture
● Wbudowana klasa do Event Logu
● Zmiany w WPF, WCF
● .NET Native
C# 6.0 – w stronę lepszego kodu
● Using static
● Fajne, ale uważajcie!
● Operator nameof
● String interpolation
● Null conditional operator
● Structs constructors
● Better auto-properties, expression body (one line implementation)
● Dictionary initializer
● Exception improvements (await in catch, exception filters)
C# 6.0 LIVE
Text
JAK ZROBIĆ ŻEBY ZAROBIĆ I SIĘ
NIE NAROBIĆ
Tips & Tricks
● Nie mamy już pieniędzy, pospiesz się
● Garbage in – garbage out
● Loguj działania aplikacji i użytkownika
● Lepiej być suchym niż mokrym (DRY zamiast WET)
● Prototypuj aby zmniejszać ryzyko
● Nie płacą ci za kodowanie tylko za dostarczanie funkcjonalności
Pułapki w pracy programisty – czego unikać, o
czym pamiętać
• Gettery zmieniające dane (getter Heisenberga)
• Niespodzianki serializacji i deserializacji
• Incrementing null w int?
• Statyczne konstruktory robią lock, uruchamiają się dla każdego typu
generycznego
• Dziwności case
• Model eventów
• Kiedy nazwy są mylące (Add() w Datetime, ToLower() w String)
• Testowalny kod (przykład)
PUŁAPKI C# LIVE
Źródła informacji
• Książki (C# Illustrated, .NET Gotchas)
• StackOverflow
• MSDN
Hubert Taler
Senior Software Engineer
hubert.taler@blstream.com
Thank
you!

Nie tylko C# - Ekosystem Microsoft dla programistów

  • 1.
    Nie tylko C# EkosystemMicrosoft dla programistów
  • 2.
    Kim jestem ● Nazywamsię Hubert Taler (@htaler) ● Ukończyłem Uniwersytet Szczeciński (WE) ● Od 1998 roku zawodowo pracuję jako programista ● Od 2012 roku w BLStream jako SSE ● blstream.com
  • 3.
    Agenda ● Historia .NETi IDE od Microsoftu ● Historia C# jako próby stworzenia języka od początku obiektowego ● Stan teraźniejszy: komponenty, funkcje, struktura frameworku, ekosystem ● PRZERWA ● Zmiany w C# 6, nowe funkcje frameworku, ● Warsztat pracy programisty C# ● Pułapki i niespodzianki w czasie codziennej pracy programisty
  • 4.
  • 5.
  • 7.
    Początki .NET ● W1997 roku zaczyna się Project Lightning / Project 42 ● Inna proponowana nazwa: COM Object Runtime (COR) - stąd mscorlib.dll ● Nazwa kodowa loadera: fusion (stąd: fuslogvw.exe) ● C# wywodzi się z “Project Cool” - miał być implementacją Javy?! ● Najważniejsze komponenty: CLR i C# na początku ● Colusa: Language neutral OmniVM (Omniware) ● OmniVM uruchamiało C, C++, VB i (podobno) Java ● Sun: wymyśliliśmy maszynę wirtualną! ● Microsoft: nieprawda!
  • 8.
    C# i jegopoczątki ● Architekt C#: Anders Hejlsberg, oficjalnie 1998 ● Próba stworzenia języka od podstaw obiektowego ● Model PME: properties, methods, events ● Zintegrowana dokumentacja, atrybuty (components hosts) ● Wcześniejsze próby: J++, J#, Visual Basic ● Rzeczy które były załatwiane konwencją lub wzorcem w innych językach tutaj są wbudowane ● Pierwsza edycja: 1.0, 2002, Visual Studio .NET
  • 9.
    C# Evolution - Pierwszewydanie (2002) - 2.0: Generics, Partial, Anonymous methods, Nullables, getter/setter accessibility, statics (2003) - 3.0: Implicitly typed local variables (var), auto properties, lambda expressions, object and collection initializers, partial classes (2007) - 4.0: optional parameters, generic covariance (2010) - 5.0: async, caller info attribute (2012) - 6.0: b. dużo zmian (2015) - 7.0: w formie propozycji, budowa listy funkcji do dodania
  • 11.
  • 12.
  • 13.
    .NET Framework –podstawowe cechy • Common Language Infrastructure • Biblioteki (BCL, FCL) [System.*, Microsoft.*] • Assemblies • .NET Core (cross platform, open source) • Interoperability • Niezależność od języka • Portowalność (Mono, .NET Micro Framework, Portable.NET (GNU)) • Memory Management, garbage collector
  • 14.
    Co dostaniemy teraz?Narzędzia developera •Visual Studio Community 2015 –Expression Blend •Azure (w tym VM) •.NET Framework / Core / Visual Studio Code •SQL Server Express •Visual Studio Online •Kod źródłowy, projekty Open Source, Roslyn
  • 15.
    Dlaczego warto? ● WindowsStore ● Windows App Studio ● Analityka i inne w Azure ● Próbujemy za darmo ● WCF  Web API ● Integrated tests ● Community ● Projekty open source ● Integracja z innymi językami i środowiskami
  • 16.
  • 17.
    Co nowego w.NET 2015? ● ASP.NET 5 ● ADO.NET – always encrypted ● 64-bitowy kompilator just-in-time ● Usprawnienia w Assembly loaderze ● Dużo zmian w klasach bazowych ● Nowa klasa AppContext ● Task dziedziczy Culture i UICulture ● Wbudowana klasa do Event Logu ● Zmiany w WPF, WCF ● .NET Native
  • 18.
    C# 6.0 –w stronę lepszego kodu ● Using static ● Fajne, ale uważajcie! ● Operator nameof ● String interpolation ● Null conditional operator ● Structs constructors ● Better auto-properties, expression body (one line implementation) ● Dictionary initializer ● Exception improvements (await in catch, exception filters)
  • 19.
  • 20.
    JAK ZROBIĆ ŻEBYZAROBIĆ I SIĘ NIE NAROBIĆ
  • 21.
    Tips & Tricks ●Nie mamy już pieniędzy, pospiesz się ● Garbage in – garbage out ● Loguj działania aplikacji i użytkownika ● Lepiej być suchym niż mokrym (DRY zamiast WET) ● Prototypuj aby zmniejszać ryzyko ● Nie płacą ci za kodowanie tylko za dostarczanie funkcjonalności
  • 22.
    Pułapki w pracyprogramisty – czego unikać, o czym pamiętać • Gettery zmieniające dane (getter Heisenberga) • Niespodzianki serializacji i deserializacji • Incrementing null w int? • Statyczne konstruktory robią lock, uruchamiają się dla każdego typu generycznego • Dziwności case • Model eventów • Kiedy nazwy są mylące (Add() w Datetime, ToLower() w String) • Testowalny kod (przykład)
  • 23.
  • 24.
    Źródła informacji • Książki(C# Illustrated, .NET Gotchas) • StackOverflow • MSDN
  • 25.
    Hubert Taler Senior SoftwareEngineer hubert.taler@blstream.com Thank you!