Känner mig lite skyldig till att vara helt off-topic ovan, så för att vara lite OT:
vilket språk du ska välja beror lite på vad målet är och vad du kan innan. Jobbar själv med inbyggda-system och där är det C och inget annat än C som gäller, C++ finns men är väldigt ovanligt. Fördelen med C är att det är ett språk helt utan "magi", alla anrop som sker görs explicit. Nackdelen är kanske att många har svårt för pekar-aritmetik och du blir aldrig en riktigt bra C programmerare utan att bemästra detta.
Vill du programmera spel finns bara ett seriöst alternativ: C++. Det är språket som i praktiken används på Windows, konsoller, iOS (endast GUI är i ObjC för spel) och Android (via NDK). WP7 är den enda plattform som inte stödjer C++ för spelprogrammering, men allt tyder på att WP8 kommer fixa detta.
Vill du programmera "back-end" programvara så finns det idag tre alternativ, C# (Windows), Java (Windows och *NIX) samt C++ (Windows och *NIX, ganska ovanligt idag med används där maximal prestanda erfordras, t.ex. högfrekvenshandel).
Ska du skriva program för att administrera och automatisera saker så skulle jag föreslå Python.
Vill du bara lära dig för egen skull och verkligen sätta dig in i olika algoritmer skulle jag föreslå Clojure som är en LISP dialek som fokuserar på att göra det enkelt att skriva program som på ett korrekt sätt kan använda flera CPU-kärnor.
Här kommer ett smakprov på hur Python och Clojure kan se ut, använder quick-sort och insert-sort som exempel så finns dessa i åtminstone 3 olika språk i denna tråd
Python
def quick_sort(lst):
if len(lst) <= 1:
return lst
pivot = lst.pop()
return (quick_sort([e for e in lst if e < pivot])
+ [pivot]
+ quick_sort([e for e in lst if e >= pivot]))
def insert_sort(lst):
sorted_lst = lst[:1]
unsorted_lst = lst[1:]
while len(unsorted_lst) > 0:
key = unsorted_lst.pop(0)
j = len(sorted_lst) - 1
while j >= 0 and key < sorted_lst[j]:
j -= 1
sorted_lst = sorted_lst[:j+1] + [key] + sorted_lst[j+1:]
return sorted_lst
print quick_sort([5,2,6,4,9,1])
print insert_sort([5,2,6,4,9,1])
Clojure
(defn quick-sort [lst]
(let [pivot (first lst) l (rest lst)]
(if (nil? pivot)
[]
(concat (quick-sort (filter #(< % pivot) l))
[pivot]
(quick-sort (filter #(>= % pivot) l))))))
(defn insert-sort [lst]
(loop [sorted_lst [(first lst)]
unsorted_lst (rest lst)]
(if (empty? unsorted_lst)
sorted_lst
(let [key (first unsorted_lst)]
(recur (concat (filter #(< % key) sorted_lst)
[key]
(filter #(>= % key) sorted_lst))
(rest unsorted_lst))))))
(defn parallel-quick-sort [lst]
"quick-sort that may run on multiple threads"
(let [pivot (first lst) l (rest lst)]
(if (nil? pivot)
[]
(let [hi (future (parallel-quick-sort (filter #(>= % pivot) l)))]
(concat (parallel-quick-sort (filter #(< % pivot) l))
[pivot]
@hi)))))
(println (quick-sort [5 2 6 4 9 1]))
(println (parallel-quick-sort [5 2 6 4 9 1]))
(println (insert-sort [5 2 6 4 9 1]))
;; Use of (future) will start Java-executors that need to be shutdown
;; or for the JVM to shutdown.
(shutdown-agents)
Clojure körs ovanpå en JVM och det är fullt möjligt att anropa Clojure kod från Java och vice-versa. Clojure är ett s.k. funktionellt språk och tycker personligen det är betydligt mycket enklare och trevligare att använda jämfört med Haskell (som ändå är riktigt trevligt) och F# (som jag aldrig riktigt blivit vän med, tycker det är ful syntax).
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer