Как быть программистом в этом жестоком мире

в 10:41, , рубрики: Topcoder, Программирование, развитие, Учебный процесс в IT, метки: , ,

Здравствуйте дорогие хабропользователи и хабропосетители. Хочу поделиться своими взглядами на status-quo в сфере программирования сегодня.
Замечено over 9000 постов по кошерному развитию своей драгоценной личности в области всем на любимого программирования. Интернет — это большая куча из которой каждый извлекает информацию абсолютно рандомно (те собирает по крупицам) и его мозг делает компиляцию всего ранее изученного и именно поэтому людям трудно взять и понять чужие взгляды (т.е. не насрать в коментах) и именно поэтому я прошу либо согласиться либо несогласиться с моим мнением но не обсуждать его. Далее предлагаю СВОЕ видение мира программирования и его классификацию а так же пару предположений как преуспеть. Поехали:

1)
Делю людей находящихся в сфере IT на интересующихся и просто находящихся в ней. Программисты как и любой другой вид людей делятся на исследователей и оседлых.

Первые держат в голове картинку того что должно исполниться и когда внешняя картинка совпадет с внутренней они делают в своей голове новую. Другими словами это постановка цели. К этой категории принадлежат все IT гуру — Билл Гейтс, Ларри Пэйдж, Стив Джобс и тд. На примера Джобса (цитата из википедии Когда мы продемонстрировали проект инженерам, они тут же привели 38 причин, по которым его нельзя было реализовать. А я говорю: «Нет, он должен быть реализован». «Почему это?» — спрашивают они. «Потому что я генеральный директор компании — ответил я, — и считаю, что это можно сделать». И им пришлось подчиниться) вы можете видеть что я имею ввиду. Знает и делает. Если вы такой человек то вам ужасно повезло -ваша жизнь преисполнена смыслом и полна счастьем.

Вторые (оседлые) это те кто любит статьи a la «Как стать программистом без математики», «Как гуманитарию стать программистом» и ищет в гугле '' зарплата программиста в москве'' и говорят себе у меня все бы было круто если бы у меня родители были богаче или если бы я в вузе учился другом -в этом препода ничему н учат и тд и тп.

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

2)
Спустимся на 1 уровень абстракции ниже считая вас и меня находящимися в промежуточном уровне ибо если это было бы не так то вам уже не нужно читать дальше ибо вы уже полны внутреннего света или же наоборот отчаяния. 2 уровень пишу для тех кто активно ищет правду как и я.

Как в MMORPG вы собираете скилы для роста(+ к атаке, + к ловкости и тд) и помещаем их в остов умений героя, так и в программировании мы собираем скилы которые возвышают нас над другими программистами. Я считаю что есть основные навыки необходимые программисту как воздух а все остальное это просто напыление на этот остов.

Навык 1 — математическое мышление.
image
Математика это просто. Это наука о способах придумать модель для любой предметной области. Да абсолютно любой начиная от «у васи 5 яблок и у маши — 4 сколько у них яблок вместе» и заканчивая NP задачами о коммивояжерах " какой маршрут доставки будет оптимальным при имеющихся N станциях и К грузовиков на этих станциях". Без математики никак. Совсем.

Навык 2 — алгоритмы и структуры данных.
image
Допускаем что вы не согласны с прошлым пунктом но с этим не согласиться нельзя. Одна из книг кнута так и называется «алгоритмы + структуры данных = программы». Я вам с полной уверенностью заявляю что если вы досконально изучили и понимаете любую из так называемых библий алгоритмов (Кормен, Ахо, Кнут) то вы УЖЕ на 80% крутой программист но к сожалению чтобы это сделать необходим пункт №1.Вот так.

Навык 3 — умение мгновенно находить и усваивать информацию.
image
Современное IT это самая быстро развивающаяся область в мире. Так что если ты не успел сделать все быстро то та технология которую ты так усердно учил уже невостребована.

Навык 4 — знание английского языка
image
Скжем так что это поднавык предыдущего навыка обусловленный тем что почти вся самая ценная и новая информация появляется именно на английском.

