This is my old (retired) blog!

I haven’t updated this in a really long time, but if you’re interested in seeing my posts regarding Java, A+ Certification, Linux and more, head over to https://briefsheaf.wordpress.com/

Advertisements

Algorithms to Live By, a partial review

A partial review for the reason of being partially finished. I swear, I’ll try to be as partial as I can throughout this post. Here are the points so far.

  1. Explore / Exploit. Whenever we choose to do something, say an activity we know and enjoy, we are actively trading off other possible unknown activities that we could be trying. In this, we’re exploiting our observations about such an activity (say, playing board games) for it’s resources (pleasure). If we chose to do something new, we’d be exploring it. To optimize one’s situation, you have to do both explore new things, and exploit things that are known.
  2. Optimal stopping: the idea that we should gather sufficient data, set a baseline, and then once something exceeds that baseline to pounce on it. A key idea here is time, something that needs to be taken into account for when thinking about a problem. The book prescribes taking ~30% of the time you intend to pursue a project to establish a baseline, and then the rest of the time searching. Take the first thing to exceed the threshold.
  3. Sorting is key to computations. Big O does not refer only to Office Space and old animes on Adult Swim. According to my UoPeople syllabus for Programming 2, this will be a subject I’ll be studying in further detail in another couple of weeks.
  4. Schedules are difficult. But an interesting thing to keep in mind is to accomplish shorter things first if possible (and if they have a similar significance as other important tasks) creates a shorter overall time. Let’s say you’re studying two courses in programming, one that is a tutorial project that will take 4 – 5 hours, and one that is a short Coursera course that will take you 5 days to complete. If you put the shorter one off until you’re done with the Coursera course, then it effectively took you five and a half days to complete. In total then, it took 5 days to complete the Coursera course and 5.5 days to complete the walkthrough, a total of 10.5 days. If you did the short one first, and then the Coursera course after, it’d 1/6 of a day to complete the tutorial and 5 days to complete the Coursera course totally 5 and 1/6 days total for both projects cumulative end time.

 

Hacking Korean

Sometime last week it dawned on me how badly I need to know Korean. This is a subject that I’ve repeatedly tried to tackle and improve upon, but have left each time feeling overwhelmed and out of focus. Language school, private tutors, and attempts to leverage learning platforms like “Rosetta Stone” and “Memrise” have failed me.

Why have these failed me? Because I didn’t know what I needed to study. To interact with people face to face you only need to be able to listen and speak. Before, I was taking the academic approach, focusing on reading and writing and as an extension of those I assumed I’d be able to pick up the language. This doesn’t work, or if it does, it works to slowly for me. I’m an aspiring programmer, I solve specific tasks. By cutting out reading and writing I just saved 50%+ of my time and effort.

What I need to do is develop an ear for the language. This is where leveraging good technology comes in, especially tools like “Anki.” This flashcard app is a cut above the rest, not because of its user interface or portability, but because of it’s pre-existing “decks” full of recorded conversations and translations of a multitude of languages and subjects. There’s a common refrain in programming of “don’t reinvent the wheel” meaning if there’s a library for what you need to do, use it. Anki is the Library of Alexandria of flashcards.

Anki isn’t new in my toolkit, but my approach to it is. Instead of looking at the phrase being spoken, I avert my gaze and listen. I try to piece together what the speaker is saying by forming the words in my mind. Only after I can repeat the phrase with a translation (or guess), will I look up at the screen. This trick has forced my brain into interpreting what’s being said.

In the next couple of months there will be ample opportunities to test out if my approach is working. In the meantime, it’s great to be able to say that I’m able to understand way more of what’s being spoken around me than I was only two weeks ago.

Term 3 at University of the People

Another two months have just blown by, and my Calculus 1211 class is approaching the finish line. After a final exam I will be officially done with the course. It’s been an interesting course, I did a good deal of Khan Academy to get my grade maxed which was a huge life saver. Self learning is tough, but it can be a lot easier if you know the right avenues to go down.

This weekend I’ll attend my first legit programming convention, PyCon Seoul 2016. I’ve also been attending meetups every weekend I’m available about Free Code Camp. It’s great to be around like minded people, being able to listen to others talk shop around me, and to give my two cents from what I’ve learned so far from my Programming I course. Part of me is aware that this convention on the weekend is going to be above my scope of understanding, but with persistence I’m confident I’ll be on my game next year and actually be able to be more of a participant than an observer. I’m looking forward to hearing about Tensorflow in more detail, and making an attempt at programming a chatbot with it in Python.

