productive java from start to finish rob harwood technology evangelist

42
Productive Java Productive Java From Start to From Start to Finish Finish Rob Harwood Technology Evangelist

Upload: lesley-mckenzie

Post on 17-Jan-2016

213 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Productive Java From Start to Finish Rob Harwood Technology Evangelist

Productive Java From Productive Java From Start to FinishStart to Finish

Rob Harwood

Technology Evangelist

Page 2: Productive Java From Start to Finish Rob Harwood Technology Evangelist

22

About UsAbout Us

Rob HarwoodRob Harwood Professional developer for 7 yearsProfessional developer for 7 years Technology evangelistTechnology evangelist

JetBrainsJetBrains Makers of IntelliJ IDEA, and moreMakers of IntelliJ IDEA, and more ““Develop with pleasure!”Develop with pleasure!”

IntelliJ IDEA 6.0IntelliJ IDEA 6.0 The Most Intelligent Java IDEThe Most Intelligent Java IDE Award winningAward winning

Page 3: Productive Java From Start to Finish Rob Harwood Technology Evangelist

33

OverviewOverview

Productivity is becoming more and more Productivity is becoming more and more important for Java programmersimportant for Java programmers

This lends importance to tools that This lends importance to tools that enhance productivity, specifically the IDEenhance productivity, specifically the IDE

… … but not all IDEs are the samebut not all IDEs are the same

Page 4: Productive Java From Start to Finish Rob Harwood Technology Evangelist

44

Trends in Java DevelopmentTrends in Java Development

Java 5, 6, 7, …Java 5, 6, 7, …Methodology - Less rigid, more fluidMethodology - Less rigid, more fluidAgilityAgilityInternet / Web 2.0Internet / Web 2.0Competition - Time to MarketCompetition - Time to MarketDynamic languagesDynamic languagesPush for higher productivityPush for higher productivity No sign of slowing!No sign of slowing!

Page 5: Productive Java From Start to Finish Rob Harwood Technology Evangelist

55

How can I be productive in Java?How can I be productive in Java?

Many possibilities for Many possibilities for improvementimprovement OrganizationOrganization ProjectProject TeamTeam ProgrammerProgrammer ToolsTools

Programmer is key Programmer is key personpersonIDE is key toolIDE is key tool

Organization

Project/Team

Programmers

Tools

Other Members

IDE

Skills

Page 6: Productive Java From Start to Finish Rob Harwood Technology Evangelist

66

What is Productivity?What is Productivity?

Project size variablesProject size variables Increase ScopeIncrease Scope Increase QualityIncrease Quality Lower TimeLower Time Same CostSame Cost

Productivity is ability to Productivity is ability to create greater value for create greater value for less costless cost

Cost Time

Scope Quality

Cost

Value

Value

Page 7: Productive Java From Start to Finish Rob Harwood Technology Evangelist

77

Four variablesFour variables

Quality is usually non-negotiableQuality is usually non-negotiable

Time is usually fixed or continuousTime is usually fixed or continuous

Cost is under tight restrictionsCost is under tight restrictions

Scope is best variable to negotiateScope is best variable to negotiate

Page 8: Productive Java From Start to Finish Rob Harwood Technology Evangelist

88

QualityQuality

Software quality is not like manufacturing qualitySoftware quality is not like manufacturing quality

Increasing quality actually increases productivityIncreasing quality actually increases productivity Many people depend on code, amplifying cost of bugsMany people depend on code, amplifying cost of bugs Fewer bugs means lower cost and timeFewer bugs means lower cost and time High quality code can handle greater scope than low High quality code can handle greater scope than low

qualityquality Speeds up all programmers, plus other peopleSpeeds up all programmers, plus other people

Increase quality as much as possible until you Increase quality as much as possible until you hit the sweet spothit the sweet spot

Page 9: Productive Java From Start to Finish Rob Harwood Technology Evangelist

99

Importance of productivityImportance of productivity

OrganizationOrganization

Lower costLower cost

Better qualityBetter quality

Competitive agilityCompetitive agility

Move up-marketMove up-market

Handle more projectsHandle more projects

Satisfied customersSatisfied customers

Fewer staff neededFewer staff needed

ProgrammerProgrammer

Productive ‘flow’ is Productive ‘flow’ is enjoyableenjoyable

