1 / 42

Productive Java From Start to Finish

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.

anka
Download Presentation

Productive Java From Start to Finish

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Productive Java From Start to Finish Rob Harwood Technology Evangelist

  2. 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

  3. 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

  4. 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!

  5. How can I be productive in Java? • Many possibilities for improvement • Organization • Project • Team • Programmer • Tools • Programmer is key person • IDE is key tool

  6. 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

  7. Four variables • Quality is usually non-negotiable • Time is usually fixed or continuous • Cost is under tight restrictions • Scope is best variable to negotiate

  8. 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

  9. 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

  10. Fixed variables • Quality is maxed • Time fixed or continuous • Primary factor in cost is scope • How to improve productivity to reduce cost?

  11. Factors affecting productivity • People • Tools • Programming languages • Legacy architecture • Methodology • Organizational (project, team, etc.) • #1 factor is people • Skills • Teamwork • Management

  12. 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

  13. 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

  14. 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

  15. 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

  16. UI Flow Diagram • Programmer, desire curve, mountain path Context switch Desire Actual path

  17. 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

  18. 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

  19. Flow and IDEs Desire Actual path

  20. 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.

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. 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 ;-)

  27. Question • “Aren’t you worried about free competitors?” • No, because productivity is a valuable thing.

  28. IDE Philosophy • UI choices • Architecture • Trade-offs • Usability or raw performance • Integrated or modular • Productivity or whatever works

  29. 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

  30. 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

  31. 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”

  32. Other limitations of modularity • Diff tool: Editor features • GUI Builder: Analysis • Many more

  33. Examples of IDEs affecting productivity • Code completion • Test Driven Development • Refactoring • Code analysis • Web development • Team productivity

  34. 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

  35. 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

  36. Refactoring • Increases quality, so that adding features is easier rather than harder • Reduces complexity (scope) • Some amount of refactoring is always required

  37. 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

  38. Web development • More than just Java • Higher level of integration between different languages • Languages: Multiple languages, dynamic languages, data languages, scripting langauges

  39. 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.

  40. Team productivity • 5 o’clock check in

  41. 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

  42. 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)

More Related