Why is there so much hate for copy-and-paste developers?

It can likely be said that a the mark of a great developer is how much code they can write without opening a tutorial for the code fo some kind or another. Now, I understand that the preceeding is true, but why are we hating on the developers that cannot write much without going to a tutorial? I regurlarly see, on various forums, people insulting copy-paste developers, or developers that just copy and paste from tutorials. My question is why is everyone being so mean to copy-paste developers, its not like one can just decide, I will learn java, and not look at a any tutorials and copy and paste some code to start of. In fact, I would bet that a majority of developers started as copy-paste developers. I myself am only begining to move from copy-past devolping, to writing my own if-then statements, etc. I think that people have to understand that they have a certain skillset, and that they did not have it once, and when someone comes around that does not have that skillset, the person with the skillset can’t just be mean to them just because.

So anyway, please respond with your thoughts and whether or not you are a developer and if so, if you started as a copy-paste developer.

Because Copy and paste is the worst way to go about writing code especially for a newbie because you’re not actually learning anything

1 Like

That is an interesting point, but I do not think it is valid. Consider this:

  • Babies learn to talk by listening and copying what their parents do, so why can’t coders, coding i not so different from learning a language, there is grammar, and different words to learn
  • Copy and pasting into IDE’s can aid in learning, because when you edit the code, and do it wrong the IDE helps you fix it
  • Copy and pasting is how I started, and I can now code much more independently than i used to

and just as a question, are you a developer and if so how did you start?

Programming =/= talking. Programming is conceptually very different, with language you can talk a lot of crap and people will be able to understand what you generally want. Try that in a program and your interpreter/compiler will most likely reject the code.

Copy and Paste programming shows you do not understand what you’re working with and can quite easily open up a whole slue of other issues like performance or security.

When I started I experimented: I was told about the tools, shown the basic syntax and was left to my own devices to learn the rest.

It’s not “copy-paste developers”, as you put it per se. As long as people stick to copy pasting there’s really no harm, and if you learn how to code through doing so, then it’s a legitimate way to start coding. The issue arises where copy-paste capability runs out:

On the one hand you have the people who will admit defeat, be happy with what they’ve achieved and feel a sense of accomplishment which is great for them. No problem! You’ve got the people who when their copy/paste ability runs out will see that as an opportunity, or even incentive to start learning “for real” and take it from there. Again no problem

Then on the other hand you’ve got the people who - upon reaching the extent of what they can achieve via copy/paste - then turn to the world at large and insist that someone else solve their problems for them, problems which only exist because they don’t really actually understand what they’re doing. This is why they’re hated: not because as taken as a whole they’re in any way an issue, but because of the small minority who turn up on forums and demand assistance and act indignant when they don’t get it, or worse, when people initially try to help them but then give up when they realise that the user isn’t putting in the tiniest bit of effort.

It comes down to investment of time. Free time to many people is their most precious resource. If you choose to spend your own time learning, then more power to you. It doesn’t matter the shape of that learning, nobody can shoot down an effort to improve, an effort to learn, and if you make that effort and reach the limit of your capability, more power to you.

However there’s a (not altogether inaccurate) perception that copy/paste coding is lazy, and this is not intrinsically true, as I said it can be a good in-road to really learning, or provided you stay within the confines of what it’s possible to achieve, still a rewarding pastime without really being a problem for anyone else than you. The problem is that if you are lazy, then copy/paste coding can be what you end up doing. We can see that in a nutshell the inferrence relationship is one-way: if you’re lazy and you copy/paste code as a result that’s one thing, but copy/paste coding does not necessarily confer laziness!

So what’s the issue with copy/paste coding? There isn’t one. The core issue is attitude.

If you begin copy/paste coding as essentially the gentle ramp at the start of a larger learning process, or if you accept the limitations you’ve set for yourself and stay within them, then there is literally no problem. However people with the opposite attitude of using copy/paste coding because they don’t want to learn, and then see it as everyone else’s problem to help them past their self-imposed limitiations - that’s where the problem lies.

