420 likes | 537 Views
Productive Java From Start to Finish. Rob Harwood Technology Evangelist. About Us. Rob Harwood Professional developer for 7 years Technology evangelist JetBrains Makers of IntelliJ IDEA, and more “Develop with pleasure!” IntelliJ IDEA 6.0 The Most Intelligent Java IDE Award winning.
E N D
Productive Java From Start to Finish Rob Harwood Technology Evangelist
About Us • Rob Harwood • Professional developer for 7 years • Technology evangelist • JetBrains • Makers of IntelliJ IDEA, and more • “Develop with pleasure!” • IntelliJ IDEA 6.0 • The Most Intelligent Java IDE • Award winning
Overview • Productivity is becoming more and more important for Java programmers • This lends importance to tools that enhance productivity, specifically the IDE • … but not all IDEs are the same
Trends in Java Development • Java 5, 6, 7, … • Methodology - Less rigid, more fluid • Agility • Internet / Web 2.0 • Competition - Time to Market • Dynamic languages • Push for higher productivity • No sign of slowing!
How can I be productive in Java? • Many possibilities for improvement • Organization • Project • Team • Programmer • Tools • Programmer is key person • IDE is key tool
What is Productivity? • Project size variables • Increase Scope • Increase Quality • Lower Time • Same Cost • Productivity is ability to create greater value for less cost Cost Time Scope Quality Value Cost Value
Four variables • Quality is usually non-negotiable • Time is usually fixed or continuous • Cost is under tight restrictions • Scope is best variable to negotiate
Quality • Software quality is not like manufacturing quality • Increasing quality actually increases productivity • Many people depend on code, amplifying cost of bugs • Fewer bugs means lower cost and time • High quality code can handle greater scope than low quality • Speeds up all programmers, plus other people • Increase quality as much as possible until you hit the sweet spot
Organization Lower cost Better quality Competitive agility Move up-market Handle more projects Satisfied customers Fewer staff needed Programmer Productive ‘flow’ is enjoyable Think at higher level Less stress Professional development “Develop with pleasure!” Importance of productivity
Fixed variables • Quality is maxed • Time fixed or continuous • Primary factor in cost is scope • How to improve productivity to reduce cost?
Factors affecting productivity • People • Tools • Programming languages • Legacy architecture • Methodology • Organizational (project, team, etc.) • #1 factor is people • Skills • Teamwork • Management
Importance of Programmers • Needed to finish project • Central to ability to produce value in code • Programmer cost strongly affects project cost • Programmer time equals organization money • Programmer heavily affects quality, a major variable • High effect of productivity enhancement • Effects of ‘flow’ • Tools • Skill enhancement • In terms of overall project value, programmer productivity has major effect on mapping to cost of project
Benefits of improving programmer productivity • Influences other people’s productivity • QA • Marketing • Documentation • Management • Allows new styles of development • Test-driven development • Continuous integration • Lowers risk of trying new things • Libraries • Frameworks
Flow • Highly productive state of mind • Complex problems solved in much less time • Totally focused • See big picture • Make intuitive leaps • Think at a high level, in terms of concepts rather than procedures • Development ‘flows’ along gracefully • Also occurs in sports, writing, conversation, problem solving • Everybody experiences flow • Games: Tetris, Minesweeper
How flow works • Rely on well-trained intuition for speed of thought • Eliminate self-doubt and worry over trivialities • As you work, you gain inspiration about what to do next, allowing you to ‘flow’ from one task to the next
UI Flow Diagram • Programmer, desire curve, mountain path Context switch Desire Actual path
Context Switching • Flow is susceptible to interruptions and context switching • Breaks flow • Takes time to get back into flow • “Cost” of context switching is high, especially if repeated frequently
Tools and flow • Eliminate extra steps • Soften or elliminate context-switches • Intelligent features allow higher-level thinking • Help get into flow and maintain flow with fewer context switches
Flow and IDEs Desire Actual path
Flow and IDEs • Tedious steps are something similar to context switch. They force you to think in low-level terms. • Good example of stripping out tedium is Smart Completion. • Keyboard shortcuts are a way to remove context switching. Also, there is a certain logic to the shortcuts, like a language. • Good example is shortcuts for extract and inline.
IDE Productivity • Programmer’s productivity interface into the project • Central to programmer productivity • Increasing programmer productivity can have a major impact on overall cost • IDE can have major effect on productivity, saving time and money while increasing quantity and quality of output • Most time-consuming task: Java coding • Connects other tools together • Better integration means better overall productivity
IDE effect on project dimensions • Increase cost by price • Reduce time • User interface features • Increase Quality • Refactoring • Code Analysis • Integration with testing tools • Reduce complexity (Scope) • Code Analysis • Navigation features • These factors end up reducing cost overall
Price of tools, TCO • Price increases cost, so what’s the justification? • Zero price (free) does not equal zero cost • Total Cost of Ownership (TCO) • Hidden costs • Learning how to use the tool • Limitations on the tool itself • Interactions with other tools • Support and maintenance • Finding components for whole-product • Technical and community support • Quality of the tool • Effect on productivity
TCO • Must compare tools by TCO, not price alone • TCO calculations should be equivalent • Similar features included in price • Increased productivity makes up for TCO, saving overall cost
Proof? • Is TCO really important? • Measuring productivity and TCO is difficult • Business success is undeniable • Proof is IntelliJ IDEA itself • Success of JetBrains • Loyal customers, who pay when all other alternatives are free
IntelliJ IDEA • 2 free, open-source competitors with hundreds of programmers • 3 years since Eclipse became mainstream • JBuilder collapsed, trying to rebuild on Eclipse • All other major Java IDEs are free • JetBrains, small company • Less than 50 developers • Only 10-15 core IntelliJ IDEA developers • Others have time to work on other projects, including researching new ideas • Loyal, satisfied customers • IntelliJ IDEA still going strong • Seems to be only Java IDE worth paying for ;-)
Question • “Aren’t you worried about free competitors?” • No, because productivity is a valuable thing.
IDE Philosophy • UI choices • Architecture • Trade-offs • Usability or raw performance • Integrated or modular • Productivity or whatever works
IDE philosophy trends • Most IDEs go for more ‘stuff’, with enough productivity • We go for more productivity, with enough ‘stuff’ • Compare value of ‘stuff’ versus value of productivity Stuff Productivity Prod Stuff
Productivity IDE Philosophy • Based on what real people do, rather than what’s easy for IDE-programmer to implement • “This is how it should work, so let’s make it work that way,” as opposed to, “These are the tools available, here’s one way of making them work together.” • Tailored to kinds of people who program • Adapt to many styles of programming • Integrated modularity rather than modular integration
Modularity • ‘Stuff’ is changing all the time • New libraries and frameworks • New versions • New methodologies (e.g. AOP) • Some stuff is only needed for small number of people, only special circumstances, etc. • Solution: Extreme modularity? • Modularity sacrifices opportunities for productivity • Integration with IDE is more difficult when modular IDE. • Modular bytecode: Can’t refactor uncompilable code = breaks flow = lower productivity • Integrated PSI: Not only can refactor nearly any code, but can also integrate static code analysis on-the-fly, even if code is broken • Modular IDEs will always be playing “catch-up”
Other limitations of modularity • Diff tool: Editor features • GUI Builder: Analysis • Many more
Examples of IDEs affecting productivity • Code completion • Test Driven Development • Refactoring • Code analysis • Web development • Team productivity
Code completion • Concern yourself with higher-level concepts, rather than syntax and spelling • Explore interfaces via object references • Eliminate unnecessary steps • Keep flow moving well
Test Driven Development • Waterfall • Analysis, Design, Programming, Testing, Integration, Release • Agile just iterates faster • IDE can automte each step, making the manual parts smaller and smaller • Faster cycles, more feedback and visibility • Able to adapt faster, be more agile • Tighter cycles result in capability for a new style of programming • Demo
Refactoring • Increases quality, so that adding features is easier rather than harder • Reduces complexity (scope) • Some amount of refactoring is always required
Code Analysis • Helps individual, but also helps team, above and beyond individual • To be able to sense what you’ve produced • To ‘see’ the code • Improve quality • Reduce complexity for individual
Web development • More than just Java • Higher level of integration between different languages • Languages: Multiple languages, dynamic languages, data languages, scripting langauges
Languages • Not just about Java anymore • Java becoming more productive, but more and more reliance on other languages, especially in the Web 2.0 world • Language API, IntelliLang, Ruby • IDEA is the most language-aware IDE, period.
Team productivity • 5 o’clock check in
TeamCity • Broken build problem (general problem, many facets) • Collaboration problem (code pointers, stack traces) • Offloading work to server (analysis, testing, building, etc.) • Tracking/managing ‘the build’, which after all is the most important product you are concerned with. • TeamCity
Conclusion • IntelliJ IDEA 6.0 • http://www.jetbrains.com/idea • Submit your Name and Email address to Ahmed Hashim for a chance to win a free license! • 5 conference participants will win a free license (value $500 USD)