Results: 38
-
Value of employee time
2022-11-12 12:53
A simple table to relate an employee’s time cost to proposed time savings.
All values are per $100,000 in total compensation cost to the business and use average values for time, which is calculated as follows.
Given $365.25$ days per year $= \frac{1461;\text{days}}{4;\text{year}}$ and $\frac{5;\text{weekdays}}{7;\text{days}}$.
We have $\frac{7305}{28}$ weekdays per year and $\frac{1461}{28}$ weeks per year.
Using this and the rate of 8 work hours per weekday our total work hours per years and weeks are
$$ \frac{58,440}{28} = \frac{14610}{7} = 2087 \frac{1}{7} = 2087.\overline{142857} ; \text{work hours per year} $$
and (unsurprisingly)
$$ \frac{14610;\text{work hours}}{7;\text{years}} \cdot \frac{28;\text{years}}{1461;\text{weeks}} = 40 ;\text{work hours per week} $$
Percent Weekly Total Total (Exact) Weekly Cost Total Cost 100.000% 40 hrs 2087 hrs $2087 \frac{1}{7}$ $1916.50 $100,000.00 50.000% 20 hrs 1044 hrs $1043 \frac{4}{7}$ $958.25 $50,000.00 25.000% 10 hrs 522 hrs $521 \frac{11}{14}$ $479.12 $25,000.00 -
Differentiate between self-doubt and idea-doubt
2021-10-21 22:31
All humans feel fear and doubt when creating. The process can look something like this
- This is awesome
- This is tricky
- This is crap
- I am crap
- This might be ok
- This is awesome
Original thinkers and those that are consistently creative can skip step 4. Instead of saying “I’m crap” we should be saying “the first few drafts are always crap”.1
There are two things at play here.
- We shouldn’t doubt ourselves, we should doubt our ideas. We should test, iterate, think, revise, and build the best thing without being attached to the original idea or taking setbacks personally.
- 202112180923 Don't fear failing, fear failing to try
-
Grant, A. & TED. (2016, April 26). The surprising habits of original thinkers. https://www.youtube.com/watch?v=fxbCHn6gE3U ↩
-
Rescuing a failing project
2023-10-30 11:05
Cure the lack of momentum and feedback.
- Add some (very few for now) tests even if they verifies a bug continues to be a bug.
- Set up CI/CD that tests and pushes always.
- Continue to add tests
- If it hurts, do it more and automate it more.
Crafting Code Podcast Ep. 2
-
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.
-
The SECI model of organizational knowledge
2021-10-23 14:45
Developed by Ikujiro Nonaka, the SECI model of organizational knowledge describes a repeating loop of four activities that individuals in an organization undertake in order to create (202109060835 Knowledge is constructed), commemorate, and expand upon knowledge.1
- 202110231448 Socialization of knowledge
- 202110231449 Externalization of knowledge
- 202110231450 Combination of knowledge
- 202110231451 Internalization of knowledge
When the loop completes, it starts over again as the input to the next iteration. In this way it can be considered a 202110231515 Feedback loop.
-
Diffey, S. (2020, October 26). The ‘Knowledge-creating’ Product Organisation. Medium. https://productcoalition.com/the-knowledge-creating-product-organisation-6ec80870647b ↩
-
Joe the Axolotl, Clever Closet, & Demonic Robots
2024-05-03 15:30
- Anyone can start a girls who code club and if you have enough people sign up, you can get free resources like lessons, notebooks etc.
- Dept of Ed standards alignment
- 7x more likely to go into STEM than national avg
- She led the Otterbein one, it does something a little different than the provided web lessons
- Build things “clever closet” and others (had never seen clueless so they thought it was original which is cool)
- Pololu 3 Pi Robots pre-built 4 AAA batteries, hokey pokey robot, Rube Goldberg machines, etc
- LEGO Robots now, loved those
- Game dev
gwcotterbein@gmail.com afholcomb72@gmail.com @gwcotterbein insta
-
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.
-
Simple stress measurement questions
2021-10-22 08:40
Here are a few questions we can ask ourselves and others to measure their level of stress and burnout.1
- How stressed are you right now?
- What is your ideal stress level? Ideal meaning the stress is useful and not debilitating.
- What is your max stress level?
- What behaviors do you see in yourself when you close or at max?
Another similar question can help us identify stressors and guide a path to a more healthy lifestyle.
- Food, exercise, sleep, and time are the most important things. What's keeping me from them?
-
Lopp, M. (2021, June 25). The Hotel Giraffe. Rands in Repose. https://randsinrepose.com/archives/the-hotel-giraffe/ ↩
-
Closing calls
2021-09-07 20:35
Offering a closing call will substantially improve your odds of hiring a candidate.1 Not many people will take you up on it, but those that do will be highly engaged in the process.
How to do closing calls
- Offer the call.
- Show up prepared with their background and ready to articulate why you're at the company and why they should join.
- Ask what the candidate wants to talk about before you start talking.
- Tell them why the role addresses their concerns. If it truly doesn't, then it's better to learn that now.
- Clarify next steps and offer more time.
Abbreviated Version
- Ask for their concerns.
- Answer by telling the best version of the truth.
-
Larson, W. (2021, August 26). Closing calls: Tell the best version of the truth. Irrational Exuberance. https://lethain.com/closing-calls/ ↩
-
Approximations compose poorly
2021-10-11 11:06
Approximations do not hold up to composition with other approximations. The error of approximation is magnified when we combine them so that the total error becomes egregiously large.
Here's a simple example with basic math
2.00 ~= 1.99 2.00 ^ 2 = 4.00 1.99 ^ 2 = 3.96 2.00 ^ 3 = 8.00 1.99 ^ 3 = 7.88
You can see how the error is growing much larger after combining multiple approximate values.
In programming, this can be devious. We're not always sure where approximations will come in to play (including things like floating point precision problems).
Haskell offers a unique way around this problem with its laziness characteristic. Since things are evaluated lazily, we can specify a representation of infinite precision for our approximations and the precision we need at the end and Haskell will evaluate all our approximations to the necessary precision to get a correct precision in the outcome.1
-
Jelvis, T. (2015, June 17). Thinking with Laziness. Begriffs. https://begriffs.com/posts/2015-06-17-thinking-with-laziness.html ↩
-
-
Everybody loves an existence proof
2022-08-13 14:31
Everybody loves an existence proof.
– John Carmack1
There is nothing that spurs progress more quickly and easily than an existing, working thing.
If you want to get funding, clearance, approval, investment, adoption, etc. for something, there is undoubtedly no better way to go about it than to show the thing does what you say it will and already works.
If you want to change the world’s energy supply, build a small, cheap, working fission reactor, power your company with it, and then the world will change.
If you want to code a new system, build part of it and show that it works and is solving a real problem. Prove through its existence that it’s not only doable, but already so near to being fully realized that there’s no conceivable reason not to continue with it.
The benefits of something are obvious to anyone if they already exist.
-
lexteam. (2022, August 4). Ep. 309 – John Carmack: Doom, Quake, VR, AGI, Programming, Video Games, and Rockets | Lex Fridman Podcast. Lex Fridman. https://lexfridman.com/john-carmack/ ↩
-
-
OODA loop of action
2022-05-03 12:47
Developed by USAF Colonel John Boyd, the OODA loop is a cyclic method for decision making. The steps are designed to be carried out repeatedly in overlapping, differently sized feedback and feed-forward loops.
The eponymous steps are
- Observe — Gather information from a range of sources
- Orient — Understand where we are and where we want to be
- Decide — Develop a plan of action
- Act — Carry out the plan
flowchart TD OBSERVE --->|feed-forward|ORIENT ORIENT --->|feed-forward|DECIDE DECIDE --->|feed-forward|ACT ORIENT -->|feedback|OBSERVE DECIDE -->|feedback|OBSERVE ACT -->|feedback|OBSERVE subgraph OBSERVE direction RL o((observations)) o1([unfolding\ncircumstances]) --> o o2([outside\ninformation]) --> o o3([unfolding interaction\nwith environment]) --> o o4([implicit guidance\nand control]) --> o end subgraph ORIENT end subgraph DECIDE end subgraph ACT end
The loop has been adapted for business uses under different names. One such popular name is the Plan-Do-Check-Act (PDCA) Cycle.
-
Understanding How Your CPU Thinks
2024-05-03 11:00
- Two most important skills for a developer
- Break problems into smaller problems
- Communication (with people and with the computer)
- Talked about pipelining
- increases µops throughput
- think about doing multiple loads of laundry in washer and dryer
- f# nice
- this point was a little off from my understanding of schedulers and the term "pipelining" specifically.
- Caches and different memory locations: registers, L1, L2, L3, RAM, DISK etc.
- Don't use 0V–1.3V and 3.7V-6.3V anymore for memory and heat efficiency. They've shrunk those voltages and tolerances.
- Got into machine code and micro-ops for assembly
- Importantly, the op and params and everything are all encoded.
- This is why ARM ops have variable bit sized parameters. They're all encoded into 32 bit instructions, so the specifics of the encoded instructions/params might change the available bits for parameter store.
- Showed the circuit for a 4 bit adder, arbitrarily chainable for higher bits, 32/64.
- youtube videos:
- domino computing by standupmaths
- water computer steve mould
- how to do multiplication
- f# "Freestylecoding.Math" bit math lib
- interesting idea of returning division with remainder as tuple with
/%
operator
- youtube videos:
- Two most important skills for a developer
-
Stock and flow
2022-05-02 12:52
The fundamental observation of systems thinking is that the links between events are often more subtle than they appear.[^larson2018systems]
Big changes appear to happen in the moment but there is usually a slow accumulation of small changes that lead to that moment.
Static values or accumulations are called stocks. They are how changes are stored over time. Stocks are the elements of the system that you can see, feel, count, or measure at a given time.[^meadows2011]
Changes to the stocks are called flows.[^meadows2011] These are rates of change. They can be inflows or outflows.
System dynamics are the relationships between different stocks and flows. For example, the rate of water pouring into a tub can be less than, equal to, or greater than the rate of water draining from the tub. This system dynamic can result in different long term outcomes like overflowing, equilibrium, or emptying.[^meadows2011]
Keep in mind that stocks take time to change because flows (as units over time) require time to flow. As such stocks often act as delays or buffers in systems. They also produce lag in indication. Additionally, they allow the inflow and outflow rates to be different and temporarily out of balance. This creates feedback processes by which we monitor the inflows and outflows to keep a stock at some acceptable value.[^meadows2011]
-
Virtue ethics
2022-06-05 07:55
Virtue ethics defines ethical behavior as that which facilitates the fulfillment of a person’s telos of 202206050810 Eudaimonia through the attainment and proportioning of different virtues.
202206050754 Aristotle is the father of virtue ethics and developed the subject in his work Nichomachean Ethics.
More simply put, in order to explain what makes a person good, Aristotle defines
- Which qualities a good person ought to have
- In which amounts
- Whether every person has the capacity for those qualities
- How we acquire them
- What it will look (or feel) like when we actually have them[^schur2022]
Virtue ethics differs from 202206051530 Deontology by guiding us to try and be a specific type of person while deontological ethics guide us on which actions and choices we should make.
Virtue ethics also differs from 202206051524 Consequentialism by having less concern for the ends and more concern for the means than a pure consequentialist ethic would.
Virtue ethics [...] emphasizes the virtues, or moral character, in contrast to the approach that emphasizes duties or rules (deontology) or that emphasizes the consequences of actions (consequentialism).[^hursthouse2022]
-
Creative accomplishments happen over time
2022-11-03 09:58
We need to allow our ideas to germinate (which requires time) in order to come to fundamental, novel understanding of interesting problems.
History shows that the typical pattern of creativity is as follows:[^hamming2020]
- There is at least some dim recognition of a problem.
- A short or long period of problem refinement. This stage is important because it's likely that our experience will phrase the problem in a conventional way leading only to mediocre or conventional solutions. We must give ourselves time to fully understand the problem for what it is outside of our pre-conceptions. We might even abandon the problem for some time (allowing our subconscious to work on it 202109090947 Idea gardening). However, we must be emotionally involved and want to find a fundamental, novel solution.
- The moment of insight or creativity. This may only be an attempt and might not work but it leads back into step 2. There are also times when we can change the problem itself to fit the solution or perhaps ask ourselves "If I had a solution, what would it look like?"
- Often there is still much work to be done cleaning and refining even the closest, most correct solutions once the problem has been "solved".
-
Block model for maximum capacity
2021-08-03 13:51
The block model for maximum working capacity is as follows:1[^auzenne2014floor2]
- There are small blocks and large blocks that represent tasks, projects, or any responsibility a person has to manage or work on.
- Small blocks take up 1 unit of capacity
- Large blocks take up 5 units of capacity.
- Each person in an organization has a box of maximum capacity equal to 15 regardless of how it's split up. A person could have 15 small blocks or 3 large ones or something in between.
- There are no exceptions or ways to expand that capacity.
- There are only two options for units of work: do or delegate. Nothing can move around or leave the system in any other way. If you do the task, it's in your capacity box. If you delegate it, it travels down a level and is in that person's capacity box.
This model is useful for describing a few phenomena such as how 202108031350 Delegating increases the significance of tasks and where we need to 202106241530 Delegate to the floor.
-
Auzenne, M., & Horstman, M. (2014, October 11). Delegating To The Floor—Part 1. Manager Tools. https://www.manager-tools.com/2014/09/delegating-floor-directs ↩
-
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.
-
Always bet on text
2021-10-22 16:53
Text is the most powerful, useful, effective communication technology ever.[^hoare2014]
- Text is the oldest and most stable communication technology (assuming we call speech a natural phenomenon). You can read text from 5000 years ago and can engrave granite that will outlast the human species.
- Text is the most flexible communication tech. Text can convey ideas with a precisely controlled level of ambiguity and precision, implied context, and elaborated content, unmatched by anything else. It is not a coincidence that all of literature, poetry, history, philosophy, mathematics, logic, programming, engineering, and everything else rely on textual encoding for their ideas.
- Text is the most efficient communication technology. By orders of magnitude.
- Text is the most socially useful communication technology. It works well in 1:1, 1:N, and M:N modes. It can be indexed and searched efficiently, even by hand. It can be translated. It can be produced and consumed at variable speeds. It is asynchronous. It can be compared, diffed, clustered, corrected, summarized and filtered algorithmically. It permits multiparty editing. It permits branching conversations, lurking, annotation, quoting, reviewing, summarizing, structured responses, exegesis, even fan-fic. The breadth, scale and depth of ways people use text is unmatched by anything. There is no equivalent in any other communication technology for the social, communicative, cognitive, and reflective complexity of a library full of books or an internet full of postings. Nothing else comes close. Nothing.
-
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.
-
Impact vs effort model of task value
2022-04-09 10:39
The impact vs effort model of task value is a simple two axis graph that's split into quadrants.
Along one axis we have the value/impact of a task from low to high. Along the other we have the effort it takes to complete that task from low to high.
The quadrants then break down as follows:
- Pit of despair — low impact, high effort tasks. There's nothing good about a low value task that's incredibly difficult and time consuming. It's our job to stay out of this quadrant at all cost. The good news is that it's typically easy to detect these pits and avoid them.
- Snacks — low effort, low impact tasks. Tempting to indulge in because they're quick to build, but they don't offer much value and amount to busy-work. This is an easy and insidious quadrant to get trapped in. Many many organizations reward performative work #thread in this quadrant.
- Quick wins — low effort, high impact tasks. These are the best things to work on. The only downside is that a mature organization will soon run low on items here and need to fill their time with tasks in other quadrants.
- Deep work — high effort, high impact tasks. These are what we should be filling our time with when the low effort high value tasks are dried up. Instead of drifting to "snacks", we should deepen our efforts, dig in, and apply ourselves to long-term, valuable work. It can be hard to get buy-in for this type of work because many people favor short-term games, but as we know, we should be trying to 202109251140 Play long term-games
-
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
-
Expertise is required to create useful simulations
2022-07-27 15:30
It is necessary to have a great deal of special, expert knowledge in a field in order to create an accurate, useful simulation or program.[^hamming2020]
The argument for the requirement of deep practical knowledge:
- We know that a simulation cannot be 100% accurate to the real world (202203210832 Models are necessarily incomplete)
- Ergo, we will have to accept inaccuracies somewhere in the simulation
- Ergo, we need to know which inaccuracies are acceptable and which are not
- Ergo, we need to understand the field, the purpose of the simulation, the way people will interpret it, and how to make a simulation feel accurate even if it's slightly unfaithful to reality (e.g. a flight simulator giving pilots the right feeling for flying)
- Ergo, we have to be an expert to make a good simulation
A correlated, responsible first question when faced with a simulation of anything is "why should anyone believe this simulation is accurate or useful?" This question will make you better at creating simulations as well as more capable of detecting when others have not done well at this.
We need to be suspicious about getting too many solutions and not doing enough careful thinking about what we've seen. Volume output is a poor substitute for acquiring an intimate feeling (through deep thought about the underlying situation) for a situation being simulated.
-
Work on what matters
2022-06-11 23:10
Make the most out of your time.
Hamming has a good quote about this in 202205092134 The Art of Doing Science and Engineering.
To the extent you can choose, work on the problems that you think will be important.[^hamming2020]
[...] how to do great things. Among the important properties to have is the belief you can do important things. If you do not work on important problems, how can you expect to do important work?[^hamming2020]
Working on what matters is important because the only viable long term bet on your career is to focus on work that matters, do projects that develop you, and steer towards companies that value genuine experience. (202109251140 Play long term-games)
- Avoid snacking — 202204091039 Impact vs effort model of task value and 202106241531 Eisenhower matrix of task value
- 202206112313 Stop preening
- 202206112312 Stop chasing ghosts
What does matter?
This section was written specifically with the responsibilities of a 202206112233 Staff-plus engineer in mind, but is generally adaptable to other situations as well.[^larson2021staff]
Companies operate in eternal iterative elimination tournaments
- Existential issues — nothing else matters if your company stops existing. Note that this isn’t the most efficient place for effort but it should be swarmed on by everyone.
-
Category Theory in Life
2022-07-18 19:46
Category theory is abstract, but its abstraction makes it apply to many things around us in ordinary life.
What is category theory?
Category theory is the mathematics of mathematics
Mathematics is the logical study of how logical things work.
In order to study things logically, we have to ignore some details of reality that make things behave illogically. It's only in the abstract world where things do behave perfectly logically
Category theory is the logical theory study of the logical study of how logical things work.
The map of the London underground is a good example of a "mathematics", where the geographical map of the exact tubes are not the purpose. The slightly unreal, more representative version helps us in a certain situation navigate more easily. We choose to ignore certain details to represent things more logically.
Objects and morphisms
$A \rightarrow B$ means there's a $morphism$ between $A$ and $B$.
So if we have
$$A \xrightarrow{\text{is the mother of}} B \xrightarrow{\text{is the mother of}} C$$
We can deduce
$$A \xrightarrow{\text{is the grandmother of}} C$$
Instead of looking at things based on their intrinsic characteristics, we can learn a lot about them (and other things) by their relationships to other things: hence the "Category". This gives us more context
-
Stir Trek 2024
2024-04-30 10:34
Selected Sessions
time room rank speaker track session 08:45 could not attend -
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.
-
Essential XP Emergent Design
2024-06-27 12:56
An article we read as a group for a discussion in our engineering organization. The author explicitly offered all his conclusions as fact "without much justification" noting that "at some later time, perhaps I’ll try to justify this view."[^jeffries2001] I did not agree with what little it did contain.
There are many well-known modeling and design techniques that can be used to bring about a "good design". An incremental process may limit the applicability of these techniques, which are most powerful when applied and committed to "up front". Test everything; eliminate duplication; express all ideas; minimize entities: These few simple rules, applied locally, can help a high quality global design to emerge.[^jeffries2001]
Ron asserts that good design is highly modular, consisting of separate components (typically objects) which are highly cohesive, loosely coupled, and given expressive names that enable us to grasp quickly what the modules mean and why they are there.[^jeffries2001] This statement is the most reasonable of the article. I agree with it, but I find it to be vague to the point of being unhelpful. For example, I'd rather be the right temperature than very hot or cold, but that doesn't offer much as to the nature of "the right temperature". Being the right temperature is tautological. His design principles aren't as self-evident, but they can be interpreted in almost any way to fit or reject a design as "good".
-
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).
-
Value reciprocity in the insurance industry
2022-04-05 10:48
This is a social ecosystem structured around reciprocity of value. The way that people earn social connections and trust as good actors in this ecosystem is by providing value to their connections. This is the whole ball game.[^wikipedia2021reciprocity]
Reciprocity in market-based societies
David Graeber argues that balanced gift exchange and market exchange have more in common than normally assumed. Since both are balanced, the social relationship created through the sense of debt and obligation is constantly in danger of being ended by the return gift/exchange. He thinks it better to contrast "open" and "closed" reciprocity. Open reciprocity "keeps no accounts because it implies a relation of permanent mutual commitment." This open reciprocity is closed off precisely when it is balanced. Thought of in this way, we can see the relationship as a matter of degree, more or less open or closed. Closed reciprocity of gifts is most like market exchange. It is competitive, individualistic and may border on barter.[^graeber2001]
Comes down on the substantivist side of the formalist-substantivist debate arguing for a study of how humans make a living in a social and natural environment.
-
My next level
2021-09-06 08:25
I'm 30, what do I want to do by the time I'm 40? 10 years is a long time, but will be here before I know it.
Some candidate ideas that have consumed mind-share before now:
- Continue down the tech leadership path
- Blaze an entrepreneurial trail of my own
- Research and create something completely new
- Write a book
- Are any of these what I want?
- What would it take for me to pick one and follow it relentlessly?
- Is there a way to do more than one in a meaningful way?
The first thing is 202205231130 Knowing when to leave.
- Leave
- Stay
After that our paths diverge:
- If I leave, where do I go, how do I decide, what would I want to work on, what areas would I want to grow in?
- If I stay, what do I want to work on, what areas do I want to grow in, what is my future, what goals do I have?
A note on open-ended work
For much of the ground-breaking work, the challenge lies even in figuring out what to do. Not just how to do it. Breaking things down and checking things off a list day in and day out isn't satisfying looking back on a year's time span or more. If things can be broken down that easily and checked off, it must not be all that interesting.
-
Career checkup template
2022-06-12 20:47
Sourced from Will Larson's blog Irrational Exuberance[^larson2022checkup]
This is a simple template for checking in on your career. Here’s how to use it:
- Look through the sections. If there are any sections that don’t resonate with you at all (as opposed to just feeling hard to fill in), then remove or edit them.
- Fill in the sections. Feel free to jump around to answer the parts that you have the most energy for.
- Revisit a few days later: anything you want to change after sleeping on it?
- If possible, find peers or friends to share and discuss each others checkups together.
- Store it away somewhere to review a year from now.
Summary
Write this section last! How would you summarize everything else you wrote below? Try to keep it to max of two paragraphs.
<start writing here!>
How are you feeling about your career right now?
Write a few paragraphs about how you’re feeling about your career right now. Don’t worry about writing this for consumption, focus on finding words that resonate with you!
<start writing here!>
What did you expect / what happened in the last 5 years?
When you think back to five years ago, what did you expect to happen over the following five years? What has happened? How do you feel about the difference between those two?
-
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)
-
Revamping My Blog
A New Coat of Paint
2020-06-01 00:00
You may have noticed that the blog got a new look and feel recently. The changes weren't purely cosmetic though. Let's take a look at how I migrated from a Bootstrap and PHP based blog to React, Next.js, and Styled Components.
Motivation
It's probably not a surprise to most people that I'd want to switch from a PHP based blog to something a little more modern, but honestly — and perhaps controversially — I think PHP is still an amazing solution for simple use cases like mine. No, the shininess of tech isn't a good enough reason on its own for me to rebuild the blog from the ground up. So what reasons were there for updating things and switching tech?
Criteria
- Ease of Maintenance — My blog was running like a dream for years on a crazy simple setup, so any solution that I went with was going to have to at least match it in terms of maintenance effort.
- Ease of Writing — There was quite a bit to be desired in the old setup. I was using a rich text editor that was hard to get well formed rich text data out of. It was also really difficult to use on mobile. Wanting to use a simpler format (like markdown files) and the ability to use a plain text editor was a big reason to make a switch.
- Performance — My old setup was slow for a host of reasons. I was running PHP and MySQL on the same old machine sitting underneath my printer. The thing was ancient when I acquired it longer ago than I care to admit. It would be nice if I could take advantage of something out there that did lightning fast static site edge cached delivery.
-
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.
-
Development Estimates
A Different Take on a Contentious Practice
2018-10-01 00:00
How to get value from development estimates and why I've learned to love them.
Working as a programmer, I can't count the number of times that I've heard colleagues complaining about development estimates. Some of the complaints are simply grumblings of people who aren't generally cooperative. There's not much you can say to these people to change their minds. Other complaints are valid reasons that a lot of estimates aren't valuable or realistic. Here are 5 common mistakes that I see and what you can do to avoid them.
A Story
Let's start with an all too familiar story.
TechCo needs to develop a new product that will fit in with their offerings.
Jane the manager asks John the developer how long it will take to build the product and how much it will cost.
John says he'll think about it and get back to Jane. The next week during their weekly developers' meeting, John gives Jane an estimate that he thinks is reasonable.
Jane gives John's info to upper management who make a decision to go ahead with the project.
Months later when the project is about to meet its deadline, John, Jane, and upper management realize it's not going to be done on time and start trying to figure out what happened. Upper management puts pressure on Jane to make John finish on time. Jane pushes John hard to finish on time. John ends up finishing on time after putting in an 80 hour week. John is burnt out, Jane is glad to have upper management off her back, and upper management are happy the product went out on time.
-
What React and Kubernetes Teach Us About Resilient Code
A Similarity Among Widely Different Tech
2019-11-15 00:00
A brief intro to control theory and declarative programming
This post was initially published as part of the Beam Engineering Blog here and cross posted here on my blog.
Two Concepts
Here at Beam, we're on a quest to make our technology work for everyone. As part of this quest and as a need stemming from our hyper-growth, my development team is shifting our focus away from feature development toward platform technology and developer experience.
On the infrastructure side, we've been working on a CLI tool for our devs that will let them easily manage infrastructure from the command line. They can spin up entire AWS environments and deploy code from multiple repositories with a single command — no more waiting on other developers for testing and staging environments to be free, and no more inconsistency between production and testing environments. The quest for consistency led us to containerization, and our quest for easy infrastructure management led us to infrastructure as code. Our containers and infrastructure then lead us to a need for better orchestration of those containers. We needed tools that would make the often complex task of deploying, integrating, scaling, and managing services simple and routine — enter Kubernetes.