Skip to main content

Taking Notes

Over the last 100 days, my learning curve has been incredibly steep. Note-taking has always been a habit of mine, dating back to my first year of college. I've always enjoyed writing down what I've learned. Jotting down notes provides me with a sense of finality and reinforces my understanding. It also helps me quickly revisit and refresh concepts when needed.

I have amassed over 50 notebooks filled with notes on computer science and other areas of interest. I meticulously preserve these notebooks and carry them with me wherever I go, hoping to revisit them someday. However, upon reflection, I've realized that many of my notes suffer from some significant shortcomings:

  • Outdated Information: The field of computer science is constantly evolving. Consequently, many of my notes are now outdated. While notes on fundamental topics like C++, Java, Algorithms, and Design Patterns remain relevant, others, such as those on Hyperledger, Git, Networking, JavaScript, TensorFlow, NumPy, Angular, Android, and React Native, have become obsolete. I often find myself referring to the official documentation instead of my own notes. Moreover, my notes contain solutions to past challenges. However, when faced with a similar problem today, my initial instinct is to solve it independently, even though a solution might already exist in my notes. I've observed that only notes pertaining to core foundational concepts retain their value over time. These foundational concepts, while their applications may evolve rapidly, remain fundamentally sound.

  • Poor Organization: When embarking on a new learning journey, I often find myself learning prerequisites after grasping the core concepts. This leads to disjointed and disorganized notes. Despite maintaining an index at the beginning of each notebook, I struggle to determine the optimal learning sequence. The presence of prerequisites for prerequisites further complicates the learning process. This issue is exacerbated when I switch notebooks or divide a single notebook into multiple sections. For instance, notes on a particular topic might span several pages within one notebook and then continue in another, creating a fragmented learning experience. The challenge lies in creating notes that are as easily understandable and accessible to my future self as they are to my present self.

  • Lack of Motivation: I sometimes find myself losing motivation to take notes, questioning their future utility. However, I inevitably regret this lack of foresight when I'm forced to relearn something I should have already documented.

At my current firm, I'm constantly learning about internal tools and technologies that may not be directly applicable outside of the company. Furthermore, the rapid evolution of these internal tools renders many of my notes quickly obsolete. The sheer volume of information I'm absorbing daily has resulted in a cluttered and often difficult-to-read collection of notes.

To address these challenges, I've identified a few helpful strategies:

  • Provide Comprehensive Context: Remember that your notes are intended for your future self. Therefore, it's crucial to provide sufficient context before delving into the core material. Clearly outline any prerequisites required for understanding the subsequent notes.

  • Focus on General Principles: Our brains tend to retain images and overarching concepts more effectively than raw text. Therefore, prioritize summarizing key takeaways and creating a broader framework for your learning. This framework should connect your current learning to your existing knowledge base, ensuring a clear understanding of the bigger picture.

  • Prioritize Foundational Concepts: When learning a new programming language, delve deeply into core concepts like language design, underlying motivations, and inherent benefits. While syntax can be learned through practice, a strong understanding of foundational principles is crucial. Similarly, studying the design principles of a framework will enhance your conceptual grasp of its architecture.

  • Document External Resources: For rapidly evolving technologies, instead of meticulously documenting every detail, focus on noting the location of official documentation. This ensures you always have access to the most up-to-date information.

  • Embrace Digital Organization: Scan your handwritten notes into PDFs and store them in the cloud. This approach eliminates the need to physically carry notebooks and provides a secure backup for your valuable knowledge.

I hope these strategies prove helpful to you as well. If you have any other effective note-taking techniques, please share them in the comments or via email. I'm always eager to improve my own note-taking practices.

Comments

Popular posts from this blog

Architecture of High Performance Computing Server at BIT Mesra

A High-Performance Computing (HPC) server was installed a few years back. It was a replacement for PARAM 10000, the supercomputer that is no longer available for use. Initially, the HPC was under the Department of Computer Science. The Department of Chemical Engineering and Biotechnology was the primary user of the HPC (mostly for simulation purposes), and so the administration decided to move it under the Central Instrumentation Facility (CIF). You need permission from the CIF to access the HPC. HPC is only available for research purposes, and you need to provide a good reason along with a proper recommendation from a professor to gain access to the HPC. The HPC is at least 20 times more powerful than the most powerful PC that anyone has on campus. Also, I recently checked the usage and realized that not even 10% of its power is being utilized. I hope this blog post will help you in understanding the core architecture of the HPC. Architecture The Architecture of High Performance Compu...

Setting up Machine Learning Environment on High Performance Computing Server

In the last article, I discussed the architecture of the HPC. If you have not read that article, I would recommend that you read it before proceeding with this one. Architecture of High-Performance Computing Server at BIT Mesra  The power of HPC can be utilized for its most important application in the field of computer science: Machine Learning. I am assuming that you already have obtained your SSH credentials to log on to the master node. Also, we will be setting up the environment in Python. Let's jump straight to the steps. How To? Step 1: Download and Install Anaconda on the Master Node Note that you are not the root user of the HPC. You are just a regular user, and therefore, administrative commands (such as sudo or su) will not work. Anaconda has made it much easier to install Python packages for non-root users, and we will be using Anaconda for setting up Python 3 and installing the required packages. Log in to the master node     > ssh be1005815@172.16.23.1 Go...