LINUX.ORG.RU

Очередной вопрос из серии «С чего начать?..»

 , ,


1

5

У меня серьёзные проблемы. Я любитель выдумывать для себя усложнения одно за другим. Когда-то давно я выбрал для изучения (не без помощи пользователей с ЛОРа) язык программирования Си. Книгу купил самую каноничную — K&R. Обучение шло вполне себе хорошо. Пока я не упёрся в тупик нерешённых упражнений из книги. Вначале они вроде такие простые, но чем дальше, тем труднее. Потом купил книгу по Java и внезапно переключился на неё (а зря). Через какое-то время весёлого погружения в мир объектно-ориентированных абстракций я прикрыл обе книги на долгий срок. В школе как раз в том году начали преподавать программирование на Pascal. После Си всё это казалось мне простым и забавным (и язык, и способ преподнесения материала учителем). Сегодня я хочу перейти на другой учебник по Си от братьев Дейтелов, причём на английском языке. Также хочу изучить всю школьную программу по математике и физике (может быть на английском), чтобы сдавать ЕГЭ, да и вообще для развития. Так вооот, ещё мне вдруг пришла в голову сегодня мысль отдаунгрейдиться с Си на Паскаль, чтобы потом почитать книгу Вирта по алгоритмам. Стоит ли? Или есть лучшие книги по алгоритмам (кроме Кнута)? Что со мной не так? Как вообще в данном случае поступить? Сконцентрироваться сейчас на математике и физике с английским? Или что-то ещё?

Паскаль очень хороший язык для обучения. Кто говорит обратное, скорее всего тролль и девственник!

v9lij ★★★★★ ()

Сразу хочу сказать, что язык Си мне нравится. И я бы хотел изучать его, а не Паскаль. А вопрос про Паскаль скорее стоит ребром. НАДО или НЕ НАДО?

notoedovshina ()
Ответ на: комментарий от v9lij

Поддерживаю, но со своей стороны посоветую бейсик.

Goury ★★★★★ ()
Ответ на: комментарий от geks

Пффф. Изучал паскаль лет десять назад, до сих пор помню.

staseg ★★★★★ ()

Вы все начали обсуждать языки. А я бы хотел больше услышать про остальную часть текста (про математику, физику, английский). Стоит ли изучать Паскаль только ради того, чтобы прочитать книгу Вирта про алгоритмы?

notoedovshina ()

Математика с физикой дадут фундаментальные знания и развернут мысли в верном техническом направлении. Языки-то выучить уже не проблема.

staseg ★★★★★ ()
Ответ на: комментарий от v9lij

А помимо «Алгоритмы и структуры данных» или «Алгоритмы + структуры данных = программы» Вирта есть другие хорошие книги по алгоритмам других авторов? Или не стоит первое время на алгоритмы задрачивать вообще?

notoedovshina ()

Сконцентрироваться сейчас на математике и физике с английским?

Если не хочешь в ПТУ, а потом в армию, то да.

anonymous ()
Ответ на: комментарий от notoedovshina

Кормена можешь читнуть, у него псевдокод вместо паскаля. А вообще бери что попадется — зная сишку прочтешь любую книжку.

vazgen05 ★★ ()

Брось бяку

На более-менее серьёзном уровне, по Software Engineering надо начинать с:

По Computer Science:

Далеко не факт, что потянешь, но хотя бы будешь понимать, к чему идти и чего для этого не хватает. Не хватит, скорее всего, основ матана, теорвера и дискретки.

Всякие там K&R, Страуструпы, Java, C# и прочее - хорошо читать только после курса уровня SICP и выше. С другой стороны, для курса уровня SICP или Introduction to Algorithms желательно уметь хотя бы на чём-то и хотя бы как-то кодить. Но не более того.

anonymous ()
Ответ на: Брось бяку от anonymous

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

notoedovshina ()
Ответ на: комментарий от notoedovshina

Главное, не заморачивайся сильно на конкретных языках. Software Engineering / CS это вообще не про языки. В профильном образовании роль языков достаточно второстепенна, но, конечно, убогое мертвое говно типа Паскаля желательно бы давно закопать. Как язык для обучения он просто никакой (сравнивая с Scheme, Python, да даже и Java). На нём очень тяжело продемонстрировать некоторые важные концепции.

Язык C примерно столь же плох для демонстрации концепций, он он живой промышленный язык. Нишевый.

Если пойдешь в ВУЗ на CS - в первую очередь придётся налечь на математику. К школьной математике имеющую весьма отдаленное отношение.

anonymous ()
Ответ на: комментарий от notoedovshina

