Well, they’re all still around, so which one you choose is largely up to you and your constraints. Here’s the list:
[ol][li] Display Lists Vertex Buffer Objects (i.e. server vertex arrays; aka VBOs) Client Vertex Arrays[*] Immediate Mode[/ol][/li]I’ve ordered these in approximate order of performance (fastest-to-slowest), at least on NVidia drivers – though you can find cases where this order changes. For instance, for smaller batches at least, VBOs lose to client arrays.
When you start learning, I’d suggest you feel free to use immediate mode, because it’s simple. Just keep in mind while you’re doing it that you’re populating client vertex arrays behind-the-scenes. For each glVertex/glColor/glNormal, think vertex[ slot++ ] = mydata; (or color, or normal, etc.)
When you nail that and want more perf, pop up to client vertex arrays (which is very similar), then VBOs (server vertex arrays) – they’re both largely the same thing. Only difference is who owns the memory for your vertex attribute arrays, your CPU or the GPU/driver. If you need even more perf, try display lists (and/or get more exotic with your VBOs). Just be aware that it takes some time for the driver to compile display lists for you, so you might want to compile these at startup.
If “forward looking” is your main goal, go with VBOs. Display lists are deprecated in the latest GL, as is immediate mode. Though vendors such as NVidia has said they’re not going away. However, shoot for what’s going to be supported on the GPUs you’re targeting.