If you turn up on a forum, asking newbie questions after copy/paste coding, realising that you’re in pursuit of greater knowledge and happy to learn and supply some of your own effort into the mix, people will have time for you and eventually you’ll be able to move beyond the limitations of such a stilted way of writing code. If on the other hand you turn up and demand help when it’s clear you can’t be arsed to help yourself, you’re not going to get a good response.

I’ve been writing code for 25 years, and I’ve honestly made my own in-roads in the past to unfamiliar languages by starting with basics and not so much copy/pasting as starting with someone else’s code and modifying bits of it to try and get a grasp on the language, and I don’t think there’s any shame in that and I’d recommend it as a way of learning new languages quickly (especially if you already know others). If I see someone who’s prepared to help themselves, I will always help them out too, because an appetite for learning should be nurtured.

By the same token, if you’re lazy, then frankly get off my lawn.

Summary: the problem isn’t copy/paste coding, it’s the attitude which sometimes (and usually most visibly, because of the nature of the attitude) accompanies it.

16 Likes

Sorry but this is frankly a nonsensical and slightly misleading statement. People learn in all sorts of different ways and for many it’s actually a good starting point (not for everyone, but that’s why the sweeping statement is kind of daft). The issue as I said above is not the technique, it’s attitude, and that applies regardless of the approach taken. It’s about the person, not the action.

Which worked for you. It may not work for everyone so try to understand that people learn in different ways.

4 Likes

That has to be on of the most helpful posts I have seen in awhile, feel proud @mumfrey

3 Likes

@mumfrey
I understand and agree with your deduction that it is an attitude problem, but I think the problem is both ways, I’ve seen perfectly legitimate questions get turned down because they were “so easy” to figure out.
It does however make sense to constructively critisize the post that asks a question, gets a legitimate response on how to fix the problem, then asks for the whole fixed code.

@disconsented
Coding is more like a language than you have portrayed, it is not that coding and language are conceptually different, it is rather the entity that listens to the language, people can understand langauge in various improper forms, whereas computers can only understand it when grammar is perfect.

That right there is 90% the reason I stopped talking through the sponge IRC. A legitimate question got shunned, and sometimes even made fun of, when all I was looking for was a pointer in the right direction.

I learn by watching others do something, and then throwing my own tweaks into it. That’s what works for me. It is copypasta developing in a way, but I am fully aware that I am not capable of just reading the javadocs and figuring out myself. (although I’m starting to get there)

@mumfrey is correct: there is nothing wrong with it, as long as you are the one doing the work, and doing the learning, not someone else. The moment you put the responsibility of learning on someone else’s shoulders, problems arise.

“One cannot be taught, one can only learn”. :)

1 Like

It comes down to the threshold of the person making the response. Too often that threshold is worn down to absolute zero by the “bad ones”, the lazy ones in my previous scenario and it’s too easy to think “oh no, not another clueless neohpyte who wants me to solve all his/her problems for them”, it’s a symptom that’s far from constrained to only coding help, it’s pervasive: the more lazy users you have to weather, the less patience remains to deal with those who really can benefit from it.

I know this personally, sometimes after 10 questions from people who can’t be bothered to help themselves, it’s the 11th from someone who genuinely wants to learn that cops the flak, simply because the cavalcade of users that preceded have simply worn you down.

I realise it’s unfortunate, and it’s not always the case - some people are just rude right off the bat because, who knows? - but it’s certainly the case as I mentioned above that the lazy few spoil things for those who genuinely want to learn. Sometimes it’s also a case of being able to tell the difference, how you ask your question makes a massive difference and sometimes the blame doesn’t always lie solely with the responding party - poorly written or lazy-sounding posts can get you categorised as “not worth helping” very quickly with some people.

That right there is 90% the reason I stopped talking through the sponge
IRC. A legitimate question got shunned, and sometimes even made fun of,
when all I was looking for was a pointer in the right direction.

