I'm guessing you're referring to languages like Haskell here. I think the work people are doing on types in those languages is fascinating but it also seems like work in progress and I wouldn't recommend those languages to a beginner. The key concepts in the lisp-like languages (closures, higher-order functions, garbage collection etc) are easier to understand in a dynamic language IMO.
>The key concepts in the lisp-like languages (closures, higher-order functions, garbage collection etc) are easier to understand in a dynamic language IMO.
How so? F# and Scala, and Haskell aren't dynamically typed languages...
I'm gonna take a guess and say he has been programming for more than 2 years and realizes that types really don't matter.
Define 'proper' type system; C is a static, strongly typed language, with the important feature that the type system is simple enough for an inexperienced programmer to understand and be capable of implementing.
I'm pretty sure C is considered weak in it will automatically cast from one type to another.
C's type system is restrictive enough to get annoying occasionally, but doesn't protect you from loads of things it could, since it is not strongly typed.
C's "types" are just interchangeable methods of interpreting a pile of bits. That's not a strong type system, that's types on the honor system.
By "proper" do you mean mandatory? Otherwise, people are going to yell "CLOS" at you.