If you want to study the kernel source code than The C Programming language, or Standard C is definately the best language for that job, afterall the kernel is implemented in C, however it is also a convoluted object based kernel that should have been refactored in Standard C++ and documented in UML. Object based C is junk to read.
The computer world is confusing. It's difficult to know what language to use, however this is the basic idea.
- Understand that damn near every SYSTEM is implemented in C.
- Middleware is implemented in C++.
- SOLUTION applications are implemented in Java (or .net ... which sucks).
The biggest hurdle is understanding the difference between solutions and systems. In most cases individual programmers are interested in building solutions (whether they know it or not) and therefore middleware is superior because it allows the developer to work at a high level of abstraction through vendor specialized libraries.
A system is a low level massive application such as the operating system kernel, or a web server like Apache or a database server like Oracle, or middleware itself ( a virtual machine and a framework). These applications are hundreds of thousands or millions of lines of code.
Standard C is a light weight language, there are almost no libraries, only stdio.h, stdlib.h, etc. This is in huge contrast to middleware. In C you build your own libraries, it's a research langauge, and you generalize toward the software architectures system interface for primitive functions and toolkits or else you go even further to the hardware specification (X86 or Sparc).
Now there is a middle ground, where C and C++ are also used for solution development however it is not as smooth of a ride for lack of documentation and software architecture constraints. That is the reason why they built middleware in the first place, so if you want to build systems than you use a research language, and if you want to build solutions than use middleware. The people at Sun using C++ to build the middleware environment that hosts soltuion development, in other words, Java was not suddenly there, it was built by about 3,000 people who built it in C++ and continue to add specialized libraries to the framework.
One of the other assets of middleware is that the Java middleware runs cross platform, so if you write you text editor it will run on Win9X, Win2k/XP, Linux, Solaris, as well as operating systems that have not been released yet. On the other hand .net middleware sucks because Microsoft purposely didn't make the platform run on different software architectures. The reason is because they are a monopoly and they don't want anyone else to use another operating system.
Learning C is one thing, and learning an object based design using C is quite another thing. It's kind of like sending a midget to fuck Ashley Judd. It doesn't do her justice. That's what you might find in the Linux kernel or the Microsoft Windows system interfaces.
I think that when you build an application than it should be modeled in a modeling language like the UML (
www.omg.org ) and implemented with an iterative and incremental process. At least if the code is over 10, 000 lines.
Java is made by Sun but the SDK is free and it runs on Linux <
http://members.shaw.ca/trollking/ >.
I've built a small database using C, if you want, I'd help you with something like that, but I've never tried a text editor. I'd probably rather not write a console text editor, but rather one that runs in a GTK or Java window (and uses threads in Java).
You might want to learn about linked lists. One cool thing about C/C++/Java is that they all have similarities in terms of syntax so whatever road you start out on, you can carry on some of the knowledge.