Кстати, в моей практике был случай: к нам на работу устроился чувак примерно 30 лет, окончивший Физтех, к.т.н. Занимался океанографией, плавал на исследовательских судах.

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

Не то чтоб success story, но показывает, что ботануть язык то вообще не проблема.

anonymous ()
Ответ на: комментарий от anonymous

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

Наверняка он чего-то не рассказал из своего прошлого. Например, что кодит уже давно, just for fun например. Человеку, который большую часть жизни занимался «физикой», крайне трудно просто так начать кодить, тем более на плюсах. «Логика отточенная физикой» этому мало помогает - скорее приятное дополение сбоку которое может помочь более глубоко вникать в суть задачи.

mashina ★★★★★ ()

мож лучше эта, в гташеньку?

vvviperrr ★★★★★ ()

Я бы советовал хорошо изучить Паскаль авторства Никлауса Вирта. Вам возможно преподают Borland Pascal, это расширение оригинального паскаля, чего-то интересного там нет и расширения изучать не нужно, ограничься оригинальным подмножеством. Думаю в интернете книги найти можно.

Как язык освоишь — возьми начальную книжку по алгоритмам и структурам данных и хорошенько изучи её. Можно взять одноименную книжку того же Вирта. Списки, деревья, хеш-таблицы, графы, алгоритмы на графах. Попутно можешь порешать несложные задания олимпиадного толка.

Следующий этап — язык ассемблера. Тут всё просто, есть 8086 ассемблер, который и сейчас работает на любом PC. Разберись с ним от корки до корки и реши какую-нибудь нетривиальную задачу без использования libc. Книжку не посоветую, поищи сам. Можешь изучить более поздние языки, вроде x86 или даже x64, но там значительно больший объём информации, весь изучить не получится, придётся выделять разумное подмножество, в то время как 8086 достаточно маленький и его можно изучить весь. Тут самое сложное будет разобраться с утилитами. В своё время использовали macro assembler (masm) под DOS, думаю и сейчас его можно завести под эмуляторами.

После этого можно изучить С и основы юникса (sh, make, vi, gdb). Тут K&R зайдёт идеально.

Ну а после всего этого уже можно изучать что угодно, хорошая база есть. Из интересных кандидатов — Java, Python, Scheme, Haskell, Prolog. Помимо этого можно прочитать более полную книжку по алгоритмам и структурам данных. Классика — Кнут, но есть и другие варианты.

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

Математика, физика к программированию отношения не имеют. Изучать их, конечно, стоит для общего развития. Вот английский язык это дело другое, на уровне чтения техдокументации его изучить обязательно стоит. В первое время можно ограничиться русским, но всё равно английский понадобится. Я бы скорее посоветовал налегать на литературу и сочинение. Умение чётко и грамотно выразить свои мысли куда более универсально, нежели знание определения сходимости числового ряда.

Legioner ★★★★★ ()
Последнее исправление: Legioner (всего исправлений: 2)

У тебя нет проблем.

Посмотри на https://www.coursera.org/ и https://www.udacity.com/ и https://www.khanacademy.org/ и аналогичные. На английском языке бесконечное количество свободных ресурсов от лучших профессоров в мире.

Если хочешь лучшим образом сдать ЕГЭ, обратись не к англоязычным ресурсам, а к своей училке. Она знает, как сдавать ЕГЭ.

anto215 ★★ ()

У меня серьёзные проблемы.

Чувак, я так понял, ты учишься в школе? Если да, то ты даже не представляешь, насколько у тебя сейчас нет никаких проблем. Не забивай себе голову, как тебе поступать правильно, поступай так, как нравится. Единственное, что ты должен делать «потому что надо» - это заканчивать школу с хорошим результатом, а на все остальное до 2-3 курса института лучше вообще забить и читать и изучать то, к чему лежит душа в конкретный день твоей (ты даже не осознаешь сейчас насколько) быстро пролетающей молодости.

ovk48 ★★★ ()
Ответ на: комментарий от Legioner

Математика, физика к программированию отношения не имеют.

ПТУшник детектед.

О теории графов, теории конечных автоматов (регулярные выражения и множество других алгоритмов), реляционной алгебре (основа РСУБД), теории формальных языков (основа трансляторов), математических методах оценки сложности и верификации алгоритмов ты конечно же даже не слышал.

В модные направления типа Machine Learning без знания матана (как минимум анализ функций от нескольких переменных) и линейной алгебры даже суваться не стоит. Там сплошная математика. Градиентный спуск тот же, метод наименьших квадратов, нахождение собственных векторов линейных операторов... да дофига такого.

Только одна ремарка: к _школьной_ математике это никакого отношения не имеет.

anonymous ()
Ответ на: комментарий от mashina

Наверняка он чего-то не рассказал из своего прошлого. Например, что кодит уже давно, just for fun например. Человеку, который большую часть жизни занимался «физикой», крайне трудно просто так начать кодить, тем более на плюсах.

Кодил, естественно. Сейчас практически невозможно на серьёзном уровне заниматься наукой и не кодить вообще.

anonymous ()
Ответ на: комментарий от anonymous

Про школьную «математику» вообще надо сказать, что это не математика. Если только ты не в сильной матшколе, где преподают выпускники математических факультетов, а не дегенераты из педвузов.

Весь курс школьной алгебры, например, умещается в тоненькую книжку на 144 страницы http://www.mccme.ru/free-books/shen/gelfand-shen-algebra.pdf

В типичной средней школе это жуют года 3, доводя учеников до полного отупения.

anonymous ()
Ответ на: комментарий от Legioner

Программировать без хотя бы базовой теоретической подготовки можно только совершенно банальные вещи. Это и есть уровень ПТУ / школоло. Явно не то, к чему стоит стремиться.

Ты вот Кнута советовал. В курсе, что сам Кнут считает обязательной базой то, что изложено в другой его книге - «Конкретная математика» ( https://en.wikipedia.org/wiki/Concrete_Mathematics )? Кнута, кстати, советовать не надо. Его многотомник по алгоритмам - это справочник, а не учебник. Всё равно как учить русский язык по орфографическому словарю. Классические учебники уже были упомянуты, в первую очередь - Кормен, Лейзерсон, Ривест. Именно этот учебник по алгоритмам используется в профильных западных ВУЗах чаще всего (иногда - на graduate уровне).

anonymous ()
Ответ на: комментарий от anonymous

Весь курс школьной алгебры, например, умещается в тоненькую книжку на 144 страницы http://www.mccme.ru/free-books/shen/gelfand-shen-algebra.pdf

Говно неконструктивное.

И вообще это все не нужно. Россия - бюрократическая страна, гораздо проще пойти в чиновники, напилить себе небольшой капиталик и свалить на Запад.

anonymous ()
Ответ на: комментарий от anonymous

Программировать без хотя бы базовой теоретической подготовки можно только совершенно банальные вещи. Это и есть уровень ПТУ / школоло. Явно не то, к чему стоит стремиться.

Это Россия. Тут надо делать, что говорят, и подстраиваться под систему. Иначе станешь дворником-птушником с отбитыми в армии мозгами.

anonymous ()
Ответ на: комментарий от anonymous

Кодил, естественно. Сейчас практически невозможно на серьёзном уровне заниматься наукой и не кодить вообще.

Может быть я не совсем правильно выразился, я не имел в виду гогнокодить. Как-то кодить, конечно, в науке приходится, но этот уровень сильно далёк от «безпроблемных» собеседований даже в контексте понимания основ, никакой условно культовой книжкой эту проблему быстро не исправить. Можно посмотреть на уровень некоторых пользователей ЛОРа из этой среды чтобы понять как всё запущено.

Нужно было кодить в значительно более широких границах чем это нужно просто в науке чтобы в 30 получилось легко сменить род деятельности и начать её с ненулевого уровня.

mashina ★★★★★ ()
Ответ на: комментарий от notoedovshina

Посоветуйте по поводу Паскаля. Legioner советует начать с него и изучить книгу Вирта про алгоритмы. А как вы считаете?

Паскаль учить не стоит, будет впустую потраченное время. Может быть имеет смысл его трогать если дальше развиваться в этом направлении не собираешься.

mashina ★★★★★ ()

Если ты действительно разобрался в Си, то сможешь прочитать Вирта не зная паскаля. Но если хочешь изучить паскаль - изучи. Во вред не пойдет.

Aswed ★★★★★ ()

На что вы юность босоногую тратите... ужс... у меня уже в 1990 был zx spectrum, и я даж немного бейсика выучил (это всё, что я, собственно, выучил за все эти годы, пока у меня случайно сам не выучился python)... но вот так прогружаться - это уже негармоничное развитие личности. картина мира будет очень узкой, получится очередной «типичный лоровец». Вот посмотри на них - разве это жизнь? Разве это счастливые люди?

В общем, не советую. Учи Паскаль в школе, а в остальное время не суетись. :)

buratino ★★★★★ ()
Ответ на: комментарий от notoedovshina

Паскаль слишком низкоуровневый язык, неудобный для иллюстрации алгоритмов и концепций. В первую очередь, там нет удобных встроенных в язык структур данных. Ручное управление динамической памятью. Нет first-class functions, замыканий, лямбд. Книгу Вирта, насколько мне известно, для обучения давно уже не используют (на Западе). Там Кормен. А в Кормене - довольно высокоуровневый псевдокод. Учить Паскаль ради одной непопулярной книжки по алгоритмам глупо.

С другой стороны, а чего там учить-то? После С учить особо нечего, пара дней и уже можно легко читать код на Паскале из учебников. А писать на нём не обязательно, можно переводить на другой язык.

Паскаль как язык для обучения давно мёртв. В приличных местах его и не использовали никогда. В MIT в 80-е была Scheme, которая на голову выше Паскаля, да и сейчас более чем конкурентоспособна. В России продолжают сеансы некрофилии в некоторых учебных заведениях, это да.

Вообще сейчас мейнстрим для новичков - Python. По нему есть куча курсов на edx, coursera и других подобных MOOC проектах. Есть огромное живое сообщество. Полно учебников любого уровня. Питон, правда, имеет динамическую типизацию. Это не то чтоб плохо, но для кругозора нужно поработать и со статической. Пусть даже с Java или С/С++.

В индустрии Паскаль практически не используют тоже. На уровне 0.01% или типа того.

anonymous ()

Сегодня я хочу перейти на другой учебник по Си от братьев Дейтелов, причём на английском языке.

А зря. Книга написана очень скучным и сухим языком. Я бы порекомендовал взять Head First C, она гораздо лучше как в техническом аспекте, так и в подаче материала.

Deleted ()
Ответ на: комментарий от anonymous

Cмысла спорить с бородатыми борщевиками нет, это их выбор. Они всю жизнь будут видимо кодить в подвальных конторках и писать статьи на хабре типа «а дельфи еще огого!» и книги на паскале «для начинающих». Не потому что начинать с чего-то другого нельзя, просто они остановились на этом и не осилили ничего другого.

Deleted ()
Ответ на: комментарий от anonymous

В России продолжают сеансы некрофилии почти во всех учебных заведениях, это да.

fixed.

ovk48 ★★★ ()
Ответ на: комментарий от notoedovshina

А вопрос про Паскаль скорее стоит ребром. НАДО или НЕ НАДО?

он удобен как 1й-2й язык, после бейсика. если ты уже прошел ту стадию — нет смысла его учить, т.к. по сути он нигде уже не применяется.

waker ★★★★★ ()

Простыню не читал. Все равно что учить.
А если бейсик знаешь, то смысла в паскале нет. Иди сразу на С++.

FIL ★★★★ ()
Последнее исправление: FIL (всего исправлений: 1)

сходи подрочи, потом крем от прыщей и на турничок

глядишь попустит

anonymous ()

Продолжай учить всё, что дают. Упражнения, что не осилил, запости здесь на форуме, небось помочь то сможем. K&R вполне достаточен для сишки, хоть и не совсем всё рассматривается.

Если хочешь углубиться в математическую базу, то в универе даётся примерно такой уровень математического анализа (первый курс, кафедра КТ, ИТМО): http://www.math.spbu.ru/analysis/news_r.html (учебники Виноградова смотри), осилить, имея базу 7-8 класса, вполне сможешь. Ничего сложного, просто даётся материал непривычным для школы образом.

По поводу алгоритмов: на уровне школьных олимпиад более часто встречался Кормен (http://www.ozon.ru/context/detail/id/22421471/), нежели Кнут, ибо попроще. Прокачивай себя на том же topcoder'е, hackerrank, codeforces (последний наиболее популярный в СНГ, субъективно).

Пиши что-нибудь для себя, чтобы не терять мотивацию. Хотя, сам разберёшься.

Для той же математики и физики - активней участвуй в региональных олимпиадах. И самому мотивация будет, и в универ проще поступить, ибо ЕГЭ может в принципе не потребоваться (сам писал ЕГЭ без особых нервов, ибо уже до ЕГЭ поступить, благодаря олимпиадам).

Deleted ()

О том, что переключился на Java в принципе жалеть не надо. Очень даже удобный язык программирования. Можешь те же плюсы посмотреть, питон, хаскель, у тебя времени много, собери некоторый материал и изучай последовательно. От порядка изучения ничего не потеряешь. Разве что на сишке те же олимпиады писать - извращенство, ибо много что пишешь руками, когда можно воспользоваться стандартной библиотекой джавы или плюсов.

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.