Download High-Quality Programming Code Construction

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Database model wikipedia , lookup

Clusterpoint wikipedia , lookup

Navitaire Inc v Easyjet Airline Co. and BulletProof Technologies, Inc. wikipedia , lookup

Transcript
Creating an Award Winning
Project for the IT Olympiad
Best Practices and Mistakes to Avoid
Svetlin Nakov
Telerik Corporation
www.telerik.com
Table of Contents
1.
National IT Olympiad – Evaluation Criteria
2.
Good and Bad Projects – Examples
3.
Choosing a Project for the Olympiad
2
Evaluation Criteria at the
National IT Olympiad
For Software Projects and Internet Applications
Original Idea and Innovation
 Projects should bring some
innovation
 Not repeating exactly something existing
 E.g. “Just Another Media Player” will not be
considered as an original and innovative idea
 Innovation could be in various
areas
 Solve a task which has not been previously
addressed
 Introduce an unique new approach
 Conceptually change the way some software
applications work
4
Solve a Significant Problem
 Projects should solve a
significant problem
 Do people really need this product or service?
 Projects should solve a complex problem
 Which cannot be solved easily by hand or by
another software
 Example of significant
problem
 Crate a software to find all articles in Internet
about some person and auto-summarize them
 Example of non-significant problem
 Create a simple summator of numbers
5
Well Working Functionality
 The product / service should
do its job and do it
well
 Work well and as expected
 Stable (not crashing)
 Bug free
 Good usability
 Easy to use, intuitive UI
 Good performance
6
Project is in Finished State
 To be award-winning
the project should be in
finished state
 Fully implemented
 Should have installer / uninstaller
 Should have documentation, users
manual, built-in help system, etc.
 Should have all its functions implemented
 All hyperlinks / buttons / menus should work
 Don't put menus and buttons that do nothing!
7
Honor Licenses and Copyright
 Honor the license agreements and copyright
for all tools, frameworks and products used
 Use free or open-source software
 Use trial version or licensed version of
commercial tools
 Use open-source or licensed libraries,
components, frameworks, toolkits, etc.
 Honor the license restrictions
and requirements
8
Appropriate Technologies
 Use appropriate
technologies, e.g.
 If you create a game, use a suitable game
engine / game SDK / game framework
 If you manage data, use a database (RDBMS),
not plain text files as data storage
 If you create reports, use a reporting engine
 Use technologies efficiently and correctly, e.g.
 Organize data in the database correctly
 If you play video, ensure streaming is enabled
9
Good Architecture
 Choose appropriate
software architecture for
the application
 Split the application into layers
 Use 2-tier / 3-tier / n-tier
