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

Здравствуйте, дорогие хабропользователи и хабропосетители. Хочу поделиться своими взглядами на 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 минут английского в день.

Ну и в заключение хочу пожелать всем вам и нам удачи и успехов в изучении. Чем лучше становитесь вы тем лучше становлюсь и я. Мы с вами и есть будущее этой страны — давайте вместе развиваться и помогать друг другу. Надеюсь что комуто этот пост будет полезен.
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 18

    0
    Что за кучу статистики они при регистрации собирают?
    Хотел зарегистрироваться и посмотреть, что там такое. Охренел от первой страницы регистрации, подумав, что слишком много требуют. Заполнил, нажал «некст» — а там еще одна такая же, на её середине забил.
      0
      TopCoder по умолчанию считают, что люди приходят к ним с серьезными намерениями, зарабатывать деньги и ездить на онсайты, поэтому им нужна идентифицирующая информация. Видели бы вы, сколько бумаг нужно заполнить, чтобы получить выигрыш… :-) Что же до остальной… Не знаю, зачем им это, но большинству это не мешает.
      +4
      Судя по профилю, вас уже 21 год и вы уже все знаете. Ваша статья — это мешанина общеизвестных клише о программировании для тех, кто никогда не был программистом.

      Пока вы так думаете, вы никогда не будете программистом:
      1 Это все. Вот так просто. Ведь все гениальное и есть просто.Все остальное это технологии.
      2 Поэтому выбор профильного языка не имеет смысла.
      3 Сети, распределенные вычисления, экспертные системы, базы данных и все прочее это просто математика переведенная на удобный вам язык.

      Перефразируя известный анекдот:
      — Если вы взялись за проект, но знаете только алгоритмы, структуры данных и математику, то у вас нет шансов.
        –2
        Уважаемый General я писал статью с такой мыслью — " Что бы я посоветовал самому себе который только начинает разбираться в этой сфере и пропускает пары по матану ".

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

        Ну а холивар насчет языка извечен как вопрос о том что лучше никон или кэнон. google пишет на питоне ,farpost — на php.

        Кстати я же не сказал что нужны ТОЛЬКО алогоритмы?))
        +1
        А «Алгоритмы + структуры данных = программы» случаем не Вирт написал?
          +2
          Вирт. Кнут написал «Искусство программирования».
          +4
          Просто хотел уточнить: вы делите программистов на 2 категории, но… люди из первой категории (такие как Стив Джобс, Бил Гейтс и пр.), насколько я понял, имеют ооочень косвенное отношение к программированию…
            +1
            два последних макроса чище реализовать через typedef
              0
              Напомните, господа, где лучше всего (удобнее всего) читать и перечитывать Кнута на русском языке? А не то я давненько не перечитывал Кнута, а кое-что, признаюсь, и не дочитал у него.
                +1
                Лишняя «не» между «А» и «то», вы же сетуете, а не угрожаете.
                +4
                Людей, которые используют такие макросы:
                #define ff(i,m) for(int i = 0; i < m; i++) 
                #define VI vector<int>
                #define VS vector<string> 
                

                я бы предавал публичной порке.

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

                Говоря проще, скорость разработки измеряется не скоростью написания кода, так что подобные макросы — лишь медвежья услуга себе и окружающим.
                  0
                  Эти макросы используются исключительно продвинутыми спортивными программистами. За чтение кода, рефакторинг и окружающих речь не идет, если время жизни задачи — 2-5 часов. Что же до случайных ошибок, этими макросами они вносятся уж никак не реже, чем просто печатью циклов в спешке (например, очень легко «на автомате» использовать в одном из мест переменную i вместо j или ++ вместо --).

                  Хотя лично я такими макросами уже лет пять как не пользуюсь и начинающим советовать бы не стала — экономия в секунды их не спасет, а читаемый код пригодится.
                    +1
                    Это не так, продвинутые спортивные программисты как раз никакими макросами стараются не пользоваться, что толку в них, если большую часть времени при набивании задачи тратишь не на набивание, собственно, букво-цифр, а на думанье «что же писать дальше».
                      0
                      Под «продвинутыми» я имею в виду «не начинающих». Лично меня таким макросам учил красный :-) В общем, зависит от человека.
                  0
                  Билл Гейтс — IT гуру?!
                    +1
                    Прежде чем изучать иностранный язык, нужно как минимум знать свой. Я не думаю что вы так спешили, что случайно потеряли кучу запятых и дефисов.
                    И такая заметка: решение шаблонных задач, как я вижу из практики, не даёт такого эффекта как вы расписываете. Практика математического мышления — это правильно и хорошо, но практика в реальных проектах — вот что нужно как воздух для успешного становления программиста.
                      –1
                      Почти все негативные комменты — от людей которые сами ничего не написали.
                        +2
                        Попотеть придется, только осваивая свой первый язык.

                        Я тоже так думал после изучения C и Python. А потом взялся за Haskell, и он взорвал мне мозг одними лишь монадами (и я еще не говорю об отсутствии циклических конструкций, чистых функциях, ленивости вычислений и прочих плюшках).

                        Only users with full accounts can post comments. Log in, please.