Computers depend on humans to tell them what to do via computer programs. Computer software is developed by humans, often laboriously. The process of software development has been studied and analyzed for 50 years, in an effort to improve the productivity of software developers and increase the probability of success. Still many software projects fail to achieve their goals.
From 2003 to 2010, I taught a dozen different computer science courses to undergraduates and graduate students at the University of Mississippi. Each course required the students to write computer programs. Although these courses are essential prerequisites for students embarking on a career in software development, the real experience comes on the job after graduation. Rarely does a program developed in school require more than 2,000 lines of code; yet such a program is small by industry standards. Learning to develop large software systems (10,000 or more lines of code) typically takes place in industry.
This was true for me. Although I wrote code as a student at Western Michigan University and the University of Illinois, I did not develop anything large until I joined IBM in 1981. There I designed and implemented a preprocessor that worked in conjunction with the IMS Data Dictionary. I wrote a similar preprocessor for Oracle Corp. as their 40th employee in 1982 and then I developed the first-known table editor for Synapse Computer Corp. in 1983.
After a two-year stint teaching computer programming to Navajos in New Mexico, I returned to industry with CACI in 1986. There I had the opportunity to work on compilers and programming language design – very cool stuff for a software developer.
In 1991 I became Chief Software Engineer of the Information Science Research Institute at the University of Nevada, Las Vegas (UNLV). This was an outstanding opportunity to perform leading-edge research on optical character recognition (OCR) systems.
In 1997 I began developing the Comparisonics technologies for audio comparison, search, display, and monitoring – more cool stuff.
I have written hundreds of thousands of lines of code in my career, for many types of programs, using a variety of programming languages and computer platforms. Based on my observations of many software projects over the years, the most successful projects seem to be achieved by small groups of talented developers working with considerable autonomy. Projects employing weak talent and/or excessive management seem to be doomed to failure. The most successful software developers are intelligent, logical, analytical, meticulous, inquisitive, and persevere to overcome obstacles.