>>
|
No. 209
File
133768681817.jpg
- (164.96KB
, 1650x1086
, 1288275954353.jpg
)
>>207
Its me, >>171 / >>175 again.
Next target after C? Well, first thing to understand at this point is that you'll never finish understanding C, because you'll never finished exploring what sort of states you can invent within a machine. So you'll never "finish" learning C, just go deeper down the rabbit hole -- once you finally realize there is a rabbit hole down which to go.
That's not true for every language, though. With something like Java and C++ you'll just find a point where you're wandering endlessly in a waking nightmare of incompatible libraries, forgetting old core concepts as fast as you learn new ones. That's a sign of bad design (and a shit community full of perpetual noobs and help vampires -- see the web development community).
So anyway... to the heart of the question...
After C you should look for something that stretches you similarly and has no limits of its own, in the same way C does. It has been noted by nearly all the greats that any language that doesn't fundamentally change the way you consider problems (and deeper, all the way to the human condition and the nature of conditions themselves) is not worth learning.
Compactness (meaning "being-able-to-hold-it-all-in-at-onceness") is critical to this so you can think about problem domains, not fiddle with the latest vanity language.
It is also very important that you not be able to write C in that language.
What I mean by that is, if you can "write C" easily in the next language you learn, you'll eventually find that you're just writing C in something else and not adapting to whatever that language's core paradigms are. The joke about the difference between a pre-1970's hacker and a post-1970's hacker is still true: the pre-1970's hacker can still write FORTRAN in any language.
So for this reason I'd rule out anything similar, meaning that Python, Bash, Algol (oldie...hehe), Ada, Java, Ruby, almost anything OOP (you'll find yourself writing C within either a mega class, hacking up singletons, or otherwise writing things that behave the way your functions used to, which isn't such a bad thing, but it defeats the purpose, will expose what is stupid about most OOP environments and leave you feeling cheated), etc.
So ultimately, I'd recommend Scheme. Not even Common Lisp. If you actually need to write production or compiled code later its really easy to hop into CL if you need libraries and things, but Scheme is totally minimal. You can learn it in about 20 minutes and you'll never finish understanding what you can model with it -- perfect environment to bend your mind.
But you said you want to "learn" a language and I said you can learn Scheme in about 20 minutes. So that might sound like a waste of 20 minutes if what you wanted to do is plow through volumes of library arcana and amaze the dweebs in some IRC room with how l33t you are. Those libraries will all be obsolete tomorrow, anyway. So which is the waste of time?
What the Scheme community does a lot of is examining and modeling problems nobody has really taken a crack at before. This is important if you want to learn things -- and I mean really learn things that are hard enough that you get sleepy from brainlock once you grok it.
If you understand what deep black magic is possible in C and the wizardry that is available through a nearly ruleless environment such as Scheme, jumping to any language will just be a matter of adjusting your eyes to the syntax and having a library reference handy. As you get better at problem solving and sort of outgrow any particular tie to language you'll start gravitating to languages based on the communities and resources that surround them as much or more than for any particular merit of the language itself. People get all wrapped around the axle about this or that language. That's just silly. I mean, there are languages that clearly got raped by the marketing machine (Java takes first place there, with Ada a close second), others that were designed specifically to breed mental incompatibilities (MS's versions of "Visual $LANG", and most of the original baggage that .NET came with, for example), and others that suffer from half-baked design (or intentionally "transitional" design that just sort of stuck and lingered forever, like C++) that wind up spawning unbelievably large, confusing, bloated syntax, feature sets and libraries magnitudes larger and more confusing than the syntax or features... but aside from some of the famous bad examples there are loads of great examples, and so long as you're not tying your boat forever to one of them (but don't shun them if they are the language of an existing project you like, of course!) you'll be just fine.
Wow. That's a lot of blather in a tiny text box.
|