Dmitri Nesteruk
dmitrinesteruk@gmail.com

http://nesteruk.wordpress.com
   dnesteruk
   dmitri.nesteruk
!   Circa ~10yrs in .Net
   !   C#, F#, Web (HTML+REST), WinForms, etc.
!   Founder & co-ordinator @ St. Petersburg
    Alt.Net User Group (est. 2008, http://spbalt.net)
   !   Podcast: http://spbaltnet.podfm.ru
!   Co-ordinator of the St. Petersburg .Net User
    Group (Ineta, http://sp.ineta.ru)
!   Microsoft MVP – Visual C# (since 2009)

!   Developer evangelist @ JetBrains
!   Passionate .Net developer/consultant
!   Efficiency =
   !   How quickly you write code
   !   How good the code is
!   Efficiency is relative
   !   Relative to how quickly other people code and
       how good their code is
!   This talk is about
    individual efficiency
!   No
    !   Business model not conducive (e.g., monopoly)
    !   Management doesn’t care
    !   Billable hours (outsourcing, etc.)

!   Yes!!!
    !   Product company
    !   Start-up
    !   Company with ‘engineering culture’
!   Intrinsic motivation a.k.a “professionalism”
   !   “Programming is my pride and joy, I must improve
       and do things better”

!   Extrinsic motivation
   !   If I do things better, I’ll get more
       money/respect/casual sex/whatever

!   Efficiency is largely individual.
    Team efficiency is ƒ(individuals).
!   How quickly can you write code?
   !   Especially mundane code
!   How quickly can you
   !   Compile
   !   Run tests
   !   Deploy
!   Do you need to recompile to fix a program?
Demo I
!   Mnemonics
   !   Used to create data structures
!   Code gen features
   !   Create routine code quickly
!   Custom-written features, e.g.,
   !   Dispose(), IDisposable
   ! INotifyPropertyChanged
!   Compilation and testing eats local CPU
   !   VS2010 and earlier also freezes UI :(
!   You need results now, not after check-in
!   Single-machine solution:
   !       Use other (fast) machines to build/test
   !       Use Dropbox (or similar) to sync
   !       Build via MSBuild with /m option
   !       Use a test runner that automatically re-runs tests
           when binaries change
           !   E.g., Gallio Icarus
!   Multi-machine solution:
!   Compilation:
   !       Build project dependency graph
   !       Topological sort
   !       Run MSBuild on individual projects
   !       File sync
!   Testing:
   !   Quantize by assembly (DLL), fixture or method
   !   Execute on separate machines
   !   Collate results (XML merge) and present
!   Existing solutions: IncrediBuild, Electric Cloud
!   What about Continuous Integration?
!   Multiple TC configurations on multiple
    machines
   !   All will (probably) have to compile everything
   !   But different agents can run different things
!   Difficult to coordinate!
!   Only worth it if
   !   Cost is high (e.g., compilation time > 5sec.)
   !   Is automated
      ! Spolsky’s “Can you make a build in one step?”
   !   Parallelizable (often, not always)
   !   Does not have cryptic dependencies, magic
       artefacts
!   Caveat: on remote machines, you lose out on
    VS integration
Demo II
!   Conditionally show a lightweight editor
   !   I use ActiPro, so I have some IntelliSense
!   Instantiate new component and update usage
   !   Stick to one-class-per-file rule
   !   Judicious use of dependency injection
!   Write modified source code to original file
!   Benefits:
   !   Eliminate close-recompile-restart cycle
   !   Preserve memory state
   !   See new features immediately
!   Code generation - R#, code-gen/UML/MDA
    tools
!   AOP - PostSharp, your own MSBuild post-build
    task for IL rewriting (via Mono.Cecil)
!   Dynamic programming - DynamicMethod,
    LINQ Expression compiler, DLR
! Metaprogramming – Boo/Nemerle, Project
    Roslyn (post-C#5), D (!)
   !   Breaks language services (VS, C#)
!   DSLs – F#, MPS
!   Do developers have the best tools money can
    buy? (as per Joel’s Test)
!   Tools =
  !   Best software for development, quality control
  !   Best hardware for development, compilation/
      testing, virtualization, etc.
  !   Best workspace equipment (here be dragons)
!   Do developers make their own development
    tools?
!   Do developers perform R&D on new tools,
    languages, frameworks?
Demo III
!   IDE, refactoring support
   !   IDEA, VS + ReSharper
!   Code insight tools
   ! FxCop, NDepend
!   Infrastructure tools
   !   (D)VCS – Git, Mercurial
      !   Yes, people do host commercial projects on Github
   !   CI systems – TeamCity, Hudson, CC.Net
   ! Collabotartion tools – issue tracking, wiki,
       VSAnywhere
!   Bare minimums
  !   Modern CPU
  !   Enough RAM (~16Gb+ as of 2011)
     !   Laptops notwithstanding
  !   SSDs (still using HDDs?!?)
  !   Multiple monitors
  !   Fast internet connection (duh!..)
!   Assume that dev software (e.g., VS) is power-
    hungry and always expects top-end computers
!   Fast computers allow a lot more intelligence on
    developers’ machines
   !   Resource-heavy code analysis
     !   R# misspelt naming (GPGPU)
   !   Larger, faster, mode detailed caches
   !   Fuzz/Monte-Carlo testing/simulation
   !   Integration tests (VMs etc.)
!   More time is spent on solving problems rather than
    implementation
!   Strong AI ain’t here yet
!   Development depends on lots of other things
   !   Quiet and adequate working conditions
       (Joel’s Test)
   !   Sensible management practices
   !   Whether people are happy with their pay
   !   … and a lot more.
!   YMMV – efficiency may or may note give you
    anything.
!   No substitute for good business model.
!     Questions?
!     Answers?
!     Hate mail?
!     MOAR?!?

Developer Efficiency

  • 1.
  • 2.
    !   Circa~10yrs in .Net !   C#, F#, Web (HTML+REST), WinForms, etc. !   Founder & co-ordinator @ St. Petersburg Alt.Net User Group (est. 2008, http://spbalt.net) !   Podcast: http://spbaltnet.podfm.ru !   Co-ordinator of the St. Petersburg .Net User Group (Ineta, http://sp.ineta.ru) !   Microsoft MVP – Visual C# (since 2009) !   Developer evangelist @ JetBrains !   Passionate .Net developer/consultant
  • 3.
    !   Efficiency= !   How quickly you write code !   How good the code is !   Efficiency is relative !   Relative to how quickly other people code and how good their code is !   This talk is about individual efficiency
  • 4.
    !   No !   Business model not conducive (e.g., monopoly) !   Management doesn’t care !   Billable hours (outsourcing, etc.) !   Yes!!! !   Product company !   Start-up !   Company with ‘engineering culture’
  • 5.
    !   Intrinsicmotivation a.k.a “professionalism” !   “Programming is my pride and joy, I must improve and do things better” !   Extrinsic motivation !   If I do things better, I’ll get more money/respect/casual sex/whatever !   Efficiency is largely individual. Team efficiency is ƒ(individuals).
  • 6.
    !   Howquickly can you write code? !   Especially mundane code !   How quickly can you !   Compile !   Run tests !   Deploy !   Do you need to recompile to fix a program?
  • 7.
  • 8.
    !   Mnemonics !   Used to create data structures !   Code gen features !   Create routine code quickly !   Custom-written features, e.g., !   Dispose(), IDisposable ! INotifyPropertyChanged
  • 9.
    !   Compilationand testing eats local CPU !   VS2010 and earlier also freezes UI :( !   You need results now, not after check-in !   Single-machine solution: !   Use other (fast) machines to build/test !   Use Dropbox (or similar) to sync !   Build via MSBuild with /m option !   Use a test runner that automatically re-runs tests when binaries change !   E.g., Gallio Icarus
  • 10.
    !   Multi-machinesolution: !   Compilation: !   Build project dependency graph !   Topological sort !   Run MSBuild on individual projects !   File sync !   Testing: !   Quantize by assembly (DLL), fixture or method !   Execute on separate machines !   Collate results (XML merge) and present !   Existing solutions: IncrediBuild, Electric Cloud
  • 11.
    !   Whatabout Continuous Integration? !   Multiple TC configurations on multiple machines !   All will (probably) have to compile everything !   But different agents can run different things !   Difficult to coordinate!
  • 12.
    !   Onlyworth it if !   Cost is high (e.g., compilation time > 5sec.) !   Is automated ! Spolsky’s “Can you make a build in one step?” !   Parallelizable (often, not always) !   Does not have cryptic dependencies, magic artefacts !   Caveat: on remote machines, you lose out on VS integration
  • 13.
  • 14.
    !   Conditionallyshow a lightweight editor !   I use ActiPro, so I have some IntelliSense !   Instantiate new component and update usage !   Stick to one-class-per-file rule !   Judicious use of dependency injection !   Write modified source code to original file !   Benefits: !   Eliminate close-recompile-restart cycle !   Preserve memory state !   See new features immediately
  • 15.
    !   Codegeneration - R#, code-gen/UML/MDA tools !   AOP - PostSharp, your own MSBuild post-build task for IL rewriting (via Mono.Cecil) !   Dynamic programming - DynamicMethod, LINQ Expression compiler, DLR ! Metaprogramming – Boo/Nemerle, Project Roslyn (post-C#5), D (!) !   Breaks language services (VS, C#) !   DSLs – F#, MPS
  • 16.
    !   Dodevelopers have the best tools money can buy? (as per Joel’s Test) !   Tools = !   Best software for development, quality control !   Best hardware for development, compilation/ testing, virtualization, etc. !   Best workspace equipment (here be dragons) !   Do developers make their own development tools? !   Do developers perform R&D on new tools, languages, frameworks?
  • 17.
  • 18.
    !   IDE,refactoring support !   IDEA, VS + ReSharper !   Code insight tools ! FxCop, NDepend !   Infrastructure tools !   (D)VCS – Git, Mercurial !   Yes, people do host commercial projects on Github !   CI systems – TeamCity, Hudson, CC.Net ! Collabotartion tools – issue tracking, wiki, VSAnywhere
  • 19.
    !   Bareminimums !   Modern CPU !   Enough RAM (~16Gb+ as of 2011) !   Laptops notwithstanding !   SSDs (still using HDDs?!?) !   Multiple monitors !   Fast internet connection (duh!..) !   Assume that dev software (e.g., VS) is power- hungry and always expects top-end computers
  • 20.
    !   Fastcomputers allow a lot more intelligence on developers’ machines !   Resource-heavy code analysis !   R# misspelt naming (GPGPU) !   Larger, faster, mode detailed caches !   Fuzz/Monte-Carlo testing/simulation !   Integration tests (VMs etc.)
  • 21.
    !   Moretime is spent on solving problems rather than implementation !   Strong AI ain’t here yet !   Development depends on lots of other things !   Quiet and adequate working conditions (Joel’s Test) !   Sensible management practices !   Whether people are happy with their pay !   … and a lot more. !   YMMV – efficiency may or may note give you anything. !   No substitute for good business model.
  • 22.
    !   Questions? !   Answers? !   Hate mail? !   MOAR?!?