Wednesday, December 10, 2014

Algorithms on Khan Academy

Khan Academy recently announced they published an introductory module on Algorithms. While I am waiting for the "Principle of Computing" and "Algorithmic Thinking" classes on Coursera to come around again, I thought this would make a nice preparation step. I am just under halfway through with the module.

What is great:
This is a very nice introduction to algorithms. While I don't feel like I could walk into a job interview and code these from scratch, I do feel like for every one of the algos covered so far, I can give a solid description and pseudo-code to describe how they work in general.
I also liked the structure of the algorithm sections: introduce the algorithm, give a part of the implementation, and then the rest of the implementation, and finally analyze the efficiency of the algorithm.

Not so great:
The implementation sections have an specific, expected solution and gives "hints" to this solution. You won't get credit for a solution - even if all of your tests pass - until you match exactly what they "hint" at. Personally, I would find it more effective if they accepted a working solution then guided us to a more elegant solution. Moreover, there are instances in which my code matches the hint, but I am still not getting credit for it. It is just unclear if I need to do more or if there is a bug. In these cases, I wish the algorithms section was more like the rest of KA, in that there are multiple hints that increase in their help.
I also thought the section on asymptotic notation could have been clearer. I would get the right answers on the quizzes, but I wasn't always sure why that was the right answer.

Overall, this is a really good introduction. I think after working through this, a novice like me will be able to better tackle some of the more advanced algorithms courses on Udacity or Coursera and have a nice little head start.

Saturday, October 25, 2014

Learning to Develop Software Progress

I have made some pretty good progress in several areas of learning how to do this software development thing.

Discrete Math Continuing to work through Discrete Maths text book. I am almost finished with Chapter 5: Sequences. Turns out I really like summations. We have gotten to defining sequences recursively, which would have been good background to have in Principles of Computing. Connecting the dots in this way makes me glad I am taking the time to do this.

Work Tasks I have done two coding pieces recently at the J-O-B. I wrote a visualizer in Ruby that uses base class inheritance to organize our ontology, rather than the current organization by domains, which are just general areas of knowledge. Using domains like 'sports', 'cricket', 'engineering', and 'physics' is a pretty unintuitive means to browse a hierarchy. There is no consistent level, and knowing one has to look in the 'time' domain for the broadest concept of 'event' in our ontology is non-obvious, particularly when there is an 'event' domain!! It was really good to see how flat our hierarchy is and identify where we can add in some levels to make a more cohesive and browsable ontology.

I also started learning the Visual Studio IDE and C# language. I have written several small methods to help with a data on-boarding task I currently have. It is a nice way to ease into the language. It makes me realize how much there is to learn, though. I had to use our internal JSON paring library and create a dictionary to assign the appropriate language given a data source provider. Good stuff.

Self-Project I finally came up with a project idea and have a pretty reasonable scope! The idea isn't earth-shatteringly interesting or unique, but I like it and will be able to see it through.
I just started to put together the prototype design document, but it is an interesting little project that will require accessing or storing data, manipulating it into a given format, and then creating a mobile app to serve it up on mobile devices. I think mobile is the best platform for what I want to do, plus it is good skill expansion.

Saturday, September 6, 2014

1/4 of the way through Discrete Mathematics

I got my hands on a copy of Discrete Mathematics with Applications. Half-Price Books for the win! It does help to be two blocks away from the HPB closest to the university.
So far, it has been mostly review for me. These first three chapters are mostly logic. I do approve of the emphasis, though. Next up, we start number theory, and I am looking forward to that. I am really hoping to finish this up before the next Principles of Computing class comes around. It would be so awesome to work on it again with this under my belt.
I should have my work review this upcoming week, and I am hoping to leave with a plan to get some coding work. I do write scripts for my own use, but having a feature task and going through the process of review and having code in production would be so fantastic.

Tuesday, July 29, 2014

Principles of Computing - Abandoned

I dropped the PoC class. I just came to the realization that I really needed to bone up on Discrete Mathematics before going any further in Computer Science. I found myself increasingly out of time every week, and cutting the math-heavy homework to focus on the mini-project. I'd rather be able to do both and really deeply understand the material than just trying to scrape a decent grade.

I really liked the idea of using the MIT courses, but without a set of answers to the problem sets, it is not clear to me how useful it is. It seems like such a good course too. The recitations and the exams *do* have solutions posted. Perhaps I can find exercises to fill in the gaps.

This seems to be my only option, as Coursera doesn't appear to have anything that will fill my needs any time soon. Doing a quick search isn't turning up any alternatives of the same caliber of the MIT course. Bleh. What is frustrating is that there does appear to be a site with links to solutions, but all password-protected. Rats.

This site had some suggestions ofr courses as well as books. I thought this Discrete Mathematics Book by Epp looked promising, but for $200, I'm going to have to think seriously. Amazon does allow for rentals. Maybe there is a cheap version from the library? The other books in pdf on this site needed Haskell. Not sure I want a programming and mathematics combination.