Another key thing to bear in mind is that sometimes being shot down by responders is not a bad thing. When you’re learning it’s sometimes hard to know which bits you ought to be figuring out for yourself, and having thick skin can really help. If you run into a situation where you ask a question and it gets shot down this way, it’s often best to just take it on the chin and go, “well, if it’s that simple, I guess the info will be easy to find”. It’s good to ask for pointers and guidance, but it’s honestly not always a bad thing to be told “that’s a stupid question”, because being told that is useful information in its own right! Sometimes knowing what the stupid questions ARE helps you get a handle on the questions you should be asking.

Is any of the above ideal? Not really. But that’s the price we pay for the lazy ruining things for the genuinely engaged. However if you are engaged, be prepared to prove it, be prepared to ocassionally be told that you asked a stupid question - that’s okay - because when people who are in a position to help you become energised to do so it’ll be worth the occasional discomfort that came before. Extend the same tolerance to those who you wish to help you as you would have them extend to you, it takes an effort of will because of the kind of shit people have to deal with on the internet, but it’s worth it.

And seriously, if anyone else asks me questions about mixins I’m just going to leave the country.

7 Likes

@meguy26 A developer is not someone who writes code. A developer is someone who solves problems and whose solutions manifest in the form of computer programs. When you go right to the tutorial you are skipping the part where you think about the problem and try to find a solution. That’s the most important part of being a developer. As a guideline, if you can only solve the problems you where already told how to solve, then you’re a terrible developer.

There’s nothing wrong about reading tutorials, but if you want to learn you should at least try to solve the problem by yourself before going to the tutorial. Copy pasting will give you the false impression that you’re learning and that you can do more than you really can. And when bugs start appearing you won’t know how to fix them because you don’t understand any of “your” code or the fundamentals behind it.

The best example of the copy-paste mentality is front-end web development. Lots of people claim to be Javascript developers, but they can’t do anything without JQuery and they get stuck with stupid bugs because they never learned how ‘this’, prototypal inheritance or argument passing work in javascript.

3 Likes

Yes, I started like that. And sometimes I’m still using the ‘Paste & Modify’ approach.

Sponge does not even have basic tutorials for configurations or examples for event listening.
Only the javadocs, and those are not a complete, understandable documentation.

Bukkit had the same problem.

1 Like

To debut, I am a developer and have been for a few years.

We have all started in the same boat, with the intent to learn programming. Whether it be through school courses, YouTube videos, or literature, we have all found some way to eventually end up with what is required to be a developer. With that said, copy-paste developing is a completely valid method for learning as well if you would like to learn the logic and flow pattern behind coding. Copy and paste is a bad habit to get into for developers in the long run, but for learning purposes it is alright. This is because of the fact that you still have to piece the code together in a way that makes logical sense to you and thus, you are still somewhat learning.

As stated previously, copy and paste programming is not a reliable technique if you are planning to continue developing in the long run. In order to become a developer you must understand both the logic and flow behind any given program and the process of translating your original ideas into computer-friendly code. This is not the easiest task for some, and that is why copy-paste developing continues to be the most appealing option for that group of people. What that group of people doesn’t understand is, that they are both right, and wrong, in their decision. This may seem strange to people, but I have evidence to back up my philosophy. This decision is wrong because the full learning experience isn’t achieved through this method of learning, but it is also correct because they could be ice-breakers for a whole new era of developing.

We have all seen the drag-and-drop block-upon-block type programming tools before, a fantastic example being Scratch, which is developed by MIT. In a sense, this is very similar to copy-paste programming because you learn the same fundamentals of programming but with a drag-and-drop element instead of a copy-paste element. MIT has taken full advantage of this idea for years now, and it has been very successful in teaching children of all ages the logic and reasoning behind programming. I believe that the future of programming could have something to do with drag and drop snippets of code and automatic code completion so your IDE does most of the work for you.

To sum everything up, copy-paste programming should not be frowned upon because it may have been your past, and it could most definitely become your future.

Glad you could make it through this, I appreciate that you took the time to read it :wink:.

