11

Preface

A few weeks back I asked in the chat whether other users had any experience preparing and teaching a class/lab on Mathematica as general programming and problem solving tool. I received but two messages about my post so I though I'd give it a try as a question here on meta instead.

Talks with other students and an interested professor at my university who himself is a Mathematica user led to the idea of teaching a Mathematica class/lab. At our university there has been a class for engineers that teaches Matlab for several years and thus most students have at least some proficiency with it. However come work on their thesis or some other hands-on seminar they tend to struggle at lot with sometimes trivial data-exploration tasks. I think Mathematica is a excellent tool in that regard that it makes exploration of data and models really easy and is currently underrepresented outside maths/physics.

I had a look at the new book from Stephen Wolfram available as free online version and the fast introduction for programmers and really liked them for teaching basic syntax and programming concepts in Mathematica that might be foreign to people only familiar with procedural programming (read: Matlab). At the same time I don't think that a lecture on syntax and rule-/pattern-/function-based programming is very engaging in itself.

Question to the community: Which questions here on Mathematica.SE would you recommend as examples worth discussing in such a class (either for being really helpful for beginners or as interesting examples of what can be done in Mathematica, that might be adapted into a kind of guided exercise/exploration task).

Examples:

  • For teaching the language itself, you'd probably be able to find lots of ideas in this course: library.wolfram.com/infocenter/MathSource/1847 – Szabolcs Jan 4 '16 at 8:58
  • 2
    Maybe this can be helpful. Found it in this answer. There are many books and tutorials that can be taught as a university course, but this material has the advantage of having been taught and revised, and there is section called "advice for instructors" as well. – C. E. Jan 15 '16 at 21:21
8

I'll second m_goldberg's concerns regarding the scope of the question as asked; however, getting students more acquainted with Mathematica such that they can use this tool to solve problems important to them is a task about which I feel very strongly.

Because I view Mathematica as a tool (one I enjoy using), I view your question similar to this one: How to teach Hammer. Grammatical liberties aside, my point is that tools are objects used within the context of something bigger, and are rarely, if ever, taught as standalone skills. Consider how you might entitle a course that contains a module on how to use a hammer; for example, Intro. to woodworking. The course is indirectly about how to use a particular set of tools to create something out of wood.

Likewise, I find it is much more productive to teach Mathematica with a purpose in mind. In my case, I want students to use Mathematica to visualize and process data collected in their (real and virtual) Chemistry laboratory experiments. Since they have a goal (e.g. create a plot of your first order kinetics data including a linear regression line), they have a clear path guiding them towards their goal. Mathematica is huge, it's syntax is not intuitive to those unfamiliar with programming, so it is very easy for beginners to get lost.

Others will disagree with my perception of Mathematica as a tool rather than a language and point to a standard Computer Science curriculum, where courses in programming C, Java, Python, etc. proliferate. It's also clear that WRI wishes for us to accept the Wolfram Language branding. My primary issue with this approach is that I do not believe teaching someone how to program in the Wolfram Language is as valuable as helping them learn how to solve problems.

In summary, if my students were asked the question, "How comfortable are you with using Mathematica?", I would like them to be able to answer with something similar to, "I used Mathematica to analyze data that shows how bleach will remove blue food coloring at twice the rate as it does red food coloring" rather than a generic "I can use it to perform linear regressions".


Off the soap box, answering the question

Here are a few examples of times where I have exposed my students to Mathematica.

  1. Using custom-made CDFs and objects from the Wolfram Demonstrations site: Students gain an appreciation for the power of Mathematica, and based on how well the CDF is designed, are able to meet the learning objectives of the module. Naturally, they gain zero understanding of how Mathematica was used to design/present the information. Nonetheless, I use this platform most often as it is best suited for my student-base, which is typically computer-programming illiterate.

  2. Formal instruction. I create videos and worksheets for students to view and follow in order to complete their project objectives. Even the stronger students in my classes tend to treat these materials as cookbook instructions, and the weaker students inevitably "borrow" notebooks to plug in their own data.

  3. Opportunistic instruction. In several instances, I have had students ask me how to do something in Mathematica. Most recently, given that my institution has decided not to renew its license, is how to use the Cloud/Development platform. I started some screen-capture software and walked the students through the process, then gave them access to the screencast. Two of the three students continued to use the Cloud for other projects.

  4. Independent learning spaces. My research students make use of Mathematica in their work, and since they have very varied projects, it is difficult to have a one-size-fits-all worksheet/introduction. Instead, I teach them about the resources available such as Stack Exchange and how to effectively use the documentation. It is a tedious process; however I see the most improvement in Mathematica proficiency in these students.


The short version

Now that I've worked through my ideas (hopefully for someone else's benefit, but I suspect this exercise was most beneficial for me), I think I can more succinctly answer your original question.

