Discussion in 'Off Topic' started by Artwark, Aug 8, 2016.
DnD makes you an inferior programmer.
Yeah, ttrpgs rot your brain
I think there are too many ways to interpret this question. This topic is quite old now to so I am going to treat my response like a mini-essay so we can pull together this mess without having to comb over the first page again.
I wonder if learning and using this language will make you feel like you aren't a "Real" programmer who learns C++
If we take the OP literally, we are questioning what it "feels" like to be an inferior programmer, and that depends on you and you alone. I don't have any insecurity about my knowledge of GML or GameMaker Studio, but that is because I see GameMaker Studio within its context as hobbyist toolset. It is valuable in its context. Alessio, MishMash, and frog among others rightfully dismiss the idea.
Defining the Question
We need to be careful not to confuse the question further here; there is a difference between an inferior programmer and an inferior programming language, a line that Cantavanda, Matthew, and 11oclock accidentally blur (although Cantavanda seems to be endorsing the view that GameMaker has a contextual purpose as above).
Matthew argued that there are complex concepts in other languages that are missing from GML, and so ones knowledge of these concepts will be incomplete if they only have a GML background. In my mind, this is beside the point, because we are not concerned with how GML is inferior to other languages. The comparative complexity of GML to other languages says nothing about the ability of the programmer, because being an adequate programmer requires knowledge that is separate of any one language. Mercerenies sucessfully argues this in rebuttal to Matthew. Similarly, HayManMarc argues that GML itself ought to have nothing to do with the question, because it isn't relevant. To be good at programming suggests one is good at programming in a chosen language, whatever that may be, but we need to define this properly.
What does it mean to be a competent programmer? Paolo rightly asked this question, and it has been wrongfully ignored. I take it to mean having a good understanding of any relevant computer science concepts (data structures, memory usage, algorithms and their costs, etc) and being able to apply your chosen language to solve problems. The ability to structure code and projects in an effective way is an issue that concerns software engineering, not programming per se.
What makes a good programmer is sometimes defined as having the "programmers mind." For the sake of simplicity, lets define it as this: having a general knowledge of computer science and the commonalities in programming languages, such that you can learn new programming languages efficiently and reapply fundamental concepts. For example, the concept of storing a value in memory is universal in programming languages. If you understand how this works and why we do this, e.g. to remember a value as a variable, the process may change but the concept, however abstracted, is applied with the same intention. In this way, a good programmer is not someone who can program in many languages, but who can has the technical potential to do so. gmx0 defines an "inferior programmer" using similar reasoning:
An "inferior" programmer is one who can't use his choice of language to create what he wants out of it.
I disagree with FrostyCat's response that the programmer is inferior if they only program in one language, a point that has been praised throughout the topic:
...coding only in one language, no matter which one it is, makes you an inferior programmer.
Although Frosty is presumably making the point that a lack of generalised programming experience is a bad thing, the statement is technically untrue. If a programmer had an incredible grasp of C++, having dedicated their life to learning this language and only this language, and he was able to develop well-rounded programs to efficiently solve any problem (within reason and of equal solvability in other languages) it would surely be unfair to say they were, by this definition, "inferior" in what they do. I believe this is what David Richard argues with the piano player analogy.
A blind person that becomes famous because he only knows how to play the piano but play it well, will we say that he's inferior because he can ONLY play the piano? NO...
The above definitions of having the "programmers mind" and what it means to be "competent" are, in my view, aligned with the arguments by MishMash, Paolo, among others.
Frog and bml side with FrostyCat, aruging that only knowing GML would make one an inferior programmer, but his reasoning trascends our definitions. Only knowing GML might make you a bad software developer, or unsuitable for use in an enterprise environment, but neither of these points are relevant here. Contrary to what bml suggested, nobody seeks to argue that GML is suitable in a non-game development context, or that someone who requires a C++ developer is equally justified in hiring a GML programmer. Again, we must not confuse the question by asking if GML is an inferior language.
Are GML skills universal?
L0v3 argued that "any programming skills are universially applicable anywhere." On first impression the scope of this claim seems too broad, but you could say that everything in GML has some transferrable knowledge even if that means drawing an analogy from a GML implementation. For example, lists in Python are not unlike a cross between data lists and arrays in GML. Similarly, writing functions in Python is analogous to executing a code block or a self-contained D&D event, even if the process isn't exact. FrostyCat is perhaps right in disagreeing that "any" skills from GML are "applicable anywhere", but I think it is wrong to downplay the usefulness that GML has as a stepping stone to other languages, even those of far greater obscurity. If you were able to clone a man who has never programmed before, and teach his duplicate everything there is to know about GML and how to make games in GameMaker Studio 2, I am willing to bet his duplicate would be able to learn Haskell with greater speed and ease than the original who had never programmed before.