образование — Блог Валерия Леонтьева https://valera.ws Место публикации личных заметок. Технологии, управление, бизнес, жизнь Sat, 07 Feb 2015 08:32:47 +0000 ru-RU hourly 1 https://wordpress.org/?v=5.6.2 https://valera.ws/wp-content/uploads/2020/02/favicon.png образование — Блог Валерия Леонтьева https://valera.ws 32 32 Классификация знаний в области программирования https://valera.ws/2013.10.05~computer-science-knowledge-classification/ https://valera.ws/2013.10.05~computer-science-knowledge-classification/#respond Sat, 05 Oct 2013 20:39:13 +0000 http://valera.ws/?p=721 Читать далее Классификация знаний в области программирования ]]> CSМеня иногда спрашивают, что нужно выучить, чтобы стать программистом. Вопрос несколько наивный, т.к. нормально ответить на него по-моему невозможно. Т.е. для начала нужно выяснить, каким программистом нужно стать. Да и вообще, программистом ли? Кроме того, на рынке востребованы как высококвалифицированные дорогие специалисты, так и “рабочая сила”. Пакет знаний и опыта первых и вторых отличается в значительной степени.

Но, не смотря на такую расплывчатость вопроса, дать ответ на него все же можно. Можно описать примерный максимум знаний, которые так или иначе относятся к программированию. Собственно, этот максимум обычно и стремятся преподать в ВУЗах на специальностях, в названии которых фигурирует слово “программист”.

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

Конечно, знать все невозможно. Да и не нужно. Кроме того, какие-то вопросы нужно знать глубоко, а в других достаточно поверхностного обзорного понимания. По-этому в зависимости от специализации некоторые дисциплины более актуальны, некоторые менее. Но общие базовые знания необходимы почти по всем из них для любого инженера-программиста, от системщика до веб-разработчика.

В предыдущем абзаце я нарочно ввел термин “инженер-программист”. Как-то получается так, что программист — это не обязательно инженер. Даже из определения Википедии следует, что инженер — это в первую очередь проектировщик. Это тот, кто создает, т.е. проектирует системы. А в практике программирования проектирование нужно не всегда. Иногда достаточно кодирования: используя данный набор технологий, слепить что-то работающее. Типичный пример — стадо корпоративных или маркетинговых сайтов на джумлах, ворпрессах, друпалах и т.д. Это уровень техника, не инженера. Это уровень среднего образования. И работать техником можно даже после окончания курсов какого-либо языка программирования, крепкая теоретическая база там не нужна.

И, возвращаясь к инженерам-программистам, я хочу предложить свой граф дисциплин, которые изучают программисты. Очевидно, что одни дисциплины активно используют знания других, либо вовсе вырастают из других. Соответственно для полного понимания “верхнего” предмета, необходим какой-то уровень понимания нижнего.

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

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

Первый уровень из CS (computer science) — Специальная база. Это стартовая площадка для любого программиста по четырем фронтам:

  • арифметические основы ЭВМ (системы счисления и операции с числами, логические операции);

  • физические основы ЭВМ (полупроводники, транзисторы, логические элементы, схемы, интегральные микросхемы);

  • теория алгоритмов (алгоритмы и структуры данных; сложность, эффективность; способы представления информации в памяти);

  • языки программирования (задача и понятие ЯП, уровни, типы языков, абстракция, уровни абстракции, трансляция/компиляция, шаблоны, принципы, парадигмы — обзор).

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

Уровнем выше располагаются дисциплины, которые являются базовыми именно в программировании. По-этому я назвал этот уровень Основы. В него входят:

  • архитектура ЭВМ (процессоры, микроархитектура, память, шины, ввод/вывод);

  • обработка информации (теория информации, статистика, модели, поиск данных, лингвистические аспекты, обработка информации средствами табличных процессоров);

  • основы C/C++ (базовые свойства языка, синтаксис, указатели, ввод/вывод, массивы, основы STL).

Следом за Основами идет Уровень 1. Это первый прикладной уровень, и особо нетерпеливые могут начать коммерческую практику, овладев этим уровнем. Он включает 5 дисциплин:

  • основы ASM (развитие архитектуры ЭВМ в направлении программирования, написание простейших драйверов и алгоритмов, ассемблерные вставки в C/C++);

  • C/C++ (ООП, разработка прикладных приложений, библиотеки, WinAPI, make utils, параллельное программирование).

  • операционные системы (архитектура ОС, процессы, межпроцессное взаимодействие, потоки, планирование, работы с памятью и переферией, POSIX-системы);

  • системный анализ (предметная область, бизнес-процессы, потоки, диаграммы, принципы и теория системного анализа);

  • базы данных (теория множеств, виды СУБД, реляционные СУБД, модели данных, SQL, конкретные БД).

