Session 13

CS50X Lesson 1 // PP 9, 10, 11, 12, 13, 14, 15

Recently, things have been pretty busy at work (I accepted a new rotation) so I have been getting a little behind on these posts. However, I have made some pretty good progress on these PP exercises, so I wanted to check in. Also, I expect that I will start posting more frequently once I get past the review material (LPTHW, PP, etc…) and move onto some more interesting / challenging stuff.

First, I should report that I watched the first lecture video for CS50X, which is an admission requirement for Amazon Technical Academy, a program which re-trains non-technical employees as Software Development Engineers (SDEs). The lecture was very engaging and interesting, much more-so than I expected. It’s pretty cool that I can now explain how numbers work in binary after just a 30-second explanation! However, it does seem that the course is much more focused on concepts than just practical coding skills. Ultimately, my goal is to learn software architecture, hardware, algorithms, and all of the computer science concepts, but with limited time I need to focus on practical knowledge that can be applied to my work or personal projects, otherwise I fear that I will pick up lots of concepts, and have no practical way to apply them. So, just to clarify, my goal for this blog and course of study is to:

  1. Learn Python’s syntax
  2. Practice that syntax until I am proficient with it
  3. Choose a specialization area (data science, web applications, etc…) and learn the basic of that area
  4. Choose a project in that area
  5. Learn all of the deeper concepts behind how the tools / libraries I use for the project work (algorithms, math, CS principles, etc…)
  6. Choose a new specialization area and project
  7. Repeat until I have learned a bunch of specializations and CS concepts (and mastered Python’s syntax and libraries)

With this approach I hope to learn some of the fundamental computer science concepts via projects and fill in the gaps in my knowledge later. For example, I would rather reverse-engineer a recommendation engine than read a bunch of books on how recommendation engines work . If I get stuck, I will read those books to get unstuck, but I want my learning to be driven by practical application, not accumulation of esoteric knowledge.

Because this is the approach that I have chosen – I don’t think CS50X really ties in with my current learning plan. I definitely plan to take the course eventually to fill in the gaps in my knowledge (or if I am admitted to ATA), but for now, I think Lesson 1 is where I will stop.

Now, in terms of the PP lessons. They covered default arguments to functions:

def get_input(prompt=”Please provide your input “)

They also covered set() which is an un-ordered list without duplicates, reversed() and reverse(). The first will copy a list in reverse, the second will reverse the original list (I think…). I have had some issues with methods like reverse() returning None when I don’t expect it. I need to play around with this some more to make sure I fully understand how it works. It seems to relate to Python’s memory management model, which I found an excellent explanation on (that I only partially understood) here: https://jeffknupp.com/blog/2013/02/14/drastically-improve-your-python-understanding-pythons-execution-model/.

Whew, that was a long one!