Essay #1, CS151S
The central problem with modeling intelligence on a machine is knowledge representation. Determining the form taken by inputs and outputs along with the available operators on data occupies most of the design process of AI systems. In some problems outside of AI representation of data can help or hurt the ability to solve the problem effectively or efficiently. In the realm of AI, however, modeling the problem correctly vs. incorrectly can literally mean the difference between success and utter failure. This property of AI problems has lead to the popularization of several programming languages to better meet the needs of the AI programmer. Any AI programming language should allow for high-level abstraction of information, rapid and easy development, and contain intuitive support for mathematical expressions. At the same time, modern AI languages should not neglect the fact that programmers and beginning to use different languages within the same project, the existence and importance of the Internet, and extensibility of the language. The Python programming language does a particularly good job of blending old functional language techniques with more modern constructs and an extensible framework that allows for language growth.
Given the complexity of AI problems abstracting away nitty-gritty details of program operation helps a programmer, or team, focus on the already difficult task of representation. This means a suitable AI programming language should provide the programmer with a set of predefined, templated data structures. This solves two main problems. First, the programmer no longer needs to physically implement and test data types. This saves an enormous amount of time not just in implementation, but in worrying later if the problem with your solution to the particular AI problem at hand lies in your approach, or in your under tested, perhaps faulty, data structures. Second, templated structures ease the knowledge representation problem by treating all data in the same framework.
How complete the set of structures is depends upon the operations available on those data types. These operations can literally define how the programmer will think about problems and represent knowledge in source code. Python has a wide range of built in data types, but also supports operator overloading to allow the programmer to define her own language. Since everything in Python is an object, and the programmer can define operators, the model of data manipulation is more universal and resembles that of Lisp.
Rapid development is important to AI Programmers because the nature of the problems being solved often involve an iterative programming process that leads to incremental tweaks in code. Python, Lisp, ML and many other languages shortcut the often talked about edit-compile-debug cycle which can be lengthy and sometimes irritating. Instead, these languages give the programmer the ability to try out new ideas and make changes and get immediate results through their interactive programming interface. Even though languages like Java and Perl are interpreted and their compile time may be lessened, the absence of this interactivity detracts from their usefulness as an AI programming language.
Intuitive support for mathematical expressions and functions is very important to AI programming for many of the same reasons that templated data types are important. When OOP books talk about abstraction and data hiding they emphasize the principle of ‘sameness’. Drawing upon concepts in the real world and dragging those same concepts into your programming can help eliminate the time needed to understand code and shorten development time by focusing more of your brain power on solving the problem instead of understanding the representation. Support for Lambda expressions provides  the programmer with a mechanism to translate mathematical expressions from the whiteboard into code and test the validity of those expressions through computer simulation. Without Lambda support the translation process can be tedious and non-intuitive from the function writer’s and function caller’s perspective. Here again Python’s support for these expressions sets it apart from other procedural languages such as C++, Java and Pascal.
The application of AI to real world problems means that an AI programming language must take into account current software engineering practices as well as modern data sources. Today AI is not stand-alone. It is being embedded in applications that serve novice users and expert users alike. It is therefore necessary that languages used for AI programming also support constructs and functionality that are extremely helpful in solving traditional non-AI problems. Python combines many aspects of functional programming with procedural programming language constructs.  The intersection of these two ways of programming appears to be a nice place to develop applications that are net savvy, UI friendly, and at the same time allow for a high level of abstraction and symbolic data representation.