What Actually Makes You Senior – Terrible Software
The one skill that separates senior engineers from everyone else isn’t technical. It’s the ability to take ambiguous problems and make them concrete.
Senior engineers look at the big, messy, abstract thing and start digging:
- They ask questions nobody else thought to ask.
- They separate what matters from noise.
- They identify what should be done now vs. what to punt.
Notes on using regular expressions in Python and Perl
Summary of how to work with regular expressions in Python. Compares Python with Perl and points out some gotchas.
Your job is to deliver code you have proven to work
As software engineers we don’t just crank out code—in fact these days you could argue that’s what the LLMs are for. We need to deliver code that works—and we need to include proof that it works as well. Not doing that directly shifts the burden of the actual work to whoever is expected to review our code.
Decentralizing quality || Matt Ström-Awn, designer-leader
Why moving judgment to the edges wins in the long run
Quality is the degree to which a product or service meets or exceeds user expectations.
Building quality software is already hard. Centralized quality starts and ends with leadership-driven quality standards and reviews, where a single stakeholder reviews our work and decides whether it meets their standards. This has been the standard at every company I’ve worked with; design and engineering are both taught through critique and reviews from the earliest stages of production to the final delivery of a complete product. This approach can work brilliantly when executed with precision, but it creates a bottleneck: no matter how talented, a single person can only review so much.\
Decentralized quality means putting quality in the hands of workers, not managers.
The Missing Semester of Your CS Education
1/13/20: Course overview + the shell
1/14/20: Shell Tools and Scripting
1/15/20: Editors (Vim)
1/16/20: Data Wrangling
1/21/20: Command-line Environment
1/22/20: Version Control (Git)
1/23/20: Debugging and Profiling
1/27/20: Metaprogramming
1/28/20: Security and Cryptography
1/29/20: Potpourri
1/30/20: Q&A
Python Programming Exercises, Gently Explained - Invent with Python
A Page in : Python Programming Exercises, Gently Explained
Getting Started With Testing in Python – Real Python
Learn Python testing in depth by writing unit and integration tests, measuring performance, and uncovering security issues. Find bugs before your users do!
Sot GameTorch
GitHub - spiside/pdb-tutorial: A simple tutorial about effectively using pdb
A simple tutorial about effectively using pdb. Contribute to spiside/pdb-tutorial development by creating an account on GitHub.
Books | mathspp
Books I have written about Python and other topics.
Array languages for Clojurians
As a lisp, Clojure of course qualifies as one such mind-altering substance. (It arguably qualifies again on the basis of its focus on immutability.) But Blazeski’s article points out that array-based languages such as J, its predecessor APL ("A Programming Language"), and the proprietary q are equally mind-expanding. Let’s see what was – and remains – so compelling about the array programming approach to problems, and compare it to Clojure’s approach.
One operator to do both is pretty handy. We can of course replicate each with out-of-the-box Clojure:
(map (partial + 2) [2 3 4]) ; => (4 5 6)
(map + [2 3 4] [1 2 3]) ; => (3 5 7)What Web Framework Should I Use in Clojure?
In this guide, I describe the available Clojure web framework options and give my recommendations.
Why we need Ladybird with Andreas Kling & Chris Wanstrath (Changelog Interviews #604)
Andreas Kling and Chris Wanstrath have joined forces to form a non-profit called Ladybird Browser Initiative to manage the newly forked Ladybird browser. We discuss what it's going to take to get to alpha, the why behind Ladybird, avoiding incentives other than those of the users, their plans for incremental adoption
There’s this guy named Sean Baxter, who has his own C++ compiler called Circle, and he has adapted the memory safety model of Rust to C++, and then built a compiler that shows that you can actually do this. And he recently spoke to the C++ Standards Committee, showing them “Look, you say that this is impossible, but I did it. Can we talk about making C++ safe now?” And they seemed interested, but it’s the C++ Standards Committee, so even if they’re ultra-interested, this might get into a standard in eight years, or something.
We’ve talked about it. I mean, I’ve done a ton of programming languages as hobbies… I did the Crafting Interpreters book, and building an interpreter in Go, building a compiler in Go… I did the MAL, M-A-L project on GitHub, Make a Lisp, where they just give you tests, and they give you the Lisp file, and you implement the Lisp in your own language and get them to pass… I did the From Nand to Tetris course that’s available online. That was the thing I put a lot of time into. And I’ve made just tons of programming languages that are like 40% to 20% complete. [laughs]
Grokking Hash Array Mapped Tries (HAMTs) - by Nick M
A simple and intuitive explanation of what Hash Array Mapped Tries are and where they're used.
HAMTs are frequently used in functional programming languages, such as Clojure and Scala in order to implement persistent data structures like maps and sets. HAMTs provide efficient lookup, insertion, and deletion operations while ensuring immutability. They’re also well-suited for concurrent environments where multiple threads or processes access and modify shared data structures simultaneously. Their structural sharing property allows for efficient copying and sharing of data, reducing the need for expensive locking mechanisms.
WIP is waste
A manifesto on work, waste, cost and value.
Work in progress has zero value. Ship!
- Before a task is shipped it provides zero value.
- Any work in progress is pure cost.
- Two tasks in progress adds cost, for no value.
- Only after shipping do you create value. Always ship.
- One task shipped is infinitely better than 4 tasks “almost done”.
- Ship something of value first. Then begin something new.
GitHub - extrawurst/gitui: Blazing 💥 fast terminal-ui for git written in rust 🦀
Blazing 💥 fast terminal-ui for git written in rust 🦀 - extrawurst/gitui
What Is Negative Engineering? | Future
Negative engineering is the time-consuming and sometimes frustrating work that engineers do to ensure small bugs don't take down systems.
There were no warnings or red lights, because the process simply hadn’t run in the first place. And so a new, time-consuming activity was added to the data analytics stack: manually checking the database each morning to make sure everything had functioned properly.
Negative engineering is “insurance as code”
Negative engineering is the time-consuming and sometimes frustrating work that engineers undertake to ensure the success of their primary objectives.
Creative Coding: Generative Art, Data visualization, Interaction Design, Resources | terkelg
Creative Coding: Generative Art, Data visualization, Interaction Design, Resources. - GitHub - terkelg/awesome-creative-coding: Creative Coding: Generative Art, Data visualization, Interaction Design, Resources.