IWETHEY v. 0.3.0 | TODO
1,095 registered users | 1 active user | 0 LpH | Statistics
Login | Create New User
IWETHEY Banner

Welcome to IWETHEY!

New Beg to disagree...
Coding is best when solitary.
Programming, the design and development of the interfaces and data structures, works best when shared among a competent team. There has to be agreement as to how things get done with a minimum of compromise*. Once everybody knows what is to be done, go whereever you want and do it. Preferably alone...


*Compromise guarantees that nobody gets exactly what they want.
New With one minor difference in my case
I'd like to get my students used to working with other programmers, since in real life you may code on your own but you're usually part of a team.

Also I'd like to reduce the 'fear factor' of staring at a blank text editor window wondering where to begin.

Tom Sinclair

"Man, I love it when the complete absence of a plan comes together."
- [link|http://radio.weblogs.com/0104634/|Ernie the Attorney]
New Where to begin?
Much of programming is just mechanics of various idioms - so teach them idioms.

Plus - good programmers are likely to be self-motivated. If you give them touchy-feely instruction they will resent it and more, they will see right through the BS. I always taught for the best students and hoped they'd pull the rest up a level - and it worked.
-drl
New Details?
What's your approach for newbies?

What kind of academic setting was this?

Tom Sinclair

"Man, I love it when the complete absence of a plan comes together."
- [link|http://radio.weblogs.com/0104634/|Ernie the Attorney]
New Re: Details?
I taught calculus and linear algebra to 1st and 2nd year engineering students at Ga. Tech - that's how I paid for school :) Because everyone had to take core math classes at a non-trivial level, the sections were huge - a 5 hour class consisted of a professor lecturing 3 hrs a week to 200 or so students, while 5 or so teaching assistants would conduct the other 2 hrs as problem solving, test discussion etc. Since what we did was more or less up to us as long as we covered the appropriate sections of the book, I used at least half the time explaining the ideas in practical terms and illustrating with zillions of examples, particularly from physics which gave them a head start on the core physics courses to come the next year. I made them do hundreds of problems which made a lot of extra work for me, but it was well worth it because my students were *good*. We almost always topped the list of TA sections. I never coddled them but my door was always open. I explicitly used Feynman's advice to aim at the best students - when you do this a weird "symbiosis" takes over, the mental climate of the class gets more charged, and the middle students do better - so the main things were lots of mechanical work - idioms - practical explanations, and aiming at the top students.

In the context of programming - if it's a beginning class then what they most need to master is the mechanics of making programs - understanding what a compiler does, what a linker does, generalities of machine architecture etc. Then throw algorithms at them and have them implement them in the language of choice. If they are comp-sci majors they can handle C as a first language - like cranking out multiple integrals and eigenvectors, the very process of working with C will provide a firm basis for higher level work. "Pair programming", "XP" and all that BS at an early stage sounds too much like "new math". If you had time to prepare (this can't be overstressed in teaching - preparation is everything) you could work out a step by step program for writing a complete, non-trivial application, say, a Rolodex, a comp-sci calculator, etc.

In short - in the early stages, play God, be God, live God. They want to be instructed. The NEED to be instructed.
-drl
New Good points, thanks
I'm not trying to teach XP at this point, just brainstorming about new ways to approach an introduction to programming.

Westwood is not a traditional college, but a technical/vocational school that offers four year degrees as well as associate certificates. Therefore, our student demographic consists mainly of folks who would not do well in a traditional university setting. Therefore, while we certainly use most of the usual teaching techniques, we also try to think about creative ways to present the material to our students.

So, we keep lecturing to a minimum, hands-on practice to a maximum. The reason I was thinking about pairing students up was two-fold:
- Our class sizes are usually fairly small, from 9 to twenty students, so the team work would be manageable from my perspective.
- One of the common issues we face is where students get stuck right at the beginning, either with little idea how to proceed or so anxious that the code they write or algorithms they design won't be 'perfect' the first time out of the gate that they get incredibly frustrated. (We've occasionally had one or two students burst into tears when the compilers reported errors in their code.)

My thought was that pairing them up would take some of the pressure off them as individuals and create a situation where each member could encourage and motivate the other.

But like I said, it was just a thought. I'm not married to it.

-Tom Sinclair

