Что значит быть "программистом"?

Что значит быть "программистом"?

Или опять он за своим компутером сидит

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

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

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

Как вообще работает программирование?

По сути, Вы учите иностранный язык, и "разговариваете" с компьютером. Задача программиста (при чем любого): проблему, которую поставил перед ним человек, перевести на компьютерный язык. Сделать сайт, приложение или игру - это слова на человеческом языке. Программист получает задачу и начинает размышлять как это сделать.

Любая задача разделяется на две части.

  • Frontend (Фронт) - это то, что видит пользователь. Для сайта - это верстка, анимации, меню, формы. Для приложения - это какие-то графические компоненты, на которые можно тыкнуть. Для игры - это, в основном, графон, и то что происходит на экране.
  • Backend (Бэк) - это то, что пользователь не видит. Обработка данных, подключение к базе данных, и так далее. Для сайта - это обработка данных пользователей при входе или регистрации на сайт. Для игры - это практически любое движение персонажа, перестрелки, или что там у вас в игре происходит.

Программисту, кстати, не обязательно выбирать "сторону". Он может быть и фронт, и бэк разработчиком (как я).

Пример передачи данных с фронта на бэк.

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

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

Итак, представьте что вы программист. К вам пришел Илон Маск и сказал, что им нужна форма регистрации. Что вы будете делать? Подумайте пару секунд.

И тут программисты в основном делятся на два типа.

  1. Программисты творческие. Это как я, да. Это люди первая мысль которых - ну, надо погуглить как сделать форму, и потом как-то стили поменять. А еще надо погуглить как сделать базу данных, и как туда всё это впихнуть.
  2. Программисты читатели. Это люди которые оценивают поставленную задачу, и сразу начинают рыть литературу. Начинают анализировать проблему с самого начала - этот человек прочитает что такое база данных, что такое связи, какие они бывают, и так далее.

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

Ни раз сталкивался на работе с проблемой, что один из наших программистов-читателей, изучив литературу, написал правильный код, но он не работал. Почему? Не ясно. Как я помню, ему нужно было сделать так, чтобы в приложении на андроиде приложение самостоятельно выбирало поле и писало в нем какие-то гадости, а оно не хотело. В итоге, спустя день размышлений он обратился ко мне. Я включил фантазию и сделал костыль. Привыкайте, программистический сленг. Костыль - это либо максимально странный подход в стиле "оно работает и ок", либо заглушка для ошибки. Так вот. Я просто сделал так, чтобы программа выбирала все существующие поля, а в том поле которое нужно написал прозрачным цветом слово this, после чего сказал программе найти поле в котором есть слово this. Работает и отлично :).

Почему программирование занимает так много времени? Взял код с интернета и готово!

На самом деле не совсем так. Около 50% работы программиста не дает никакого результата. Вы можете взять любой код из интернета, вставить его в строку, и он с вероятностью в 50% не будет работать.

Думаете преувеличиваю? Давайте проведем эксперимент!

  1. Зашел на рандомный сайт, дабы посмотреть как сделать сортировку массива. https://www.sitepoint.com/sort-an-array-of-objects-in-javascript/

Массив, если что, это одно из базовых понятий программист - коллекция данных. Например [1, 2, 3, 5, 6] - это массив.

2. Вставляем код в консоль (с javascript так можно):

Упс. Шо? Почему не работает по инструкции? :(

Остальные пол дня вы ищите ответ на этот вопрос. И пока программист-читатель ищет всё о масивах и сортировке, мы догадываемся просто оттолкнутся от ошибки и переиминовать переменную.

Заработало. Вау!!!

Конечно, это банальный пример, однако, даже с одной строкой могут быть проблемы, не говоря уже о целых страницах кода. И ошибка может быть где угодно: от добавления библиотек (криво добавлена библиотека, библиотека обновилась и надо что-то для нее добавить), логики построения кода, передачи данных, проблемы с потоками и так далее.

Всё, рабочий день окончен, можно мыть чашку и уходить. :)

* - кстати, догадались в чем была ошибка на сайте? Наверное нет :с Переменная bar является зарезервированной системой, ее использовать нельзя.