Think at higher levelThink at higher level

Less stressLess stress

Professional Professional developmentdevelopment

““Develop with Develop with pleasure!”pleasure!”

Page 10: Productive Java From Start to Finish Rob Harwood Technology Evangelist

1010

Fixed variablesFixed variables

Quality is maxedQuality is maxed

Time fixed or continuousTime fixed or continuous

Primary factor in cost is scopePrimary factor in cost is scope

How to improve productivity to reduce How to improve productivity to reduce cost?cost?

Page 11: Productive Java From Start to Finish Rob Harwood Technology Evangelist

1111

Factors affecting productivityFactors affecting productivity

PeoplePeopleToolsToolsProgramming languagesProgramming languagesLegacy architectureLegacy architectureMethodologyMethodologyOrganizational (project, team, etc.)Organizational (project, team, etc.)#1 factor is people#1 factor is people SkillsSkills TeamworkTeamwork ManagementManagement

Page 12: Productive Java From Start to Finish Rob Harwood Technology Evangelist

1212

Importance of ProgrammersImportance of Programmers

Needed to finish projectNeeded to finish projectCentral to ability to produce value in codeCentral to ability to produce value in codeProgrammer cost strongly affects project costProgrammer cost strongly affects project costProgrammer time equals organization moneyProgrammer time equals organization moneyProgrammer heavily affects quality, a major variableProgrammer heavily affects quality, a major variableHigh effect of productivity enhancementHigh effect of productivity enhancement

Effects of ‘flow’Effects of ‘flow’ ToolsTools Skill enhancementSkill enhancement

In terms of overall project value, programmer productivity In terms of overall project value, programmer productivity has major effect on mapping to cost of projecthas major effect on mapping to cost of project

Page 13: Productive Java From Start to Finish Rob Harwood Technology Evangelist

1313

Benefits of improving programmer Benefits of improving programmer productivityproductivity

Influences other people’s productivityInfluences other people’s productivity QAQA MarketingMarketing DocumentationDocumentation ManagementManagement

Allows new styles of developmentAllows new styles of development Test-driven developmentTest-driven development Continuous integrationContinuous integration

Lowers risk of trying new thingsLowers risk of trying new things LibrariesLibraries FrameworksFrameworks

Page 14: Productive Java From Start to Finish Rob Harwood Technology Evangelist

1414

FlowFlow

Highly productive state of mindHighly productive state of mindComplex problems solved in much less timeComplex problems solved in much less timeTotally focusedTotally focusedSee big pictureSee big pictureMake intuitive leapsMake intuitive leapsThink at a high level, in terms of concepts rather than Think at a high level, in terms of concepts rather than proceduresproceduresDevelopment ‘flows’ along gracefullyDevelopment ‘flows’ along gracefullyAlso occurs in sports, writing, conversation, problem Also occurs in sports, writing, conversation, problem solvingsolvingEverybody experiences flowEverybody experiences flowGames: Tetris, MinesweeperGames: Tetris, Minesweeper

Page 15: Productive Java From Start to Finish Rob Harwood Technology Evangelist

1515

How flow worksHow flow works

Rely on well-trained intuition for speed of Rely on well-trained intuition for speed of thoughtthought

Eliminate self-doubt and worry over Eliminate self-doubt and worry over trivialitiestrivialities

As you work, you gain inspiration about As you work, you gain inspiration about what to do next, allowing you to ‘flow’ from what to do next, allowing you to ‘flow’ from one task to the nextone task to the next

Page 16: Productive Java From Start to Finish Rob Harwood Technology Evangelist

1616

UI Flow DiagramUI Flow Diagram

Programmer, desire curve, mountain path Programmer, desire curve, mountain path

Desire

Actual path

Context switch

Page 17: Productive Java From Start to Finish Rob Harwood Technology Evangelist

1717

Context SwitchingContext Switching

Flow is susceptible to interruptions and Flow is susceptible to interruptions and context switchingcontext switching

Breaks flowBreaks flow

Takes time to get back into flowTakes time to get back into flow

““Cost” of context switching is high, Cost” of context switching is high, especially if repeated frequentlyespecially if repeated frequently

Page 18: Productive Java From Start to Finish Rob Harwood Technology Evangelist