The next term is going to rock. I’m taking Programming 2 and Databases, both of which I’m really excited for. My main goal is to learn as much about Object Oriented Programming practices as possible, as well as getting my feet wet with SQL and the concepts of relational databases. Term 2, I plan on taking Web Development (which required Programming 2) and Computer Systems. So, in another 4-ish months I’ll have finished all the freshman level computer science courses. It’s been an invaluable time at University of the People so far, and online education has allowed for me to work during the day and study in the evening, even from the remote reaches of living in South Korea. What an epic time we live in!

Books, Courses, and Progress

For the past few days I’ve been picking up books like it’s going out of style. On Quora’s recommendation, I purchased “How to Solve it by the late famous mathematician George Polya. Additionally, in preparing for my upcoming calculus class I purchased “The Cartoon Guide to Calculus” by Larry Gonick. And to make sure I won’t be wanting for something to learn from, I also picked up “Algorithmic Puzzles” by Anany and Maria Levintin. My commute time is really long since changing jobs, so I have about 2/3 hours to kill during my daily commute, so plenty of time to get reading!

It’s a rare thing when a book can cover several fields simultaneously, and George Polya’s book “How to Solve it” does just that. It covers ideas of problem solving from both a teacher’s and student’s perspective, while suggesting ideal states students should aim to achieve and mindsets teachers should try to hold. In this, it’s giving me insight on teaching while also helping me think through problems systematically. The algorithm Polya suggests is one that applies to what I’d postulate to be all math and computer science problems.

  1. Understand what the problem is asking. Look for what is known, unknown, correlations between the two, what the condition are, and so on.
  2. Devise a plan. Use what you have to link to the data and the unknown. Think about problems in the past that might apply to this one.
  3. Use your plan. See what happens with each step of the plan.
  4. Reflect on your work. Think about what you did, and if possible check if it worked.

This book also voices ideas that I’ve been coming to think myself as true, such as talking naturally to students and getting them to think of the answers themselves. While this might seem apparent, for many teachers the temptation to just talk at the class for the duration of the time is a classic newbie trap. More interestingly, he makes less obvious points, such as allowing for students who may not grasp the material an “illusion of independent work” in where the teacher “help(s) the student discreetly, unobtrusively”. (How to Solve it, Poliya, Kindle loc 292 of 3749). This is key because you don’t want to scare the students away from understanding by making them feel embarrassed or tarnish their self esteem. I do this in my classroom by checking the students’ homework and quietly giving them feedback if they made any errors.

The other two books I haven’t had a really good chance to look at yet, but will no doubt be writing about them after I finish them. I read the first chapter of the Cartoon Guide to Calculus and was impressed on how concise the definitions and explanations are, and also the beauty of mathematics when displayed visually. The Algorithmic Puzzle book also looks quite interesting, and should provide some thought generating moments on my commute as well as an introduction to thinking about algorithms, both in their general (ex “n + 1”) and specific (ex “5”) forms.

At home, I’ve been working through Coursera’s first course in the Java Programming: Object-Oriented Design of Data Structures offered by University of California, San Diego. It’s been an interesting course, most of the things I’ve learned before in my CS1102 course through University of the People, but I’ve found it to be quite helpful. While UoPeople has good primary sources, the lack of video lectures I find to be somewhat limiting in the amount of total information I can retain. I get the theory now behind polymophism, classes, and object creation/destruction (or dereferencing then garbage collecting), but some of the GUI and array/arraylist aspects of the course were rushed, so a course that goes over these again is quite welcome. This course uses the Processing library to handle GUI applications, as opposed to UoPeople’s CS1102 course which used AWT and Swing libraries.

The experience I’ve been having at UoPeople has been positive, and I still hold a 4.0 GPA after 5 courses. As mentioned, next semester I’ll be taking calculus, and then I figure I’ll be taking several courses at a time (once I fully acclimate to my new job and come back from summer vacation). UoPeople was a very solitary experience until I was invited to join Yammer through my official UoPeople.edu email address. This in turn has allowed me constant interaction with other CS students through Slack and Yammer channels, letting me ask questions for clarification to people further in the program, and in turn I look forward to helping students when I gain more experience and knowledge in the field.

Udacity Course Complete!

I finished up the “pitch perfect” app last night. The course was enjoyable and I learned some neat concepts and a whole new way of writing code (via the Xcode IDE). All in all I was happy with the course– I’d say I’d give it a 4/5 for an intro course to Swift. The last lesson presents a “black box” class that you download and import with some gnarly code. They review the code, and I guess building something this cool as a total n00b is perhaps an impossible feat. While I’ve completed all the lessons, the last thing would be to do the final project, which brings up an interesting point of whether or not I’m going to sign up for the 200 ~ 300$ evaluation/mentoring/support. I’m still on the fence about this, but I may very well cave in and go for the nano degree after getting a few more courses under my belt.

