Results: 72
-
Authorization
2022-08-28 12:53
Approaches and learnings about authorization and authentication in software engineering.
-
Aristotle
2022-06-05 07:54
Ancient Greek natural-philosopher and intellectual father of nearly all western civilization and thought.
Philosophy
-
Leverage
2021-06-22 11:46
- 202106221150 Procrastination kills leverage by keeping our actions focused on easy, small tasks instead of challenging meaningful ones.
- 202304102048 Compounding Interest/returns are some of the highest leverage things that we can interact with. #thread
-
Philosophy
2021-09-07 12:11
- 202109071229 Ancient Philosophy
- Medieval Philosophy
- Renaissance
- Early Modern, 202109071219 Age of Enlightenment, 17th and 18th century
- 202109071330 Late Modern Philosophy, 19th century
- Contemporary
Major areas of philosophy
-
Senior engineer
2022-06-11 22:36
Defining what makes an engineer a “senior engineer” is a murky task. There will always be differences from one company to another, but there are some general patterns that most people agree on.
Skill
- Achieved mostly independent ability to solve any task given.
- Knows when they need to involve others for things that they don’t have the skills for or believe should be group efforts
Responsibilities
-
Ownership
2024-08-18 22:08
Notes on the meaning, implementation, and outcomes of ownership of our work.
The global network of capital essentially functions to separate the workers from the means of production.
Philosophically
- 202403131332 Techno-bourgeoisie
- 202112291821 The things we own end up owning us
In Engineering
- 202407081040 If you can't cancel the project you're not the product owner
- 202408060133 Caution and perfectionism hurt progress
- 202312091511 There is no such thing as sacred code
- 202206171206 Delivery Performance vs Value Delivery
-
Project structure notes should answer a question
2021-07-29 23:12
Ask a question to start a knowledge project. This could be as simple as focusing your interest to an area worth reading, exploring, and adding to the Zettelkasten. Or this could be something as final as the thesis for an article, essay, paper, blog post etc.
Once you have your question to focus your project, answer it with the standard workflow while making sure to do your thinking inside of the structure note for that project.
Conversely, there are good structure notes that are organizational in nature. They implicitly ask the question "what do we know about this topic?" but they are not "project structure notes" as described here. They aren't about a specific project to learn research, learn, or develop ideas.
-
Bloom's taxonomy
2021-10-26 09:23
Benjamin Bloom created a system for classifying educational objectives across a series of conferences from 1949 to 1953.1 His system includes three sections:
- 202107282144 Bloom's taxonomy of knowledge
- 202110260924 Bloom's taxonomy of emotion
- 202110260925 Bloom's taxonomy of actions
-
Wikipedia contributors. (2021). Bloom’s taxonomy. In Wikipedia. https://en.wikipedia.org/w/index.php?title=Bloom%27s_taxonomy&oldid=1048998186 ↩
-
Microblog
2022-08-27 00:00
This page serves as a simple index of all my microblog posts. This list should be roughly equivalent to searching for the #microblog tag.
If you're looking for my longer #blog posts see 201610270000 Tech — Work — Ramblings.
- 202410220101 The Final Edition of Embedded Muse
- 202410201110 Engineering Multi-classing
- 202408250920 1BRC in rust in depth
- 202408220939 Go is not worth it
- 202405051458 Mobile Content Width
- 202405051251 Timeout Killer
- 202405021450 Ideating
- 202404232122 Masonry Layout CSS
- 202404232120 Hell yeah NASA
- 202208270311 Up too late
-
The Principles of Product Development Flow
2023-08-24 17:43
- 202309011312 The primary goal in product development is to make good economic decisions
- 202309011322 We need more information for complex decision making
- 202309011327 Define metric to value transfer functions using sensitivity analysis
- 202309011333 Quantify your cost of delay
- 202309011342 Measure output instead of activity
- 202309021620 Important trade-offs have u-curve optimizations
-
The Software Craftsman
2023-12-09 13:23
Chapter 2 - Agile
- 202312161343 You don’t do Agile
- (18 discussion) “Focusing purely on the process and treating software development like a production line leads to average 9-to-5 developers doing what they are told — they become factory workers.” This is what we do here with mobbing
- (19 discussion) bad faith argument in paragraph 2
Chapter 3 - Software Craftsmanship
-
Consequentialism
2022-06-05 15:24
Nearly identical but more precisely a superset of 202206051526 Utilitarianism. These are often used interchangeably in lay terms. One of the three main western schools of thought in 202206051528 Moral Philosophy, consequentialism defines right action in terms of its consequences.1 The saying "the ends justify the means" can be interpreted in a consequentialist way.
Prominent classical consequentialists (and more specifically utilitarians) are x202206111658 Jeremy Bentham and x202206111659 John Stuart Mills.
-
Schur, M. (2022). How to be perfect: A foolproof guide to making the correct moral decision in every situation you ever encounter anywhere on earth, forever. ↩
-
-
Moral Philosophy
2022-06-05 15:28
One of the big questions of all human kind that has been prevalent in 202109071211 Philosophy since ancient times. What it means to be moral, and similarly but slightly differently, what it means to act ethically.
There are 3 main schools of thought in the western tradition of moral philosophy:1
202206052202 Moral desert is a related concept of "what people deserve".
-
Schur, M. (2022). How to be perfect: A foolproof guide to making the correct moral decision in every situation you ever encounter anywhere on earth, forever. ↩
-
-
Late Modern Philosophy
2021-09-07 13:30
Usually considered to begin in 1781 when Gotthold Ephraim Lessing died and 202109071212 Immanuel Kant's Critique of Pure Reason appeared. This continued through the 19th century and saw a divide between Continental (interested in general frameworks of metaphysics) and analytic (focused on issues of epistemology, ethics, law, and politics) philosophic traditions.1
Philosophers
-
Wikipedia contributors. (2022). Western philosophy. In Wikipedia. https://en.wikipedia.org/w/index.php?title=Western_philosophy&oldid=1098280762 ↩
-
-
Socrates
2021-09-07 12:25
Socrates was a Greek philosopher who lived from 470–399 BCE in Athens. He's credited as the founder of western philosophy and is among the first recorded moral philosophers of the ethical tradition of thought. Though he wrote no texts himself, his teachings were passed down to us through his students — primarily Plato and Xenophon — as dialogues in a question and answer style.
Works
- N/A
Influence
- Western Philosophy
- 202109071229 Ancient Philosophy
- 202206051528 Moral Philosophy
-
Utilitarianism
2022-06-05 15:26
A more specific subset of 202206051524 Consequentialism, though frequently used interchangeably with that term1. Classic utilitarians are x202206111658 Jeremy Bentham and x202206111659 John Stuart Mills. Utilitarianism differs from consequentialism as a whole by selecting "utility" — defined classically as human goodness and well-being — as the desired consequence to maximize.
-
Schur, M. (2022). How to be perfect: A foolproof guide to making the correct moral decision in every situation you ever encounter anywhere on earth, forever. ↩
-
-
Ancient Philosophy
2021-09-07 12:29
In the tradition of Western Philosophy, ancient philosophy refers to almost exclusively ancient Greek philosophy. Beginning in the 6th century BC, marking the end of the Greek Dark Ages, Greek philosophy continued through the Hellenistic period and later the period of Roman Greece, ending with the rise Roman Christianity and the transition to the period of Medieval philosophy.1
Periods
- Pre-Socratic
- Classical
- Hellenistic and Roman
Philosophers
Thought Experiments
-
Wikipedia contributors. (2022). Ancient Greek philosophy. In Wikipedia. https://en.wikipedia.org/w/index.php?title=Ancient_Greek_philosophy&oldid=1094833012 ↩
-
Immanuel Kant
2021-09-07 12:12
A German philosopher, central thinker of the 202109071219 Age of Enlightenment, and one of the most influential philosophers in all of western philosophy.1
Works
- Critique of Pure Reason
- Groundwork of the Metaphysics of Morals
- Metaphysics of Morals
- Critique of Practical Reason
- Critique of the Power of Judgement
Influence
- Kant popularized the phrase 202109060833 Sapere Aude as a motto for the 202109071219 Age of Enlightenment.
- Kant is most famous for his work in 202206051530 Deontology, the Critique of Pure Reason, and his 3 formulations of the x202206051544 Categorical imperative.
-
Immanuel Kant. (2023). In Wikipedia. https://en.wikipedia.org/w/index.php?title=Immanuel_Kant&oldid=1172510977 ↩
-
Age of Enlightenment
2021-09-07 12:19
The age of enlightenment — or simply The Enlightenment — was an intellectual movement that dominated Europe in the 17th and 18th centuries. The enlightenment included a range of ideas centered on the value of human happiness, the pursuit of knowledge obtained by means of reason and the evidence of the senses, and ideals such as liberty, progress, toleration, fraternity, constitutional government, and separation of church and state.1
Philosophers
-
Wikipedia contributors. (2022). Age of Enlightenment. In Wikipedia. https://en.wikipedia.org/w/index.php?title=Age_of_Enlightenment&oldid=1104162837 ↩
-
-
Compounding Interest
2023-04-10 20:48
There is a quote attributed to Einstein that's probably made up but still good.
Compound interest is the eighth wonder of the world. He who understands it, earns it; he who doesn't, pays it.
Or sometimes in a different phrasing,
Compound interest is the most powerful force in the universe.
Both of these sentiments strike at the heart of the power of compound interest. Unfettered exponential growth can make even the smallest changes today, radically valuable in the future.
- 202304102024 Great people have a great deal of drive to do great things
- 202304112152 Intellectual investment is like compound interest
- 202109060836 Knowledge should accumulate
- 202106221146 Leverage
- 202109121530 Maturity of interdependence
- 202109251140 Play long term-games
- 202308271610 Quarry workers' creed
-
Information and intelligence
2022-08-10 10:13
Information and intelligence are subtle concepts. Subterfuge, espionage, propaganda, mis-information, and narrative intent are just some of the areas that can cloud the truthfulness or usefulness of information and intelligence.
More than ever it's important that 202109060835 Knowledge is constructed in the receiver, but authors and gatherers of information and intelligence can work to induce an intended construction.
It's important to use tools like 202203210833 Systems thinking to try and understand things. It's vital to cut through what we would like to be true to the base facts of reality (202109251155 Desire vs expected outcome in decision making and 202203210830 When your model and reality conflict, reality is always right).
Thoughts on the topic
-
A Career
2022-05-23 13:12
What does it take to have a long and prosperous career? What is success? What is happiness?
Entire careers in themselves
Strategy
- 202304041047 Do significant things with your life
- 202304041619 Keep the whole in mind
- 202205231130 Knowing when to leave
- 202304041100 Learn, don't memorize
- 202109060825 My next level
- 202206122047 Career checkup template
- 202109251140 Play long term-games
- 202106221713 Seven habits of highly effective people
- 202206112312 Stop chasing ghosts
- 202206112313 Stop preening
- 202110231433 Think week
- 202109081301 You'll never get what you don't ask for
- 202206112310 Work on what matters
Philosophy
- 202110212231 Differentiate between self-doubt and idea-doubt
- 202109060816 Do your own thinking
- 202112180923 Don't fear failing, fear failing to try
- 202109251152 How much is enough
- 202112291821 The things we own end up owning us
-
The Myth of Sisyphus
2024-06-13 17:15
The fundamental subject of The Myth of Sisyphus is this: it is legitimate and necessary to wonder whether life has a meaning; therefore it is legitimate to meet the problem of suicide face to face. The answer, underlying and appearing through the paradoxes which cover it, is this: even one does not believe in God, suicide is not legitimate. Written fifteen years ago, in 1940, amid the French and European disaster, this book declares that even within the limits of nihilism it is possible to find the means to proceed beyond nihilism.
– Albert Camus, Paris, March 19551
-
Camus, Albert, and Justin O’Brien. The Myth of Sisyphus. Second Vintage international edition. New York: Vintage International : Vintage Books, a division of Penguin Random House LLC, 2018. ↩
-
-
Systems thinking
2022-03-21 08:33
Thinking of stocks and flows is one of the core tenets of systems thinking.
- 202205021252 Stock and flow
- A knock-on effect of systems thinking with stocks and flows is to find causal chains and be able to do 202110220853 Second-order thinking
- 202205092134 The Art of Doing Science and Engineering discusses systems thinking without using the term.
- 202401291411 Thinking in Systems
Safety measures for systems thinking
- 202203210832 Models are necessarily incomplete
- 202203210831 Models are immutable but reality isn't
- 202203210830 When your model and reality conflict, reality is always right
-
Emergence
2021-04-29 15:40
The combining of data, events, or constituent parts can produce effects that are not in the details. The sum of the parts is not equal to the whole.
A similar but opposite effect is when the combining of data obscures effects in the details. This and emergence are illustrated by 202208211331 Simpson's paradox.
Prerequisite conditions for emergence
- Group dynamics and sociological phenomena are sufficiently complex to create emergent properties of the whole compared to the individual parts. (202104291527 Live in the ambiguity)
- 202107292108 Simple primitives don't guarantee simple constructs, so complexity of primitives can't be used as a bell-weather for identifying emergent systems.
- 202110231515 Feedback loop, 202110231516 Feedforward loop, and 202110231517 Self-reference are common sources of emergence.
Outcomes of emergence
- Sometimes 202402201204 Resilient, self-organizing systems will generate hierarchies and furthermore 202402241722 Hierarchies enable iterative progress. This property is emergent from simple laws.
-
Poetry and quotes
2022-08-22 13:05
- 202208221306 In the Desert
- 202210141736 Ozymandias
- 202307282003 An Ode
- 202308271554 This be the verse
- People (society) plant trees under whose shade they will never lie
Literature Quotes
- 202208221635 Beauty will save the world
- 202208221321 I claim them all
- 202209201414 Science can only amplify
- 202209121025 The world wants new men
- 202211021054 Yearn for the vast and endless sea
- 202304041631 The end of all things
- 202308271610 Quarry workers' creed
- 202408221254 Ten thousand times the spider would rebuild
- 202408221304 Desolation tries to colonize you
- 202408232359 The abyss gazes back
Quotes
- 202408222021 Have fun and be terrified
- 202411161349 As if I've deliberately come back to this one day
- "An investment in knowledge always pays the best returns" - Benjamin Franklin
Stories and Folklore
Songs
Latin
-
A Life
2023-04-03 13:17
What does it take to have a long and prosperous life? What is success? What is happiness? What is meaning? What is a good life?
Inspiration
Praxis
- 202205231312 A Career
- 202308141518 Be a pack rat for little facts
- 202308141534 Be able to have a conversation about anything
- 202106221744 Begin with the end in mind
- 202304041047 Do significant things with your life
- 202109060816 Do your own thinking
- 202112180923 Don't fear failing, fear failing to try
- 202110181231 Don't tacitly endorse bad behaviors
- 202109251152 How much is enough
- 202109090947 Idea gardening
- 202308141538 It's your life
- 202304041619 Keep the whole in mind
- 202203231647 Leading from vision
- 202304041100 Learn, don't memorize
- 202109121530 Maturity of interdependence
- 202112221953 My bucket list
- 202104291947 Our purpose as leaders is to serve others
- 202109251140 Play long term-games
- 202106241524 Sharpen the saw and grow
- 202112291821 The things we own end up owning us
- 202109071223 The unexamined life is not worth living
- 202208211352 There is no shortcut to learning
-
The four types of leaders
2021-06-22 17:12
There's a theory that categorizes leaders into at least one of four archetypes.1 There can be overlap among these and we can work at being better in areas that aren't natural for us, but we all have at least one of them that comes without as much effort as the others.
As with other personality categorization frameworks, the value of putting ourselves in these categories is not to define what we will or must do, rather to give us insight into our behaviors. We can augment our strengths and mitigate our weaknesses only if we're aware of them.
Which of these types do I fall most naturally into?
I think I’m most naturally a visionary style leader with a need to improve my operator skills.
The Four Types
- 202107240951 Visionary leadership style
- 202107240952 Operator leadership style
- 202107240953 Processor leadership style
- 202107240954 Synergist leadership style
-
McKeown, L. (2017, June 27). What’s Your Leadership Style? The Do Book Company. https://medium.com/do-book-company/whats-your-leadership-style-fdc8bad45fe0 ↩
-
Seven habits of highly effective people
2021-06-22 17:13
The seven habits of highly effective people are described in the eponymous book by Stephen R. Covey.[^covey2004] Covey discusses how people can see the same things and have different perspectives. He also discusses how maturity is a continuum that can be describes as moving from dependence to independence to interdependence.
An observation: 202109251019 Highly effective people are leaders.
Circles of Influence
Maturity Continuum
- 202109121550 Maturity of dependence
- 202109121536 Maturity of independence
- 202109121530 Maturity of interdependence
The Seven Habits
Habits for building independence
- 202106241529 Be proactive
- 202106221744 Begin with the end in mind
- 202106241528 First things first (Covey uses the 202106241531 Eisenhower matrix of task value as an example of how to define what should be put first)
Habits for interdependence
- 202106241527 Think win-win
- 202106241526 Seek first to understand, then to be understood
- 202106241525 Synergize
Habits for continual improvement
-
Protein folding
2021-10-22 09:37
Protein folding is the process of determining the 3D shape of a protein from its amino-acid sequence. The 3D shape determines the protein's function and linking the amino acid sequence to the structure therefore links the sequence to the function. This has long been regarded as one of if not the hardest problem known to humanity due in part to 202110221009 Levinthal's paradox.
DeepMind's Breakthrough
DeepMind's program for determining the 3D shapes of proteins stands to transform biology[^callaway2020]
The Google owned AI company DeepMind made a massive leap in 2020 in our ability to predict how protein folding works. DeepMind's AlphaFold outperformed all the competitors by a wide range in the biennial Critical Assessment of Structure Prediction (CASP) contest. One scientist even went so far as to say, "in some sense the problem is solved."
It's a game changer. This will change medicine. It will change research. It will change bioengineering. It will change everything.
— Andrei Lupas, Max Planck Intitute for Development in Biology[^callaway2020]
In many cases, the structure predicted by DeepMind was indistinguishable from the state of the art experimental methods of directly measuring protein shapes.
-
Evergreen notes
2021-09-09 11:29
Valuable notes are written and organized to evolve, contribute, and accumulate over time, across projects (202109060836 Knowledge should accumulate). This is different than taking transient notes because 202209091140 Transient notes don't create knowledge.[^khoe2016] 202209091141 The goal of note-taking is not to be better at taking notes, it's to be better at thinking. In order to make notes valuable we need them to be timeless.1
We can make our notes timeless by making sure that they adhere to a few key principles:
- 202209091130 Notes should be atomic
- 202109091131 Notes should surprise us
- 202109091132 Notes should be densely linked
- 202109091133 Notes should associate organically
- 202109091134 Notes should be concept-oriented
202209091142 Notes are the fundamental unit of knowledge work. This practice is similar and different to Niklas Luhmann's 202107272242 The Art of using a Zettelkasten.[^luhmann2021]
-
Matuschak, A. (2017). Evergreen notes. Andyʼs Working Notes. https://notes.andymatuschak.org/z4SDCZQeRo4xFEQ8H4qrSqd68ucpgE6LU155C ↩
-
The Art of Doing Science and Engineering
2022-05-09 21:34
An excellent book by Richard Hamming on doing science, 202203210833 Systems thinking, 202208131327 System design, and having 202205231312 A Career.[^hamming2020]
- 202207271527 An order of magnitude of change produces new effects
- To the extent you can choose, work on the problems that you think will be important (202206112310 Work on what matters).
- 202207271530 Expertise is required to create useful simulations
- 202207271958 Stability or instability dominates a system
- 202207272000 Garbage in, garbage out
- 202208211340 Users can affect the validity of simulations
- 202208211331 Simpson's paradox
- 202208211352 There is no shortcut to learning
- 202208211358 Hawthorne effect
- 202208211404 Learning to follow and learning to lead
- 202208211426 Work with people who know they don't know
- 202211031026 The unreasonable effectiveness of mathematics
- 202211030958 Creative accomplishments happen over time
- 202110251122 Analogy is a highly effective communication method
- 202304031221 Breadth of knowledge fuels analogy
- 202308271108 Construct hooks for future knowledge
- 202304041100 Learn, don't memorize
-
High performing teams
2021-09-25 10:35
A common term in the current 202104291523 Leadership zeitgeist is "High performing team". What that means exactly is hard to pin down. There are as many definitions as there are managers in the world.
Defining when a team is high performing
- They 202106241525 Synergize. The team works in a way that complements each others efforts.
- The team works on high 202106221146 Leverage projects to compound their returns over time.
- The team has...
- A common purpose (202108191025 Teams exist for a reason)
- Clear roles
- An accepted leadership structure
- Excellent communication
- Solid relationships
- An effective process in place for getting work done well (202104291524 Execution is the priority of team management) and understanding if that work is effective and valuable (202108191029 Measure what you do.
- Participative leadership – using a democratic leadership style that involves and engages team members
- Effective decision-making – using a blend of rational and intuitive decision making methods, depending on that nature of the decision task
- Open and clear communication – ensuring that the team mutually constructs shared meaning, using effective communication methods and channels
-
Thinking in Systems
2024-01-29 14:11
- 202401291425 Definition of system
- 202401291441 Systems thinking benefits all thought
- 202401291458 The purpose of the parts may not be the purpose of the whole
- 202401291554 All systems thinking is a simplification
- 202308281423 Ship of Theseus
- 202205021252 Stock and flow
- 202110231515 Feedback loop
Chapter 2 - A Brief Visit to the Systems Zoo
- One Stock Systems
- 202402171439 One stock with two competing balancing loops
- 202402171455 Feedback can only affect future behavior
- 202402171507 A stock with one reinforcing loop and one balancing loop
- 202402171512 The principle of shifting dominance
- 202402171520 Ask questions to assess the validity of a model
- 202402241530 One stock with delays
- Two Stock Systems
Chapter 3 - Why Systems Work So Well
-
Affecting long-term change
2022-03-23 16:46
Affecting long-term change is one of the most challenging things that a leader can do.
For one, the feedback loop about a long-term change comes at a glacial pace (202104291528 Leaders have to accept a slower feedback loop).
Next, there's a constant need to 202104291529 Repeat the message in order to be heard. For long-term changes, this can literally span years of repeating the same message. In practice, this repetition requires vision and extreme conviction. We must be visionaries to see the goal and keep it in sight even when the going gets tough. We must have conviction that the goal is worth it; that view from the mountain top will be worth the climb. Having this 202107240951 Visionary leadership style and 202203231647 Leading from vision requires us to be comfortable with 202112201317 The solitude of leadership.
So how can we persevere?
- We need to 202104291527 Live in the ambiguity and allow these slower loops.
- We must be patient with our communication, re-communication, and re-re-communications ad nauseam.
- We need to remove obstacles to make the path as clear as possible (202106241548 Leaders work to remove obstacles).
- We need to 202104292040 Eat the losses.
-
Zen in the face of programming
2022-06-11 21:25
There's a hill that we climb through our career as programmers.
We start at the bottom where everything is difficult, foreign, and new. We have all the energy, enthusiasm, and patience in the world.
We climb, learn, and grow strong. We enjoy climbing. We get better at it. We ascend at an increasing pace.
But then, we start to lose steam. We no longer have the enthusiasm for the climb that we once did. We want to get to the top at long last. We want the code to be good, complete, perfect. If only we could do that rewrite. If only everyone could write less buggy code.
I know best, I've been climbing for years, let me get to the top already!
We lose faith. We stumble. We despair at the infinitude of the climb in front of us. Surely there is no end. Surely there's no point to it all. The climb breaks us.
And yet, when we're broken, we find the truth — there is no top — there's always one more step. We find that the climb is the purpose. With revelation comes renewed joy and a peaceful, sustainable way to continue the climb.
We find joy in sending other climbers lifelines. We find joy in looking around and coming to know the people below, next to, and above us on the climb.
-
Reclaiming software systems
2021-09-25 11:02
Software systems are organic entities. They take on a life of their own over the passage of time under the pressure of external forces. They slowly transition from 202109251124 Golden age software to 202109251125 Post-apocalyptic software.[^larson2019reclaim]
How do we get from golden age software to post-apocalyptic then? At some point we find an elegant extension to the golden system. It's looked at as proof of the system's power and flexibility. But in reality, it's the beginning of the end. It causes the system to be harder to reason about, and eventually becomes impossible. It's better to build systems for the problems they solve and keep them running with simplicity.
Each company is allowed to rewrite exactly once, but afterwards you have to learn how to reclaim your software instead.[^larson2019reclaim]
One option is to rewrite the system. This is expensive, time consuming, and may actually cause problems by losing years worth of sweat and knowledge that's been put into the system.[^spolsky2000] The good news is that rewrites aren't inevitable here, and we can reclaim the system instead.
Reclaiming the system is the project of evolving beliefs into behaviors and properties (202109251100 Verify behaviors and assert properties). We start off by believing that something works like it does. This might be a specific property of "all the DB calls come from ActiveRecord" or something. We turn that belief into a behavior or property that can be tracked and verified or asserted.
-
Zero to engineer
2022-08-10 19:44
How do get into 202109061338 Software Engineering?
Let's go at this from a specific angle.
What would it take for me to get an entry level job as a programmer?
- Get past the résumé screen
- Get past the recruiter screen
- Get past the coding exercise
- Get past the onsite interviews
Preparing for these takes different amounts of time and require different skillsets. If we include the dependencies between each step and sort them by preparation time, we get a new ordering.
- Getting past the coding exercise — is the basis for 2 and 3, so it must be solid and come first.
- Getting past the résumé screening — requires things like example projects and raw time spent coding.
- Getting past the onsite interviews — definitely the point where not knowing your shit can bite you, but it's also possible to be great at interviewing and compensate for your rough patches with things like work ethic and initiative.
- Getting past the recruiter screening — easy to bullshit past if the résumé checks out, but always easier if you're confident and capable than faking it.
Getting past the coding exercise
Helps if you know what it will be. Many companies make things like this available in advance. If so, you have an obvious path.
-
The Entry Point
2021-04-29 15:22
#new #thread #source #structure #wip
This is the main entry point into my knowledge graph. At the risk of being prescriptive about categories and connections, a single top-level entry point is useful to maximize discoverability. If you're looking for other things I do, check out my home page.
The lofty goal of this project is to contain all of my knowledge. I hope this will be a lifelong project where I can learn, collect, and create a record of my thoughts in a simple, plain-text format that should never become obsolete.
Workflow
This will change drastically over time, but in an effort to keep myself organized, here's my process.
- Find a source of information
- Create a #source note with solid citations (managed in Zotero) for taking notes while consuming the source.
- Create, link, and manage the Zettel and my Zettelkasten.
For more information on the why and how of using a Zettelkasten, see 202107272242 The Art of using a Zettelkasten.
Tags
- The #structure tag is used for structure notes. These are hubs of Zettel that are connected under some sort of idea. They help with discoverability and maintenance of the Zettelkasten as a whole.
- The #source tag is a single Zettel to organize the notes I take while working through some source material. Each Zettel that's a #source is also a #structure Zettel. For example, I take notes while reading a book in a Zettel that's named for the book's title and tag it with the #source tag. These notes aren't technically needed if we do a good job citing sources, but it's helpful during the initial reading and note taking for long-form content that requires multiple sessions.
-
Coaching underperformers
2021-10-18 11:58
Underperformers may not realize that they have an inflated sense of their performance. Managers should figure out the cause of their lack of awareness. In the process, they will either uncover what support the underperformer needs or confirm that they just might not be able to do the job and that they should reset expectations accordingly.
This situation is very draining on time and emotions for everyone involved. It's better to fix it right away.
Another insidious risk is that by allowing this to go on, a manager may be tacitly endorsing substandard performance, causing other employees to become demotivated, disengaged, or angry about the situation. (202110181231 Don't tacitly endorse bad behaviors)
Possibilities for alleviating the issue:[^kislik2020]
- 202110181203 Be clear about expectations — This can seem painful, but it's better for everyone in the long run. You have to be super clear on expectations.
- Provide employees with resources and support — If their natural skills are insufficient, they may not even perceive their deficits. It's important to coach, mentor, and get them in a position where they can grow and succeed.
- Determine whether you're willing to continue investing in the individual — If you're not, it's much more practical to reduce your expectations. Do not abandon them, but do not spend more time on then than is required. You should spend your discretionary time on your top performers (202110181205 Invest discretionary time in top performers). This also includes deciding whether they are below the acceptable line or above it.
Good -> great
can be abandoned, butfailing -> ok
cannot. If they're failing and can't improve, it's time to let them go.
-
Write code that's easy to delete, not extend
2022-04-26 21:14
Instead of building re-usable software we should try to build disposable software.[^figg2016]
Writing code comes at the cost of maintaining and changing that code. After all, 202204272219 The fastest code is no code and if we don’t have any code to begin with, we don’t have to maintain, extend, or delete code. The actual cost of maintaining that code can be astronomical (202204031033 Abstractions and future-coding are actively harmful)
We should be striving to minimize our code which includes deleting code that is no longer serving its purpose or has had so many requirement changes that it’s no longer recognizable as what it set out to be.
We should be writing code that’s disposable and cheap to replace. It’s easier to replace code than sort through dependencies and modify systems.
It’s usually easier to delete one big mess of code than to try and delete multiple smaller interleaved mistakes. It’s especially true that we don’t know how to split our code before building it and that it’s easier to deploy one mistake than 20 smaller ones (202204272239 Monorepos make all the wrong trade offs).
In order to write easily disposable code, we need to repeat ourselves over adding dependencies (202204262054 Prefer duplication over the wrong abstraction). We need to layer our code so that APIs don’t cause sweeping changes (202204272256 Create internal APIs on top of dependencies). We need to isolate hard to write or likely to change (202204272307 Code that changes together should live together) parts from the rest of the code and each other. We need to allow some changes at runtime and swappable implementations. We need to be able to write new code next to old code without modifying it (202204272242 Open-closed).
-
Stir Trek 2024
2024-04-30 10:34
Selected Sessions
time room rank speaker track session 08:45 could not attend -
Tech — Work — Ramblings
2016-10-27 00:00
#structure #microblog #tech #ramblings #work #blog
This page serves as a simple index of all my blog posts. This list should be roughly equivalent to searching for the #blog tag.
If you're looking for my shorter #microblog posts, see 202208270000 Microblog.
- 202208010000 Making a Rust Roguelike
- 202206171206 Delivery Performance vs Value Delivery
- 202205150000 Learning Rust
- 202205010000 Making a Fitbit Sense Watch Face
- 202109150000 Idea Gardening
- 202109010000 Prototype Expand Consolidate
- 202108010000 Designing for Big Screens
- 202107150000 Working in Public
- 202107010000 Unifying My Domain
- 202106010000 Rewrites Are (Almost) Never the Answer
- 202105010000 The Silent Majority of Engineering
- 202009010000 The Only Correct Way to Organize Code
- 202007010000 2019 Work Reads
- 202006150000 Gestalt Principles of Design
- 202006010000 Revamping My Blog
- 202004010000 CodeMash 2020 - Review
- 202001080000 CodeMash 2020 - Live
- 201911150000 What React and Kubernetes Teach Us About Resilient Code
- 201810010000 Development Estimates
- 201809010000 Piping Code With GitLab CI
- 201808010000 Cloud Native Computing
- 201807010000 Architecting a More Modern System
-
System design
2022-08-13 13:27
Designing systems is one of the common, critical tasks of a 202206112233 Staff-plus engineer. It's something that sets a 202206112236 Senior engineer apart. It proves that you can understand tradeoffs in technology and organizational size and maturity. It shows that you understand how to build things that are optimal for now and have a clear path to the future you're working toward. Many engineers plateau at a place where they can understand and implement any type of tech but aren't capable of planning out new systems from scratch based on some need of the business.
Example systems to learn how to design
- Rate limiter
- Consistent hashing
- Key-value store
- Unique id generator in distributed systems
- Url shortener
- Web crawler
- Notifications
- News feed
- Chat
- Search autocomplete
- YouTube
- Google Drive
Example: Scale from 0 to 1M users
- start with a single server. DNS somewhere directs all traffic to the web server where everything from apps, to APIs, to DBs are housed.
- The first interesting scale point is when you need to separate your database from your web servers. At this point you probably have enough reason to discuss the exact details of the DB you're using. Should you be using a relational DB or a NoSQL document store?
-
Leadership
2021-04-29 15:23
- 202203231646 Affecting long-term change
- 202203241152 Ask for more from your people
- 202110181203 Be clear about expectations
- 202110181158 Coaching underperformers
- 202109090909 Decision paralysis
- 202203241428 Do more with less
- 202110181231 Don't tacitly endorse bad behaviors
- 202104292040 Eat the losses
- 202104291524 Execution is the priority of team management
- 202205021956 Feedback is for changing behavior
- 202407010952 Freedom and Responsibility
- 202208211358 Hawthorne effect
- 202110181205 Invest discretionary time in top performers
- 202104291527 Live in the ambiguity
- 202104291528 Leaders have to accept a slower feedback loop
- 202106241548 Leaders work to remove obstacles
- 202203231647 Leading from vision
- 202104291526 Make the hard decisions
- 202108191029 Measure what you do
- 202205031247 OODA loop of action
- 202206171206 Delivery Performance vs Value Delivery
- 202110052025 The quality of your decisions is the currency of leadership
- 202110220845 Remote team management
- 202104291529 Repeat the message in order to be heard
- 202110181215 Target praise carefully
-
Staff-plus engineer
2022-06-11 22:33
Staff engineering is a complex topic. As nebulous as it can be to get promoted to a 202206112236 Senior engineer role, it’s considerably harder to move into staff-plus roles. Whereas the definition varies a bit from company to company for senior engineering, the definition or even existence of staff-plus roles is completely irregular across the industry. Will Larson wrote an excellent book, Staff Engineer: Leadership Beyond the Management Track[^larson2021staff] on what it means to be a staff-plus engineer. This structure note and its children mostly come from that resource, but also other citations where noted. That book is also (mostly) publicly available at staffeng.com.
[!important] Being a staff engineer is not just a role. It’s the intersection of the role, your behaviors, your impact, and the organization’s recognition of all those things.
The value of the title
- Bypass informal gauges of seniority (especially useful for underrepresented groups)
- Facilitating access to “the room”
- Increase current and career earnings
- Access to interesting work
- Different rather than better
Archetypes
-
My bucket list
2021-12-22 19:53
- Sky dive
- Ski the Alps
- Ski Tahoe
- Travel to
- Switzerland
- Germany
- Carribbean
- Scandinavia / Iceland
- British Isles
- France
- Italy
- Lake Como
- Greece
- Mexico
- Egypt
- Bhutan
- Australia
- New Zealand
- South Pacific Islands
- Hawaii
- Alaska
- Patagonia
- Africa
- China
- Japan
- India
- Tibet
- Cities
- DC
- NYC
- Amsterdam
- London
- Tokyo
- Paris
- Madrid/Barcelona
- Rio de Janeiro
- Cancun
- San Francisco
- Seattle
- LA
- Honolulu
- Rome
- Athens
- Alexandria/Cairo
- Venice
- Dubai
- Vegas
- Jerusalem
- Space
- LEO
- Moon
- Mars
- Saturn
- National Parks
- Banff
- Denali
- Yosemite
- Redwood
- Grand Canyon
- Zion
- Bryce Canyon
- Yellowstone
- Grand Tetons
- Badlands
- Mount Rushmore
- Ha long bay
- See the northern (southern) lights
-
Knowledge is constructed
2021-09-06 08:35
Constructivism and also Constructionism are theories of knowledge that requires there to be a learner for knowledge to exist. Until someone learns information, connects it to things they already know, and internalizes the information in a personal context, knowledge cannot exist.
Supporting arguments
- Having a text or reference at hand does nothing to increase knowledge, we have to create something, do the work, wrestle with the ideas, and engage effortfully to create our own knowledge.
- Research works better one thing at a time. Find a source, process it to completion, then use your newfound knowledge to find another source. If we don't, we run the risk of picking sources that are useless by the time we get around to reading them. Processing to completion includes writing about what you've read. This is where these notes come in. We take transient notes as we're reading and then write our thoughts here or in drafts of actual writing. (Iterative accumulative approach to writing #thread and writing is important #thread)
- Consider that data patterns and descriptions mean nothing on their own. For instance, strongly correlated but spurious patterns may be obviously meaningless.[^vigen2013] Instead, we require a pattern or description (what), an interpretation of that pattern (why), and — critically — to synthesize multiple interpretations, hypotheses, theories, or models into a bigger picture and create something useful or interesting (why why or higher level why). Patterns and interpretations are the main work of our knowledge management system here. Synthesis happens when we write about (or just read and string together all the knowledge we accumulate in the system).
-
The Art of using a Zettelkasten
2021-07-27 22:42
Using a Zettelkasten is more of an art than a science. It's a personal relationship with an extension of your knowledge. Above all, it's important to just consistently work and think in this system to get the most out of it.
Personal preferences
- 202109091129 Evergreen notes
- 202107272238 When to write a new Zettel
- 202107292312 Project structure notes should answer a question
- 202107292136 The context of a link should give you a reason to follow it
- 202109091133 Notes should associate organically
- 202109091131 Notes should surprise us
- Use a reference manager. The references in the manager should only be ones that have been read and processed, ready to be cited in Zettel as I write them as the last step to processing a source. Don't clutter the reference manager with things I would like to read some day.
- Use a plain text editor and files. This makes everything much more cross-compatible and future proof.
Workflow
There are categories of things that I do regularly, and my Zettelkasten has a specific single place in a broader workflow. It's important to understand how we think and how the processes we use to do that thinking and synthesizing affect your ultimate knowledge (202109080847 As We May Think).
-
Computer Science
2022-06-19 13:00
The nitty-gritty of computation and technology. Contrasted with 202109061338 Software Engineering which is more about the practice of writing software and careers or organizations in that field.
Curriculum
- 202208101944 Zero to engineer
- 202206282018 Curriculum design for software engineering
- Maybe start here?: MIT OpenCourseWare for Computer Science
- Maybe I should make this yet another structure note that lays out the whole process and what order and how things are connected? Probably just start doing that in this note and maybe split it out later.
Programming language design
- 202107272307 Data-first pipe design
- 202107272306 Data-last pipe design
- Go kind of sucks?
Asynchronous computing
- How does asynchronous stuff really work in JS? Promises, async/await, under the hood etc. #thread answer: JS spec requires implementations of JS to implement an event queue which JS processes fifo. Could be fun to implement a JavaScript runtime in Rust or something. (Might already exist from Mozilla, V8 is written in C++)
-
The Pragmatic Programmer
2023-07-24 10:42
Intro
- 202308141544 Make the future less painful
- 202308281423 Ship of Theseus
- What makes a pragmatic programmer?
- 202308271610 Quarry workers' creed
Chapter 1
- 202308282340 No broken windows
- 202312091400 Be the exemplar of change
- 202312091413 Know what's good enough
- Think critically
Chapter 2
- Good design is easier to change than bad design. Almost all other patterns boil down to "easier to change" or ETC or 202205031449 Optimize for change or 202204262114 Write code that's easy to delete, not extend.
- This is a value (spectrum) not a rule.
- This is why I don't like frameworks that lift a lot (tailwind style string classes everywhere in code) or rails magic. It's everywhere and pervasive and not good. Or things w/lots of non-standard tooling (bit or graphql)
-
As We May Think
2021-09-08 08:47
#structure #thread #source #new
A seminal essay on machine augmented thinking written by Vannevar Bush in 1945.[^bush1945]
He urges that men of science should turn to the massive task of making more accessibly our bewildering store of knowledge. For years inventions have extended man's physical powers rather than the powers of his mind. [These inventions] are new results, but not the end results, of modern science. Instruments are at hand which will give man access to and command over the inherited knowledge of the ages. The perfection of these pacific instruments should be the first objective of our scientists as they emerge from their war work. Like Emerson's famous address of 1837 on The American Scholar this paper calls for a new relationship between thinking man and the sum of our knowledge.
Consider a future device [...] in which an individual stores all his books, records, and communications, and which is mechanized so that it may be consulted with exceeding speed and flexibility. It is an enlarged intimate supplement to his memory.
Knowledge evolves and endures throughout the life of a race rather than that of an individual
Publication of research has been extended far beyond our present (1945) ability to make real use of the record.
-
Software Engineering
2021-09-06 13:38
Maybe this should be a structure note of structure notes only since this is a huge topic that I'd like to really dive deep on. There is also the 202206191300 Computer Science structure note that I’ve split out to dig in to the more technical, theoretical stuff in order to keep this one focused more on the practice of writing software and careers or organizations in this field.
Topics
Documentation
- Co-locate tech docs with the code
- C4 Modeling
Abstraction
- You aren't gonna need it (YAGNI)
- 202204031033 Abstractions and future-coding are actively harmful
- 202204262054 Prefer duplication over the wrong abstraction
- On the spectrum of abstraction[^lou2016]
- Open for extension closed for modification O in SOLID. Means you can add new behavior without modifying any existing code. Always green, always confident in lack of side effects.[^metz2013]
Measurement
- 202304231046 List of SDLC metrics
- 202204272219 The fastest code is no code
- 202109251100 Verify behaviors and assert properties
- Thought experiment. Coding as function, what do the derivative and integral represent? Related to 202107291950 Optimizing requirements and implementations and 202110111901 Run to change ratio of a program.
-
The solitude of leadership
2021-12-20 13:17
People think leaders are individuals with others looking to them for direction. People think solitude is something like Thoreau, alone at Walden Pond. What could solitude have to do with leadership?
Leadership is the qualities of character and mind that will make you fit to command a platoon or a company, a battalion or a corporation, a foundation, a department, a government.
Solitude is the ability to be alone with your thoughts.
Solitude is therefore one of the most important necessities of true leadership.
On the mistaken idea of making it to the top means you're a leader
Many people can be energetic, accomplished, smart, or ferociously ambitious, but is that enough to make them leaders? No. These types of things are encouraged and developed in our generation of world-class hoop jumpers — they're "excellent sheep". Many institutions that talk about leadership are really talking about this. They're talking about educating people to make big names for themselves with impressive titles that they can brag about. They're talking about training people to climb the greasy pole of whatever hierarchy they decide to attach themselves to. But this idea is wrong and dangerous.
-
Self-organizing systems
2024-02-20 12:03
The most marvelous characteristic of some complex systems is their ability to learn, diversify, complexify, and evolve.1
Self-organizing systems are higher level 202402201202 Resilient systems. They have the ability to repair, modify, or produce their own feedback loops through complex interactions of loops acting on the loops themselves. This ability to modify their own structure is exactly what it means to be self-organizing.1
Human bodies are remarkable examples of resilient, self-organizing systems.
Self-organizing systems can be so complex that they verge into the realm of chaos theory. In other cases, they can be more like a fractal, where a simple law produces infinite complexity. See The Computational Beauty of Nature.
-
Define done
2021-06-22 11:51
Defining what it means to be done with a project or task is crucial.
Here, done includes all outcomes including successes, neutral ones, and failures. We need to have a clear picture of when to stop working. Depending on the outcome, that can range from celebrating a win to cutting losses.
We must 202106221744 Begin with the end in mind in order to be successful in the long term even if we’re not successful in this specific task. We have to be able to consistently make progress even if that’s learning what avenues are not valid by exploring them and failing.
Defining what it means to be done can help with 202106221150 Procrastination because 202106221122 Procrastination is triggered by emotional aversions like ambiguity and lack of structure. Having a clear definitions removes those aversions from the situation.
This differs from 202106221152 Define success because done is the fallback for success — it happens whether we succeed or not. Success requires measurement but done can be as simple as a deadline.
-
Heterarchy
2021-09-06 09:04
A heterarchy is an organizational structure that includes unranked and non-hierarchical elements. It can also be used to define structures that are ranked hierarchically, but have the potential to be ranked in different ways.1
Heterarchies can be disjoint from, a subset of, a superset of, or equivalent to hierarchies. There's no mathematical requirement that expresses one in terms of the other nor are they mutually exclusive.
Any two elements in a heterarchy are capable of being linked together in one or more ways. No one way of dividing a heterarchy can ever be all-encompassing and totally encapsulate all the relationships that might exist. In this way, heterarchies resemble forested graphs that may or may not be directed or cyclic.
The requirement of perspective or choice is how we know that 202109060845 Knowledge is a heterarchy and 202109060835 Knowledge is constructed. Each division of our knowledge is partial. Each perspective on the whole invites new connections and divisions.
-
Heterarchy. (2021). In Wikipedia. https://en.wikipedia.org/wiki/Heterarchy ↩
-
-
Knowledge is a heterarchy
2021-09-06 08:45
Knowledge has to be a 202109060904 Heterarchy because 202109060835 Knowledge is constructed — it requires a perspective, a learner, or a choice of framing. No single vantage point of our knowledge can ever be complete. We're required to ask, "how much do I know about this". The questions "how much do I know" or "how much is known" don't even make sense.
The connection between two pieces of information is relative to our choice in perspective. It's also possible for any two pieces of information to be related to each other. These are the core requirements for a heterarchy in general.
Knowing that knowledge is a heterarchy means that we can optimize our knowledge management for this type of structure and make a system that will last and evolve as we learn and grow.
Note that heterarchies do not exclude hierarchies. For instance, a sub-graph of knowledge could very well be hierarchical. Taking basic arithmetic as an example, we learn how to do simple addition and subtraction, then more complicated addition or subtraction, and then build on that to understand multiplication and division.
-
Notes should surprise us
2021-09-09 11:31
If reading and writing notes doesn't lead to surprises, what's the point?[^matuschak2017surprise]
That question may seem like an innocuous one. Of course there's a point to writing things down so you don't forget them, but we're talking about 202109091129 Evergreen notes here. Remember that 202209091140 Transient notes don't create knowledge.
If we only wanted to understand things in a specific context, there'd be no point to writing notes and keeping them over time. We'd use the idea and then be done with it.
These surprises are the very reason for our principles of note taking.
- 202209091130 Notes should be atomic so that we can see the breadth and depth of our surprises through the connections we make and the connections we don't make.
- 202109091134 Notes should be concept-oriented so that they can be densely linked and show us how a concept can cross our preconceived boundaries of what it relates to.
- 202109091132 Notes should be densely linked so that we see surprising connections that we might have missed otherwise.
- 202109091133 Notes should associate organically so that we're not imposing a structure, instead being surprised by one.
-
Remote team management
2021-10-22 08:45
This structure note records my learnings from taking the Coursera How to Manage a Remote Team course.[^murph2020] These notes come from a time before my Zettelkasten and are longer, more verbose, and less atomic than I'd normally like, but I'm just going to leave them as they are. That way, I can link to them and search for their contents without investing the time in breaking them down more.
Managing a team of remote workers presents unique challenges and opportunities:
Communication is Crucial
Embracing Asynchronous Communication
In a world dictated by calendars and schedules, people are conditioned to operate in synchronicity — meaning that they inhabit the same physical or virtual space at the same time. Asynchronous communication is the art of communicating and moving projects forward without the need for collaborators or stakeholders to be available at the same time your message is sent.
In an all-remote setting, mastering asynchronous workflows is vital to avoiding dysfunction and increasing efficiency. The benefits include enabling your team to work effectively across time zones, reducing meetings, and enabling team members to work on a flexible schedule — all of which raise morale and productivity. However, shifting to this way of working requires a lot of large and small adjustments.
-
Levinthal's paradox
2021-10-22 10:09
Levinthal's paradox[^wikipedia2021levinthal] is a thought experiment, also constituting a self-reference in the theory of protein folding.
In 1969, Cyrus Levinthal noted that, because of the very large number of degrees of freedom in an unfolded polypeptide chain, the molecule has an astronomical number of possible conformations. For example, a polypeptide of 100 residues will have 99 peptide bonds, and therefore 198 different phi and psi bond angles. If each of these bond angles can be in one of three stable conformations, the protein may mis-fold into a maximum of $3^{198}$ different conformations (including any possible folding redundancy).
Therefore, if a protein were to attain its correctly folded configuration by sequentially sampling all the possible conformations, it would require a time longer than the age of the universe to arrive at its correct native conformation. This is true even if conformations are sampled at rapid (nanosecond or picosecond) rates.
The "paradox" is that most small proteins fold spontaneously on a millisecond or even microsecond time scale. This paradox is central to computational approaches to protein structure prediction. It may imply that there's a specific algorithmic process that's followed that we have not been able to discover as of now.
-
Policy-resistant systems
2024-02-25 14:34
A policy-resistant system is one where fixes don't produce changes. They exhibit balancing loops that make their undesirable behavior resilient to changes.
Imagine a system that has a strong balancing loop that produces some outcome that's continually being injected with some imbalance. It doesn't matter that there's something constantly pushing the system in a direction, the balancing loop overcomes that push and keeps the behavior consistent. Many governmental policy changes are examples of fixes for resilient systems that will simply result in the same outcomes due to the inherent structure of the system.[^meadows2011]
Many of these systems arise when the goals of the subsystems are different and incongruous with each other. In some cases, the effect of one subsystem pulling towards a goal causes the other subsystem to redouble its efforts to pull back. For instance, the end of prohibition drastically decreased the crime and chaos of the underground, illegal alcohol culture that had been developed during its enactment. Zealots often run afoul of this type of thinking: creating stringent rules by force causes the opposite outcome by intensifying the resentment and backlash from otherwise uninterested parties.
-
The conclusiveness of arguments requires rigor
2024-08-12 21:03
Rigor is required when formalizing and generalizing an argument. In order for the conclusion of the argument to be valid, the argument must be well structured, the assumptions must be valid, and the logic must be correct.
I immediately know that I have to pay attention to formal correctness when using the note, or that I have to pay attention to my premises (basic assumptions) so that the argument is not only valid (logically correct), but also conclusive (I can also rely on the truth of the conclusion). Arguments are constructs to transfer the truth of some statements (the basic assumptions) to another (the conclusion). I must therefore ensure that the basic assumptions are true (by means of further arguments and empirical evidence) and that the transfer of truth is correct.[^sascha2024]
In order to be good at this, we must practice formalization. If you capture an argument, formalize it to make it easier to understand. If you are capture a model, actively think through what aspects of reality it describes and how exactly the model relates these aspects to each other. Practicing formalization can be made easier if we use the skills and tools you already have. If you’re an engineer, you’re already an expert at representing problems, using models, and inferring causal chains. Let these skills shine in your notes.
-
Naming conventions should use unambiguous delimiters
2022-03-22 16:10
When naming variables, files, etc. we need to delimit words, initialisms, and segments of meaning for people to interpret. Therefore, we should use unambiguous methods to delimit each word. In practice this means casing like
kebab-case
andsnake_case
are objectively simpler and superior to things likecamelCase
.Further explanation
Firstly, acronyms and words. Symbol delimited names are the only way to universally disambiguate words. There's a reason that
CSV
stands for Comma Delimited Values and not Capital-letter Delimited Value. It only takes one example to see this.What do we do when we want to name something like "URL Parser". Our options are
urlParser
,uRLParser
,URLParser
, andUrlParser
. The optionurlParser
isn't so bad, but we also need to solve for when the acronym isn't the first word in the sentence like "parse URL":parseUrl
orparseURL
. It certainly loses even more appeal if the acronym is in the middle:parseUrlParams
andparseURLParams
. And (though the example is getting contrived now I've seen similar and worse in real world code) the final nail in the coffin is "a URL parser":aURLParser
,AURLParser
,AUrlParser
, oraUrlParser
. -
Types, and why you should care
2022-06-28 14:49
From a talk[^minsky2019] by Yaron Minsky of Jane Street.
Typed vs. Untyped
- Untyped — scripting, lightweight, friendly, and slow.
- Typed — Serious, professional, unfriendly, verbose, and fast.
Some definitions
- Values — data, things
- Variables — can be different values, part of the lexical portion of the language
- Expression — composed out of variables, values, and other things
- Types — categorization system for values; groups values into named groups; strings, integers etc.
- In untyped language, values have types
- In typed languages, values, variables, and expressions all have types. (For instance, variable is typed when it always contains a variable of that type)
Why types?
- Make programs faster, typically through compilation/interpretation loop having “hints” and more information.
- V8 for instance can be super fast, within a factor of 3 or so from a compiled language (but this is through herculean effort of thousands of people over tens of years and complicated things like tracing compilers and things)
- This is predictable performance vs V8
- Make programs more understandable
So why don’t people always use them?
- Often make programs more verbose — when the language doesn’t have a convenient way to express something, it’s difficult to express it at all or in a good way
-
Bloom's taxonomy of knowledge
2021-07-28 21:44
One of the three sections of 202110260923 Bloom's taxonomy of educational objectives. The taxonomy of knowledge focuses on the cognitive (knowledge-based) domain of development.[^wikipedia2021bloom]
All knowledge is built on prior knowledge, so I shouldn't worry about feeling like I'm only creating a collection of other people ideas. I can apply bloom's taxonomy to these ideas you've collected.[^nick2021]
Remember
Knowledge involves remembering facts, terms, basic concepts, or answers without necessarily understanding what they mean. One can remember specifics (terms or facts), ways and means of dealing with specifics (conventions, trends, categories), or universals and abstractions (principles, generalizations, theories, or structures).
Example: "Name three common varieties of apple."
Understand
We then have to demonstrate an understanding of the facts and ideas by organizing, summarizing, translating, generalizing, giving descriptions, or stating main ideas.
Example: "Summarize the identifying characteristics of a Golden Delicious and a Granny Smith apple."
Apply
After understanding comes application. We use our acquired knowledge to solve problems in new situations. We should be able to use our prior knowledge to solve problems, identify connections and relationships, and understand how the knowledge does or does not apply in this new situation.
-
Prefer duplication over the wrong abstraction
2022-04-26 20:54
Notes from Dan Abramov's talk The Wet Codebase[^abramov2019]
Start with two modules
flowchart BT a((a)) b((b))
Abstract
flowchart BT a((a)) b((b)) c((c)) a-->c b-->c
Awesome, we’re reusing it and everything. But then something comes along and there’s a slight difference.
flowchart BT a((a)) b((b)) c((c+)) d((d)) a-->c b-->c d-->c
but then there’s bug in
c+
that requires a special case forb
’s use-case.flowchart BT a((a)) b((b)) c((c+*)) d((d)) a-->c b-->c d-->c
And then another slightly different one from
a
flowchart BT a((a)) b((b)) c((c+**)) d((d)) a-->c b-->c d-->c
So we pull those cases out and parameterize the call sites in
a
,b
, andd
.flowchart BT a_((a_)) a*((a*)) b_((b_)) b*((b*)) c((c+__)) d_((d_)) d*((d*)) a_-->a* a*-->c b_-->b* b*-->c d_-->d* d*-->c
Later, after small fixes over time, logging, minor changes, you end up somewhere like this.
flowchart BT a_((a_)) [Continue reading](/notes/202204262054)
-
The Only Correct Way to Organize Code
A Joking Rant About Keeping Code Neat
2020-09-01 00:00
Why we need a system for code organization and what that system should look like.
Highway to the Danger Zone
Though the pattern is full and it will definitely get me in trouble, I'm going to metaphorically buzz the tower by putting some pretty strong opinions out there today about file naming and code organization. So buckle up Goose, and don't hit that eject button.
First off, file naming. The correct answer here is
kebab-aka-hyphen-case
which is all lowercase and hyphen delimited. No exceptions, and no, your community standards aren't a good enough reason to change this one as we'll see in a minute. Looking at youComponentName.jsx
👀 .Second, code organization. The only correct answer is
folder-by-feature
as opposed tofolder-by-random-devs-logic
orfolder-by-tech
. We'll take an organic trip through all three of these systems and see where we end up.Either of these alone is enough to spark a holy war among devs, but unlike tabs vs spaces, I think there's good enough objective reasons to pick one over the others. Let's take a look.
File Naming
I don't want to spend too much time on this topic because it's much less important to a team of developers than having a consistent system for creating, finding, and maintaining the actual functionality of your product through its source code. Still, you can see how it's in the same vein and deserves an honorable mention.
-
2019 Work Reads
A Slew of Short Book Reviews
2020-07-01 00:00
My professional reads from last year, rated and reviewed.
Overview
I like to read. I read a lot about a lot of things, but I would say that I devote maybe 40% of my reading time to things that I'd consider “professionally oriented”. These are books, articles, blog posts, white papers, etc. that I probably wouldn't read if I didn't have a job. They aren't all directly related to my job, but they all make me better in some way.
So here's a list of professional books I read in 2019 (roughly in chronological order) along with a rating out of five possible stars and the two second summary of why you should or shouldn't read them. Spoiler — they weren't all winners.
Clean Code
by Robert “Uncle Bob” Martin
Rating: 3/5
A slightly dated look at how code can be simple and maintainable. There are some good gems that can be extracted for programmers of any language or experience level. A bit long to read all the way through and considerably better in paper format as opposed to e-book because of the code blocks. Definitely worth a look if you're a day-to-day coder.
-
Lightning Talks
A Great Way to Teach and Learn
2018-05-15 00:00
Lightning talks are a great way to share knowledge in your organization. Here's how to get started and get everyone to love them.
A Lightning Talk is a short 5-10 minute presentation on any topic followed by about 5 minutes of open Q&A. A common format for a lightning talk is 6 minutes for presenting and 4 minutes for Q&A. The goal of a lightning talk is always to share knowledge, but can also be to convince people of the benefits of something or to take a particular action. Basically, lightning talks are lightning-fast knowledge sharing.
What's the Benefit?
Ok, so we know what a lightning talk is, but what's the point of doing them? There are plenty of obvious benefits and some that aren't so obvious. The important thing is that everyone who participates, from the speaker to the audience to the organization all benefit. It's an all-around win-win situation.
Share Knowledge
The IT industry is a knowledge industry and the vast majority of us who work in IT are knowledge workers. It's our job to gain, handle, and use information and it's impossible to be an effective knowledge worker without the ability to share that knowledge with others. We all gain insights and learn new things on a regular basis as we work on our projects. It's important that the knowledge gained is passed on to everyone even if they're working on a different part of the project or team.
-
Cloud Native Computing
A New Way to Build
2018-08-01 00:00
First Salesforce revolutionized IT with SaaS, then other service platforms extended those ideas for the full stack. Cloud Native Development is here to stay.
Eons ago, people developed enterprise software as standalone packages that were delivered to companies who then painstakingly installed and updated them. Often installation or upgrade projects could take over a year to complete. The software ran on servers that cost hundreds of thousands of dollars and were physically located at the company's headquarters. To the younger readers, I know this is sounding like some sort of nightmarish hellscape, but I promise that it really happened.
Software as a Service
In 1999 at the beginning of recorded history, a man named Marc Benioff founded a company called Salesforce that saw a better way forward. The goal was to provide a better experience and value to their consumers — enter the software as a service model (SaaS). SaaS aimed to improve on enterprise software delivery in a few key areas.
First, it decided on a subscription pricing structure so that customers were only paying for the features they were using. It also lowered the barrier to adoption and let users land on a platform for lower cost. The idea was that after the users landed, the quality of the product and the variety of features would incentivize them to increase their usage and feature adoption on a higher subscription tier.