From ModernDinosaur: "One should be careful to extract what is useful from older concepts, and not dismiss anything "old" as useless. A craftsman does not abandon his/her manual screwdriver or hammer just because power ones are available in some cases they are still the best tool for certain jobs. That doesn't mean you should resist advancements either but be aware of software/hardware development history while being open to the new, look beyond hype and backlash to hype to choose the right solution for the task at hand." This is the way progress is made in the modern world. When new, better ways are found to do something, then new innovative ways to make that better way even better and to eventually become the "way the thing is done". After all one of the most important approaches used in programming is to "solve the problem" by discovering the "best solution". ---- ''What's an "old" concept? * Is a function an old concept? Yes it is. * Is addition an old concept? Yes it is. Why havent't they been abandoned? * Why don't they '''feel''' old? Because they've been integrated wholesale into every modern paradigm. * They haven't been left by the wayside for something slightly different.'' So let's look at what "you shouldn't abandon old concepts" really means for software. * It means that you shouldn't abandon concepts from deprecated paradigms just because the paradigms are deprecated. ** And here I strongly disagree. * You '''should''' abandon deprecated paradigms wholesale. And the reason why is very simple. It's a matter of pragmatism pure and simple. ** Human learning ability is finite. *** It isn't possible for a person to master every possible programming paradigm ever invented. *** But it is possible for one person to master several paradigms of programming, it is even quite beneficial to do so by mastering one paradigm, the most useful, and then go on to master others. ** It's best not to clutter this phase with concepts that detract from that paradigm and concepts that screw up learning. Especially concepts which are part of completely deprecated paradigms. ** This approach is also advocated by top CS schools, designed to introduce all major paradigms to students in a single course. *** See ConceptsTechniquesAndModelsOfComputerProgramming ---- '''Examples''' View One: People learning OOP shouldn't initially be concerned with functional concepts like continuations or referential transparency. They should be introduced once they've mastered OOP. Then come concepts from logic programming, from constraint programming, et cetera. And nowhere in the list do concepts from structured programming every show up. They're simply to be abandoned, regardless of value. View Two: Most disasters in today's OO practice come from people not being aware of simple concepts from structured programming. The most notorious being that encapsulation is not information hiding. ''Actually, I think most disasters in OO practice, come from procedural programmers, who think they're doing OO, because they used a class, and don't have a clue what OO really is.'' Said programmers are, in my experience, not good at information hiding or structured programming, either. ---- ''What people have to do is master one paradigm, the most useful, and then go on to master others...'' Selecting the "most useful" will be based on what paradigm one is successful in utilizing. Whether OOP or FP, unless you're a mathematician, then it might be constraint programming.'' ---- See also: MindOverhaulEconomics, MixingParadigms ---- CategoryComparisons CategoryHistory