If you ask most people what the most important skill a software developer needs is, the answer would likely be "good code." If you stop thinking about it at that point, then the apparent plan to train beginners in software development would be to simply teach them how to code. There are many tales fraught with the errors of this misguided approach.
My assertion is that the ability to efficiently solve problems with technology is what brings value. The medium by which a software developer solves problems is, most often, code.
The ability to produce accurate, reliable code is an emergent behavior of four fundamental skills, or principles. If you can coach someone to strengthen these essential skills, then their ability to provide value to an organization through their code is a natural outcome of the expression of those skills.
Much like a painting maestro would never hand beginners brushes and paint and tell them to start painting, beginner software developers should not be told that their primary goal is to write code.
To continue the analogy, before a person can focus on creating art, the following foundational pillars of the craft must be developed:
- Composition
- Color theory
- Anatomy and figure drawing
- Perspective
- Art history
First Pillar: Communication
To solve a problem, one must first understand the problem.
The only way to understand the problem is to be able to communicate with the people around you. This skill must be strengthened to produce a valuable software developer since she must communicate effectively with technical and non-technical people.
Modern software development is a team sport.
- Master complex communication during group-based work.
- Use correct vocabulary when describing technical concepts.
- Know how and when to ask for help from a senior technical resource.
- Know how and when to ask for clarification from customers, product managers, and product designers.
- Document solutions and challenges with clear, easily understood language.
Second Pillar: Analytical Thinking
Once a problem is understood, one must analyze it and break it down into technical tasks.
Imagine that your product managers have discovered a need by your customers. They need to see the daily report of yearly sales trends. Each night, a day's sales need to be processed and added to a database. By the next day, business owners should see the total sales, by product category, across the entire year, including the previous day's sales.
When a software developer looks at a business problem like this, analytical thinking is required to identify all the technical tasks necessary to accomplish this goal.
- Ensure that the graph data includes the previous day's sales.
- Be alerted when daily sales fail to be loaded into the database.
- Execute a process to get daily sales loaded to load into the database.
- Transform the raw data into a format that is needed for the graph.
This is a small sample of smaller tasks that, when completed, will work together to solve the problem. Possible tools are identified, and then each one is evaluated to determine which one would be the most effective for each task.
Third Pillar: Algorithmic Thinking
Once a problem is understood, analyzed, and deconstructed into functional units, algorithmic thinking develops a logical, efficient series of steps to solve each unit. Each functional unit is broken down into basic operations (BO) or elementary operations (EO).
A software developer must identify and understand the dependencies in the task list and document an order of operations that must be followed.An efficient developer would rearrange the tasks into the following order in the example series of tasks identified in the previous section.
- Execute a process to get daily sales loaded into the database.
- Be alerted when daily sales fail to be loaded into the database.
- Transform the raw data into a format that is needed for the graph.
- Ensure that the graph data includes the previous day's sales.
Then each task would be broken down further into small, discrete operations. For example, the operations for the first task could be defined with the following list.
- Update the sales database table to include a timestamp.
- Define a code module that would accept data from retail locations, and include validation that it is in the expected format.
- Update the database access module to allow the daily sales to be inserted into the database.
- Create a new endpoint in the API that all retail locations would send their daily sales.
- Document the endpoint, parameters, and validations so they can be sent to the retail locations to be implemented.
Algorithmic thinking is critical to ensure an effective workflow for the entire team so that the solution can be delivered to the customer in a reasonable amount of time and for a reasonable cost.
Doing things in the wrong order ensures wasted efforts, failing tests, and increased costs.
Fourth Pillar: Efficient Learning
Talk to any software developer about the state of the profession, and the topic of the rapid pace of new technologies and tools being produced will come up. As a community, software developers continually devise new tools, and new languages, with the intent of making the job easier and the code more efficient.
This happens quite often, so a software developer must be efficient at learning these new tools to keep their skills sharp and provide maximum value.
Efficient learners take the time to use every resource available to learn a new skill or implement a non-mastered skill in a new context. Some specific tools and skills must be used for beginners to learn the basics.
- Referencing previous solutions
- Expert debugging skills
- Context-complete generative AI prompting
- Browser developer tools
- Searching the Web for resources, and evaluating results
Efficient learners also take a critical approach to what must be learned next. Learning the latest and greatest tool is often not the best approach to ensure you are increasing your value. I believe a balanced approach of learning fundamental concepts and skills along with modern tools serves technologists, and the businesses they support, best.