Should my math student have some Unix skills?
May 5, 2014 9:02 PM   Subscribe

I think my son, who is on an AP math trajectory in high school, would benefit from getting some familiarity and basic programming skills in the Unix world. I've noticed math depts in some universities include study of these skills in early years. Are there some tutorials we could use in the OS X environment to get a leg up?

He is competent with computers but has no programming or command line experience.
posted by Mei's lost sandal to Education (16 answers total) 9 users marked this as a favorite
IMHO just about everyone should do *some* programming in school. For someone doing math, learning LaTeX would probably be useful as well as Matlab and Python (particularly scipy and ipython). One thing that is popular these days is doing Matlab and Simulink on a Raspberry Pi, which is an inexpensive Linux computer specifically designed with teaching in mind.
posted by Poldo at 9:29 PM on May 5, 2014

Python has a page that recommends a bunch of different tutorials for novices, among them Khan Academy and Codecademy (which will have tutorials for other languages). I'd suggest starting with a shallower-learning-curve language like Python rather than something like C++ or Java.
posted by axiom at 9:29 PM on May 5, 2014

Does he want to learn this? It's way, way easier if it's not foisted on one from above. Because the info is all out there and you don't need to find the best possible tutorial, you just need to Google liberally while trying to do things. Everything I know about the Linux command line was learned piecemeal like that back in the 90s. (So, not Google, mostly, but similar.) But I had things I was doing where it was helpful to know how to do that. Basically, it's helpful to tie it into something else. Does he want to program? Write HTML/CSS? To understand how to set up his own server? To install Linux on a PC? I can't picture learning this and actually retaining it if there wasn't something there to use it with regularly, at least not at the high school kind of stage, but the direction you go might be different depending on his interests.
posted by Sequence at 9:31 PM on May 5, 2014 [3 favorites]

Installing and using some variety of Linux will be a learning experience, and will definitely get him acquainted with the command line. I like Learn Python the Hard Way as an introductory python tutorial. One he has a basic understanding of what an algorithm is and how to put it into code, he might enjoy working on the Project Euler problems.

Whatever the case, the best way to learn to code is through application and exploration. Tutorials are great because they give you a set of tools, but the real business of learning occurs when you're done with the tutorial and have to apply what you know to a problem you want to solve.
posted by cirgue at 9:45 PM on May 5, 2014 [2 favorites]

Not a tutorial, but here's an intro to linux class, free...

Starts August 1.
posted by AllieTessKipp at 9:50 PM on May 5, 2014

Honestly, what he ought to study outside of school right now is whatever he wants (and that might be nothing). Programming might help him with math . . . or it might not; it depends entirely on his style of learning and where the math-learning roadblocks are. Unix (???) is definitely not going to help him with math. What will help him learn math is actually doing math.

He's on an AP Math "trajectory", which presumably includes courses that will teach him the information he needs to know to start learning calculus.

To me, this sounds like a thing you want him to do and you're trying to find a justification for it.

If he doesn't want to learn programming right now, no amount of helicoptering is going to make that happen in any way that will meaningfully survive him going to college. It could actually stifle an interest in computers and computer science, which would be tragic.
posted by toomuchpete at 10:47 PM on May 5, 2014 [8 favorites]

Try showing your son this graphical tutorial on the vi text editor, including the essay.

Basic speed of typing is an important underpinning skill for programming. vi is a good investment for that.

I personally feel vi is an eye-opener on the capabilities of computers. It's not just a window you type into, but a different way of thinking about task completion and the structure of information.
posted by kadonoishi at 1:42 AM on May 6, 2014

Yeah, he should have some command line skills. If you can, show the kid how powerful the MATLAB REPL can be by building expressions and generating plots of whatever.

Inspire by example, or find someone else who can.
posted by oceanjesse at 3:30 AM on May 6, 2014 [1 favorite]

I'm at the tail end of a PhD in math. Keep in mind I am almost certainly the only person from my AP calculus class who will write that sentence. I think I was one of three people in my high school graduating class who were math majors. There is a long way between your kid and a math major and plenty of time for him to decide he's in love with history of art or something.

