 Video equipment rental costs paid for by peep code screencasts. Your first after lunch lightning session. My name is James McAfee and I am an Associate Professor of Computer Science at St. Edward's University. St. Edward's is a private liberal arts school in South Austin. We were founded by the same priests that founded Notre Dame, if you're not that familiar with our background. We have been ranked with the U.S. News and World Report and one of America's best colleges. And even though we are a liberal arts school, we're not a research one institution, we're not an engineering school, we do have a computer science program. And in fact, within our department, which is in the School of Natural Sciences, we have three degrees, a Bachelor of Science in Computer Science, which is a traditional CS core, and laboratory, experimental science, and more advanced mathematics than the other degrees that we have in our program. For example, linear algebra, a third calculus course, et cetera. We have a Bachelor of Arts in Computer Science. This strips away some of the advanced mathematics courses, the science requirements, and gives students freedom to mold a minor or some other type of interest that they may have in their education. And then there's this sort of, how do you describe it, fits, it's an odd thing, the B.A. in Computer Information Science. It's a Bachelor of Arts. It's similar to the Bachelor of Arts in Computer Science with two major differences. One, there's not the freedom to take, there is a prescribed set of business courses, and then there are a few alternate courses as opposed to in the traditional CS curriculum. The main one that we'll talk about is this course, Computer Science 3335, is the alternate to data structures. So our CS majors will take data structures, our CIS majors take this course. And this course to me is a strange, odd course, and, not coincidentally, no one really wanted to teach it. However, around 2003, I was the last one to say not me, so I became the one to teach it. The department chair at our time, though, made the mistake of saying, all right, if you teach it, you can really do what you want. And so you can see what part of the description of the course that I chose to highlight, and I picked up on that. So I thought, okay, we're going to do the data file systems, and we're going to talk about that. And I actually have a nice partnership with EMC, with material on RAID system, and things that are useful. But I also think that getting students to be hands-on in programming and using the machines is very important. And so, important to me as well, too, is that I don't want to have to deal with a lot of troubles. So that's why I chose Ruby. And in my Computer Science 3335 course, Data Storage Systems, the program assignments are around a theme of how do you deal with files, and a lot of them is going to be data files, and what kind of activity could you be doing in learning certain skills? Students in their first six hours of programming learn Java, primarily and for large reasons that universities have chosen Java is because the AP exam is in Java. I don't necessarily think it's a great reason, but it is the reason that it's there. The great thing is that in this course, I did not have to teach Ruby. I said, we're going to start using Ruby. And I gave pointers, the URL pointers to the resources, and let them go. Another thing was to simulate a prefix order for function calculator. They should know prefix order, and this was just to get them used to the syntax and just the environment and using it. And then working with strings, some word count, find or place, et cetera, and parsing an HTML document. So actually going through and looking for the elements that are the markup parts, the data parts, being able to identify, and so forth. As well as the spelling corrector, I called it, well it was, the Britney Spears assignment. Google has a page where they list all the various ways that Britney Spears has been misspelled. And so what I did is I gave them an assignment to write a regular expression that would catch all the misspellings, but not catch other things. So I created a file that had the Google file plus other words, and to see how close that their program came to picking out their file matching the Google misspelled Britney Spears words. And it varied wildly when they first started. Some were very correct in what letters and sequences, and some just said it starts with a B and ends with an S. So there's a range within that. And then I think this hands-on, and they're getting their feet wet and doing it as opposed to just lecturing about it, I think is very important. The sorted word frequency count in a large document, as you see it would grab paradise lost, all the volumes are in the public domain, so dealing with a large amount and how we can, and Ruby ran very well, it didn't take much time at all. It wasn't sluggish in going through that. And then cryptography, the students really, they enjoy the idea of cryptography as a concept. So doing some simple scissor ciphers, some general substitution, and some dictionary-based codes, using the tools in Ruby to be able to do that and to see how it just, you get your hands-on. And so Ruby served several purposes, you know, didn't cause me trouble as a teacher, and it also let the students enjoy and think about the problems and not the problems of the language. The language helped them to be able to work on their problems. My 10 minutes are running through. I thought about one thing I'd like to share with you, some challenges for the Ruby community that we in academia would appreciate. And one is to identify those applications where Ruby is the best choice. I don't know if you know in academia there's always this fight about what should be the first language. And I think it's actually a very fake argument, because to assume that a student should graduate with an undergraduate degree in computing and only know one language, hopefully people would agree that's very silly. I mean, you should know robust and know many things. So the point being, whatever language that university chooses first, what case are we making in upper division courses for what languages and tools should be used? So for the developing community telling us in academia, where is Ruby the best choice? And that really should come from you and be an organic conversation. And then also, and I'm always harping about this, and I have plenty of business cards for anybody that's interested in meeting with me, if you have opportunities for mentor and providing internships for our students, the good thing is you don't usually have to pay health benefits. So there's a lower cost for these type of workers. But there's also this developing the future mentality that I think we always need to work on and think about how are we going to nurture young talent and work through and the joy. And I've seen a lot of joy at this conference. A lot of people really enjoy what you do. Students need to see that. They need to see that there are people that are passionate, that work hard, but it's enjoyable. So that's me, and that's how to contact me. I think I have 60 seconds if there's any questions. The question is mentoring. Does it have to be face to face? No. We like internships, and we like to pay the students something, too. But mentoring can be and works very well. For example, identifying open source projects that have a component that can be done in thinking about what can be done in the framework of a semester's time. So instead of just open, think about what pieces and parts. How could you invite into chunks where a student could find and be accessible? That would help the academic community as well, too, greatly. What are the age groups of your students, on average? We're traditionally aged 18 to 22. Well, one thing I know with students, I've actually taught kids that were like from age 8 to 18. And if you let them sit in front of a computer for a while, they tend to start playing video games when you're not looking at them. So what I would do is tell them, well, guess what? You're going to write a video game. Imagine doing that in Ruby. It's a good motivation, but I think there's one more question, and then my time is up. I guess looking across the broader CS programs at the schools, what would you say the sort of composition of what languages and general larger industry technology trends are actually being taught? Not many. I mean, the academic is kind of resistant to change and slow to change. I think I've read it was like over 80% or Java is the first language. The next significant is going to be some type of functional language, either high school or scheme. And then it just matters in all kinds of what's going on. All right, thank you very much.