Понимание основ программирования

Как член студенческой лиги Microsoft ADC в моем университете, я имел честь пройти несколько курсов, чтобы должным образом закрепиться в программировании. Эти курсы позволили мне понять основы программирования и разработки программного обеспечения. Я пишу эту статью в качестве руководства для всех, кто начинает работать инженером-программистом и ищет лучший путь, поскольку я считаю, что эти курсы помогли мне понять траекторию становления инженером-программистом.

Курсы:

1.Основы программирования: основы

Этот курс помог мне понять основы программирования и языков программирования, он научил основам, которые являются общими для нескольких языков, таких как переменные, строки и условный код. Вы также узнаете, как работать с несколькими типами данных, правильно комментируя свой код и устранение ряда ошибок. Я также узнал одну важную вещь: как сделать правильный выбор при выборе языка программирования для использования. Этот курс помог мне понять, что программирование позволяет вам указывать компьютеру, что делать и как это делать.

2. Основы программирования: алгоритмы

Алгоритмы — это основа программирования. Это логические / пошаговые процедуры, которым вы следуете для решения любой проблемы. Этот курс помог мне понять, как алгоритмы предлагают способ думать о задачах программирования, а также заставил меня понять и увидеть наиболее распространенные алгоритмы для поиска и сортировки информации. . Я также увидел зацикливание и рекурсию в действии и то, как их можно использовать в программировании и понимании общих структур данных. Я также научился оценивать производительность заданного алгоритма и уникально фильтровать значения && count с помощью хеш-таблиц. Ниже приведен фрагмент кода некоторых реализаций того, чему я научился с помощью python.

# Loops

# For loop to iterate over a list
my_list = [1, 2, 3, 4, 5]
for num in my_list:
    print(num)

# Recursion

# Recursive function to calculate the factorial of a number
def factorial(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n * factorial(n-1)

print(factorial(5))  # Output: 120


# Filtering and Counting Unique Values with Hash Tables

# Using a hash table (dictionary) to filter and count unique values
my_list = [1, 2, 2, 3, 4, 4, 5, 5, 5]
unique_values = {}
for num in my_list:
    if num in unique_values:
        unique_values[num] += 1
    else:
        unique_values[num] = 1

print(unique_values)  # Output: {1: 1, 2: 2, 3: 1, 4: 2, 5: 3}

3. Основы программирования: структуры данных

Этот курс поможет вам понять структуры данных, он предоставил мне введение в структуры данных, а также дал углубленный обзор нескольких структур данных, таких как массивы, стеки и очереди, списки, деревья и графы и хеш-таблицы. на основе структур данных. Я увидел, как их можно реализовать на нескольких языках и как они влияют на производительность и эффективность приложений. Ниже приведена реализация каждой из этих структур данных с использованием Python.

# Arrays

# Creating an array
my_array = [1, 2, 3, 4, 5]

# Accessing elements in the array
print(my_array[0])  # Output: 1

# Modifying an element in the array
my_array[2] = 10

# Printing the modified array
print(my_array)  # Output: [1, 2, 10, 4, 5]


# Stacks and Queues

# Stack implementation using a list
my_stack = []

# Pushing elements onto the stack
my_stack.append(1)
my_stack.append(2)
my_stack.append(3)

# Popping elements from the stack (last-in, first-out)
popped_element = my_stack.pop()
print(popped_element)  # Output: 3

# Queue implementation using a list
my_queue = []

# Enqueuing elements into the queue
my_queue.append(1)
my_queue.append(2)
my_queue.append(3)

# Dequeuing elements from the queue (first-in, first-out)
dequeued_element = my_queue.pop(0)
print(dequeued_element)  # Output: 1


# Lists

# Creating a list
my_list = [1, 2, 3, 4, 5]

# Appending an element to the list
my_list.append(6)

# Inserting an element at a specific index
my_list.insert(2, 7)

# Removing an element from the list
my_list.remove(3)

# Printing the modified list
print(my_list)  # Output: [1, 2, 7, 4, 5, 6]


# Trees and Graphs

# Tree node class
class TreeNode:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

# Creating a binary tree
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)