At the start of grad school, virtually everyone knew LaTeX to varying degrees (but most undergrad math majors don't--it's largely the people heading to grad school who pick it up). Some people interested in applied math had some sort of Matlab/Fortran/C experience. A few of us had taken AP CS in high school or the first CS course or two in college. A lot of the pure math people had little to no programming experience (maybe their multivariable calc or differential equations class used Matlab or Mathematica, but that's it). Basically, it's something you pick up as you go. Those of us reliant on more specialised software will know our way round the command line, but people who use Matlab or Mathematica exclusively or don't do many computations sometimes use Windows (and I'm guessing a lot of the Mac people don't use the command line, though I do).

That's a long way of saying that, from my perspective, this is a pointless project--he'll pick up what he needs as he goes. However, if he's expressing interest, then cirgue's suggestions are good ones. I had an all but unsupervised CS class in high school (long story) where we had a list of projects with a brief explanation of the concept and that was it. Yes, it really would have helped if someone explained recursion to me, but the experience was invaluable. In some ways the crucial thing he'd learn is not a bit of Python or whatever, but how to figure things out for himself given the documentation, some examples on the internet and StackOverflow (that high school class would have been so much easier if StackOverflow existed, though we still would have had to spend a few days trying to figure out how bowling is scored).
posted by hoyland at 5:02 AM on May 6, 2014 [6 favorites]

Specifically for learning command line, I really like this tutorial: Learn Command Line the Hard Way
posted by danceswithlight at 8:14 AM on May 6, 2014 [1 favorite]

Speaking as a mathematician, I don't think someone who wants to enter math as a career needs to learn Unix at all.
posted by Frobenius Twist at 10:06 AM on May 6, 2014 [1 favorite]

Best answer: Hey. I'm a Ph.D. student in the comp sci world who has mathematics Ph.D. friends. I was a math and comp sci tutor during undergrad. Allow me to be your guide for the next few sentences.

1. Everybody should know how to program! OS X is great because it's based on UNIX, but is also very user-friendly. I personally think it's a little easier to use GNU/Linux to learn to program on via command line, but I'm sure neither of you wants to mess around with a new OS at this point. So, good job on that front already. Command line in OS X will be perfect for what you're describing.
2. BUT, I would suggest starting off a little differently. If neither of you has experience with programming or installing anything via command line, it might be best to start off learning a language first without the added stress of wondering if you did all the setup correctly. Python or Ruby is probably what you want. They're great languages and fairly easy to learn. Allow me to suggest Python; that's what a lot of math/bio/chem people learn. He can also start making little games easily...which might help him want to keep programming. I think this Coursera interactive course would be a nice place to start (he will have plenty of time to dive into UNIX after--the most important part of sticking with programming is being able to see a tangible benefit). Also, he can program a Raspberry Pi with it...more fun projects for you two to do together! (And on the UNIX front, Python can also be used... ;))
3. Don't focus too much on preparing him with coursework you think universities might want. Requirements change, especially with respect to computer science. The main goal should be to get him at a fluency with programming so that he can hit the ground running with whatever is thrown at him. It sounds like he's already a very gifted student, and it's great that you're looking for new ways to engage him. Work on keeping his interest in learning new things, not on mastering specific skills.

1. No way he needs to know LaTeX right now. Unless he's a very special breed, it will bore and annoy him. TeX is one of Knuth's greatest gifts to humankind, but mostly pretty pointless for a math student in high school. It's basically just a way to make documents look beautiful and flawless. Think of it as Microsoft Word for the academic crowd. Caveat: if he's actually a typeset geek, then he'll love it.
2. No way he needs to learn MATLAB or Mathematica or Maple right now. He won't even be able to really begin to make anything cool until he gets a little deeper into calculus. Again, unless he's a special breed who just lives to plot equations in pretty colors or is a li'l modern day point. These are specialized softwares that offer so, so much...but might not be of interest to somebody finishing up trig.
posted by semaphore at 11:00 AM on May 6, 2014 [2 favorites]

Rather than prioritize things that would be useful in college or grad school, I would prioritize things that will be fun and engaging for your son. I was a math major in college and am an analyst by profession, and I think I learned as much from trying to make poker and Dots and Boxes games with my friends in high school as I did from any academic class.

I'd start with him and try to figure out what kind of tools or games he's interested in building and then choose an environment and language from there.
posted by Aizkolari at 11:37 AM on May 6, 2014

Response by poster: Wow thanks for all the excellent feedback. I appreciate the insight from those in academia, and the pointers to specific tools and resources, especially MATLAB. And parenting advice too! I guess that is not surprising given how I framed the question though. My son doesn't do shit he's not interested in, and I'm fine with that, so I'm not too worried about 'foisting' anything on him.
posted by Mei's lost sandal at 12:31 PM on May 6, 2014

The MATLAB YouTube channel is a good place to start, by the way.
posted by oceanjesse at 3:31 PM on May 6, 2014 [1 favorite]

He could make a Sage cloud account. That gets him access to a Unix system somewhere in the cloud, and an open-source math programming language to play with. (Sage is built on top of python, but has math-specific features. Also, it's free.)

Or he could teach himself to program his fancy TI calculator; that's a perfectly respectable first programming experience, and a good way to occupy dull moments in class.
posted by yarntheory at 6:08 PM on May 6, 2014

« Older IVE GOT A WART i want it gone   |   Can you help me find this shell script? Newer »
This thread is closed to new comments.