Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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