Ответы пользователя по тегу Программирование
  • Какую хорошую книгу по Си для новичка почитать?

    @LeonidShifrin
    Разработчик, Wolfram Research Inc. PhD, Physics
    Когда я в свое время учил С, то перебрал массу книг. На мой взгляд, две самые лучшие книги по С для начинающего, это:

    C Programming - a modern approach (K.N.King)
    Pointers on C (Kenneth Reek)

    Вторая потруднее, но после первой читается легко. Если книга Кинга покажется тяжелой, есть также неплохая полегче:

    Teach Yourself C in 21 Days (Bradley Jones, Peter Aitken)

    В ней есть несколько ошибок, но в целом очень неплохая книжка, ее можно параллельно с Кингом читать, и она читается совсем легко. Для нее, к тому же, есть перевод.

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

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

    Да, и бегите от книг Шилдта по С как от чумы (если интересно, почитайте вот это или то, что пишут о его книгах профессионалы на comp.lang.c или accu reviews).
    Ответ написан
    Комментировать
  • Как лучше получить базовые знания по программированию?

    @LeonidShifrin
    Разработчик, Wolfram Research Inc. PhD, Physics
    Изучите один из функциональных языков. Проще всего начать со Scheme. Это поставит Вам мышление правильно, и даст общее понимание принципов программирования. Вам уже советовали SICP, я еще от себя добавлю HTDP (How to design programs) - как раз рассчитана на начинающих. Порешайте на нем алгоритмические задачи. Хороший источник - Project Euler. По более общим задачам посмотрите Rosetta Code. Не ставьте задачу сразу начать применять это к Вашим приложениям, просто спокойно развивайтесь.
    На первом этапе постарайтесь по минимуму использовать готовые библиотеки - разве что для проверки.

    Постепенно переходите к более сложным задачам. Не зацикливайтесь на чисто алгоритмических задачах - они хорошо ставят мышление, но в реальной жизни лишь часть кода полностью алгоритмизуется, и дизайн кода занимает большее место чем именно алгоритмы (если не брать более специализированные области вроде ML). Если не брать математические задачи, то хорошие задачи возникают в областях работы с текстами, преобразования данных. Скажем, упрощенный вариант HTML или XML парсера, или задачи по анализу текстов, или например перевод данных из одного формата в другой. Напишите пару простых интерпретаторов. Реализуйте парсер для какого-нибудь языка (возможно, его упрощенного варианта). Не стесняйтесь находить ресурсы с тем, что близко в Вашим задачам, и читать чужой код (это необходимо!) - но и не работайте по принципу copy - paste.

    Неплохой задачей будет например реализовать парсер и интерпретатор для какого-нибудь trading - языка, вроде metastock, с парой десятков основных финансовых индикаторов. И к нему в довесок - собственный упрощенный парсер скажем CSV формата - так что Вы сможете загружать данные по стокам и прогонять торговые стратегии целиком на собственном коде. Ну и например, генератор HTML - отчета с графиком и точками входа и выхода для данной стратегии, плюс отчетом о доходности. Можете потом поднять простое web-приложение, которое будет гонять торговые стратегии на исторических данных, хранящихся скажем как CSV файлы - и все это на Scheme. Потом можете перейти на использование реальной БД. Это уже будет в совокупности неплохой проект. Чем меньше будете использовать готовых библиотек - тем лучше, цель здесь - учеба, а не максимальная эффективность.

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

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

    И еще один момент: если у Вас хромает Английский, подтяните его. Специально этим не нужно заниматься, просто читайте литературу на Английском - всегда. Это сделает Вас частью большего сообщества, даст доступ к гораздо большей базе ресурсов. На более продвинутом уровне, это важно еще и потому, что Вам будет легче писать код, когда Вы начнете думать на Английском - он ближе к формальным языкам.
    Ответ написан
    Комментировать
  • Какую среду выбрать Matlab vs Mathematica vs Maple vs python?

    @LeonidShifrin
    Разработчик, Wolfram Research Inc. PhD, Physics
    Я бы посоветовал походить по профессиональным форумам и посмотреть, как решаются различные задачи разными средствами. Посмотрите, что Вам ближе.

    С моей сугубо пристрастной точки зрения (я работаю разработчиком в WRI), Mathematica даст фору большинству других средств, для широкого класса математических задач. Я это говорю и как программист и как человек, занимавшийся в прошлом наукой (Phd, теор. физика, квантовая теория поля).

    Заходите к нам на форум:

    mathematica.stackexchange.com

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

    И не слушайте тех, кто говорит про "упоротый язык" - это поверхностная и невежественная точка зрения. Вот что сказал по поводу Mathematica создатель языка Clojure (один из самых современных и элегантных языков программирования ) Rich Hickey: "Every developer should buy a copy of Mathematica, because it will expand their mind".
    Ответ написан
    1 комментарий