We are blessed with technology that would be indescribable to our forefathers. We have the wherewithal, the know-it-all, to feed everybody, clothe everybody, and give every human on Earth a chance. We know now what we could never have known before-that we now have the option for all humanity to make it successfully on this planet in this lifetime. Whether it is to be Utopia or Oblivion will be a touch-and-go relay race right up to the final moment. –R. Buckminster Fuller, Critical Path (1982)
To me programming is more than an important practical art. It is also a gigantic undertaking in the foundations of knowledge. –Grace Hopper
Temper [is] a weapon that we hold by the blade. –J.M. Barrie, The Little Minister
A
closure is a poor man’s object; an object is a poor man’s
closure. –Guy
Steele
Does your organization allow development teams to choose their languages, tools, and operating practices? Or are they mandated and standardized? This developer makes some strong arguments for the value of choice, especially in terms of motivation and ownership by the development team.
Estimation on development projects are among the most contentious of topics in the programming world. This author describes development as akin to exploring uncharted territory in the dark and, accordingly, any kind of time estimations are just wild guesses. He advocates returning to original intention of “story points” as relative measures of difficulty without any time dimension whatsoever.
https://medium.com/@DuroSoft/the-myth-of-software-time-estimations-576a7466d91a
This article puts forward an almost certainly controversial thesis. The author points out that much of the “agile” and “Scrum” practices so popular in development today don’t have much (or any!) independent empirical evidence to support them (i.e., the cargo cult mentality). Moreover, he notes that many of the well-known “thought leaders” are also consultants in these practices. While I don’t think that these short-comings invalidate agile, it is a strong indication of the immaturity of these practices and the discipline.
http://www.elegantcoding.com/2017/04/the-problem-with-todays-software.html
The head of the language (C++, C#, VB, and F#) development team at Microsoft says that the main influence on programming over the past 15 years has been concurrency. He uses this as the springboard to predict how paradigms will change over the next 15 years with a focus on the transition to distributed systems.
https://www.infoq.com/presentations/concurrency-distributed-computing
Last month, we had an article advocating against microservices and for services-enabled monoliths. Of course, every architecture has its trade-offs. This author warns against what he terms “micro-monoliths”, which he characterizes as situations where changes have a cascading effect among multiple microservices.
http://chi.pl/2017/01/30/Micro-monolith-Anti-pattern.html
Using his own account of trying to find who was responsible for some bad code and learning it was actually himself, this author emphasizes that playing the blame game about “bad code” is counter-productive and that a team’s efforts are better spent on the “Boy Scout principle” of leaving a code base better than you found it.
http://product.hubspot.com/blog/inheriting-code
In this wide-ranging survey of software security, researchers from the Economist claim that software providers do not have sufficient market incentives to ensure application security. They specifically emphasize the increasing importance of quality and security in software as it moves into new areas like self-driving vehicles and the “Internet of Things” where life and limb are at risk.
Checking applications for security defects is now part and parcel of the software testing regime, especially since cryptography code tends to be an area quite prone to error. But what if you are new to the process? This article gives you some great tips for how one security expert goes about the initial checks for flaws in crypto implementation.
In my view, one of the best ways of improving as a tester is to learn about the experiences of others, even if their situation seems rather oblique to your own. This article discusses the basic approach that Microsoft test team takes to testing Windows Subsystem for Linux (WSL) and their philosophy about quality.
https://blogs.msdn.microsoft.com/wsl/2017/04/11/testing-the-windows-subsystem-for-linux/
Most testers that I’ve worked with are very good at their jobs (indispensable I’d say). Yet, one of the struggles that testers face is whether the tests were sufficient. In my view, this is the single biggest factor contributing to impostor syndrome among testers. This article provides some good perspective on this matter.
https://hackernoon.com/the-guilt-of-not-testing-everything-ed2042da63ea
So most of us know that JavaScript is the lingua franca of the web (and more and more of the backend, as well!). But how do you learn the real “guts” of JavaScript? This tutorial takes you through a 7-module course where you implement various core features of the jQuery library to learn the inner workings of JavaScript. Modules include CSS and DOM manipulation, AJAX requests, event handling and more.
https://www.infinum.co/the-capsized-eight/articles/learn-javascript-by-building-your-own-jquery
At first sight, public key cryptography seems like magic or that it would be impossible for it to work. And explaining the concept to others is exceedingly difficult. This excellent tutorial with a nice video and code examples in JavaScript will help you really understand the concepts.
https://nickdesaulniers.github.io/blog/2015/02/22/public-key-crypto-code-example/
Perhaps one of the best ways to learn (or refresh your memory on) a programming language is by seeing common data structures and algorithms, which you probably already know in the languages you already use. This comprehensive repository includes not only the data structures and algorithms in a straightforward, minimalist manner, but also includes simple examples of common uses to help you understand the pattern.
https://github.com/keon/algorithms
One of the concepts that is a bit difficult to grasp when getting started with Docker (or LXC or any other virtualization platform) is what constitutes a container. This article does an excellent job of explaining the container concept, including its components, and the relationship of containers to Docker itself.
https://blog.openshift.com/containers-are-linux/
This handy online reference of oft-confused technology, development, security, and networking terms uses clever analogies to explain the concepts, rather than other arcane and esoteric terms. It’s not only educational, but fun, to read.
https://sidewaysdictionary.com/
As we’ve discussed, previously, JavaScript is an object-oriented language that uses prototypal inheritance, rather than the (perhaps) more common class-based inheritance. Thus, the ‘this’ keyword in JavaScript can be a bit more difficult to grasp at first. This excellent tutorial explains the concept clearly using clear, relevant examples.
http://www.sitepoint.com/inner-workings-javascripts-this-keyword/
If you want to learn about the fundamental underlying structure of computers and how they take the code that we write and do useful things, then check out this simple, brief tutorial. The author starts with binary arithmetic and then discusses logic gates and finally how those work together with code in the CPU.
One good transition for developers who want to move onto the management career path is into project management. If you are considering this track, you might wonder what the key skills are for project managers. This article presents ten important traits and skills, including how each is used.
http://www.techrepublic.com/article/10-skills-you-need-to-become-a-great-project-manager/
Whether you are just starting out in your career or job or have been at it for decades, you’re sure to find something of interest and use in this article to improve your productivity and impact. The most important aspect of this article that makes it different from many is that each item is backed up by solid research.
https://80000hours.org/career-guide/how-to-be-successful/
Call it “wasting time”, “daydreaming”, “unstructured time”, or whatever makes the most sense to you, but researchers know that constant work is not only impossible, but unhealthy. Moreover, they emphasize that this time away needs to be really away, not sitting at your desk browsing cat videos on the Internet, such as perhaps taking a walk to clear your mind and gain a different perspective or a few exercises to counteract a sedentary lifestyle.
https://qz.com/970924/the-psychological-importance-of-wasting-time/
When George Shultz was U.S. Secretary of State, he would take one uninterrupted hour per week to think strategically about his job and write down ideas for how to accomplish those items. Most of us have mostly tactical work, but we should also consider the strategic aspects of our jobs and career. Perhaps you need to also set aside some time each week to do just that.
https://www.nytimes.com/2017/04/18/opinion/youre-too-busy-you-need-a-shultz-hour.html
Citing the fact that while the median age of American workers is 42, but less than 13% of developers are over 40, this article interviews several common developers (i.e., not the famous ones, although we have plenty of them who were late bloomers!) who have intentionally stayed in the role past age 40. One of the common themes among them is the satisfaction of mentoring those new to the field. However, I felt a bit uncomfortable that all of those interviewed were white males, since sustainability of the profession depends on diversity.
https://belitsoft.com/php-development-services/top-software-developers-after-40-50-and-60
Stack Overflow has released their 2017 developer survey based on feedback from over 64000 respondents. Among the results are the most popular programming languages: JavaScript, SQL, and Java. Check out the article for additional insights.
https://dzone.com/articles/stack-overflows-annual-developer-survey
With many legacy applications, banks (as well as plenty of other businesses!) are struggling to find COBOL programmers to help fix and integrate their applications. One programmer parlayed this problem into a consulting business. Perhaps it’s time to brush up on COBOL.
http://www.reuters.com/article/us-usa-banks-cobol-idUSKBN17C0D8
New research based on three data dimensions of over 5000 adults, indicates that excessive social media use correlates strongly to depressed mood and other psychological disorders. It also confirms that real, personal social interaction promotes better mental health.
A Facebook engineer discusses the development and implementation of an open-source 100G single-mode optical transceiver that they developed for interconnecting data centers. The main driver for the design was ability to upgrade the transceivers for faster speeds without rebuilding the fiber infrastructure.
https://code.facebook.com/posts/1633153936991442/designing-100g-optical-connections/
Top-level Google network technologist discuss how they are using their SDN (software-defined networking) technology to improve performance of the peering/edge network.
Rooby is Ruby-like (syntax compatible) object-oriented language implemented completely in the Go language. Thus, it allows you to develop applications in familiar Ruby and compile them to small, native binaries that run anywhere that Go does without dependencies or virtual machine. The author’s focus for the language is microservice development, but most Ruby language features are available, so it can be used for most any development effort.
https://github.com/rooby-lang/rooby
GiG is a simple, yet powerful shell script that generates .gitignore files a variety of languages and frameworks. It has templates for 100 languages/frameworks! And you can easily add your own templates for specialized situations. GiG is a real timesaver if you start with plain vanilla configurations frequently.
https://github.com/zuck007/GiG
Trying to remember what you worked on yesterday? Or maybe you envy your hyper-productive coworker? Git Standup is a simple JavaScript utility that summarizes your Git commits for any time period (the last day, by default). It works with either the current repository or all repositories under your current directory, so it’s great even if you are working on many projects.
https://github.com/kamranahmedse/git-standup
You probably use <Alt>+<Tab> to switch between windows dozens of times each day. Easy Window Switcher takes this shortcut one step further by allow you to use <Alt>+` (back tick) to switch between/cycle through all windows of the same application. Very handy when working with multiple spreadsheets or copying/moving files in separate Windows Explorer windows.
http://neosmart.net/EasySwitch/
bfs stands for “breadth-first find” and it is a drop-in replacement (supports same command-line parameters) for the venerable Unix find command. The difference is that it searches breadth-first in the file system instead of depth-first, which tends to find the file you are looking for more quickly.
https://github.com/tavianator/bfs
Undoubtedly, this application won’t appeal to all readers, but tiling window managers are very popular on Linux among developers. Now, Windows users have this option, as well, with Stacks. It features multi-monitor support, defining custom layouts, moving windows with keyboard or middle mouse button, and more.
https://losttech.software/stack.html
Artificial intelligence (AI) is taking over the world, especially in the form of neural networks. Some even fear that it will take away everyone’s jobs. But it looks like we still have a ways to go before AI masters the pickup line.
Now this is news you can use! Researchers at none other than Cal Berkeley have figured out why, despite your best efforts and intentions, shoelaces still come untied. It all comes down to the forces exerted on them by the swinging of your leg and your feet striking the ground while walking.
http://www.bbc.com/news/science-environment-39573642
This site features a very creative approach to building awareness. It shows 30 endangered species, all rendered entirely with CSS3. Beautiful and informative!
So you probably know the joke about how you can’t (or actually used to be unable to) ship a software program that uses pi to certain countries because it likely (not definitely!) contains every finite sequence of digits. This flips that idea around to use sequences of digits from pi to “compress” data. The author’s tests show it took ~3 minutes to “compress” a 50kB image and makes the resulting file 3-5 times larger.
https://github.com/Jaxkr/Pipress