Programming Aesthetics learned from making independent games April 1, 2011.

Slides:



Advertisements
Similar presentations
Analysis of Computer Algorithms
Advertisements

CSCE 3110 Data Structures & Algorithm Analysis
Quick Review of Apr 10 material B+-Tree File Organization –similar to B+-tree index –leaf nodes store records, not pointers to records stored in an original.
Graduate : Sheng-Hsuan Wang
CIS 101: Computer Programming and Problem Solving Lecture 8 Usman Roshan Department of Computer Science NJIT.
1 Homework Turn in HW2 at start of next class. Starting Chapter 2 K&R. Read ahead. HW3 is on line. –Due: class 9, but a lot to do! –You may want to get.
Software engineering, program management. The problem  Software is expensive to design! – Industry estimates put software development labor costs at.
CS 104 Introduction to Computer Science and Graphics Problems
OS Fall ’ 02 Performance Evaluation Operating Systems Fall 2002.
Tirgul 8 Universal Hashing Remarks on Programming Exercise 1 Solution to question 2 in theoretical homework 2.
EMNLP Industry Panel Comments © 2001, David A. Evans, Clairvoyance Corporation 1June 4, 2001 The Rubber and the Road Industrial Perspectives on NLP EMNLP.
Performance Evaluation
CS503: First Lecture, Fall 2008 Michael Barnathan.
Memory Management April 28, 2000 Instructor: Gary Kimura.
1 External Sorting for Query Processing Yanlei Diao UMass Amherst Feb 27, 2007 Slides Courtesy of R. Ramakrishnan and J. Gehrke.
Analysis of Algorithms 7/2/2015CS202 - Fundamentals of Computer Science II1.
OS Fall ’ 02 Performance Evaluation Operating Systems Fall 2002.
Chapter 3: Arrays, Linked Lists, and Recursion
© Company Confidentialwww.itcinfotech.com Business Case for Test Automation S.Janardhanan Chief Technology Officer ITC Infotech India Limited Business.
CS TShirts! Congratulations to Emily Kasbohm, whose T-Shirt design won! We will set up a Teespring campaign, and a link to the class if you.
Basics of Operating Systems March 4, 2001 Adapted from Operating Systems Lecture Notes, Copyright 1997 Martin C. Rinard.
By: Malek Browning.  A video game developer is a complex job,but the basic goal is to develop a video game. There are multiple jobs inside of the title.
Memory Management ◦ Operating Systems ◦ CS550. Paging and Segmentation  Non-contiguous memory allocation  Fragmentation is a serious problem with contiguous.
CSC 142 A 1 CSC 142 Introduction to Java [Reading: chapter 0]
CS 346 – Chapter 10 Mass storage –Advantages? –Disk features –Disk scheduling –Disk formatting –Managing swap space –RAID.
CS 11 C track: lecture 5 Last week: pointers This week: Pointer arithmetic Arrays and pointers Dynamic memory allocation The stack and the heap.
Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.
Lists in Python.
Introduction CSE 1310 – Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington 1.
CS 102 Computers In Context (Multimedia)‏ 01 / 23 / 2009 Instructor: Michael Eckmann.
Introduction CSE 1310 – Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington 1.
Java Introduction to JNI Prepared by Humaira Siddiqui.
Algorithms and Algorithm Analysis The “fun” stuff.
IT253: Computer Organization
Lecture Topics: 11/17 Page tables TLBs Virtual memory flat page tables
Major objective of this course is: Design and analysis of modern algorithms Different variants Accuracy Efficiency Comparing efficiencies Motivation thinking.
First BlueJ Day Houston, 2006 Unit Testing with BlueJ Bruce Quig Deakin University.
Views Lesson 7.
Dynamic memory allocation and Pointers Lecture 4.
CS 3500 L Performance l Code Complete 2 – Chapters 25/26 and Chapter 7 of K&P l Compare today to 44 years ago – The Burroughs B1700 – circa 1974.
1 Legacy Code From Feathers, Ch 2 Steve Chenoweth, RHIT Right – Your basic Legacy, from Subaru, starting at $ 20,295, 24 city, 32 highway.
Lecture 11 Page 1 CS 111 Online Virtual Memory A generalization of what demand paging allows A form of memory where the system provides a useful abstraction.
Introduction 1 (Read Chap. 1) What is Programming? For some given problem: design a solution for it -- identify, organize & store the problem's data --
Graphs, Continued ECE 297.
Visual Basic for Application - Microsoft Access 2003 Finishing the application.
CompSci 100E 15.1 What is a Binary Search?  Magic!  Has been used a the basis for “magical” tricks  Find telephone number ( without computer ) in seconds.
Copyright 2014 – Noah Mendelsohn Code Tuning Noah Mendelsohn Tufts University Web:
Memory Management OS Fazal Rehman Shamil. swapping Swapping concept comes in terms of process scheduling. Swapping is basically implemented by Medium.
ECONOMIC EVALUATION. Economic evaluation: what is it?  Economic evaluation is the traditional tool for prioritizing road investment  It provides a monetarised.
Copyright © 2014 Curt Hill Algorithms From the Mathematical Perspective.
CSC 212 – Data Structures Lecture 15: Big-Oh Notation.
CSE 303 Concepts and Tools for Software Development Richard C. Davis UW CSE – 10/11/2006 Lecture 7 – Introduction to C.
Lecture 5 Page 1 CS 111 Summer 2013 Bounded Buffers A higher level abstraction than shared domains or simple messages But not quite as high level as RPC.
Complexity Analysis (Part I)
Comments on the “Three Piles” Problem
The University of Adelaide, School of Computer Science
Programming Aesthetics learned from making independent games
Which slows more? Java or C++?
CSCI1600: Embedded and Real Time Software
CSE 451: Operating Systems Autumn 2005 Memory Management
CSE 373 Data Structures and Algorithms
CSE 451: Operating Systems Autumn 2003 Lecture 9 Memory Management
CSE 451: Operating Systems Autumn 2003 Lecture 9 Memory Management
Error Handling.
Interpreting Java Program Runtimes
CSE 373: Data Structures and Algorithms
CSCI1600: Embedded and Real Time Software
Complexity Analysis (Part I)
Complexity Analysis (Part I)
Presentation transcript:

