If you can't solve a problem, then there is an easier problem you can solve: find it. –George Polya, How To Solve It
The most important single aspect of software development is to be clear about what you are trying to build. –Bjarne Stroustrup, creator of C++
Good tools make good workers. –French Proverb
The function of art is to hold a mirror up to nature. –Douglas Adams, The Restaurant at the End of the Universe
There is more value in a little study of humility and in a single act of it than in all the knowledge of the world. –Saint Teresa of Avila
Sometimes working on projects can feel like playing a game. This author uses Tetris as a metaphor for some of the bad practices of project management and provides some suggestions for fixing these problems centered around ingraining "pull" in the organization and working towards flow in the entire process.
As Fred Brooks told us decades ago, there is no "silver bullet" is software development. However, functional programming offers some distinct benefits and in this article, the author skillfully explains the underlying premises of functional programming, those benefits, and the blind alleys you may find yourself in.
It’s the classic question of programming: Why does it take so long? We usually have very accurate estimates for how long it takes build things in the physical world, so why not software? This article gives you excellent explanations for the many factors that cause software development to take so long and to make estimation of effort and duration so difficult even after so many years of study and anlaysis.
https://www.simplethread.com/why-does-it-take-so-long-to-build-software/
All of us have worked with team members who were less than ideal. Perhaps we’ve even been that co-worker at times. This fun site classifies many of the different "creatures" you’re likely to run into from time to time on development projects and provides tips on how to get along with their specific quirks.
February 2021 marked the 20th anniversary of the adoption of the Agile Manifesto. So in the spirit of agile, it’s time for a retrospective to see how well it’s done. From this assessment, the overall feeling is that the concepts and principles have held up well, but the practical implementation, especially at scale, still have a ways to go. How would you assess it, both in your own organization and industry-wide?
To improve the quality of the Firefox browser, Mozilla plans to use a machine-learning tool to check the code submitted with each commit to compare it to existing code. This, in turn, is used to determine the likelihood of problems, so that testing can focus in areas of greatest concern.
Software defects and the problems they cause have real-world consequences. According to a new report, the economic impact of poor software quality was over $2 trillion in the US in 2020 alone. The report found that most organizations fail to recognize the cost of quality when it comes to software development and acquisition.
One of the overarching themes of our newsletter is that software testing is about risk management and reduction. In that vein, this article discusses the fact that anything we create will have flaws regardless of our efforts to eliminate them, but our jobs involve ensuring that the cumulative effect of these defects across large systems don't become catastrophes. We must design with the expectation of failure, but ensure resiliency in the face of these problems.
https://increment.com/reliability/failure-is-okay/
Perhaps the title of this article seems heretical in a newsletter like this? However, this author notes that test plans themselves come with some baggage, particularly the effort to create them and even more so to maintain them. He indicates that unless you work in a regulated industry that requires them or on a highly-complex project, a test plan is probably a waste of time and effort. This doesn’t mean that you don’t document your testing, but you focus your efforts elsewhere on tracking tests and reporting progress instead. What do you think? Are test plans worth the effort?
https://dev-tester.com/do-you-really-need-a-test-plan/
Research from Microsoft shows that ~70% of their security defects are caused by memory safety issues, such as buffer overflows and null pointers. Most interesting is that the proportion of memory-related defects has remained steady for more than 12 years. And this report has spawn a spate of comments like this one.
https://www.zdnet.com/article/microsoft-70-percent-of-all-security-bugs-are-memory-safety-issues/
For most readers of this newsletter, the concept that testing is not the only (or even the most important) tool for providing a robust, quality application should not be a surprise. Nevertheless, a little reminder never hurts. Moreover, this author examines the layered approach to ensuring high-quality using a variety of tools and practices.
https://arp242.net/weblog/testing.html
IDEs are standard in today's development world. Nevertheless, text editors continue to be important tools in most workflows, as well, and Vim is one of the most ubiquitous. But Vim (or it's more modern implementation Neovim) can be difficult to learn. This comprehensive three-part series takes you from beginner to power user focusing on the most important features for programmers to be productive.
https://thevaluable.dev/vim-beginner/
https://thevaluable.dev/vim-intermediate/
https://thevaluable.dev/vim-advanced/
Git is perhaps the most ubiquitous of all of the development tools in use today and it is undoubtedly powerful. However, nothing strikes fear in my heart more than having to do a rebase from the origin repository, no matter how careful that I am. This excellent and comprehensive video tutorial takes you step-by-step through the interactive rebase process with a variety of examples and scenarios to perhaps ease some of those anxious moments.
https://www.youtube.com/watch?v=jCH6SUNCLNY
Even in strongly-typed languages, you can still run into problems due to type compatibility or invalid types. This site provides a nice simple reference for the decidability and soundness of type-checking in a variety of languages.
https://3fx.ch/typing-is-hard.html
According to "Uncle Bob" Martin, developers spend ten times more time reading code than writing it. Thus, it’s vitally important that readability of our code is a top consideration in the development process. This dense, technical paper discusses the cognitive and psychological factors that contribute to readable code.
https://optimal-codestyle.github.io/
If you were an aircraft mechanic or a building architect would you be expected to do airplane repair or building designs outside of work? Probably not. Then why does the technology industry have an unwritten rule that developers should program outside of work? This article emphasizes that programming is a trade and a craft much like any other and that strong tendencies of organizations to treat it as a "passion" should be red flags.
https://exceptionnotfound.net/passion-not-required-its-ok-to-only-program-for-a-paycheck/
Having started a new job 6 months ago after being at my previous job
for 20+ years, I can attest that today’s interview process is
grueling. This developer averaged more than two technical interviews
a day for a month and shares some
of the things to watch out for if you are looking for a new
job.
https://meekg33k.dev/6-red-flags-i-saw-while-doing-60-technical-interviews-in-30-days-ckm53wt5f00avscs13xf9fhcs
Improving developer productivity is one of the things that seems to have perennial focus by almost all organizations. However, finding good metrics and ways to measure productivity has been a bugbear from the beginning. This article explores a novel measurement framework called SPACE based on these 5 dimensions: satisfaction and well-being; performance; activity; communication and collaboration; and efficiency and flow. It examines them at the individual, team, and end-to-end/development pipeline levels.
https://queue.acm.org/detail.cfm?id=3454124
Most technology workers understand that life-long learning is a key element of career success. But it’s not always clear how to accomplish this. This author, who is very well known for her excellent tutorials, says that understanding how things work is the single most important factor in improving your technical skills. She explains that it’s not enough to know all of the tricks about your programming language, but you need to understand the systems that underpin them, as well, such as how HTTP works and how networks function. Great advice!
https://jvns.ca/blog/learn-how-things-work/
Microsoft’s annual Work Trend Index for 2021 shows that more than 2 out of 5 of all workers among 30,000 surveyed from 31 countries are considering leaving their current positions, most due to burnout. Moreover, younger workers, who tend to have less well-developed personal support structures, report greater incidences of feelings of isolation due to more working from home during the COVID-19 pandemic, which comports with reporting by The Economist.
We all know the feeling: You’re stuck on a problem, but you don’t know if you should ask someone else for help. This author uses the rule of thumb that if you’ve been stuck for more than an hour, then you should ask for help. But it comes with some conditions, such as documenting everything that you’ve already tried and assessing how long it will take to explain the situation. He even provides a handy spreadsheet for calculating the cost/benefit.
https://zwischenzugs.com/2021/03/15/when-should-i-interrupt-someone/
I generally stay away from subjects like this in the newsletter, but this topic really resonated with me and I believe it’s one that bears spending time on. Moreover, I spent many years being angry myself and certainly damaged plenty of relationships in the process. For that, I’m profoundly sorry for the hurt that I caused. We all get frustrated and angry from time to time, but it seems that outrage has become a way of life for so many. This must stop. We must treat each other respect, dignity, compassion, and love. We should be moved by things that are wrong in our world, like injustice, poverty, inequality, and the like, but we should moved in our hearts toward action to change them, not to anger and hate for others. Remember Martin Luther King, Jr.’s dictum: "Darkness cannot drive out darkness, only light can do that. Hate cannot drive out hate, only love can do that." Read this article with that in mind and think about how to lead with love.
https://medium.com/the-bad-influence/your-addiction-to-outrage-is-ruining-your-life-9effebdfeaca
Haxe is a mature, statically-typed, cross-platform, object-oriented programming language that can be used for both client-side and server programming. Originally developed as an open-source compiler targeting Flash, it now targets a variety of platforms, including JavaScript, Java, JVM, Python, PHP, C#, C++, and more. Syntactically similar to Java and C#, it will be familiar and comfortable for most programmers with experience with a modern OOP language. Both VS Code and IntelliJ IDEA have strong support for Haxe language via well-supported extensions. The Haxe web site has an online REPL where you try out the language to get a feel for it.
If you program in C/C++ on Linux, you probably have lots of experience with GDB, the GNU Debugger. This tool provides many great enhancements to GDB to improve your experience. It goes well beyond the typical "time-traveling" debugger to allow you to record the execution of your code and then deterministically debug by replaying that execution. You can even execute instructions in reverse! The tool was developed by Firefox team at Mozilla, so it has lots of experience behind it.
Quick Spreadsheet is a Chrome extension that adds a basic spreadsheet to the new tab in Chrome. This makes it handy for doing quick calculations or as a simple notepad and best of all it works offline. Multiple worksheets are supported and you can export to Excel or CSV.
https://chrome.google.com/webstore/detail/quick-spreadsheet/akcjblpfcnfknlafiedflockhcibkdcm
Outrun is a small Python utility that allows you to run any local command using the computing command of a remote machine, even if the application is not installed on the remote machine. All you need is SSH access to remote machine, root/sudo access on remote machine (because it uses chroot), and FUSE file system extension. It works its magic by optimized caching and prefetching of application and shared library files from the local machine on the remote.
https://github.com/Overv/outrun
Yori is a drop-in replacement for the standard Windows Command Prompt that adds a plethora of great features including support for backquotes, job control, improved tab completion, file matching, aliases, command history, and more. It even includes a work-alike replacement for the venerable edit.com text editor called Yedit.
This handy online tool allows you to drag and drop any local SQLite database file or open online instances, as well, and view and query the contents in tabular interface. And don’t worry about security, because even though it’s online, it uses completely client-side JavaScript to work it’s magic and, since it’s open-source, you can check it out just to be sure.
https://inloop.github.io/sqlite-viewer/
The recent landing of the Perseverance rover on Mars renewed interest among the general public in space exploration. But just how many probes are already out there poking around the solar system and beyond? This site will give you basic details, including distance from earth, launch date, and key mission data, plus links to other resources.
For a look at space a little closer to home, check out this real-time visualize of the 18,000+ (wow!) man-made objects in low-earth orbit around us. They even have a catalog, so you search for your favorite satellite, as well as a Python-based command-line interface and a REST API. Truly a space-fan developer's dream!
https://platform.leolabs.space/visualization
Maybe you just want to know when you have a good chance of seeing the International Space Station (ISS) passing by. For that, check out this site. It uses your location to tell you the best time look for it and then gives you a perspective visualization so you’ll know right where to look. It even takes the weather into account.
https://james.darpinian.com/satellites/
The Sweden Solar System is the largest scale model of our planetary system on Earth with a scale of 1:20 million. The Sun and inner planets are situated in Stockholm with the remainder of the solar system distributed in other places around Sweden.
http://www.swedensolarsystem.se/en/
This newsletter is a labor of love for me. In the same vein, a single photograph of our galaxy is a labor of love 12 years in the making for a Swedish astrophotographer. Learn about his work and the take a peak at the stunningly beautiful result.
https://astroanarchy.blogspot.com/2021/03/gigapixel-mosaic-of-milky-way-1250.html
Ever wondered what’s docked at the International Space Station (ISS)? Well, actually, I hadn’t really thought about it either, but it’s rather interesting when viewed at this site. I learned about the S.S. Katherine Johnson spacecraft, named in honor of the pioneer in space flight work, currently docked there. Plus, you can see the current position of the ISS and the list of crew.
https://www.supercluster.com/iss