Guo starts of by stating that most programming classes start off by requiring code to be written in one language. This is true in some courses where the course offering is specific to teaching that language like Java and usually is done at an early stage of learning. As a student progresses and grows into an knowledgeable programmer/developer any good college program will challenge the student to use multiple languages to complete assignments/projects or will often simply provide the user requirements and leave the student to their own devices to select the means to complete the task. Guo does also acknowledge this, but states that in the "real world" programmers/developers don't code but instead simply reuse code, so he believes it would be better to teach coding by reuse. After providing six steps (Forage, Tinker, Weld, Grow, Doubt, & Refactor) that he uses to complete coding projects, he provides some tips to instructors on how they can teach "real world" projects.
My Summary of Guo's Project Steps:
- FORAGE: Search the Web & reuse code, don't start from scratch, maybe you can get lucky and find documentation to reuse also.
- TINKER: Play with the found code to figure out how it works and what it part it won't do for you.
- WELD: Put the multiple snippets of found code together to create a new program
- GROW: "Hack up some hard-coded examples..with welded code"
- DOUBT: Don't reinvent the wheel, reuse to speed up time to production
- REFACTOR: Clean Up code and try to blend all parts into a smooth product that gets the job done
I think most experienced people teaching technology development courses will agree that you don't want to waste time redoing something that is already done (aka: reinventing the wheel), but one needs to know when it is better to change the wheel from a square to a circle. Plus reuse does save time if the person doing the reuse is experienced and able to understand what they are using. My Assembler instructor taught reuse in the late 1980's, so it isn't a new concept, but we also were expected to use logic methods of development. It is important that people understand and remember that everything on the Web is not safe to copy nor is it always legal to reuse it. For Guo's approach to work the student must have a strong working knowledge of several programming languages or at a minimum a strong background in logic and debugging fundamentals.
Back during my Dot.com developer days, we used to call people who got the job done by quickly pasting other code together without fully understanding the code "cut & paste programmers". I personally have spent hours cleaning up as this people who did this type of coding. Personally, I believe that accepting or promoting this type of development practices before someone is an experienced coder is why the U.S. has fallen so far behind in technology innovations. It is also a practice used by many companies in the U.S. to roll out updates, new product features, or new software faster but is also why we have have to get weekly patches from Microsoft, or flawed apps from Apple on the iPhone, why countries are able to easily hack into U.S. websites so easily, why we need things like bug squads and companies whose developers tell customers that their code is to complex to offer hot fixes.
I recently have been given the opportunity to help a new technologist who has only learned the cut & paste (reuse) method and in the same amount of time that he search & pieces together code that was never meant to work together only to find it is flawed, logically pseudocode or flow chart the program and code it, so I am not convinced novice reusing really promotes saving time. Additionally, I learned that younger developers simply read the user requirements and take off developing, which will add additional time to development because they don't have a clear understanding of what the user wants. To have this a developer needs to talk with the user and to make sure what is ask for is really what the user wants and to make sure the developers interruption is correct.
We do have many resources available today via the Web and students need to take advantage of this information. Students also need to know how to evaluate the quality of the information without wasting precise development time. Educators need to remember to slow down and teach core fundamentals to provide our future to have a strong foundation on to succeed. Not everyone is a Steve Jobs or a Bill Gates. Real world experiences can be given through project based assignments, authenticated learning approaches, and partnerships with local business.
Kids Can't Use Computers... And This Is Why It Should Worry You
Teaching Programming the Way It Works Outside the Classroom
Everyone should code video or http://www.code.org/
Teaching Computer Coding in K-12
Five Principles to Radically Transform How We Teach Computer Programming
Cracking the code: How to teach computer programming in schools
Teaching computing for the first time: learning to code and getting started