219 karma · joined June 23, 2008
#1: Yeah, you'd think a visible sidebar with Applications visible would make sense. I've seen some of these that have an alias (shortcut) for Applications displayed in the folder, though. The non-obvious workaround I use is to press Command-N to get a new Finder window with a sidebar.
#2: Again, Finder. One possibility to recommend--have a Downloads window open in your browser. Then, even if the Downloads window for Finder hides itself, a visible connection can be made to the new file. Double-click in the Downloads window or, as I prefer, right-click=>Show in Finder.
I ignore the bounce from Downloads on the dock, and just treat it as a visual indicator of download completion, not an inducement to click like a normal bounce.
Plus, setting the cut-off at 1000 seems more of a "will not" than "can not".
Personally, I refer my students to the Khan Academy videos in class as well as other online resources. They don't much for many students, but for others they make the subject matter click.
IMO they're a boon, as are the other online resources as well as abebooks and Powells where great textbooks from the past are available for less than lunch money as alternate resources.
I also remember having to break out the oscilloscope every time I played F-15 Strike Eagle and Psi-5 Trading Company to re-align the disk head. Until a friend gave me cracked copies, which allowed me to simply play the games. (By that time I had purchased two copies of Psi-5, after the first disk refused to recognise itself as a valid copy!)
Worst copy protection I ever encountered, until Lotus 123 came along.
It's a 1.4cm full color LCD display. It needs an NTSC composite signal.
Plus, there are presumptions in some of the answers that'll push you elsewhere than where you might really be.
But hey, still a pretty good quiz for the internet. ;)
I take on "new" on day 2, when I cover variables.
And static gets revisited several times. I have to be brief with the first class, the main point is that it serves a function, it's not just noise. When we build a class that we use from another class (third or fourth lesson) we use a class method initially, then a non-static method, and get a chance to see the differences in action. This sets us up for static fields in the following class.
Then we talk about how static members relate to classes vs. instantiated objects. Often someone's already encountered the reference from static context problem, so that comes up as an example in the discussion.
Later we go back and look at Hello, World with "new eyes."
At these students' ages a lot of the learning needs to be experience rather than theory.
I teach static from a general standpoint of stating belonging to the class rather than an object of that class. For didactic purposes, sometimes you phrase what-ifs in odd ways to get the point across.
Still, wrong on every claim? How many main()s do you put in your classes? Do you leave static out of your main() signature without getting an error in compilation?
I appreciate corrections, but can we avoid hyperbole?
As to the HTML, if I'd used the bare header tags with text the counter argument would be that I'm not teaching proper HTML.
Plus, brevity masquerading as simplicity is not the purpose of the lesson. The point that HTML is seldom treated as too complex for beginners is the real point here. Yet it gets pretty complex pretty quickly. The students handle it.
I spend more time going over HN and YC with my high school students. I don't have time to teach them how to do their own start-up in class. But I want them to be exposed to the idea, and know some places to go for more info if they take to the idea, want to learn why I've ruined their life by teaching them Java, or whatever. :)
You're missing the point of the question. I don't ask them to compare complexity against other languages they don't know. They were asked whether this was too complex for the class, judging against other subjects we've covered.
Some of my lessons have been too much for them. They've let me know. Others have moved too slowly, or not given them enough credit for being able to take new things on, they've let me know that, too. That evaluation is part of the class, we do it all the time. I experiment with the class, and they enjoy that since they know their feedback is part of what builds the class.
Rather, it appears you're inferring things that you'd like to infer about the class that support your feelings.
As to python, we'll be doing python in May for a short while, as well as C and ruby. And we will be rating each. We'll be re-implementing some things that we implement in Java in those other languages as a way of giving them a test drive, trying out not just the syntactic differences but the differences in approach to solving problems with the different languages. We'll also revisit LOGO (but not LISP, I've gotten clear messages from my students in the past that they don't find that productive to cover, though they appreciate me taking the time to describe it after we've done some LISP-ish things in LOGO.)
You also seem to think I teach Java as the be-all and end-all language. And that I presume it will be the only language they ever learn. In fact, I add a lot of humor to the class by poking fun at Java's problems (you know that humor helps learning, right?) While we spend the most class time with Java of any language (though we just started today), we've had lessons using assembly language, machine language, BASIC, and LOGO already this year, plus an extensive section using HTML. After we finish the section using Java, we'll add more languages as I said above.
OK, so you tell me, what is the hot language of 2019? I'm teaching learning processes, so that my students can learn whatever languages they want. I'm starting a fire under them so that they have enough of an interest to bother.
I am very serious about this. I teach these classes because I want to. I'm not filling time or filling checklists on an academic record. These aren't programming classes. These are general computer classes, which I'm trying to use to get students interested in taking programming classes when they move on to college, so I think you're misjudging my scope and the nature of the students.
The students in my class get good grades whether they agree with me or not. If they go along to get along, it will not get them a good grade, more likely the opposite. I don't need their agreement to stroke my ego. I've got work I've done in outer space as well as in a large fraction of the world's aircraft. I don't teach for egoboo, I teach because I want these kids to learn that they don't have to sit in front of a game console running a controller because that's all they're allowed to access in this world. I want them to learn to take things apart, turn them around, and build their own things. I don't like them being trapped outside the package, stuck behind the UI, cut off from tools.
The programming I teach isn't taught to learn how to create elegant algorithms or to discuss programming paradigms. It's taught as a practical method for putting tools in their hands and helping them make the transition from consumer to creator.
Focusing too heavily on what specific language is used at this level is unproductive. So long as the language used meets some basic constraints that many languages will meet.
I put on some additional constraints. For example, I want to teach a language that's used in the real world, not a packaged educational language licensed with a boxed learning program. I can't control what systems the students have at home. I want a language that works the same way at home as at school. I also want standard graphics and sound libraries since pictures and sounds motivate students as well as being useful to illustrate what's happening with data in programs. I have a number of constraints.
At this point, Java does the job. What I addressed was the assertion that Java is too complex to use in teaching beginners. Not whether there is no simpler language for expressing "Hello, world!"
Your estimate of how long it takes to cover anything, with meaning, in class is pretty optimistic. And as to what they need to know, and why they need to know it, I think you need to approach things from a higher perspective. The point here is not to simply teach mechanics of a particular language. What the computer is up to, why, and what the student can do to control it is the point, not how quickly we can get a few characters on the screen.
Part of why the class takes so long to cover a HelloWorld program is that I explain each item, provide counter-examples (wrong class name, wrong signatures for main(), multiple main()s, adding other classes and methods to the file, etc. And seeing the error messages that come with different and interpreting them. We're not just copying a canned program off the board into a text editor (even at that, how good a transcriptionist do you think a 13 year old is? They can find _amazing_ new errors in 10 PRINT "HELLO".)
And yeah, there's still a lot of black magic. But I contain it, identify it, and cut away at it through the course of the class. Coming back repeatedly to the same subjects as I do so turns out to be a pretty effective way of fixing concepts in students' minds.
I appreciate that you might do it differently. Python was among the languages I considered for the class, I've blogged my reasons for going to Java. I revisit my choice of language after each school year. Each year so far, I've come back to Java as best serving the purposes of my classes from among the choices I have, warts and all it does the job.
I do expose the students to python, we go out to python.org and spend time on the online interpreter. We also try out ruby and C using online versions.
The sorts of expansions on the basic lesson that you describe are things that I already do. It just doesn't happen in the same class period as the HelloWorld program. There isn't time, and even if I did add more to one period, it then wouldn't stick, at least not in the class format I've got to use.
I also think you have some misapprehensions about how much material you can throw at a classroom full of kids using balky old computers. No matter what language I use, there's a limit to what you can reasonably expect to cover while still providing time for students to go through the mechanical parts of the exercise (typing and running the program, interpreting the results).
So far I haven't found Java to be an obstacle in that regard. And Java allows me to do what I want in class.
You also want to know why I use the tools I do in class. That's a whole different discussion. But the short answer is that we use the tools we already know, to keep the number of new things to a minimum at any one time. We'll be introducing an IDE later (Greenfoot.) I'll be using its facilities to teach object oriented concepts more fully than I can with text, as well. Plus, once we've gotten used to using it as an IDE, we'll be rolling in the elements of the Greenfoot framework. That will give us graphics and sound, which we'll use to get immediate feedback on the operation of our code.
I discuss my use of the command line when introducing programming in another of my posts. The purpose of the class is to know the system as well as they can from as many angles as they can, among them programming. This isn't a programming class, it's a general computers class that I've decided to expand beyond "keyboarding" and MS Office boredom.
I'll also cut and paste into a plain text editor, adjust font, etc. to suit, then read that offline.