Даже если вы не программист.

Почему меня должно волновать программирование?

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

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

Получите представление об этих основных структурах программирования

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

Переменные

Программирование сводится к правильной обработке переменных. Переменные — это контейнеры для информации, с которой вы хотите работать при решении конкретной проблемы. Существует несколько типов переменных.

// This variable x could have any (number) value
int x = 2;
// y is equal to x with the respective opposite sign
int y = -x;
// There are also a lot of other variable types
boolean condition = true;
String word = "Hello World";
float rational = 1.5;
char letter = 'a';

Условия

В жизни иногда приходится принимать решения, как и в программировании. Вот почему существует конструкция if-else, она даже довольно близка к естественному языку.

if (x = 2) {
  x++;
} else if (x = 3) {
  x = x + 2;
} else {
  System.out.println(x); // Print the variable in Java Style
}

Петли

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

// Computing the faculty of 10, which is 10*9*8*...*1
int faculty = 10;
int result = 1;
for(int n = 1; n <= faculty; n++) {
  result *= n;
}
System.out.println(result)

Массивы

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

// Basic array with 4 free slot to store ints
int[] array = new int[4];
int[] array2 = {1,2,3,4};
// Indexing an Array
int x = array[0]; // x == 1;
// Chess board: 2D Array: An array of arrays.
int[][] array = new int[8][8];
/* This will result in a chessboard (8 times 8)structure
[
  [ , , , , , , , ],
  [ , , , , , , , ],
  [ , , , , , , , ],
  [ , , , , , , , ],
  [ , , , , , , , ],
  [ , , , , , , , ],
  [ , , , , , , , ],
  [ , , , , , , , ]
]
*/

Списки

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

// List
public class List {
  Node head;
  Node tail;
  
  // Other methods
  public void add() {
    ...
  }  
  public int get(int index) {
    current = head;
    int iterator = 0;
    while(current != null) {
      if (index == iterator) {
        return current;
      }
      current = current.next;
      iterator++;
    }
    return null; // Return null if there’s no element at this index
  }
}
// Node
public class Node {
  int value;
  Node next;
  Node prev;
}

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

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

Что делать с этим вновь полученным знанием?

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

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

Заключение

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

Спасибо!