420 likes | 550 Vues
Discover how to enhance your productivity as a Java developer with insights from Rob Harwood, a seasoned technology evangelist. In this guide, we explore the vital role of integrated development environments (IDEs) like IntelliJ IDEA in boosting efficiency for programmers. Learn about key productivity factors, including organization, quality, and the importance of a skilled team. Understand how to create value while managing cost and time, improve project delivery, and cultivate a productive flow that leads to innovative results in your Java applications.
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)