Programming Aesthetics learned from making independent games April 1, 2011

v Language files blank comment code C C/C++ Header C HLSL SUM: Braid source code

v Language files blank comment code C C/C++ Header C HLSL SUM: The Witness source code

“Industry Average”: 3250 lines/year (90000 lines) / (3250 lines/year) ≈ 28 years

512 MB RAM (you can’t use it all), no VM 3 slow in-order cores Slow file access

Certification Program can’t crash, even with antagonistic user Loading time is capped

Certification “Soak Test” 3 days * sec/day * 60 frames/sec = 15,552,000 frames If you leak 4 bytes per frame, you’ll fail.

game design level design art direction audio direction business development marketing / PR financial management

be extremely effective at getting things done

… by the way …

Impulses to optimize are usually premature.

Most code is not performance-sensitive.

Optimization is usually bad! (Unless practiced very carefully!)

Data Structures

Data structures are about optimization.

“using the right data structure” is usually bad! (Because it is premature optimization!)

Now I use arrays of records for almost everything.

Things you might optimize seconds per program execution (speed) bytes per program execution (space)

Instead, optimizing years of my life per program implementation (life) This is a valid optimization parameter you can consider just like those others!

Data structures are about memory or speed optimization. They are not about life optimization (unless you absolutely need that speed or memory).

Complicated Algorithms are not good!

Almost all applied CS research papers are bad propose adding a lot of complexity for a very marginal benefit doesn’t work in all cases (limited inputs, robustness) “supported” by bogus numbers, unfair comparisons This isn’t fooling anyone any more…

A generalized system is usually worse than a specific / hardcoded one!

Adding new systems is bad! This should only ever be a last resort. deleting code >>> adding code

Straight-line code preferred over function calls { a = b + c; a *= f(k); a /= g(a); print(a); } float recompute () { float a = b + c; a *= f(k); a /= g(a); return a; } { recompute(a); print(a); } { { // Update a. a = b + c; a *= f(k); a /= g(a); } print(a); }

What is a good programmer, then? (in this context)

gets things done quickly gets things done robustly makes things simple finishes what he writes (for real) broad knowledge of advanced ideas and techniques (but only uses them when genuinely helpful)

it’s easy to see benefits of an idea developed for benefit’s sake! very hard to measure subtle negatives chained to this idea (which often outweigh the benefits)

“knowing” vs. deeply, intuitively understanding