JA8. Learning Journal 8¶
Statement¶
The Learning Journal is a tool for self-reflection on the learning process. In addition to completing directed tasks, you should use the Learning Journal to document your activities, record problems you may have encountered and to draft answers for Discussion Forums and Assignments. The Learning Journal should be updated regularly (on a weekly basis), as the learning journals will be assessed by your instructor as part of your Final Grade.
1. Describe what you did, You need to describe what you did and how you did it¶
This was the final week of this course; it was about the concepts of logic programming and introduction to Prolog language. I started by watching attached videos and reading the text; The discussion assignment asked about the applications of logic programming in real life.
2. Describe your reactions to what you did¶
I enjoyed this week’s content as this was my first time to learn about logic programming. I am glad that I am learning it now as my next course will be about machine learning and I think that logic programming will be useful in it.
The text almost touched the surface of logic programming and Prolog, to the extent it feels easy and fun; but I genuinely believe it is more complex down the road, and it needs more time to master and build something useful with it.
3. Describe any feedback you received or any specific interactions you had. Discuss how they were helpful¶
I did not receive any interesting feedback that worth mentioning.
4. Describe your feelings and attitudes¶
I have mixing feelings as I’m very exciting about the concepts of logic programming and the problems they solve; but also hesitate to adopt it in my skill set as I’m afraid that it will be difficult to master and use.
5. Describe what you learned¶
The text started by explaining what is logic programming and the difference between it and other programming paradigms. It then moved to Prolog; we learned about the syntax of Prolog, and about how it builds knowledge base of facts and rules (relations) between them. Using atoms, constants, and variables, we can build clauses of complex terms that define the constraints on the objects in our domain. We can later use the same terms to ask questions (queries) about the knowledge base and get answers from it; analyzing different scenarios and building a tree of possible solutions; aiming to find the correct solution.
6. What surprised me or caused me to wonder?¶
The entire idea of logic programming has surprised me as I never thought that such a thing exists; As I think building such a system in an imperative language like C++ or Java will be very difficult and complex. I’m also surprised that Prolog is a very old language (1972) and I never heard about it before.
7. What happened that felt particularly challenging? Why was it challenging to me?¶
The syntax of Prolog is very different from the C-like languages that I am used to; it was challenging to me to understand it and to write it. I think that I need to practice more to write basic Prolog programs.
8. What skills and knowledge do I recognize that I am gaining?¶
Clearly the course gave me insights beyond the imperative programming that I used to do; I learned about compilers, and how to build them, the grammar of programming languages, and the concepts of imperative, scripting, functional, and logic programming. Down the road there was a lot of complex concepts like type systems, type checking, and type inference, currying, higher order functions, lazy evaluation, and logic programming.
9. What am I realizing about myself as a learner?¶
I realized that I only have limited skill set and there is more on the world to explore and see; hopefully this course has given me the vision to walk the path of learning any new programming language and to be able write useful stuff with it quickly.
10. In what ways am I able to apply the ideas and concepts gained to my own experience?¶
I think that I can apply the concepts of logic programming in my next course about machine learning; I also think that I can use my knowledge about functional programming in my work as we adopted this paradigm in our code base using TypeScript.
11. Describe one important thing that you are thinking about in relation to the activity¶
I did not like functional programming languages like Haskell as I’m very used to imperative languages like Typescript; I think I will never write code in a functional programming language, but applying the concepts of functional programming like immutability, higher order functions, and recursion in imperative languages is very useful.
References¶
- Ben-Ari, M. (2006). Understanding programming languages. Weizman Institute of Science.