- PVSM.RU - https://www.pvsm.ru -
Привет! Представляю вашему вниманию перевод статьи "Advice for programming students [1]".
Есть много вещей, которые я хотел бы знать, когда я начал свое путешествие в качестве студента-программиста. С тех пор прошло почти 10 лет, и, к сожалению, я не могу поделиться своим опытом и знаниями с моим прошлым «я», только с моими младшими коллегами. Этот пост состоит из некоторых полезных советов, которые я хотел бы услышать, когда мне было 18 лет.
Вам, конечно, не нужно быть знакомым с формальной логикой или категориями [2], если вы хотите просто узнать как создать что-то практическое (скажем, интерфейс) и делать только это. Существует два основных пути, которые отличаются усилиями, продолжительностью и исходом.
Я решительно выступаю за второй путь, потому что он более универсален, интересен и приносит больше в долгосрочной перспективе. Технологии постоянно меняется, поэтому вы захотите быстро переключаться на новые технологии.
Изучайте математику, потому что математика полезна. Я не могу это не подчеркнуть. Когда вы начнете, вы можете подумать, что вам не нужна линейная алгебра, потому что вы не знаете о приложениях. Однако для любого нетривиального машинного обучения вам это понадобится. Вам нужна статистика и вероятность. Вам понадобится логика, комбинаторика, теория множеств, все виды дискретной математики, теория графов, теория вычислимости, формальные грамматики, лямбда-исчисление, формальная семантика, топология, теории типов, теория чисел, группы, кольца, поля, категории.
Новые технологии постоянно появляются. Многие из них основаны на существующих математических моделях. Если вы хорошо знаете базовую математику, вы получаете очень приятные преимущества:
Например, у меня сложилось впечатление, что мало кто понимает почему вы не всегда должны использовать метод наименьших квадратов, чтобы оценить насколько хорошо ваша линейная регрессия соответствует данным. Это потребуется когда ошибки распределяются нормально с соответствующим средним значением. Если это не так, вы будете слепо применять неадекватное решение, даже не думая, что часть модели нуждается в настройке.
Изучите математику, чтобы научиться математическому . Написание доказательств делает вас строгим к своим действиям. Вы будете всегда думать обо всех возможных путях исполнения, которые может выполнять ваша программа, чтобы не привнести ошибки и проблемы безопасности. Ясность
Выберите свой первый язык. Он должен быть хорошо спроектированным, то есть иметь:
Я советую выбрать один из следующих языков:
Не бойтесь быть обманутыми кажущейся непопулярностью данных языков, в мире программирование популярность не означает качество.
Не начинайте с Питона, очень прошу вас! Он плохо спроектирован, непоследователен и не научит вас строгому
Если вы привыкнете к некачественным языкам и некачественным инструментам, и некачественному программному обеспечению, и к некачественным решениям, вы неизбежно повторите их в своей собственной работе. Будьте критичны, задавайте вопросы, критикуйте все, ищите несоответствия и недостатки.
Например, представьте, что вы изучаете новый язык Go. Погуглите «Go language sucks» и почитайте почему люди критикуют его. Некоторые комментарии будут незначительными, но другие из них действительно будут иметь смысл. Вероятно, вы получите новые знания от чтения критических замечаний, оценивая их, чтобы потом определить имеют ли они значение, или это просто пустые слова.
Я преподаю программирование (C и ассемблер) с 2009 студентам университета ИТМО в Санкт-Петербурге. У многих людей есть проблемы с программированием и никогда им не удается научиться этому из-за того, что они не создают код. Когда они получают задание, они пытаются имитировать существующее решение, возможно, взяв некоторые фрагменты из Stack Overflow, настроив их по своему вкусу. Хорошо, получили решение, что еще нужно?
Вы должны научиться писать код с нуля. Типы навыков, необходимых для этого, настолько отличаются от навыков, полученных вмешательством в существующий код!
Программировать значит делать сознательный выбор. Вы находитесь в состоянии А (у вас есть доступ к ряду языковых функций / библиотек, и вы знаете как их комбинировать); вы хотите получить состояние В (языковые конструкции объединены для решения задачи). Как вы построите маршрут от А до В? Теперь это реальное программирование, решение проблем.
Когда вы начинаете писать программы с нуля становится немного тяжело, но абсолютно необходимо научиться строить вещи с нуля. Чтобы улучшить навыки решения задач, важно изучить алгоритмы и структуры данных. Возьмите хорошую книгу и решайте олимпиадные задачи онлайн. Я рекомендую «Алгоритмы» Дасгупты для начала, затем классическую книгу Кормена. Все это откроет целый новый мир для вас, я обещаю.
Дополнительной частью процесса создания программного обеспечения является разработка архитектуры программного обеспечения; невозможно научиться правильно структурировать свои программы, не создавая их от 0 до 100.
Программируйте каждый день, делайте сторонние проекты все время. Это очень простой (и в основном точный) способ для меня как учителя понять, что мой ученик с большой вероятностью добьется успеха. Один вопрос: что вы программируете в свободное время?
У ваших учителей просто не хватит времени, чтобы они смогли рассказать обо всем. В конце концов, после того, как вы выходите из университета, вы должны продолжать учиться самостоятельно, пока не уйдете на пенсию. Если вы увлечены тем, что вы делаете, вы будете изучать различные типы программного обеспечения для удовольствия, и это даст вам гораздо больше опыта и навыков, чем ваши менее мотивированные сверстники.
В идеале вы должны пробовать все: написать свой собственный компилятор, возможно, игрушечную ОС, http-сервер, движок для баз данных, игры, рейкастинг, создать какие-нибудь нейронные сети, написать простое мобильное приложение, написать программу для встроенных ..., можете сами продолжить. Поместите все свои проекты в GitHub и гордитесь ими: вам будующий работодатель может взглянуть на него. Используйте это портфолио в своих целях.
Общеизвестно, что рекрутинг хорошего программиста чрезвычайно сложен. У многих программистов, претендующих на работу, есть проблемы с написанием тривиальных вещей, таких как FizzBuzz. Если у вас есть существующие проекты, размещенные на GitHub, работодатель будет более уверен, что вы ему подходите.
Испытывайте себя разными инструментами и языками. Если кто-то говорит вам, что все языки похожи, это либо упрощение, либо отсутствие опыта. Позвольте мне объяснить немного.
Модель вычислений это множество, состоящее из базовых операций и способов склеить их вместе в порядок, необходимый для создания комплексных алгоритмов. Некоторые языки имеют очень похожие модели вычислений, а некоторые сильно различаются.
Программирование намного больше, чем общеизвестные C / Python / Java / C++ / C# / Go / Javascript, построенные на одинаковых принципах: императивный, структурный, немного с ООП и синтаксическим сахаром для имитации других стилей программирования. Мир программирования ОГРОМЕН. Как насчет:
Каждую новую модель вычислений трудно понять, потому что это новый способ
Мне очень повезло познакомиться с некоторыми удивительными людьми. Мои помощники помогли мне совершенствовать свои навыки, учиться чему-то новому, видеть мир с другой точки зрения. Изоляция себя не принесет вам пользы в долгосрочной перспективе: вам нужно, чтобы другие люди обсуждали, чтобы понять, что они делают, что они думают.
Если ваш друг прочитал интересную статью и рассказал вам об этом, вы просто сэкономили много своего времени, потому что он дал вам обработанные, кристаллизованные знания.
Придерживайтесь страстных, умных людей и старайтесь учиться у них. Вы будете удивлены, сколько вы сможете узнать во время обеда со своими товарищами, которые хотят поделиться деталями своей работы или исследований. Такое разнообразие идей является одной из основных причин, по которым корпорации, такие как Google, дают вам бесплатное питание.
Спросите людей, которые лучше разбираются в code review и читают свой код. Изучая чью-то работу, можно многому научиться. Code reviews помогут вам узнать о том, как написать код еще лучше. Это, возможно, один из самых эффективных способов стать лучшим программистом очень, очень быстро.
Это так важно, что для этого понадобиться отдельная статья. Тестирование является неотъемлемой частью создания программного обеспечения, и даже такие парни, как я, которые работают над формально проверенным программным обеспечением (что означает, что оно должно быть математически строго формализуемо), пишут тесты, хотя можно подумать, что гарантии, данные доказательствами, гораздо сильнее.
Я надеюсь, что это может помочь кому-то получить более полную картину, быстрее научиться и стать лучшим программистом; если у вас возникнут вопросы, я буду рад помочь. Удачи!
Автор: LampLampov
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/294818
Ссылки в тексте:
[1] Advice for programming students: http://rubber-duck-typing.com/articles/2018/03/17/advice-for-programming-students/
[2] категориями: https://github.com/George66/Textbook
[3] мышлению: http://www.braintools.ru
[4] Источник: https://habr.com/post/425363/?utm_campaign=425363
Нажмите здесь для печати.