31/10/2011

Learn a new programming language

Recently I came across Ohloh, the open source network. And got me thinking again how many programming languages do I really know.

This short list pretty much sums it up:
  • C#/.NET
  • T-SQL
  • Javascript
And then some HTML, XAML and CSS.

I see myself more of a voyager of the programming seas, having looked upon the lands of:
C/C++, Java, Delphi, Ruby, Python, Haskell, CLisp, Groovy, Dart, PHP, F#, Visual Basic, NASM, Perl

I also came across Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages doing some googling.

Personally I think learning seven programming languages in seven weeks is generally a bad idea.
My lex parsimoniae test is this:
You are proficient with a programming language if and only if you can generate a continuous profit from your efforts.

I have read many articles and discussions regarding which programming languages to learn.
In general, it's a good idea to know at least one of each:
  • Domain Specific Language (ex. HTML/CSS)
  • Functional Language (ex. Haskell, F#)
  • Strongly Typed Language (ex. C#, Java)
  • Object-oriented Language (ex. Delphi, PHP, C#)
  • Dynamic Language (ex. Groovy, Ruby, Python)
In general I believe it's not how many you know, but rather, how many you can use. All of us learned our first programming language by placing our focus solely upon it.

With the same effort we applied to the first, we should apply to the next.

I believe it's much better to improve on what you know than to be a jack-of-all-trades in languages you will never use.

24/10/2011

Gold plating - YAGNI

Here is the short definition of Gold plating per wikipedia: Gold plating in software engineering (or time management in general) refers to continuing to work on a project or task well past the point where the extra effort is worth the value it adds (if any). After having met the requirements, the developer works on further enhancing the product, thinking the customer would be delighted to see additional or more polished features, rather than what was asked for or expected. The customer might be disappointed in the results, and the extra effort by the developer might be futile.

Jeff Atwood posted some interesting blog posts too:
The Ultimate Software Gold Plating
Gold Plating

Just in case you are not familiar with the concept of YAGNI: You Ain't Gonna Need It!

For the sake of pants, I'll coin a new term developmestruction:
Developmestruction occurs when a lack of details or developer foresight causes development to become a destructive force towards time and money constraints, as well as posing a succinct threat towards project goals and client patience.
In short: Destructive Gold Plating = Develop-Me-Struction
As stated before, the first childhood signs of a developer causing developmestruction is when planning isn't done appropriately.

The simplest example of this would be:

    As a company you are running seminars - each of these seminars have their own prerequisites in terms of the target audience and some business logic factors.

    Developmestruction approach: Create an entirely dynamic way of adding/creating new seminars via multiple crud and management forms, totally avoiding the problem field at hand.

   YAGNI approach: Hard code the majority of the logic and allow only some logic to be configured.

23/10/2011

Got .NET?

Recently, while wetting my feet with a few programming languages (Ruby, Haskell, Common Lisp, Python, C, C++) I came to the realisation - learning a new programming language is hard.

Generally, programming languages are classified into one or more of these categories:
  • Object-oriented
  • Dynamic
  • Functional
  • DSL (Domain specific language)
 Some being statically (strongly) typed (ex. C#, VB.NET, Java, C/C++) and some dynamically typed (ex. JavaScript, Ruby, Python, Groovy, Dart). Also, general programming languages (previously mentioned) differ from domains specific languages  - even though some DSL are general programming languages too, for example:
  • Microsoft Dynamics implementations
  • Nodejs
  • SAS
  • Objective-C
HTML and CSS are DSL's too! Then again, you get DSL's built upon DSL's (DSSL - Domain-specific specific language?) such as CoffeeScript, Haml and Less.

So, before wandering too far off, I thought it'd be good to share some resources that have helped me conquer the mountain of learning .NET (Not including the MSDN):
and finally

Here are some interesting reads to pass the time:
Perhaps in the future I will expand this list, but for now: Happy Coding!

21/10/2011

Programming Gamification

The concept of gamification has been around for a while.
http://en.wikipedia.org/wiki/Gamification
It has spawned a new age of educational training and some programming languages have already put to the test some interactive tutorials.

I first came across a gamified interactive tutorial while studying a functional language (Haskell.org). I found it so addictive, I loaded it up on my Blackberry Torch later the day while I was waiting at an interview. Needless to say, it has a small glitch which is rather bothersome when using a small screen/mobile device - but I don't believe they had users in mind using their mobile phones when designing an interactive programming tutorial ;)


http://tryhaskell.org/

At Try Haskell, they stated: concept and interface blatantly copied from _why's Try Ruby!

At that time I wasn't entirely interested in learning ruby - after all I already had done some python and was more interested in python's and ruby's love-child: Groovy.


At a later stage I eventually did go try Ruby. At this very moment, I haven't finished the entire tutorial but did come across another interesting site: Code School - Learn by Doing whom offer some interesting courses, such as:
  • Rails for Zombies
  • Rails for Zombies 2
  • jQuery Air: First Flight
  • Functional HTML5 && CSS3
  • Rails Best Practices
  • Try Ruby (Same as previously mentioned I think)
Honestly, my interest in gamification started developing after reading some articles of at Jeff Atwood's blog Coding Horror. The article that got me interested was this one: http://www.codinghorror.com/blog/2011/10/the-gamification.html - quite an interesting read!

It gave me an idea of developing a gamified programming challenge type game, ranging from beginner to advanced level. (For those who just finished these try * gamified tutorials who are somewhat acquanted with the programming language).

The game would use the .NET Framework and the game itself focused around hacking and other challenges - with this catch - you would have to write and improve your own library in your language of choice given theory and specifications ingame. Intermediate Language would allow gamers to use C#, Visual Basic.NET, C/C++, IronPython, IronRuby, F# etc. out of the box to implement their libraries - not that it would be impossible to make wrappers for haskell and other programming languages.

Given such, there are somewhat endless possibilities.