Sometimes it takes a book or a course (or explanation from a mentor) for a topic to finally click for you that you were struggling with for a long time.
For me, it was Stanford's EE261 course that made Fourier Transform click for me. Here is the link: https://see.stanford.edu/course/ee261
Similarly for deep learning it was fast.ai courses.
For programming it was How to Design Programs at www.htdp.org.
Your topic of choice may be anything, not necessarily CS.
* Philip Roberts's What the heck is the event loop anyway? - https://www.youtube.com/watch?v=8aGhZQkoFbQ
* The Story of Asynchronous JavaScript - https://www.youtube.com/watch?v=rivBfgaEyWQ
* JavaScript Callbacks, Promises, and Async / Await Explained - https://www.youtube.com/watch?v=JRNToFh3hxU
* Async Javascript Tutorial For Beginners (Callbacks, Promises, Async Await). - https://www.youtube.com/watch?v=_8gHHBlbziw
* Jake Archibald: In The Loop - setTimeout, micro tasks, requestAnimationFrame, requestIdleCallback, - https://www.youtube.com/watch?v=cCOL7MC4Pl0
Edit... I've been rewatching these videos, reading the MDN docs, the Eloquent JavaScript book, javascript.info, blogs about the subject, etc. This further proves you shouldn't limit yourself to a single resource, and instead fill up the laguna with water from different sources if you will.
>Callbacks are not asynchronous by nature, but can be used for asynchronous purposes.
Glad you mention this because some people make it since like callbacks are a de-facto asynchronous-based concept. Callbacks are simply anonymous functions or lambdas that you pass to asynchronous functions so you can work with the produced values. Correct me if I'm wrong though.
Tangentially, that is a marvelous way to learn something. I often find that in explaining a complex topic I uncover gaps in my own understanding.
For example, coming up with your examples helps a lot. For instance, I found most of the examples quite underwhelming and confusing so I ended up creating my own asynchronous functions to demonstrate the concepts as I go along.
The fact I didn't know about these concepts is the reason why I always struggled to understand examples involving setTimeout, setInterval, etc.
Most videos on YouTube, even from well-known personalities in the programming YouTube community, simply jump into things without context at all even when the videos are titled "for beginners". Even some books and docs simply describe the spec without providing context and motivation.
Edit... Forgot to say Philip does an outstanding job in that video. He's even humble enough to admit it took him a few months to grasp what was going on.
Funnily enough "The Story of React" started playing right after, and I didn't even notice I was listening to another video.
Or, you can upvote it (comment)
Deleted Comment
Deleted Comment
* Async Python in real life - https://guicommits.com/async-python-in-real-life/
* Python Concurrency: The Tricky Bits - https://python.hamel.dev/concurrency/
The resources you suggest are spot on.
AND, async programming will really only click when you do lots of it.
Read tons of async resources like the ones above, write lots of async code. One day you'll realise it's second nature.
>One day you'll realise it's second nature.
This is great but then the curse of knowledge hits you hard haha
Good luck!
[1]: from what I gather asynchronous programming using callbacks isn't used anymore but it might be instructive to start with it, understand the issues with it, and why promises replaced this style.
Also, timbuktu manuscripts - showed a history that I had never really heard of. These are written manuscripts of african scholars which are hundreds of years old, and still exist today. Some record the history of great west african civilizations along with other things they studied (e.g. science, religion, math, literature, ect). I was never taught this history even existed but yet was made to learn the various details about asian, european, middle eastern, central/south american history. This, and the attempts to destroy/steal these manuscripts at various points in history, made it click how serious power of controlling information, and ultimately influencing beliefs can be, with respect to giving legitimacy to the various rulers/authorities. Beliefs/perceptions matter quite a lot. This 1hr lecture is quite good: https://m.youtube.com/watch?v=lQiqyyRfL2Y&t=16s
Behavioral biology class from Dr. Sapolsky (Sanford) - explains a lot of why we behave the way we do, from different biological perspectives https://m.youtube.com/playlist?list=PLqeYp3nxIYpF7dW7qK8OvLs...
https://www.youtube.com/playlist?list=PLkZjai-2Jcxlg-Z1roB0p...
Syria’s Secret Library By Mike Thomson was suggested to me while I was reading the previous book, but I haven't made time to read it just yet.
What it taught me is that effective organizations invest heavily in training newcomers how to do their jobs / processes. I see this everywhere; when I walk into a business and something's "just off," it's almost always because management is dropping the ball on training newcomers how to do their jobs.
In my specific case, I was having trouble getting good bug reports, and my teammates were struggling with poorly written tickets. I had to take the time to explain what the process was for handing off work from QA to developers. Things moved much more smoothly after that. (IE, I had to explain that all tickets needed steps to reproduce, except in very specific circumstances.)
https://www.amazon.com/Myth-Revisited-Small-Businesses-About...
It's shocking to me. Every employee you hire is going to have to be trained on SOMETHING that is new to them or specific to your company. Why dont companies spend more time developing onboarding and training programs that actually work?
Separately, in larger companies, there will be significant variance between the onboarding process of teams/orgs.
This happens to me irrespective of whether I went through the painful learning curve just recently or several years in the past. Once I am comfortable with a topic, I cannot approach it from a newcomers perspective.
So I think having a systematic approach to KT and training will help.
> In my specific case, I was having trouble getting good bug reports,
I just had to avoid the word "process."
What I've also observed is that some people in the startup scene think processes are restrictive. That's usually a sign of a company / leader that's too immature to effectively manage through high growth. (You can't have exponential startup growth without processes.)
I was a rather humble support guy for COBOL applications, so I had to learn COBOL, which I did.
I was sent by my manager for a one-off, three-day "advanced COBOL" course.
It wasn't about advanced COBOL; it was an advanced course on the seven-pass Burroughs COBOL compiler. Memory was short in those days, hence the seven passes; intermediate results were files on disk. We learned that by nulling the executable for a chosen pass, we could hack the intermediate files, to do things COBOL programs weren't supposed to do, like calling OS functions.
I learned how parsers work, and how parse trees are represented. I learned about intermediate code, optimisers, interpreters, and code generators. I got interested in compilers, and wrote a source-level debugger. It was just a three-day course, but it was incredibly valuable to me. Perhaps life-changing.
Perhaps it's not so much that that course made something click that wasn't clicking for me; rather, it inspired an interest in me that simply wasn't there before.
As I said this was a one-off course. There was about seven of us, and I don't believe anyone else ever received that training.
https://www.udacity.com/course/design-of-computer-programs--...
2. Crafting Interpreters by Robert Nystrom is of similar quality. There are a lot of 'oh that's how that works' moments in this book.
https://craftinginterpreters.com/
3. Doyle Brunson's Super System 2 is of a similar nature, but for poker. It's outdated these days because the nature of the game has changed so much due to the internet and a shift in meta strategy, but it's really insightful in understanding the human aspects of the game. His perspective as a 'gambler' rather than poker player is also unique, because he talks a lot about prop bets and identifying when you have an edge in a bet.
4. Stephen King's "On Writing" is a masterpiece of a memoir of a man and his craft. My own writing improved significantly as a result of this book.
Do you reproduce all, or most, the code yourself? That’d be a great way to make everything stick but makes progress terribly slow.
Personal time/task management- The classic, Getting Things Done(https://www.amazon.com/Getting-Things-Done-Stress-Free-Produ...). The power this has on people cannot be understated. Turns out that most of how life is conducted is rife with forgetfulness, decision paralysis, prioritization mistakes, and massive motivation issues. This book gives you specific workflows to cut through these in a magical way.
Personal Knowledge Management- The equally classic, How to Take Smart Notes(https://www.amazon.com/How-Take-Smart-Notes-Technique/dp/398...). Where GTD(above) does this for well-defined tasks/work, this book does it for open-ended work, giving you an amazing workflow for introducing "Thinking by Writing", which is frankly a superpower. This lets you see things your friends/colleagues simply won't, lets you deconstruct your feelings better, learn new/deeper subjects faster, and connect thoughts in a way to produce real insight.
For Product/Business Management, Gojko Adzic's "Impact Mapping"(https://www.amazon.com/Impact-Mapping-software-products-proj...) feels like it could make nearly every software team/business 10x better by just reading this book. I've personally watched as enormous portions of my life were spent on things that barely moved the needle for companies, or merely didn't keep the metric from rising. So many projects taken on faith that if you work on X, X will improve, without ever measuring, or asking if you could have accomplished that with less. The world looks insane afterward.
Plus, org-mode really helps to make the over-engineered parts more frictionless--I run my life off of org-agenda now, where creating a new project, capturing tasks for it, and refiling them as needed are only a few keystrokes away. Keeping with the theme of hyped productivity books, I also take inspiration from Deep Work to tag certain actions as being ":deep:", so that after clocking into those tasks, I can look at a clock report at the end of the day/week to understand how many hours I actually spent working on "important" stuff. It's very motivating to make that number go up!
I know not everyone feels the need to be so intentional about their productivity landscape--indeed, a lot of very naturally productive people I know explicitly /don't/. But for those of us who aren't one of those magicians, I highly recommend putting some thought into at least a bare-bones system.
I've been missing it all my life! I'm on my way on getting wealthy and rich!
I've had a project going to build my own but admittedly have been somewhat dumb/lazy about it.
This was "optional" reading in my Undergrad Calculus class at Brown, I probably was the only student who bothered to read it, and it made most of engineering a breeze for the next 3.5 years, whether electromagnetism, fluid dynamics, etc.
LinAlg was the only maths course I needed in my interdisciplinary study program. I had struggled to grasp maths in high school, but these lectures really made it click for me and I passed my university's class with a B+.
https://ocw.mit.edu/courses/18-065-matrix-methods-in-data-an...
Along with the wonderful MIT videos! Just a man and a chalkboard, explaining the core insights and relationships behind linear algebra concepts.
I found the rest of the lectures a bit less of an epiphany, I think he meanders sometimes too much, but that’s a personal note. The whole series is absolutely incredible.
I should revisit them, I remember them being great!
Dead Comment