Happiness and virtue rest upon each other; the best are not only the happiest, but the happiest are usually the best. –Edward Bulwer-Lytton
Controlling complexity is the essence of computer programming. –Brian Kernighan
I define connection as the energy that exists between people when they feel seen, heard, and valued; when they can give and receive without judgment; and when they derive sustenance and strength from the relationship. –Brené Brown
Unless a capacity for thinking be accompanied by a capacity for action, a superior mind exists in torture. –Benedetto Croce
Character and personal finance are the only investments that are worth anything. –Walt Whitman
The most powerful human forces are found in the meeting of the face and the gaze. Only there do we exist for one another. In the gaze of the other, we become, and in our own gaze others become. It is there, too, that we can be destroyed. Being unseen is devastating, and so is not seeing. –Karl Ove Knausgaard, “Anders Breivik’s Inexplicable Crime”
Isn’t it funny how day by day nothing changes but, when we look back everything is different? –C.S. Lewis
The real fun of life is this perpetual testing to realize how far out you can go with any potentialities. –Richard P. Feynman
If you’ve studied a foreign (human) language, you probably had your teacher tell you that you’ve become fluent in the language, when you are able to think in that language (versus mentally translating between your native language and the new one). This article posits that the same principle applies for programming languages and, therefore, choice of language is an important factor in how fast you can develop and the quality of your code. Likewise, it’s important that developers think about thinking and how their thought processes (and biases!) are enhanced or impeded by their language.
http://www.technologyreview.com/review/536356/toolkits-for-the-mind/
One of my favorite quotes is from Dwight Eisenhower: “In preparing for battle I have always found that plans are useless, but planning is indispensable.” Regardless of your development methodology, you must do planning at various levels, such as sprint planning, release planning, platform roadmaps, and the like. In this article, the author addresses the role of estimation in the process. The bottom line is that prioritization of work (i.e., working on the most important things first) is more important than estimation.
http://www.jrothman.com/mpd/project-management/2015/01/we-need-planning-do-we-need-estimation/
Andy Hunt, co-author of The Pragmatic Programmer and one of the original signatories of the Agile Manifesto, discusses some of the ways that he believes the potential benefits of agile methodologies have failed to meet expectations. He says that fundamental problem is that, when adopting agile, organizations start by using a few of the underlying rules, but when they mature they fail to go back apply the other, more difficult, rules. This causes teams to become fixated on the “rules” and avoid the fundamental principle of “inspect and adapt”. He proposes an evidence-based remedy that he calls GROWS: GRowing Real-World Oriented Working Systems.
http://blog.toolshed.com/2015/05/the-failure-of-agile.html
Somewhat regularly, we have featured articles about how the common model of technical debt is not always very effective. This article goes a bit further to suggest that technical debt should really be defined as anything that prevents your ability to deliver what the user/customer needs with due speed. In other words, your architectural focus should be on areas that make changing or extending difficult.
http://bigeng.io/post/118399425343/why-the-way-we-look-at-technical-debt-is-wrong
Do you feel like much of the new technology has flown by leaving you flat footed? I do quite often. This influential web designer provides some perspective on the whole pace of change conundrum and offers the sage advice that we just need to continue working and look for which technologies meet our needs.
http://wesbos.com/overwhelmed-with-web-development/
Many times, especially when starting out with agile methodologies, we think, “Yay! No more planning and project plans!” But this is certainly not true. The key is that planning is simply different in agile processes (and still very important). This article looks at five levels of scope and the planning tactics that go with each.
http://www.eylean.com/blog/2015/05/agile-planning-the-5-scopes/
This brief article offers a great analogy about those parts of a project, whether they are features, customizations, regulatory compliance, etc., that suck teams in and kill projects, because of their complexity. The author especially warns small organizations to avoid these and use third-party tools or services to deal with complex problems that have already been solved.
http://dandreamsofcoding.com/2015/04/21/the-swamp/
As we’ve mentioned before, agile methodologies require a change in mindset and, frequently, the impact is most significant for testers. Here are some great tips for how to work effectively with an agile team, especially if you, as the tester, join the team later in the project.
http://blog.scottlogic.com/2015/01/16/7-things-to-look-for-when-testing-with-agility.html
As a tester, do you ever feel like no one understands what you do? Well, cheer up, friend! This author knows just what you mean. He addresses a half-dozen things that you’ll probably identify with. And don’t suffer in silence; share your strivings with other testers and even some of your developer friends!
https://testlio.com/blog/post/6-struggles-tester-will-understand
Test-driven development (TDD) is one of the valuable tools to help develop high-quality code and (especially) to avoid unintended consequences of changes and new development. However, one of the difficulties that many people face when getting started with TDD is what constitutes a “good” test (and conversely a “bad” one). This article explores the traits of good and bad tests and provides some salient examples (in Python) of them.
http://late.am/post/2015/04/20/good-test-bad-test.html
A recent crash of an Airbus A400M military transport in Spain during a training flight has resulted in Airbus issuing a warning that a software defect in the “Engine Control Unit” (ECU) may cause the engines to shut down if they are given contradictory instructions. Airbus has confirmed that the software defect is indeed the cause of the crash, but that it was a configuration problem.
http://www.businessinsider.com/r-airbus-orders-checks-on-a400m-engine-system-after-crash-2015-5
Most of us know that software development is as much a social undertaking as it is a technical process. This research article considers how organizational factors contribute to software quality (or lack thereof!). The main takeaway from the article is that communication and especially conflicting information is one of the biggest influences which reduce the quality of the end product.
What strikes fear in the hearts of Java programmers? Well, one thing that certainly does is the dreaded OutOfMemoryError. This tutorial covers a broad cross-section of causes and techniques for debugging the error, as well as improving memory management generally.
http://blog.delphix.com/dkimmel/2015/03/17/defanging-the-outofmemoryerror/
If you use Git, at one time or another, you are bound to do something and immediately have that sinking feeling that you shouldn’t have. Mistakes are part of life. This reference will help you recover from common Git mistakes.
This four-part tutorial series introduces the concepts of elliptic curve cryptography (ECC), which is (currently) the most powerful technique for cryptographic key generation, upon which most of the infrastructure of the Internet is based. ECC is generally difficult mathematically (for example, the same principles were used by Andrew Weil to prove Fermat’s Last Theorem), but this tutorial aims to make it approachable for even those with minimal math background.
http://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introduction/
With the rise of distributed systems, the CAP theorem has become more than just an interesting academic footnote and its implications loom large for many organizations. This author provides a good explanation of CQRS (Command Query Responsibility Segregation) and how it can help you mitigate some of the problems around eventual consistency.
https://blog.codecentric.de/en/2015/05/demystified-cqrs/
One of the most difficult aspects of programming, especially in new projects, is defining meaningful names for entities. While you want to avoid meaningless names, you also don’t want to use names that are too specific and cause problems with refactoring or extension later. This article discusses how using techniques of novelists for character naming can help you solve this problem.
http://www.slideshare.net/pirhilton/how-to-name-things-the-hardest-problem-in-programming
Automatic freeing of application memory that is no longer in use, known colloquially as “garbage collection”, is an important function in modern programming languages. It was one of the original features that made Java so appealing compared to other languages. But what is it and how does it work? This brief tutorial explains the concepts and reviews some of the popular garbage collection algorithms/heuristics.
https://plumbr.eu/blog/garbage-collection/what-is-garbage-collection
Sometimes you might fall into a bad programming practice without evening knowing it. Thus, it’s almost always useful to simply know that certain things are out there. This article is one of those cases: It covers some of the common, yet subtle practices that are easy to fall into that you should try to avoid.
http://sahandsaba.com/nine-anti-patterns-every-programmer-should-be-aware-of-with-examples.html
According to US National Institutes of Mental Health (NIMH), almost 20% of adults will suffer from some sort of mental illness in a given year, with one in 17 suffering from a chronic serious mental illness such as schizophrenia, bipolar disorder, or major depression. Coming from a family with a long history of mental illness (which is frequently generational/hereditary), these tips are very helpful in support co-workers who may be going through a difficult time.
https://www.linkedin.com/pulse/7-easy-ways-support-colleagues-mental-illness-jeff-giesea
As most of us have learned (often through the school of hard knocks!), development is much more than writing code. (One developer even claims it’s got nothing to do with computers!) This essay provides a good assessment of various non-coding skills that are important, especially for those with aspirations to move into management or technical leadership roles.
https://blog.svpino.com/2015/05/04/coding-is-probably-the-easiest-part-of-being-a-software-engineer
With wage stagnation and many folks working long hours, a new study of 10000 millennial generation workers from eight countries finds that they put a premium on work-life balance. However, since most of those in the management ranks are baby boomers, who have difficulty understanding the millennials, this sometimes leads to conflict about priorities.
http://www.washingtonpost.com/1859369e-f376-11e4-84a6-6d7c67c50db0_story.html
Everyone knows that no set of aphorisms is going to correct all of the problems that we face in building applications. However, sometimes you just need a little nudge to get you moving in the right direction (or moving at all, for that matter!). This excellent list patterned after other lists to help artists and writers to break through mental blocks provides some great ideas to consider.
http://kevinlawler.com/prompts
One of the perennial topics in the technology world is whether programming (or more formally “software engineering”) should be considered a true engineering discipline. In this article, the author dispels the common myth that programming does not constitute “engineering”, because there is no physical entity created. He claims that, in fact, this premise is actually one of the weakest for claiming that programming is not engineering.
http://www.engineerjobs.com/magazine/2015/is-software-engineering-really-engineering.htm
In his new book, The Alliance, Reid Hoffman says that the biggest lie propagated by employers is that the organization is like a family in an attempt to gain loyalty. He goes on to say that employees reciprocate in kind during hiring by saying that they plan to stay for a long time.
http://www.vox.com/2015/5/22/8639717/reid-hoffman-the-alliance
How much time do you spend “consuming” information? We all know that big data is everywhere and, as producers of the technology that enables this technology, we are often voracious consumers of data, as well. This author, borrowing concepts from the “slow food” movement, suggests that we need to have a “balanced” diet of information and provides some ideas for reducing your intake.
For most of us, BGP (border gateway protocol) is simply a fact of life in the landscape of the Internet infrastructure. But it actually started out 25 years ago as a ‘patch’ of sorts, according to co-creator Yakov Rekhter, when security issues were much less of a concern.
http://www.washingtonpost.com/sf/business/2015/05/31/net-of-insecurity-part-2/
Written in Go for inherent cross-platform support, httpdiff is a simple command-line tool that performs the same HTTP request against two servers and differences the responses. It supports ignoring specific header fields/options and specifying the HTTP method to use. Very useful for troubleshooting esoteric issues when doing web development.
https://github.com/jgrahamc/httpdiff
As you may guess from the name, this tiny GUI utility allows you to search Java Jar files for specific class names. You can specify particular set of Jars or entire directories (including sub-directories) and search with wild cards or regular expressions. Very handy for learning new libraries.
http://sourceforge.net/projects/classinjarfinder/
You would think that after this long, we’d have solved the problem of keeping up with so many passwords. Anyway, until that Holy Grail has been found, we need to use tools like this one. It’s a small, simple shell/command prompt utility that stores your account passwords in encrypted format and supports password recovery questions. Some of the great features include sending the password to the clipboard with expiration time, password generation using pwgen, storing the passwords in a Git repository, and migration scripts for many popular password management tools. Packages are available for many Linux platforms and Mac OS X.
Lambda expressions were introduced in Java 8. If you’ve had a chance to try them, you may have wished that you could use them in your legacy Java applications. Retrolambda is a backport of the lambda expressions, method references and try-with-resources statements (and limited support for default methods and static methods on interfaces) on Java 7, 6, and 5 by modifying the Java 8 compiled bytecode to run on the older JVMs.
https://github.com/orfjackal/retrolambda
Here’s a simple graphical tool to use to monitor your Unix/Linux server characteristics. You can think of it as a GUI for htop. It’s a simple Node.JS application that simply calls the standard built-in Unix/Linux command line tools periodically, stores the data, and shows it graphically, using the Chart.js library. You can easily extend it to monitor other characteristics.
https://github.com/mashlol/mintr
This tool is both a Java GUI tool and package to show dependencies in your Java packages and applications. You can show the dependencies as a tree structure or a block diagram.
http://sourceforge.net/projects/javadepend/
Did you know that Steven Spielberg’s father had a central role in the popularization of the BASIC programming language? Well, neither did I! Read on to learn about how he designed one of the early commercial mainframes, the GE-225.
http://www.gereports.com/post/117791167040/its-basic-arnold-spielberg-and-the-birth-of
Just in case you don’t think that you have cognitive bias, check out this excellent video. Could you ride a bicycle that turns the front wheel in the opposite direction of the handlebars? Sounds easy, but it took this guy 8 months to learn how to do it (and then he could ride a regular bicycle), but his 6-year-old son learned it in 2 weeks.
https://www.youtube.com/watch?v=MFzDaBzBlL0
Many of us probably think of the use of substantial abbreviation as something brought about by text messaging. But even more than a century ago, telegraph operators had their own codified shorthand.
Let’s see… Just in the past couple of years, we’ve had Shellshock, VENOM, Heartbleed, and POODLE among other significant vulnerabilities. What will be the next zero-day threat discovered? Who knows? But with this tool, you’ll be prepared to come up with a cool name for it!
When you really want to make a point or grab the attention of your site visitors, look no further than SHOUTCLOUD. I’m sure you’re asking yourself why you wouldn’t simply use your languages libraries for converting text to uppercase. C’mon! This is the microservices generation. Get with the times!
I guess this is what you do in China when you get super-wealthy. Nevertheless, it is a pretty cool design.
http://www.bangkokpost.com/news/asia/573355/china-millionaire-beams-down-to-star-trek-office-park
We’ve seen a variety of musical renditions using the venerable floppy disk drive, but this one takes the concept to a whole new level. It’s an organ (German “orgel”) made with 49 these devices connected to a keyboard with MIDI controller. Wow!
In the inimitable style of Richard Scarry, this site tries to document the jobs of the 21st century knowledge economy. My favorite is the “Teenage Billionaire CEO”.
http://welcometobusinesstown.tumblr.com/