SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
Effective entrepreneurship
 for software developers
     in the mobile age



              Carlos Ble
      carlosble.com - @carlosble
 Presented at: Sociedad de Promoción Econónica de Gran Canaria (SPEGC).
                   Gran Canaria, 20 abril 2013
@carlosble



Building the right software
 - Entrepreneurship
 - Lean startup & Impact Mapping
 - Agile, SbE & BDD

Building the software right
 - Clean code & craftsmanship
 - SOLID design & architecture
 - TDD, and other XP practices
 - Continuous delivery
 - Native, HTML5+JavaScript, Xamarin...?
 - Mobile testing

Interactive hands-on session :
  - Code with me on the randori kata
@carlosble




Are you
          really an
                  entepreneur?
@carlosble




Let'
     s bu
          ild t
                he r
                     ight
                          soft
                               ware
@carlosble



         Building the right software

●
    Lean startup:
- Fail fast
- Validated learning - Market discovery
- Avoid waste
- Book: Lean startup by Eric Ries

●
    SBE, BDD: What do we need and why?
         It's all about communication... let's talk!
    - Books & Authors:
        - Gojko Adzic (3 books)
        - The Cucumber Book (Matt & Aslak)
@carlosble



          Building the right software
●
    User stories:
     Title (one line describing the story)
     Narrative:
     As a [role]
     I want [feature]
     So that [benefit]
          Source: Dan North - http://dannorth.net/whats-in-a-story/


●
    Personas (personajes in Spanish)

●
    Impact mapping (impactmapping.org)

●
    Planning & Analysis : Discover to Deliver [.com] (book)
@carlosble



    Gherkin language: What, not how


Given Fred has bought a microwave
And the microwave costs 100€
When we refund the microwave
Then Fred should be refunded 100€

Source: Liz Keogh -
http://www.slideshare.net/lunivore/behavior-driven-development-11754474
@carlosble



   Cucumber and step definitions

[Given(“Fred has bought a microwave”)]
public void GivenMicrowaveIsBought(){...}

[And(“the microwave costs (.*)€”)]
public void AndMicrowaveCosts(int cost){...}

[When(“we refund the microwave”)]
public void WhenWeRefundTheMicrowave(){...}

[Then(“Fred should be refunded (.*)€”)]
public void ThenShouldBeRefunded(int amount)
{
    Assert...
}

           Step definitions using C# with SpecFlow (Cucumber for .Net)
@carlosble




Let'
     s bu
          ild t
                he s
                     oftw
                          are
                              righ
                                   t
@carlosble



         Building the software right
Software craftsmanship manifesto:

●  Not only working software, 
            but also well­crafted software
● Not only responding to change, 


            but also steadily adding value
● Not only individuals and interactions, 


            but also a community of professionals
● Not only customer collaboration, 


            but also productive partnerships

“The only way to go fast, is to go well” - Robert C. Martin
@carlosble



       Building the software right
Clean Code:
Does it matter? - Cleancoders.com and the book

Low coupling, high cohesion, dependencies.

SOLID design principles:
  Single Responsibility
  Open/Closed
  Liskov Substitution
  Interface Segregation
  Dependency Injection

TDD and Pair programming:
Minimalistic, goal driven, precise
@carlosble



         Building the software right




                                                          OU?!
                                            em,..   . DO Y
                                 tr ol syst
                   ersion c on
                 v
    ou h ave a
So y
@carlosble



 Building the software right




Remove duplication

    Good naming
@carlosble




              eXtreme Programming
                   It's about VALUES:

        ●
            Simplicity

        ●
            Communication

        ●
            Feedback

        ●
            Courage → Honesty

    - Book: Extreme Programming Explained: Embrace change
2nd edition, Kent Beck
@carlosble



 The TDD Mantra
RED:
   Before writing the code,
    express your intent in
     the form of a test        Books:

                               > Test Driven –
                               Lasse Koskela
GREEN:
  Don't think, just make       > Growing object
    the test pass              oriented software
                               guided by tests –
    with the minimun effort,   Freeman & Pryce
     the simplest way
                               > Diseño agil con
                               TDD –
REFACTOR:                      Carlos Ble & co.
   Remove duplication
    Improve naming
     SOLID
