Что должен знать выпускник программер ДонНТУ
Романыч:
Когда то, я задал такой вопрос одному программеру-гуру, о том, что хорошо бы знать разработчику программ (software engineer) в наше нелегкое время.
Месяца два назад, подготавливая очередной ВТэшный диплом на заказ, один из "специалистов" задал вопрос, что ему нужно выучить, чтобы устроиться работать.
И тут родилась идея, составить список того, что нужно знать выпускнику-программеру.
Математика
- Алгоритмы, их построение и анализ сложности;
- Стеки, списки, деревья, хеши, массивы и прочие кольца
- Численные методы (выглядит узкоспециально, но встречается);
- Теория Вероятностей (выглядит узкоспециально, но встречается).
Проектирование
- Паттерны (по банде четырёх);
- Применение их (для начала можно почитать Александреску);
- UML (без фанатизма);
- ООП (с фанатизмом);
- Знание зачем нужны основные сетевые протоколы и как устроен TCP/IP;
- Иметь представление о функц. языках;
- Понимать многопоточные проги и средства синхронизации);
- Иметь представление о erlang-стилевом параллелизме;
Информатика
- Устройство компов - проц, память, железо (на пальцах, уметь объяснить почему если памяти мало, то 100 программ будут медленно тормозить и в чем будет тормоз);
- Потроха проца - регистры и конвееры (от специализации);
- Иметь представление о стеке, фрэймах, исключениях (от специализации);
- Механику выполнения программ на винде/линуксе - загрузка в память, развязка общих символов и выполнение. Уметь сказать, какие регистры за что отвечают и как меняются в процессе (от специализации).
Практическая информатика (там где конкретное - под конкретный язык/платформу, но иметь общие представления)
- Привычка читать документацию;
- Привычка не верить документации на 100% и вытаскивать неясные/неизвестные моменты из сырцов/бинарников;
- Мысленное моделирование - навык прикидки "как программа считает";
- Знание основных затыков (bottlenecks) - и умение их разруливать;
- Работа с многопоточными программами, отловы дедлоков и "races";
- Навыки отладки софта;
- Навыки профилирования софта;
- Умение писать юнит-тесты;
- Умение профилировать софт;
- Умение юзать SVN и CVS;
- Умение писать daily reports;
- Умение юзать багтрекер;
- Умение оценивать время для написания и прогнозировать/определять unknown factors и их влияние;
- Умение (!) ;) держать ритм и не "расслабляться"/"сжигать себя".
БД
- Основы SQL (в общем случае без специфики конкретных DBMS);
- Основы работы DBMS (на уровне представления что такое транзакция и зачем нужны индексы).
Кооперация
- Привычка комментировать код и писать документацию;
- Умение равно как аргументированно отстаивать свои предложения, так и "наступать на горло собственной песне" - т.е. придерживаться принятых командой решений и стандартов и отказываться от тех решений, которые ты предлагал, а они, гады все, не оценили и не приняли :) Без фанатизма, конечно;
- Умение доходчиво объяснять и учить всему перечисленному в списке.
Не вошедшее в другие разделы
- Маркетинг. Как продать то, что получилось (без фанатизма);
- Психология. Сотрудники, подчиненные, заказчики (без фанатизма);
- Динамическое чтение (быстро читать маны, не вникая в суть но запоминая где что лежит);
- Экономика. Оценка выгодности (без фанатизма);
- Эргономика, основы дизайна (знать где удобней поставить кнопку и как объяснить это дизайнеру. Оценить работу дизайнера);
- Английский (вообще по дефолту);
- Ассемблер, с++ (Обязательно!) и .NET/C# (Можно поверхносно).
- Умение встраивать в системы средства health-мониторинга;
- Умение "ремонтировать двигатель на ходу" - smooth-upgrades with minimal downtime;
Дополнения и критика приветствуются (Но только если по существу)
v 1.1 (Используя замечания Sterh и Sochin)
Sochin:
ИМХО:
Цитата: Романыч от Июнь 24, 2007, 05:01:56
- Численные методы (выглядит узкоспециально, но встречается);
Точно, узкоспециально.
Цитировать
- Теор.Вер.
Практически сомнительно.
Цитировать
- Паттерны (по банде четырёх);
+1 ))
Цитировать
- Применение их (для начала можно почитать Александреску);
Если «для начала осилить Александреску», то дальше можно и не читать, хватит одного Александреску. Ну, это если действительно его осилить. )));
Цитировать
- UML (без фанатизма);
+1.
Цитировать
- ООП (без фанатизма);
С фанатизмом! )))
Цитировать
- Знание зачем нужны основные сетевые протоколы и как устроен TCP/IP;
Для программера в общем случае - нафиг надо? ))
Цитировать
- Иметь представление о функц. языках;
Эмм...
Цитировать
- Понимать многопоточные проги и средства синхронизации);
Хотелось бы..
Цитировать
- Иметь представление о erlang-стилевом параллелизме;
Эмм...
Цитировать
- Устройство компов - проц, память, железо (на пальцах, уметь объяснить почему если памяти мало, то 100 программ будут медленно тормозить и в чем будет тормоз);
Мало-мальски грамотный ИТ-шник это рассказать обязан.
Цитировать
- Потроха проца - регистры и конвееры;
Зависит от специализации.
Цитировать
- Иметь представление о стеке, фрэймах, исключениях;
Зависит от специализации.
Цитировать
- Механику выполнения программ на винде/линуксе - загрузка в память, развязка общих символов и выполнение. Уметь сказать, какие регистры за что отвечают и как меняются в процессе.
Зависит от специализации.
Цитировать
- Привычка читать документацию;
Хотелось бы...
Цитировать
- Привычка не верить документации на 100% и вытаскивать неясные/неизвестные моменты из сырцов/бинарников;
По необходимости...
Цитировать
- Мысленное моделирование - навык прикидки "как программа считает";
Обязательный элемент. Программа не пишется в отладчике, она пишется в голове. )))
Цитировать
- Знание основных затыков (bottlenecks) - и умение их разруливать;
Мэйби )
Цитировать
- Работа с многопоточными программами, отловы дедлоков и "races";
Повтор. И снова хотелось бы...
Цитировать
- Навыки отладки софта;
По-любому )
Цитировать
- Навыки профилирования софта;
Хм.
Цитировать
- Умение писать юнит-тесты;
Хотелось бы..
Цитировать
- Умение профилировать софт;
И снова повтор. ))
Цитировать
- Умение юзать SVN и CVS;
И опять хотелось бы...
Цитировать
- Умение писать daily reports;
Когда это должно быть сделано? -Сейчас? - Ха-ха-ха! )))
Цитировать
- Умение юзать багтрекер;
Хотелось бы...
Цитировать
- Умение оценивать время для написания и прогнозировать/определять unknown factors и их влияние;
Эхх. Хотелось бы...
Цитировать
- Привычка комментировать код и писать документацию;
Ага.
Цитировать
- Умение равно как аргументированно отстаивать свои предложения, так и "наступать на горло собственной песне" - т.е. придерживаться принятых командой решений и стандартов и отказываться от тех решений, которые ты предлагал, а они, гады все, не оценили и не приняли :)
// этот кусок небезопасен, но раз этому п$$$$$$у надо пусть будет(http://bash.org.ru)
Цитировать
- Маркетинг (как продать то, что получилось);
нафиг надо?!
Цитировать
- Психология (сотрудники, подчиненные, заказчики);
Выборочно.
Цитировать
- Динамическое чтение (быстро читать маны, не вникая в суть но запоминая где что лежит);
Хм..
Цитировать
- Экономика (оценка выгодности);
Нафиг надо?!
Цитировать
- Эргономика, основы дизайна (знать где удобней поставить кнопку и как объяснить это дизайнеру. Оценить работу дизайнера);
Нафиг надо?!
Цитировать
- Английский (вообще по дефолту);
оф кос! ))
Цитировать
- Ассемблер, с++ и .NET/C# (Можно поверхносно).
Аццкая смесь - асм + управляемый код! ))))
Цитировать
- Умение встраивать в системы средства health-мониторинга;
Хм..
Цитировать
- Умение "ремонтировать двигатель на ходу" - smooth-upgrades with minimal downtime;
Хм..
Storm:
ИМХО, следует специализировать программера - вы сейчас описали прикладника.
Системный программист, который занимается сетевыми протоколами, должен знать несколько другой набор, вернее сказать, в его наборе знаний должен быть перекос в другую сторону, чем у прикладника.
Программист, который программирует МПС/ПЛК - ему паттерны как зайцу пятая нога - но численные методы, программирование на асме и профилирование программ - каждый день и до посинения + знания в области электроники на продвинутом и углубленном уровнях.
Программист, который разрабатывает компиляторы - это совсем другой профиль, чем вы нарисовали. Уровень его теоретической подготовки в области анализа строковых данных должен быть выше, чем у прикладника.
Вы нарисовали программистов которых счас готовят больше всего, вернее счас больше штампуют кодеров с таким набором - программистов как был один из десяти кодеров, хороших программистов - один на сто кодеров, так и есть.
nemaga:
Цитировать
- ООП (с фанатизмом);
Позволю себе с этим не согласится. ООП применяют в основном в проектах игр, пользовательских программ и т.п. Тоесть впринципе широкомаштабно, но(!) не все этим занимаются :) Очень большой круг людей работают на пару уровней ниже, тоесть в ядре, 0-ring. Там ООП никаким боком не катит. Тоже самое могу сказать о никсах. Там практически все все построенно на си, си++ со своими класами (или какой-нить другой язык) встречается очень-очень редко и.
Polyakov:
Причитавши данное сообщение я понял одно - что еще ни одного специалиста в области компьютерных наук ДонНТУ не выпустил. И когда же появяться эти будующие гении-вундеркинды - не известно.
АУ!! Если хоть кто-то может делать все выше описанное на уровне специалиста отзовитесь. Дайте хоть на Вас одним глазком посмотреть!
Навигация