Posts tagged ‘Java’
Philip Guo did an analysis of what top CS departments teach in their introductory courses (see link below) and found that Python now tops Java. MATLAB tops C and C++ (though not if these are combined), and Scheme and Scratch are near the bottom.
It’s reasonable to say that an AP will only succeed (e.g., students will take it) if they can get credit or placement for the exam in college or university. Typically, colleges and universities give credit for courses that are currently taught. Will we see colleges and universities start teaching CS Principles? Will they give credit for a course that they don’t teach? For languages they don’t teach? Maybe we’ll see more of an influx of CSP languages and courses into colleges and universities. I predict that we won’t.
Scratch is the only visual, blocks-based language that made this list. It’s one of the most popular languages of this genre, which include related projects such as Alice, App Inventor, Etoys, Kodu, StarLogo, and TouchDevelop. The creators of these sorts of languages focus mostly on K-12 education, which might explain why they haven’t gotten as much adoption at the university level.
The punchline for computing education comes in the last 5 minutes, but the previous 27 minutes are well worth watching. Bret is critiquing the same mindset I was reporting on when I said that Lisp and Smalltalk are now dead in undergraduate computer science. “We don’t know what we’re doing” is the most important phrase for computer scientists to say to ourselves and to our students. I enjoy the flash and style of Bret’s previous videos, but I love the message of this video. The details (with copious references) can be found on his website.
Neil Brown announced this at ICER last week. The new version of BlueJ now anonymously logs user actions onto a server for analysis by researchers. I just signed up to get access to the site. I have a couple of ideas for research projects using these data. It’s pretty exciting: Big data comes to computing education research!
We have begun a data collection project, called Blackbox, to record the actions of BlueJ users. We’re inviting all the BlueJ users (with the latest version, 3.1.0, onwards) to take part. About 2 months in to the project, we already have 25,000 users who have agreed to take part, with 1,000 sending us data each day. Based on current estimates, I expect that in November 2013 we should see around 5,000 users sending data each day, with a total of over 100,000 users. Rather than hoarding the data, we are making this data available to other computing education researchers for use in their own research, so that we can all benefit from this project.
From Leigh Ann Sudol-DeLyser (firstname.lastname@example.org):
I am looking for faculty who are able to help me find subjects for my final study of my PhD thesis. I have built an online pedagogical IDE which uses problem knowledge to give students feedback about algorithmic components as they are writing code for simple array algorithms.
I am looking for faculty who are willing to assign a 5-problem sequence as a part of a homework assignment or final exam review in a CS1 course in Java. The 5 problems consist of writing code to find the sum of an array of integers, the maximum number in an array of integers, counting the number of values in a range of integers, and completing an indexOf method for an array of integers. These problems are similar to ones you might find in a system like CodingBat where students are given a method header and asked to implement code for the interior of a single method.
If you are willing to help me graduate (please!) send me your name, the university you teach at, and the number of students in your class and I will contact you with login codes for the students and further directions. I am looking for classes of all sizes from all types of colleges and universities. Please forward to your CS1 instructors where applicable.
Earlier this year, I talked about Seymour Papert’s encouragement to challenge yourself as a learner, in order to gain insight into learning and teaching. I used my first-time experiences working on a play as an example.
I was in my first choir for a only year when our first child was born. I was 28 when I first started trying to figure out if I was a bass or tenor (and even learn what those terms meant). Three children and 20 years later, our children can get themselves to and from church on their own. In September, I again joined our church choir. I am pretty close to a complete novice–I have hardly even had to read a bass clef in the last two decades.
Singing in the choir has the most unwritten, folklore knowledge of any activity I’ve ever been involved with. We will be singing something, and I can tell that what we sang was not what was in the music. “Oh, yeah. We do it differently,” someone will explain. Everyone just remembers so many pieces and how this choir sings them. Sometimes we are given pieces like the one pictured above. It’s just words with chords and some hand-written notes on the photocopy. We sing in harmony for this (I sing bass). As the choir director says when he hands out pieces like this, “You all know this one.” And on average, he’s right. My wife has been singing in the choir for 13 years now, and that’s about average. People measure their time in this choir in decades. The harmony for songs like this were worked out years and years ago, and just about everyone does know it. There are few new people each year — “new” includes even those 3 years in. (Puts the “long” four years of undergraduate in new perspective for me.) The choir does help the newcomers. One of the most senior bass singers gives me hand gestures to help me figure out when next phrase is going up or down in pitch. But the gap between “novice+help” and “average” is still enormous.
Lave and Wenger in their book “Situated Learning” talk about learning situations like these. The choir is a community of practice. There are people who are central to the practice, and there are novices like me. There is a learning path that leads novices into the center.
The choir is an unusual community of practice in that physical positioning in the choir is the opposite of position with respect to the community. The newbies (like me) are put in the center of our section. That helps us to hear where we need to be when singing. The more experienced people are on the outside. The most experienced person in the choir, who may also be the eldest, tends to sit on the sidelines, rather than stand with the rest of the choir. He nails every note, with perfect pitch and timing.
Being a novice in the choir is enormous cognitive overload. As we sing each piece, I am reading the music (which I’m not too good at) to figure out what I’m singing and where we’re going. I am watching the conductor to make sure that my timing is right and matches everyone else. I am listening intently to the others in my section to check my pitch (especially important for when there is no music!). Most choir members have sung these pieces for ages and have memorized their phrasing, so they really just watch the director to get synchronized.
When the director introduces a new piece of music with, “Now this one has some tricky parts,” I groan to myself. It’s “tricky” for the average choir members — those who read the music and who have lots of experience. It’s “tricky” for those with literacy and fluency. For me, still struggling with the notation, it takes me awhile to get each piece, to understand how our harmony will blend with the other parts.
I think often about my students learning Java while I am in choir. In my class, I introduce “tricky” ideas like walking a tree or network, both iteratively and recursively, and they are still struggling with type declarations and public static void main. I noticed last year that many of my students’ questions were answered by me just helping them use the right language to ask their question correctly. How hard it must be for them to listen to me in lecture, read the programs we’re studying, and still try to get the “tricky” big picture of operations over dynamic data structures–when they still struggle with what the words mean in the programs.
Unlike working on the play, singing in the choir doesn’t take an enormous time investment — we rehearse for two hours one night, and an hour before mass. I’m having a lot of fun, and hope to stick with it long enough to move out of the newbie class. What’s motivating me to stick with it is enjoyment of the music and of becoming part of the community. There’s another good lesson for computer science classes looking to improve retention. Retention is about enjoying the content and enjoying the community you’re joining.
We’re re-examining/reconstructing our reading list for the qualifying examination for our PhD in Human-Centered Computing. One of the papers I’ve had the chance to read (and re-read — it’s a dense piece) is by James Greeno, Allan Collins, and Lauren Resnick, three top-notch education researchers.
Greeno, J., Collins, A., & Resnick, L. (1996) ‘Cognition and learning,’ in Berliner, D. & Calfee, R. (eds.), Handbook of Educational Psychology, Macmillan, New York: 15-46.
They contrast three views of education, which are paradigm shifts in the Kuhnian sense. It’s not that one is better than the other. One looks at different things than the other, creates different theory, leads to predictions about entirely different things. The first was behaviorist/empiricist — learning was observed responses to stimuli. Behaviorism explains a lot, and can lead to strong predictions. The second is the cognitive/rationalist view, the view of learning as have knowledge structures in the brain. This was the view started by Piaget, and it has had the greatest impact on schools. The third view is the “situative/pragmatist-sociohistoric.”
A third perspective on knowing focuses on the way knowledge is distributed in the world among individuals, the tools, artifacts, and books that they use, and the communities and practices in which they participate. The situative view of knowing, involving attunements to constraints and affordances of activity systems, suggests a fundamental change in the way that instructional tasks are analyzed. The change is away from analyses of component subtasks to analyses of the regularities of successful activity…When knowing is viewed as practices of communities and abilities of individuals to participate in those practices, then learning is the strengthening of those practices and participatory abilities.
This is the perspective described in Lave & Wenger’s classic Situated learning: Legitimate peripheral participation (also on our HCC reading list). The situative view is most powerful in describing learning in naturalistic settings, from apprenticeship to life-long learning (e.g., how professionals get better at what they do). An important difference between the situative and the cognitive is in defining “what’s worth knowing.” The situative is focused on learning how to participate in a community of practice, to be part of the discourse and activities of a group of people who work towards similar sets of goals in similar ways.
Computer science education is feeling the tension between the cognitive and the situative today. I see it in the discussion about Greenfoot. We CS educators talk about our foundational concepts, and we talk about learning the tools of our community. We say that “We don’t teach languages, we teach concepts,” but then we talk about our courses as “the C course” and “the Java course.” Once, the community of practice in computing was mathematics and electrical engineering. That’s what people knew and talked about, and that’s what we now call our foundational concepts. Today, there is a huge community of computing professionals and scientists with lots of activities and tools. They have a practice and an on-going discussion. Knowing the common knowledge and practices in use in computing today is not vocational — it’s about being able to communicate with others in the practice. Java is the the most common language in the discourse of computing education today. No computer science undergraduate is educated without knowing it. This fact has nothing to do with what languages best make evident the concepts of computing. This has everything to do with being part of a community.
What we teach in our Media Computation data structures book when we teach about simulations in Java is absolutely harder than when I taught similar content in Squeak. But it’s harder, in part, because we’re dealing with how to make this work around the strong typing in Java, and we’re making sure that students understand interfaces. Those are worth knowing, too. Strong typing and interfaces are part of what the community of practice of computing values and talks about today. Students are not well-educated if they cannot be part of that conversation (even if only to say that they don’t like the existing practices!).
As a computing educator, I have a responsibility to stay informed about the activities of computing — in part, that’s what Stroustrup is arguing when he says that professors ought to be building software. I have a whole collection of recent computing books on my shelf that I’m still working through. There are books on Ruby and Lua, Django and script.acul.ous. Are these the right ones? I don’t know. They’re my best guess, and once I read up on them, I’ll have a better sense of whether I think they’re worthwhile. I should be able to talk about the best ideas in tools used by practitioners in my community, the community that I work in and that my students will work in–and importantly, critique them. Part of my job, in the Lave & Wenger sense, is to exemplify the center of the community of practice for my students. To do that, I have to be able to speak the language in that community of practice.
I’m not arguing that Java is a great language, and I’ll continue arguing that Java is a poor beginner’s language. But our students do need to know Java, because Java exemplifies the current ideas and practice of our community. Our students are not well-educated if they can’t participate in that discourse. That’s why it is important for us as computing educators to learn how to teach Java and how to motivate the learning of Java. Not teaching them Java is not an option. Not teaching them Java leaves them uneducated. Not teaching Java only means that our students will be at a disadvantage. Our students don’t win because we refuse to play the game.
An argument from the cognitive perspective (the one I grew up in) is that students who have a strong set of concepts, who understand the core of their field well, can easily teach themselves the current tools and practices of the community. That may be true. What we know about transfer suggests that it’s true. I want to believe that’s true, but I realize that I’m crossing paradigms. I do recognize that the knowledge of the language and tools don’t come for free. Yes, Ruby is like Smalltalk — but just because I know Smalltalk, doesn’t imply that I know Ruby. Just because I know English and Latin and French, doesn’t mean that I know Spanish. It might be easier for me to learn a related language. But I still have to do the work to learn it.
All the tools and languages in common practice in computing today have important ideas embedded in them from some smart people — and maybe some less-important ideas from some not-so-smart people. But they are the ideas that our community is talking about. I’m not a fan of strong typing, but I realize that my students need to know what it’s about, because there are reasons why it’s part of our dialogue today. E.D. Hirsch writes books about “cultural literacy” and has made up long lists of the vocabulary that children need to know at various ages. One can critique Hirsch’s approach for being uninformed by the cognitive. Students need to know the concepts and have the knowledge structures to think about these ideas appropriately, not just know the words. But a focus just on the concepts leaves one open to a reasonable situative criticism. Our students must also be able to talk to the practitioners in our community.
We absolutely need to create better computing education. Java is a poor beginner’s language. We have to continue to critique and develop our practices. Our students are going to join this community, and that involves not just having a set of powerful knowledge structures. It means knowing the language and common practices of this community. Java is important to learn for the situative learning goal. The goal of an education in computing is a set of concepts and the fluency in the languages and practices of the community.