tag:blogger.com,1999:blog-3197502880075531197.post5471787407101203352..comments2017-01-30T05:50:28.189-08:00Comments on Digital Light Cycle: It's time to declare war on "Hello, World"Quorralynehttp://www.blogger.com/profile/11917784529888102119noreply@blogger.comBlogger6125tag:blogger.com,1999:blog-3197502880075531197.post-175950290223450372016-07-01T09:07:04.150-07:002016-07-01T09:07:04.150-07:00I love the thought but I've had the opposite e...I love the thought but I've had the opposite experience. <br /><br />I've taught:<br /><br />1. Beginning programming to kids and adults with no experience programming<br />2. New languages and approaches to experienced developers<br />3. Formal classes for programmers with 2-20 years experience programming including new languages or styles (object-oriented from procedural or functional from imperative)<br /><br />In classroom situations, I've always had better luck with "classroom" exercises. Building to production guidelines has gotten in the way of teaching.<br /><br />I did try to write a book for kids that was test first. I based the narrative on the style used in the Mythbusters. Fun exercise for me as the author but even those tests were far more coarse than those I use in production code.<br /><br />I have had good results with using code reviews to teach. Then you are looking at production code (and hopefully tests). I talked about it at Omaha Bar Camp: http://www.withaguide.com/2014/10/pride-and-shame-code-review-format-for.html<br /><br />But, I'd be interested in your findings as you teach using SOLID principles and the like!<br />Davidhttps://www.blogger.com/profile/14110604812109593844noreply@blogger.comtag:blogger.com,1999:blog-3197502880075531197.post-66101000913685490042016-06-30T09:56:31.553-07:002016-06-30T09:56:31.553-07:00Appreciate your comment, Jeremy.
We can make bett...Appreciate your comment, Jeremy.<br /><br />We can make better programmers sooner if we just reinforce basic clean coding standards when we do tutorials. The takeaway from the instruction will be more meaningful and readily adaptable to a real project. You can do that with sticking to at least breaking out your methods properly, handling some basic dependency injection, etc. That is fundamental to even front end developers. There is nothing wrong with discussing which libraries to include, and create a super quick interface for the methods you are trying to access. It allows a more linear train of thought that the developer will go through when applying this new functionality to their projects.<br /><br />I believe very much in the apprentice/journeyman/master approach. However, our industry is known for being more independent in our learning. We become the masters by publishing our articles. You may never know the apprentices that will learn from you, but you can affect what they see.Quorralynehttps://www.blogger.com/profile/11917784529888102119noreply@blogger.comtag:blogger.com,1999:blog-3197502880075531197.post-47070377837421231952016-06-30T09:50:27.395-07:002016-06-30T09:50:27.395-07:00Thanks for your input on this.
I am not necessari...Thanks for your input on this.<br /><br />I am not necessarily looking for beginners to create complex programs. I am looking for us to teach good habits wherever we can, because for the first few years most developers copy/paste code solutions. It's just the way it goes. You don't have to do away with exercises, but you should make them more relatable to a real life scenario with proper naming conventions, single responsibility principles, etc - and through repetition, new developers will become comfortable with these practices. Then teaching them about design patterns will be easy - because they've already been doing them all along. It honestly doesn't need to be super robust or complicated. I am an advocate for simplicity. But it should be demonstrated CORRECTLY. Clean code first. You educate this way and it will become intuitive for the student at a much earlier phase than having to wipe their brain of all of the incorrect coding they've been doing because that is how they've been shown how to do it.Quorralynehttps://www.blogger.com/profile/11917784529888102119noreply@blogger.comtag:blogger.com,1999:blog-3197502880075531197.post-33009280492129791842016-06-30T09:25:27.346-07:002016-06-30T09:25:27.346-07:00The main issue is gauging your audience, for someo...The main issue is gauging your audience, for someone who has never seen code before a simple hello world program is a good place to start. For an experienced developer who's written millions of lines of code it's not as useful. Anonymoushttps://www.blogger.com/profile/08768008782763382872noreply@blogger.comtag:blogger.com,1999:blog-3197502880075531197.post-63044104649862955042016-06-30T09:15:59.623-07:002016-06-30T09:15:59.623-07:00For a beginning programmer in C++ learning how to ...For a beginning programmer in C++ learning how to include libraries was painful at best. Making sure that you had stdio.h and stream.h in order to output cout << "Hello World" << endl; would be an appropriate lesson for a beginning programmer. As well many older languages had limitations on the number of characters allowed in a command string. The real world at the time was getting a console output to display data and using cin >> variablestring(n); to get your data. These are fundamental concepts (outputting a string and gathering data) that have to be understood before you get into more complex methodologies. The biggest issue is that instead of expanding on the basic hello world application many teachers drop it the next lesson and move on to something else.<br /><br />SML was notorious for short string commands and limited variables. Being a completely recursive language just outputting "Hello World!!!!!" was an exercise. <br /><br />Back in the good ol' days we didn't have this fancy object oriented programming. Most languages were linear in nature and took many constraints from Assembly just due to constraints on the system. If you are learning ADA or Fortran you didn't call a bunch of libraries and extra functions that were already there. <br /><br />The other facet of this is determining the strengths and weaknesses of the people you are teaching. Personally I hate programming because I find that most instructors assume that I know what they know. I can talk to you about networks till you are bored to death (and have done so) but when it comes to programming sometimes you developers don't make sense. <br /><br />There is also a psychological basis behind the simple program. "OMG IT COMPILES!!!!" is a joke just because the feeling of accomplishment after getting a piece of code written has always been well received. In your instance if a beginning developer tried to make a complex program without the understanding of the constraints they will be frustrated by the amount of work and issues to try to get it working.Anonymoushttps://www.blogger.com/profile/08768008782763382872noreply@blogger.comtag:blogger.com,1999:blog-3197502880075531197.post-44958697894443103532016-06-29T16:25:35.421-07:002016-06-29T16:25:35.421-07:00I've struggled with this as both a teacher and...I've struggled with this as both a teacher and a learner. As a learner, sometimes I need "Hello World" -- particularly if there is an environment I'm unfamiliar with (wait, what's Yeoman? How do I get that?).<br /><br />As a teacher (with limited time), I could show a "real" application. The problem is that it's too easy to get lost in the convolutions of the business requirements when we really want to concentrate on how to learn one particular technical concept. This is particularly a problem when looking at architectural techniques like dependency injection.<br /><br />I'm not always happy with the approach for the exact reasons you mention, but I've found that it's effective with a particular group of people. Sometimes we need to learn to walk before we can run.<br /><br />I completely agree that we should not be teaching bad practices. I'm not sure what the right answer is. Perhaps we should ditch tutorials and head toward apprenticeships. Working side-by-side with someone is an effective way to see how the real world works.<br />-JeremyJeremyhttps://www.blogger.com/profile/06749690234470413216noreply@blogger.com