In the Information Age, information is a key component of our economy.
Why computers?
Staggering growth in the volume of information
Speed at which that information must be manipulated
Example: intelligence
Programming / Software Engineering is a very lucrative career.
Money
Demand
Perks
Satisfaction
Creativity
Freedom
Why are there so few majors and even fewer graduates??
---------------------------------------------------------------------------
"Software is hard," reads the quote that opens Rosenberg's Dreaming in Code.
Why is software in a never-ending state of crisis?
Why do most projects end up horribly over-budget or cancelled or both?
Why can't we ship code without bugs?
Why, everyone asks, can't we build software the same way we build bridges?
---------------------------------------------------------------------------
"There are very few success stories," said a former deputy
chief information officer at the Pentagon. "Failures are very
common, and they've been common for a long time."
---------------------------------------------------------------------------
The IRS sought $388 million last year for its $1.7 billion "Business
System Modernization" program, which is over budget and 15 months late.
---------------------------------------------------------------------------
The FAA has doubled its cost estimates to $1.69 billion for
its "Standard Terminal Automation Replacement System" since 1996.
---------------------------------------------------------------------------
"Ever since there's been IT (information technology), there
have been problems," said a Washington bureau chief. This is difficult."

Ann Gaffigan is a computer programmer/web systems developer with a degree in Computer Science from the University of Nebraska.
She has competed professionally in the steeplechase since winning the 3000m steeplechase at the 2004 USA Championships,
setting a then-American Record of 9:39.35.
CIS Department
CIS is a department that offers two majors: (There is no "CIS major". )
CS : BSCS (Computer Science)
IS : BSIS (Information Systems)
Students graduate from our programs with a solid education and get very good
jobs with such outstanding employers as Raytheon, E-Systems, Lockheed Martin,
IBM, Mellon Bank, America Online and EDS.
Many students prefer to work for smaller companies, school districts,
local governments and state governments.
CS Major
Computer Science (CS): B.S. , 58 credits
Required:
CIS 163 Intro to Programming & Algorithms I (C++)
CIS 244 Intro to Programming & Algorithms II (C++)
CIS 253 Computer Org and Assembly Language
CIS 254 Data Structures
CIS 306 Object-Oriented Programming (Java)
CIS 350 Computer Architecture
CIS 355 Operating Systems
CIS 356 Algorithm Analysis
CIS 375 Software Engineering
CIS 411 Systems Development Project
CIS 460 Prog Languages & Theory of Computation
MATH 140, 270, ECON 221, PHIL 311
12 credits of electives in CIS courses 300-level or above.
CS might best be described as preparing the students to become experts
in the making of the tools (software) that others use to solve problems.
CS students study the programming and low-level aspects of the computer.
Courses include Data Structures, Computer Architecture, Software Engineering
and Operating Systems in addition to classes in C#, C++, Assembly and Java.
IS Major
Information Systems (IS): B.S., 63 credits
Required:
CIS 110 Intro to Computer Info Systems
CIS 202 Event-Driven programming (VB)
CIS 206 Intro to Java Programming (Java)
CIS 217 Applications of Microcomputers
CIS 301 Systems Analysis
CIS 303 Local Area Networks
CIS 317 Microcomputer Maintenance
CIS 330 Advance Event-Driven Programming (VB)
CIS 402 Data Base
CIS 403 Data Communications
CIS 411 Systems Development Project
MATH 131, 232
ECON 211, 212, 221;
ACTG 251, 252; FIN 370, MGMT 320, MKTG 360
Nine credits of electives in CIS courses 300-level or above.
IS might best be described as preparing the student to become experts in
the use of the tool (the computer) as a key component used in complex systems
that solve problems in the real world.
IS is a business-oriented computing curriculum. IS students study the use
and programming of computers in a business environment. Courses include
Programming, Applications of Microcomputers, Data Communications, LAN,
Systems Analysis and Database Systems. Languages include C# & Java
Objective 1: Understand operating systems
- What are they?
- What do they do?
- How do they do it?
- If an OS is a manager, what does it manage?
- memory, process, file system, device
- Do all computers have operating systems?
- Are all OS's pretty much the same?
Objective 2: Interact with operating systems
- Commad line UI
- GUI
- Systems Programming Interface (unix)
How is system's programming different?
Error Handling!
Documentation!
Look at straight C, not C++ (more cryptic)
Some REAL code - note the amount and substance
in the comments
/*
* Resize a line to make it `cols' columns wide.
*/
static void resizeline(Terminal *term, termline *line, int cols)
{
int i, oldcols;
if (line->cols != cols) {
oldcols = line->cols;
/*
* This line is the wrong length, which probably means it
* hasn't been accessed since a resize. Resize it now.
*
* First, go through all the characters that will be thrown
* out in the resize (if we're shrinking the line) and
* return their cc lists to the cc free list.
*/
for (i = cols; i < oldcols; i++)
clear_cc(line, i);
/*
* If we're shrinking the line, we now bodily move the
* entire cc section from where it started to where it now
* needs to be. (We have to do this before the resize, so
* that the data we're copying is still there. However, if
* we're expanding, we have to wait until _after_ the
* resize so that the space we're copying into is there.)
*/
if (cols < oldcols)
memmove(line->chars + cols, line->chars + oldcols,
(line->size - line->cols) * TSIZE);
/*
* Now do the actual resize, leaving the _same_ amount of
* cc space as there was to begin with.
*/
line->size += cols - oldcols;
line->chars = sresize(line->chars, line->size, TTYPE);
line->cols = cols;
/*
* If we're expanding the line, _now_ we move the cc
* section.
*/
if (cols > oldcols)
memmove(line->chars + cols, line->chars + oldcols,
(line->size - line->cols) * TSIZE);
/*
* Go through what's left of the original line, and adjust
* the first cc_next pointer in each list. (All the
* subsequent ones are still valid because they are
* relative offsets within the cc block.) Also do the same
* to the head of the cc_free list.
*/
for (i = 0; i < oldcols && i < cols; i++)
if (line->chars[i].cc_next)
line->chars[i].cc_next += cols - oldcols;
if (line->cc_free)
line->cc_free += cols - oldcols;
/*
* And finally fill in the new space with erase chars. (We
* don't have to worry about cc lists here, because we
* _know_ the erase char doesn't have one.)
*/
for (i = oldcols; i < cols; i++)
line->chars[i] = term->basic_erase_char;
#ifdef TERM_CC_DIAGS
cc_check(line);
#endif
}
}
sometimes need to "speak the lingo"
note 8/24/07 (iphone cracked):
... Here how the bootrom check works; it reads from 0xA0000030
0xA000A5A0 0xA0015C58 0xA0017370 and all these addresses must read as blank,
or 0xFFFFFFFF. When you erase flash, it becoms 0xFFFFFFFF. But you can't
erase those locations, because they are in the bootloader. So thats where
the testpoint comes in.
Pulling A17 high hardware OR's the address bus with 0x00040000(offset one
because data bus is 16 bit) So the bootrom instead checks locations
0xA0040030 0xA004A5A0 0xA0045C58 0xA0047370, which are in the main firmware
and can be erased. Pretty genius :)
===================================
so WE should see that address 0xA000A5A0 becomes 0xA004A5A0...