Why Foundational Blocks of Building Software Matter
An opinion piece by a software engineer
Introduction
Software engineering is a vast and diverse field that encompasses many technologies, paradigms, and challenges. In recent years, there has been a lot of hype and excitement around artificial intelligence (AI), which is undoubtedly a powerful and promising tool for solving complex problems and creating innovative applications. However, AI is not a magic bullet that can replace or ignore the foundational blocks of building software, such as network, storage, compute, DevOps, architecture best practices, and many more. These are the essential components that enable software to run, scale, communicate, and evolve. Without them, AI would not be possible or effective.
In this article, I will argue that software engineers, especially fresh graduates who are eager to learn and work with AI, should not neglect or overlook the importance of these foundational blocks. I will explain why they are still relevant and valuable in the modern software landscape, and how they can complement and enhance AI solutions. I will also suggest some ways to balance and integrate AI with other aspects of software engineering, and to avoid falling into the trap of chasing the latest trends without understanding the basics.
Why Foundational Blocks Matter
The foundational blocks of building software are the core concepts and skills that every software engineer should master and apply in their work. They include, but are not limited to, the following:
Critical thinking: the ability to analyze, evaluate, and synthesize information, to identify and solve problems, and to make logical and rational decisions.
Data structures and algorithms: the knowledge and implementation of efficient and effective ways to store, manipulate, and process data, and to perform common operations and tasks on them.
Programming languages: the syntax, semantics, and features of different languages that enable software engineers to express their ideas and instructions to computers, and to communicate with other developers.
Network: the understanding and application of the principles and protocols that govern the transmission and exchange of data and messages between computers and devices over a network.
Storage: the awareness and utilization of the various types of storage media and technologies that store and retrieve data, and the trade-offs and challenges involved in managing them.
Compute: the knowledge and optimization of the hardware and software resources that execute and run software, and the factors and constraints that affect their performance and scalability.
DevOps: the culture and practice of integrating and automating the development and operation of software, and the tools and techniques that support it.
Architecture best practices: the design and organization of software systems and components, and the patterns and principles that guide and improve their quality, reliability, maintainability, and extensibility.
领英推荐
These foundational blocks are not outdated or obsolete, but rather, they are the building blocks that support and enable the development and deployment of any software, including AI. They are the common denominator that connects and bridges different software domains and disciplines, and the basis for learning and adapting to new technologies and trends. They are also the source of innovation and creativity, as they provide the tools and frameworks to explore and experiment with new ideas and solutions.
Ignoring or skipping these foundational blocks can have serious consequences for software engineers and their projects. Some of the risks and drawbacks of neglecting them are:
Lack of understanding: without a solid grasp of the foundational blocks, software engineers may not fully comprehend how and why their software works, and what are the implications and trade-offs of their choices and actions. They may also struggle to communicate and collaborate with other developers who have different backgrounds and expertise.
Lack of flexibility: without a broad and diverse knowledge of the foundational blocks, software engineers may become too dependent on or attached to a specific technology or tool, and may not be able to adapt or switch to other alternatives when needed. They may also miss out on opportunities and possibilities that lie outside their comfort zone or scope of interest.
Lack of quality: without a rigorous and disciplined application of the foundational blocks, software engineers may produce software that is inefficient, unreliable, insecure, or buggy. They may also fail to meet the requirements and expectations of their users and stakeholders, and to deliver value and satisfaction.
How to Balance and Integrate AI with Foundational Blocks
AI is not a standalone or isolated technology, but rather, it is a part of a larger and more complex software system that relies on and interacts with other components and layers. Therefore, software engineers who want to learn and work with AI should not treat it as a separate or superior entity, but rather, as a complement and enhancement to the foundational blocks of building software. Some of the ways to balance and integrate AI with foundational blocks are:
Learn the basics: before diving into the advanced and specialized topics of AI, software engineers should first learn and master the basics of the foundational blocks, and how they relate and apply to AI. For example, they should understand how data structures and algorithms affect the performance and accuracy of AI models, how network and storage affect the availability and accessibility of AI services, how compute and DevOps affect the scalability and reliability of AI systems, and how architecture best practices affect the design and integration of AI components.
Keep up with the trends: while learning and mastering the basics, software engineers should also keep up with the latest trends and developments in AI, and how they affect and challenge the foundational blocks. For example, they should be aware of the new and emerging AI techniques and applications, the new and evolving AI frameworks and platforms, the new and growing AI challenges and opportunities, and the new and changing AI standards and regulations.
Experiment and innovate: with a solid and updated knowledge of the foundational blocks and AI, software engineers should then experiment and innovate with new and existing ideas and solutions, and how they can leverage and combine the strengths and advantages of both. For example, they should try to solve new and complex problems with AI, to create new and innovative applications with AI, to improve and optimize existing software with AI, and to explore and discover new and unknown possibilities with AI.
Conclusion
AI is a fascinating and powerful technology that offers many benefits and opportunities for software engineering. However, it is not a substitute or a shortcut for the foundational blocks of building software, which are still relevant and valuable in the modern software landscape. Software engineers, especially fresh graduates who are eager to learn and work with AI, should not neglect or overlook the importance of these foundational blocks, but rather, they should balance and integrate them with AI, and use them as a basis for learning, adapting, and innovating. By doing so, they can create and deliver software that is not only intelligent, but also efficient, reliable, secure, and high-quality.
?