Как стать хорошим программистом?
  1. Делать. Неважно что, неважно на чём. Просто делать. Фантазируйте, придумайте свою идею и постепенно изучайте язык. Ваше первое, второе, третье и четвертое приложение будет плохо работать и скорее всего не получится. Однако, n-ое приложение уже можно будет показать людям.
  2. Чем больше вы знаете - тем лучше для вас. Программисты обожают использовать свою терминалогию, так легче общаться и звучит пристойней.

Что программист говорит: сделай автокомлит отдельным классом и через стейту сгеть массив с бэка

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

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

3. Упорство. Это самое сложное. Скажу на примере своих одногруппников - многие из них, когда нам просто дали задание без объяснений, сказали поднять сервер (половина группы не знает что это ок да) и сделать веб-приложение просто опустили лапки. Из ста человек сделали задание только три человека. У меня это заняло недели две: первую неделю я не мог поднять сервер, БД и php на Windows, потому что там очень много проблем, а вторую неделю я изучал веб с нуля. Каеф. Если вы не готовы до последнего сидеть и делать поставленную задачу, лучше не браться. Сразу предупреждаю.

Пример с моей работы.

Для того чтобы понять насколько всё сложно, разберем пример. Он будет длинным, так что приготовьтесь. Задача: сделать вот такую анимацию.

*привожу скрины с телеграмма потому что по договору не могу показывать приложение

Итак, по сути это просто анимация влево для каждого нашего контакта. Мы не будем кодить (хотя код я приложу потом ниже), мы используем условный код.

Любое приложение работает по такому принципу: любое действие обновляет всю страницу. Держите это в голове.

Алгоритм работы:

  1. Выгрузка всех контактов. Как-то выгрузили, и слава Богу.
  2. У каждого контакта есть оригинальный код (ID), который мы будем сохранять, если юзер сделал слайд влево. Допустим, мы выбрали первый контакт, и сделали "свайп" - сохраняем этот ID, и при обновлении присваиваем ему анимацию. То и есть: "если для этого блока сохранен ID то делаем анимацию, если нет, то оставляем все как есть".
  3. В случае если юзер сделал "свайп" на другом контакте, переприсвоить ID новому контакту, а старому сделать анимацию "назад".

Казалось бы, простая задача - "если тык то анимация влево", но действий очень много. Если совсем коротко выглядит это так: изначально мы зашли и анимации нет. Значит ID пустой и нет анимации.

Контакт 1 ID пустой - анимации нет.

Контакт 2 ID пустой - анимации нет.

Контакт 3 ID пустой - анимации нет.

Контакт 4 ID пустой - анимации нет.

Потом юзер сделал "свайп" влево первого контакта и мы получили ID = 1. Окей. Теперь картина такая.

Контакт 1 ID пустой - анимация есть.

Контакт 2 ID пустой - анимации нет.

Контакт 3 ID пустой - анимации нет.

Контакт 4 ID пустой - анимации нет.

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

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

Математика. Физика. Что еще?

Ничего из этого, и всё сразу. Математику я использовал только два раза - когда считал разницу поясов разных стран мира и писал формулу для этого, и когда делал экстраполяцию данных (не суть). Физика пока что ни разу в жизни не пригодилась, к сожалению.

Из того чему учат в школе для программирования будет бесполезно всё. В школе ничему полезному не учат.

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

С какого языка стоит начать / что лучше учить?

Я начинал с Pascal в 5 классе. Но тогда мне было очень тяжко понять что такое массив и зачем вообще программировать в черном окошке. Потом перешел на Web (HTML + CSS + JS), потом вернулся на приложения для Windows и игры на Android: C# и Unity. После этого добавились еще React Native, Node JS, PHP и другие Web инструменты. Отчасти знаю С++, Java, MatLAB, LISP, Python.

