University Programming 1

Another semester at our local university is coming to a close. This semester I have been tutoring a buddy in Programming I. Reflecting on my tutoring sessions with him has reminded me about my first college programming class way back in 2003 at Arkansas State, Jonesboro. Not a lot seems to have changed.

The ugly

What I am getting from him is that they are using this class as a weed course. A course where they intentionally let you squirm, and suffer, to see if you got what it takes to attend the university.  I hate these kinds of courses. This type of programming course reinforces that myth that your either a programmer or your not, you got it or ya don't. This type of programming course is the type of thing that makes people erroneously think they hate programming. I promise you don't hate programming. It is just the way computer science presents it. Also, if you just started I want you to be aware a CS degree is designed to make you a computer scientist, not a programmer. There is a difference.

OK back on track, What kids of problems did I have with his class? I'm glad you asked, there was only one or two. :)
  • 1 professor, and a couple of over worked TA's wrangled 180 students.
  • They were given their homework and told to start on it before they had learned the material it tested them on.
  • To submit their homework they had to ssh into a UNIX box. The majority of CS 101 students didn't know what UNIX was.
  • Their TA's gave told them to use vim.
  • 4 Weeks later their TA's told them about notepad++
  • They were not taught how to understand their errors.
  • They were not taught how to format their code.
  • Their homework instructions had 2 - 10 errors on each assignment.
I don't mean to be too hard on the Professor, or his TAs. It is possible the department sets up these class sizes, and the format he has to follow. I'm sure the TAs are just following orders. Also I love vim, I use it at work, but it isn't the right tool for someone just starting out. Do you think Jugglers start with 5 items? Gradually building on what we learn is the key to not overwhelming someone. 

An unintended side effect of throwing them into a Linux like environment with a list of steps is that they didn't understand what they were doing, and it was slow and painful. To compile you had to :wq then type gcc hw1.c then wait for the errors. If none then, you could type ./a.out to see if it ran with the right output. These were steps to him, and they were cumbersome. He didn't see the connections between them. He didn't understand we could stay inside of vim and just type :w to save and :!gcc hw1.c && ./a.out. Then use the up arrow to repeat instead of retyping. If their intention was to teach them something about another OS, I think they only taught these beginners that this black text box is slow, disconnects a lot, and the steps for it to make programs are a pain in the butt.


If I had to sum up my tutoring with him into a few statements they would be.
  1. Practice, and practice some more.
  2. What you think is super hard now, will look normal in 2 weeks, and easy after 4 weeks.
  3. Don't just read, understand. 
  4. Keep things organized. 
When he first came to me with his first homework assignment he was struggling with if statements and case statements. We talked it out and visualized it with some white board drawings and after about 4 hours he had done his homework, and he had a basic understanding of these control structures. I can't fathom not understanding if statements. I assure you just like I assured him, at some point I also struggled learning the same material. About eight weeks later, I am helping him with multidimensional arrays, and for loops. As we are reviewing his code we come across an if statement and he says "I can't believe how hard I thought those were!?" I immediately asked him, "How many if statements have you written in the last 8 weeks do ya think? 50? 100?"  Practice.

Another basic problem he had was the same as something I did when I first started. I would read the errors see a line number and hunt for something wrong on that line back in my text editor. Honestly, you can do that and find a large portion of your errors, but to find them faster you should read the actual error, and understand it. This is where I think that the programming teachers fail. They teach how to use the language, but not how to debug it, or really understand what is happening. Spending some time on "unknown identifier", "missing matching )", or "expected , or ;" would lower the amount of frustration the students endure by a hundred fold.

Following on the debugging complaint from above; my advice to you is compile every line as you write it. Until you get a good handle on what your doing this is the fastest way to catch problems. My buddy shows up with his second assignment and tells me I got about 80% of it wrote, but I have some questions about the last 20% before I can write it. I was impressed, but I was also a bit suspicious. When I inquired about whether that 80% actually compiled he informed me he hasn't tried yet. He was waiting until he wrote the whole thing. I face palmed. I made him compile his 80%. GCC told him he had about 200 errors, and looked like it had barfed all over his screen. I had him take it 1 error at a time from the top, and 30 minutes later he had found and fixed the real 15 errors. 

Being a programmer

If you want to be a programmer, getting a CS degree is one path. But, please be aware that there are other paths now, and having a CS degree won't make you a better or worse programmer trather than just signing up for a class or shadowing a programmer, han people who have taken these other paths. Other paths include boot camps, and intensive onsite programs that will teach you to code, and many even place you with a company afterward. MOOC's have a lot of the same material as actual universities for free, you are just doing it on your own at your own pace. You could get a degree in something else and learn programming on your own time. I know several people who started out with photography, and ended up in web design and programming. I know others that started in IT and ended up programming. There is no rule that says you can't do cross discipline. 