There is no one set of questions/resources that I find most beneficial for teaching students how to use Mathematica. I prefer a problems-based approach in which the students have a problem to solve and learn how to use tools (in this case, Mathematica) to solve the problem. In my instructional delivery, I help students learn how to search the available resources for guidance. I encourage students to "'Google' linear regression in mathematica" rather than pointing them directly to a particular Q&A or documentation page. Students then benefit not only from the in-context-learning, but also gain tangential experience in searching for and critically assessing resources available to them. It also has the added benefit of removing some biases in my instructional delivery, since I am suggesting resources as an experienced user trying to remember how I felt at the start of the journey.

  • This question actually arose from the perspective you mention when talking about hammers and woodworking. I fear that by talking only about very specific problems (e.g how to use NDSolve for various engineering tasks) one teaches the hammer with the result that for the student every problem looks like a nail. That is not my intend. Maybe the title I choose suggests exactly the opposite idea. Any suggestions on a better title in the spirit of the question? – Sascha Jan 4 '16 at 13:40
  • 1
    And since you mention typical CS curriculum: In my first two semesters they tried teaching java of all languages (explicitly java, not OOP in general) to engineering students. – Sascha Jan 4 '16 at 13:43
  • @sascha I see no need to change the title or edit your question, as I feel that the meaning is clear. At the end of the day, if you are developing a "club" or encouraging the creation of a new course, my suggestion would be to focus on the problem and then state that the club/course is designed to see how Mathematica can be used to solve that problem. – bobthechemist Jan 5 '16 at 1:09
  • @Sascha IMO neither Java nor OOP in general are needed for engineering students. They need to know how to solve hard math problems and acquire/analyze data. At the moment, I'm leaning towards python as the answer to "if I'm a scientist/engineer and I only have time to learn one language, what should it be?" – bobthechemist Jan 5 '16 at 1:10
  • I think with teaching Python as a language for "non-computer science, just need the job done"- people you are spot on. I personally would have liked if they taught Haskell for the sake of getting people in the FP mindset (which probably is easier for STEM students to grasp anyway) – Sascha Jan 5 '16 at 8:05
  • 1
    @bobthechemist thank you for this thoughtful answer...as a non-expert (in anything really) but a joyful learner Mathematica has been a tool for diverse tasks and a vehicle for play and improved understanding. The philosophical/semantic issues aside this site has been one of the most useful resources in learning...teaching that is a much much more complex issue...context/aim/starting position...so again thank you... – ubpdqn Jan 14 '16 at 9:52
  • I learned Mma through library.wolfram.com/infocenter/Books/4765 in a small course taught by one of the authors. It was basically continuing ed for the math teachers in my high school, and they let the motivated / interested math students take it too. It was a very nice introduction to Mma specifically because in principle I already knew how to solve the problems, so it was a context in which I could understand what was happening / check the answers easily. – evanb Jan 16 '16 at 0:19
4

I think this could be a fruitful Meta question, but I have reservations.

  1. I have an issue with the phrasing of your question. I feel that in

    Which questions/answers here on mathematica.SE or other material would you recommend for teaching

    the phrase "other material" makes your question too broad and takes it out of the meta area. I would be much happier with something like

    Which questions here on Mathematica.SE would you recommend as examples worth discussing in such a class.

  2. Although I have many favorite questions on Mathematica.SE that I think would make good class material, I am also worried that any recommendation I would make would be inappropriate for your purposes because I don't have a accurate mental picture of the particular class you envision. I would like to be better informed about the kind of content you are seeking before investing time into gather up a list of examples.

Update

Based on Sascha's comments I recommend

  • The type of class I envision is a mixture of lecture/demonstration and hands-on training. Since I attended a class that incorporated flipped classroom elements I am a big fan of the concept but I think teaching a programming language demands some sort of lecture on syntax? The target audience in my case are electrical engineers so the obvious choice would be to analyse some circuits/ODEs which in my opinion would only lead people to view M as kind of glorified calculator and not as the general tool it can be. That is not my idea of a good class. – Sascha Jan 3 '16 at 21:26
  • The Matlab class at my university that I mentioned in the question actually does that and only teaches a little syntax and how to solve common control systems problems using the toolboxes. That and Matlab's (horrible) documentation leaves students helpless when required to solve real world issues and leads to typical scientific (read: hacked together) programming – Sascha Jan 3 '16 at 21:33
  • @Sascha. I made a recommendation. Is the sort of thing your looking for? – m_goldberg Jan 3 '16 at 22:08
  • I like that recommendation because it not only concerns a topic familiar to electrical engineers but also showcases how Mathematica can be used for all sorts of tasks that are not obvious programming-task. – Sascha Jan 3 '16 at 22:13

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .