Что должен знать выпускник программер ДонНТУ

(1/13) > >>

Романыч:
Когда то, я задал такой вопрос одному программеру-гуру, о том, что хорошо бы знать разработчику программ (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:
Причитавши данное сообщение я понял одно - что еще ни одного специалиста в области компьютерных наук ДонНТУ не выпустил. И когда же появяться эти будующие гении-вундеркинды - не известно.
АУ!! Если хоть кто-то может делать все выше описанное на уровне специалиста отзовитесь. Дайте хоть на Вас одним глазком посмотреть!

Навигация

[0] Главная страница сообщений

[#] Следующая страница