1818

Tools and flowTools and flow

Eliminate extra stepsEliminate extra steps

Soften or elliminate context-switchesSoften or elliminate context-switches

Intelligent features allow higher-level Intelligent features allow higher-level thinkingthinking

Help get into flow and maintain flow with Help get into flow and maintain flow with fewer context switchesfewer context switches

Page 19: Productive Java From Start to Finish Rob Harwood Technology Evangelist

1919

Flow and IDEsFlow and IDEs

Desire

Actual path

Page 20: Productive Java From Start to Finish Rob Harwood Technology Evangelist

2020

Flow and IDEsFlow and IDEs

Tedious steps are something similar to context Tedious steps are something similar to context switch. They force you to think in low-level switch. They force you to think in low-level terms.terms.

Good example of stripping out tedium is Smart Good example of stripping out tedium is Smart Completion.Completion.

Keyboard shortcuts are a way to remove context Keyboard shortcuts are a way to remove context switching. Also, there is a certain logic to the switching. Also, there is a certain logic to the shortcuts, like a language. shortcuts, like a language.

Good example is shortcuts for extract and inline.Good example is shortcuts for extract and inline.

Page 21: Productive Java From Start to Finish Rob Harwood Technology Evangelist

2121

IDE ProductivityIDE Productivity

Programmer’s productivity interface into the Programmer’s productivity interface into the projectprojectCentral to programmer productivityCentral to programmer productivityIncreasing programmer productivity can have a Increasing programmer productivity can have a major impact on overall costmajor impact on overall costIDE can have major effect on productivity, IDE can have major effect on productivity, saving time and money while increasing quantity saving time and money while increasing quantity and quality of outputand quality of outputMost time-consuming task: Java codingMost time-consuming task: Java codingConnects other tools togetherConnects other tools together Better integration means better overall productivityBetter integration means better overall productivity

Page 22: Productive Java From Start to Finish Rob Harwood Technology Evangelist

2222

IDE effect on project dimensionsIDE effect on project dimensions

Increase cost by priceIncrease cost by priceReduce timeReduce time User interface featuresUser interface features

Increase QualityIncrease Quality RefactoringRefactoring Code AnalysisCode Analysis Integration with testing toolsIntegration with testing tools

Reduce complexity (Scope)Reduce complexity (Scope) Code AnalysisCode Analysis Navigation featuresNavigation features

These factors end up reducing cost overallThese factors end up reducing cost overall

Page 23: Productive Java From Start to Finish Rob Harwood Technology Evangelist

2323

Price of tools, TCOPrice of tools, TCO

Price increases cost, so what’s the justification?Price increases cost, so what’s the justification?Zero price (free) does not equal zero costZero price (free) does not equal zero costTotal Cost of Ownership (TCO)Total Cost of Ownership (TCO)Hidden costsHidden costs

Learning how to use the toolLearning how to use the tool Limitations on the tool itselfLimitations on the tool itself Interactions with other toolsInteractions with other tools Support and maintenanceSupport and maintenance Finding components for whole-productFinding components for whole-product Technical and community supportTechnical and community support Quality of the toolQuality of the tool Effect on productivityEffect on productivity

Page 24: Productive Java From Start to Finish Rob Harwood Technology Evangelist

2424

TCOTCO

Must compare tools by TCO, not price Must compare tools by TCO, not price alonealone

TCO calculations should be equivalentTCO calculations should be equivalent Similar features included in priceSimilar features included in price

Increased productivity makes up for TCO, Increased productivity makes up for TCO, saving overall costsaving overall cost

Page 25: Productive Java From Start to Finish Rob Harwood Technology Evangelist

2525

Proof?Proof?

Is TCO really important?Is TCO really important?

Measuring productivity and TCO is difficultMeasuring productivity and TCO is difficultBusiness success is undeniableBusiness success is undeniable

Proof is IntelliJ IDEA itselfProof is IntelliJ IDEA itself Success of JetBrainsSuccess of JetBrains Loyal customers, who pay when all other Loyal customers, who pay when all other

alternatives are freealternatives are free

Page 26: Productive Java From Start to Finish Rob Harwood Technology Evangelist

2626

IntelliJ IDEAIntelliJ IDEA

