Comments 229
Дело в том, что наука программирования постоянно развивается и итерируется, а значит старые методы мы смело забываем и осваиваем новые.
Имхо лучше поизучать написанное давным давно Фаулером, Макконнеллом, бандой четырех и писать нормальный код чем говнокодить в соответствии с новыми веяниями.
Это удел самоучек. Обучение в вузе полезно не тем, что там научат чему-то конкретному, что можно вот так вот взять и сразу применять в работе (блаженны студенты, считающие, что для овладения специальностью достаточно успешно сдавать экзамены в сессию). Обучение в вузе полезно тем, что дает именно базу, представление, пусть и на пальцах, о существующих методах решения задач, областях науки, занимающимися теми или иными направлениями. Это не дает каких-то глубоких знаний, но здорово расширяет кругозор, задает направления для самостоятельного поиска. С самоучкой же часто бывает ситуация, когда он в какой-то области может, шутя, заткнуть вузовского профессора за пояс, а уже в смежной не знает базовых вещей и пытается изобретать велосипед с треугольными колесами. Нет, осилить вузовскую программу конечно можно и самостоятельно. Но в вузе это делается на порядок проще.
это эффективно и хорошо.
Но!
Учитель может научить тебя в 10 раз быстрее, тем самым экономя твое время и позволяя узнать много больше. Проблема в том, что такого учителя найти не просто. Особенно для современных технологиях. А так, чтобы в российском ВУЗе почти все учителя были такие — ну это фантастика! В итоге, обучение в ВУЗе может даже замедлить развитие (суммарно).
Что же касается онлайн обучения… На мой взгляд, для самоучки оно очень полезно, т.к. даст системный взгляд на предмет, очертит то, что он потом должен будет выучить сам. Онлайн обучение даст ускорение примерно раза в 2-3. Без личного контакта большей продуктивности добиться сложно.
PS: есть еще совсем трудные темы, которые в принципе самостоятельно выучить скорее всего не получится, нужен наставник, который в первый раз «подтолкнет, чтобы преодолеть планку».
Если заинтересованы в результатах, необходимо использовать обучение в вузе и самостоятельное обучение совместно. Это дополняющие друг друга инструменты, а не взаимоисключающие. Грубо говоря, преподаватель в вузе объясняет, в какую книгу лезть, когда требуется решить ту или иную задачу, подкрепляя эту информацию примерами на пальцах. Ситуаций в жизни разработчика может быть очень много и разных, поэтому месячным курсом тут не обойтись. Но разжевать подробно такие объемы информации преподаватель не сможет. Да и студент не усвоит. Задача студента не забыть то, что ему рассказывал на лекциях преподаватель и, пользуясь этими знаниями, уже копать вглубь в зависимости от ситуации.
Конечно, невозможно отрицать, что уровень преподавателей падает с каждым годом.
То есть по сути, студенты к предметам наших ВУЗов добирают предметы ВУЗов зарубежных. Удивительно и прискорбно.
Слышал вполне позитивные отзывы о качестве.
Учитель может научить тебя в 10 раз быстрее
Согласен. Я взял парнишку на обучение. Бесплатно, просто для души. Решил сразу дать ему нормальную базу и развить кругозор. Он у меня два месяца на Линуксе пилил кластера MySQL, размечал диски (включая LVM и DRBD) и настраивал веб-сервера, сервера мониторинга. Линукс знает теперь как свои пять пальцев.
Потом надрессировал его на Питоне, подробно критикуя каждую строчку. Удостоверялся, что он точно понимает, что я ему объясняю. Причем, давал самые разноплановые задачи, включая 0MQ, PyQT, ncurses… И заставлял писать тесты. И деплоил он все сам себе сначала на Vagrant-->VirtualBox, а теперь уже на Docker.
На это ушло всего лишь три месяца.
Сейчас он проходит свои первые собеседования. Каждое собеседование с каким-нибудь заданием. Я заставляю его делать все, что ему дают на любом собеседовании. Вон, последнее пришло вообще на PHP (YII) + swagger — сидит, пилит как миленький. Это еще одна мысль, к которой я его приучаю: программист пишет на чем подходит, а не на чем умеет.
Вот уж не думаю, что за столько короткий срок самоучка может получить такой кругозор и обширный набор знаний. Причем плотно утрамбованных знаний.
Плюсую за энтузиазм и бескорыстие.
За пару лет в вузе, на большинстве дисциплин я только и делал, что собирал треугольные колеса.
Более того, попытки возразить, что колеса бывают и круглыми, или, о боже, собрать велосипед с ними — приводят к санкциям со стороны преподавательского состава.
Не собираюсь делать излишних обобщений, поэтому уточню, что примерно 10% преподавателей демонстрировали другой подход и что речь идет только о СПБГЭТУ (ЛЭТИ).
PS
На правах ИМХО: для расширения личного кругозора, как ни странно, лучше всего делать что-то самому. Читать статьи на незнакомые темы, проходить курсы, которых навалом вокруг, общаться с людьми на профильных ресурсах или IRL, etc.
Потому что без этого(что с вузом, что без вузa) кругозор расширяется весьма неохотно.
Человек с профильной («профильной» — имеется в виду «програмистской») базой не испытывает никаких проблем с так называемым «быстрым развитием», он просто смотрит на что-то «новое», и вспоминает, что это уже было в common lisp в 1995 году, ну или там у Танненбаума в книжке примерно в то же время. Не суть важно, в какой именно теории это всё раскрыто было давным давно, главное, что оно было раскрыто, и осталось в голове в виде теоретической базы.
Естественно, такие вещи, как «детали имплементации» и «опыт» существуют, и они важны, но при наличии базы эти вещи набираются на пару порядков дешевле (мозг наш так устроен, что ему надо систематизировать, чтобы хорошо работать. База позволяет это делать, а полурандомный набор преходящих навыков — нет).
ВУЗ даёт именно базу.
В нормальном ВУЗе практические занятия ведутся на достаточно современных технологиях, просто потому что это удобнее всем.
Если хочется получать промышленный опыт и промышленные навыки, учась в ВУЗе, то никто не запрещает идти работать на частичную занятость. Курса с четвёртого это просто обязательно.
ВУЗ принципиально не может дать промышленной практики. А промышленная практика принципиально не может дать теории, базы. Поэтому для хорошего программиста нужно и то, и другое.
В то время как в универе уже есть программы и учителя.Это где вы видели нормальные программы и учителей?
Но если вуз нормальный там можно получить вполне хорошую базу
Для веб разработчика, как минимум, это — протоколы, работа браузера, основы баз данных
Ага, а потом такой вот самоучка не понимает, с какого перепуга его бизнес-логика работает неадекватно. А просто он не слышал о разнице между средним арифметическим и медианой (пример из жизни). Он ведь вебдев учил, а не основы статистики. Или почему его SQL-запросы ставят базу колом (видимо движок плохой, надо срочно модный nosql какой-нибудь всунуть, про который на форумах пишут — вот где мощь-то будет!). Он ведь вебдев учил, а не комбинаторику. Зато легко и дешево, нахватался азов за пару месяцев и смеется над дураками, 6 лет штаны просиживающих.
Но при этом человек, который это делал, был весьма неплохим креативщиком, много чего мог сделать (и делал) в вебе, т.е. такой самый грустный случай человека без профильного образования.
Это не про профильное образование, а про математиков vs креативщиков.
Креативщики в типы данных могут только если заставить.
money
:-)
Или почему его SQL-запросы ставят базу колом
Решается обычной практикой.
Что делает погромист, академиев не кончавший? Гуглит определение base32 — «данные разбиваются на блоки по пять битов, каждый блок кодируется одним символом» — и кодит какой-то кошмар вокруг
decbin(ord($string[i]))
, разбиения строки $binval
блоками по пять символов, и потом bindec(substr($binval))
. Потребление памяти как минимум восьмикратное, а возня со строками настолько неэффективная, что волосы встают дыбом.Но на SO это топовый заплюсованный ответ, ещё и с чьим-то комментарием «This is the only correct answer.»
Более того, такие пэхапэ-самоучки облекают свой код в библиотеки [1] [2], которые потом другие программисты на SO советуют [1] [2], не заглядывая внутрь кода. Нуачо, всё работает же!
Ну я вот писал программу по нескольким курсам, один из основных — «Алгоритмы и структуры данных», вот база (не все, особенно и последнего семестра, нужно знать и доказывать, но основные свойства полезно знать).
Вот примерный список, я надеюсь, он после обкатки скорректируется. Общий объем 225 часов (чисто лекции, практика Python-C-C++ идет отдельными часами).
Поиск в массиве
1.1 Линейный поиск
1.2 Двоичный поиск
1.3 Троичный поиск
1.4 Интерполяционный поиск
Структуры данных
1.5 Массив
1.6 Стек
1.7 Очередь, двусторонняя очередь
1.8 Словарь
1.9 Хеш-таблица
Сортировки, анализ алгоритмов
2.1 Bubble sort (пузырьковая сортировка)
2.2 Merge sort (сортировка слиянием)
2.3 Quick sort (быстрая сортировка)
2.4 Bucket sort (блочная сортировка)
2.5 Heap sort (пирамидальная сортировка)
2.6 Insertion sort (сортировка вставками)
2.7 Counting sort (сортировка подсчетом)
2.8 Radix sort (порязрядная сортировка)
2.9 Timsort и другие гибридные алгоритмы сортировки
Рекурсия, математическая индукция
3.1 Хвостовая рекурсия
3.2 Обратная польская запись
3.3 Числа Каталана
3.4 Вычисление биномиальных коэффициентов
3.5 Метод градиентного спуска
3.6 Метод сопряженных градиентов
3.7 Принцип динамического программирования
3.8 Метод ветвей и границ
3.9 Методы Gradient boosting
3.10 Алгоритм Кадана
3.11 Поиск методом золотого сечения
3.12 Производящие функции
3.13 Запаздывающие генераторы Фибоначчи
3.14 Memoization
3.15 Корекурсия
3.16 Задача 3-SAT
3.17 Алгоритм фрактального сжатия
Структуры данных (рекурсивные)
3.18 Список
3.19 Дерево
3.20 Граф
Строки
4.1 Z-функция
4.2 Алгоритм Кнута-Морриса-Пратта
4.3 Алгоритм Ахо-Корасик
4.4 Алгоритм Бойера-Мура
4.5 Алгоритм Бойера-Мура-Хорспула
4.6 Сходство Джаро-Винклера
4.7 Расстояние Левенштейна, алгоритм Укконена
4.8 Расстояние Дамерау-Левенштейна
4.9 Алгоритм Карпа-Миллера-Розенберга
4.10 Алгоритм Каркайнена-Сандерса
4.11 Алгоритм Арикавы-Аримуты-Касаи-Ли-Парка
4.12 Алгоритм Ву-Менбера
4.13 Алгоритм Ландау-Вишкена
4.14 Алгоритм Майерса
Структуры
4.15 Префиксное дерево
4.16 Суффиксный массив
4.17 Суффиксное дерево
Порядковые статистики, потоковые алгоритмы
5.1 Алгоритм BFPRT
5.2 Алгоритм Манро-Патерсона
5.3 Алгоритм Канна-Гринвальда
5.4 Алгоритм большинства голосов Бойера-Мура
5.5 Алгоритм Lossy Count
Деревья
6.1 Эйлеров обход дерева, DFS, BFS
6.2 Двоичное дерево поиска
6.3 Декартово дерево
6.4 Красно-черное дерево
6.5 АВЛ-дерево, дерево Фибоначчи
6.6 Splay tree (расширяющееся дерево)
6.7 B, B+, B* дерево, 2-3 дерево
6.8 PQ-дерево
6.9 Дерево отрезков
6.10 Дерево Фенвика
6.11 Алгоритм двоичного подъема (задача LCA)
6.12 Алгоритм Фарах-Колтона и Бендера (RMQ, LCA)
6.13 Sqrt-декомпозиция
6.14 Центроидная декомпозиция
6.15 Heavy-light декомпозиция
6.16 Фибоначчиева куча
6.17 Куча, 2-3 куча
6.18 Очередь с приоритетами
6.19 Множество
6.20 Система непересекающихся множеств
6.21 Лес непересекающихся множеств
6.20 Ассоциативный массив
Графы
7.1 Обход в ширину (BFS)
7.2 Обход в глубину (DFS)
7.3 Топологическая сортировка
7.4 Алгоритм Munagala-Ranade
7.5 Алгоритм Mehlhorn-Meyer
7.6 Задача о динамической связности
7.7 Алгоритм поиска точек сочленения графа
7.8 Алгоритм поиска мостов графа
7.9 Алгоритм Косараю
7.10 Алгоритм Тарьяна
7.11 Задача 2-SAT
7.11 Алгоритм Брона-Кербоша
7.12 Конденсация графа
7.13 Раскраска графа
7.14 Задача о назначениях
7.15 Венгерский алгоритм
7.16 Алгоритм Ульмана
Структуры
7.17 Матрица смежности
7.18 Матрица достижимости
7.19 Матрица сильной связности
7.20 Матрица Лапласа
7.21 Матрица Инцидентности
7.22 Список смежности
7.23 Список ребер
Графы: циклы
8.1 Алгоритм поиска Эйлерова цикла
8.2 Алгоритм поиска Эйлерова пути
8.3 Алгоритм поиска Гамильтонова цикла
8.3 Алгоритм поиска Гамильтонова пути
8.4 Задача Коммивояжера
Графы: остовное дерево
9.1 Теорема Кирхгофа
9.2 Теорема Кэли о числе деревьев, код Прюфера
9.3 Лемма о безопасном (минимальном) ребре
9.4 Алгоритм Краскала
9.5 Алгоритм Примы
9.6 Алгоритм Борувки
9.7 Задача устранения петель в сети Ethernet (STP)
9.8 Задача Штейнера
Графы: кратчайший путь
10.1 Алгоритм Дейкстры
10.2 Алгоритм Best-First
10.3 Алгоритм A*
10.4 Алгоритм Левита
10.5 Алгоритм Беллмана-Форда
10.6 Алгоритм Флойда-Уоршелла
10.7 Алгоритм ALT
10.8 Алгоритм Reach-based pruning
Графы: потоки в сетях
11.1 Алгоритм Форда-Фалкерсона
11.2 Алгоритм Эдмонса-Карпа (алгоритм Диница)
11.3 Алгоритм поиска потока минимальной стоимости
11.4 Сети Петри
11.5 Алгоритм проверки графа на двудольность
11.6 Алгоритм раскраски двудольного графа
11.7 Алгоритм Хопкрофта-Карпа
11.8 Венгерский алгоритм
11.9 Blossom алгоритм (алгоритм Эдмондса)
11.10 Алгоритм Штор-Вагнера
Геометрия
12.1 Метод Гаусса
12.2 Поиск точек в прямоугольнике
12.3 Алгоритм Бентли-Оттмана
12.4 Алгоритм Грэхема
12.5 Алгоритм Джарвиса
12.6 Алгоритм Чана
12.7 Алгоритм Киркпатрика
12.8 Метод трассировки луча
12.9 Метод суммирования углов
12.10 Диаграмма Вороного и триангуляция Делоне
12.11 Алгоритм Форчуна
12.12 Рекурсивное построение диаграммы Вороного
12.13 SLERP
Структуры
12.13 R, R+, R* дерево
12.14 K-мерное дерево
12.15 BSP, VP дерево
12.16 Дерево покрытий
Персистентные структуры
13.1 Метод копирования пути
13.2 Метод толстых узлов
Структуры
13.3 Персистентный стек
13.4 Персистентная очередь
13.5 Персистентное дерево
Консенсус в сетях
14.1 Алгоритм Paxos
14.2 Задача Византийских генералов
14.3 Кворум
14.4 CAP-теорема
14.5 PACELC-теорема
14.6 Королевский алгоритм
14.7 Алгоритм Zyzzyva
Структуры
14.8 Blockchain
Целочисленное программирование
15.1 Каноническая форма, сложность решения
15.2 Алгоритмы полного перебора
15.3 Алгоритм Нарайаны
15.4 Задача о ранце
15.5 Алгоритм Meet-in-the-Middle
15.6 Задача раскроя
15.7 Метод обратного поиска
15.8 Задача планирования производства
15.9 Задача оптимизации телекоммуникационных сетей
15.10 Метод секущих плоскостей, алгоритм Гомори
15.11 Алгоритм Альфа-Бета отсечений
15.12 Жадные алгоритмы
15.13 Матроиды, алгоритм Радо-Эдмонса
Быстрые вычисления
16.1 Умножение Карацубы
16.2 Алгоритм Шенхаге-Штрассена
16.3 Алгоритмы возведения числа в степень
16.4 Алгоритмы возведения в степень числа по модулю
16.5 Алгоритм Кули-Тьюки
16.6 Алгоритм Штрассена
Факторизация
17.1 Алгоритм Евклида (НОД)
17.2 Алгоритм факторизации Ферма
17.3 Метод квадратичных форм Шенкса
17.4 Ро-алгоритм Полларда
17.5 Метод квадратичного решета
17.6 Общий метод решета числового поля
17.7 Факторизация с помощью эллиптических кривых
17.8 Тест Агравала-Каяла-Саксены
17.9 Алгоритм Берлекэмпа
Дискретное логарифмирование
18.1 Алгоритм Гельфонда-Шенкса
18.2 Алгоритм COS
Обработка очередей
18.1 Семейство алгоритмов Round-robin
18.2 Алгоритм EDF
18.3 Алгоритм SRTF
18.4 Алгоритм Fixed-priority pre-emptive scheduling
18.5 Задача составления расписания (JSP, OSSP)
18.6 CFS планировщик
18.7 BFS планировщик
Кеширование
19.1 T-дерево
19.2 Алгоритм Белади
19.3 FIFO, LIFO кеширование
19.4 LRU, PLRU кеширование
19.5 MRU кеширование
19.6 RR кеширование
19.7 LFU кеширование
19.8 MQ кеширование
19.9 ARC кеширование
Рандомизированные алгоритмы
20.1 Метод Монте-Карло
20.2 Поиск наименьшего набора ребер, разрезающего циклы
20.3 Муравьиный алгоритм
20.4 Алгоритм Каргера
20.5 Изоморфизм графов (алгоритм Blum-Kanan)
20.6 Rapidly exploring random tree
20.7 Тасование Фишера-Йетса
20.8 Алгоритм Karloff–Zwick
Вероятностные тесты на простоту
21.1 Тест Ферма
21.2 Тест Миллера-Рабина
21.1 Тест Бейли-Померанца-Селфриджа-Уогстаффа
Вебграфы
22.1 Модель Болобаша-Альберта
22.2 Модель Болобаша-Риордана
22.3 Модель Бакли-Остгус
22.4 Модель копирования
22.5 PageRank, Google matrix
Структуры
22.1 MapReduce
22.2 Apache GiGraph
22.3 Pregel
Хеширование
23.1 Двойное хеширование
23.2 Фильтр Блума
23.3 Count-min sketch
23.4 Универсальное хеширование
23.5 SWIFFT
23.6 MD5
23.7 SHA-2
23.8 SHA-3 (Keccak)
23.9 Дерево Меркла
23.10 Подпись Меркла
23.11 Хеш-функции, учитывающие близость (LSH)
23.12 Хеширование на основе расстояния Хэмминга
23.13 MinHash
23.14 SimHash
23.15 Поиск ближайшего соседа c помощью LSH
** При этом стоит учесть что запланированы еще курсы по Теории графов, Дискретной математике, Экстремальным задачам, Машинному обучению, Теории сложности и пр.пр.пр. Т.е. это просто фундаментальный курс по алгоритмам и структурам данных, который является точкой отсчета для всего остального (ну как курс по Математическому анализу).
*** Это несколько больше чем я сам знаю, так что это еще и мой план для себя подтянуть неизвестные/забытые темы. Обсудив его с коллегами, на предмет кто будет читать мы пришли к выводу, что мы все были бы рады и сейчас прослушать такой курс.
Есть разные цели обучения.
Когда я разрабатывал эту образовательную программу (часть относящуюся к компьютерным наукам), я исходил из следующих принципов:
Первый принцип: никаких ограничений по выбору профессии в области CS.
(Машинное обучение, ИИ, базы данных, веб...) Это не значит, что он должен уметь делать все сразу, это значит, что не должно быть фундаментальных препятствий к быстрой прокачке навыков.
Второй принцип: возможность продолжить обучение по направлениям математика или CS.
Например, пойти в магистратуру и развиваться в области криптографии и информационной безопасности; или развиваться в области расчетов движения механических объектов — бпла и пр.; или уйти в область робототехники…
Третий принцип: полученная квалификация не должна устареть за 10 лет.
** Конечно, это не массовое образование (тут набор вообще планируется в 20 человек), но это спецы, которые должны будут решать задачи, составляющие 1-5% от бизнеса (по моему опыту), но без решения которых остальные 95-99% бизнеса лишены смысла.
*** И да, я считаю, что должна быть система институтов или ПТУ, которая будет массово (тысячи в год) и быстро (за 1-2 года) готовить конкретных программистов под конкретные простые задачи, для конкретных бизнес-потребностей — администрирование MySQL; PostgreSQL; настройка Nginx; Python для веба; и т.д. и т.п., т.е. набор небольших, но очень конкретных навыков. Система должна быстро подстраиваться под потребности бизнеса. Впрочем, сейчас эту нишу пытается занять онлайн-образование. Правда статистически эффективность пока не очень.
Ваш комментарий достоин добавления в закладки :)
Не хочу вас расстраивать, но большинство студентов из такого насыщенного курса вынесут только представленный вами список и может быть общее представление об этих вещах… (Хотя на мой взгляд этого более чем достаточно, учитывая доступность информации сейчас)
Собственно для этого и нужен университет: получить представление о базе и о том, что есть. Реальные навыки в университете получаются в R&D лабораториях.
Если ему нужно посмотреть в интернете как что реализуется, то это конечно не очень хорошо, т.к. затормозит написание кода, но и не очень плохо (если только ему не приходится постоянно это делать).
Серьёзно? Программа-максимум — чтобы человек мог любой из перечисленных алгоритмов написать из головы? Вы сами-то можете так? И зачем это нужно?
Но где я написал, что нужно все сходу «написать из головы»?
Цель «максимум» — чтобы человек знал «из головы» основные идеи и схему в общих чертах любого из перечисленных алгоритмов. Это позволяет ему эффективно планировать решение задач, адаптируя базовые алгортитмы под конкретные потребности.
Если ему нужно посмотреть в интернете как что реализуется, то это конечно не очень хорошо, т.к. затормозит написание кода
Я об этом.
Если не приходится постоянно это делать.
Программист должен уметь мыслить в категориях алгоритмов, а если ему надо гуглить каждый-каждый алгоритм, чтобы вспомнить его идеи и сложность, то это плохо.
Но это часть программы, и его составление и разбивка по семестрам делалась в соответствии с тем, что будет читаться вокруг. Практика программирования это фактически x2 по часам. Курс теории графов — еще +. Курс теории экстремальных задач… Курс теории сложности… Много чего. В итоге этот курс по многим строчкам это не столько теория, сколько связь между хорошей математикой и конкретной практикой — то, чем и является «алгоритм» — это еще не программа, но уже и не теорема.
И это же сколько лет это потребуется узучать?
(сколько лет потребуется чтобы написать учебный материал)
Курс начнется весной 2018 г., соотв. первый раз он закончится осенью 2019 г., соответственно, к концу первого прочтения будет первое приближение по материалу и конспектам… Может удастся некоторое количество лекций отснять.
Синк эбаут зис, гайс.
Так делать не стоит.
Тех, кто говорит вам, что сам ничему не научишься, а нужно образование…
Лично я такого не слышал практически нигде. Все только и твердят про самообразование, книги, курсы. Даже вот целый хайп про образование прошел недавно на хабре.
не задавай вопросы коллеге. Задавай их гуглу.
Отнюдь. В иной раз коллега гораздо лучше сможет объяснить какой-то непонятный момент. Это не значит, что нужно спрашивать вопросы почему функция не работает, но, например, «почему в коде написано так, а не иначе», или «почему мы используем именно эту библиотеку, а не другую» имеет смысл спрашивать именно у коллеги.
если открываете проект, а там сплошной говнокод: время делать ноги. Ищите место где говнокода меньше.
Ахх, где же этот идеальный мир без говнокода...?
Если коллега рассказывает о чем-то, а вы ловите себя на мысли что не знаете этого… поздравляю! Это значит, что вечером мы с задором маньяка сядем гуглить о чем он говорил и в следующий раз ситуаций где вы почувствуете себя дебилом будет на одну меньше.
Вы серьезно чувствуете себя дебилом каждый раз, когда кто-то из коллег рассказывает вам то, чего вы еще не знаете..?
P.S. Извините, не удержался.
не задавай вопросы коллеге. Задавай их гуглу.
Еще есть компромиссный вариант, спросить коллегу, что спросить у гугла.
Нередко проблема начинается уже на этапе постановки вопроса.
Неверно заданный гуглу вопрос, может завести сильно в лес.
Когда я только начинал, я думал, что меня будут учить. Я думал задавать вопросы нормально. А мои учителя бурчали и отнекивались… не задавай вопросы коллеге. Задавай их гуглу.
Не совсем согласна с вашим утверждением. Всегда приветствовала, когда мне задавали вопросы, говорила, что если не понятно, то лучше спросить еще раз. Охотно объясняла, почему так лучше написать или сверстать своим джунам. Другое дело, когда рассказала один раз реализацию, затем второй, а когда спрашивали уже в третий, то меня это расстраивало. Получить ответ от более опытного коллеги зачастую быстрее, чем долго ковыряться самому в и-нете. К тому же еще не факт, что найденное верно или подойдет в вашем проекте, в силу специфики оного.
Конечно, есть разница в вопросах: «Почему у меня все не работает?» и «Плохо ли использовать позиционирование sticky?».
К примеру, если мой джун вставала в тупик при написание какого-то куска кода, то я садилась, находила в чем проблема и как ее решить. Давала подсказки, говорила где поставить брек поинт, советовала: «Смотри что тебе приходит, есть в аргументах нужные тебе данные. Если нет, то ты наверно передаешь что-то не то, ставь брек поинт выше, смотри что действительно надо отправить в метод»
Меня наоборот, настораживало бы, если бы джун сидел и молча ковырялся все время.
Если вспомнить свое джунство, то не могу сказать, что бы на меня все забивали, тоже старались рассказать полезные вещи, чему-то научить.
Видимо, у вас очень много свободного времени. Ну или Вы — воспитательница в детском саду. Когда решаешь задачи "вселенского масштаба", обычно, бываешь готов убить любого, кто прервет ход твоих мыслей, даже будучи человеком абсолютно незлобным и позитивным в обычной гражданской жизни. А "ковыряться в инете" — это вообще должен быть базовый навык в нашем деле.
Видимо, у вас очень много свободного времени. Ну или Вы — воспитательница в детском саду...
Времени как раз постоянно не хватает. Да, раздражает, когда отвлекают, но я стараюсь резко не отвечать. Чаще всего, забавные затыки, которые выявляются минут за пять. Лучше сразу потратить время и научить правильно, чем в будущем исправлять баги, которые полезут из не умело написанного кода. Да и мир it-тесен, ни когда не знаешь, кого встретишь на новой работе и с чьим кодом придется работать…
Вот, что точно умеет делать вуз, дак это даёт понимание какой-то реальности, учит мыслить более рационально.
Время снова браться за математику.Вот не напишет такое человек с дипломом, хотите верьте, хотите нет.
Не надо стесняться того, что вы становитесь лучше.… Сразу скажу: если открываете проект, а там сплошной говнокод: время делать ноги. Ищите место где говнокода меньше.
То есть в любом случае вместо того чтобы решать неизбежные (по вашим же словам) проблемы старения кода, от них надо сбегать, желательно на другое место работы?
Пожалуй, хороший вопрос для интервью, надо только его подать немного не в такой форме, и никогда не брать на работу людей, которые согласны с тем, что "пора делать ноги".
— Ты к своей девушке в таких же ботинках ходишь?
Я не совсем понял, о ком он — никакой девушки у меня не было на тот момент. Но решил подыграть:
— Нет, к ней хожу в чистых. Я же ее уважаю.
— Вон с кафедры! Вон! Ты не будешь чинить реактивные двигатели! Ты будешь собакам хвосты крутить!
А сказал бы честно как есть, не было бы конфликта.
Рапорт не принимали? Знакомо. Те, с кем я учился, отстранялись от обучения на военной кафедре сходным образом.
Теперь буду мучаться спустя 15 лет…
Я подумал, что начальник кафедры не принимал Ваш рапорт на отстранение от обучения на военной кафедре.
В голову не пришло его подать? Ну, Вы, блин, даёте...
Не понял, вы конфликтом гордитесь?
если открываете проект, а там сплошной говнокод: время делать ноги
То есть Вы не умеете читать чужой код.
А поскольку, обычно через год свой собственный код, когда его подзабыли выглядит как чужой
=> то значит Вы пишете WRITE-ONLY-CODE.
Вы так говорите потому что вам еще не встречались проекты целиком состоящие из говнокода?
Если ты не способен исправить чужой говнокод (разобравшись и оптимально переписав), то ты не программист, а говнокодер.
PS и что-то мне подсказывает, что для тебя алгоритм быстрой сортировки, в твоих глазах тоже выглядит "настоящим говнокодом", потому что ты, решив, что "ВУЗ не нужен", гордо забил все на "ненужные предметы", включая и теорию алгоритмов, которая в твоих глазах по причине непонимания выгляди "говнокодом".
Во-первых, не надо додумывать за других мысли и слова которые они не говорили, у вас это хреново получается.
Во-вторых, моя позиция относительно ВУЗов такова: я не вижу убедительный доказательств тому что в современном мире классическая форма вузовского (и школьного тоже) обучения является наиболее эффективной.
В-третьих, метод обучения и изучаемый материал есть вещи ортогональные. Можно проспать лекции по алгоритмам в институте, а можно самостоятельно изучить трехтомник Кнута.
В-четвертых, возвращаясь к говнокоду. Допустим, есть проект на пару миллионов строк говнокода. Способен ли кто-то его исправить? Технически да. Но на практике это потребовало бы довольно внушительных затрат времени, которое а) не очень-то и хочется на это тратить и б) никто не будет оплачивать.
А если не способен исправить говнокод по причине того, что это не обосновано бизнес-задачами? Или вы живете в идеальном мире, где нет бизнес давления?
Я вам вот что скажу:
Понедельник
Во-первых, не знаю как сейчас, а раньше там ещё писать учили грамотно.
Во-вторых, не важно вуз или нет, но нужен наставник. Как минимум на начальном этапе.
Иначе вместо самоучки велика вероятность стать очередной обезъяной-говнокодером.
Знаете сколько веб-макак могут отличить 400 от 405 и знают почему нужно применять POST или GET в конкретном случае? Очень мало, к сожалению. И это только вершина только одного из айсбергов.
Вторник
А ещё можно аниме-дорамы смотреть, тоже тренирует мозги.
А кому-то головоломки или кроссворды помогают.
Это индивидуально.
А математику лучше тоже с наставником начинать.
Попробуйте курсы хорошие какие-нибудь — разница будет на несколько порядков.
Среда
Норм.
Четверг
Знания — это не ум. Знания получить из интернета можно, ума набраться — нет.
Если ваши опытные коллеги не желают быть наставниками — надо бежать из такой конторы, она явно не заинтересована в вашем росте.
Черпать решения из гугла можно только если ты уже эксперт в технологии и нужно просто готовое решение для частного случая. Такое, которое ты можешь осмыслить и понять полностью, через все абстракции.
Пятница
Сомнительно.
Есть культ самолётников, есть антипаттерны, есть популярные методы написания хренового кода (в основном индусский и китайский). Их, конечно же, лучше обходить за сто вёрст.
А ещё есть красивый код.
К красоте, конечно же, стоит стремиться, но это, в некоторой мере, ещё и вопрос вкуса и стиля.
Суббота
Не совсем. Эта коммуникация говорит о факте вашей потребности в наставнике ввиду недостаточного уровня. Быть фрилансером на таком уровне просто нельзя (да, говнофрилансеры на это "нельзя" клали, отсюда и общий уровень качества работы фрилансеров). На более крутом уровне такой потребности нет.
Но социализация, конечно же, тоже к добру.
Воскресенье
Рассказать это работодателю — отличный способ для СНГ (и некоторых других мест) чтобы остановить повышение зарплаты себе на очень долгий период.
велика вероятность стать очередной обезъяной-говнокодером.
Подозреваю, что она просто велика. Для большинства людей это потолок. Наверно, образование как-то улучшает ситуацию, но вряд ли радикально.
Будет ли он учителем или коллегой или кем ещё — не так важно.
Программирование — наука инженерная, тут не надо быть гением, чтобы решать 99% задач, нужна всего лишь дисциплина, база и, иногда, аналитический склад ума.
И снова повторю любимую фразу программистов: it depends…
Но мы-то не про конкретно этих людей и их конкретные задачи, а про стратегическую роль фундаментальных знаний в личности инженера. Инженера, а не низкоквалифицированного конвейерного рабочего (ничего не имею против рабочих, они тоже нужны и я их тоже уважаю).
В своё время ребята, которые выставляли кегли в кегельбане тоже говорили, что для их работы им образование не нужно. Потом их заменили бездушными автоматами.
Ну и основная масса вакансий по программированию не предполагает наличия глубоких знаний у соискателя (1С и CMS). Нужен просто человек, который сможет обслуживать и сопровождать систему.
Низкоквалифицированный труд в АйТи действительно существует, и действительно можно там работать. Только это не инженеры, и говорить о них не особо интересно.
На КодФесте 2017 был неплохой доклад про то, как прогресс убивает профессии, рекомендую ознакомиться.
И да, для нормального 1С-ника именно computer science может быть много и не надо, но вот предметную область (то есть бухучёт) и умение работать с клиентом — нужно. Это тоже фундаментальные знания-навыки, и их тоже дешевле получать в ВУЗе ну или техникуме.
Видно это такой тренд — кичится необразованностью — типа стать программистом самостоятельно — без должной образовательной базы.
Но высшее образование (типа университетского) прежде всего дает возможность создавать новые знания.
Поэтому возникает вопрос — какие информационные технологии или продукты созданы в России и получили международное признание.
Но даже если ставить вопрос так, то вот, наверняка еще не полный, список компаний, имеющих R&D в России:
- Alcatel-Lucent
- Allied Testing
- AVIcode
- Cadence
- Design Systems
- Chrysler
- Cisco Systems
- Columbus IT
- Dell
- Deutsche Bank (the bank’s 2nd largest development center in the world is in Moscow)
- Digia
- EGAR Technology
- EMC
- EMS
- Ericsson
- Hewlett-Packard
- Huawei
- IBM
- Intel
- InterSystems
- Jensen Technologies
- LG Softlab
- Motorola
- NEC
- NetCracker
- Nival Interactive
- Microsoft
- Nokia
- Nokia Siemens
- Quest Software
- RD-Software
- Samsung Research Center
- SAP
- Scala CIS
- SmartPhoneLabs
- Oracle (former Sun Microsystems)
- Tagrem Studio
- Teleca
- T-Systems
Исключим выпускников российских вузов — речь идет о самоучках, как они себя сами и позиционируют — вот их примеры в области информационных технологий и ожидаются
А то, как делать ежедневный рутинный программистский труд и выдавать продукт в ВУЗах не учат. По крайней мере не учили, когда это все создавалось и росло.
Во-вторых, требование в/о не является свидетельством того, что оно дает знания.
Если и берут, то скорее всего людей, у которых УЖЕ есть большой опыт в индустрии, который позволяет закрыть глаза на отсутствие ВО. Но этот опыт надо где-то набрать. А во многих местах резюме даже не будут смотреть, если нет ВО, оно просто не пройдет первый уровень отбора HR и люди, которые смогут оценить уровень знаний, который у кандидата якобы есть, просто его не увидят.
Странный вообще какой-то вопрос, нужно ли ВО? Конечно нужно, но нужно именно по специальности. Плюс это свободные несколько лет, которые вы можете потратить на самообучение в т.ч. Если у кого-то нет возможности получить ВО, ну что поделать, надо пытаться без него. Но советовать это как нормальный старт карьеры — глупо, как по мне.
Люди не знают алгоритмы, но при этом досконально знают ядро Линукса и стэк TCP и программируют вполне конкурентноспособные продукты (диссекторы протоколов, например).
Но советовать это как нормальный старт карьеры — глупо, как по мне.
Если я утверждаю, что без в/о обойтись можно и хуже не станет, это не значит, что я не советую в/о. Я советую учиться всеми доступными способами. Даже если оно не пригодится.
Например у нас (Израиль) в/о достаточно редкое явление. Это безумно дорого и сложно.«Капитализм ...» (с) А.Ш. в роли милиционера в фильме «Красная жара»
При всем при этом регион считается вторым после Кремниевой Долины по размерам ИТ.Т.е. и малодоступность ВО поэтому «плюс»?
Т.е. и малодоступность ВО поэтому «плюс»?
Малодоступность — она разная бывает. Скажем, повысить уровень высшего образования можно только ценой увеличение отсева при поступлении. Увы, но это так.
«Капитализм ...»
Наша проблема — не капитализм. Просто из армии приходишь только в 21. А на выходе из армии тебя ждут звериные цены на все (пачка сигарет, например, — 700 рублей) и приходится сразу работать, а не учиться. Курить то что-то надо. Вот и курят маны, они бесплатнее, чем образование.
звериные цены на все
приходится сразу работать, а не учиться
Капитализм в фильм «Красная жара» обозначал и это, и многое другое Ж-)
из армии приходишьа программистские войска? ( без кавычек)
на развитие ИТНедавно ex.начальник из них как раз рассказывал, как и что…
Очень Союз хвалил за подготовку кадров.
Когда поток уменьшился, стали тренировать кадры прямо в качестве срочной службы
Расшифровка тезиса:из армии приходишьа программистские войска? ( без кавычек)
«Программирование — не для всех». Бывший киберразведчик учит айтишников на базе военных методик
Журналист, Q:
— В объявлениях о приёме на работу в израильские ИТ-фирмыA:
в качестве требования к кандидату может быть указана
«служба в технологических подразделениях военной разведки
или МАМRАМ». Как вышло, что в Израиле именно
армия стала кузницей кадров для ИТ?
комплекс из психологических и IQ-тестови затем:
погружаются в сверхинтенсивный курс —
6-8 месяцев обучения по 12 часов в день.
Если человек успешно проходит курс,
он может присоединиться к армии
в качестве ИТ-специалиста на следующие 4 года.
В этом случае он уйдёт из армии не в 21 год, а в 25 лет,
уже с большим ИТ-опытом. После чего сможет
начать карьеру в израильском хайтеке.
обучения по 12 часов в день
И что, разве человек способен заниматься умственной деятельностью 12 часов в день?
Там же, Q:на развитие ИТНедавно ex.начальник из них как раз рассказывал, как и что…
Очень Союз хвалил за подготовку кадров.
— У нас принято гордиться «старой инженерной школой»A:
... наследие СССР...
— В СССР образовательная система была действительно
очень хорошая. В 90-е, когда Союз развалился и
в Израиль переехала целая волна советских инженеров,
это дало нам мощный толчок: мы получили
специалистов высочайшего уровня.
Приведите пример success-story в РФ работы человека > 3 лет в одной организации с реальным карьерным ростом.
По себе скажу так — собеседуя людей наличие в/о определяется просто по первым 5 минутам диалога
А я с этим и не спорю. У вас причино-следственная связь только тут нарушилась. Отсутсвие в/о — следствие какой-то проблемы человека, а не наоборот. Просто еще один из симптомов и не более того. Но сам по себе не является определителем чего-либо, так как в обратную сторону это не работает.
Приведите пример success-story в РФ работы человека > 3 лет в одной организации с реальным карьерным ростом.
Я вам и с в/о не приведу таких примеров. Нужно быть очень немотивированным сотрудником, чтобы годами сидеть в одной компании. Со скуки же умереть можно.
Смена должностей (не люблю слово «карьерный рост» — мне не нужен рост, мне нужно чтобы интересно было) вот такая: qa engineer, qa manager, qa automation team lead, software architect, program manager.
Но. Я считаю, что высшее профильное образование нужно. Вполне может быть, что с моими мозгами да с высшим образованием я б достиг гораздо большего к этому моменту. А так много ресурсов ушло на то, чтобы восполнить недостаток образования.
Плюс такой ресурс, как ВУЗовские связи, у меня неполноценный. Сейчас это уже не так важно, но вот лет 10-15 назад это ещё имело значение.
В общем, дамы и господа, учитесь полноценно, в нормальном ВУЗе. Оно того стоит.
До недавнего времени почти все технические ВУЗы страны в лучшем случае преподавали Паскаль и Бейсик
Мягко говоря, это неправда. Профильные ВУЗы всегда имели вполне приличные программы обучения.
До недавнего времени почти все технические ВУЗы страны в лучшем случае преподавали Паскаль и Бейсик
Basic — УПК в школе ( и в соседнем учили не на нём, а на Fortran)
Времена — конец прошлого века, политех: Fortran, затем TP ( 1-ый курс), Modula-2, C++,
Prolog аж дважды, базы данных
Но, не как самоцель, а как основа конкретных областей создания ПО
Впрочем, в том же ВУЗ-е:
Quick Basic — после лекций, у физиков была лаборатория с свободным доступом:
надо было только в журнале записаться на конкретный компьютер
Я вот учился строить газо-турбинные двигатели в авиационном. Меня учили от и до. Со 100%-м покрытием теории и практики. Я не сидел по вечерам, чтобы получить что-то, что мне ВУЗ не дал. Нет такого у программистов.
Перенесите отсутствие базовой вузовской подготовки на такие отрасли знаний, как математика, физика, медицина и так далее.
Если профессиональное программирование доступно всем, то оно является недоотраслью знания скорее всего — просто некое ремесло — натаскался и вперед
(математика и физика — не профессии, а науки, поэтому про них не говорю)
А в программировании можно начать почти сразу и почти без знаний. Ну… получается да, ремесло.
Ну серьезно, ну какой процент вакансий программистов требует знание алгоритмов, матриц и деревьев? Да днем с огнем не сыщешь. А больше ничего особо институт не дает.
именно из-за отсутствия указанных знаний и пишется г-код
и поэтому такого кода много
Что касается физики и математики — это профессии и науки, как и другие отрасли знаний — на всякий случай напомню по этим специальностям защищаются диссертации.
Кстати, как и по программированию — подумайте об этом — - хотя можно всю жизнь прожить подмастерьем, питающимся крошками знаний
По поводу физики и математики: диссертации защищаются не по специальностям, а по дисциплинам. Профессия человека, который занимается чистой физикой, называется лаборант, доцент или профессор. А не физик.
В частном секторе такой профессии вообще нет. В лучшем случае инженер.
Явный признак самоучки — путаница в терминах
- По специальности — см http://www.dissercat.com/content/urboekologicheskii-podkhod-k-gradostroitelnoi-strukture-goroda
- По лаборанту — это должность
- доцент или профессор — это ученое звание, а также должность (дается по итогам учебной работе в учебном заведении — требует нужную ученую степень, как правило, или большой педагогический стаж)
- Ученая степень дается по защите диссертации
Поэтому любой специалист может иметь ученую степень, если по его специальности есть защиты диссертаций, и может иметь ученое звание, если работает в учебном заведении. - Дисциплина — это название предмета, который преподают в учебном заведении
- С чего вы решили, что физики, а также химики или математики не работают в частных предприятиях — как сказал бы Милюков — Что это? узость или невежество
Хотя с самоучками спорить бессмысленно — в силу их самоучености
доцент или профессор — это ученое звание, а также должность
Со званиями всё не просто. Я знаю человека должность — доцент, звание — старший научный сотрудник, степень — кандидат технических наук.
поясняю для самоучки
- в учебных заведениях — ученое звание доцент, профессор (также должность)
- в научных заведениях — были ученое звание младший научный сотрудник и старший научный сотрудник (в настоящее время упразднены), как должности сохранились
Причём тут самоучка? Вы полагаете, что выпускник ВУЗа должен знать особенности штатного расписания учебных и научных заведений?
Номер WES (ECA#): «3081241IMM»
Master Degree. Gas Turbine Engines.
Убавилось гонора или продолжим письками меряться?
Неважно, как он учится, по книжкам ли дома, или в классе сидит с учителем, он учится САМ.
В него знания никак не закачаются автоматом, он должен учиться САМ.
Согласен со статьёй, а некоторые скептики в коментах не понимают, что фундаментальные знания можно получить и будучи самоучкой, умея правильно задавать вопросы гуглу.
Вы без образования?
Ну-ка, сможете ли Вы решить задачу. В грубой форме она звучит так:
придумать алгоритм для нахождения N-ого числа Фиббоначи, быстрее классического O(N)
Я не буду описывать решение (которое я сам не смогу с ходу написать), напишу только следующее:
Нужна линейная алгебра. С помощью матрицы 2х2 и операции перемножения матриц можно вычислить N-ое число Фиббоначи гораздо быстрее линейного алгоритма.
Человек без образования ее вряд ли решит, т.к. маловероятно, что человек будет просто так сидеть и читать про линейную алгебру (есть исключения, ес-но).
Теперь отойдем от данной задачи.
Я могу задать гуглу вопрос: линейная алгебра матрицы перемножение.
Но знание вопроса — это уже половина ответа. Как Вы будете знать, какой вопрос задать?
Образование дает обрывки знаний, о которых человек сможет вспомнить в разнообразных ситуациях, чтобы задать правильный вопрос гуглу.
Если я не слышал о преобразованиях Фурье и не имею малейшего представления (я действительно не имею) о том, что это, то каким, черт побери, образом я узнаю, что мне нужно загуглить их, т.к. они мне пригодятся в данной задаче?
Тезис: образование дает намного более широкий угол зрения.
Современная тенденция, говорящая, что образование не нужно, просто основана на том, что разработка превратилась в ремесленную работу: возьми это — сделай то.
Большинство текущих вакансий на рынке — полнейший шлак, не требующий большого ума, но требующий знания технологий, которые в вузе не преподают.
Большинство текущих вакансий на рынке — полнейший шлак, не требующий большого ума, но требующий знания технологий, которые в вузе не преподают.
Логично, что таким вакансиям соответствует среднее-специальное образование.
Таким вакансиям и средне-специальное не нужно.
Просто все эти разговоры про "программисту не нужно образование" имеют смысл лишь в плоскости "конвейерных" вакансий, не требующих большого ума. Увы, программисты не являются интеллектуальной элитой, как бы некоторые личности не кичились своей профессией
С таким же успехом можно сказать, что среднему педиатру образование не нужно, т.к. он может с коллегой посидеть и основные симптомы, методы лечения, направления запомнить на практике.
(возможно, неудачный пример)
Вы без образования?В точности эту задачу я решал школьником, летом после 9 класса. И, кстати, вполне решил и с ходу написал.
Ну-ка, сможете ли Вы решить задачу. В грубой форме она звучит так:
придумать алгоритм для нахождения N-ого числа Фиббоначи, быстрее классического O(N)
Она ни в коей мере не требует высшего образования.
У меня нет диплома о высшем образовании, но есть (сейчас) база.
Лучше б я закончил ВУЗ.
Не понравился первый же пункт:
считаю, что программисту ЛУЧШЕ быть самоучкой
Если Вы самоучка, каким образом Вы можете знать, лучше или не лучше?
Я понял, что Вы имели в виду, но все-таки подбирайте слова, пожалуйста;)
Дело в том, что наука программирования постоянно развивается и итерируется, а значит старые методы мы смело забываем и осваиваем новые.
Значит сортировка методом пузырька и альфа-бета алгоритм устарели и их нужно забыть?
Ура дилетантизму и агрессивному любительству!
Я каждый день с удовольствием бегу в офис
Везет, я уже лет 8 в офисы не бегаю, разлюбил.
Люблю работать в своем кабинете дома. Тут тихо, приятно и удобно.
Далее, из 5 летней ВУЗовской программы, на мой взгляд, приходится выслушивать достаточно много ненужного материала, т.е. время потраченное впустую. Да и чем собственно курсера или edx плохо? Там что, легко получать специализации? Отнюдь.
Если некто собирается делать шаурму (в Питере шаверму), то ему, наверное, невредно закончить кулинарный техникум
С программирование то же самое — в массе шаверма — но бывают все же шедевры типа nginx
… а затем продавец шаурмы возмущается, что его не хотят без диплома брать шеф-поваром в ресторан, хотя он шаурму начал делать, когда обладатель диплома ещё на первый курс ходил.
Опыт подсказывает, что у кандидатов без в/о таких навыков нетно опыт подсказывает, что годится почти любое ВО, а не только профильное?
Опыт подсказываетИ причина имхо в том, что вуз не только развивает, но вуз — скорее фильтрует: в вуз идут именно такие — физически пригодные для подобной интеллектуальной работы. Если человек поступил и его не отчислили на первой сессии (если факультет честно отчисляет тех, кто не годен), то человек вероятнее всего способен «целенаправленно заниматься одним делом, писать грамотный текст, глубоко погружаться в сложную техническую литературу, да и хотя бы просто хотя бы грамотно разговаривать»
скорее фильтрует: в вуз идут именно такие — физически пригодные для подобной интеллектуальной работычитал лет 10 назад интервью с профессором какого-то знаменитого вуза, вроде MIT. Когда его спросили в чем секрет успеха, он сказал, что дело не в блестящих педагогах или ученых, а в том, что они отбирают для себя только блестящих студентов. Студенты достигнут высот, даже если их ничему не учить и всех преподов уволить, ведь все поступившие по природе своей сами не способны не учиться и не исследовать.
Судя по комментам, true-программисты, те, которые заканчивали профильные ВУЗы, плохо воспринимают самоучекотнюдь. Самоучки вызывают и могут вызывать только уважение и трепет (Лейбниц или Фарадей, например). Плохо восприниматься могут дилетанты, а дилетанты часто заявляют, что они самоучки, поэтому имхо произошла девальвация термина «самоучка», поэтому самоучку, который говорит, что он самоучка, сегодня по дефолту принято считать дилетантом, увы.
Наглядно:
1)какой-нибудь JavaScript/Ruby/Python/Devops Rockstar не будет заявлять, что он самоучка, т.к. любому, кто в теме понятно, что систематическое образование, даваемое вузом, тут не очень требуется, а с другой стороны закончившие вуз, скорее всего высот в этом (JavaScript/Ruby/Python/Devops) достигли не через вузовскую программу, а самостоятельно. т.е. тут все скорее всего будут фактически самоучками.
2) Если программист из UBS AG или NASA говорит, что он самоучка — это не просто нормально, а великолепно (т.к. человек самостоятельно смог освоить вузовский курс и пойти дальше).
3) Если непонятно кто, говорит, что он самоучка, ему в ответ говорят «самоучки — тут все (типа по логике вашего профессора), устройся без обучения в вузе работать в JPL NASA, тогда будет о чем поговорить. Но раз ты на автодидактике акцент ставишь, значит, скорее всего, у тебя других достижений нет, значит ты дилетант».
С Лейбницем пальцем в небо — он учился в трех университетах и закончил обучение защитой диссертации.
Что касается Фарадея (еще можно добавить Зельдовича, как академика без диплома), то они просто работали с должности лаборанта, набирая знания от старших коллег непосредственно
Думается остальные самоучки лишены такой возможности и варятся (скорее парятся) в собственном соку
С Лейбницем пальцем в небоемнип учитель маленького Готфрида возмущался, что Лейбниц лез в учебниках вперед заданного и наказывал его за это. Потом какой-то умный муж был у них в гостях, он пообщался с Готфридом, удивился и убедил отца Готфрида: 1) отменить занятия с учителем (которого Готфрид превосходит умом) 2)рарешить пацану пользоваться отцовской библиотекой. Несколько лет паренек учился сам, к 12 годам сам выучил латынь, греческий и т.д., а когда к 14 годам в отцовской библиотеке не осталось непрочитанных книг, Лейбниц в поисках новых знаний поступил в универ.
Что касается ФарадеяФарадея лаборантом не просто так устроили (а придя в восхищение от его уровня). До лаборантства он дошел своим умом (он был емнип из бедной семьи и с малых лет работал кем-то типа курьера или газетами торговал, но это не мешало ему самостоятельно заниматься).
«Самоучка после вуза» за пояс заткнёт хоть «самоучку без вуза», хоть дипломированного «специалиста» без самостоятельной практики.
— Во-первых. Ни в одном нормальном ВУЗе не учат одно только программирование, как таковое. Это же бесполезно. Учат алгебру, модели, паттерны и всякую другую теорию, которая не когда не устареет и всегда будет помогать в решении задач, потому как универсальна. Ну и немножко учат языки программирования, но это не больше 10% программы ВУЗа.
— Во-вторых. Миф о том, что обучение в ВУЗе лишает Вас способности учиться самостоятельно — это выдумка лентяев, которым после лекций в ВУЗе влом дома дополнительно позаниматься.
— В-третьих. Обучение в ВУЗе даёт Вам не знания и не корочку, а систему. Если не в ВУЗе, то где-то Вы эту систему всё равно должны взять, иначе из Вас не получится специалиста, обладающего законченным циклом знаний и навыков, необходимых для того, что бы доводить решение задач до логического конца.
Хотя с полезностью математики я соглашусь. Сам закончил прикладную математику и по 10 раз в день благодарю всех преподавателей дискретки, алгебры, матана и других дисциплин за ту математическую базу, которая ежедневно упрощает мою жизнь на работе. Должен только заметить, что у чистой математической теории, в отличие от теории ИТ-шной, есть одно существенное ограничение, которое, как раз, и отпугивает многих. Математика часто кажется бесполезной, потому как у неё очень и очень большая критическая масса, то есть для того, что бы математика была полезна программисту, он должен знать её очень и очень много и очень хорошо. И лишь тогда она будет приносить плоды, окупающие время, затраченное на её изучение. Поверхностные знания математики действительно совершенно бесполезны.
И тогда я понял одну очень важную вещь в работе программиста-джуна: не задавай вопросы коллеге. Задавай их гуглу.
Ну спорное конечно заявление). Может получится и так, что гораздо выгоднее всё таки посоветоваться с товарищем. Но в общем случае да, гугля ты облегчаешь жизнь и себе и коллеге.
Поиск специфичной информации — это тоже навык, которому нужно учиться.
Я даже не знаю, что ярче свидетельствует о том, что хабр скатился на уровень помойки — это или третья за неделю статья для хрюш о том, как же на самом деле надо нанимать погромиздов.
А что в нем 'из ряда вон выходящеe' — даже думать боюсь.
Четверг аналогично — вопросы более опытным ребятам задавать нужно, чужой опыт экономит кучу времени и сил, если не отвечают — значит сами ни фига не знают
А так все отлично, удачи
А если там есть курсы по типу Python, Java, Scala — то 90%, что их по фану ведут либо вчерашние магистры, либо мидлосеньоры из местечковых филиалов DataArt, DSR, NetCracker и тому подобных фирм. Учебного плана ноль, педагогического образования тоже, только мотивированный избытком свободного времени энтузиазм. Итого весь курс травят enterprise-байки, под настроение выносят на обсуждение какую-нибудь фичу языка, но обычно в начале курса просто выдают накодить какую-нибудь баянистую задачку, скомунижженую из лекций Стенфордского университета и на парах появляются только в том случае, если староста кинул в конфу сообщение, что 5-8 человек готовы сдать или никто не понимает, как настроить sbt под виндой.
Е мое то что делал раньше весь день сделал за 10 минут, теперь еще вот это докручу чтобы лучше работало
Я как раз перехожу на эту стадию)
Автору, от сердца.
Был на Вашем месте, главная опасность такой степени увлечённости (в моем случае необходимо было ещё обеспечивать супругу и двоих детей) — это не выгореть эмоционально (иногда освоение профессии боем даётся нервными срывами если быть обязательным человеком), никогда не сдаваться, беречь себя (психологические риски "выгорания" очень серьезны. Тогда Вас ждёт неизбежный успех. Эти качества, эмоции, о которых Вы пишите, все это было свойственно олдскул разработчикам, да простит меня хабр и коллеги за это слово )
ЭВМ — комплекс технических средств, в котором основные функциональные элементы (логические, запоминающие, индикационные и др.) выполнены на электронных элементах, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач.
в РБ в ПВТ лично захотел записаться на курсы по PHP так сказать базу подтянуть, т.к сам самоучка, а у самоучек опыт = сделанные задачи + самостоятельное обучение. Пришел посмотрел курс по которому собирались учить, когда препод сказал, ну я в реальных проектах не участвую то хочется сказать, а что ты тут вообще забыл? Естественно там о реальных проблемах с которыми столкнется будущий программист даже речи не велось. Писать свою CMS за месяц на php + mysql и получить те же результаты что и нашумевшие «программисты» после курса Попова.
Понедельник. День тяжелый.
Я считаю, что программисту ЛУЧШЕ быть самоучкой.… Потому что в этой из ряда вон выходящей профессии нужно самосовершенствоваться каждый день хотя бы час-полтора, а лучше всю ночь.
Не знаю, что мешает не самоучке с вышкой повышать квалификацию после получения диплома. Может, в универах на третьем-четвертом курсе начинают электрошок применять при попытках читать для закрепления условного рефлекса (о, этот дивный мир!), сам-то я с третьего курса ушел.
старые методы мы смело забываем и осваиваем новые
В программировании (логика и алгоритмика) ни-че-го не изменилось за 50 лет. Сортровка, решение графа и конечный автомат остались точно такими же, какими их описали Дейкстра и Кнут. А у разработчиков — да, каждый год новый фреймворк и новая либа. Программисты консервную банку отправили на Луну и вернули назад в четырех килобайтах памяти. У разработчиков гигабайтом больше, гигабайтом меньше — пофик, юзер новый планшет купит, если потребуется.
Вторник.
Я ничего не понял. Элджернон все еще решает лабиринт лучше меня. Очень умный мыш.
Среда.
Да! Команда разобралась с текущей либой и ей стало легко. Лид счел, что начинает тупеть и занялся домашним проектом. Втянулся. Теперь вся команда следующий проект будет делать на новой либе, чтобы не отупеть, пользуясь проверенной. Разрабатывать нейроны, давая им кардинально новые и отличные от текучки задания вроде написания рассказа в жанре твердой НФ или самостоятельного расчета и изготовления табуретки не нужно и неприятно — мы ж не гуманитарии и не синие воротнички.
Четверг.
Общение с людьми дается тяжело. Я вижу, как мисс Кинниан смотрит на меня, вижу страх в ее глазах. Она перестала понимать мою речь, ученик стал учителем. Общаться с коллегами невыносимо. Буду спрашивать у других людей, но не лично, а через переписку, чтоыб не стлокнуться с затравленным взглядом собеседника.
Пятница.
Я теряю память. Интеллект деградирует. Я открыл код сотрудника и понял, что больше не могу читать по немецки, на хинди и на говнокоде. Тезис постоянного развития, витавший в моей голове еще в среду, покрылся пеленой, я не могу вспомнить, что я тогда имел в виду. Поэтому ставить перед собой задачу разобраться в говнокоде хотя бы из спортивного интереса, из желания понять, как думают другие люди, да и просто выполнить поставленную задачу, не придираясь к окружающим и не пытаясь подчеркнуть, как я превзошел Элджернона, я не буду. Пожалуй, сбегу обратно в пекарню.
Суббота.
Понял, что не могу более заниматься научной работой. Голова костенеет, нейроны теряют друг друга из виду. Не хочу, не хочу более думать о новом, не желаю более экспериментов! Старые, проверенные мысли — лучше. Как в былые времена в классе мисс Кинниен, заучу очередной паттерн, чтобы домашнее задание от зубов отскакивало. В понедельник и среду были крамольные теперь мысли о саморазвитии, отбросил их, как грязную ветошь. Только протоптанная дорожка, только подобие.
Воскресенье.
Сладосное забытье ребята из пекарни меня больше не задирают и я хожу с ними выпить пару пива
P.S. Палажите пожалуста нимнога цвитов на магилу русскаго эссэ и асобинна в той части где пра запитые.
В программировании (логика и алгоритмика) ни-че-го не изменилось за 50 лет. Сортровка, решение графа и конечный автомат остались точно такими же, какими их описали Дейкстра и Кнут.
Timsort — от 1993 до 2002 года, в зависимости от вашей оптимистичности.
Parsing expression grammars — начало двухтысячных.
Обработка леворекурсивных и неоднозначных грамматик через некие специальные комбинаторы — 2008.
Ну и чуть шире:
Зависимые типы — менее 30 лет назад.
Линейные (и, более общо, афинные) типы — менее 30 лет назад.
Totality checking в языках общего назначения — сложно сказать, но тоже не 50 лет назад.
Ну это так, из головы прям если.
- Куча Фибоначчи — 1984
- Динамическое дерево Тарьяна-Слейтора — 1983
- B-дерево — 1970
- Skip list — 1989
- Декартово дерево — 1989
- Декартово дерево по неявному ключу — явно еще позже, дату не нашел
- Персистентный подход к структурам данных — 1986
- Lock-free структуры — 1994
- Preflow push — 1974
- Push-relabel — 1986
- Global relabeling — 1989
- Алгоритм Бойера-Ватсона — 1981
- Алгоритм Ахо-Корасик — 1975
- Алгоритм МакКрейта — 1976
- Алгоритм Укконена — 1995
- Алгоритм Фараха-Колтона и Бендера — 2000
Это лишь то, что пришло мне в голову за пять минут. Эти (и многие другие) алгоритмы я изучал в 2005-2010, будучи тогда школьником, так что ничего сложного и дико нового нам не рассказывали, а сейчас там, вполне возможно, рассказывают что-то более новое.
Ваша заметка интересна. И вы молодцы, что вы смогли поменять профессию самостоятельно. Возможно ваша первая специальность не востребована в России или в мире или у вас что-то случилось что вы не смгли пойти в вуз, но вы нашли в себе силы развиваться самостоятельно.
Про понедельник
В чём вы правы
Развиваться — это и означает увы учиться придётся всю жизнь. Это отмечал и Ленин, и Энштейн, и почти все профессии требуют учиться всю жизнь. И вы правы про программирование, про которое не всё так просто.
Более того как таковой области сейчас нет. Есть масса областей ACM ***.
Вот например Д.Фридмен говорит в начале что программирование сегодня это не glamorous field как было раньше (https://www.youtube.com/watch?v=8hupHmBVvb0&t=74s).
Как вы можете развиваться. Есть бесплатные курсы от Стенфорда (ITunes university), есть курсы МФТИ, есть MIT OpenCourse — смотрите и развивайтесь, есть stackechange и более лёгкая quora — общайтесь и развивайтесь.
В чём вы не правы:
— Вам рано или поздно потребуется консультация профессора или аспиранта. Интернет — это помойка
— Рано или поздно вам потребуется поддержка психологическая чтобы сделать в короткий срок проект в 50K строк
— Вы подумайте про других людей. Вы готовы чтобы вашего кота оперировал ветеринар-самоучка. Нет. Мир сильно забюрократизирован. Я сталкиваюсь, что на ЗАПАДЕ ОТСУТСВИЕ PhD НЕ ДАСТ ВАМ ПРАВО ЗАНИМАТЬСЯ ИССЛЕДОВАНИЯМИ несмотря на наличие проектов.
— Бизнесс для зарабатывания денег, вуз для развития вас в первую очередь.
Про вторник
Я вам советую учить то что от чего вас «качает». Так же есть некоторые зависимости между разделами математики — поэтому если вы будете изучать математику по онлайн курсам вузов — там вы найдёте требование. Если вы хотите читать только книги, что же — хорошие книги пишут в вузах, но они доступны для покупку или там скачивания.
Если вы можете найти хорошую книгу прочитать её (e.g. обычная вузовская книга по дифурами)
А после этого читать более трудные книги (необычные тяжелые книги в.И.Арнольда) — то это просто супер.
В чём вы не правы
Если вы собираетесь просто изучать по книжкам это даёт общую картину, но
— собеседование в какой-нибудь Google заставит вас перефигачить какую-то идею полностью и вы должны понимать области применимости все того о чём вас будут спрашивать.
— жизнь так не работает что решаются типовые примеры. Есть задача — и вы должны соотнести её с разделом математики например.
— если вы изучаете «по википедии» математик — там ошибка почти в каждом предложении. Изучайте математику по вузовским книжкам
Про среду
Вы всё правильно говорите. Есть два режима в жизни и во всяких динамических системах моделирющую жизнь — explore and exploit. Вам надо изучать, но и работать чтобы не потерять навык.
Я вам советую — вы рано или поздно столкнётесь со старым. Каждый раз сталкиваясь с ним — смотрите под новым углом.
*Про Четверг*
Самостоятельнасть хорошо, у ваших дедушек и бабушек не было интернета. Но доверяйте статьям из домена *.edu они содержат практически всегда корректную информацию.
Если аспект технологии — доверяйте офиц. документации и форуму компании.
Если вы задаёте вопрос всем учителям и они отваричваются — проблема в вас, научитесь задавать вопросы. Вопросы вам придётся задавать всю жизнь.
Ну если вы задаёте вопрос всем учителям и только один из 6 отвечает — проблема в учителях, которые вас окружают. Ищите другое место.
Гугл не знает ответы на вопросы — это полнотекствовый поиск по 150 000 000 000 документам. Лучше используйте специализированные форумы типа stackexchange или quora или сайты факультетов вузов.
* суббота*
Если вы что-то не знаете — спрашивайте человека, не будьте вежливыми не молчите, спрашивайте. Вот например что Stephen P.Boyd говорит про то что не стоит быть вежливым:
youtu.be/bf1264iFr-w?t=571
*Воскресенье*
Очень хорошо, что вам нравится что вы делаете. Но не забывайте пока у вас нет хотя бы высшего образования бакалавра — вам придётся доказывать свою компитентность, вы не сможете сослаться на бумажку. У вас риск — что сотрудники отдела кадров не будут рассматривать вас. Я в похожей ситуации — у меня нет PhD и мне каждый раз по исследовательским позициям надо доказывать свою компитентность.
Так что для будушего вашего у вас два больших плана
1. Вам придётся получить высшее образование
2. Вам придётся сделать стартап, провалиться, сделать старап провалиться, и сделать стартап и не провалиться.
7 выводов программиста самоучки за 1 год