@carlosble


Pair programming            or... maximizing the amount
                   of work NOT done
  ●
      The bottleneck of the project is not the keyboard.

  ●
      Incredibly effective way of eliminating waste.

  ●
      Best enemy of defects.

  ●
   I always prefer to pair than coding alone (except on
  those days when I don't feel any good).

  ●
      Sinergy: 1+1 = 4
                                     ODE
                               I TY C
                            UAL
                     HI GH Q
@carlosble




          If you are in a team...

●
    Code reviews.

●
    Continuous integration.

●
    Be a good team player: do your best always.

●
    And before anything else... stick to the
      principles and understand the values.
@carlosble




                 Architecture
Book: Code Complete, Steve McConnell
●
  Major classes
●
  Data Design
●
  Business Rules
●
  User Interface Design
●
  Resource Management
●
  Security
●
  Performance
●
  Scalability
●
  Interoperability
●
  Internationalization/Localization (i18n, l10n)
●
  Input/Output
●
  Error Processing
●
  Fault Tolerance

●
    Good architecture allows you to defer decisions
@carlosble




                Design patterns

Book: Head first design patterns

What I use the most:
    ●
        Factory
    ●
        Template method
    ●
        Wrapper
    ●
        Observer
    ●
        Mediator
    ●
        Singleton
    ●
        MVVM / MVP / Passive View

●
    Let them emerge from your designs
@carlosble




          Exploratory testing & UX
●
 Even if you've got 100% test coverage, your app can
be broken (and it will).

●
    Exploratory testing is always necessary.

●
    Try to get the application tested by real testers.

●
    Invite beta testers.

●
    Don't forget about usability and User eXperience:
     Books:
           Don't make me think – Steve Krug
           User interface design for programmers - Spolsky
@carlosble



             Native or not native?
●
    Some specialists are making good money
       and native apps perform better than HTML+JS, but...

●
    What do you need?
    ●
        Powerful visual effects?
    ●
        Targeting multiple platforms?

●
    What are your skills? And your resources?
    ●
        Are you productive with JavaScript?
    ●
        Do you have to maintain it in the long run?

●
    There are alternatives :
    - PhoneGap + frameworks like jQuery mobile.
    - Sencha Touch.
    - Xamarin (C# development).
    - Appcelerator.
    - ...
@carlosble

          Automated testing
                in the mobile world
●
    Calabash (multiplatform): http://calaba.sh (Cucumber friendly!)
     - Demo: http://skillsmatter.com/podcast/java-jee/cross-platform-and-end-to-end-bdd-for-mobile

●
    Frank (iOS): http://testingwithfrank.com/ (Cucumber friendly!)
●
    Robolectric (Android): unit testing

        But remember...
        the mobile is just a delivery mechanism!

●
    Book: Responsible design for Android - J.B. Rainsberger (leanpub)
@carlosble



     Want to be a good developer?
●
    Seek continuous improvement
      - Read books (specially in English)
      - Attend to conferences
      - Listen to podcasts
      - Share with the local communities
      - Write a blog
      - Work on some open source project
      - Practice with code katas or pet projects
      - Teach others
●
  Improve your communications skills
●
  Master your tools. Some examples:
     - Can you type without looking at the keyboard?
     - Do you know common shortcuts?
●
    Be a good teammate

Book: Apprenticeship patterns – Hoover & Oshineye
@carlosble



                     Conclusions
●
 It's not about money, just do your best as a
professional and work for a better world.

●
  Don't worry to much about a particular technology,
learn about principles, patterns and techniques.

●
 Although being a technology specialist might help you
make a lot of money in the short term.

●
    Build the right software != Build the software right

●
 Improve your communication skills because that is as
important as programming.

●
    A great professional is always learning.
@carlosble



              Related presentations




http://www.slideshare.net/carlosblejurado/best-practicesjsria
http://www.slideshare.net/carlosble/charla-tdd-uji-032010
http://www.slideshare.net/carlosblejurado/bdd-workshop-for-javascript-developers

Weitere ähnliche Inhalte

Ähnlich wie Effective entrepreneurship for developers

Writing Clean Code
Writing Clean CodeWriting Clean Code
Writing Clean CodeNascenia IT
 
It is a sunny day
It is a sunny dayIt is a sunny day
It is a sunny daybcoder
 
Friday final test
Friday final testFriday final test
Friday final testbcoder
 
Things You Need to Know Before Starting An App-Openair2015 keynote
Things You Need to Know Before Starting An App-Openair2015 keynoteThings You Need to Know Before Starting An App-Openair2015 keynote
Things You Need to Know Before Starting An App-Openair2015 keynoteSana Nasar
 
The Journey to Master Code Design
The Journey to Master Code DesignThe Journey to Master Code Design
The Journey to Master Code DesignAlexandru Bolboaca
 
Managing a Project the Drupal Way - Drupal Open Days Ireland
Managing a Project the Drupal Way - Drupal Open Days IrelandManaging a Project the Drupal Way - Drupal Open Days Ireland
Managing a Project the Drupal Way - Drupal Open Days IrelandEmma Jane Hogbin Westby
 
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLove
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLoveOSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLove
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLoveNETWAYS
 
How to code in the XXI century without losing your head
How to code in the XXI century without losing your headHow to code in the XXI century without losing your head
How to code in the XXI century without losing your headRené Olivo
 
15 Experts on the Art of JavaScript Programming
15 Experts on the Art of JavaScript Programming15 Experts on the Art of JavaScript Programming
15 Experts on the Art of JavaScript ProgrammingFusionCharts
 
Software Development Essential Skills
Software Development Essential SkillsSoftware Development Essential Skills
Software Development Essential SkillsJohn Choi
 
Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)ncoghlan_dev
 
Cathedral and the Bazaar
Cathedral and the BazaarCathedral and the Bazaar
Cathedral and the BazaarSumeet Garnaik
 
Drupal and Devops , the Survey Results
Drupal and Devops , the Survey ResultsDrupal and Devops , the Survey Results
Drupal and Devops , the Survey ResultsKris Buytaert
 
Quality rails coding
Quality rails codingQuality rails coding
Quality rails codingCalum Halcrow
 
BDD for RIAs with JavaScript - Skills Matter
BDD for RIAs with JavaScript - Skills MatterBDD for RIAs with JavaScript - Skills Matter
BDD for RIAs with JavaScript - Skills MatterCarlos Ble
 
Path dependent-development (PyCon India)
Path dependent-development (PyCon India)Path dependent-development (PyCon India)
Path dependent-development (PyCon India)ncoghlan_dev
 

Ähnlich wie Effective entrepreneurship for developers (20)

Writing Clean Code
Writing Clean CodeWriting Clean Code
Writing Clean Code
 
It is a sunny day
It is a sunny dayIt is a sunny day
It is a sunny day
 
Friday final test
Friday final testFriday final test
Friday final test
 
Crafting Great Code
Crafting Great CodeCrafting Great Code
Crafting Great Code
 
Things You Need to Know Before Starting An App-Openair2015 keynote
Things You Need to Know Before Starting An App-Openair2015 keynoteThings You Need to Know Before Starting An App-Openair2015 keynote
Things You Need to Know Before Starting An App-Openair2015 keynote
 
The Journey to Master Code Design
The Journey to Master Code DesignThe Journey to Master Code Design
The Journey to Master Code Design
 
Quick Intro to Clean Coding
Quick Intro to Clean CodingQuick Intro to Clean Coding
Quick Intro to Clean Coding
 
Learning to code in 2020
Learning to code in 2020Learning to code in 2020
Learning to code in 2020
 
Java
JavaJava
Java
 
Managing a Project the Drupal Way - Drupal Open Days Ireland
Managing a Project the Drupal Way - Drupal Open Days IrelandManaging a Project the Drupal Way - Drupal Open Days Ireland
Managing a Project the Drupal Way - Drupal Open Days Ireland
 
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLove
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLoveOSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLove
OSDC 2015: Kris Buytaert | From ConfigManagementSucks to ConfigManagementLove
 
How to code in the XXI century without losing your head
How to code in the XXI century without losing your headHow to code in the XXI century without losing your head
How to code in the XXI century without losing your head
 
15 Experts on the Art of JavaScript Programming
15 Experts on the Art of JavaScript Programming15 Experts on the Art of JavaScript Programming
15 Experts on the Art of JavaScript Programming
 
Software Development Essential Skills
Software Development Essential SkillsSoftware Development Essential Skills
Software Development Essential Skills
 
Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)
 