2 free, open-source competitors with hundreds of 2 free, open-source competitors with hundreds of programmersprogrammers3 years since Eclipse became mainstream3 years since Eclipse became mainstreamJBuilder collapsed, trying to rebuild on EclipseJBuilder collapsed, trying to rebuild on EclipseAll other major Java IDEs are freeAll other major Java IDEs are freeJetBrains, small companyJetBrains, small company

Less than 50 developersLess than 50 developers Only 10-15 core IntelliJ IDEA developersOnly 10-15 core IntelliJ IDEA developers Others have time to work on other projects, including Others have time to work on other projects, including

researching new ideasresearching new ideas

Loyal, satisfied customersLoyal, satisfied customersIntelliJ IDEA still going strongIntelliJ IDEA still going strong

Seems to be only Java IDE worth paying for ;-)Seems to be only Java IDE worth paying for ;-)

Page 27: Productive Java From Start to Finish Rob Harwood Technology Evangelist

2727

QuestionQuestion

““Aren’t you worried about free Aren’t you worried about free competitors?”competitors?”

No, because productivity is a valuable No, because productivity is a valuable thing.thing.

Page 28: Productive Java From Start to Finish Rob Harwood Technology Evangelist

2828

IDE PhilosophyIDE Philosophy

UI choicesUI choices

ArchitectureArchitecture

Trade-offsTrade-offs Usability or raw performanceUsability or raw performance Integrated or modularIntegrated or modular Productivity or whatever worksProductivity or whatever works

Page 29: Productive Java From Start to Finish Rob Harwood Technology Evangelist

2929

IDE philosophy trendsIDE philosophy trends

Most IDEs go for Most IDEs go for more ‘stuff’, with more ‘stuff’, with enough productivityenough productivity

We go for more We go for more productivity, with productivity, with enough ‘stuff’enough ‘stuff’

Compare value of Compare value of ‘stuff’ versus value of ‘stuff’ versus value of productivityproductivity

Stuff

Prod

Stuff

Productivity

Page 30: Productive Java From Start to Finish Rob Harwood Technology Evangelist

3030

Productivity IDE PhilosophyProductivity IDE Philosophy

Based on what real people do, rather than Based on what real people do, rather than what’s easy for IDE-programmer to implementwhat’s easy for IDE-programmer to implement““This is how it should work, so let’s make it work This is how it should work, so let’s make it work that way,” as opposed to, “These are the tools that way,” as opposed to, “These are the tools available, here’s one way of making them work available, here’s one way of making them work together.”together.”Tailored to kinds of people who programTailored to kinds of people who programAdapt to many styles of programmingAdapt to many styles of programmingIntegrated modularity rather than modular Integrated modularity rather than modular integrationintegration

Page 31: Productive Java From Start to Finish Rob Harwood Technology Evangelist

3131

ModularityModularity

‘‘Stuff’ is changing all the timeStuff’ is changing all the time New libraries and frameworksNew libraries and frameworks New versionsNew versions New methodologies (e.g. AOP)New methodologies (e.g. AOP)

Some stuff is only needed for small number of people, only special Some stuff is only needed for small number of people, only special circumstances, etc.circumstances, etc.Solution: Extreme modularity?Solution: Extreme modularity?Modularity sacrifices opportunities for productivityModularity sacrifices opportunities for productivityIntegration with IDE is more difficult when modular IDE.Integration with IDE is more difficult when modular IDE.

Modular bytecode: Can’t refactor uncompilable code = breaks flow = Modular bytecode: Can’t refactor uncompilable code = breaks flow = lower productivitylower productivity

Integrated PSI: Not only can refactor nearly any code, but can also Integrated PSI: Not only can refactor nearly any code, but can also integrate static code analysis on-the-fly, even if code is brokenintegrate static code analysis on-the-fly, even if code is broken

Modular IDEs will always be playing “catch-up”Modular IDEs will always be playing “catch-up”

Page 32: Productive Java From Start to Finish Rob Harwood Technology Evangelist

3232

Other limitations of modularityOther limitations of modularity

Diff tool: Editor featuresDiff tool: Editor features

GUI Builder: AnalysisGUI Builder: Analysis

Many moreMany more

Page 33: Productive Java From Start to Finish Rob Harwood Technology Evangelist

3333

