Thanks for the "help vampire" reference, I did find a fix to the problem (reeinstall DUH can't believe I didn't think of that). I have decided to learn C, and I leave this THREAD (sorry I got thread and forum mixed up) feeling very welcomed to this community.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
(1) There is not one answer too
(2) One can reasonably say "It depends"
(3) In some forums, it is a trick by trolls to start one of
those language wars (Ars Technica leaps to mind there).
The it depends sort of question is whether you want to learn
a computer language for the purposes of getting a job, or
whether you want a good learning language, or you just want
to have fun.
If you want a lnaguage that you are likely to use on a job,
I would pick C++, with Java and Matlab/Simulink as secondary.
(Yes, I know the last is not a language per se, but it is
a way of getting things programmed that is heavily used
where I work)
As of today, if my son wants to learn to program, I would
teach him Python.
Wayne
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hey, it took me 4 minutes to write the rest of the
BS - oops, I mean thoughtful analysis that followed.
I thunk it before ye!
Wayne
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2007-01-07
It is an unanswerable question when posed with no context.
You realise you are posting the question on a forum which while nominally associated wth Bloodshed Software is primarily a C/C++ forum because Dev-C++ is Bloodshed's primary product. How could you expect an unbiased answer in such an environment.
You might consider learning The UML! I think there is merit in learning how to design software before you learn to implement it. Now that could really kick off an argument! ;-)
If you want the path of least resistance to Windows GUI development, C# (using Visual 2005 C# Express Edition) is an answer (not the answer, just an answer you understand!). C# is the language of .NET/CLI, which is the currently 'preferred' interface to the Windows OS (preferred by Microsoft that is, and it really is not bad). Other .NET languages have been 'massaged' to fit with .NET/CLI, whereas C# was designed for it.
C and C++ together are the most prevalent languages and are ubiquotous across platforms from embedded microcontrollers to super-computers. That does not make either of them 'the best first language', it does make them the most useful. C is easier to learn, but C++ is more powerful. That said I am wary of those that advocate learning C as a stepping stone to C++. The paradigm switch from procedural to object oriented programming can be hard.
Many languages have been promoted as, or directly targeted at, learning in the past; BASIC, Pascal, Logo to name a few. You might learn something, but neither would likley be the last language you would have to learn if you wanted to program generally. BASIC and Pascal have moved on from their beginner/teaching role. The only still prevalent dialect of BASIC is Visual BASIC, which bears little resembalance to its predecessors (even those previous versions of VB itself!). The most sucessful Pascal dialect is probably Delphi, which is essentially Object Pascal.
Interstingly few languages are promoted specifically as teaching or beginner languages any more. Few want to learn skills that have to be discarded in the real-world. And even fewer believe it useful to teach 8 year-olds programming (they did when that was all you could typically do with a microcomputer).
The current plethora of scripting languages are probably the best way to instant gratification, but I can't help thinking you would always need to know more than one.
Clifford
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
C. NOT C++. The OOP (especially in C++) paradigm is crap.
You will drown in all that bloody overloadings, friends and their friends,
private and public stuff in classes etc. It's a very big language which is living by
it's own life. Take Keringhan and Ritchie book, do all exercises in there, and you'll
get feel exited about writing programms - whatever - win32 or console.
Thanks
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2007-01-07
>> The OOP (especially in C++) paradigm is crap.
There speaketh someone who really doesn't 'get it'. (or intended to get a rise, so here it is:)
Note that friend relationships are often a way of making a poor class design work, so if you found yourself using them often, then you really did not 'get it'. Overloading is not a requirement, but it makes the std::string class work like most novices expect a sting type to work for example. Public and private access is about encapsulation, something that good programmers do, even in C, but for which you have to work harder in C.
C++ is not an all or nothng language. If you believe that then you will "drown in all that...". C++ supports structured programming, procedural programming, object based programming, and object oriented programming, wheras C just supports the first two of these (directly at least, OB/OO can be done in C but the language does not provide support).
C++ can be used in many ways:
Use C++ as a 'better C' by all means.
Use it procedurally, but utilising the advantages of iostream and string or even STL class libraries to make your life easier.
Use it as an object based language to provide encapsilation, something good C programmers do in any case, but without direct language support.
Use it as a fully object-oriented language and start to drown if you dived in here.
Use it with generic programming (templates) and sink straight to the bottom! ;-)
Clifford
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2007-01-07
... but yes, if you choose to use C, get K&R. Actually get K&R in any case!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Yes, too many languages exist to make a decision. Just within the C-like set of languages, you have at least:
C: the plain and small language. It is arguably the easiest to learn but can also be quite "dangerous" in the sense that it makes it easy to shoot yourself in the foot. The standard library does not contain a great deal of tools but tons of third-party libraries exist to provide everything else.
C++: the extended, super-C with lots, and I mean LOTS of frills and exponential complexity from the various ways these frills can be combined. I hear most compilers fail to implement the complete standard language, that's how complex it is. So if you want to learn the whole thing then it can take a very long time. Solution: only learn what you need. Problem with this solution: you cannot understand C++ code written by someone else who knows more than you.
Java: a re-design of C++ that breaks compatibility with C, drops a number of dangerous constructs and provides token-level portability so your code works on all supported platforms (Windows, Mac, Linux...) Safer for beginning programmers, but the code relies on the presence of the Java runtime on the target machine (not such a big problem) and executables are notoriously slow.
C#: another re-design of C++, Microsoft's "imitation" of Java using the .NET runtime, arguably better done than Java since it came after and MS learned from it. The code is also token-level compatible to other systems although not all platforms implement a .NET runtime. Mono does this for Linux, I don't know how complete it is. I also don't know the status on Mac.
D: a Digital Mars re-engineering of C++ that also breaks compatibility with C (and C++) by doing what Java and C# are doing: eliminate lots of problematic parts of an otherwise good language and add a few conveniences. But this is a true compiler, not a tokenizer that requires a runtime library. I don't think the language has an official standard just yet it's a relatively recent development.
I'm sure there are many more...
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2007-01-07
If you are going to mention something as niche as D you shhould at least mention:
Objective-C: Essentially C with Smalltalk influenced object oriented extensions. The de-facto language of the NeXT workstation and its NeXT Step OS, still relatively popular Macintosh and OSX which is a direct descendent of NeXT.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
We need to come up with something that combines what we see here with the best aspects of the "How to ask smart questions", this, and some other resources.
It could be fun/funny.
Wayne
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hey rifle_001 new member he?
Happy new year!!
By now you must have realized that if you want an answer to your question(s), you have to offer more information.
Can you give us more? There have been 10 posts since your initial question!
The guys that authored these posts are the principal providers of help here and they know their thing. They bark but rarely bite.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Wow. So much wrong, incomplete, or silly information I don't know where to begin.
"The OOP (especially in C++) paradigm is crap."
That doesn't even make any sense. OOP isn't even a paradigm; it is an umbrella paradigm for many other paradigms. Now, OOP technique support in C++ isn't as good as it could be, but it is certainly better than C. I would be willing to wager that there is not a non-trivial piece of software in use today that doesn't use at least one OOP technique regardless of target platform or implementation language.
"Take Keringhan and Ritchie book, do all exercises in there, and you'll get feel exited about writing programms - whatever - win32 or console."
O_O
The book is easily the best of the C books, but you've clearly not read it carefully. One of the exercises is to, effectively, write a full parser for the C language. Another is to write a full C-like preprocessor. You think C++ is a bad first language and recommend that? There are very few people who could actually accomplish that after +20 years in C programming. Granted, if they accomplish it, then they certainly should be ready to go into the world.
"Note that friend relationships are often a way of making a poor class design work, so if you found yourself using them often, then you really did not 'get it'."
True enough, but 'friend' can also increase encapsulation. I would say, if 'friend' is necessary to make a normal class or class tree work then you didn't "get it".
"C++ supports structured programming, procedural programming, object based programming, and object oriented programming, wheras C just supports the first two of these (directly at least, OB/OO can be done in C but the language does not provide support)."
You forgot, or didn't want, to list generic programming. Also, C++ supports functional programming.
"They bark but rarely bite."
I have a painful toothache, but it will heal! Bwahahahaha!
Soma
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I've never seen "token" and "tokenizer" used in that way. It is... idiotic.
Rant: Want to know what is really funny about the Digital Mars D variant--D has been used by dozens of small languages? The generic programming syntax is even worse than C++ and if greedy parsing was enforced would even lead to more bugs.
Soma
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
"I've never seen "token" and "tokenizer" used in that way. It is... idiotic. "
Bytecode then. "Tokens" is old school, it was used way back when (in Atari BASIC among others). The language was strictly not interpreted according to the conventions of the time: the source was not even saved as text, it was tokenized into "bytecodes" that were executed by the runtime and converted back to text by the editor.
The idiot.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
For grins, there is J++, which is a Microsoft "extension" of Java, and J, which is a language developed as an ASCII based variant of APL, and, naturally, has nothing to do with J++.
Wayne
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I definitely agree with you : I would choose Python without hesitation. Too bad they didn't develop the Python language sooner...I find it particularly useful for fast prototyping and exploration of software design issues. It can actually make your life much easier, and the learning of OOP concepts a much smoother ride as well.
Cheers,
Quidamadiuq
PS:
Long time no log in :-)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
What is a good first language?
Wow, a very helpful page
http://www.slash7.com/pages/vampires,
everyone must read it.
Thanks for the "help vampire" reference, I did find a fix to the problem (reeinstall DUH can't believe I didn't think of that). I have decided to learn C, and I leave this THREAD (sorry I got thread and forum mixed up) feeling very welcomed to this community.
English.
Soma
English
;)
Seriously, that is one of those questions that
(1) There is not one answer too
(2) One can reasonably say "It depends"
(3) In some forums, it is a trick by trolls to start one of
those language wars (Ars Technica leaps to mind there).
The it depends sort of question is whether you want to learn
a computer language for the purposes of getting a job, or
whether you want a good learning language, or you just want
to have fun.
If you want a lnaguage that you are likely to use on a job,
I would pick C++, with Java and Matlab/Simulink as secondary.
(Yes, I know the last is not a language per se, but it is
a way of getting things programmed that is heavily used
where I work)
As of today, if my son wants to learn to program, I would
teach him Python.
Wayne
I am becoming a bad influence on you Soma...
;)
Wayne
I win. I posted four minutes before you. ^_^
Soma
Hey, it took me 4 minutes to write the rest of the
BS - oops, I mean thoughtful analysis that followed.
I thunk it before ye!
Wayne
It is an unanswerable question when posed with no context.
You realise you are posting the question on a forum which while nominally associated wth Bloodshed Software is primarily a C/C++ forum because Dev-C++ is Bloodshed's primary product. How could you expect an unbiased answer in such an environment.
You might consider learning The UML! I think there is merit in learning how to design software before you learn to implement it. Now that could really kick off an argument! ;-)
If you want the path of least resistance to Windows GUI development, C# (using Visual 2005 C# Express Edition) is an answer (not the answer, just an answer you understand!). C# is the language of .NET/CLI, which is the currently 'preferred' interface to the Windows OS (preferred by Microsoft that is, and it really is not bad). Other .NET languages have been 'massaged' to fit with .NET/CLI, whereas C# was designed for it.
C and C++ together are the most prevalent languages and are ubiquotous across platforms from embedded microcontrollers to super-computers. That does not make either of them 'the best first language', it does make them the most useful. C is easier to learn, but C++ is more powerful. That said I am wary of those that advocate learning C as a stepping stone to C++. The paradigm switch from procedural to object oriented programming can be hard.
Many languages have been promoted as, or directly targeted at, learning in the past; BASIC, Pascal, Logo to name a few. You might learn something, but neither would likley be the last language you would have to learn if you wanted to program generally. BASIC and Pascal have moved on from their beginner/teaching role. The only still prevalent dialect of BASIC is Visual BASIC, which bears little resembalance to its predecessors (even those previous versions of VB itself!). The most sucessful Pascal dialect is probably Delphi, which is essentially Object Pascal.
Interstingly few languages are promoted specifically as teaching or beginner languages any more. Few want to learn skills that have to be discarded in the real-world. And even fewer believe it useful to teach 8 year-olds programming (they did when that was all you could typically do with a microcomputer).
The current plethora of scripting languages are probably the best way to instant gratification, but I can't help thinking you would always need to know more than one.
Clifford
/ What is a good first language? /
C. NOT C++. The OOP (especially in C++) paradigm is crap.
You will drown in all that bloody overloadings, friends and their friends,
private and public stuff in classes etc. It's a very big language which is living by
it's own life. Take Keringhan and Ritchie book, do all exercises in there, and you'll
get feel exited about writing programms - whatever - win32 or console.
Thanks
>> The OOP (especially in C++) paradigm is crap.
There speaketh someone who really doesn't 'get it'. (or intended to get a rise, so here it is:)
Note that friend relationships are often a way of making a poor class design work, so if you found yourself using them often, then you really did not 'get it'. Overloading is not a requirement, but it makes the std::string class work like most novices expect a sting type to work for example. Public and private access is about encapsulation, something that good programmers do, even in C, but for which you have to work harder in C.
C++ is not an all or nothng language. If you believe that then you will "drown in all that...". C++ supports structured programming, procedural programming, object based programming, and object oriented programming, wheras C just supports the first two of these (directly at least, OB/OO can be done in C but the language does not provide support).
C++ can be used in many ways:
Use C++ as a 'better C' by all means.
Use it procedurally, but utilising the advantages of iostream and string or even STL class libraries to make your life easier.
Use it as an object based language to provide encapsilation, something good C programmers do in any case, but without direct language support.
Use it as a fully object-oriented language and start to drown if you dived in here.
Use it with generic programming (templates) and sink straight to the bottom! ;-)
Clifford
... but yes, if you choose to use C, get K&R. Actually get K&R in any case!
Yes, too many languages exist to make a decision. Just within the C-like set of languages, you have at least:
C: the plain and small language. It is arguably the easiest to learn but can also be quite "dangerous" in the sense that it makes it easy to shoot yourself in the foot. The standard library does not contain a great deal of tools but tons of third-party libraries exist to provide everything else.
C++: the extended, super-C with lots, and I mean LOTS of frills and exponential complexity from the various ways these frills can be combined. I hear most compilers fail to implement the complete standard language, that's how complex it is. So if you want to learn the whole thing then it can take a very long time. Solution: only learn what you need. Problem with this solution: you cannot understand C++ code written by someone else who knows more than you.
Java: a re-design of C++ that breaks compatibility with C, drops a number of dangerous constructs and provides token-level portability so your code works on all supported platforms (Windows, Mac, Linux...) Safer for beginning programmers, but the code relies on the presence of the Java runtime on the target machine (not such a big problem) and executables are notoriously slow.
C#: another re-design of C++, Microsoft's "imitation" of Java using the .NET runtime, arguably better done than Java since it came after and MS learned from it. The code is also token-level compatible to other systems although not all platforms implement a .NET runtime. Mono does this for Linux, I don't know how complete it is. I also don't know the status on Mac.
D: a Digital Mars re-engineering of C++ that also breaks compatibility with C (and C++) by doing what Java and C# are doing: eliminate lots of problematic parts of an otherwise good language and add a few conveniences. But this is a true compiler, not a tokenizer that requires a runtime library. I don't think the language has an official standard just yet it's a relatively recent development.
I'm sure there are many more...
If you are going to mention something as niche as D you shhould at least mention:
Objective-C: Essentially C with Smalltalk influenced object oriented extensions. The de-facto language of the NeXT workstation and its NeXT Step OS, still relatively popular Macintosh and OSX which is a direct descendent of NeXT.
Ah yes! I had just visited the D site this week but didn't think of the "OC" in a long time and never used it. How would you compare it to the rest?
It seems that Rifle_001 may be a 'help vampire' of the second kind: http://www.slash7.com/pages/vampires
Clifford
Interesting link.
We need to come up with something that combines what we see here with the best aspects of the "How to ask smart questions", this, and some other resources.
It could be fun/funny.
Wayne
Hey rifle_001 new member he?
Happy new year!!
By now you must have realized that if you want an answer to your question(s), you have to offer more information.
Can you give us more? There have been 10 posts since your initial question!
The guys that authored these posts are the principal providers of help here and they know their thing. They bark but rarely bite.
Wow. So much wrong, incomplete, or silly information I don't know where to begin.
"The OOP (especially in C++) paradigm is crap."
That doesn't even make any sense. OOP isn't even a paradigm; it is an umbrella paradigm for many other paradigms. Now, OOP technique support in C++ isn't as good as it could be, but it is certainly better than C. I would be willing to wager that there is not a non-trivial piece of software in use today that doesn't use at least one OOP technique regardless of target platform or implementation language.
"Take Keringhan and Ritchie book, do all exercises in there, and you'll get feel exited about writing programms - whatever - win32 or console."
O_O
The book is easily the best of the C books, but you've clearly not read it carefully. One of the exercises is to, effectively, write a full parser for the C language. Another is to write a full C-like preprocessor. You think C++ is a bad first language and recommend that? There are very few people who could actually accomplish that after +20 years in C programming. Granted, if they accomplish it, then they certainly should be ready to go into the world.
"Note that friend relationships are often a way of making a poor class design work, so if you found yourself using them often, then you really did not 'get it'."
True enough, but 'friend' can also increase encapsulation. I would say, if 'friend' is necessary to make a normal class or class tree work then you didn't "get it".
"C++ supports structured programming, procedural programming, object based programming, and object oriented programming, wheras C just supports the first two of these (directly at least, OB/OO can be done in C but the language does not provide support)."
You forgot, or didn't want, to list generic programming. Also, C++ supports functional programming.
"They bark but rarely bite."
I have a painful toothache, but it will heal! Bwahahahaha!
Soma
How about changing "PLEASE READ BEFORE POSTING A QUESTION"
into "How to ask smart questions"?
We have had some different titled over the several years of history of that thread.
The sad fact is that a certain number of people will not look at anything before they ask a question.
For a number of weeks, a number of years ago, we had a thread titled something like
"IF YOU ARE SEEING ERROR XYZ, READ THIS FIRST"
You would be surprised how many people who would post directly over it in the forum a post that featured
"I'm getting error XYZ, what should I do? HELP!!!"
Wayne
I've never seen "token" and "tokenizer" used in that way. It is... idiotic.
Rant: Want to know what is really funny about the Digital Mars D variant--D has been used by dozens of small languages? The generic programming syntax is even worse than C++ and if greedy parsing was enforced would even lead to more bugs.
Soma
"I've never seen "token" and "tokenizer" used in that way. It is... idiotic. "
Bytecode then. "Tokens" is old school, it was used way back when (in Atari BASIC among others). The language was strictly not interpreted according to the conventions of the time: the source was not even saved as text, it was tokenized into "bytecodes" that were executed by the runtime and converted back to text by the editor.
The idiot.
For grins, there is J++, which is a Microsoft "extension" of Java, and J, which is a language developed as an ASCII based variant of APL, and, naturally, has nothing to do with J++.
Wayne
Wayne:
I definitely agree with you : I would choose Python without hesitation. Too bad they didn't develop the Python language sooner...I find it particularly useful for fast prototyping and exploration of software design issues. It can actually make your life much easier, and the learning of OOP concepts a much smoother ride as well.
Cheers,
Quidamadiuq
PS:
Long time no log in :-)