Better Software - November 2007 - (Page 12) Code Craft Buddy, CanYou Paradigm? by Chuck Allison Lee Copeland, managing technical editor of Better Software magazine, recently wrote of the Whorfian Hypothesis, which, according to Wikipedia.org, “argues that the nature of a particular language influences the habitual thought of its speakers.” As early as 1957, Kenneth Iverson, inventor of APL, prefaced his presentation of that interesting language with the phrase “Language is a tool of thought.” His goal was to efficiently process large arrays of data in multiple dimensions, so APL sports numerous operators, all very succinct and mutually orthogonal. When it’s time to cut code, the programming language we’re using tends to govern our thoughts. A C programmer will conjure up appropriate functions; a Java programmer will see nothing but objects; a developer using Haskell will traffic in lists and higher-order functions. Each programming style, or paradigm, has its claim to fame, and one is not necessarily better than another. A message that needs to get out nowadays, both in industry and academia, is that object orientation is just another paradigm. It has its place and has certainly helped us write better-organized code for large projects, but it is not the One True Paradigm—because there isn’t one. So, should developers be proficient in multiple languages? Certainly, but it is even more important to master multiple paradigms, which is not necessarily the same thing: A language may or may not force a particular paradigm upon you. Java pretty much forces you to do objects, so you’ll hurt yourself if you use it to write simple procedural code or to program in the functional style, à la Lisp. Likewise, you can do objects in C, but you have to build up so much scaffolding to support it that you end up feeling like you’re rubbing a cat backward. However, languages like C++, Python, Ruby, D, and CLOS support multiple paradigms naturally. the imperative/OO world. Functional programming, first made accessible through Lisp, is another powerful programming paradigm that is older than you might think. Lisp wasn’t really usable until about 1960, but it is based on Alonzo Church’s lambda calculus, which came almost thirty years earlier, so the functional paradigm was fairly mature before it was realized on a computer. Functional languages treat functions like they treat built-in types—they can be passed and returned as values to and from other functions, and can even be created at runtime. Some very powerful constructs come to life this way. #A >>> >>> >>> [1, Python example nums = [1,2,3,4] morenums = [x+1 for x in range(4)] morenums 2, 3, 4] An Invitation to Functional Programming The most commonly used programming styles nowadays are imperative (aka, procedural), object oriented, and functional, but many others exist (e.g., declarative, logic, constraint). Imperative languages closely mirror computer internals—they implement instructions that change machine state. The objectoriented (OO) style of programming is mostly imperative programming extended with the ability to package data and related functionality as classes. Most programmers seem to live in 12 www.StickyMinds.com Listing 1 Since lists are so central in functional programming, you can easily create them by placing expressions inside brackets in Haskell and Python, as shown in listing 1. The definition of morenums illustrates a list comprehension, BETTER SOFTWARE NOVEMBER 2007 GETTY IMAGES http://www.StickyMinds.com
Table of Contents Feed for the Digital Edition of Better Software - November 2007 Better Software - November 2007 Contents MarkYour Calendar Technically Speaking What’s Happening @StickyMinds.com Code Craft Test Connection Management Chronicles The Measure of a Management System Behind the Scenes A Story About User Stories and Test-Driven Development Product Announcements The Last Word Ad Index Better Software - November 2007 Better Software - November 2007 - (Page Intro) Better Software - November 2007 - Better Software - November 2007 (Page Cover1) Better Software - November 2007 - Better Software - November 2007 (Page Cover2) Better Software - November 2007 - Better Software - November 2007 (Page 1) Better Software - November 2007 - Better Software - November 2007 (Page 2) Better Software - November 2007 - Contents (Page 3) Better Software - November 2007 - MarkYour Calendar (Page 4) Better Software - November 2007 - MarkYour Calendar (Page 5) Better Software - November 2007 - MarkYour Calendar (Page 6) Better Software - November 2007 - Technically Speaking (Page 7) Better Software - November 2007 - Technically Speaking (Page 8) Better Software - November 2007 - What’s Happening @StickyMinds.com (Page 9) Better Software - November 2007 - What’s Happening @StickyMinds.com (Page 10) Better Software - November 2007 - What’s Happening @StickyMinds.com (Page 11) Better Software - November 2007 - Code Craft (Page 12) Better Software - November 2007 - Code Craft (Page 13) Better Software - November 2007 - Code Craft (Page 14) Better Software - November 2007 - Code Craft (Page 15) Better Software - November 2007 - Test Connection (Page 16) Better Software - November 2007 - Test Connection (Page 17) Better Software - November 2007 - Management Chronicles (Page 18) Better Software - November 2007 - Management Chronicles (Page 19) Better Software - November 2007 - The Measure of a Management System (Page 20) Better Software - November 2007 - The Measure of a Management System (Page 21) Better Software - November 2007 - The Measure of a Management System (Page 22) Better Software - November 2007 - The Measure of a Management System (Page 23) Better Software - November 2007 - The Measure of a Management System (Page 24) Better Software - November 2007 - The Measure of a Management System (Page 25) Better Software - November 2007 - The Measure of a Management System (Page 26) Better Software - November 2007 - The Measure of a Management System (Page 27) Better Software - November 2007 - Behind the Scenes (Page 28) Better Software - November 2007 - Behind the Scenes (Page 29) Better Software - November 2007 - Behind the Scenes (Page 30) Better Software - November 2007 - Behind the Scenes (Page 31) Better Software - November 2007 - Behind the Scenes (Page 32) Better Software - November 2007 - Behind the Scenes (Page 33) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 34) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 35) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 36) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 37) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 38) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 39) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 40) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 41) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 42) Better Software - November 2007 - Product Announcements (Page 43) Better Software - November 2007 - Product Announcements (Page 44) Better Software - November 2007 - Product Announcements (Page 45) Better Software - November 2007 - Product Announcements (Page 46) Better Software - November 2007 - The Last Word (Page 47) Better Software - November 2007 - Ad Index (Page 48) Better Software - November 2007 - Ad Index (Page Cover3) Better Software - November 2007 - Ad Index (Page Cover4)
For optimal viewing of this digital publication, please enable JavaScript and then refresh the page. If you would like to try to load the digital publication without using Flash Player detection, please click here.