As promised, here is my learning journal from my first term back. This week was a rough start for me. This term I’m working a full time job which is on-site unlike my last. Including the stop at daycare, it’s about an hour and 20 minutes to work and then back again everyday for me. Definitely going to have some obstacles to overcome this term, and hopefully I find some helpful tactics to share with you guys as you go through the struggles of online education while working also.
Sept 1/2016:
First day back to school after taking some time off. What I did today was prepare for the course by reading the learning guide, printing off my tasks/assignments for the week and creating a few documents on my One Drive for notes, learning objectives, references etc.
My normal workflow for school is to start by taking the practice quizzes. I find it gives me a good idea of what I already know, and what I need to focus on. The closing date is set to 2015 so that didn’t happen this week, but that’s ok; I think I can survive.
One of my key strategies for doing well in any course is reflecting on the learning objectives while I complete my reading assignments. As I login each day, I’ll have more to reflect on.
Sept 3/2016:
Not the best start to a new school year. Yesterday I tried going into work early to spend an hour on school, but two of my co-workers showed up early too. So I ended up not getting any reading done at all. Probably not the best strategy to rely on going forward, but I was hoping it would be easier to work on school in the office with my duel monitors and a much more responsive machine than my own.
Today’s been unproductive so far, but my son goes for a nap soon and I’m hoping to get some serious reading completed then. Going to try and read now while he watches his shows on Netflix.
So as I go about the reading material for the course, here’s some of the things I’ve answered to the learning objectives.
1. Define programming languages
Simply: a program is a set of instructions that perform some action. A programming language is made up of the rules governing how that program is made. In the domain of computational devices, a programming language is an abstraction from the machine level commands that are executed.
2. Understand the history and evolution of programming languages
See my blog post: https://www.danfletcherblog.ca/2015/06/introduction-to-programming-for-beginners/#more-439
Summery: In 1801 a loom was built that could produce different patterns of textiles based on holes in wooden cards that were fed to through the machine. Later Charles Babbage created the differential, and later the analytic engine (on paper). Ada Lovelace, obsessed with the idea of computers being general purpose machines wrote programs for Babbage’s theoretical machine.
Later in the 1900’s the electrical computer was built. After much advancement in computational theory and development in computer hardware, Grace Hopper wrote the first compiler designed to translate a human readable program into 1’s and 0’s a computer can understand. This compiler was called an “Assembler” and the instructions used to write a program for this assembler was called Assembly Language.
After widespread adoption of assembly languages, Fortran was created which allowed for a higher abstraction than assembly (which is a 1:1 ratio to machine instructions). Fortran is coined for being the first “high level langauge” but by today’s standards would be considered quite low level. Fortran being used mostly by scientists, another language that sprung up around the same time was called Cobal and used mostly by businesses. Both languages were imperative, and later other languages of the same paradigm would spring into existence such as LISP (data oriented), C (procedural) and later C++ (object oriented).
Many of these older languages are still in wide use today, but newer languages of been born out of a desire to create convinces in modern software development, such as type checking, automatic memory allocation, garbage collection found in Java, and higher order functions such as those found in JavaScript.
In more recent years a shift in thinking has occurred to accept the functional programming paradigm. Although not new, this is created buzz around languages like Haskell and the more recent Clojure; both considered “pure” functional languages.
3. Describe programming language paradigms (imperative, data oriented, object oriented, non-imperative)
Imperative languages are languages that are concerned with the steps a computer must take to solve a problem.
* Data oriented languages are imperative languages designed to make working on a specific type of data trivial. LISP makes it easy to work with and perform operations on linked lists for example.
* Object oriented languages are imperative languages designed to organise data into a hierarchy of classes which are used to create objects.
Non-imperative languages are languages that are based on the lambda calculus. These are functional and logic languages.
Sept 7/2016:
OK looks like everything in this course in back in order. In the future, if I have any technical issues in a course, I have to remember to contact support ASAP. Kind of frustrating that our implementation of Moodle even allows for the dates to be set wrong in the first place though.
Anyway to finish of the reaming points to cover in the LJ, what I did was cram as much of the reading assignments in my head as possible. I was a little lost on my note taking this week, but after taking the self quizzes yesterday, I think I have a good idea of what I need to review.
So far my ADD like brain has gone all over the place with this LJ, so just to make sure I hit all of the required points for sure…
-
- What surprised me or caused me to wonder?
I think one thing that surprised me is that Lisp is not a non-imperative language. I don’t have experience writing Lisp, but I sort of thought I “knew” of it to be functional, which is non-imperative. According to our readings this week, Lisp is data-oriented and in fact imperative. This made me reevaluate some of my assumptions about other languages, and think more accurately about the differences between the two paradigms.
-
- What happened that felt particularly challenging? Why was it challenging to me?
Noted above, but the biggest challenge for me this week was handling a pretty heavy load of reading assignments without having the self quizzes. I think I rely on the self quizzes so much, that it through my entire study plan off, and even my mood, which in turn also affected my studies.
-
- What skills and knowledge do I recognize that I am gaining?
A new way of thinking. That’s the best way to put it. Even though I have used some functional like features such as first class functions in JavaScript, I think I still have a hard time getting out of the imperative mind set. I look forward to being able to think differently about programming, and languages in general.
-
- What am I realizing about myself as a learner?
Really nothing new. I love learning. I love helping others learn. And no matter how tired or frustrated I get, I can’t help myself, I keep learning new things, and helping others learn too. I just need to feel progress I guess.
-
- In what ways am I able to apply the ideas and concepts gained to my own experience?
Well for starters, I think it’ll be easier to learn Haskell when I have a better foundation of the core aspects making up non-imperative languages. When I first looked at Haskell, it was only with the intent of playing around and seeing what the fuss is about. I think not understanding the difference between imperative and non-imperative languages held me back a little back.
That’s it. Unit one is in the bag. Tomorrow my plan is to make it to the gym for a half hour before work, and if I make into the office before anyone else, may work on some school for a bit too.