Чему не учат в универе
Постоянно слышу, что в универах плохо учат программированию. Якобы слишком много теории, которая никогда не пригодится, а вот практики маловато. Якобы зачем нам Си, если все уже давно на Питонах да на Рубях сидят. Зачем нам SQL, если реляционные базы — это уже не модно.
Лично я так не считаю. Ну серьезно, если нам эту теорию насильно не впихнуть (хотя бы базу), мы ведь ее никогда и не изучим.
А вот о чем и правда в универах забывают, так это о том, что программирование уже давно не про алгоритмы. В большинстве задач уже существует готовое (или похожее) решение. Поэтому вместо строительства собственных велосипедов желательно найти какую-нибудь библиотеку, прикрутить ее, разобраться и поправить под себя. Тут важно гуглить и читать документацию. Вот и начинаются проблемы. Оказывается, студентов не просто этому не учат, а даже не говорят, насколько это важно. Наоборот, считается, что скопировать из интернета решение — это что-то плохое.
И это действительно плохо, когда необходимо разобраться в простейших алгоритмах. Ну это 1-2 курс, ладно. Казалось бы, на старших курсах можно уже давать большие и сложные проекты, которые нереально осилить в одиночку… но нет! Индивидуальная работа ценится превыше всего, даже диплом обычно каждый делает сам себе. А зря! Ведь работа в команде — наиважнейший навык, без которого не обойтись на любой работе.
Я считаю, что очень важно:
- Писать понятный код самому и уметь читать чужой код (даже если он нифига не понятный).
- Доходчиво излагать свою точку зрения, уметь адекватно общаться, грамотно пользоваться русским (или английским) языком. А также слушать, уметь поставить себя на место другого человека.
- Уметь пользоваться системами контроля версий.
- Соблюдать стандарты и общепринятый стиль.
- Быть способным оценить время, необходимое на некоторую задачу, соблюдать дедлайны (ну хотя бы примерно).
- Писать понятную и полную документацию.
- И другие, простите за выражение, гуманитарные навыки.
И наконец, самое важное — отладка. Практически невозможно написать что-то более-менее сложное с первого раза без ошибок. Но если программист умеет быстро и качественно их отловить, то это действительно показывает его высокий уровень. Тем не менее, этому очень мало уделяется внимания. Нередки случаи, когда студенты даже не читают сообщения об ошибках (!), не говоря уж о том, чтобы посмотреть состояние стека или воспользоваться средствами отладки… Пишешь функцию — всё равно ведь будешь тестировать на каких-то данных — ну и накатай наборчик юнит-тестов, чтобы не прогонять каждый раз вручную. Несколько таких простых приемов поможет сократить уйму времени в дальнейшем. Но мало кто следует этим правилам, вот и пропускается куча ошибок в продакшн, вот и приходится потом долго и мучительно их исправлять, срывая сроки…
Так что я бы ввел побольше часов русского и английского языков (тока сразу не расстреливайте), на психологии преподавал бы что-то типа делового общения, а на старших курсах заставлял бы студентов делать большие проекты совместно.
А теория пусть остается. Ведь задача универа не только впихнуть знания, а еще и научить мыслить логически и аналитически. Как ни странно, но всякие доказательства теорем этот навык неплохо так прокачивают.