Choosing a language in which to develop code is the first decision when building an application or program, followed by the platform for which the code will be written.
Programming languages are governed by rules and regulations (syntax) for constructing programs that pass instructions to a processor. Open NX-OS provides the ability to build native Linux applications using the Open NX-OS SDK, as well as utilizing NX-API REST for extensible and flexible programming options.
Python
Python is a heavily used language for network programming; it is a modular, extensible and flexible language with a focus on code readability. Code written in Python is executed through an interpreter, allowing portability of code between different platforms. Portability is a key factor, particularly for administrators and developers who may work in Windows, Linux or OS X. Python is growing in popularity and industry adoption. Other Python features include:
- High level and readable syntax
- Support for object-oriented constructs
- Ability to express concepts in fewer lines of code
Many of Cisco's network programmability projects available at https://github.com/datacenter are written using Python.
Other Languages
Python is certainly the most widely adopted language, although it is not the only language utilized for network programming. Metaphorically speaking, Python applications may be a single spoke in the larger wheel of network management and associated applications. Network programmers developing in Python may also use Python frameworks such as Django or Flask for rapid web development. Formatting and tagging with HTML and CSS, or integration with existing web-based applications using PHP may be desired. Programming language selection and usage should always tie directly back to core requirements and constraints.
Integrated Development Environments (IDE)
While all program code begins as text in a window, thankfully there are software packages available for download and use that can help simplify the development process. These packages are called Integrated Development Environments (IDEs) and integrate many of the common tasks in software development to enable rapid application development. While most beginners and novice programmers will utilize a text editor for their first projects, soon these users will leverage an Integrated Development Environment. The IDE is not code- or domain-specific, and in many cases the IDE is not language-specific, either.
An IDE can incorporate extensions, such as those discussed later with regard to version control, to allow programmers to integrate other aspects of application development into their workflow. For example, git extensions available within an IDE would allow check-in/check-out of code, as well as editing of changelog information during commits.
PyCharm is an IDE with full support for Python, as well as for HTML, CSS, JavaScript, Node.js and more.
https://www.jetbrains.com/pycharm/
Komodo is another IDE with full support for Python, as well as Go, Perl, Ruby and more.
https://komodoide.com/
Software Development Kits
A software development kit (SDK) differs fundamentally from an IDE. An SDK is a set of functions, packages, documentation and programs required for development on a specific platform or technology, whereas an IDE can be thought of as providing tools for application development using a specific language or technology. Java is one of the most widely-used languages, and it requires an SDK in order to develop Java applications. It is also important to outline the fact that running these applications does not require a full SDK, only a runtime environment. Software development kits are typically quite dependent on the target platform. For example, developing iOS applications for iPhone requires the Swift language, contained within the iOS SDK. Developers can then use the Xcode IDE for developing iOS applications.
Python does not have an SDK per se; its modularity supports using commands like pip to download and install packages and modules for use in Python programs.
Programming languages, IDEs and SDKs are essential components for software development. The user has multiple options related to language and IDE of choice. What is a critical, is that APIs and data models are made available for network elements to be programmed.