The greatest glory in living lies not in never falling, but in rising every time we fall. –Nelson Mandela
What we desire from an abstraction is a mechanism which permits the expression of relevant details and the suppression of irrelevant details. –Barbara Liskov and Steve Zilles, "Programming with Abstract Data Types" (1974)
When society is made up of men who know no interior solitude it can no longer be held together by love: and consequently it is held together by a violent and abusive authority. But when men are violently deprived of the solitude and freedom which are their due, the society in which they live becomes putrid, it festers with servility, resentment and hate. –Thomas Merton, Thoughts in Solitude
People love debating what percentage of which type of tests to write, but it's a distraction. Nearly zero teams write expressive tests that establish clear boundaries, run quickly & reliably, and only fail for useful reasons. Focus on that instead. –Justin Searls
It is not that we have so little time but that we lose so much... The life we receive is not short but we make it so; we are not ill provided but use what we have wastefully. –Lucius Annaeus Seneca
Ever get to the end of long work day and look back and realize that you’ve only written a few lines of code? If so, then you’re not alone and that likely means you’re a good developer. Programming isn’t about writing code (only!), but about providing business value and that requires designing, architecting, and thinking, which almost certainly will take more time than actually putting the code into the editor.
https://blog.devgenius.io/how-long-do-developers-spend-writing-code-dc64b2a11511
Most developers have a strong innate sense that a large portion of project time and effort is wasted, but rarely do we know how much or where. This summary from studying eight projects over 2-1/2 years gives some insights and they are mostly all of the “usual suspects”: building the wrong feature, rework, poor communication, excessive complexity, and stress or other psychological impacts on team members. So, all of those things that you’ve suggested fixing are indeed the ones that should be addressed.
https://neverworkintheory.org/2021/08/29/software-development-waste.html
This article provides a masterful explanation of how knowledge workers such as programmers are most often intrinsically motivated and, therefore, need to understand how their work connects to the larger organizational goals and objectives. In particular, it emphasizes that interaction with business customers to learn their needs is vital to project success.
https://iism.org/article/you-need-software-developers-to-believe-in-your-project-45
How do you know that you and your team are working on the right things? Effective organizations use good prioritization practices to ensure that teams work on the right projects. This article presents a good process for prioritizing among/between projects and within projects/teams. The author compares between project prioritization to putting the pieces of a puzzle together to decide what goes next and within project prioritization to chaos management and how to efficiently use the resources of the team.
https://blackboxofpm.com/ruthless-prioritization-e4256e3520a9
Originally, the “NoSQL” moniker meant “not SQL”, but over time, it has evolved to often mean “not only SQL”. Moreover, we also have the NewSQL flavors of database, as well. In this article, the author says differentiating between database platforms based on the query language used is the wrong approach to begin with. He says that the most common distinguishing factor is “schemaless” (or, more precisely, lack of a strong schema), which is commonly associated with “NoSQL”, and a strict, a priori schema and this is the more important and salient factor to use, especially when choosing a database for your application.
https://www.softwareatscale.dev/p/sql-vs-nosql-is-the-wrong-distinction
Most organizations have adopted a streamlined approach to documentation. However, of course, this doesn’t mean no documentation. In the article, the author presents developing a test/quality strategy. Even if you don’t have a formal document for this, the article provides many great factors to consider in how you approach testing and quality and the interaction between your group and the larger organization.
https://thinkingtester.com/creating-a-quality-strategy/
As someone with a background in electronics manufacturing and QA, this article really struck home with me. But even if you don’t have experience with hardware, you can learn quite a few great ideas to adopt and adapt to software testing from it. The best idea is that tests (test cases) should be “interesting”. Not in the sense of “not boring”, but rather they need to be well-designed so that, while they may make use of random data (certainly a good idea), they still need to be likely to test a valid, real-world scenario, such they would elicit a probable error.
http://impracticalprogrammer.com/TestLikeHardware.html
The Windows 11 launch is off to an inauspicious start. The official release is still a couple months away and Microsoft has already faced a major defect that caused the desktop to crash due to an advertisement of all things. Rather than a strictly quality/software testing issue, I see this as an example of managing complexity in large software development efforts. However, it seems like another of the company’s popular products should not have contributed to such a catastrophic failure.
What is your philosophy of testing? Not how do you test a given application, but what are the core principles that guide your work? This excellent article covers the author’s core values for her organization. While you may not necessarily agree with each and every point, this should get you to think about underlying principles that motivate the way you approach a testing effort.
https://www.thoughtworks.com/insights/blog/testing/seven-guiding-principles-testing
It’s a long-running discussion about whether programmers should be involved in testing. Of course, they should do unit testing of their code, but what about application-level testing? My personal opinion is that developers should do rotational stints of application testing and for precisely the reasons presented in this article. Specifically, it provides a better appreciation for the “big picture” of the application and helps them understand its use from the customer perspective. Likewise, testing helps to improve communication skills, especially written, with the need for precision and concision.
https://javascript.plainenglish.io/why-developers-should-do-testing-13fe9a46f795
The explosion in machine learning and AI techniques makes it difficult to keep up with them. This excellent article gives a nice explanation of one of the popular ML tools called convolutional neural network (ConvNet or CNN). The author starts with a refresher on neural networks in general, then explains how CNNs expand on and improve the basic neural network, and finally shows some of the applications. All are augmented by great visualizations.
https://serokell.io/blog/introduction-to-convolutional-neural-networks
Dieter Rams was one of the leaders of 20th century industrial design and his influence is ubiquitous. He summed up his approach in a set of ten simple principles. This author has succinctly adapted those concepts for programming. And another very relevant take on the concept.
https://github.com/zedr/dieter-rams-10-applied-to-software
Most of us don’t think twice about using the random number functions in our programming language of choice. But those actually rarely generate truly random numbers. Learn the vagaries and complexities of generating real random numbers, which underpin so much of networking and security.
https://betterprogramming.pub/generating-random-numbers-is-a-lot-harder-than-you-think-b121c3e75d08
Much (most?) new development today revolves around using APIs and the majority of those involve the REST paradigm. While other competing paradigms exist, REST seems to dominate and shows no sign of waning in its importance. Therefore, it’s imperative to develop good, consistent REST APIs, whether for internal or external consumption. This reference gives some great principles to follow from both the provider and consumer perspectives.
https://treblle.com/blog/the-ten-rest-commandments
The “low-code” approach to development continues to gain momentum. While, certainly, no single technology (or probably even any combination!) will ever replace “traditional” development in the foreseeable future, programmers must understand that their role is to provide value to the organization, not to “write code”. Thus, adaptation to “low-code” and how to empower customers is key to career success. This article provides some insights into retain relevance in the new environment by embracing the tools and helping your organization roll them out broadly.
https://thehosk.medium.com/for-developers-the-low-code-winter-is-coming-76875d3606c0
At some time or another we all face diminished motivation, if not outright burnout. Veteran technology manager Kate Matsudaira provides five practical techniques for pushing through even when you’re in a funk.
https://queue.acm.org/detail.cfm?id=3280677
Everyone wants to improve their skills in development or testing or whatever your chosen profession is. In this philosophical, yet practical, essay, Alan Kay provides advice on how improve the state of the art by breaking down the two words that make up “software engineering”. To him, the bottom line is that the goal should always be discovering “What Is Actually Needed”, both on projects and in the discipline itself.
Software development (and really any job, for that matter!) is a human endeavor. Abelson wrote “Programs must be written for people to read, and only incidentally for machines to execute.” However, it’s important to remember that we are also not the code we write, project plans we create, or the bug reports we file or whatever tangible output we produce. But sometimes is difficult to not take offense when those things are criticizes, especially since technology workers tend toward the sensitive side on the personality spectrum. This article discuss the art of separating ourselves from the things we do and keeping a positive approach to our work interactions.
https://medium.dave-bailey.com/the-art-of-not-taking-things-personally-b7a8395ce172
Most of us pride ourselves on our technical skills, as well we should in most cases. However, sometimes we can stumble in our work due cognitive biases or false beliefs that get passed down to us. This article looks at several of these that trip us up and gives advice and how to avoid these pitfalls.
The V language is one of the less well-known languages, but it has been gaining attention and traction recently, particularly due to the speed of compiled applications. It is generally a systems programming language, in the style of C, Golang, and Rust. The syntax is very similar to Golang and it is essentially a transpiler that translates V code into human-readable C code for compilation into binary code. While it has received some (much?) criticism as being “vaporware”, the project has recently embarked on an effort to build the GNU coreutils in V, a Github/Gitlab alternative, and the Vinix OS, which is a Linux-like OS built entirely in V. And another developer built a wc (word count) clone in V in under 100 lines that outperforms its C counterpart. So, while probably not yet ready for day-to-day use, V might be a language to keep an eye on. And, if you want to give it a try, here is a simple Dockerfile that builds the latest code and puts it into Docker image for execution.
First, this tool is definitely not for everyone. Nevertheless, if you use VS Code and Git, you might give it a try. It’s a VS Code extension that closely emulates the features of the Magit extension for Git of Emacs. Essentially, it’s an advanced, keyboard-centric interface to Git for VS Code.
https://github.com/kahole/edamagit
Need to quickly put together a resumé? This minimalist online tool supports drag-and-drop editing and you can save an online copy with shareable link or export to PDF. And for completely off-line support, you can clone the repository; it’s just JavaScript running a basic HTML page.
https://danplisetsky.github.io/resume-maker/
EasyWSL is a small C#/.NET utility that allows you to use any Docker container as a WSL (Windows Subsystem for Linux) distribution. It takes the specified Docker image and converts it to the WSL distro format (.VHD file) and runs WSL using it.
https://github.com/redcode-labs/easyWSL
Kmcaster is a very small keyboard and mouse on-screen display (OSD) that shows each key press and mouse click. It’s useful for screen-casting or even just when sharing your desktop with others to help them see precisely what you are doing. It works anywhere that Java runs and requires Java 14 or later.
https://github.com/DaveJarvis/kmcaster
reple (short for "REPL environment") provides you with an interactive interpreter environment, like Python’s REPL, for traditionally compiled languages like C, C++, Go, Rust, and others. It works by re-compiling after each line you’ve entered and displaying the output. If you’re favorite language isn’t already supported, just create your own simple JSON configuration file for it using one of the examples.
https://github.com/BenBrock/reple
Perhaps this is a problem that has bothered you for a long time… Or perhaps not! Regardless, now we have a definitive answer from physics about why flat disks, like coasters and CDs, don’t fly well. I won’t spoil the secret and let you read the article. Fortunately, the authors provide a non-technical explanation, along with the details.
https://link.springer.com/article/10.1140/epjp/s13360-021-01732-1
For all of you "word nerds" (like me!) out there, here’s the definitive history of the strangest semantically correct sentence in the English language. And in true meta fashion, it comes to us from a professor at the University of Buffalo!
https://cse.buffalo.edu/~rapaport/BuffaloBuffalo/buffalobuffalo.html
This was probably inevitable. First, we had Kanye REST. Now, with the commoditization of AI and machine learning, I present to you: AutoYe, an AI that generates lyrics in the style of Kanye West… Oops, make that Ye. The tool is open-source and the authors provide a nice explanation of how it all works, for those interested.
Remember as a kid thinking about where you’d end up if you dug a hole straight through the Earth? With this cool interactive online visualization, you can create a virtual tunnel from any point on Earth to any other point. You can use a variety of different parameters for your tunnel, such as angle of dig, length of the tunnel, and others. Fun and fascinating.
Perhaps instead of imitation being the sincerest form of flattery, it’s actually satire. You are probably a member of LinkedIn and likely find some of it a bit over the top. This humorous take on that site pokes fun at the inflation in credentials that we so often see. Plus, you can create your own alter ego and make yourself the master of the universe!