Следующий уровень — Уровень 2 — развивает предыдущий. Кстати, компьютерные сети попали в него только по той причине, что для их изучения желательно (но не обязательно) предварительно освоить операционные системы. По развитости этот предмет ближе все-таки к первому уровню.

Уровень 2 включает:

  • разработку ПО (жизненный цикл ПО, этапы разработки, основы ведения программных проектов, инструменты);

  • анализ данных (Data Mining, OLAP, машинное обучение, нейронные сети, ИИ);

  • компьютерные сети (по уровням стеков TCP/IP и/или ISO/OSI “от и до”, протоколы, сетевое программирование на C/C++);

  • языки программирования с управляемым кодом (управляемый код, виртуальные машины, сборщики мусора, юнит-тестирование, собственно практика на C# или Java);

Уровень 3 — последний уровень для среднего программиста. Он самый объемный и включает только те дисциплины, которые непосредственно связаны с разработкой ПО. Всего их получилось 6:

  • разработка UI и юзабилити (принципы построения интерфейсов пользователя);

  • управление командами и проектами (методологии разработки и другие вопросы управления);

  • тестирование ПО (обзорно: виды тестирования, инструменты);

  • веб-технологии (HTTP-протокол, веб-сервер, CGI, кэширование и проксирование, клиентское программирование);

  • распределенные системы (архитектуры распределенных систем, протоколы сетевого взаимодействия компонентов, инструменты, принципы, подходы к построению распределенных систем, отказоустойчивость, большие данные, высокие нагрузки);

  • интерпретируемые языки программирования (особенности, основы по двум-трем языкам, практика по одному-двум языкам: JS, PHP, Python, Ruby).

Все, что идет выше, — расширенные Экспертные знания. По большому счету этот уровень можно расширять неограниченно, добавляя в него смежные с разработкой дисциплины и наиболее сложные аспекты разработки ПО. Я привел 3 примера — разработка компиляторов, разработка операционных систем и построение архитектур больших программно-аппаратных систем, либо архитектур, рассчитанных на особо высокие нагрузки. Зависимости к нижним уровням на графе не рисовал, т.к. получится слишком много стрелок, идущих через все уровни, вплоть до Общей базы. Наверное, широкие зависимости — это один из признаков вопросов экспертного характера. Здесь как раз подтверждается то, что экспертный уровень требует самых широких знаний и хорошего опыта.

Интересно в графе то, что он не только показывает предпочтительный порядок изучения предметов, но также:

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

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

Граф — это модель. А хорошая модель как правило дает ответы сразу на множество вопросов. Я поставил перед собой задачу сделать хороший граф, близкий к реальности. Естественно, он основан на моем личном опыте и не претендует на идеал. Я старался сделать его наиболее объективным. И еще раз напоминаю, что это граф для программиста. Т.е. для тестировщика, сисадмина и других близких к программированию профессий он будет более или менее близким, но явно другим.

Граф
]]>
https://valera.ws/2013.10.05~computer-science-knowledge-classification/feed/ 0
Найшывышай категорыя https://valera.ws/2008.12.14~najshyvyshaj-kategoryya/ https://valera.ws/2008.12.14~najshyvyshaj-kategoryya/#respond Sun, 14 Dec 2008 19:19:55 +0000 http://valera.ws/?p=228 Сегодня купил кетчуп татарский, а на нем… На белорусский язык очень грамотно переведена фраза «наивысшей категории». Умудриться так исказить ее наверное было тяжело :)

P.S. Правильно писать «Найвышэйшая катэгорыя».

]]>
https://valera.ws/2008.12.14~najshyvyshaj-kategoryya/feed/ 0
Как связать «обучение», «знания» и «опыт»? https://valera.ws/2008.06.28~edu-know-exp/ https://valera.ws/2008.06.28~edu-know-exp/#comments Sat, 28 Jun 2008 20:56:19 +0000 http://valera.ws/2008.06.28~edu-know-exp/ Читать далее Как связать «обучение», «знания» и «опыт»? ]]> На основе некоторого накопленного жизненного опыта недавно сделал для себя выводы о связи понятий «обучение», «знания» и «опыт» на практике. Теперь у меня есть ответы на вопросы типа «зачем учиться», «что дает образование» и надо ли оно вообще…

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

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