"Man, I love it when the complete absence of a plan comes together."
- [link|http://radio.weblogs.com/0104634/|Ernie the Attorney]
New How about teaching them how to template?
I rarely start a new program from absolute scratch. Instead, I have a "template" which is the bare bones of a working program which I copy and then proceed to modify. I found this very necessary when writing programs for Windows 3, as there was maybe 150 lines of overhead that every program had.

Wade.

Is it enough to love
Is it enough to breathe
Somebody rip my heart out
And leave me here to bleed
 
Is it enough to die
Somebody save my life
I'd rather be Anything but Ordinary
Please

-- "Anything but Ordinary" by Avril Lavigne.

New Good idea
We'll be using Visual C++ 6 in class so we'll be starting with a built-in template but it's a useful skill nonetheless.

It also helps you get past the "blank screen" syndrome if you can start writing some things right away.
Tom Sinclair

"Man, I love it when the complete absence of a plan comes together."
- [link|http://radio.weblogs.com/0104634/|Ernie the Attorney]
New Ok, to extend my point
I think that it may do your students some good to distinguish between the formative and executive phases of building a program.

I would consider the formative phase the part where you figure out what the program is supposed to do, how it is supposed to do it, and what tradeoffs there are to play with.
This generally exposes the hardware constraints, the major functional elements to be dealt with, and the interfaces between them.

In my experience, this is the phase that is generally shared between members of the group. It may be that there is just a driver guy, a firmware guy, and an app guy, so there are clear boundaries. Even in this case, each guy should understand how the interfaces work at least a level down on the other side of "his" interface. For example, the driver guy should understand at least one level deep how the firmware and the app work as it connects to the driver. This, I think, is harder for many to share because it is two minds viewing the same problem differently. It is a concept that is probably worth getting across to the students.

The coding or executive aspect is easier to show, but is really the lesser part of the actual program. Some will be more verbose than others. Some will be prodigal with resources. Some will degrade performance to save resources. You can lead by example and demonstrate good coding practices, but they will learn in real world mode by doing maintenance and enhancements of existing programs. That's where you learn idiom and technique. One section of code works well but needs to be extended to do something else; you learn what makes this good code. Another section of code really sucks and has to be replaced; you learn what makes it bad code. This is pretty much the way I learned. In the end though, coding is just something you do the way you like to do it.

To my mind, the classroom exercises are simply to teach basic technique and give experience with the tools. The rest comes as you grow. You have to be able to learn and adapt or your're just not going to make it. Which borders on tautology.

Apologies for rambling on,

Hugh

New My thoughts as well
Tom Sinclair

"Man, I love it when the complete absence of a plan comes together."
- [link|http://radio.weblogs.com/0104634/|Ernie the Attorney]
New Consider it as parallel processing
You can repeat the activity to learn (code something twice, accuiring experience with time) or you can have another person doing it in parallel to you, so you benefit from his/her mistakes.
--

OK, George W. is deceptive to be sure. Dissembling, too. And let's not forget deceitful. He is lacking veracity and frankness, and void of sooth, though seemingly sincere in his proclivity for pretense. But he did not lie.
[link|http://www.jointhebushwhackers.com/not_a_liar.cfm|Brian Wimer]
New That was my thought as well
Tom Sinclair

"Man, I love it when the complete absence of a plan comes together."
- [link|http://radio.weblogs.com/0104634/|Ernie the Attorney]
     Pair programming for coding newbies? - (tjsinclair) - (27)
         Could be interesting. - (static) - (4)
             Good points - (tjsinclair) - (3)
                 Like Alex says below - (drewk) - (1)
                     Got it - (tjsinclair)
                 Separation of thinking and typing. - (static)
         I found PP a skill that's hard for me. - (Arkadiy) - (2)
             Bingo. - (a6l6e6x)
             Agreed - (tjsinclair)
         Re: Pair programming for coding newbies? - (JimWeirich) - (1)
             They'll be next to each other - (tjsinclair)
         Another idiotic software idea - (deSitter) - (16)
             Beg to disagree... - (hnick) - (11)
                 With one minor difference in my case - (tjsinclair) - (8)
                     Where to begin? - (deSitter) - (5)
                         Details? - (tjsinclair) - (4)
                             Re: Details? - (deSitter) - (3)
                                 Good points, thanks - (tjsinclair) - (2)
                                     How about teaching them how to template? - (static) - (1)
                                         Good idea - (tjsinclair)
                     Ok, to extend my point - (hnick) - (1)
                         My thoughts as well -NT - (tjsinclair)
                 Consider it as parallel processing - (Arkadiy) - (1)
                     That was my thought as well -NT - (tjsinclair)
             Re: Another idiotic software idea - (JimWeirich) - (3)
                 Re: Another idiotic software idea - (deSitter)
                 Speed and pair programming. - (static)
                 Re: Another idiotic software idea - (neelk)

*sniff*
64 ms