Episodes
Podcasting has definitely been a journey for both of us. When we started BJ wasn’t even a developer and Will was working for himself. Now 8 years later BJ is leading a team of developers and Will is back working for himself. It has been an amazing journey with you all this past years. We have both learned a lot about ourselves, programming, leadership, and audio engineering (well Beej learned about audio).
However, like all things, it can’t last forever. Sometimes you just hit a point where...
Published 07/20/23
Simple systems fail simply. Complex systems also fail simply, but their interconnectedness with other systems makes mitigating failures much more complex. Past a certain level of complexity, system failures are an emergent property of the system – that is, the set of system parts has a set of failure cases that the individual parts do not have by themselves. This means that it is more difficult to predict what can go wrong with a system. At some level, prediction is nearly impossible....
Published 07/13/23
Feedback is any information, observation, or even opinion about the performance or behavior of another individual our group. It can be formal as in performance or peer evaluations or informal such as with mentoring a junior developer. It is a form of communication designed to provide guidance that helps the other person to grow and achieve their goals.
Providing feedback gives insights and identifies areas of improvement. Often it is used to guide those you are leading toward personal and...
Published 07/06/23
Database sharding is a process of storing a large database across multiple machines. Because a single machine can only hold and process so much data, eventually some systems will scale beyond the ability of a single machine to handle data. Further, as systems scale, they may also need to split data between machines due to security and location considerations. Database sharding overcomes these problems by splitting the system into smaller chunks, allowing work to either be done in parallel, or...
Published 06/29/23
Effective communication is a vital aspect of any organization or team’s success, and one tool that has been proven to be very useful is the Four Square Report. This report is a simple and effective way to communicate information about a project or task to a team or stakeholders. It was originally developed by the U.S. military to help soldiers communicate critical information in a clear and concise manner, and has since been adopted by many organizations and industries.
4 square reports were...
Published 06/22/23
If you haven’t noticed, technology moves fast. There are constant improvements and reworking of every programming language out there. Sometimes the changes are small and easily dealt with, while sometimes the changes are huge. Complicating things further, most developers need to learn a wide variety of tools and frameworks in order to be effective in their current job. At a minimum, most of us need some kind of front end framework, a database (and its associated libraries), an IDE, a source...
Published 06/15/23
Understanding ACID and BASE databases is critical for any organization or individual who is involved in developing, managing, or using modern database systems. Both types of databases have distinct characteristics and trade-offs, and choosing the wrong one can have serious consequences on the performance, reliability, and security of your application.
ACID databases are designed for applications that require strict data consistency and accuracy, such as banking, e-commerce, and financial...
Published 06/08/23
APIs are a huge part of development today and one of the most common types of API out there is a RESTful API. REST stands for representational state transfer, which is a software architecture that imposes conditions on how an API should work. Essentially, it was created as a set of guidelines for how communications should work between disparate systems on a complex communication network (like the internet). REST is implemented atop HTTP and uses the standards in the underlying protocol as...
Published 05/25/23
There is a common demonstration, that we’ll do as a thought experiment, when talking about priorities. It has a person fill a bucket with sand, then try to add as many pebbles to the bucket as possible, following that they are to add larger gravel, then fist sized rocks. The obvious thing that happens is the bucket fills with sand and they are not able to add much else to it. Then they are instructed to add them in the reverse order so that larger rocks first, then gravel, then small pebbles,...
Published 05/18/23
Mob programming is a technique for getting multiple developers in the room, working on the same code. While possibly not the best technique for many situations, it really shines in certain narrow use cases. When it does work, it can often produce impressive results that a few separate developers couldn’t produce on their own. The collaborative aspects of mob programming are similar to pair programming in some respects, with very similar upsides and downsides.
In a mob programming session, a...
Published 05/11/23
File transfer protocols provide a standardized method for transferring files between two or more computers or servers over a network. They define the rules and procedures that are used to ensure that files are transferred efficiently and securely. Typically, they involve a client-server model where the client computer initiates the transfer request and the server computer responds by sending or receiving the requested file. During the transfer process the protocol specifies how the data is...
Published 05/04/23
A distributed denial of service attack, or DDOS is an attack in which a hostile party attempts to disrupt the normal functionality of a target server, network, or service by overwhelming a target and its related infrastructure. The goal is to disable the service, or at least degrade functionality enough to impact users. These attacks can occur for a variety of reasons. In some cases, an unscrupulous competitor may decide to attack to drive your customers to them. Sometimes DDOS attacks are...
Published 04/27/23
Git is a powerful tool that is essential to the software development process. It was created by Linus Torvalds in 2005 as a way to manage the development of the Linux kernel. Today, it is widely used by developers all over the world to manage their own projects and collaborate with others. Git has become the industry standard for version control. With Git, developers can easily keep track of changes, experiment with new ideas, and collaborate with others on the same project.
If you’re new to...
Published 04/20/23
Most of us have a reasonable working definition of what “agile” means in a software development context. We all know what it is SUPPOSED to mean, what it means when implemented correctly, and we even probably have some expectations when another developer uses the term. But when talking to a non-technical person, especially someone in an upper management role, we often have a hard time articulating it. And the results of this can be disastrous. There are plenty of magazines, websites, and...
Published 04/13/23
Almost all development work today is done on teams, both due to the complexity of our work and the sheer volume of it. As time has gone on, development work has also become more intensely collaborative, and “throwing work over the wall” has been acknowledged as being a terrible idea. As a result, the personalities of one’s coworkers has become more and more important. Unfortunately (or fortunately, depending on your perspective), developers exhibit a lot of personality quirks that are common...
Published 04/06/23
ChatGPT is a powerful language model developed by OpenAI that has been trained on a massive amount of text data. It is capable of answering a wide range of questions and generating text in response to prompts. ChatGPT has been used in a variety of applications, including chatbots, language translation, and text completion.
For software developers, ChatGPT can be a valuable tool for improving code quality and efficiency. By using ChatGPT, developers can ask natural language questions about...
Published 04/01/23
Breaking down your goals into more manageable tasks creates the flexibility to adjust as needed and brings clarity to the goals. When seen from the perspective of a step by step process goals are seen not as daunting behemoths to be gazed on in wonder but as complex things that can be accomplished through diligence and careful planning. This makes the process of achieving a larger goal more achievable.
In order to break down a goal it must be SMART: specific, measurable, achievable,...
Published 03/30/23
Depending on your use cases, your application may need to work well on Apple, iPhone, Windows, Apple, Linux, and even various types of tablets. And that’s just if you are looking at the US market – international markets have loads of other options. This is part of the reason web applications are so popular – it’s a way of making cross-platform concerns into someone else’s problem. And frankly, that’s a pretty rational approach, as dealing with the quirks of dozens of desktop, mobile, various...
Published 03/23/23
“The habits we choose to live by can shape our lives and define who we are.” – Stephen Covey
As software developers, our habits can greatly impact our success and the quality of our work. The 7 Habits of Highly Effective People is a book written by Stephen Covey that outlines key habits that successful people have in common.
Last year we discussed these from a negative sense, talking about 7 habits of unsuccessful people. These 7 habits are ones that were not developed but discovered when...
Published 03/16/23
Architecture projects are some of the most fun projects in development. Or at least they often appear that way. There is often the perception that in these projects you can fix all the little things that annoy you in your work environment. You can make it easier to roll out new features, while keeping the system more stable and easier to maintain. While this can be true, there is some risk here. In particular, many architecture projects seem to have no purpose other than massaging the egos of...
Published 03/09/23
Social engineering is defined as the use of psychological tactics to manipulate individuals into divulging confidential information or performing actions that may compromise their organization’s security. Social engineering attacks often target the weakest link in an organization, which is the employees. They are looking for easy access into a system.
It is important to have a firm grasp of social engineering as software developers since we are in a unique position to create security systems...
Published 03/02/23
The unix philosophy was originated by Ken Thompson and describes a set of cultural norms and approaches to minimalist, modular software development. This philosophy was based on the experience of the leading developers of the unix operating system. In the early days of software, there weren’t as many software tools as there are today – in fact, software tools (that is, tools that software developers use to build software), were not really around, at least not in a form you’d recognize today....
Published 02/23/23
You don’t have to be a morning person to start your day off right. A good morning routine can make a tiring stressful day survivable and possibly enjoyable, whereas a poor morning routine can destroy even the most enjoyable of days. The less of a morning person you are the more important a routine becomes as it reduces the requisite cognitive functioning early in the morning when you may not be fully awake or aware.
However, a morning routine is nothing without a good night before it. That’s...
Published 02/16/23
We had an issue with out CDN, we apologize for the issues with access to the episode HTTPS and SSL. We fixed it on the website but the podcatchers did not update because the RSS didn’t push a new episode. This apology should fix that so that you are able to listen to that episode now.
Thank you for listening,
Will and BJ
Published 02/13/23