Jump to content
  • Announcements

    • st1nc

      Жалобы на плохой пинг

      Жалобы принимаются по шаблону ниже в этой теме.   Город
      Провайдер
      Трассировка до серверов simhost.org
Sign in to follow this  
redbaron

Учимся программировать

Recommended Posts

Наверное многие хотели бы научиться программировать, но не знают с чего начать. В магазинах полно книг, но учат они, к сожалению, дрочить конкретный язык (С, PHP, Java и т.д.), а не самому умению программировать. Что значит быть программистом? Это значит суметь формализовать задачу, разбить её на шаги, реализовать каждый шаг на конкретном языке. Только последнее требует знания языка, а между тем по важности и сложности последний шаг стоит на последнем же месте 8)

 

К чему все это? К тому, что ~пару месяцев назад попалась мне на глаза одна замечательная книжка Структура и интерпретация компьютерных программ. Первая её редакция написана монстрами из MIT (амер. университет откуда берут начало все те технологии, которыми вы пользуетесь сидя сейчас за компьютером) в 77 году. Потом было несколько редакций и вот перевод самой последней я и хочу вам представить. Книга представляет из себя переработку курса лекций для перво- и второ- курсников в MIT. Не надо морщить нос :v: Лекции у них и лекции в наших говно-вузах две большие разницы. Читается очень приятно и доступно. Одно введение чего стоит! Не в пример моему ;)

 

Книга учит программировать, всем навыкам которые при этом понадобиться, она не учит конкретному языку, что качественно выделяет её среди других. В качестве примеров и заданий используется язык LISP (точнее его разновидность Scheme), в силу его одновременной простоты и мощности. И книгу и язык под Windows выложил на наш ФТП (ссылки ниже).

 

Что главное в книге? Гланое это упражнения в конце каждой главы. Обязательно выполняйте каждое, не делая их вам будет тольок казаться, что вы поняли содержание главы, а на самом деле в голове каша. Выполнение упражнений упорядочивает знания, без упражнений книгу смысла читать нет. Лично я делаю по одному упражнению в день (времени просто мало) и очень доволен.

 

Все вопросы по упражнениям и по содержимому давайте задавать в этой теме, чем смогу помогу.

 

Книга SICP на русском: ftp://simhost.org/Programming/Books/sicp.pdf

Язык Scheme для Windows: ftp://simhost.org/Programming/Scheme/plt-...-i386-win32.exe

Share this post


Link to post
Share on other sites

пусть и оффтоп (да простят меня многие), но спасибо, вещь полезная.

Про книгу слышал, правда в интернете так и не нашел (или плохо искал?), также в одном из Казанских ВУЗов ее рекомендуют для освоения некоторые преподаватели (преимущественно, проходившие в свое время стажировки за границей).

Share this post


Link to post
Share on other sites

я на basic в 9 лет программировал,ну как програмировал нарисовал елочку 8)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Кому игрушки, а кому Mac OS.

Пробовал Pascal/Delphi что-то не понравилось. Сейчас думаю заняться С++

Share this post


Link to post
Share on other sites

Не в языке счастье, отчасти об этом и книга :D

Share this post


Link to post
Share on other sites
Такие вещи, кстати, очень полезны. Нарисовать елочку, подвигать черепашку и пр. Таких программ довольно много, только у нас в школах малышей нынче сначала за игрушки сажают, потом за ворд. Никакой информатикой и не пахнет.

Разные школы есть :)

Share this post


Link to post
Share on other sites

а я и черепашку двигал, и рисовал черепашкой))) и заргузкой/разгрузкой корабля занимался))) у нас в школе даже целых 2 урока по QBasic провели)))

 

по поводу языков лично я понял одно - большой разницы в языках нет, они реализуют лишь синтаксис, так называемые наборы правил и команд для выполнения той или иной задачи (кстати, синтаксис у ряда языков очень уж схож, разница зачастую лишь в визуальном отображении (ну, где-то begin - end, а где-то { - } )). Будь то Дельфи/Паскаль, Си++ или .Net, различия не столь кардинальны, чтобы отдавать 100% себя какому-то одному языку (Ну, про ассемблеры я не говорю, вот где для меня лес густой, слишком уж долго и нудно писать).

 

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

 

Только вот скажите мне, за чем будущее - за объектами или структурами?

Share this post


Link to post
Share on other sites

Этот спор устарел еще в девяностые :censoree: Сейчас всеобщий вопрос так: ":%№*%* твою мать! Как писать параллельные программы?" Кто первые решит, тот на коне :censoree:

