Last week I blogged about study strategies and mentioned that my note-taking techniques could be improved, which raises the question: how does one take good notes?
AcademicTips.org provides some helpful Note Taking Techniques. For example, retyping your notes can be helpful. The first time you take notes on a topic, you may not totally understand it, so it helps to revisit the notes again and add more context. This is similar to the Feynman Technique, which can be applied to iterative note-taking:
Teach yourself the topic as you study
Identify knowledge gaps in your notes
Simplify and clarify your notes as you improve them
Review and repeat until you fully understand the topic and can remember it
The Zettelkasten Method is a useful framework for note-taking, especially with digital notebooks, which can easily create an interconnected note database with tags. How to Take Smart Notes teaches Zettelkasten, and the author also offers a course on doing Zettelkasten with Obsidian.
Ethics in tech
We had some readings this week on ethics in tech, and we also chose a topic for an ethical argument essay we’ll write. I’m planning on writing about lethal autonomous weapons systems, which obviously brings up a lot of ethical questions. The ACM Code of Ethics and Professional Conduct is useful for grappling with these kinds of issues, especially the principles of avoiding harm, serving the public good, and respecting fairness in decision making.
What every computer science major should know
In his blog post, Matt Might outlines some topics that CS majors should know. A few topics that stood out to me were emphasizing the importance of technical communication, having a strong portfolio, and the becoming comfortable with the Unix philosophy.
I’m glad that CS Online gives students the opportunity to develop their communication skills by keeping a technical journal, which can also serve as a portfolio. Technical writing is an essential skill for engineers because their work is most valuable when it is clearly communicated and understood by others. Writing each week is a great way to develop this skill.
Code of Integrity
After reading the Code of Integrity, I understand why it’s important for academic success. Students must only submit their own work, must not share solutions, and must indicate any assistance they received. Following these rules will make sure that students are actually learning the material, which will contribute to the long-term success of the program and students’ future careers.
Effective study skills are critical for academic success. Dr. Kizlik provides some useful and practical strategies for making effective use of study time, for example, scheduling time to study and studying in an environment that is conducive to learning.
There are a few areas mentioned in the article that I feel I’m pretty good at with respect to studying:
Planning: I try to study at around the same time every day. I make sure to timeblock a few hours each day to study, with a few things I want to get done in that time, and then check off tasks as I go, or revise the task list if plans change.
Study environment: I’ve been studying and working remotely for awhile, so my work/study area is pretty dialed in. I have a standing desk with a couple monitors, a comfortable chair, and I try to keep things organized. When I feel like getting out of the house, I’ll bike to the library to get some fresh air and inspiration.
Thinking skills: I got my first bachelor’s degree in philosophy, which does a great job of teaching you how to read, write, think, and argue. I’ve also taken some design classes and have spent the last few years working on software projects, which has helped to develop my creative abilities.
There is always room for improvement, however, so here are a few areas mentioned in the article that I could work on:
Where to keep notes: I do my best to take good notes during meetings and write down important things, but I could do more to take better notes when studying. I use a lot of different note-taking apps, and things can get kinda scattered. Some apps are better for some things, and other apps are better for other things. In the past, I’ve kept a handwritten notebook, which is great, for example, when I want to draw a diagram, but digital notebooks are my preference, since it makes it a lot easier to search for information and do other useful things with data.
Preparing an outline: when writing an essay, I’ll usually have an idea of what I want to write about, but sometimes I’ll skip making a detailed outline, even though I do agree that writing an outline helps with preparing and structuring an essay. As the old saying goes: plans are worthless, but planning is everything.
The SQ3R method: this was mentioned in the article, and it’s the first time I’ve heard of it. I do usually try to get a quick survey of information before diving in for a better understanding, but I haven’t used a structured approach like this. The testing effect demonstrates how reciting (or recalling) information as you consume it helps with understanding and retention. I’ve always appreciated online courses that have built-in “are you paying attention?” kinds of quizzes, which helps with this.
Time Management
Time management is an essential skill, and what works for one person may not work for another. I’ve tried micromanaging every last minute of the day into iCal events, but this can lead to burnout. I tend to only use calendar events for meetings and appointments, since these are usually less flexible with regard to timing and require collaboration with others.
For daily task planning, I’ve found NotePlan to be most useful. Each day can be planned as a flexible Markdown note, where I can revise and pencil in tasks as the day evolves, which is ideal for keeping a maker’s schedule.
I have a daily note template that I use to plan each day, which allows me to structure my day around healthy habits. Here’s what today looks like:
## Schedule
- [ ] 🧘🏻♂️ Meditate 8:00 AM - 8:30 AM
- [ ] 📖 Bible 8:30 AM - 9:00 AM
- [ ] 💪🏻 Gym 9:30 AM - 10:30 AM
- [ ] 💼 Focus Time 1:00 PM - 5:00 PM
- [ ] Server+ study
- [ ] Linux+ study
- [ ] Work on Industry Analysis Essay
- [ ] Publish blog post
- [ ] 🚶♂️ 10,000 Steps 8:30 PM - 9:00 PM
Learning involves both focused and diffuse thinking, so everything doesn’t always fit into neat and tidy timeboxes. For example, I might study a bit more after dinner for an exam, or use that time to review something I was working on earlier in the day. If there’s a looming deadline, I might skip the gym and spend all day working. This system allows me to impose structure on the day, while still allowing for a lot of flexibility.
I’ve found Kanban to be an effective method for tracking individual tasks, like school assignments. I use a custom integration I made with the Canvas and ClickUp APIs to keep track of all my school assignments in one place, which helps a lot with reducing overwhelm.
Toggl also has a ClickUp integration, which can be helpful with time tracking. Sometimes I’ll use Toggl to track focused work on school assignments, since it has a built-in Pomodoro timer, which can be helpful.
Project Management
Project management makes it a lot easier to accomplish complex goals, especially with a team. By breaking down a project into smaller steps using a work breakdown structure, what might initially seem daunting can be turned into something much more manageable. Deliverables can be transformed into a workstream of tasks and sub-tasks, which can then be assigned to specific team members. When breaking down a deliverable into tasks, work items should be MECE (Mutually Exclusive, Collectively Exhaustive) so that tasks are distinct items, covering the entire scope of the deliverable. Tasks can be visualized, for example, across time using a Gantt chart, which presents a high-level and linear overview of the project, or by status using a Kanban board, showing the current state of individual tasks.
Previous Capstones
After watching the Capstone Festival recording, a few projects stood out to me:
OtterSoft: Hiring is one of the most important responsibilities of any organization, but it can be an exhausting process for both employers and job candidates. With companies like OpenAI set to disrupt hiring, AI-assisted hiring processes will likely receive much more attention in the future. I admire the ambition of the team and how the technical workflow of the project was clearly presented. One thing that would help with a project like this is getting continuous feedback, so that the product is effectively addressing the pain points of users on both sides of the hiring equation.
Security Scan Summary Project: Cybersecurity is critical for large organizations, especially government agencies, and new AI tools like CodeQL should help to keep their data secure. This project did a great job of working with non-technical stakeholders to make cybersecurity risks more understandable. I’m interested in learning more about the impact of this project, how it has set a new standard for cybersecurity reporting at the organization, and how any new processes have been implemented.
Vault JS: Software supply chain attacks are a threat to any organization that uses third-party software, as was recently demonstrated by the recent injection of malicious code into popular npm modules. The JavaScript Obfuscation Model project did a great job of explaining what code obfuscation is and how the project utilized open-source software to integrate a new feature into an existing software product. I’m interested in learning more about how the underlying model works and how it was trained.
Weekly Summary
Things are now in full swing after this week. I met with my team and we created a group resume, which includes our respective skillsets and what services we plan to offer. Reviewing the previous cohort’s capstone projects helped a lot with getting a better idea of what we’ll be working on in the future.
I also learned about some trends in the software development market. AI and ML technologies are projected to continue playing a pivotal role in software development, increasing the productivity of software engineers. Cloud computing is also expected to continue to be an indispensable skill, with some organizations opting for a hybrid-cloud approach.
This week also included some lessons on project management and teamwork skills. Communication and collaboration are essential skills for software engineers, and cloud-based tools can make things a lot easier. David Burkus’ How to Be a Great Team Player offers some helpful advice on working with others, namely, be capable, humble, helpful, flexible, and purposeful. I’ll do my best to follow this advice.
This week was mostly about getting started and learning how to learn with CS Online: meeting classmates, learning more about CSUMB and the program, and getting everything set up so that the next 100 weeks will run smoothly and effectively.
I’ve been working on an industry analysis essay and am writing a case study on Palantir. As part of the research for that, I’ve been reading Alex Karp’s “Aggression in the Lebenswelt”. Trying to not fall too far down this rabbit hole, but it’s an interesting read for anyone who is curious about the relationship between language, power, and legitimacy.
Here’s a neat diagram ChatGPT made:
One of the assignments this week was to explore new ways to interact with ChatGPT as a student. I’m really excited about how CS Online embraces AI, since it is such a powerful tool.
Another assignment this week was also to create this blog post. I’m using WordPress — pretty familiar with WordPress as a developer, but haven’t used it much as a blogger, so this is a great opportunity to learn more about it.