Become a Software Developer. Part 1 — Programming Basics: Prerequisites and Concepts
Alejandro Rodríguez ?
Empowering individuals to get the most out of tech. Information Technology Specialist | Arduino Developer | Maker. Promoting Cybersecurity Awareness · Open Source · STEAM Education
Welcome to Your Guide to Programming and Software Development! A comprehensive three-part series designed to provide you with practical tips, valuable insights, and a clear roadmap to becoming a software developer. Whether you're a beginner in tech or someone looking to sharpen your skills.
Through these series we'll cover key areas. Part 1 will cover programming prerequisites and explore developer specializations. Part 2 will cover free learning resources and communities. Finally on Part 3, we will focus on the critical aspects of landing your first job in tech and guide you through advanced skills beyond programming.
What is programming?
Programming, also known as coding, is the process of creating detailed and exact instructions that a computer can follow to perform specific tasks. The primary goal is to solve a problem or implement a feature. These instructions are written in a programming language. Which consists in a set of commands and syntax that a computer can interpret and execute.
Programming is the beginning of a software developer's journey. As a software developer, not only you will be creating code but also crafting code. It involves attention to detail and iterative improvement. It often includes refactoring, optimizing and adhering to best practices. Often considering broader aspects like data structures, design patterns, architecture, and user experience (UX). To produce robust, high-quality, maintainable and efficient software.
So many different programming languages
Different programming languages exist for different purposes. A programming language often has key components: syntax (specific rules to write a program), data types, variables (locations in memory to store data), operators to change data, control structures and libraries (blocks or packages of reusable software).
There are low-level and high-level languages. At the very botton, a computer CPU can only understand machine language. Also known as the base-2 system or binary code, which consists of sequences of 0's and 1's.
As writting binary code is very unpractical, assemblers were created. Instead of writting raw binary digits, mnemonics representing a pre-established set of instructions where used. An assembler, which acts as a middle-level language, interfacting instructions with machine language, then converts these human readable instructions into machine code.
Pop Quiz:
Follow this question on Engineering · Stack Exchange:
On top of assembly language more programming languages were created until the modern ones like Java, C++, Python, Rust, Go we have today. These are called high-level langugages.
Consider low-level and high-level as a comparison of a manual vs automatic transmission car. A low level language offers granular control of the target system and it's closest to the CPU. A high level language offers convinience and abstraction (ignoring the inner workings), but might compromise speed since there are interpreters and compilers.
A compiler is a computer program that takes for input a file containing a set of instructions, according to its language syntax, and translates it into a binary file which the CPU can understand. An interpreter executes code line line. Think of shell scripting languages like Bash and Power Shell, a browser engine running Javascript code, or automation programs like AutoHotkey.
Special cases: The Java programming language is both a compiled and an interpreted programming language. A Java compiler translates a .java file into bytecode in the form of a .class file. This bytecode is then executed by the Java Virtual Machine, then translating the bytecode for the target platform. As Java was designed to work on multiple platforms with the same codebase, a Virtual Machine was implemented to achieve this objective.
What does it take to become a programmer
Becoming a programmer requires a mix of specific personality traits and skills. Communication skills are essential because programmers often work in teams, explaining their ideas and collaborating effectively. Problem-solving is at the core of programming: it involves breaking down complex problems into smaller parts and finding logical solutions. Analytical thinking helps programmers analyze information and data, find patterns and make informed decisions.
Curiosity and continuous learning are key traits as well. Programmers need to be curious about how things work and eager to explore new technologies and solutions. A strong desire to learn is important because programming languages and technologies evolve rapidly. Programmers must continually update their skills through courses, reading, and hands-on practice.
Perseverance is probably the most important trait. Programming involves encountering bugs and errors that can be frustrating. Tolerance to frustration enables programmers to persist through complex problems without becoming discouraged, maintaining focus on finding effective solutions.
The term "bug" is used to to describe unexpected glitches in computer systems. It originated in 1947 when computer pioneer Grace Hopper and colleagues found a moth trapped in a relay of the Harvard Mark II computer, causing a malfunction. Engineers literally taped the insect in their logbook.
Myth: You need to be a math prodigy to become a programmer. While mathematical concepts can be helpful and are occasionally required in certain areas of programming, they are not universally necessary for all programming tasks. Though certain fields like machine learning, data science or computer graphics may require more mathematical proficiency, most programming roles prioritize logical reasoning and practical problem-solving skills.
Curious fact: After facing a programming challenge overnight, when falling asleep some people find out they can dream about coding. Upon waking up, they discover that the solution to their problem has magically appeared.
Remember to take care of your health while working. The high level of concentration during long hours in front of a computer can take a toll on your body and your mind. Take breaks to stretch and move around. Stay hydrated and eat healthy snacks. Get enough sleep and find time for exercise. Taking care of yourself helps you stay focused and feel better overall.
Understanding roles
A computer programmer is someone who writes code to create software applications or programs. They focus on translating ideas into code using a programming language. Programmers often work on specific tasks within a larger project, implementing features and ensuring the code works correctly.
A software developer is involved in the broader process of software development. They not only write code but also participate in designing software, planning its architecture, and testing to ensure it meets requirements. They might collaborate closely with business users.
A software engineer applies engineering principles to design, develop, and maintain software systems. Software engineers often take on leadership roles, coordinating teams and projects to meet deadlines and quality standards. Their approach included requirements analysis, software design patterns, and project management practices.
Finding your purpose
Start with Why principle
The "Start with Why" principle, popularized by Simon Sinek, emphasizes the importance of understanding the core purpose or motivation behind any action or decision. Applied to programming, it means beginning your journey by defining why you want to learn a particular language or technology.
When choosing a programming language, it's important to think about what you want to achieve as a programmer. Different languages are suited to different tasks. For example, if you're interested in building websites, HTML, CSS, and Javascript (or Typesecript) are essential.
For those inclined for mobile development, Java and Kotlin are used for Android apps and Swift for iOS devices. The React Native framework targets both Android and iOS devices. Allowing developers to write code in Javascript with a single codebase, which speeds up development and reduces costs.
Google's Flutter framework allows developers to create multi-platform applications from a single codebase. Electron, on the other hand, is used for building desktop applications that work on Windows, macOS, and Linux. It allows developers to create desktop apps using web technologies.
If data analysis or machine learning spark your interest, Python is a popular and beginner-friendly choice. R is a programming language specifically designed for statistical computing and data visualization. Whereas MATLAB is widely used in engineering, scientific research, and mathematical computing.
领英推荐
If your motivation is building video games, you will most likely program for a game engine like Unreal Engine, Unity, Game Maker, Godot. Each engine and associated languages offer unique advantages tailored to different aspects of game creation, from physics simulations to interactive gameplay mechanics. Some game development languages are C++, C#, Javascript, Lua.
Identifying your interests
A way to assess your skills and interests and find out what you enjoy is to start building small projects. Have you encountered a repetitive task or a problem that could be automated? This could be a perfect opportunity to apply programming to streamline your workflow. Do you find yourself curious about how alarm systems and traffic lights work? An Arduino o Raspberry Pi kit might be a great choice, with a hands-on learning approach right from the beginning.
Your career goals also play a big role in deciding which language to learn. If you aim to work in tech companies, languages like JavaScript, Python, and Java are often in high demand. For roles in academia or research, Python or R might be more relevant. Knowing which industries favor which languages can guide your learning path and make you more competitive in the job market.
It's also useful to consider the community and resources available for each language. A language with a large, active community can offer plenty of tutorials, forums, and support to help you learn and solve problems along the way. Ultimately, the best language for you is one that aligns with your interests and career aspirations.
If your motivation is building tools like a game engine, a browser (or rendering) engine, a chess engine... Or you are interested in researching and building applications for complex fields like cryptography, machine learning and artificial intelligence, what your looking for is a career in Computer Science.
Identifying your strengths
Consider career and personality assessments. These assessments can help you uncover your natural talents, preferences, areas of expertise and preferred work environment. By understanding what you excel at and enjoy, you can align your career choices to leverage these strengths effectively.
The 16 personalities, based on the Myers-Briggs Type Indicator (MBTI), categorize individuals into distinct personality types. Each type is defined by preferences in four pairs of traits — https://www.16personalities.com
Include your own conclusions through self-reflection and previous experiences. While assessments can provide a framework, sometimes might miss clues.
Types of developers
Now that you know there are different languages for different purposes, there are also various approaches according to the specific roles of developers in the software development industry.
Frontend developers
Frontend developers focus on creating the visual and interactive elements of websites and applications that users directly interact with. Using HTML for structure, CSS for styling, and Javascript for functionality, they build responsive interfaces. Frontend developers often use frameworks and libraries such as React and Svelte make their work easier. These tools provide pre-made components and functionalities that developers can use to build websites and applications more efficiently.
Backend developers
Backend developers specialize in building and maintaining the hidden parts of websites and applications that users don't see directly. They work with server-side languages like Python, Ruby, or Javascript (Node JS) to develop the logic and functionality that power the frontend. This includes managing databases, handling user authentication, integrating with external services (like payment processors or APIs), and ensuring that data is securely transmitted between the server and the client. Backend developers focus on creating efficient and scalable systems that support the frontend and deliver dynamic content to users based on their interactions.
Full-stack developers
Full-stack developers possess a comprehensive understanding of how both frontend and backend components interact, allowing them to troubleshoot issues across the entire application stack. It's important to note that mastering both areas typically doesn't happen simultaneously or equally. Usually, developers specialize in one area before expanding their skills to include the other. This sequential learning allows them to gain proficiency in each aspect over time, rather than trying to fully master both disciplines simultaneously.
Mobile developers
Mobile developers specialize in creating applications specifically designed for mobile devices like smartphones and tablets. They typically focus on two main platforms: Android and iOS. They work closely with designers and backend developers to integrate user interfaces with backend services.
Embedded software
Embedded software developers specialize in creating software for small computing devices called embedded systems. The target architectures are microcontrollers or single-board computers (SBC) which are built around a System on a Chip (SoC). Like AVR and Raspberry Pi, respectively. Arduino is not a microcontroller by itself, rather a development board built around one.
These devices are found in industrial applications, appliances, alarm systems, hardware prototypes, and various other electronic devices. Think of your microwave or alarms triggered by smoke or motion sensors.
They focus on writing efficient code using languages like C and C++, ensuring these systems perform reliably and meet specific functionality and performance requirements.
How to get started
Getting started in programming varies depending on your background, whether you're completely new into tech or you have some experience. Besides, the are different approaches if you are going to start learning programming as an adult or the learner is a child or teenager.
Children will benefit from STEAM education applications that feel like play, like MIT Scratch and Code Monkey. While they learn programming foundamentals at the same time.
Teenagers might feel inclined into building things so Arduino kits are a great choice. With MIT App Inventor, they can create basic mobile apps for Android phones. Some teenagers have a clear goal in mind and might want to start coding profesionally right away, which is also fine.
If you have experience in IT roles such as system administration, network engineering, or technical support, you likely already have a solid foundation in technology and problem-solving. I suggesting jumping straight away into any language of your choosing, according to your goals.
If you have a different background and no previous experience in tech, I would give you the same advice for children: start from Scratch (pun intented). Block level languages will help you focus on the development of the logical thinking, before diving into the intricacies of writting and compiling or executing code.
The idea is to give you a sense of what programming feels like. You will learn how to handle control structures, which direct the flow of a program, variables, data types, inputs and outputs, and very important, dealing with frustration. You won't — probably get it right at first try :-). It's a low risk way to determine if programming is for you. Before you spend any money (which is optional).
Remember, at its core is about writting (or telling) instructions to a computer to perform a task that will solve a specific problem. You shouldn't spend more than a week with block based languages (unless you truly like it which is perfectly ok!) before picking a professional programming language.
There is a possibility that adults might find Scratch and Blocky too simplistic because they are geared towards younger learners, leading to boredom or a desire for a more serious approach right from the start. If that is the case, pick an easy to learn high-level language like Python and Javascript.
On the second part of this article series I will provide you a very detailed compilation of free learning resources.
Key considerations
Ask questions the right way
At some point you will find yourself stuck while learning or working on a project. When this happens, don't get discouraged. Instead, ask for help effectively, be clear about the problem and give some background.
Explain what you want to achieve and what you've already tried. Describe your thinking process and explain terms and concepts in your own words. So others are able to identify gaps in your knowledge and correct misconceptions.
Use simple and specific language. When possible, share a small example of the issue and include any error messages or screenshots. Being polite and thankful can also encourage others to help you.
This approach allows more experienced developers to understand the issue better and provide accurate guidance.
There are more in-depth articles about seeking for help which I recommend reading. For the second one I suggest the reader view from Mozilla Firefox.
Conclusion
Programming is a broad field that encompasses various languages, paradigms, and applications. Mastering the basics is essential for anyone looking to further explore this dynamic discipline. By understanding foundational concepts such as variables, control structures, and functions, beginners can build a solid framework upon which to expand their programming skills.
Software Engineer | Dad Jokes | Tech Baddie
5 个月Wow! Alejandro I can see how much time and effort you put into this. I genuinely wish I had this a year ago when I was seriously exploring entering tech, myself. Thank you for sharing! What a great read.