C: To learn about pointers and memory allocation and what seldom gets mentioned function pointers. In C, one can define a pointer to a function in a struct and build a system that imitates object oriented programming. It helps one learn how virtual method tables work.
Smalltalk: Smalltalk is tiny language that introduces object oriented programming and messages aka doThis:with:via... If one wants to leran Objective-C or Swift later on it's crucial.
Lisp: Abelson and Sussman of MIT use Lisp in SICP which you can find on the internet. Even after 60 years, Lisp is well known. "All you need to know is (+ x y) and you know Lisp".
Scala: I program in Scala 99% of the time for hobbying so bias. Scala introduces traits and f-bounded Turing complete type systems. You can choose to be very simple or very complex. I particularly like Shapeless by Miles Sabin because its show how to make a type safe Bag ala Smaltalk called HList as heterogeneous list. Traits enable one to build programs by 50 line modules. If you are considering learning Modula-2 or one of Niklaus Wirths languages, strongly suggest you skip to Scala.
Ultimately, good coders learn programming structures (queues, loops, recursion, etc), and then learn how to learn programming languages.
As he plans on being a CS student, the class he really wants is a Programming Languages course. One that will teach him the basics of grammar, difference in method implementation, and other essential stress points between languages.
The "Quora User" response was pretty close to right. He went a bit overboard: There is no way in hell that PHP is anything like SQL. (I am including SQL because he mentioned HTML).
You should learn as many languages as it takes to satisfy your intellectual curiosity. If you want to cover the bases: an assembly language (I recommend ARM), an unsafe "high level" language like C or C++, a high level statically typed object oriented language like Java, a dynamically typed one like Smalltalk, a pure/lazy functional language like Haskell, a strict/impure functional language like ML, a logic language like Prolog or Mercury, a concurrency focused language like Erlang or Go, and a Lisp for the sheer power/terror of high level metaprogramming.
For your career, learn one or two languages extremely well, to the point you could write it from scratch given the time.
As long as the level of abstraction is sufficiently high, like where not talking assembly or or anything super low level and architecture specific, then once you've learned one or two, it's only a matter of hours, even minutes before you can pick up another one. the differences are just syntactical. you can pick up the new language conventions, related api's and design patterns as you go.
4 comments
3 u/merosonox 09 May 2015 18:33
What languages should one learn?
C: To learn about pointers and memory allocation and what seldom gets mentioned function pointers. In C, one can define a pointer to a function in a struct and build a system that imitates object oriented programming. It helps one learn how virtual method tables work.
Smalltalk: Smalltalk is tiny language that introduces object oriented programming and messages aka doThis:with:via... If one wants to leran Objective-C or Swift later on it's crucial.
Lisp: Abelson and Sussman of MIT use Lisp in SICP which you can find on the internet. Even after 60 years, Lisp is well known. "All you need to know is (+ x y) and you know Lisp".
Scala: I program in Scala 99% of the time for hobbying so bias. Scala introduces traits and f-bounded Turing complete type systems. You can choose to be very simple or very complex. I particularly like Shapeless by Miles Sabin because its show how to make a type safe Bag ala Smaltalk called HList as heterogeneous list. Traits enable one to build programs by 50 line modules. If you are considering learning Modula-2 or one of Niklaus Wirths languages, strongly suggest you skip to Scala.
1 u/yawnskies 09 May 2015 03:17
He is looking at it from the wrong way.
I am reasonably strong at CS, but as of right now I can only code in Java without consultation of the internet. So is the answer for me 1? No. I have experience with a dozen on my resumé.
Ultimately, good coders learn programming structures (queues, loops, recursion, etc), and then learn how to learn programming languages.
As he plans on being a CS student, the class he really wants is a Programming Languages course. One that will teach him the basics of grammar, difference in method implementation, and other essential stress points between languages.
The "Quora User" response was pretty close to right. He went a bit overboard: There is no way in hell that PHP is anything like SQL. (I am including SQL because he mentioned HTML).
0 u/eiz 16 May 2015 05:58
You should learn as many languages as it takes to satisfy your intellectual curiosity. If you want to cover the bases: an assembly language (I recommend ARM), an unsafe "high level" language like C or C++, a high level statically typed object oriented language like Java, a dynamically typed one like Smalltalk, a pure/lazy functional language like Haskell, a strict/impure functional language like ML, a logic language like Prolog or Mercury, a concurrency focused language like Erlang or Go, and a Lisp for the sheer power/terror of high level metaprogramming.
For your career, learn one or two languages extremely well, to the point you could write it from scratch given the time.
0 u/master_blaster 17 May 2015 20:31
As long as the level of abstraction is sufficiently high, like where not talking assembly or or anything super low level and architecture specific, then once you've learned one or two, it's only a matter of hours, even minutes before you can pick up another one. the differences are just syntactical. you can pick up the new language conventions, related api's and design patterns as you go.