Что лучше всего учить.

  • Я хочу научится делать простые программы для Windows: Visual Studio C# Forms в помощь. Это на моей памяти самый простейший язык для ознакомления с объектами на формах. Простенько, но если нужно быстро научиться разбираться в том что такое объекты и как их программировать - почему нет.
  • Я хочу научится делать программы и / или игры: рекомендую начинать всё же с С#, но консольного, либо брать хард режим и учить Си. Си - сложный язык, советую затариться литературой, если не было опыта работы с классами, конструкторами и прочим.
  • Я хочу научится делать игры для мобильного: рекомендую либо начать сразу с харда, и учить Java, либо сначала обучится снова таки C# и использовать движки на нём. Для обучения Unity подходит идеально.
  • Я хочу делать Web сайты. Необходимо сначала научится делать верстку, т.е брать дизайн чей-то (или делать самому) и открывать в браузере - это HTML (язык тегов) + CSS (в нем описываем стили сайта) + JS (анимации, движения, обработка данных). Далее - бэк, для начинающего советую ознакомится с Wordpress, попробовать поднять сервак и на нем запустить тестовый сайт. WP работает на PHP, отличный способ выучить и использовать PHP.
  • Я хочу делать Web приложения, телеграм боты, и так далее. Необходимо сначала научится делать то, что описано в предидущем пункте. После этого учим Node JS для ботов или React Native для полноценного приложения.

Ко всем этим пунктам обязательно обучение базам данных, SQL и (или) других.

Выводы.

Ну, вот и всё. Это то, что я хотел описать про свою работу, и надеюсь кому-то когда-то это поможет или в выборе профессии, или в выборе направления. По-моему опыту, если вам нравится копаться в коде, "лечить" баги, создавать что-то новое - это профессия для вас. Но, будет сложновато. Программирование далеко не для всех - кому-то это может быть не интересно, кому-то может быть скучновато сидеть с кодом долгие сутки и находить несчастную ошибку. У меня так было - я день искал ошибку, оказалось что я вместо Questions написал questions. Орали всей командой.

Чем больше языков и методов решения задач вы знаете - тем проще вам будет. Если вы решили поступать на программиста, берите задачи (вузовские лабораторные, школьные задания) и просто делайте. Или создайте свой проект. Я в вас верю!

Эпилог.

Прикрепляю сюда код от той самой задачи про анимацию с объяснением. Написанный на React Native.

Кстати, одно из важнейших направлений у программистов - рефакторинг. Если коротко: это способность разбираться в чужом коде. Вот вам небольшой тестик - найдете где у меня что в коде происходит? :) Ниже объяснения.

___________________________________

*тут что-то лишнее и библиотеки*

*большая часть кода обрезана чтобы сэкономить вам время*

const MyTelegramMessages = (props) => {

const viewSubMenu = (index) => {

if (indexAnim) {  

if (index === indexAnim) {

   setIndexAnim(null);

   } else {

   setIndexAnim(index);

  }

} else {

   setIndexAnim(index);

}

fadeAnim.setValue(0);

});

 const renderWorkCart = (messages) => {

 return map(messages, (data, index) => {   

return (

  <Animated.View

   key={`message_${id}`}

   style={

       transform: [      {

     translateX: index === indexAnim ? fadeAnim : 0

      }]}

   }

}

  >

*тут наши блоки и при слайде функция viewSubMenu()*

</View>

В чём магия:

Функция viewSubMenu отвечает за сохранение айдишника блока который мы должны анимировать.

Если айдишника нет, значит скорее всего анимации нет.

В таком случае мы делаем проверку if (indexAnim) и  сохраняем айдишник блока которого надо анимировать setIndexAnim(index).

Если айдишник есть, значит анимация есть. Если айдишник пришел такой же, значит пользователь нажал на тот же блок.

Тогда мы просто убираем этот айдишник и анимацию.   

setIndexAnim(null);

В другом же случае, если айдишник пришел новый, мы его сохраняем:

 setIndexAnim(index);

const viewSubMenu = (index) => {

if (indexAnim) {  

if (index === indexAnim) {

   setIndexAnim(null);

   } else {

   setIndexAnim(index);

  }

} else {

   setIndexAnim(index);

}

fadeAnim.setValue(0);

});

Как я уже говорил ранее, вся страница у нас перегружается (рендерится заново) и мы получаем вот такое вот условие анимации:

     translateX: index === indexAnim ? fadeAnim : 0

Где index - номер блока, если он совпадает с сохраненным, делаем анимацию. Если нет - не делаем ничего. translateX - это просто функция сдвига блока влево.

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

_________________________________________________________________________






Report Page