Friday, November 15, 2013

History of Computer Science: Programming Paradigms

There are many historical topics that we are aware of: Julius Caesar, American Revolution, Wolfgang Amadeus Mozart, etc. However, there is one kind of history that we have never heard of before, and that is Computer Science History. It was not easy to come up with an excellent idea for this subject...but then it hit me! When I think of computer science history, I immediately think of programming paradigms.

According to Wikipedia, programming paradigms are “fundamental styles of computer programming and a method of building structures and elements of computer programs." In my programming paradigms class (CS 152), we are learning about various programming languages before Java. Let me describe the four main paradigms and give you examples of programming languages on each paradigm.

1) Imperative Programming: A programming paradigm that “describes computation as statements that change a program state”. Examples: FORTRAN, Pascal, C, etc.



2) Functional Programming: A programming paradigm that “treats computation as the evaluation of mathematical functions and avoids state and mutable data.” Examples: Common Lisp, Scheme, etc.

Lisp                                                                              Scheme






3) Object-Oriented Programming: A programming paradigm that “represents concepts as “objects” that have data fields and methods.” Examples: C++, Smalltalk, etc.

C++                                                                                                          Smalltalk











4) Logic Programming: A programming paradigm that is based on symbolic logic. Examples: Prolog (My favorite programming language) and Datalog.
                 
Prolog                                                                                                        Datalog
There are two strong reasons as to why I prefer Prolog. First, it is simply expressible and the logic clicks in my mind. Second, I have a knack in writing Prolog rules and queries.



If you want to study programming paradigms, take a copy of the book called Programming Languages: Principles and Practice by Kenneth C. Louden and Kenneth A. Lambert. It takes a lot to learn programming paradigms, but it’s a learning process of understanding the concepts and the logic within them.  

Works Cited

1) “15 Useful Mac OS X Text Editors.” Dreamcss. Web. 15 Nov. 2013. <http://blog.dreamcss.com/wysiwyg-editor/mac-os-x-text-editors/>

2) “Classification of the Principal Programming Languages.” Universite Catholique de Louvain (UCL). Web. 12 Nov. 2013. <http://www.info.ucl.ac.be/~pvr/paradigms.html>

3) Collingbourne, Huw. “Is Ruby the New Smalltalk?” SapphireSteel Software. 23 Apr. 2007. Web. 15 Nov. 2013. <http://www.sapphiresteel.com/Blog/Is-Ruby-The-New-Smalltalk>

4) “Datalog Educational System.” SourceForge.net. 2013 Nov. 14. Web. 15 Nov. 2013. <http://www.fdi.ucm.es/profesor/fernan/des/>

5) Kabbaj, Adil. “Prolog+CG GUI.” Jan. 2009. Web. 15 Nov. 2013. <http://amine-platform.sourceforge.net/component/Guis/PrologPlusCGGUI.htm>

6) Ott, Alex. “Support for the Scheme Programming Language.” 2011. Web. 15 Nov 2013. <http://alexott.net/en/writings/emacs-devenv/EmacsScheme.html>

7) “Programming Paradigms.” Wikipedia, the Free Encyclopedia. 12 Nov. 2013. Web. 15 Nov. 2013. <http://en.wikipedia.org/wiki/Programming_paradigm>

8) “What is high-level language?” Webopedia: Everything You Need to Know is Right Here. Web. 15 Nov. 2013. <http://www.webopedia.com/TERM/H/high_level_language.html>

9) Wikimedia Commons. 14 Feb. 2013. Web. 15 Nov. 2013. <http://commons.wikimedia.org/wiki/File:Devcpp5110.png>

1 comment:

  1. Mari,
    Wow, this was an incredibly well-written post on the history of CS! The myriad of images you used throughout the post greatly improved my interest and showed the difference between the types of programming in a very practical way. I learned a lot of this stuff in the CS 152 class that I am taking, but this article reinforced my knowledge on some things that I was a little shaky on, such as the definition of "imperative programming." In the future, I would not use wikipedia as one of your sources, as it is usually not treated as a high-quality reference. Keep up the good work!

    ReplyDelete