The course itself reminded me a lot of Zed Shaw’s “Learn Python the Hard Way” course which I initially took well over a year ago now. While this technique is great, getting you to write code even when you’re not 100% sure what the code’s doing, I prefer the University of the People’s more collegiate technique of asking to write actual scripts from what you’ve learned so far in a book. That being said I can’t wait until I start my next class tomorrow/Friday! I’m going to be learning the basics of Java, a highly portable language first released in 1995. From my understanding, Java is also a language used in developing Android apps, so I plan to investigate that further in the future… Til next time blog!

First Swift Course Almost Complete!

For the last two weeks I’ve been working on Udacities intro to Swift class. This is really exciting to me as it is the first “intermediate” level class that I’ve taken and understood. While some of the code is beyond my scope to create, I could at least follow along with it and get some “bigger picture” concepts like the stack and abstraction. The last bit was talking about delegation, which is having one class do another’s work for it. Some things like the “auto layout” function of Swift is really fantastic, just plop some buttons into the stack horizontally / vertically object, set the alignment to fill and the distribution to fill equally, and blam, automatically aligned buttons. This Thursday I’ll start my University of the People Programming 1 course and I’m hyped about that too. At the same time, I plan on taking Coursera’s Java programming course, so that I get some video lectures to compliment the reading I’ll be doing. Last semester was another perfect 4.0 GPA, so I’d like to keep it up.

Two steps forward, One step back

As Jake the Dog from Adventure Time once said, “Dude, sucking at something is the first step at being kinda good at something”  This I feel to be oh so true, and last night I had my first hiccup with the program I’m writing. What happened, or what I deduce now, is that I didn’t create two necessary IBOutlet variables, and then tried to call them. Xcode was having none of it. Instead of creating them, I thought I must have just misnamed some of the variables I already created. Let’s just say I wasn’t in the most pristine mindset, and after trying to debug the program for what seemed like forever, I decided to scrap it, and run though the Udacity vids one more time and get it all straigtened out. Which I did, so I’m stoked, and now the program is even looking better than the first time round given that I did the constraining correctly this time.

Last post I mentioned the MVC model, or “Model” “View” “Controller”. What I said was incorrect, and I realized this going through the tutorial once again. The Model is all the raw data you want to use, the controller controls and manipulates this data and the view is what the end user actually sees. I think it was a solid choice running through the tutorial once again (even though I’m already about half way done in a week, for this course which says it’s supposed to take a month) as I picked up a lot of stuff that hadn’t really fully sunk in yet.

Feeling constrained? Xcode probably not for you

Okay, first off, the title is yes, a terrible play on words. I’ve been messing around and getting the hang of constraining objects in the Xcode playground. Some of the language is stiff, but generally speaking I can now make sure a label/button stays put regardless of device and viewing direction.

Xcode is really giving me a giddy feeling, something I haven’t felt since my parents bought me legos for my birthday as a child. I have the instructions and pieces all in front of me and I’m building this thing. It could be anything!

Anyway, so I’ve been listening to “The New Boston” Xcode youtube tutorial on my way to and from work and it gives me some peeking ahead, and then now at home I’m going to go back to plugging away at Udacities first course in their iOS program. Ah, another important thing I learned a few days back was MVC model, which is Model View Controller model for developing apps. I know what the last two words mean now, the part of the program that controls the end user’s view of the program, but the model part? Still iffy on. Time to get back at it, maybe they’ll explain that part next.

First romp with Xcode

Yesterday was the first time I had ever tried to use Xcode and I am feeling hooked. The IDE allows for you to direct code at objects and assets. I’ve been rolling along with Udacities course on making a sound editing app in which I learned about constraints and how to properly apply them. On the subway to work, I was looking at some Swift videos and came across “The New Boston” and his tutorial on Swift which showed the cheap&easy way to do the same thing all in a moderate Boston accent (i.e. like it’s 11 in the morning and you’ve just finished half of a six pack). Very refreshing indeed! I also learned how to link objects to code through the use of the assistant editor view. The New Boston tutorial also had some nifty code dealing with “first responders”, which are built in methods that look for certain user actions and ways to use these and resign these in order to make a functioning text field that you can click out of. Well, that’s 5 minutes. Until tomorrow!