Dear readers, many of you must have the ambition to become programmers, make a living with software development, or work in the IT sector. That is why we have prepared for you a short guide "How to become a programmer" to navigate you on the steps to this much-desired profession.
You can become a junior-level programmer after at least 1-2 years of daily learning and writing code, solving thousands of programming problems, developing several practical projects resulting in a lot of experience in software development. It takes more than a month or two of effort! The profession of the software engineer requires a large amount of knowledge as a result of a lot of practice.
Watch a video lesson about SoftUni and SoftUni Judge here: https://youtu.be/Ds5PD3UW57k.
There are 4 main skill groups that all programmers must have. Most of these skills are preserved over time and are not significantly affected by the development of specific technologies (which change constantly). These are the skills that every good programmer has and which every rookie should aspire to obtain:
- code writing (20%)
- algorithmic thinking (30%)
- fundamental knowledge of the profession (25%)
- languages and development technologies (25%)
Learning how to write code forms about 20% of the minimum skills required for a programmer to start work in a software company. The ability to code includes the following components:
- work with variables, conditionals, loops
- functions, methods, classes, and objects
- work with data: arrays, hash tables, strings
The ability to code can be learned in a few months of intensive studying and solving practical tasks by writing code every day. This book covers only the first part of the coding skill: working with variables, conditionals, and loops. The rest remains to be learned in subsequent trainings, courses, and books.
The book is only the beginning of a long-term study and a small step of your path to programming professionally. You won't be able to become a programmer without mastering the material from this book. You will lack programming fundamentals and it will become increasingly difficult to move forward. Therefore pay enough attention to the basics of programming: solve problems and write a lot of code for months until you learn to easily solve all the problems in this book. Then move on.
We pay special attention to the fact that programming language doesn't have significant relevance for one's coding skill. You can either code or not. If you can code in C#, then you'll easily switch to Java or C++, or any other language. These are the skills that each programming book for beginners starts with, including this one.
Algorithmic (logical, engineering, mathematical, abstract) thinking forms about 30% of the minimum skills for a start in the profession. Algorithmic thinking is the ability to break a task into a logical sequence of steps (algorithm) and to find a solution for each step, then to put them together in a working solution for the initial task. This is the most important skill that the programmer has.
How to build algorithmic thinking?
- Review many (1000+) programming tasks, the more diverse, the better. This is the recipe: reducing thousands of practical tasks, inventing an algorithm for them, and executing the algorithm, along with debugging errors along the way.
- Physics, mathematics, and/or similar sciences help, but they are not restraining! People with engineering and technical inclinations usually learn to think logically easily, because they already have the skills for solving problems, although not algorithmic.
- The ability to solve programming tasks (which requires algorithmic thinking) is extremely important for programmers. Many companies test for this skill specifically during job interviews.
This book develops a beginner's level of algorithmic thinking, but it is not enough to make you a good programmer. To become proficient in the professions, you will need to add logical thinking skills and improve tasks outside this book, such as working with data structures (arrays, lists, matrices, hash tables, tree structures) and basic algorithms (search, sorting, tree structures, recursion, etc.).
As you may guess, the programing language does not matter for the development of algorithmic thinking. To think logically is universal, even if it's not related only to programming. Because of their well-developed logical thinking, there is the misconception that all programmers are smart people and having a high IQ is a requirement for entering into the profession.
Fundamental knowledge and skills for programming, software development, software engineering and computer science form about 25% of the developer's minimum start-up skills. Here are the most important parts of these skills and knowledge:
- basic mathematical concepts related to programming: coordinate systems, vectors and matrices, discrete and indiscreet mathematical functions, end machines and state machines, concepts of combination and statistics, algorithm complexity, mathematical modeling, and others.
- skills to program - code writing, data work, use of conditional structures and loops, work with arrays, lists and associative arrays, strings, and word processing, working with streams and files, using program interfaces (APIs), working with a debugger, and others.
- data structures and algorithms - lists, trees, hash tables, columns, search, sorting, recursive, tree crawling, etc.
- object-oriented programming (OOP) – working with classes, objects, inheritance, polymorphism, abstraction, interfaces, data encapsulation, exception management, design templates.
- functional programming (FP) - working with lambda functions, high order functions, functions that return a function as a result, closing a state in a function (closure), and more.
- databases - relational and non-relational databases, database modeling (tables and links between them), SQL query language, object-relational data access (ORM) technologies, transactionality, and transaction management.
- network programming - network protocols, network communication, TCP/IP, concepts, tools, and technologies from computer networks.
- client-server interaction, communication between systems, back-end technologies, front-end technologies, MVC architectures.
- back-end development technologies - web server architecture, HTTP protocol, MVC architecture, REST architecture, web development frameworks, templating engines.
- web front-end technologies (client development) - HTML, CSS, JS, HTTP, DOM, AJAX, back-end communication, REST API call, front-end frameworks, basic design and UX (user experience) concepts.
- mobile technologies - mobile applications, Android and iOS development, mobile user interface (UI), server logic call.
- built-in systems - microcontrollers, digital and analog input and output control, sensor access, peripheral control.
- operating systems - work with operating systems (Linux, Windows, etc.), installation, configuration and basic system administration, process handling, memory, file system, users, multitasking, virtualization, and containers.
- parallel programming and asynchronousness - 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 trackers, test automation, building processes, and continuous integration.
We must emphasize once again that the choice of the programming language is not a significant factor in acquiring these skills.. They accumulate slowly, over many years of practice in the profession. Some knowledge is fundamental and can be learned theoretically, but it takes years of practice to fully understand them in depth.
Fundamental knowledge and skills for programming, software development, software engineering, and computer science are taught during the Software Developer Program and open 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.
Basic knowledge in the areas listed above is usually sufficient to start working as a programmer. You will gain a deeper understanding of the concepts from the technologies and development tools you use in your day-to-day work.
Programming languages and software development technologies form about 25% of the developer's minimum skills. They are the most voluminous to learn, but they change most quickly over time. If we look at job advertisements from the software industry, there are often all sorts of words mentioned (such as those listed below), but in fact, the ads silently imply the first three skills: to code, to think algorithmically, and to be proficient at the foundation of computer science and software engineering.
The choice of a programming language is essential for acquiring technological skills.
- Note: only for this 25% of the profession does programming language matter!
- For the remaining 75% of skills, language does not matter and these skills are time-resilient and transferable between different languages and technologies.
Here are some commonly used software development stacks sought by software companies (up-to-date as of January 2018):
- C# + CMO + P + classes from .NET + DATABASE SQL Server + Entity Framework (EF) + ASP.NET MVC + HTTP + HTML + CSS + JS + DOM + jQuéry
- Java + Java API classes + CMO + AP + databases + MySQL + HTTP + web programming + HTML + CSS + JS + DOM + jQuery + JSP/Servlets + Spring MVC or Java EE / JSF
- PHP + CMO + databases + MySQL + HTTP + web programming + HTML + CSS + JS + DOM + jQuery + Laravel / Symfony / other MVC framework for PHP
- Python + CMO + PH + databases + MongoDB or MySQL + HTTP + web programming + HTML + CSS + JS + DOM + jQuery + Django
- C++ + CMO + STL + Boost + native development + databases + HTTP + other languages
- Swift + MacOS + iOS + Cocoa + Cocoa Touch + XCode + HTTP + REST + other languages
If the words listed above seem scary and incomprehensible to you, then you are quite at the beginning of your career and have years to learn until you reach the profession of a software engineer. Don't worry, every programmer goes through one or more technological stacks and has to study a set of interconnected technologies, but the most important skill is writing programming logic (to code) and thinking algorithmically (to solve programming problems). Becoming a good software engineer is impossible without those skills.
As we already made clear, the technical skills, determined by mastering a specific programming language and technology, amount to about 10-20% of a software developer’s overall skillset.
- All programmers have about 80-90% of the same skills, which do not depend on language! These are the skills to program and develop software, and they are very similar in different programming languages and development technologies.
- The more languages and technologies you are proficient in, the faster you will learn new languages and the less you will feel a difference between them.
Let us state once again that the choice of programming language (mostly) does not matter - you just need to learn to program. This process starts with coding (by reading this book or enrolling in a Software Developer program), continues with mastering more complex programming concepts (like data structures, algorithms, OOP, and FP), and includes using fundamental knowledge and skills for software development, software engineering, and computer science.
You will need to know a specific programming language, program libraries (APIs), frameworks, and software technologies (front-end UI technologies, back-end technologies, ORM technologies, etc.) once you start working on a software project.