Before starting the refactoring Dec 03, 2024 code tests system mistakes changes
3 min read

Sooner or later, every programmer has to perform refactoring of existing code. But before diving in, consider a few things that can save you and your colleagues a lot of time (and spare you from headaches): It is best to start refactoring by assessing the state of the existing code in the project and the tests written for it. This way, you can identify the strengths and weaknesses of the code in its current state, to preserve its strong points and avoid the mistakes already made. Everyone thinks their system will be better than the current one… until it turns out that the new code is no better, and maybe even worse, than the previous version, all because we did not learn from the mistakes made in the old system.
...
Relational Database Management Systems Nov 28, 2024 in • JAVAMYSQLRUBYSQL
ram java ruby data database application dbms sql
3 min read

If your application needs to handle a large, long-lived set of interrelated data elements, you can confidently place it in a relational database. In the past, there were few relational DBMSs; they were complex, expensive to maintain, and clunky beasts. Those times are gone. Today, finding a relational DBMS is not difficult: it is quite possible that a relational DBMS or even two are already installed on your machine. Some very advanced relational DBMSs, such like MySQL and PostgreSQL, are available in source code, so the question of costs it is no longer worth buying them. Moreover, the so-called “embedded database systems” can be integrated into your application as libraries, almost requiring no configuration and administration; two such examples are interesting open-source DBMS, SQLite and HSQLDB.
...
Code review Nov 20, 2024 code conduct review reviews process knowledge
3 min read

Conducting code reviews is necessary. Why? It improves code quality and reduces the relative share of defects. But you may be misunderstanding why this happens. Many programmers have an aversion to code reviews, which can be linked to their unfortunate personal experiences. I have encountered organizations where all code underwent formal review before it could enter the system for commercial use. Often, the review is conducted by an architect or lead developer—a practice that can be called “the architect checks everything.” This is documented in the company’s software development process guide, and programmers are required to comply. Perhaps, in some organizations, such a strict and formal process is indeed necessary, but they are in the minority. In most organizations, such an approach is counterproductive.
...
Program in pairs and get into the flow Nov 20, 2024 new team pair programming flow state
4 min read

Imagine that you are completely absorbed in your work: focused, passionate, and busy. You have lost track of time. You are happy. You are in a state of flow. On a larger scale, it is difficult for an entire team of developers to achieve and maintain a state of flow due to numerous interruptions, distractions, and other obstacles that can easily disrupt it. If you have already participated in pair programming, you probably know how it contributes to achieving a state of flow. If not, we want to share our experience to encourage you to start pair programming immediately! For pair programming to be successful, some effort is required from individual team members and the entire team as a whole. Being part of a team, show patience towards less experienced developers.
...
Interfaces Nov 18, 2024 api interface interfaces users use user
3 min read

One of the most common tasks in software development is interface specification. Interfaces exist at the highest level of abstraction (user interfaces), at the lowest level (function interfaces), and at intermediate levels (class interfaces, libraries, etc.). Regardless of what you are doing—aligning with end users on their future interaction with the system, collaborating with developers to develop the API specification, or declaring private class functions—interface design is an important part of your job. If you handle it well, using your interfaces will be a pure pleasure, and user productivity will increase. If you handle the task poorly, your interfaces will become a source of frustration and errors. Good interfaces possess the following properties: They are easy to use correctly. Users of a well-designed interface almost always use it correctly because that is the path of least resistance for that interface.
...
Carefully choose your tools Nov 17, 2024 in • GNU
modern gnu tools code application configuration software
4 min read

Modern applications are extremely rarely created “from scratch.” They are assembled from already existing building blocks – components, libraries, and frameworks, and there are several compelling reasons for this: The volume, complexity, and sophistication of applications are increasing, while the time allocated for their creation is decreasing. It is more beneficial to spend the time and intellect of developers on business logic code rather than application infrastructure code. - Widely used components and frameworks have fewer chances of encountering errors compared to those developed independently. - High-quality tools are available for free on the Internet, which reduces development costs and simplifies the search for interested developers with the necessary experience. - The creation and maintenance of software require a significant amount of human labor, so it can be cheaper to buy ready-made products than to create them.
...
Apply the principles of functional programming Nov 16, 2024 programming transparency paradigm objects functions
3 min read

Functional programming has recently regained the attention of the majority in the programming community, partly because the emergent properties of the functional paradigm resonate with solving the challenges arising in our industry due to the increasing importance of multi-core architectures. And although this application is undoubtedly important, it is not the main reason for my urging to learn functional programming. By mastering the functional programming paradigm, a programmer can significantly improve the quality of code produced in other contexts. A deep understanding of the functional programming paradigm and its practical application will help you design systems with a much higher degree of referential transparency. Referential transparency is a highly desirable quality: it implies that functions consistently produce the same results for the same input data regardless of the place and time of calling these functions.
...
Warning - Common code ownership Nov 12, 2024 study code context dependencies parts number
2 min read

My first project in the company. I just defended my thesis, and I’m eager to prove myself, so I stay late at work and thoroughly study the existing code. Working on my first task, I apply everything I’ve been taught: comments, event logs, extracting common code into libraries (where possible), all that stuff. I feel completely ready for code review, but my colleagues seem to pour cold water on me: I get criticized for code reuse! How so? During my university studies, code reuse was hailed as one of the best practices in software development. All the articles and textbooks I read, guided by experienced professional programmers—were they all wrong? It turns out, I overlooked something very important. Context. The fact that two directly unrelated parts of the system use the same logic means less than I thought.
...
One line of working code costs 500 lines of specifications Nov 10, 2024 design project goal system time
2 min read

You can prepare for a jump for a very long time, get used to the treadmill surface, take a run-up, but still never jump. Design is a beautiful thing. A systematic, detailed representation of the problem space and its solution reveals errors and identifies opportunities for improvement, sometimes in quite radical ways. Specifications play an important role in this, as they define the template for building the system. It is very important to carefully consider the entire architecture—both at the macro level, examining the interaction between components, and at the micro level, delving into the behavior of the components themselves. Unfortunately, architects often get carried away with the design process, falling under the charm of architectural abstractions. However, by themselves specifications have no value.
...
Creating architecture as the art of balance Nov 08, 2024 match first product priorities software organization development
3 min read

Match the interests of the parties with the technical requirements. When it comes to software architecture development, First and foremost, we envision classic technical operations: breaking the system into modules, defining interfaces, distributing responsibilities, applying templates, and optimizing performance. In addition, the architect must consider a number of other aspects, including issues of security, ease of use, maintainability, release management, deployment parameter selection, etc. But all the listed technical and procedural aspects must be aligned with the needs of stakeholders. Taking these interests into account when analyzing requirements is an excellent way to ensure the completeness of the specifications for the requirements of the product being developed. All parties involved in the project have interests that affect both the software development process adopted in the organization and the organization as a whole.
...