User:Lhignight

From Rosetta Code


My Favorite Languages
Language Proficiency
BASIC Moderate (Rusty)
C Skilled
C++ Moderate (Rusty)
C# Skilled
Clojure Curious (Learning)
Common Lisp Skilled
Emacs Lisp Moderate
F# Curious
Haskell Novice (Learning)
Java Skilled
Mathematica Novice (Learning)
MATLAB Moderate
Prolog Novice (Learning)
Python Moderate
R Skilled
SQL Skilled
UNIX Shell Moderate

Hello, you have reached the Rosetta Code user page for Larry Hignight. It was in sixth grade, while learning to program in BASIC and Logo, that I caught a pretty serious case of the computing bug and convinced my parents that I needed a personal computer. Sometime in 1998, I became interested in the Linux operating system and began frequenting the IRC channel of Loki Games, whose primary business was porting Windows games to the Linux platform. This led to my working as a beta tester on the Linux port of Descent 3 and writing a Linux StepByStep guide for installing SMPEG - The SDL MPEG Player Library on Caldera Open Linux.

I began working as a software developer in 2004 and have completed a number of projects in industry and academia: California State University Fullerton (~1 year), Boeing (~5 years), USC (research - 1.5 years while working at Boeing) and Embry-Riddle Aeronautical University (5 months). While at Boeing, I worked on teams responsible for a number of satellite programs, including DirecTV, XM Radio, Wide-Band Gap Filler (WGS), Global Positioning System (GPS), New Skies (NSS), and SSP (Boeing's internal name for the Future Imagery Architecture satellite system).

"http://projecteuler.net/profile/Larry_Hignight.png"

In addition to Rosetta Code tasks, I have also submitted solutions to fifty-six Project Euler problems. Unfortunately, Project Euler doesn't support a public profile page, just a profile image, which I've included here (Note: The image will sometimes not appear due to bandwidth or permission issues -- I need to work on it). I also have LinkedIn and Facebook accounts.

Why Rosetta Code

I have always found well defined programming tasks to be an extremely beneficial learning tool for developers: whether it be learning a new language, a programming technique, a language paradigm, or simply a new type of problem. Not only does RC provide interesting tasks, but the diversity of the tasks, developers and programming languages is quite outstanding. This is especially true for developers interested in expanding their knowledge beyond mainstream programming languages. After all, you're not likely to benefit from a paradigm or language which you haven't been exposed to at some point. In that regard, most of the tasks that I've implemented on RC involve programming languages and paradigms that I haven't used extensively at work.

My Contributions

The table below contains links to the tasks and code that I've contributed to Rosetta Code along with additional information in the notes.

Contributions
Task Language Contribution Notes
Casting out nines Common Lisp First contributor
  • I used a macro to ensure that the filter would be inlined
  • Possible implementations: C, C#, Java, Haskell, R
Compound data type Common Lisp First contributor
  • I demonstrate how the defstruct macro creates a default constructor w/ accessor functions for each slot
    • I should add some comments on integration with the printer and a list iteration example like F#
  • The task description should include easy, medium, and hard variations:
    • construction, data typing, assignment, printing, equality
    • Use the point type w/ something like the Haversine formula
  • Possible changes: C# should include more output; Haskell better comments; R better comments & examples
Function composition Common Lisp Added the compose macro
  • I wrote the compose macro for a couple of reasons:
    • To provide an elegant means of function composition w/ three or more functions
    • To hide funcall which is a by-product of CL being a Lisp-2 and somewhat inelegant
  • The most elegant solutions: Haskell, Mathematica, OCaml, Scheme, and Common Lisp (via macro-cheating)
  • The Ada implementation is practically a 'proof' that over-use of syntax inevitably leads to inelegant code
  • Let's be realistic... Nobody has ever done function composition at work in C, C++, Obj-C, C# or Java. Ever.
Guess the number Common Lisp First contributor
  • The C, C++ and R versions don't appear to be very robust
  • Why does the Java version use Math.random, then caste to an int, instead of using java.util.Random
Guess the number/With feedback Common Lisp First contributor
  • The current task lacks any meaningful difference from the original.
    • Possible change: require implementations to extend the Guess the number code in order to demonstrate how each language handles changes in requirements, modularity, etc.
Haversine formula Common Lisp First contributor
  • I really appreciate how elegantly Haskell is able to 'destructure' function parameters
    • I might add a CL implementation that demonstrates the destructing-bind macro
  • A version of this task using points in multiple higher-dimensions would be interesting
  • The current task that would probably benefit from some additional examples and/or unit tests
    • There should probably be some kind of automated unit test task
Higher-order functions Common Lisp Added the CL library examples
  • This is another task that would really benefit from more concrete task examples.
  • Possible changes:
    • Clojure, Haskell & Scheme should have better comments and examples
      • "A function is just a value that wants arguments" ... really?!
Kaprekar numbers Common Lisp Added a 2nd implementation Reasons for the addition:
  • The original implementation didn't take advantage of several Lisp forms which improve readability
  • The new version had significantly better performance
    • However, the new version is limited to base 10 numbers
Pancake sort Common Lisp First contributor
  • This is another task that would benefit from multiple versions:
    • Easy - implement the 2n-3 pancake sort algorithm
    • Medium - implement the 5/3*n pancake sort algorithm
    • Hard - implement the 18/11*n pancake sort algorithm
  • I'm considering improving the current code
S-Expressions Common Lisp Replaced the original implementation I consider this to be my best contribution:
  • The parser is 5 SLOC (even w/ having to parse square brackets); The writer is ~20 SLOC
    • By comparison, the Java parser consists of 6 classes and ~200 SLOC
  • Few languages have contributions for the harder task of writing S-Expressions

My Favorite Computer Science Quotes

Thankfully, the field of computer science is full of amusing, quotable personalities. Below are some of my favorites... Enjoy.

My Favorite Quotes by Edsger Dijkstra

  • The required techniques of effective reasoning are pretty formal, but as long as programming is done by people that don't master them, the software crisis will remain with us and will be considered an incurable disease. And you know what incurable diseases do: they invite the quacks and charlatans in, who in this case take the form of Software Engineering gurus.
  • How do we convince people that in programming simplicity and clarity —in short: what mathematicians call "elegance"— are not a dispensable luxury, but a crucial matter that decides between success and failure?
  • LISP has been jokingly described as "the most intelligent way to misuse a computer". I think that description a great compliment because it transmits the full flavor of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts.

My Favorite Quotes by Alan Kay

  • Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves.
  • Actually I made up the term "object-oriented", and I can tell you I did not have C++ in mind.
  • OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I'm not aware of them.
  • I don't know how many of you have ever met Dijkstra, but you probably know that arrogance in computer science is measured in nano-Dijkstras.

My Favorite Quotes by Larry Wall

  • By policy, LISP has never really catered to mere mortals. And, of course, mere mortals have never really forgiven LISP for not catering to them.
  • The camel has evolved to be relatively self-sufficient. (On the other hand, the camel has not evolved to smell good. Neither has Perl.)
  • A Perl script is "correct" if it gets the job done before your boss fires you.

Some Additional Quotes That I Find Amusing

  • Beware of bugs in the above code; I have only proved it correct, not tried it.
    • Donald Knuth
  • Fifty years of programming language research, and we end up with C++?
    • Richard O'Keefe
  • I have a pretty major problem with a language where one of the most common variables has the name $_
    • Brian Hook
  • Some people, when confronted with a problem, think "I know, I'll use sed." Now they have two problems.
    • Jamie Zawinski
  • C is quirky, flawed, and an enormous success.
    • Dennis Ritchie
  • Haskell is faster than C++, more concise than Perl, more regular than Python, more flexible than Ruby, more typeful than C#, more robust than Java, and has absolutely nothing in common with PHP.
    • Audrey Tang
  • If I were chained to a bench and 'perl' was the only thing that could open the lock, I'd probably cut my hand off.
    • Gerald Penn
  • The Largest Disservice to LISP is most frequently done whenever a LISP advocate opens his/her mouth. LISP advocates have been, in my limited and biased experience, some of the most arrogant and condescending bastards in the world. (…) I have heard more than one LISP advocate state such subjective comments as, "LISP is the most powerful and elegant programming language in the world" and expect such comments to be taken as objective truth. I have never heard a Java, C++, C, Perl, or Python advocate make the same claim about their own language of choice.
    • Comment on Slashdot
    • Response: "To be fair, the Java, C++, C, Perl or Python advocate wouldn't have much of a case..."