Cathedral and the Bazaar
Cathedral and the BazaarCathedral and the Bazaar
Cathedral and the Bazaar
 
Drupal and Devops , the Survey Results
Drupal and Devops , the Survey ResultsDrupal and Devops , the Survey Results
Drupal and Devops , the Survey Results
 
Quality rails coding
Quality rails codingQuality rails coding
Quality rails coding
 
BDD for RIAs with JavaScript - Skills Matter
BDD for RIAs with JavaScript - Skills MatterBDD for RIAs with JavaScript - Skills Matter
BDD for RIAs with JavaScript - Skills Matter
 
Path dependent-development (PyCon India)
Path dependent-development (PyCon India)Path dependent-development (PyCon India)
Path dependent-development (PyCon India)
 

Effective entrepreneurship for developers

  • 1. Effective entrepreneurship for software developers in the mobile age Carlos Ble carlosble.com - @carlosble Presented at: Sociedad de Promoción Econónica de Gran Canaria (SPEGC). Gran Canaria, 20 abril 2013
  • 2. @carlosble Building the right software - Entrepreneurship - Lean startup & Impact Mapping - Agile, SbE & BDD Building the software right - Clean code & craftsmanship - SOLID design & architecture - TDD, and other XP practices - Continuous delivery - Native, HTML5+JavaScript, Xamarin...? - Mobile testing Interactive hands-on session : - Code with me on the randori kata
  • 3. @carlosble Are you really an entepreneur?
  • 4. @carlosble Let' s bu ild t he r ight soft ware
  • 5. @carlosble Building the right software ● Lean startup: - Fail fast - Validated learning - Market discovery - Avoid waste - Book: Lean startup by Eric Ries ● SBE, BDD: What do we need and why? It's all about communication... let's talk! - Books & Authors: - Gojko Adzic (3 books) - The Cucumber Book (Matt & Aslak)
  • 6. @carlosble Building the right software ● User stories: Title (one line describing the story) Narrative: As a [role] I want [feature] So that [benefit] Source: Dan North - http://dannorth.net/whats-in-a-story/ ● Personas (personajes in Spanish) ● Impact mapping (impactmapping.org) ● Planning & Analysis : Discover to Deliver [.com] (book)
  • 7. @carlosble Gherkin language: What, not how Given Fred has bought a microwave And the microwave costs 100€ When we refund the microwave Then Fred should be refunded 100€ Source: Liz Keogh - http://www.slideshare.net/lunivore/behavior-driven-development-11754474
  • 8. @carlosble Cucumber and step definitions [Given(“Fred has bought a microwave”)] public void GivenMicrowaveIsBought(){...} [And(“the microwave costs (.*)€”)] public void AndMicrowaveCosts(int cost){...} [When(“we refund the microwave”)] public void WhenWeRefundTheMicrowave(){...} [Then(“Fred should be refunded (.*)€”)] public void ThenShouldBeRefunded(int amount) {     Assert... } Step definitions using C# with SpecFlow (Cucumber for .Net)
  • 9. @carlosble Let' s bu ild t he s oftw are righ t
  • 10. @carlosble Building the software right Software craftsmanship manifesto: ● Not only working software,              but also well­crafted software ● Not only responding to change,              but also steadily adding value ● Not only individuals and interactions,              but also a community of professionals ● Not only customer collaboration,              but also productive partnerships “The only way to go fast, is to go well” - Robert C. Martin
  • 11. @carlosble Building the software right Clean Code: Does it matter? - Cleancoders.com and the book Low coupling, high cohesion, dependencies. SOLID design principles: Single Responsibility Open/Closed Liskov Substitution Interface Segregation Dependency Injection TDD and Pair programming: Minimalistic, goal driven, precise
  • 12. @carlosble Building the software right OU?! em,.. . DO Y tr ol syst ersion c on v ou h ave a So y
  • 13. @carlosble Building the software right Remove duplication Good naming
  • 14. @carlosble eXtreme Programming It's about VALUES: ● Simplicity ● Communication ● Feedback ● Courage → Honesty - Book: Extreme Programming Explained: Embrace change 2nd edition, Kent Beck
  • 15. @carlosble The TDD Mantra RED: Before writing the code, express your intent in the form of a test Books: > Test Driven – Lasse Koskela GREEN: Don't think, just make > Growing object the test pass oriented software guided by tests – with the minimun effort, Freeman & Pryce the simplest way > Diseño agil con TDD – REFACTOR: Carlos Ble & co. Remove duplication Improve naming SOLID
  • 16. @carlosble Pair programming or... maximizing the amount of work NOT done ● The bottleneck of the project is not the keyboard. ● Incredibly effective way of eliminating waste. ● Best enemy of defects. ● I always prefer to pair than coding alone (except on those days when I don't feel any good). ● Sinergy: 1+1 = 4 ODE I TY C UAL HI GH Q
  • 17. @carlosble If you are in a team... ● Code reviews. ● Continuous integration. ● Be a good team player: do your best always. ● And before anything else... stick to the principles and understand the values.
  • 18. @carlosble Architecture Book: Code Complete, Steve McConnell ● Major classes ● Data Design ● Business Rules ● User Interface Design ● Resource Management ● Security ● Performance ● Scalability ● Interoperability ● Internationalization/Localization (i18n, l10n) ● Input/Output ● Error Processing ● Fault Tolerance ● Good architecture allows you to defer decisions
  • 19. @carlosble Design patterns Book: Head first design patterns What I use the most: ● Factory ● Template method ● Wrapper ● Observer ● Mediator ● Singleton ● MVVM / MVP / Passive View ● Let them emerge from your designs
  • 20. @carlosble Exploratory testing & UX ● Even if you've got 100% test coverage, your app can be broken (and it will). ● Exploratory testing is always necessary. ● Try to get the application tested by real testers. ● Invite beta testers. ● Don't forget about usability and User eXperience: Books: Don't make me think – Steve Krug User interface design for programmers - Spolsky
  • 21. @carlosble Native or not native? ● Some specialists are making good money and native apps perform better than HTML+JS, but... ● What do you need? ● Powerful visual effects? ● Targeting multiple platforms? ● What are your skills? And your resources? ● Are you productive with JavaScript? ● Do you have to maintain it in the long run? ● There are alternatives : - PhoneGap + frameworks like jQuery mobile. - Sencha Touch. - Xamarin (C# development). - Appcelerator. - ...
  • 22. @carlosble Automated testing in the mobile world ● Calabash (multiplatform): http://calaba.sh (Cucumber friendly!) - Demo: http://skillsmatter.com/podcast/java-jee/cross-platform-and-end-to-end-bdd-for-mobile ● Frank (iOS): http://testingwithfrank.com/ (Cucumber friendly!) ● Robolectric (Android): unit testing But remember... the mobile is just a delivery mechanism! ● Book: Responsible design for Android - J.B. Rainsberger (leanpub)
  • 23. @carlosble Want to be a good developer? ● Seek continuous improvement - Read books (specially in English) - Attend to conferences - Listen to podcasts - Share with the local communities - Write a blog - Work on some open source project - Practice with code katas or pet projects - Teach others ● Improve your communications skills ● Master your tools. Some examples: - Can you type without looking at the keyboard? - Do you know common shortcuts? ● Be a good teammate Book: Apprenticeship patterns – Hoover & Oshineye
  • 24. @carlosble Conclusions ● It's not about money, just do your best as a professional and work for a better world. ● Don't worry to much about a particular technology, learn about principles, patterns and techniques. ● Although being a technology specialist might help you make a lot of money in the short term. ● Build the right software != Build the software right ● Improve your communication skills because that is as important as programming. ● A great professional is always learning.
  • 25. @carlosble Related presentations http://www.slideshare.net/carlosblejurado/best-practicesjsria http://www.slideshare.net/carlosble/charla-tdd-uji-032010 http://www.slideshare.net/carlosblejurado/bdd-workshop-for-javascript-developers