Boost PC performance: How more available memory can improve productivity
Dealing with Technical Challenges (Lecture
1. Lecture: Dealing with challenges (technical)
Chris Douce, 22 July 2013 (14.00 – 14.50)
2.
3.
4. Dealing with the practical issues
Photo Sarah G (Creative Commons)
5. Why is software so hard?
Photo by Honda news (Creative Commons)
6. Why is software so hard?
Photo by Honda news (Creative Commons)
7. Agile principles
• Customer satisfaction by rapid delivery of useful software
• Welcome changing requirements, even late in development
• Working software is delivered frequently (weeks rather than months)
• Working software is the principal measure of progress
• Sustainable development, able to maintain a constant pace
• Close, daily cooperation between business people and developers
• Face-to-face conversation is the best form of communication (co-location)
• Projects are built around motivated individuals, who should be trusted
• Continuous attention to technical excellence and good design
• Simplicity —the art of maximizing the amount of work not done—is essential
• Self-organizing teams
• Regular adaptation to changing circumstances
Source: wikipedia
13. Play
• Tools and development environments
• Sample code and software
• Prototypes
• Similar products
• Different products: same vendor, different vendors
• Explore the boundaries of the possible
• Give yourself some time… It’s okay!
• Is fundamentally important…
17. Choosing what to implement
• Identify the key functions
• Decide on what is out of scope (horizontal/vertical prototyping)
• Choose how far you’re going to go
• Understand what you can do
• Understand what you might need help with
• Prototypes = expression of idea + skills
18. Software testing
• Usability testing
• Accessibility testing
• Function testing
• Module testing
• Integration testing
• Condition testing
• Performance testing
• Security testing
• Unit testing
• Acceptance testing
• Test harnesses
• Test driven development
19. Software testing
• Usability testing
• Accessibility testing
• Function testing
• Module testing
• Integration testing
• Condition testing
• Performance testing
• Security testing
• Unit testing
• Acceptance testing
• Test harnesses
• Test driven development
20. Software testing
function foo() { … }
function bar() { … }
function bez() { … }
function fooBar() { … }
function barFoo() { … }
…
…
…
function testFoo() { … }
function testBar() { … }
function testBez() { … }
function testFooBar() { … }
function testBarFoo() { … }
…
…
…
Key: Practicality
21. Chris’s tips
• Don’t try to do everything: be realistic
• If you think you’re going crazy, take a break: have a walk
• Find the time to play, this is finding the time to learn
• Find the time to read and study the work of others
• Be prepared to have your assumptions challenged
• Break hard stuff down into small pieces
• Write test code to experiment
• Projects extend to the amount of time available: beware!
• Listen
• Be humble
22. Chris’s anti-tips
• Give one person all the coding responsibility
• When coding, ignore what your team says
• Don’t talk to each other
• Ignore the external world; it’s a distraction
• Don’t write anything down; forget your assumptions
• Solve a coding problem that has already been solved
• Make quick decisions
• Don’t ask questions
• Always be prepared to shout
• Assume you can do everything
25. Lecture: Dealing with challenges (technical)
Chris Douce, 22 July 2013 (14.00 – 14.50)
Notas do Editor
Acknowledgement: miguelavg If things are going wrong
Acknowlegement: Federico Maggi Go for a walk!
How to manage code Has anyone heard of configuration management? Version control? How do we deal with the software systems that we’re dealing with? Also how to create code – looking at examples
Picture of a factory
Waterfall.
Wikipedia
This is an approach to make things easier People having meetings standing up, pair programming, sharing through a whiteboard. (Photo of people standing up)
Acknowledgement: Imbertti
Acknowledgement: Imbertti
Acknowledgement: Canadian government Takes time. Is an art as well as a science . Raw materials is the code… Tools. But the tools keep changing .
Acknowledgement: Wikipedia I understand that you might have already had some exposure to working with Lego?
But harder to justify to management! Examples – looking at code – about how to use libraries…
Acknowledgements: Wikipedia Manual control – example of making a slip, accidentally deleting a working version.
Acknowledgements: Wikipedia From the subversion page. Tags can be related to version numbers
Creative commons acknowledgement: doegox Picture of a spice rack. Ingredients go into a system. Choose the wrong kind of spice, it can ruin a meal.
Cognitive psychologists have this term called metacognition – which is our thinking about our thinking. If you don’t think you’re understanding something, go back and play. Process of creating a prototype represents the creation of the skills.
I’m going to get quite excited at this point… and you’re all going to have to forgive me – but there is a serious point… Accessibility testing: legislation Test harness Incrementally build up… It’s okay to write test code User testing is going to be covered in the next presentation Disconnect the engine of the software from the interface – what is it that you’re testing? Are you testing usability… Keeping of bits; complexity lies within the connections.
xUnit testing, used in Agile teams
Indulge me at this point – hard won experience.
Recapping of some of the challenges, and connecting back the challenges that were presented or explored during the first workshop. Example from Vint Cerf talking about the earlier days. NPL Scratch the surface of a technology and you always find something about people underneath. We’re considering users and developers.