Share this post


Link to post
Share on other sites
Ачёэта? :cry:

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

 

1) принять ввод от игрока

2) преобразовать это в "намерения"

3) пересчитать намерения монстров (исскусственный интеллект), согласно новым намерениям игрока и ситуации в целом

4) передвинуть монстров, падающие бочки, посчитать взрывы и пр. - физика в общем

5) обновить состояние мира (включилась кнопка, этот умер и его интеллект больше не считаем, в этого попала пуля, значит отнимает столько то здоровья и пр.

6) обсчитать звуковую картину на текущий момент и выдать на звуковуху

7) нарисовать новый кадр

:help: перейти к п.1

 

посколько все это выполняется последовательно, то работает всего одно ядро. А как сделать так, чтобы работали все 4? Каждый следующий шаг зависит от предыдущего и вся задача очевидным образом не параллелится. Ученые научилиссь разбивать свои задачи на сотни и тысячи мелких подзадач, способных выполнятся параллельно, но игрушки, например, - это совсем другой случай. Вот кто придумает, как их (и многое другое) писать так, что б любой индус легко мог эффективно нагрузитть несколько ядер - тот будет вторым билом гейтсом :D

Share this post


Link to post
Share on other sites

Допустим 4 ядра.

Ко всем 4м ядрам идет вот это:

1) принять ввод от игрока

2) преобразовать это в "намерения"

3) пересчитать намерения монстров (исскусственный интеллект), согласно новым намерениям игрока и ситуации в целом

4) передвинуть монстров, падающие бочки, посчитать взрывы и пр. - физика в общем

5) обновить состояние мира (включилась кнопка, этот умер и его интеллект больше не считаем, в этого попала пуля, значит отнимает столько то здоровья и пр.

6) обсчитать звуковую картину на текущий момент и выдать на звуковуху

7) нарисовать новый кадр

перейти к п.1

Но каждое ядро считает только опр. действие.

Т.е. игрок атаковал монстра, 1е ядро выполняет 1ый пункт, подает запрос 2ому ядру, то выполняет 2 , 3е 3е, 4ое 5 и тд.

Как-нибудь так...

Share this post


Link to post
Share on other sites
а я и черепашку двигал, и рисовал черепашкой))) и заргузкой/разгрузкой корабля занимался))) у нас в школе даже целых 2 урока по QBasic провели)))

 

по поводу языков лично я понял одно - большой разницы в языках нет, они реализуют лишь синтаксис, так называемые наборы правил и команд для выполнения той или иной задачи (кстати, синтаксис у ряда языков очень уж схож, разница зачастую лишь в визуальном отображении (ну, где-то begin - end, а где-то { - } )). Будь то Дельфи/Паскаль, Си++ или .Net, различия не столь кардинальны, чтобы отдавать 100% себя какому-то одному языку (Ну, про ассемблеры я не говорю, вот где для меня лес густой, слишком уж долго и нудно писать).

 

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

 

Только вот скажите мне, за чем будущее - за объектами или структурами?

За объектами наверное уж, последнее достижение вроде

Share this post


Link to post
Share on other sites
За объектами наверное уж, последнее достижение вроде

да, но объекты работают пусть немного, примерно на 25%, но медленнее))) плюс требуют больше оперативной памяти для обработки, пусть и не сразу, а во время выполнения программы (т.е. более быстрая, но менее гибкая статичная компоновка заменена более прагматичной, но и более гибкой динамической)...

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

так что, я вот лично пока еще не уверен твердо в чем-то конкретном... о_О

 

Добавлено:

Т.е. игрок атаковал монстра, 1е ядро выполняет 1ый пункт, подает запрос 2ому ядру, то выполняет 2 , 3е 3е, 4ое 5 и тд.

Как-нибудь так...

т.е. пока работает 1е ядро, все остальные сидят и ждут. 1е ядро отработало, запросило 2е ядро, теперь сидят и курят в сторонке 1е, 3е и 4е... и так далее... и где тогда параллельная работа ВСЕХ четырех ядер? в один и тот же момент времени работает в этом случае ТОЛЬКО одно ядро, остальные ожидают своей очереди...

ну кароче, непонятно мне... пока что...

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

Share this post


Link to post
Share on other sites

А я программирую на Delphi 7, пытался программировать на остальных версиях и не понравилось и сделал себе вывод что нужно пользоваться на Delphi 7. Программировать начал с 15 лет и за это время создал две программы и даже очень неплохие.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×