INTRODUCTION Introduce: name, email, office hours. TA hours. Have you ever dreamed of a class that was all about problem-solving? Almost no theory? Code counted more than exams? If so, welcome CS601. I am a programmer not a theoretician unless I need the formalisms to help me build software. I rarely study theory unless i think it will make me a better programmer or help me write a program. My research and my commercial experience has been focused on making programmers more productive. What I know and what I don't know. My perspective: 1. don't believe everything I say! 2. I have developed widely-used parser generators for 15 years. I also managed a dot.com of 20+ people and built 110k line jGuru.com server (community of Java programmers which you will perhaps use in this class) in Java. StringTemplate 3. Started with teletype: teletype.jpg in lectures dir 4. Can tell you about teams up to 10 5. No direct experience with large teams Some ideas are clear from my observations Will relate experience from colleagues GOAL: Going to teach you to be a better programmer, prepare you for graduate school, and make you an employable commercial programmer. The first day on the job, they will tell you the technology you need to integrate into their company's programmer stable. I have included all that I could think of in this course. You will get Big Bytes of technology because you can't write software without using databases, servers, sockets, revision control systems, etc... Learning a language is the easy part. I'm sorry if servers / sites are not your area of interest. I had to pick one and this one is very useful commercially. You will learn how to learn new things and that you must always learn new things. SOFT DEV PROBLEM STATEMENT BIG industry: Source: US Industry & Trade Outlook 2000 worldwide revenue from packaged software: $155 billion in 1999. AND... Economist nov 27, 2004: "Most software projects fail to meet their goals..." "$4 billion write-off that America's Internal Revenue Service had to swallow when a multiyear effort to overhaul its computer system failed completely in 1997...A $844M Project for Britain's Child support agency came in over your late, and has failed to deliver payments to more than half of eligible applicants... A study earlier this year by the Standish group, a technology consultancy, estimated that 30% of all software projects are canceled, nearly half come in over budget, 60% are considered failures by the organizations that initiated them, and nine out of 10 can in late. A 2002 study by America's national Institute of standards, a government research body, found that software errors cost the American economy $59.5 billion annually." "Who is to blame For such systematic incompetence?" Perhaps half of all commercial software projects are never used. The rest typically suck (unreliable, insecure, doesn't do what you want, etc...) What kind of software is hard? I. Big software II. hard application/algorithm Why is big software hard? Very few programs of significance can be written by one person. The communication and complexity of software explodes exponentially with the number of people / lines of code. Programmers make assumptions (mars lander metric/english system). Unexpected things happen (overflow exception caused Ariane V to crash, Patriot missile kept on too long would overlow 8 bit counter). Tools for teams of programmers are harder to make than single-person tools hence fewer and lower quality. "What were the lessons I learned from so many years of intensive work on the practical problem of setting type by computer? One of the most important lessons, perhaps, is the fact that SOFTWARE IS HARD. From now on I shall have significantly greater respect for every successful software tool that I encounter. During the past decade I was surprised to learn that the writing of programs for TeX and Metafont proved to be much more difficult than all the other things I had done (like proving theorems or writing books). The creation of good software demands a significantly higher standard of accuracy than those other things do, and it requires a longer attention span than other intellectual tasks. --Donald Knuth, Keynote address to 11th World Computer Congress (IFIP Congress 89) ABOUT SOFTWARE DEVELOPMENT Is software development a science or engineering problem or what? For example, this is EE602 "Lumped System Theory": " An investigation of the basic theory and techniques of modern system theory, emphasizing linear state model formulations of continuous and discrete time systems in the time domain and frequency domain. Coverage includes notions of linearity, time invariance, discrete and continuous times state models, canonical forms, associated transfer functions and impulse response models, the state transition matrix, the Jordan form, controllability, observability, and stability. " That's all math; techniques for finding the solution. I have little believe in "engineering" software. It is a skill. Emperically, SE doesn't work. You'll see repeated in XP stuff from Man month What role then for OO, UML, patterns, XP, functional decomposition, structured programming, design documents, requirements specifications, and all that other stuff? Stay tuned! Explain goals from 601 home page TEACHING STYLE AND WHAT I EXPECT FROM YOU Problem-solving, ask you questions Please ask ME questions Please come to my office or email me (preferred) I expect you to do lots of coding and participate in class just like a business meeting. I expect you to show up to class and do the labs I expect you do do your own work and not take code from the net unless we explicitly agree you can use it. I expect you to try to solve your own problems first and then go to the TA or me if you have trouble. WHAT WE WILL STUDY LINUX It's not about single PC programs anymore, it's about networked computers solving a problem in aggregate. That means UNIX not Windows or any other single-machine-centric operating system. You must know UNIX and in particular Linux is the mostly likely flavor you'll run into. Give brief summary of OS's? Go over goals/syllabus on home page. Optional Java crash course? Hope to have some guest lecturers from industry to give different perspectives. WORK LOAD / GRADING / WHAT I EXPECT Lots of coding 2 mini-projects + 1 big project Go over grading on home page You must impress me with your ability to code. I expect them to make lots of mistakes, but to learn the lessons well.