Hm. It was a lot easier at university. Classes were pre-determined, and all anyone had to do was sign up, pay the crap load of money for the class and books and fees, and then make it through. Piece of cake :)

Saturday, July 19, 2014

Two Weeks Left in "Principles of Computing"

I managed last week with data structures and inheritance swimmingly. These two are right up my ontologist's alley. This week's recursion topic is a mind-bender, but I am wading through it. I still struggle with the more math-heavy aspects of the class, though.

There are two parts to the class besides the material: homework and mini-projects. The homework is more a quiz-style format. There are approx. 10-12 multiple choice questions. I have found that these questions are extremely hard for me to grok, and almost always math-heavy. The mini-projects are the actual coding tasks. They include things like simulations of zombie apocalypse, recreating the 2048 game, and word wrangler.

Usually, I need the week to watch the videos and work through the math/coding notes and do the practice activities. I prefer to start the mini-project by Sat to have both days of the weekend to work on it. There isn't much time in there for the hours I would need to finish the homework, so I usually drop it, or make one attempt and then leave my crappy score. There is a very real disparity between how well I can do on the homework and how I do on the mini-projects. I pull a 100% on the mini-projects every time.

It is really unclear to me how much emphasis I should be placing on the fact that I am throwing homework under the bus. I am not too worried about the number grade I get for the class; I am more interested in gaining the knowledge. That said, it still isn't clear to me how much I am leaving at the table by not dropping the class now and switching to a discrete math class, and later returning when I have a better handle.

Even though there is a follow-on class in Algorithms, I am thinking that I will wrap up this Principles of Computing class, then switch to a discrete maths class. Once I have that, I will pick up an Algorithms class. Luckily, Coursera has two: an algorithmic thinking class that is part of this series, and another two-part course done in Java. If I can catch the two-part one in Java, that might be a better choice: more in depth and exposure to Java.

Saturday, July 5, 2014

Halfway Through Principles of Computing

So I am at the halfway point in the class, and seriously thinking of bailing. These last weeks of probability, randomness, and combinatorics have really put the pressure on me. I don't think necessarily the class is the problem. Rather, the problem is the lack of a discrete math background and the lack of sufficient spare time to make up for it. I did intend to work through a Discrete Math course, but I was waiting until this series was done. In retrospect, I think it would have been better to do the Math first :).

So, these past two weeks have been kicking my learning-to-program butt. I was thinking I should pull out and isolate work on the maths. I can always return to the programming after I have a handle on the maths. I found a couple of books to start creating a lesson plan, and I checked out the syllabus for my programming class to make sure I cover all of the relevant topics. To my surprise, this looks like the last week focusing on maths!! Instead, next week we move onto data types and inheritance. Oh definitely more up my alley.

My current plan is to stick with the class one more week and see if there are still big gaping holes to fill. I can always back out next week. I'd really hate to lose momentum in this series. I finished this week's mini-project with a perfect score, and if I can at least pass the homework, I think it will be fine.

Sunday, May 4, 2014

Temporarily Discouraged, but working on solutions

I am having motivation problems in my class. I managed to finish the mini-project for last week, get through the week's videos, do one of the sets of practice exercises, do the evaluations for the mini-project, and one of the quizzes this weekend. I still need to finish the second set of practice exercises, take that quiz, and then finish this week's mini-project.

This is the week we switched from scripting-type programs to OOP. It is a bit of a change for me. I didn't find it as frustrating as animation, but it still took some work to remember how it is different. I am glad we are making the change, because I don't do much OOP when I am writing my scripts for work. I should just make myself do it, but I am usually more focused on getting what I need done rather than how I am getting it done.

I did suspect that I would have a motivation problem when mostly through the class. Why is it the closer I get to the finish line, the harder it is to keep on? I mean, you'd think that seeing how little remains would be so motivating, but instead, it feels like I have just done too much already. SO, knowing all that about myself, I have promised myself a new e-book for every mini-project I complete. I hate doing the evaluations, so I usually do those while savoring a hot cup of tea and eating a bit of chocolate. I have also promised myself that if I complete the course and gain a certificate, I'll give myself a nice pedicure. Not one of the cheaper ones, but one of the nicer, more expensive ones. I am so hoping this propels me to finish!!

For me, the other difficulty is that exercise plays a huge role in my ability to stay positive and work better, and that is one thing that has been slipping of late. Mostly because my preference is a tap dance class I take, and I just haven't been able to get to the classes and keep up with the full-time work and the programming class, and the little matter of a family and home. Oh well, it is what it is. I made a point to do my own little yoga session on Sat., and I will need to come up with something. Maybe I can walk a bit longer to the bus in the morning? Instead of a mile walk, turn it into a mile and a half?