Programming, to me, is taking a big problem, breaking it down into smaller workable problems, and then working on them. I solve puzzles. Personally, I like getting paid to solve puzzles. I think programming is a wonderful profession with lots of neat jobs. If you think you might be interested take a few programmers out to lunch, ask them about programming, how they got into it, and what they recommend. 


Well Rounded Traveling

TL;DR; Every place you visit has it's pro's and con's. Don't get caught up in either extreme.

Have you ever heard of the 4 stages of living abroad? I look at those stages a bit more broadly than just living in a foreign country. I think they can be applied to people who visit, and study abroad also. I think most people get stuck in one of the first two stages.

This country is so cool!

Raw seafood that came with our hotpot!
I think that lots of people who go vacation, or do the tour group thing in a foreign country get this honeymoon mentality. They see all the good, and chalk up all the bad they notice as some cute quirky issue/story they can tell at dinner parties.

My personal experience in this stage is with Taiwan. I went over for the first time in December 2002 at age 19. It was my first out of country experience and I had 3 weeks of fun. I was shown around all the touristy spots, treated to more than I deserved and everyone was extremely kind to me. When I got back I was telling everyone about this cool thing, and that thing "we" could do over there that couldn't be done back home.

I have seen, on forums, and heard in person stories of people who want to learn Chinese because,  they went on a tour of China and everyone was so nice, and everything was so pretty, and they have so much history. They just gotta learn Chinese! If your one of those people. Cool, go for it. Just realize that initial motivation isn't gonna sustain you. Find more reasons to learn in case that one isn't enough.

Why don't they do things the right way?

That home sick stage is what I think a lot of foreign students get stuck in. Speaking just from personal experience I see the majority of foreign students from non English speaking countries get to this point and not pass it. They end up forming tightly nit communities of people from their home country, they cook their local cuisines and only go out to a few safety restaurants. They are here to get their degree and then get outta dodge.

Part of a burned out castle in Missouri, USA
For me this stage manifested in a few ways. At the end of the first trip we landed in Memphis and the first thing I wanted to do was eat a hamburger. Later on my then girlfriend's mother came to visit and stay and I noticed all her foreign habits. They were no longer cute or weird, they were annoying and I complained about em. Did you know Taiwan women will fart in public without a care for who hears. Over here that's rude, over there, it's just business as usual.

Blind spots...

At this point in my life I don't really consider myself an Asiaphile, or in love with Taiwan. I do feel comfortable in Taiwan. But I also have a strong desire to visit other countries and and learn other languages. After I get to a certain point in my Chinese speaking, I plan to learn both Spanish, and Japanese. Like I mentioned earlier I have had my moments where I was a total Taiwan fan boy.

When I first started going to international club and meeting Chinese people, the majority were from China, and I just had to tell them how much better Taiwan was from what the news, and my imagination had decided China was like. I thought I was helping them, or maybe I thought they were being down on my adopted second home.

I had a Chinese teacher that had done part of his degree in China. He married a Chinese woman and took student groups most every summer on trips to China. When the class would occasionally digress into politics, or cultural topics he would unconsciously say "we," and "us." He would also argue from China's perspective giving the impression that China was what he considered his homeland, or the best position.

I have another friend who is an expat in Korea. Her second or third year there we were having an IM conversation and I was talking to her about Japan. She did not like them. Unconsciously used that some "we", and "us" terminology, and she was repeating negative views and opinions about Japan that a portion of Koreans have.  I'm happy to report she has since since moved past that phase and even visited Japan a few times. As far as I know she now, has zero animosity towards Japanese people.

Keep it real.

Those first two stages seem to me where the majority of people get stuck. I feel like for now I am in the third stage. When I am in Taiwan I don't really have trouble orienting myself or getting from A to B, but I still have issues. With this post I'm not saying don't travel. I am also not saying you have to look for the bad. I am just asking you to do your best to be aware of your bias. Maybe ask your friends to help keep you in check and vice versa, or maybe your tour guide is only able to tell you the highlights. That's OK, now your in the know. It is important to go out there experience stuff.

I think keeping your biases in check will help you enjoy your experiences more than just blindly seeing only the good, or bad in a place. It will also help those you share these experiences with to better understand the world we live in. It is natural to want to draw comparisons to what we know. But do your best to not make it sound like a comparison chart. Do your best to not make it sound like a division of us and them.