Choosing my next Programming Language
-
I started programming in high school in C about 15 years ago as a hobby and did not follow programming as my career path but it has served as a useful tool periodically since then. I was more or less told that C would be a good entry language, that it would be a good foundation if I decided to learn others. That Java is bloated and grossly resource inefficient, as well as sacrificing quite a lot to be fully cross platform. That C++'s OOP leads to less resource efficient programming and that classes were a crutch to help structure code in lieu of skillfully choosing one's own good designs. But that they would make it easier to work with others by giving greater standardization to interfaces. Today I observe as follows: C was designed for specific purposes and to specific ideals, and I mostly align with them. It's small, clean, and efficient. You're free to shoot yourself in the foot, all 12 toes. Proper design practices are your responsibility (or willful irresponsibility). If you want something you can build it or borrow/get it from someone else. It's not large. On the other hand, pure speed and efficiency is not critical in all applications. If you are doing desktop development with a moderate amount of data, and let's say not computationally intensive graphics, the efficiency may be unnecessary. Rapid development is more critical to me now. The very minimal provisioning of the standard library slows development time, like a mostly empty toolbox. Not only mostly empty, but the tools of the standard library are very traditional and sometimes crude for what you might need. Other languages provide a much greater toolset of readily usable and easily importable features. C is not entirely outmoded but its popularity is marginal, and with that marginalization a lot of the contributions made to programming as a whole are largely unavailable. Its use is declining further with the rise of C#. Projects | The State of the Octoverse[^] I think the logical choice would be to learn C++ next.
-
I started programming in high school in C about 15 years ago as a hobby and did not follow programming as my career path but it has served as a useful tool periodically since then. I was more or less told that C would be a good entry language, that it would be a good foundation if I decided to learn others. That Java is bloated and grossly resource inefficient, as well as sacrificing quite a lot to be fully cross platform. That C++'s OOP leads to less resource efficient programming and that classes were a crutch to help structure code in lieu of skillfully choosing one's own good designs. But that they would make it easier to work with others by giving greater standardization to interfaces. Today I observe as follows: C was designed for specific purposes and to specific ideals, and I mostly align with them. It's small, clean, and efficient. You're free to shoot yourself in the foot, all 12 toes. Proper design practices are your responsibility (or willful irresponsibility). If you want something you can build it or borrow/get it from someone else. It's not large. On the other hand, pure speed and efficiency is not critical in all applications. If you are doing desktop development with a moderate amount of data, and let's say not computationally intensive graphics, the efficiency may be unnecessary. Rapid development is more critical to me now. The very minimal provisioning of the standard library slows development time, like a mostly empty toolbox. Not only mostly empty, but the tools of the standard library are very traditional and sometimes crude for what you might need. Other languages provide a much greater toolset of readily usable and easily importable features. C is not entirely outmoded but its popularity is marginal, and with that marginalization a lot of the contributions made to programming as a whole are largely unavailable. Its use is declining further with the rise of C#. Projects | The State of the Octoverse[^] I think the logical choice would be to learn C++ next.
HS_C_Student wrote:
I think the logical choice would be to learn C++ next.
Most languages have their place in development, and none can really be said to be better (certainly not objectively) than the others. The choice really depends on what sort of applications you want to develop. If you are looking at Windows or Web applications then C# would be a much more logical choice these days.
-
I started programming in high school in C about 15 years ago as a hobby and did not follow programming as my career path but it has served as a useful tool periodically since then. I was more or less told that C would be a good entry language, that it would be a good foundation if I decided to learn others. That Java is bloated and grossly resource inefficient, as well as sacrificing quite a lot to be fully cross platform. That C++'s OOP leads to less resource efficient programming and that classes were a crutch to help structure code in lieu of skillfully choosing one's own good designs. But that they would make it easier to work with others by giving greater standardization to interfaces. Today I observe as follows: C was designed for specific purposes and to specific ideals, and I mostly align with them. It's small, clean, and efficient. You're free to shoot yourself in the foot, all 12 toes. Proper design practices are your responsibility (or willful irresponsibility). If you want something you can build it or borrow/get it from someone else. It's not large. On the other hand, pure speed and efficiency is not critical in all applications. If you are doing desktop development with a moderate amount of data, and let's say not computationally intensive graphics, the efficiency may be unnecessary. Rapid development is more critical to me now. The very minimal provisioning of the standard library slows development time, like a mostly empty toolbox. Not only mostly empty, but the tools of the standard library are very traditional and sometimes crude for what you might need. Other languages provide a much greater toolset of readily usable and easily importable features. C is not entirely outmoded but its popularity is marginal, and with that marginalization a lot of the contributions made to programming as a whole are largely unavailable. Its use is declining further with the rise of C#. Projects | The State of the Octoverse[^] I think the logical choice would be to learn C++ next.
I love C++ primarily because I like the type of projects where C++ is the best solution. This is the approach I recommend--what kind of projects do you want to work on? Then ask what platforms you want to target and in what way. (For example, if you want a rich native GUI experience on Linux and Windows, C# won't work, but C++ with Qt will.) Also be aware that C++ has an incredibly rich set of libraries available in addition to the standard library.
-
I started programming in high school in C about 15 years ago as a hobby and did not follow programming as my career path but it has served as a useful tool periodically since then. I was more or less told that C would be a good entry language, that it would be a good foundation if I decided to learn others. That Java is bloated and grossly resource inefficient, as well as sacrificing quite a lot to be fully cross platform. That C++'s OOP leads to less resource efficient programming and that classes were a crutch to help structure code in lieu of skillfully choosing one's own good designs. But that they would make it easier to work with others by giving greater standardization to interfaces. Today I observe as follows: C was designed for specific purposes and to specific ideals, and I mostly align with them. It's small, clean, and efficient. You're free to shoot yourself in the foot, all 12 toes. Proper design practices are your responsibility (or willful irresponsibility). If you want something you can build it or borrow/get it from someone else. It's not large. On the other hand, pure speed and efficiency is not critical in all applications. If you are doing desktop development with a moderate amount of data, and let's say not computationally intensive graphics, the efficiency may be unnecessary. Rapid development is more critical to me now. The very minimal provisioning of the standard library slows development time, like a mostly empty toolbox. Not only mostly empty, but the tools of the standard library are very traditional and sometimes crude for what you might need. Other languages provide a much greater toolset of readily usable and easily importable features. C is not entirely outmoded but its popularity is marginal, and with that marginalization a lot of the contributions made to programming as a whole are largely unavailable. Its use is declining further with the rise of C#. Projects | The State of the Octoverse[^] I think the logical choice would be to learn C++ next.
HS_C_Student wrote:
That C++'s OOP leads to less resource efficient programming and that classes were a crutch to help structure code in lieu of skillfully choosing one's own good designs.
There are so many ... misconceptions in that sentence alone, I wonder why you're actually thinking of C++ as your next language. I do agree that C++ is a good language to learn, but maybe I should clarify a few things: 1. C++ is not an OOP language! While it's often declared as such because its support for OOP is the most prominent feature that distinguishes it from C, C++ (as well as C) is a general purpose language! You can use it effectively for pretty much any programming paradigm you can think of: procedural, modular, object oriented, functional, you name it. Most other programming languages are not nearly as flexible. And that is the main reason why I love this language more than any other. 2. C++ is not less efficient than C. Neither with respect to use of resources nor with respect to speed. It used to be somewhat slower in some areas, but not the assembly that modern compilers can generate from modern C++ code. Of course, if you turn, say, some procedural code into OO code, use a lot of virtual functions and class hierarchies, that will likely cause some losses - but (if you do it right) you get clearer, more comprehensible code in return. It's not really a loss, it's a tradeoff, and it's for the programmer to decide whether he's willing to make that tradeoff or not. 3. I'm not sure what gave you the impression that classes are a crutch!? When I look at some code from less skilled programmers, yes that code may appear that way. But if you do understand the OO principles, and use it correctly, a well designed class hierarchy can give you extremely clear and comprehensible code, without sacrifcing anything, really. That said, I'll have to give you a fair warning: programmers coming from a C background tend to stick with the programming techniques they know, because, in C++, they can! That is not necessarily a bad thing, but when these techniques creep into the class design, then, yes, what you get is a crutch! When you move to C++ from C, you need to take a step back every time you're about to design a class, and make sure that you drop any notion of using known principles and techniques, until you at least managed to specify what, exactly, the class needs to be able to do - and what not! The latter is really the key to good class design: maki
-
HS_C_Student wrote:
That C++'s OOP leads to less resource efficient programming and that classes were a crutch to help structure code in lieu of skillfully choosing one's own good designs.
There are so many ... misconceptions in that sentence alone, I wonder why you're actually thinking of C++ as your next language. I do agree that C++ is a good language to learn, but maybe I should clarify a few things: 1. C++ is not an OOP language! While it's often declared as such because its support for OOP is the most prominent feature that distinguishes it from C, C++ (as well as C) is a general purpose language! You can use it effectively for pretty much any programming paradigm you can think of: procedural, modular, object oriented, functional, you name it. Most other programming languages are not nearly as flexible. And that is the main reason why I love this language more than any other. 2. C++ is not less efficient than C. Neither with respect to use of resources nor with respect to speed. It used to be somewhat slower in some areas, but not the assembly that modern compilers can generate from modern C++ code. Of course, if you turn, say, some procedural code into OO code, use a lot of virtual functions and class hierarchies, that will likely cause some losses - but (if you do it right) you get clearer, more comprehensible code in return. It's not really a loss, it's a tradeoff, and it's for the programmer to decide whether he's willing to make that tradeoff or not. 3. I'm not sure what gave you the impression that classes are a crutch!? When I look at some code from less skilled programmers, yes that code may appear that way. But if you do understand the OO principles, and use it correctly, a well designed class hierarchy can give you extremely clear and comprehensible code, without sacrifcing anything, really. That said, I'll have to give you a fair warning: programmers coming from a C background tend to stick with the programming techniques they know, because, in C++, they can! That is not necessarily a bad thing, but when these techniques creep into the class design, then, yes, what you get is a crutch! When you move to C++ from C, you need to take a step back every time you're about to design a class, and make sure that you drop any notion of using known principles and techniques, until you at least managed to specify what, exactly, the class needs to be able to do - and what not! The latter is really the key to good class design: maki
-
I started programming in high school in C about 15 years ago as a hobby and did not follow programming as my career path but it has served as a useful tool periodically since then. I was more or less told that C would be a good entry language, that it would be a good foundation if I decided to learn others. That Java is bloated and grossly resource inefficient, as well as sacrificing quite a lot to be fully cross platform. That C++'s OOP leads to less resource efficient programming and that classes were a crutch to help structure code in lieu of skillfully choosing one's own good designs. But that they would make it easier to work with others by giving greater standardization to interfaces. Today I observe as follows: C was designed for specific purposes and to specific ideals, and I mostly align with them. It's small, clean, and efficient. You're free to shoot yourself in the foot, all 12 toes. Proper design practices are your responsibility (or willful irresponsibility). If you want something you can build it or borrow/get it from someone else. It's not large. On the other hand, pure speed and efficiency is not critical in all applications. If you are doing desktop development with a moderate amount of data, and let's say not computationally intensive graphics, the efficiency may be unnecessary. Rapid development is more critical to me now. The very minimal provisioning of the standard library slows development time, like a mostly empty toolbox. Not only mostly empty, but the tools of the standard library are very traditional and sometimes crude for what you might need. Other languages provide a much greater toolset of readily usable and easily importable features. C is not entirely outmoded but its popularity is marginal, and with that marginalization a lot of the contributions made to programming as a whole are largely unavailable. Its use is declining further with the rise of C#. Projects | The State of the Octoverse[^] I think the logical choice would be to learn C++ next.
It seems to me that C will not die completely yet. Projects will exist, vacancies will be open.
I like object oriented languages. Therefore, I would advise working with them. Even without knowing the syntax of the language, just knowing and understanding OOP, you can quickly learn a new language