architecture when appropriate
 Split the application into components
 Strong cohesion (components should do only one
thing, should solve a single task, not many)
 Loose coupling (components should be
independent of each other)
10
Good Architecture (2)
 More about the good software architecture
 Separate UI from the business logic
 Don't mix different types of functionality
 Minimal complexity (don't do overdesign)
 Ensure it is easy to maintain
 If you need to introduce a new field in a form,
how many files you need to change?
 Think about reusability (avoid duplicated logic)
 Think about the security
11
Intuitive UI and Good Usability
 Use intuitive and easy-to-use user interface
 Usability is important!
 Users should work with ease
 Good usability
includes:
 Clean and consistent navigation concept
 Make functionality and actions obvious
 Clean and consistent way of entering data
 Easy to use way of presenting information
 Suitable fonts, layout, and design
12
High-Quality Code
 Follow the principles of
high-quality
code construction
 Code should be easy-to-read
 Code should be easy-to-understand
 Code should be maintainable (easy to modify)
 Code should work correctly in all use-cases
 Unit tests and other tests are highly appreciated
 Code should be self-documenting
 Code should be well formatted
13
High-Quality Code (2)

All identifiers should have good names
 Projects, directories, namespaces, classes,
methods, properties, variables, parameters, …

Code formatting should follow its logical structure

Classes should have good abstraction,
strong cohesion and loose coupling

Methods should have strong cohesion
and loose coupling

Variables' scope, span and lifetime should be
minimized
14
High-Quality Code (3)
 Repeating code should be avoided
 Complex expressions
should be avoided
 Constants should be used to avoid duplicating
values and values likely to change
 Control-flow should
be simple
 Avoid deeps nesting of if-statements and loops
 All public methods should check their
input
data for correctness (defensive programming)
 Methods should throw an exception in case of
not being able to do their job
15
High-Quality Code (4)
 In case of Web applications,
follow strictly the
W3C standards
 All HTML / CSS / XML should conform to the
standards (use the W3C validator)
 Ensure your application works on all popular
Web browsers
 Separate the UI from the business logic
 Think about the mobile / tablet users
 In GUI applications
run any time-consuming
job in background and show a progress bar
16
Performance

Your application should have good performance
 Test the application with large data sets
 Use efficient data structures
 Use efficient algorithms
 Tune-up the database performance
 E.g. add column indices or apply table partitioning


Use precomputations to reduce the overhead
Beware of optimizing the code
when not necessary!
17
Easy Installation
 Design your application
to be easy-to-install
 Installation should be simple and automatic
 After few clicks users should be able to run your
application
 Ensure your installation installs all required
additional software (e.g. databases, engines,
components, frameworks, scripts, etc.)
 Use standard installers
 People are already familiar with them
 Ensure you have uninstallation!
18
Code and Data Security
 Make your
application secure!
 Validate all your input data
 Use SSL or other encryption
to transfer sensitive data
 Ensure SQL-injection is not possible
 Avoid building SQL commands with + operator
 Avoid cross-site scripting attacks
 Ensure all data is HTML-escaped in Web apps
 Always encrypt passwords and sensitive data
19
Process Errors Correctly
 Process
errors and unusual situations correctly
 Ensure your code handles all possible situations
 Always check the input data!
 When some action could not be
performed, show and error message
 Adequate error message is better than exception
dump, application crash or misbehavior
 Never return incorrect result when the input data
is incorrect!
 Ensure your error messages are correct
20
Use Database Correctly

Ensure your data schema is normalized
 Avoid repeating data in the database

Use foreign keys between related records

Use integrity constrains when appropriate

Implement correctly update and delete
 E.g. what happens when you delete a non-empty
category – what happens with the related records?

Use data versioning when appropriate

Use transactions when a business operation
consists of a sequence of database operations
21
UI Design
 Use good looking and consistent UI design
 Ensure you support all popular Web
browsers (for Web applications)
 Ensure you support all operating
systems you claim to support
 Ensure the UI is standard and widely accepted
 Ensure fonts / colors / icons are adequate
 Test the application in low screen resolution
 Use some open-source or some popular UI
design if you are not good in UI design
22
Good Presentation and
Defense of the Project
 Presenting the project well
is of
a tremendous importance!
 Your talk and demo at the public
defense should be outstanding
 Your presentation should be carefully prepared
 Ensure you fit in the allowed time limit
 15 minutes presentation + 5 minutes questions
 Always perform a training before the
presentation!
23
Creating a Good Presentation

Use PowerPoint or other presentation software

Good presentation should focus on the key
features and functionality, not on details
 Ensure you don't have too much text!
 Presentations are not articles, just short notes
 Ensure most of your presentation is live demo!
 Use good graphics design for the presentation
 Use pictures to strengthen the text
 Typically you should have up to 10 slides
(3-5 minutes) + 10-12 minutes demo
24
Making an Attractive Demo
 Performing an attractive
demo is a must!
 The most important thing for the jury is to see
your application in action
 Perform live demonstration in 10-12 minutes
 Focus on the key functionalities, not on details
 Always prepare in advance a good data set to
demonstrate your application
 Use meaningful data, not "hghfds" or "user1"
 Follow well prepared demonstration scenario
 Show functionality working well, not bugs
25
Prepare Good Documentation
 The IT Olympiad requires all
projects to have
 Good project documentation
 Follow the official requirements and structure
 Topic, Authors, Advisor, Resume, Goals, Stages
of the Project, Level of Complexity, Architecture,
Implementation, Users Guide, Conclusion
 Use a nice looking design and layout
 Use attractive screenshots and figures
 Brochures or other marketing materials
 Prepare some kind of marketing materials
26
Good and Bad Projects
Examples
Examples of Good Projects

Examples of good project ideas:
 Create an application that analyzes in real time a
security camera and automatically detects
suspicious persons / activities
 Create an application that summarizes the
information on the Web about given person /
company / and produces Wikipedia-style article
 Create a mobile healthcare application which
measures health indicators (such as hearth
rhythm, blood pressure, blood sugar, etc.) and
sends it continuously to a healthcare database
28
Examples of Good Projects (2)

Examples of good project ideas:
 Mobile child tracking application that reports the
location of given mobile phone at some time
interval (e.g. at 10 minutes) and shows it on a map
 Create a software for auto converting a book or
article to a high-quality PowerPoint presentation
 Design and implement an Access Control System
with RFID cards and Google Maps visualization
 Very original social network with new unique
communication model and other unique concepts
 Kinect based home theater system
29
Look for Hot Technologies
 Kinect
 Multi-Touch in Windows 7
 emotiv neuroheadset
30
Look for Hot Technologies (2)
 Cloud Computing
 Windows Azure – free students accounts
 Google AppEngine – absolutely free!
 Mobile Development
 Applications for smart phones and tablets
 Social Networks
 Facebook applications
 Embedded Applications
31
Examples of Bad Projects
 Examples of bad project ideas:
 Video player like Media Player Classic
 Simple text editor like Notepad
 Mobile English-Bulgarian dictionary
 Simple ZIP archiving tool like 7ZIP
 Flash-based tutorial that displays HTML
content (e.g. Geography lessons)
 Just another online shopping cart
 Just another discussion forum / blog system
32
Choosing a Project for the
National IT Olympiad
Step by Step
Choosing a Project
for the Olympiad
 Step 1:
 Generate Ideas (Brainstorming)
 Step 2:
 Assess Ideas (Feasibility)
 Step 3:
 Implement Ideas (Coding)
 Step 4:
 Work out the Details (Finalizing)
34
Generate Ideas (Brainstorming)
 Collect all
your exciting new ideas
 Some could be incredible, strange or even crazy
 Don't think about the implementation (at this
stage), just unlock your imagination
 Organize a brainstorming
event
with your friends and fellows
 Check out what the others do
 Imagine Cup – imaginecup.com
 TED Conference – www.ted.com
 TopCoder – http://community.topcoder.com
35
Assess Ideas (Feasibility)
 Assess
your ideas generated during the
brainstorming
 Which ideas you (and your team) can really
implement in practice?
 How many time each idea will take?
 If the idea needs very complicated work, can
you simplify it?
 How can you simplify your idea
to make it feasible?
36
Implement Ideas (Coding)
 Implement the ideas
step by step
 Create a solid team (developers, designers, etc.)
 Choose appropriate technologies (platform,
programming language, database server, UI
technology, etc.)
 Create architecture that will work
 Implement the features one by one
 Follow the industry agile
development techniques
37
Work out the Details (Finalizing)
 Be sure to work out the details
 Never leave good ideas unfinished
 Fully implement all features
 Create well working functionality, well tested
 Create installer / uninstaller
 Create required documentation
 Create intuitive UI and good usability
 Ensure code quality is good
 Follow the best industry practices
38
Creating an Award Winning
Project for the IT Olympiad
Questions?
http://academy.telerik.com