Это все. Вот так просто. Ведь все гениальное и есть просто.Все остальное это технологии.
Поэтому выбор профильного языка не имеет смысла. С++, Java, C, Python, ADA, Fortran — все эти языки составлены из примитивных структур данных + операций + цикловитераций + блоков. Попотеть придется только осваивая свой первый язык.
Сети, распределенные вычисления, экспертные системы, базы данных и все прочее это просто математика переведенная на удобный вам язык.

3)
Спускаемся на еще один уровень абстракции ниже. Здесь будут практические советы и рекомендации.

Чтобы преуспеть в чем либо нужно этим заниматься, ведь хорошо делается только то что делается постоянно.
Что бы вы не изучали — без практики это ноль. Думаете почему после просмотра видеокурса в голове остается только общее впечатление?

Не знаешь с чего начать — начни с алгоритмов. Это просто панацея от всех бед. В среде правильных пацанов принято изучать книгу Томаса Кормена — алгоритмы.построение и анализ. Нельзя пропускать непонятый материал ни в коем случае — что то не понял — гугли, хабри, спрашивай, ищи, смотри и тд. Тут все по индукции — не понял простые вещи -не поймешь(или неправильно поймешь) и сложные.
Одновременно зарегистрируйся на сайте topcoder.com — это площадка для программистов со всего мира созданная с целью соревнований по всем видам программирования. Но нам необходим как воздух подраздел algorithms.

Тк это один из самых эффективных способов обучения — уделю ему особое внимание.

— Заходим на topcoder.com
— Регаемся
— В правом верхнем углу переходим на комъюнити портал
— Скачиваем специальное приложение( называется platform или arena) в разделе O(n) — раздел алгоритмов
— Заходим в него и логинимся

image

Что из себя представляет платформа?
Это клиент серверное приложение позволяющее подключить вас к куче народа которые будут соревноваться вместе с вами.
Нужный нам тип соревнований это SRM (single round match) это соревнования которые проводятся почти еженедельно и дают вам шанс набрать себе рейтинг (с хорошим рейтингом у вас ооочень большие шансы устроиться в хорошую компанию с правильными людьми).

Как набирается рейтинг?
есть 2 дивизиона (2й для жестких программеров и 1й для адских программеров) в каждом из них 3 задачи-
1 — 250 — 350 баллов
2 — 450 — 650 баллов
3- около 100 баллов
причем замечена закономерность что частенько 2 и 3 задачи 2 дивизиона это тоже что 1 и 2 у 1 дивизиона.

Невероятно полезная функция платформы это конечно же practice room'ы — это бесконечное количество задач невероятных по практичности и применимости в жизни. Вы можете также смотреть решения этой же задачи другими пользователями -лучшими программистами в мире

К сожалению это чудо доступно не всем — нужно владеть английским хотябы с гуглопереводчиком и хотябы одним из языков C++, Java, C#, VB.

Чтобы сразу взять и на белом коне заехать в ТопкодерГрад дам несколько простых советов.Я пишу на с++ поэтому и советы будут соответствующими

1) подключи все что можно из STL и начни с этим разбираться ведь основной показатель эффективности программиста это умение использовать наивысший уровень абстракции. Зачем писать новый код если его уже написали другие. «Хороший художник копирует, лучший — ворует » Пикассо.

#include <iostream>
#include <string>
#include <cassert>
#include <complex>
#include <cctype>
#include <climits>
#include <queue>
#include <utility>
#include <algorithm>
#include <vector>
#include <sstream>
#include <functional>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <numeric>
#include <map>
#include <set>
#include <list>
#include <time.h>

2) напиши свои макросы (это куски кода которые динамически подставляются в исходный код препроцессором)

#define ff(i,m) for(int i = 0; i < m; i++)  // теперь циклы делать очень легко
#define VI vector<int> // в качестве параметров почти всегда передаются контейнеры
#define VS vector<string> 

3) выбери удобную IDE ( среда разработки например VisualStudio,Xcode, Code::Blocks,JetBrain, и тд)
4) Практикуйся, практикуйся, практикуйся, практикуйся а потом еще практикуйся!!!

Это самый простой способ получить все и сразу. Итак с топкодером закончили.

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

Ну и не забывайте про 30 минут английского в день.

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

Автор: forzalino

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js