Суть предыдущего абзаца в том, что не надо получать образование, чтобы иметь хорошую зарплату (подразумеваются только легальные пути). Отучившись в школе, можно самостоятельно подогнать знания и дальше работать за счет опыта. Так в чем тогда проблема, зачем учиться?

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

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

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

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

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

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

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

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

UPD. Конечно, требуется отметить, что все вышесказанное в некоторой степени проведено через призму IT-индустрии. Комментарий Артёма Курапова навел меня на мысль о том, что я забыл написать этот важный абзац. Да, вообще нельязя стать энергетиком, строителем, сдедователем и т.д. без соответствующего образования. В IT в этом смысле есть большая свобода. Но, нельзя сказать, что написание кода — это инженерная должность. Кодер — это как рабочий в строительстве. Он делает всю самую низкоуровневую работу. А вот все, что идет выше (тимлид, IT-менеджер и т.д.) — работа инженерная и трубует не только знать язык программирования и компьютер, но и ряд других дисциплин, которым учат в ВУЗах.

]]>
https://valera.ws/2008.06.28~edu-know-exp/feed/ 1
А надо ли оно, образование? https://valera.ws/2007.08.27~aducation/ https://valera.ws/2007.08.27~aducation/#comments Mon, 27 Aug 2007 19:30:00 +0000 http://valera.ws/2007.08.27~aducation/ Читать далее А надо ли оно, образование? ]]> Образование?Сегодня общался с парнем примерно 22 лет. Пока ремонтировал ему «домашнюю сеть», болтали на разные темы. В том числе обсудили работу. Выяснилось, что работает он на фирме, занимающейся выпуском «прибамбасов» пожарной безопасности, в том числе электронных систем. Он оператор станка по «штамповке» электронных плат.

Парень с детства увлекался электроникой на любительском уровне. Окончил школу, пошел на работу. Не знаю, кем он устроился, но через полгода его забрали в армию. Оттрубив там свой срок, вернулся в мир гражданский и снова начал искать работу. Но, по его словам, работа нашла его первой. Вот как раз оператором он и устроился. До него долго не могли найти человека, который справлялся бы с этим станком. Поскольку специалист он там ценный и работа требует определенной квалификации, зарплата у него высокая. Относительно конечно. Она почти в 2 раза выше средней заработной платы по Минску. И работа у него «любимая» — чего еще желать то?

А теперь, внимание! Думаю, все заметили, что после школы он нигде не учился. И учиться не собирается. Естественно, а зачем? Какой смысл в обучении, если все что надо он умеет уже сейчас? Знаю, что Вы скажете. Человек без образования – недалекая, ограниченная личность. Но могу смело заверить, что этот парень не такой. Он абсолютно нормальный, интеллигентный, с ним можно спокойно общаться, как с людьми, имеющими за спиной высшее образование.

Есть у меня еще один пример, опишу его в двух словах. Парень, увлекающийся программингом, поступил в университет. Отучился несколько лет. Появилась возможность уехать в германию на время – подработать. Уехал (кажется на пару лет). Вернулся с небольшим капиталом в кармане, открыл свое дело. Сейчас учредитель успешной известной на белорусском рынке IT-услуг фирмы. Зарабатывает много денег. Имеет только среднее школьное законченное образование.

Еще пример? Пожалуйста. Рассказан хорошим знакомым. Его друг учился в институте (на кого – не знаю), на 3-м, кажется курсе, бросил: пошел в аутсорсинговую программистскую контору. Получал в месяц в 2 раза больше средней зарплаты по Минску почти сходу. Сейчас, думаю, получает раза в 3 больше.

Итак, вопрос. А зачем оно надо, образование (высшее, среднеспециальное)? Выходит, что и люди имеющие только базовое замечательно устраиваются в жизни. Причем, я знаю много людей, которые и после институтов оставались «нулями» и не могли найти себе работу, либо работали только за счет блата. Вот именно по этому, требование нанимателя о высшем образовании у меня обычно вызывает улыбку :)

]]>
https://valera.ws/2007.08.27~aducation/feed/ 4