# Graph implementation using a dictionary
my_graph = {
    'A': ['B', 'C'],
    'B': ['D', 'E'],
    'C': ['F']
}

# Printing the tree and graph
print(root.value)  # Output: 1
print(my_graph['A'])  # Output: ['B', 'C']


# Hash-based Data Structures

# Dictionary implementation
my_dict = {'key1': 1, 'key2': 2, 'key3': 3}

# Accessing values using keys
print(my_dict['key2'])  # Output: 2

# Modifying values
my_dict['key3'] = 10

# Printing the modified dictionary
print(my_dict)  # Output: {'key1': 1, 'key2': 2, 'key3': 10}

4. Основы программирования: базы данных

Базы данных, как следует из названия, хранят данные. Программам нужно место для хранения данных, сгенерированных либо пользователем, либо самой программой. Этот курс помог мне понять потребность в базах данных и роль, которую они играют в создании сложных приложений. Я познакомился с несколькими терминами, такими как

я. Обычные формы. Обычные формы — это правила проектирования базы данных, которые устраняют избыточность данных и обеспечивают целостность данных за счет определения отношений и зависимостей между таблицами.
ii. ACID: ACID — это набор свойств (атомарность, непротиворечивость, изоляция, долговечность), которые гарантируют надежность и согласованность транзакций базы данных.
iii. CRUD: CRUD представляет четыре основные операции (создание, чтение, обновление, удаление), используемые для управления данными в базе данных.
iv.Целостность ссылок: целостность ссылок гарантирует точное поддержание связей между таблицами за счет обеспечения согласованности и предотвращения аномалий данных.
v. Транзакции. Транзакции — это логические единицы работы, состоящие из нескольких операций с базой данных, обеспечивающие надежные и согласованные изменения в база данных.
vi. Записи. Записи представляют собой наборы связанных элементов данных, хранящихся как единое целое, представляющих строку в таблице базы данных.
vii. Таблицы. Таблицы организуют и хранят данные в структурированном виде, состоящем из столбцов, представляющих атрибуты, и строк, представляющих записи или записи данных, формируя основу реляционных баз данных.

Я также научился писать запросы, необходимые для извлечения данных, и как выбирать между различными требованиями к хранилищу, доступу, производительности и безопасности.

5.Основы программирования: объектно-ориентированный дизайн

«Все хорошее программное обеспечение начинается с отличного дизайна». Одна из основных вещей, которые я усвоил из этого курса, — это важность объектно-ориентированного мышления и принципов объектно-ориентированного проектирования, необходимых для создания программного обеспечения. Этот курс познакомил меня с такими понятиями, как объекты, классы, абстракция, наследование и полиморфизм. Я также научился составлять требования к приложению, определять варианты использования и планировать классы с помощью универсального языка моделирования (UML). Я узнал, почему это важно сделать до написания кода. Ниже приведен фрагмент кода различных концепций ООП, которые я изучил в этом курсе, используя python.

# Define the abstract base class 'Shape'
class Shape:
    def area(self):
        # Abstract method to calculate the area of a shape
        pass
    
    def perimeter(self):
        # Abstract method to calculate the perimeter of a shape
        pass

# Define a concrete class 'Rectangle' that inherits from 'Shape'
class Rectangle(Shape):
    def __init__(self, length, width):
        self.length = length
        self.width = width
    
    def area(self):
        # Calculate the area of the rectangle
        return self.length * self.width
    
    def perimeter(self):
        # Calculate the perimeter of the rectangle
        return 2 * (self.length + self.width)

# Define another concrete class 'Circle' that inherits from 'Shape'
class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius
    
    def area(self):
        # Calculate the area of the circle
        return 3.14 * (self.radius ** 2)
    
    def perimeter(self):
        # Calculate the circumference of the circle
        return 2 * 3.14 * self.radius

# Create instances of the classes and demonstrate polymorphism
rectangle = Rectangle(4, 6)
circle = Circle(5)

# Call the 'area()' and 'perimeter()' methods on the objects
print("Rectangle:")
print("Area:", rectangle.area())           # Output: Area: 24
print("Perimeter:", rectangle.perimeter()) # Output: Perimeter: 20

