How C# Save My Marriage, Enhanced My Career, and Made Me an Inch Taller, Scott Hanselman

4,299 views
4,110 views

Published on

Published in: Technology, Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,299
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
139
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

How C# Save My Marriage, Enhanced My Career, and Made Me an Inch Taller, Scott Hanselman

  1. 1. Giant DisclaimerI’m here as me, doing my thing. These opinions aremine, Scott Hanselman. If I say something stupid andyou’re a journalist, make sure to quote me as“Scott Hanselman, Stupid Guy.”I’m not the manager of anything important at Microsoft.I am a member of the .NET Community. I care.
  2. 2. How C#Saved My Marriage,Enhanced My Career,and Made MeAn Inch TallerScott Hanselman
@shanselman
  3. 3. How C#Saved My Marriage,Enhanced My Career,and Made MeAn Inch TallerScott Hanselman
@shanselman
  4. 4. _ _ _____ _ _| | | | / __ _| || |_| |_| | ___ __ __ | / /|_ __ _|| _ | / _ / / / | | _| || |_| | | || (_) | V V / | __/|_ __ _|_| |_/ ___/ _/_/ ____/ |_||_|_____ _ ___ ___ ___ ___ _/ ___| | | | / | | / | (_) `--. __ _ __ __ ___ __| | | . . | _ _ | . . | __ _ _ __ _ __ _ __ _ __ _ ___`--. / _` | / / / _ / _` | | |/| || | | | | |/| | / _` || __|| __|| | / _` | / _` | / _ /__/ /| (_| | V / | __/| (_| | | | | || |_| | | | | || (_| || | | | | || (_| || (_| || __/ _____/ __,_| _/ ___| __,_| _| |_/ __, | _| |_/ __,_||_| |_| |_| __,_| __, | ___|( )__/ | __/ | |/|___/ |___/_____ _ _ ___ ___ _____| ___| | | | | | / | / __ | |__ _ __ | |__ __ _ _ __ ___ ___ __| | | . . | _ _ | / / __ _ _ __ ___ ___ _ __| __| | _ | _ / _` || _ / __| / _ / _` | | |/| || | | | | | / _` || __| / _ / _ | __|| |___ | | | || | | || (_| || | | || (__ | __/| (_| | | | | || |_| | | __/| (_| || | | __/| __/| | _____/ |_| |_||_| |_| __,_||_| |_| ___| ___| __,_| _| |_/ __, | ____/ __,_||_| ___| ___||_| ( )__/ | |/|___/_ ___ ___ _ ___ ___| | | / | | | | / |__ _ _ __ __| | | . . | __ _ __| | ___ | . . | ___/ _` || _ / _` | | |/| | / _` | / _` | / _ | |/| | / _ | (_| || | | || (_| | | | | || (_| || (_| || __/ | | | || __/__,_||_| |_| __,_| _| |_/ __,_| __,_| ___| _| |_/ ___|___ _____ _ _____ _ _/ _ |_ _| | | |_ _| | || |/ /_ _ __ | | _ __ ___ | |__ | | __ _ | || | ___ _ __| _ || _ | | | _ / __|| _ | | / _` || || | / _ | __|| | | || | | | _| |_ | | | || (__ | | | | | | | (_| || || || __/| |_| |_/|_| |_| ___/ |_| |_| ___||_| |_| _/ __,_||_||_| ___||_|Scott Hanselman @shanselman
  5. 5. _ _ _____ _ _| | | | / __ _| || |_| |_| | ___ __ __ | / /|_ __ _|| _ | / _ / / / | | _| || |_| | | || (_) | V V / | __/|_ __ _|_| |_/ ___/ _/_/ ____/ |_||_|_____ _ ___ ___ ___ ___ _/ ___| | | | / | | / | (_) `--. __ _ __ __ ___ __| | | . . | _ _ | . . | __ _ _ __ _ __ _ __ _ __ _ ___`--. / _` | / / / _ / _` | | |/| || | | | | |/| | / _` || __|| __|| | / _` | / _` | / _ /__/ /| (_| | V / | __/| (_| | | | | || |_| | | | | || (_| || | | | | || (_| || (_| || __/ _____/ __,_| _/ ___| __,_| _| |_/ __, | _| |_/ __,_||_| |_| |_| __,_| __, | ___|( )__/ | __/ | |/|___/ |___/_____ _ _ ___ ___ _____| ___| | | | | | / | / __ | |__ _ __ | |__ __ _ _ __ ___ ___ __| | | . . | _ _ | / / __ _ _ __ ___ ___ _ __| __| | _ | _ / _` || _ / __| / _ / _` | | |/| || | | | | | / _` || __| / _ / _ | __|| |___ | | | || | | || (_| || | | || (__ | __/| (_| | | | | || |_| | | __/| (_| || | | __/| __/| | _____/ |_| |_||_| |_| __,_||_| |_| ___| ___| __,_| _| |_/ __, | ____/ __,_||_| ___| ___||_| ( )__/ | |/|___/_ ___ ___ _ ___ ___| | | / | | | | / |__ _ _ __ __| | | . . | __ _ __| | ___ | . . | ___/ _` || _ / _` | | |/| | / _` | / _` | / _ | |/| | / _ | (_| || | | || (_| | | | | || (_| || (_| || __/ | | | || __/__,_||_| |_| __,_| _| |_/ __,_| __,_| ___| _| |_/ ___|___ _____ _ _____ _ _/ _ |_ _| | | |_ _| | || |/ /_ _ __ | | _ __ ___ | |__ | | __ _ | || | ___ _ __| _ || _ | | | _ / __|| _ | | / _` || || | / _ | __|| | | || | | | _| |_ | | | || (__ | | | | | | | (_| || || || __/| |_| |_/|_| |_| ___/ |_| |_| ___||_| |_| _/ __,_||_||_| ___||_|Scott Hanselman @shanselmanWhat?No RETINA version?
  6. 6. I work here.
  7. 7. I work here.Remotely,actually.
  8. 8. We work inopen source.
  9. 9. BeforeMicrosoft
  10. 10. AfterMicrosoft
  11. 11. My Story
  12. 12. When yourhammer is C++everythingbegins tolook likea thumb.
  13. 13. Got some certifications…MC*.*
  14. 14. Got some certifications…MC*.*
  15. 15. Got some certifications…MC*.*
  16. 16. “Knock, knock.”“Who’s there?”“Java.”
  17. 17. Java Programmer
  18. 18. Write Once Debug Anywhere• The Promise of Java has finally arrived!
  19. 19. Write once,Look like crapeverywhere
  20. 20. My Language
  21. 21. ; Use a simple lookup table created in a complicated way. :)(defmacro ext(a b) `(setq tab (append tab (loop for x from ,a to ,bcollect x)))) (let (m (tab nil)) (ext 0 64) (ext 78 90) (ext 65 77)(ext 91 96) (ext 110 122) (ext 97 109) (ext 123 255) (loop (setq m(read-char)) (write-char (int-char (elt tab (char-int m))))))Lisp
  22. 22. )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  23. 23. )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))“These  are  your  fathers  parentheses;  Elegant  weapons,  for  a  more…  civilized  age.”    xkcd.com/297/  
  24. 24. ; Do fu so it can be turned into a binary or somethingmain:.loop:; function calls are slow ;-)mov eax, 3 ; magic number for read()xor ebx, ebx ; file handlemov ecx, buffer ; buffer to fillmov edx, 4096 ; how many bytes to readint 0x80; if the program doesnt work, replace ebx with a 0cmp eax, ebx ; ebx is 0 from thefilehandle (we hope)jle .done; now eax contains the # of bytes read..rot_buffer:mov edx, buffer;mov ecx, tableX86 ASM
  25. 25. HAI!IM IN YR NorthwindHOW DUZ I ListProducts YR idPRODUCTS = GETPRODUCTS idOMG FOUND YR PRODUCTSIF U SEZIM OUTTA YR NorthwindLOLCode
  26. 26. C#
  27. 27. null-coalescingvar  res  =  obj  ??  new  MyObject();  
  28. 28. checked and uncheckedclass  Test  {          static  readonly  int  x  =  1000000;          static  readonly  int  y  =  1000000;          static  int  F()          {                  return  checked(x  *  y);            //  Throws  OverflowException          }          static  int  G()          {                  return  unchecked(x  *  y);      //  Returns  -­‐727379968          }          static  int  H()          {                  return  x  *  y;                              //  Depends  on  default          }  }  
  29. 29. Evolution of asyncAsynchronous  Programming  Model  (APM)    var  request  =  HttpWebRequest.Create("http://www.microsoft.com");  request.BeginGetResponse(result  =>  {        try  {              using  (var  response  =  (HttpWebResponse)request.EndGetResponse(result))              {                      //now  it’s  STREAM  READER  TIME  SO  SUCK  IT  UP  AND  GET  TO  WORK                      using  (var  stream  =  new  StreamReader(response.GetResponseStream()))                      {                                    //  ZOMG  have  to  write  an  async  read  loop....                      }                }        }        catch  (Exception  ex)  {                            }    //THERE  IS  MORE  CODE  DOWN  HERE  OVERFLOWING  INTO  ANOTHER  TALK  ANOTHER  DAY  },  null);  
  30. 30. Evolution of asyncJust  Get’er  Done  and  Block  Model  (synchronous)      WebClient  client  =  new  WebClient();  client.DownloadFile("http://microsoft.com",  "index.html");  
  31. 31. Evolution of asyncEvent-­‐based  Asynchronous  Pattern  (EAP)    var  wc  =  new  WebClient();  wc.DownloadStringCompleted  +=  (sender,  e)  =>  {      //  do  it  here,  be  aware  of  what  thread  you’re  on  };  wc.DownloadStringAsync("http://microsoft.com");  
  32. 32. Evolution of asyncAsync  and  await    var  client  =  new  HttpClient();  string  data  =  await  client.GetStringAsync(mscomuri);  
  33. 33. Lambdaspublic  IList<Album>  FindAlbumsToGiveAway(IList<Album>  albums)    {          var  badAlbums  =  new  List<Album>();          foreach  (Album  album  in  albums)          {                if  (album.Genre  ==  "Country")                badAlbums.Add(album);          }          return  badAlbums;    }    
  34. 34. Lambdaspublic  IList<Album>  FindAlbumsToGiveAway(IList<Album>  albums)    {        return  albums.Where(album  =>  album.Genre  ==  "Country").ToList();    }  
  35. 35. The Anders Operatorpublic  IList<Album>  FindAlbumsToGiveAway(IList<Album>  albums)    {        return  albums.Where(album  =>  album.Genre  ==  "Country").ToList();    }                      =>      Don’t forgetthe “Resig!”${}
  36. 36. I’m a phony
  37. 37. pho·ny also pho·ney (fōnē)adj. pho·ni·er, pho·ni·est1.a. Not genuine or real; counterfeit: a phony creditcard.b. False; spurious: a phony name.2. Not honest or truthful; deceptive: a phonyexcuse.3.a. Insincere or hypocritical.b. Giving a false impression of truth orauthenticity; specious.
  38. 38. C# keeps getting betterC#, once high level, can be pretty darn low levelShare code across mobile and cloudNative native nativeNuGet is love!Generics, Linq, async/awaitYou have skills/tools/codeThanks, Stu!
  39. 39. Thanks, Stu!
  40. 40. I fix stuff
  41. 41. Mobile
  42. 42. 1993
  43. 43. 2013
  44. 44. Image via Josh Helfferich @digerati 
http://twitter.com/Digeratii/status/165324320179109888Before the iPhone After the iPhone
  45. 45. 1 billion mobile subscriptionsSource:    InternaGonal  Telecom  Union  (hJp://www.itu.int/ITU-­‐D/ict/staGsGcs/at_glance/KeyTelecom.html)    
  46. 46. that‘s  one  for    every  7  people  on  earth  
  47. 47. For  many,  a  mobile  device  IS  their  computer.  
  48. 48. Mobile only Web Users
  49. 49. “The avalanche hasalready started.It is too late for thepebbles to vote.”
  50. 50. “The avalanche hasalready started.It is too late for thepebbles to vote.”Kosh - Babylon 5
  51. 51. Mono and Xamarin and Community
  52. 52. This is theMVVM Frameworkyou’re looking for
  53. 53. (OK, it’s in the social thing,and the Xbox game is crap,but the framework is lovely.)
  54. 54.  
  55. 55. MonoGame!!!Bastion!
  56. 56. Cool LibrariesMVVMMVVM Light Toolkit portable forkMvvmCrossUpdateControlsIoCAutofacNinject portable forkPortableIoCXPlatUtils (IoC and Messenger)OtherJson.NETMetroLogSimple.OdataOxyPlotPushSharpZXing BarcodeMonoCross
  57. 57. Portable Libraryfor Azure Mobile Services
  58. 58. Portable Class LibrariesLOOK AT ALL THISWHITESPACE
  59. 59. PCLs keep getting better!Raising the “Lowest Common Denominator”Shipping new functionality as cross-platformAsync Targeting PackHttpClientMicrosoft.Composition (MEF)TPL DataflowImmutable Collections
  60. 60. Code Sharing
  61. 61. Model-View-ViewModel (MVVM)ViewsHow to display informationWritten in XAMLView ModelsWhat information to displayFlow of interactionModelsData objectsBusiness logicEtc.Platform-specificPortable-ish (DRY)ReferencesDatabinds
  62. 62. Cross Platform App ArchitectureStartupViewsWindows Store AppPlatform specific functionalityView ModelsModelsPortable Class LibraryPlatform functionality abstractionsStartupViewsWindows Phone AppPlatform specific functionalityReferences References
  63. 63. Cross Platform AppsCloud  Windows   Windows    Phone  All in C#Cloud, too!Xamarin.Android   Xamarin.iOS  
  64. 64. iPad,  iPhone,  Android  Phone,  Android  Tablet,  WP8,  WP7  
  65. 65. DisentanglementDemo
  66. 66. You are Powerful
  67. 67. C# - It’s everywhere you want to beEmbeddedWindowsMacLinuxPhonesConsolesServerCloud
  68. 68. C# and .NET on theOpen Source MicroFrameworkin as little as 64k!
  69. 69. C# and .NET on theAzure Cloud withOpen Source SDKs
  70. 70. We aren’t nearly as organizedas we would need to beto be half as evilas you think we are.
  71. 71. There’s two operating systemsshipping on every phone.Native and JS. Target the one thatmeets your needs.
  72. 72. HTML is a great portability layer but itlags behind native functionality bydefinition
  73. 73. We are in control of our future.
  74. 74. We love .NET.Let’s go kick some butt.
  75. 75. Encourage Open Source. EncourageCommunity.
  76. 76. In fact, C# is theonly languagethat gets you intoevery App Storeon the planet.
  77. 77. We support you. We love .NET.Let’s go kick some butt.
  78. 78. Be well,write good code,and stayin touch@shanselman    

×