Examples of IDEs affecting Examples of IDEs affecting productivityproductivity

Code completionCode completion

Test Driven DevelopmentTest Driven Development

RefactoringRefactoring

Code analysisCode analysis

Web developmentWeb development

Team productivityTeam productivity

Page 34: Productive Java From Start to Finish Rob Harwood Technology Evangelist

3434

Code completionCode completion

Concern yourself with higher-level Concern yourself with higher-level concepts, rather than syntax and spellingconcepts, rather than syntax and spelling

Explore interfaces via object referencesExplore interfaces via object references

Eliminate unnecessary stepsEliminate unnecessary steps

Keep flow moving wellKeep flow moving well

Page 35: Productive Java From Start to Finish Rob Harwood Technology Evangelist

3535

Test Driven DevelopmentTest Driven Development

WaterfallWaterfall Analysis, Design, Programming, Testing, Integration, Analysis, Design, Programming, Testing, Integration,

ReleaseRelease

Agile just iterates fasterAgile just iterates faster IDE can automte each step, making the manual parts IDE can automte each step, making the manual parts

smaller and smallersmaller and smaller Faster cycles, more feedback and visibilityFaster cycles, more feedback and visibility

Able to adapt faster, be more agileAble to adapt faster, be more agile

Tighter cycles result in capability for a new style Tighter cycles result in capability for a new style of programmingof programmingDemoDemo

Page 36: Productive Java From Start to Finish Rob Harwood Technology Evangelist

3636

RefactoringRefactoring

Increases quality, so that adding features Increases quality, so that adding features is easier rather than harderis easier rather than harder

Reduces complexity (scope)Reduces complexity (scope)

Some amount of refactoring is always Some amount of refactoring is always requiredrequired

Page 37: Productive Java From Start to Finish Rob Harwood Technology Evangelist

3737

Code AnalysisCode Analysis

Helps individual, but also helps team, Helps individual, but also helps team, above and beyond individualabove and beyond individual

To be able to sense what you’ve producedTo be able to sense what you’ve produced

To ‘see’ the codeTo ‘see’ the code

Improve qualityImprove quality

Reduce complexity for individualReduce complexity for individual

Page 38: Productive Java From Start to Finish Rob Harwood Technology Evangelist

3838

Web developmentWeb development

More than just JavaMore than just Java

Higher level of integration between Higher level of integration between different languagesdifferent languages

Languages: Multiple languages, dynamic Languages: Multiple languages, dynamic languages, data languages, scripting languages, data languages, scripting langaugeslangauges

Page 39: Productive Java From Start to Finish Rob Harwood Technology Evangelist

3939

LanguagesLanguages

Not just about Java anymoreNot just about Java anymore Java becoming more productive, but more Java becoming more productive, but more

and more reliance on other languages, and more reliance on other languages, especially in the Web 2.0 worldespecially in the Web 2.0 world

Language API, IntelliLang, RubyLanguage API, IntelliLang, Ruby

IDEA is the most language-aware IDE, IDEA is the most language-aware IDE, period.period.

Page 40: Productive Java From Start to Finish Rob Harwood Technology Evangelist

4040

Team productivityTeam productivity

5 o’clock check in5 o’clock check in

Page 41: Productive Java From Start to Finish Rob Harwood Technology Evangelist

4141

TeamCityTeamCity

Broken build problem (general problem, many Broken build problem (general problem, many facets)facets)Collaboration problem (code pointers, stack Collaboration problem (code pointers, stack traces)traces)Offloading work to server (analysis, testing, Offloading work to server (analysis, testing, building, etc.)building, etc.)Tracking/managing ‘the build’, which after all is Tracking/managing ‘the build’, which after all is the most important product you are concerned the most important product you are concerned with.with.TeamCityTeamCity

Page 42: Productive Java From Start to Finish Rob Harwood Technology Evangelist

4242

ConclusionConclusion

IntelliJ IDEA 6.0IntelliJ IDEA 6.0 http://www.jetbrains.com/ideahttp://www.jetbrains.com/idea

Submit your Submit your NameName and and Email addressEmail address to to Ahmed Hashim for a chance to win a free Ahmed Hashim for a chance to win a free license!license! 5 conference participants will win a free 5 conference participants will win a free

license (value $500 USD)license (value $500 USD)