print("\nCircle:")
print("Area:", circle.area())              # Output: Area: 78.5
print("Perimeter:", circle.perimeter())    # Output: Perimeter: 31.4

6.Основы программирования: API и веб-службы

API (интерфейс прикладного программирования) — это набор правил и протоколов, которые позволяют различным программным приложениям взаимодействовать друг с другом. API-интерфейсы позволяют приложениям получать доступ к определенным функциям или функциям других программных систем, таких как веб-службы, библиотеки, операционные системы или базы данных, без необходимости понимать внутреннюю работу этих систем. Веб-службы позволяют приложениям раскрывать свои функции или данные через четко определенные API (интерфейсы прикладного программирования), к которым другие приложения могут получить доступ через Интернет. Этот курс познакомил меня с тем, что такое веб-сервисы и как их защитить, а также объяснил несколько веб-сервисов, таких как:

REST: передача репрезентативного состояния (REST) ​​— это архитектурный стиль для разработки веб-служб, использующий стандартные методы и ресурсы HTTP для создания масштабируемых API без сохранения состояния, что позволяет клиентам эффективно взаимодействовать с ресурсами на стороне сервера.

SOAP: Простой протокол доступа к объектам (SOAP) — это протокол, определяющий набор правил для структурирования сообщений в веб-службах, использующий XML для представления данных и обеспечивающий более надежный и стандартизированный подход к взаимодействию между приложениями.

GraphQL: GraphQL — это язык запросов и среда выполнения для API-интерфейсов, которые позволяют клиентам запрашивать определенные требования к данным и получать только те данные, которые им нужны, уменьшая избыточную и неполную выборку и обеспечивая более эффективный и гибкий подход к поиску данных в веб-службах. .

Далее показано, как разрабатываются API-интерфейсы для некоторых из этих сервисов, а также потребность в API-интерфейсах и веб-сервисах при разработке программного обеспечения.

7.Основы программирования: тестирование программного обеспечения/контроль качества

Этот курс познакомил меня с тем, что такое обеспечение качества и что такое тестирование, я узнал роль QA в разработке программного обеспечения и важность тестирования при разработке программного обеспечения. Я увидел различные виды тестирования и то, как тестирование вписывается в жизненный цикл разработки программного обеспечения. Я также изучил несколько механизмов, используемых для определения общего состояния продукта. Этот курс еще больше укрепил мою способность смотреть на то, над чем я работаю, критически думать о том, как эти части сочетаются друг с другом, и определять способы помочь моей команде достичь целей в области качества. с каждым выпуском.

ЗАКЛЮЧЕНИЕ

В целом, эти курсы были очень полезны для моего роста как инженера-программиста. Мне удалось понять несколько ключевых компонентов, участвующих в разработке программного обеспечения, а также увидеть несколько реализаций полезных концепций. Программирование — это весело и связано с поиском творческих решений проблем. Чем больше вы учитесь и экспериментируете, тем больше вы сможете найти более разумных способов решения проблем.

Примите радость обучения и наслаждайтесь каждым его шагом. Время от времени это становится сложным, но вы можете становиться лучше только после каждого испытания.

На пути к тому, чтобы стать инженером-программистом, любопытство и последовательность — ваши надежные спутники. Любопытство подпитывает вашу жажду знаний и исследований, побуждая вас задавать вопросы, искать ответы и глубоко погружаться в сложные процессы разработки программного обеспечения. Это заставляет вас понять не только то, как все работает, но и то, почему это работает именно так.

Таким образом, любознательность и последовательность являются незаменимыми качествами на вашем пути к тому, чтобы стать инженером-программистом. Развивайте свою любознательность, задавая вопросы, изучая новые технологии и интересуясь внутренним устройством программного обеспечения. Поддерживайте свое любопытство последовательно, посвящая время каждый день обучению, практике и совершенствованию. С любознательностью и последовательностью в качестве ваших надежных компаньонов вы пойдете по пути разработки программного обеспечения с энтузиазмом, ростом и успехом.