Получи случайную криптовалюту за регистрацию!

Подготовка к изучению cs Выбор языка Все сводится к 2 вариант | СТАТЬ ПРОГРАММИСТОМ

Подготовка к изучению cs

Выбор языка

Все сводится к 2 вариантам: более классический - си, более простой - питон. Вообще можно выбрать и любой другой, но так уж сложилось, что большинство уч.материалов крутятся вокруг этих двух.

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

Пост про уч.материалы для изучения основ питона - https://t.me/tobeprog/29
Не буду расписывать каждый, уже кучу всего про них написал, как и про подбор правильных уч.материалов, все есть в посте. 

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

Надо ли писать о книгах по Си, там и так все ясно, в любой подборке будет фигурировать тот же Прата, мимо основных пройти невозможно, вместо этого расскажу о куда более интересном и малоизвестном материале.

https://stepik.org/course/73618 - один из лучших курсов по Си, найденный мной весьма странным образом. Дело в том, что автор курса написал книгу, с тем самым правильным в моем понимании подходом(сишечка через ассемблер), самой книги нет на русском, но гугл неожиданно привел меня на степик, где курс можно сказать спрятался(не привязан к какой-либо организации, на обложке милейший котик, и всего 2к учащихся, поэтому на самом сайте его приметить затруднительно). К сожалению, сам курс без ассемблера, но он все же очень хорош.

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

А оно точно вам нужно?
Этот вопрос стоит задавать перед изучением любого топика/темы cs. И уж точно, перед комплексным изучением всего предмета. Да, вроде как лишних знаний не бывает, но вот что бывает, так это потерянное зря время(в случае с cs, очень и очень большое). 

Почему я вообще поднял этот вопрос? Если кратко, ища разные материалы на тему cs, очень уж часто я видел крайне спорные утверждения из разряда: “каждый программист должен знать”. И если подобное утверждение выходит далеко за пределы основ, то я советую очень и очень осторожно к нему относиться.

Особенно, если изначально не стоит задачи разобраться в той или иной области, а ее изучения связано с получением, например, будущей профессии. Сделайте ресерч, посмотрите действительно ли это необходимое требование(предположу, что в большинстве случаев - нет). 

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

Даже без github-а, подборок и прочего, туториалы с ними легко гуглятся. Например, запрос “Lisp interpreter in python” и первый же результат:
http://norvig.com/lispy.html (How to Write a (Lisp) Interpreter (in Python)) статья Питера Норвига, где буквально за 90 строк он пишет и объясняет очень простой интерпретатор Lisp
https://habr.com/ru/post/115206/ - перевод этой статьи, также будет на первой странице выдачи

Это отличный вариант для старта. А что потом? Ну например, есть продолжении этой статьи с улучшенной версией интерпретатора:
https://norvig.com/lispy2.html (An ((Even Better) Lisp) Interpreter (in Python)) все также первая страница выдачи, там же будут и другие варианты.

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

Количество тем
Чтобы этот пост не стал слишком уж большим, я взял самые популярные темы, они входят, если так можно выразиться - классические топики cs. Получилось 5(Алгоритмы, Математика, Архитектура, Операционные системы, Языки программирования и компиляторы).