Thursday, July 6, 2023

Coding Overview

 

Keywords: Code, Program, Source code, Programmer, Language, Skills, Clean Code, Code review, Static Analysis, Control flow Analysis, Data flow Analysis, Cyclomatic complexity, Maintainability, Tools.

·       Coding

o   Coding is the process of building a computer program to accomplish a specific computing result or to perform a particular task.

o   This work involves writing, testing, debugging, and maintaining the source code of computer programs.

o   Computer coding works through a series of steps. Typically, computer programmers write instructions in a programming language such as Java or C#, which is then converted into a format that the computer can understand and execute.

o   Code is not written the same way typical human language is written. Instead, code can be written in various programming languages, each with its own set of rules and syntax.

o   Coding enables programmers to create computer software, applications, websites, and other digital tools that interact with data, execute algorithms, and perform automated tasks. Essentially, it's the language through which we communicate and instruct computers to perform functions and solve problems.

·       Code review and Clean code

o   Code review

ü  Analyze a section of code or pseudo-code used to identify Code problems, Checklists for code reviews are necessary

ü  Checklists used for code reviews could include the following items: Design, Meaningful Names, Variables, Functions, Comments, Source code structure, Arithmetic Operations, Loops and Branches, Objects, Classes, Data structures, Error Handling, Boundaries, Unit Tests, Concurrency, Refactoring, Defensive Programming and others.

o   Code is clean if it can be understood easily – by everyone on the team. Clean code can be read and enhanced by a developer other than its original author. With understandability comes readability, changeability, extensibility and maintainability

o   Clean Code General rules:

ü  Follow standard conventions.

ü  Simpler is always better. Reduce complexity as much as possible.

ü  Leave the code cleaner than you find it.

ü  Always find root cause. Always look for the root cause of a problem.

·       Code Static Analysis

o   The objective of static analysis is to detect actual or potential defects in code to improve code maintainability, Static analysis includes Control Flow Analysis, Measure Complexity and Data flow analysis

o   Control Flow Analysis

ü  is a static technique where the steps followed through a program are analyzed through the use of a control flow graph

ü  There are a number of anomalies which can be found in a system using this technique, including loops that are badly designed (e.g., having multiple entry points or that do not terminate), ambiguous targets of function calls in certain languages, incorrect sequencing of operations, code that cannot be reached, uncalled functions, etc.

ü  Control flow analysis can be used to determine cyclomatic complexity. The cyclomatic complexity is a positive integer which represents the number of independent paths in a strongly connected graph

o   Cyclomatic complexity

ü  a metric used to indicate the complexity of a program, It is a quantitative measure of the number of linearly independent paths through a program's source code

ü  to define the cyclomatic complexity of a program is to look at its control-flow graph, a directed graph containing the basic blocks of the program, with an edge between two basic blocks if control may pass from the first to the second.

ü  The complexity M is then defined as: M = E – N + 2P , E = the number of edges of the graph, N = the number of nodes of the graph, P = the number of connected components.

o   Data flow Analysis

ü  covers a variety of techniques which gather information about the use of variables in the code.

ü  The lifecycle of each variable along a control flow path is investigated, (i.e., where it is declared, defined, used, and destroyed), since potential anomalies can be identified if these actions are used out of sequence

o   Improve the maintainability of code:

ü  Poorly written, uncommented, and unstructured code tends to be harder to maintain. It may require more effort for developers to locate and analyze defects in the code, and the modification of the code to correct a defect or add a feature is likely to result in further defects being introduced.

ü  Static analysis is used to verify compliance with coding standards and guidelines; where non-compliant code is identified; it can be updated to improve its maintainability.

ü  These standards and guidelines describe required coding and design practices such as conventions for naming, commenting, indentation and modularization.

ü  code modularization includes measures of coupling (the degree to which components rely on each other during execution) and cohesion (the degree to which a component is self-contained and focused on a single task)

ü  A system that has good maintainability is more likely to have a low measure of coupling and a high measure of cohesion

·       Coding Skills

o   Technical Skills include:

ü  Proficiency in Programming Languages

ü  Debugging Skills

ü  Understanding of Algorithms and Data Structures

ü  Mathematical and Logic Skills

o   Soft Skills include:

ü  Critical Thinking and Problem-Solving Abilities

ü  Attention to Detail and the Ability to Work with Precision

ü  A Willingness to Learn and Adapt to New Technologies

ü  Creativity

ü  Time Management and Organization

ü  Flexibility and Adaptability

·       Coding Tools:

o   Code Editors: Visual Studio Code, Sublime, Notepad++, Vim, Atom, Brackets, and others

o   Integrated Development Environment (IDE’S): MS Visual Studio, IntelliJ IDEA, NetBeans, Eclipse, Android Studio, PyCharm, and others

o   Programming Languages: C, Objective-C, C++, Java, Ruby, Python, C#, Go and Others

o   Static analysis tools: SonarQube, CodeQL , CodePeer, CodesScene, and others


References

https://www.springboard.com/blog/software-engineering/coding-skills/

https://en.wikipedia.org/wiki/Cyclomatic_complexity

Clean Code Book, Robert Martin

Code Complete Book, Steve McConnell