The uglyWhat 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.
- Practice, and practice some more.
- What you think is super hard now, will look normal in 2 weeks, and easy after 4 weeks.
- Don't just read, understand.
- 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.