Happy holidays!

1 Like

Correct. SpongeDocs lack any decent tutorials thus far, and some important API components are not yet well explained.
=> However, I’d like to ask: if you have the time, the will, and the understanding required, could you try to write some?
We’re in need of folk who can write up Development docs, and expand them as the API expands.

And I don’t mind if you just copy-and-paste another tutorial and modify it to fit Sponge. :wink:

Yes, I will help with the documentation after christmas. Sadly right now, I don’t even have the time to browse this forum :wink:

1 Like

I learned Java solely by playing with it and reading a little documentation. It started with MCP for 1.2.5, and at that point, I had a literal zero knowledge of Java or any programming. I just ran MCP, and started messing with things. This was ok, I figured out some of the primitive types, and the very basics of methods and parameters, but I had no idea what an interface was or anything like that. While I had MCP sitting in front of me, I looked up some tutorials for hacks, thinking maybe I could learn from them. Turns out, it is very much a copy-paste effort and little learning is done.

I didn’t start truly learning anything until I did the same shot in the dark for Bukkit. I asked questions on the forums when the documentation was confusing to me, but other than that, it was just trial and error (lots and lots of jar building… thank god I discovered Maven in the middle of this) and seeing what I could do with the API. Over time I assembled a working knowledge of what I now call “Basic Java”. I know how to make things work. Start talking about abstraction, and yeah I’m gonna do over there and do my own thing.

Point being with my little story above, the best way to learn, in my opinion, is by doing. You can copy and paste a block of code, but that doesn’t mean you know what it does, how it does it, and why it works as it does. You’re probably using someone else’s method and field names, and syntax structure that don’t match what feels right to you.

If you copy-paste a block of code for something that you are drop dead dumbfounded about, and perhaps an explanation accompanies it, sure, I can’t call you a bad person for it. We all want to make something work and for the first time or so I think its normal to look for outside help. Do I think it is better to learn it yourself if possible? Definitely.

1 Like

Good thoughts @bdubz4552; good thougts to all of you really…

@bdubz4552 I also experienced I difference when I moved from one API to another, originally I decided to mod Minecraft with the forge API and that was mainly a copy-paste effort on my part, but after moving to bukkit I find myself writing more of the code myself, mainly because there is more logic involved when creating a bukkit plugin. Now I am beginning to understand various Java keywords, and syntax.

Anyway, thanks to anyone who has replied to this post, it has been a thought provoking discussion so far.

So copy and paste coding is really interesting. When you consider a well designed program is generally a series of different pieces that come together, the ability to pull together different abstract pieces and using them to form a functioning program is critical. In fact, this is effectively the idea behind functions. One issue with copy and paste coding I have noticed fairly frequently, is that often code which is being copied would be much better contained in a common function, or a class, rather than being duplicated throughout the program. Copy and pasting may be slightly easier at first, but when you consider the case where there is a bug in that section of code, which you’ve now duplicated in several places, you now have to hunt down all occurrences of said code, and then correct the bug in several places, rather than simply making the correction in one place.

As far as learning there isn’t really anything wrong with starting off using copy and paste coding. You’re generally going to find that at least starting out you’re not going to be duplicating hoards of code across your program(s), and you still get plenty of experience piecing things together.

The other major issue though, aside from attitude, is when we as programmers use copy and paste coding, or even functions – as in the case of jQuery – to avoid understanding how the program, or more severely the language is performing a task. If you never stop to consider what the code your using is actually doing, and instead just take it for granted, and assume you know what it does, you can never safely reason that your program works correctly for all cases, and thus can’t guarantee your invariants – which in layman’s terms essentially means that you can’t guarantee that what you assume to be true, actually is true (ex, variable a will always be between the integer values of 1 and 10). Now, in a well designed library/API the case with functions is minimized, as these should be well documented, which is yet another reason why it’s less preferable to copy and paste code – Bukkit is an example of a very poor case for an API.

EDIT: Edited to add clarity.

3 Likes