8月 172016

My computer geek colleagues are boasting about their humble beginnings by sharing lists of their first seven programming languages. You can find these under the hashtag #FirstSevenLanguages.

From what I've seen of these lists, the programming languages that appear are very much a function of age -- not the age of the language, but of the person sharing the list. It's also a function of industry. For people of a certain age who first worked at a bank, COBOL appears early on the list. Did you work in the defense industry? Ada is probably on your list.

Of course, the SAS programming language features prominently among my colleagues. I have argued that listing SAS is a bit of a cheat, since SAS actually comprises several different programming languages: DATA step, SQL, DS2, SAS macro, IML, GTL, SCL, and more. SAS also contains hooks into other languages like Lua and Groovy. Some SAS analytical procedures are programming languages in their own right, like PROC OPTMODEL.

I have several friends who have built their entire careers on SAS programming. There is little risk of boredom, as the SAS language evolves with each release and is used in virtually every industry. It's like a huge mansion of a programming language -- we all have our favorite rooms where we spend most of our time, but there are always new additions to discover and explore.

I've said that I don't identify myself as a programmer, even though programming is an activity that occupies lots of my time. Here's my #FirstSevenLanguages list. It's not exactly in chronological order, and like other folks I'm cheating by grouping some languages together into eras.

  • Extended basic on the TI99/4A (high school, in my parent's basement)
  • Turbo Pascal and Turbo C and Assembly (school and internships)
  • REXX and Perl (two different jobs, but used both to automate tedious tasks)
  • C++ (our first versions of SAS Enterprise Guide)
  • Java (various projects)
  • C# and .NET (SAS Enterprise Guide since the mid 2000s)
  • SAS - (first learned in a SAS education class in 1993, and still learning it)

Unlike some of my more distinguished colleagues, there are no "punch cards" languages on my list. Nostalgia is sometimes fun, but I don't believe anyone who says that the era of punch cards, 16K RAM, and 8-inch floppy disks was "the good old days." Instead, I prefer to look forward to my #NextSevenLanguages. In my current role with SAS Support Communities, I get to dabble in JavaScript, FreeMarker, and Python. But I use SAS every day and for so many tasks, it remains high on my list of languages to learn!

tags: computer science education, csedweek, stem

The post What were your #FirstSevenLanguages? appeared first on The SAS Dummy.

12月 112014
Last year during Computer Science Education Week, some in the corporate community participated in The Hour of Code. To those who visited classrooms, thank you! Telling students about the exciting careers in computer science not only inspires leaders of tomorrow, but it also leads to more graduates equipped to innovate […]
12月 012012

There are two activities which, when taken in combination, have occupied the vast majority of my working hours for the past 20 years: writing computer programs and writing...well, just writing.

During my college years I completed my degree with a double-major: Computer Science and English. (My English degree has a writing concentration; I took the minimum requirement of literature courses to satisfy the major. Please do not ask me to recite Tennyson or interpret Shakespeare.)

Whenever somebody asks me what I do for a living, I do not answer with "I'm a computer programmer", even though that is one of the main activities that justifies my paycheck. For me, "computer programmer" conjures up an image of a sun-deprived subterranean creature -- a go-between who accepts requests from the computer ignorants and performs the necessary incantations over a computer keyboard to make it happen. In "the old days" it really was that mystical. The programmer was like a priest who took your petition to the Great Mainframe. After a ritual sacrifice of punch cards and green bar paper, your prayers might be answered with a result that you could use.

I'd rather be seen as a team member who just happens to specialize in software. It's a lot like the film Oceans Eleven, where a team of specialists all work together to achieve a noble goal. (Their team also has a software specialist, albeit one with some ridiculous skills.)

Many of today's software professionals can credit some sort of computer science education (whether formal or informal) for their success. According to the CSEdWeek.org website, computer science education is essential for:

  • Exposing students to critical thinking and problem solving
  • Instilling understanding of computational thinking for success in the digital age
  • Preparing students to attack the world’s most challenging problems from a computation perspective

Formal education isn't the only way to get there, but I believe that computing-related topics deserve a prominent place in our schools. The CSEdWeek initiative seeks to raise awareness about the importance of computer science education, especially at the K-12 grade levels.

Now that's a computer program that I can get behind.

tags: Computer Science Education Week, csedweek
12月 132011

On his SAS and R blog, Ken K. recently posted an example of a visualization technique called "small multiples".

In this exercise, Ken shows the programming technique for replicating a particular series of pie charts in R as well as in SAS. It's a useful exercise to learn from, but I wasn't crazy about this method for visualizing the particular data that Ken used. The data set contains values for the popularity, salary, and unemployment rates for college majors. Since last week was Computer Science Education Week, and Computer Science compared favorably in the results, I was interested in featuring a different visualization for this.

That's when I challenged one of our SAS visualization experts, Robert Allison, to take a shot at it. Initially, Robert didn't bite. But then someone else asked him to try, and he relented. (That's how much pull I have around here.)

In my opinion, Robert's result is easier to read and easier to understand. It's easier to see "ranking" of disciplines by the interquartile ranges, and there is a visual indication (albiet a bit arbitrary) as to whether each discipline has low, medium, or high unemployment rates. (Note: I believe that the "small multiples" technique can be very useful with other types of charts, such as series, small bars, etc.; just not with so many pie charts...)

Compare for yourself:

Note: I shared this result with Ken in the comments on his blog. He appreciated the effort, and responded with a bit of critique, highlighting some of the tradeoffs that result in this alternative version.

tags: Computer Science Education Week, csedweek, visualization
12月 032011

When I was a teenager in the 1980s I purchased my first computer: a TI-99/4A. (Wow, TI's version numbers are more confusing than ours!) I had several friends who had other brands of computers, including the TRS-80 (affectionately known as the "trash 80") and the Commodore 64.

Despite our divisions over computer brands, my friends and I had at least one common experience with our machines: home computing was relegated to the basement. If I wanted to play a computer game or tinker with programming in Extended Basic, I had to go underground, literally.

With that basement-dwelling pedigree, it took a special sort of person to select Computer Science as a field of study. Many of my fellow students were living examples of the stereotypical "comp-sci geek": smart but socially awkward, most of them males, with questionable grooming habits and an unhealthy obsession with role-playing games.

Since then, computers have been promoted to the main living space: we keep them in prime locations such as a home office, family rooms, bedrooms, and even in our pockets (in the form of smart phones). Computer Science has achieved a solid status as a respectable field, even among today's youth. You can admit to your inner geekiness and still get invited to cool parties (grooming habits permitting).

Speaking of parties, it's time to celebrate Computer Science Education Week (Dec 4-10)!. As cool as Comp Sci seems to me, we still must raise awareness of the importance of the discipline, lest we find ourselves with a dwindling pool of smart, technically-oriented critical thinkers.

In celebration, I'd like to re-offer these articles that I wrote to commemorate last year's CSEdWeek:

Computer Science isn't just for geeks anymore
Yes, it's another one of those "back in my day we were all nerds, but now we're cool" posts.

What's my line? (CSEdWeek Edition)
What's the best way to explain a computer science career to a group of 8-year-olds? And why would they be so interested?

Pop quiz for Computer Science Education Week
Fancy yourself a comp-sci aficionado? Try your hand at these questions that any self-respecting CIS pro should be able to answer.

tags: Computer Science Education Week, csedweek
12月 112010
I helped to write a quiz for the Computer Science Education Week promotions that were featured on our company intranet. Do you fancy yourself as a Comp-Sci aficionado? Let's see how you do with these.

1. Which achievement is Charles Babbage most famous for?

  1. Establishing software retail shops in shopping malls across America
  2. Inventing a strategic card game that involves using pegs to keep score
  3. As one of the "fathers" of the programmable computer
  4. Earning an all-time high score while playing Mafia Wars

2. Early computer programs and data were originally recorded on what storage device?

  1. Iomega "Zip" drives
  2. 8" floppy disks
  3. Punched cards
  4. 8-track cassette tapes

3. Which of the following is NOT a computer programming language?

  1. Lisp
  2. Python
  3. Ruby
  4. Simba
  5. SAS

4. Within a computer program, a function that can invoke itself again as part of doing its work is known as:

  1. recalcitrant
  2. recursive
  3. redundant
  4. repulsive
  5. a stack overflow exception

5. In a computer program, a variable that simply holds the memory address of another variable or data structure is called:

  1. a memory leak
  2. a pointer variable
  3. a linked list
  4. an address box


1: (c). Charles Babbage is known as a pioneer in the concept of a programmable computer, even though he lived long before the technology to build modern computers was invented. Source: Wikipedia (http://en.wikipedia.org/wiki/Charles_Babbage)

2: (c). Punched cards have been around since the earliest "computing machines". Beginning in the 1960s, magnetic tape and other storage devices began to replace punched cards for data storage. Source: Wikipedia (http://en.wikipedia.org/wiki/Punched_card)

3: (d). At the time of this writing, there is no computer programming language named "Simba"…but it's probably just a matter of time. The most popular active programming languages are tracked at the TIOBE Programming Community Index (http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html). The SAS programming language is currently at number 18 on the index.

4: (b): "Recursive" is the most correct answer here, but unless used with extreme care, any of the other answers might be the result.

5: (b): A pointer variable (or pointer, for short). Pointers are common in some programming languages, such as C and C++, where they are usually essential for memory-efficient operations. Those who work with higher-level languages such as Java, C#, or even SAS don't encounter pointers nearly as often (the lucky stiffs).

12月 072010
Computer science is more than the pursuit of "let's see what we can make this computer do." If that's your only goal, then you might make a fine computer geek, but a lousy computer scientist. In her blog post for Computer Science Education Week, Caroline McCullen reminds us that computer science is the "T" in STEM, and isn't an isolated pursuit, but an integral part of preparing today's students for the modern and future job market.

Back in the day, one of the required courses for all computer science majors at my alma mater (SUNY Potsdam) was Data Communications. The culminating project for that course, when I took it, was to link four PCs in a data comm network via the parallel port.

This was a very geeky project. We used soldering irons to modify cables; we implemented software layers in assembly code as well as C code, and we had to work together as a team. All of these are important skills for real world projects. But as the end result, we had a small network of four PCs linked by parallel port -- something that really had no practical use. (Remember, the parallel port was used mainly for communicating with printer devices. Your computer sends information to the printer, but those printers sent relatively little information back, aside from a BUSY or ERROR signal.)

That's not what computer science is about today. Within today's computer science departments, students work with their peers in other academic departments (and industry) to use their skills to solve problems in the domains of other disciplines. That includes math, economics, statistics, and physics -- the disciplines with obvious need for number crunching and equation solving. But it also includes the "humanities" subjects, such as English, music, and education. Just as important, the practitioners of these other disciplines learn that technology can help improve their work, and not just distract from it.

We still need the geeky projects like my data comm experience to help build the basic skills, so that as computer scientists we have that background knowledge to bring to the table. It's like how a medical student has to spend a certain amount of time with cadavers, not to become really good at working with dead people (apologies to Quincy), but to build up the knowledge needed to bring help to the living patients who can benefit from it.

That brings me to this true anecdote: A couple of weeks ago I had a phone conversation with a SAS customer who works for a major health insurance provider. He uses SAS to collect and report on data about surgical outcomes. We had a great conversation about SAS libnames, data sets, and many other geeky aspects of SAS programming. He spoke with such fluency about programming concepts that I was surprised when I later saw his credentials in his e-mail signature: he's a registered nurse.

12月 012010
Author note: I'm "replaying" this post in honor of Computer Science Education Week. It originally appeared here over 3 years ago.

Today was "career day" in my daughter's 3rd grade classroom. A few privileged parents were invited to attend and answer questions about their professions, press-conference style.

Among those on a panel of nine parents, the panelists that saw the most action included the Dog Trainer, the Duke Life Flight Nurse, and...the SAS Software Manager.

If it surprises you that the software manager profession is very interesting to 9-year-olds, welcome to the club. Personally, I wanted to hear more from the CFO of Carquest and the car dealership owner who specializes in Hummers and Porsches (and who has an EVO on his lot -- that revelation prompted excited gasps from many of the boys).

Still, I was honored to answer the students' many questions. Here is a sampling of their questions and my answers.
Continue reading "What's my line? (CSEdWeek edition)"