Fundamental knowledge and skills for programming, software development, software engineering and computer science make up about 25% of the developer's minimal skills to get started. Here are the more important of these knowledge and skills:
- basic mathematical concepts related to programming: coordinate systems, vectors and matrices, discrete and non-discrete mathematical functions, state automats and state machines, combinatorics and statistics concepts, algorithm complexity, mathematical modeling and others
- programming skills - code writing, working with data, conditional constructions and loops, work with arrays, lists and associative arrays, strings and text processing, work with streams and files, use of program interfaces (APIs) , work with debugger, and more
- data structures and algorithms - lists, trees, hash-tables, graphs, search, sort, recursion, binary search trees, and others
- object-oriented programming (OOP) - working with classes, objects, inheritance, polymorphism, abstraction, interfaces, data encapsulation, exceptions managment, design pattern
- functional programming (FP) - working with lambda functions, higher order functions, functions that return as a result function, closure, and others
- databases - relational and non-relational databases, database modeling (tables and links between them), SQL query language, object-relational mapping (ORM), transactional and transaction management
- network programming - Network protocols, network communication, TCP/IP, concepts, tools and technologies from computer networks
- interaction client-server, peer to peer communication, back-end technologies, front-end technologies, MVC architectures
- back-end technology development - web server architecture, HTTP protocol, MVC architecture, REST architecture, web development frameworks, templating engines
- уеб front-end технологии (клиентска разработка) - HTML, CSS, JS, HTTP, DOM, AJAX, комуникация с back-end, извикване на REST API, front-end frameworks, базови дизайн и UX (user experience) концепции
- web front-end technologies * - HTML, CSS, JS, HTTP, DOM, AJAX, back-end communication, REST API call, front-end frameworks and UX (user experience) concepts
- mobile technologies - mobile apps, Android and iOS development, mobile user interface (UI), server logic
- embedded systems - microcontrollers, digital and analog input and output control, sensor access, peripheral management
- operating systems - working with operating systems (Linux, Windows, etc.), installation, configuration and basic system administration, process management, memory, file system, users, multitasking, virtualization and containers
- parallel programming and asynchrony - thread management, asynchronous tasks, promises, common resources, and access synchronization
- software engineering - source control systems, development management, task planning and management, software development methodologies, software requirements and prototypes, software design, software architectures, software documentation
- software testing - unit testing, test-driven development, QA engineering, error reporting and error tracking, testing automation, build processes and continuous integration
We need to note this time that the programming language does not matter to assimilate all these skills. They accumulate slowly, over many years of practice in the profession. Some knowledge is fundamental and can be learned theoretically, but for their full understanding and awareness of their depth, you need years of practice.
Fundamental knowledge and skills for programming, software development, software engineering, and computer science are taught during the Software Engineer Program, as well as a number of optional courses. Working with a variety of software libraries, APIs, frameworks and software technologies and their interaction gradually builds this knowledge and skills, so do not expect that you will understand them from a single course, book or project.
To begin work as a programmer, only basic knowledge in the areas listed above are enough and the improvment happens at the workplace according to the technology and development tools used in the company and team concerned.