Кто как начал познавать азы программирования?
Усваиваю материал. Но до сих пор не могу представить как написать
программу. Даже то же квадратное уравнение :(
Почему так?
Читаю книжки, переписываю в тетрадку, чтоб быстрее найти что нужно.
Усваиваю материал. Но до сих пор не могу представить как написать
программу. Даже то же квадратное уравнение :(
Почему так?
Я просто увлекался программированием. Читал и читал...
В 10 лет уже что-то творил на VB6.
Сейчас мне 14, и я рублю в Delphi и PHP.
В промежутке же между этими событиями читал книжки по С++, HTML, JS, CSS, ASM, что-то творил на этих языках...
Линуксом пока не увлекался.
Я только в инсте узнал, что такое программирование... Но как оно работает и с чем его едят - это было также не понятно... Что такое программирование (именно как писать программы) - я узнал случайно, и даже смешно...
Программа - это алгоритм, понятный компьютеру. А теперь вдумайся, что такое "алгоритм"!
На простом примере сложить два числа. Ты что делаешь? Узнаешь значение первого числа, затем вторго, потом складываешь. А сумму надо где-то держать? тогда записываешь это все в третье число. Все. На более сложных примерах - алгоритм сложнее... Надо просто уметь составлять алгоритмы +) а какой язык - это ерунда (кроме асма конечно)
Читаю книжки, переписываю в тетрадку, чтоб быстрее найти что нужно.
Усваиваю материал. Но до сих пор не могу представить как написать
программу. Даже то же квадратное уравнение :(
Почему так?
Квадратное уравнение кстати не так и просто написать. Нужно знать хотя бы азы численных методов. А в остальном DissDoc прав на все 100%. Учись, в первую очередь, составлять алгоритмы. Почитай книги Дейкстра. Для начала "Программы=Алгоритмы+Структуры данных". Ну и библию Кнутта "Исскуство программирования" естественно. Т.е. читать нужно не столько описание языков, сколько книги по проектированию.
Мало что я там понимаю.
Да и вообще - программирование штука сложная, иногда над одной строчкой можно неделю биться... Короче, придется тебе попотеть, чтоб чего-то начало получаться. А начни с легенды программирования
"Hello, World!"
Потом с этой строкой поиграйся: табуляцию поставь, посчитай число символов и вообще сделай все, что позволит твое воображение. Тут и практика появится сразу. (Хотя я так синтаксис языка изучаю, а не программирование, но не знаю, может это поможет)
Если в лом читать, см. только последние абзацы :)
По поводу азов:
Мой первый комп был - Искра с процессором 8086, 640 Kb памяти и без жёсткого диска, зато с двумя дисководами 5.25" на 360Kb каждый.
Было это кажется в 1996 году, когда в почтовый ящик Формоза уже кидала листовки о том какой комп лучше выбирать: Pentium 100 или Pentium 166. (до сих пор храню :) )
И вот только благодаря этому чуду я научился программировать. На нём ни шла ни одна из игр, кроме LHX и Strip Pocker! (о других я просто не знал, т. к. ни интернета ни денег на дискеты тогда не было, а я в 7ом классе учился)
Даже русификатор на этом чуде техники не работал как надо, ни rk.com, ни keyrus. Из софта был только MS-DOS 6.22, vc.com и Turbo Pascal 5.5. В общем меня просто припёрло к стенке. И понеслась... Сразу после программы "Hеllo World" на паскале я начал изучать вектора прерываний, программирование знакогенератора и т. д. В итоге - корявый резидентный русификатор, благодаря которому я смог на русском писать комментарии к программе Hеllo World и собственно к русификатору. А потом я узнал, что оказывается где-то когда-то был такой драйвер 800.com, благодаря которому можно записать на дискету в 360Kb аж целых 720! Найти не смог, написать до конца тоже не смог, но зато познакомился с ассемблером, контроллером НГМД, 13ым прерыванием и т. д. и т. п.
Ну а дальше пошло поехало....
Совет такой: программировать просто так научиться нельзя! Должна быть задача, которую в текущих условиях другими методами решить невозможно. Читать книжки по программированию просто так бесполезно, нужно хотеть что-то сделать чего либо ещё нет, или без чего лично тебе просто-таки не обойтись.
И как можно быстрее соскакивать с винды. Дело не в том что линукс лучше/хуже, просто в нём ты поймёшь всю красоту и необходимость программирования, пускай даже с кракозябрами и квадратиками вместо русских букв. В нём без программирования никуда, либо обратно в винду, либо научишься хорошо программировать.
По поводу Кнута. Даже с уже почти законченным высшим техническим образованием читать тяжко, хотя очень интересно. За что эти книжки обожаю, так это за то, что в них нет никаких Visual, Simple, "высокого уровня", и т.д и т. п. Всё разложено до самых основ, до микросхем и передаёт смысл проблемы, а не то как и куда надо жать мышой.
И ещё один совет, с которым многие не согласятся, но по опыту общения с "крутыми программерами" знаю, что пока это именно так.
Откажись вначале от ООП. Изучай ассемблер, C, паскаль в крайнем случае. Старайся понять принципы действия компьютера как электронного устройства, а не набора классов и объектов. Если этого не сделаешь, то когда ты первый раз столкнёшься с действительно серьёзной ошибкой или проблемой, то для тебя будет шоком, что в процессоре нет конструкторов и наследования (во всяком случае пока), а "сеть" - это не набор функций и библиотек.
Ой, люблю я настольгировать, а уж название темы прямо-таки располагает к этому :)
Если в лом читать, см. только последние абзацы :)
Ок, читаю последние абзацы... :)
Совет такой: программировать просто так научиться нельзя! Должна быть задача, [COLOR=red]которую в текущих условиях другими методами решить невозможно.[/COLOR]
Чепуха.
Компьютер лишь ускоряет процесс, а не дает совешенно другие методы.
Читать книжки по программированию просто так бесполезно, [COLOR=red]нужно хотеть что-то сделать чего либо ещё нет, или без чего лично тебе просто-таки не обойтись.[/COLOR]
Если чего-то принципиально нет в компьютерном мире, то скорее всего оно никому (даже тебе не надо). Это, кстати, один из законов шареваре.
Если тебе без чего-то не обойтись, то скорее всего кто-то уже был в подобной ситуации, поэтому лучше обратиться к существующему, а не изобретать велосипед по-новой. Необходимые вещи редко бывают уникальными.
Лучше не наступать на грабли эволюции, а попробовать уразуметь опыт других. Благодаря этому существует прогресс.
И как можно быстрее соскакивать с винды. Дело не в том что линукс лучше/хуже, просто в нём ты поймёшь всю красоту и необходимость программирования, пускай даже с кракозябрами и квадратиками вместо русских букв. В нём без программирования никуда, либо обратно в винду, либо научишься хорошо программировать.
Охинея!
Ты видимо попутал с админами...
Может ты считаешь, что прикладной программист должен ещё и компьютер уметь собрать? BIOS настроить... Куллер на проц правильно надеть...
А на кой тогда админы?
По поводу Кнута. Даже с уже почти законченным высшим техническим образованием читать тяжко, хотя очень интересно. За что эти книжки обожаю, так это за то, что в них нет никаких Visual, Simple, "высокого уровня", и т.д и т. п. Всё разложено до самых основ, до микросхем и передаёт смысл проблемы, а не то как и куда надо жать мышой.
И ещё один совет, с которым многие не согласятся, но по опыту общения с "крутыми программерами" знаю, что пока это именно так.
Откажись вначале от ООП. Изучай ассемблер, C, паскаль в крайнем случае.
Совет автомобилисту: откажись вначале от двигателя внутреннего сгорания. Изучай педальный привод, ослиные и собачьи упряжки, в крайнем случае паровые котлы.
Старайся понять принципы действия компьютера как электронного устройства, а не набора классов и объектов.
А одно другому мешает?
А можно паралельно учить испанский? Или это будет вредно?
Если этого не сделаешь, то когда ты первый раз столкнёшься с действительно серьёзной ошибкой или проблемой, то для тебя будет шоком, что в процессоре нет конструкторов и наследования (во всяком случае пока), а "сеть" - это не набор функций и библиотек.
Да, действительно будет так... если человек полный идиот, а точнее с диагнозом "аутизм".
Итог: не всегда путь пройденный нами является рациональным, даже если мы достигли нирваны... :)
Начинай с простого и доступного. Постепенно расширяй кругозор и дальнейшее направление будет проясняться само сабой.
Не слушай речи про виндоус, линукс, билдер, вижуал и т.п. Пользуйся тем, чем удобнее, это всего-лишь инструменты, а не магические амулеты. Не делай из инструмента идола, а выявляй его положительные и отрицательные моменты. Со временем ищи более удобные для решения конкретных задач инструменты.
Не стыдись подражать и создавать похожее, но при этом стремись перенимать опыт других, а не пользоваться им вслепую.
Помни, что не бывает идеальных вещей, поэтому любую существующуу программу можно усовершенствовать, был бы смысл, а это не менее важно.
Не создавай велосипедов с нуля только потому, что тебе не понятен принцип чужих велосипедов.
Не бойся упустить что-то. Главное, научиться системно мыслить, разбираться обобщенно и уметь применять опыт на практике, а нюансы ты всегда сможешь прояснить.
И ещё важный момент: корректно работающий неоптимальный код ВСЕГДА лучше "оптимального" неработающего кода. Нашы мысли мимолетны, а выводы часто ошибочны, поэтому стремись по-быстрее проверить свои предположения на практике, а не пытайся создать "идеальную реализацию" непроверенной идеи. Только не забывай потом "причесывать" уже работающую версию.
А для этого пользуйся языком программирования, как языком, а не как шифром: не скупись на полные имена и ясность структур. Не экономь место, программа от этого лучше не станет.
Вот дали задачку:
Пользователь вводит 3 числа (a, и и с);
Надо определить какое из них самое маленькое и выдать его в качестве результата.
Для этого мы создаем функцию Min(a, b) она получает на входе два числа, определяет какое меньше и возвращает. (такая функция где-то наверняка в стандартных библиотеках есть, но наша задача написать ее самим)
Я создал функцию
function Min(a, b:real) : real;
begin
if a < b then
Min := a
else
Min := b
end;
А теперь мне надо с помощью этой функции найти наименьшее из трех чисел.
Итак, задача:
а) написать функцию Min
б) применив ее сделать алгоритм на кнопку "Минимальное" и выдать результат.
Читать книжки по программированию просто так бесполезно, нужно хотеть что-то сделать чего либо ещё нет, или без чего лично тебе просто-таки не обойтись.
Видимо мой случай - это редчайшее исключение... :)
Откажись вначале от ООП. Изучай ассемблер, C, паскаль в крайнем случае. Старайся понять принципы действия компьютера как электронного устройства, а не набора классов и объектов.
Полностью согласен.
И как можно быстрее соскакивать с винды. Дело не в том что линукс лучше/хуже, просто в нём ты поймёшь всю красоту и необходимость программирования, пускай даже с кракозябрами и квадратиками вместо русских букв. В нём без программирования никуда, либо обратно в винду, либо научишься хорошо программировать.
Так, у меня то же масса вопросов. Можно узнать - что винда такого не дает постичь и сделать, что дает линукс? ИМХО надо изучать то, в чем ты хочешь быть профи. Или и то, и другое, пока не определишься.
а "сеть" - это не набор функций и библиотек.
Так, что-то я не понял связи между компьютером, как набором микросхем, и работой сети. Можно разъяснить? Работа стека сетевых протоколов не очень-то похожа на работу компьютера как МПС (микропроц. системы). И что такого нужного мы не можем сделать используя стандартный набор библиотек и функций для работы с сетью?
Автору - не обращай на нас особого внимания. Просто прими к сведенью. Все равно тема скорее всего превратится в очередной поток флуда. А в итоге - у каждого будет (или есть) свой метод познания и свой путь к цели.
ЗЫ Обязательно пройди "Соло на клавиатуре" - это на полном серьезе, это действительно пригодится, чем бы ты не занялся в программировании. Сэкономишь массу времени и сил, потратив их только раз.
Если тебе без чего-то не обойтись, то скорее всего кто-то уже был в подобной ситуации, поэтому лучше обратиться к существующему, а не изобретать велосипед по-новой. Необходимые вещи редко бывают уникальными.
Лучше не наступать на грабли эволюции, а попробовать уразуметь опыт других. Благодаря этому существует прогресс.
Не очень понятно, благодаря чему существует прогресс. Получается, программировать вообще не надо, ведь всё уже и так есть. :) Интересно только, откуда это всё взялось.
Ты видимо попутал с админами...
Может ты считаешь, что прикладной программист должен ещё и компьютер уметь собрать? BIOS настроить... Куллер на проц правильно надеть...
А на кой тогда админы?
Гм, а интересно, кто программы для тех же BIOS пишет, наверное админы?
Вообще "прикладное" программирование - палка о двух концах. Вроде просто и знать много не надо, но беда в том, что заказы для прикладников крупные бизнесы всё чаще в Индии размещают. А вот с "низкоуровневым" (в самом широком смысле) такой тенденции ПОКА нет, да и платят больше, особенно ТАМ :) А главное - куда уж интереснее, чем бесконечные шароварные бухгалтерские программулины штамповать. (ничего личного, просто походите по выставкам отечественных софтофирм)
По поводу билдеров и амулетов согласен, но когда человек делает первые шаги в программировании - его кто-то направляет. И если сразу подпихивают билдер, то в силу кажущейся "мощи" человек просто не приходит к той грани, за которой начинается восприятие билдера как одного из. Другое дело "всякие" асмы, C, паскали. Они слишком непригодны для написания проектов целиком, но дают наиболее широкие представления о программировании. Поэтому в конце концов человек начинает выбирать инструменты под задачи не по рекламных буклетам, а примерно представляя Как Устроен пакет и чем он будет полезен в конкретной ситуации.
to Вася Триллер
В 10 лет уже что-то творил на VB6.
Сейчас мне 14, и я рублю в Delphi и PHP.
В промежутке же между этими событиями читал книжки по С++, HTML, JS, CSS, ASM, что-то творил на этих языках...
Линуксом пока не увлекался.
"творил" - т.е. мыслил творчески, создавал что-то новое пусть даже только для тебя. Какое же ты исключение? Или просто примеры перебивал из книжек? Тогда действительно исключение :)
pacific_7
По поводу линукса. Для того, чтобы научиться программировать нету системы лучше. Причём даже, если хочешь быть профессиональным программистом под виндовсом, потому что более недоделанной, но при этом документированной со всех сторон системы, да ещё и с исходниками в мире виндовса не найти. Программировать приходится на каждом шагу => обучение происходит интенсивно, даже если не хочешь. Пример:
Вы пробовали когда-нибудь ставить ProFTPd (1.2.10)?
Казалось бы, что может быть проще? ./configure;make;make install; И всё работает. Но! Все буквы "я" в именах русских файлов пропадают! Ахинея, не правда ли? :) Решение - править исходники. :) Если не верите, спросите гугла. И так на каждом шагу. Даже если не хочешь, программировать научишься :)
А в винде? Берём Serv-U, ставим, работает. Ну не скучно ли? :) И как в таких условиях учиться программировать? :) Всё есть, более менее работает. А то что не работает, всё равно не поправишь, исходников-то нету.
А если серьёзно, то конечно всё равно, под какой ОС учиться. Просто под линуксом всегда есть дополнительные "стимулы" в виде маленьких недоработок, которые под силу поправить даже начинающему программисту. :)
По поводу "сети" - признаюсь, переборщил :)
to Green:
Не очень понятно, благодаря чему существует прогресс. Получается, программировать вообще не надо, ведь всё уже и так есть. :) Интересно только, откуда это всё взялось.
Прогресс существует в основном за счет эволюционного пути.
Есть все, но не в достаточной степени. :)
Гм, а интересно, кто программы для тех же BIOS пишет, наверное админы?
Ну уж точно, не прикладные программисты.
Вообще "прикладное" программирование - палка о двух концах. Вроде просто и знать много не надо, но беда в том, что заказы для прикладников крупные бизнесы всё чаще в Индии размещают.
Какая глупость!
И про "знать много не надо", и про Индию...
А вот с "низкоуровневым" (в самом широком смысле) такой тенденции ПОКА нет, да и платят больше, особенно ТАМ :)
Очередная глупость.
А главное - куда уж интереснее, чем бесконечные шароварные бухгалтерские программулины штамповать. (ничего личного, просто походите по выставкам отечественных софтофирм)
А... т.е. прикладные программы - это исключительно бухгалтерия... :D :D :D
По поводу билдеров и амулетов согласен, но когда человек делает первые шаги в программировании - его кто-то направляет. И если сразу подпихивают билдер, то в силу кажущейся "мощи" человек просто не приходит к той грани, за которой начинается восприятие билдера как одного из.
Фигня... Всё зависит от решаемых задач.
Другое дело "всякие" асмы, C, паскали. Они слишком непригодны для написания проектов целиком, но дают наиболее широкие представления о программировании.
Что не слово - чушь.
Какое представление?
Рубанок и дрель, в силу их кажущейся "мощи" не дают человеку придти к грани, за которой начинается восприятие их, как инструмента.
Другое дело "всякие" рашпили, коловороты, стамески. Они слишком не пригодны для создания изделий целиком, но дают наиболее широкие представления о столярном деле.
Кстати, Windows и Linux написаны на C, на языке "слишком непригодном для написания проектов целиком"...
Поэтому в конце концов человек начинает выбирать инструменты под задачи не по рекламных буклетам, а примерно представляя Как Устроен пакет и чем он будет полезен в конкретной ситуации.
По рекламным буклетам... :D:D:D
М-да...
Т.е. что бы представить Как Устроен пакет, надо использовать средства "слишком непригодные для написания проектов целиком" ?
Мазахизм + маразм...
<skip
>Вы пробовали когда-нибудь ставить ProFTPd (1.2.10)?
Казалось бы, что может быть проще?
А ты пробовал посчитать площать белого прямоугольника?
Казалось бы, что может быть проще? :)
Автору - не обращай на нас особого внимания. Просто прими к сведенью. Все равно тема скорее всего превратится в очередной поток флуда. А в итоге - у каждого будет (или есть) свой метод познания и свой путь к цели.
Да не... пусть уж обращает внимание, раз подбросил навоза на вентилятор... :)
Да не... пусть уж обращает внимание, раз подбросил навоза на вентилятор... :)
Я прочитал посты. Навоза на вентилятор бросил кадр с ником Green. Максим задал вопрос, ksicom ответил, написал свое видение вещей. Конечно есть спорные моменты в его мнении, но ни один из них не доходит, до того бреда или маразма, чем мнение, что программа в первую очередь должна быть красивой. При этом, он твою маму не вспоминал и тебя никуда не посылал. Но ты в своем посте начал: "Чепуха...Охинея!...Да, действительно будет так... если человек полный идиот, а точнее с диагнозом "аутизм"...Что не слово - чушь...Какая глупость!...Очередная глупость."
А теперь читай это -
ksicom: - Откажись вначале от ООП. Изучай ассемблер, [color=red]C[/color], паскаль в крайнем случае.
Green: - Совет автомобилисту: откажись вначале от двигателя внутреннего сгорания. Изучай педальный привод, ослиные и собачьи упряжки, в крайнем случае паровые котлы.
Green: - Кстати, Windows и Linux написаны на [color=red]C[/color], на языке "слишком непригодном для написания проектов целиком"...
Ты сперва определись, C - это педальный привод в программировании, или же на нем писали самую распространенную ОС.
На счет подсчета белых прямоугольников...:)
Это простая, простая задача. Тебя конечно она замучила. Ты выставил программу из 20-30 операторов, которая из-за имеющегосся бага, задачу могла решить только случайно. Благодаря мне, я тебе указал контрпример, ты исправил прогу.
После этого я тебе указал, что для решения задачи достаточно выделить памяти порядка N, в то время как твоя программа выделяет N^2. (Очередной ляпус). Просил исправить. Но вместо этого ты включил вентилятор. + написал, что нужна не программа, а алгоритм. Попробую объяснить на уровне трехлетнего ребенка, чтоб даже ты понял.
Задача. Есть набор элементов. Определить какие элементы этого набора удовлетворяют определенным условиям.
Для этой задачи имеется как минимум один алгоритм решения: алгоритм тупого полного перебора.
Нахождение макс. площади белых прямоугольников одна из разновыидностей этой задачи.
И ты, после двухнедельного размышления, плюс какого-то подталкивания заново открыл алгоритм тупого полного перебора. :D Но тупость в квадрате. Так как твой алгоритм вычисляет площадь и для ячейки содержащей 0, и после этого сравнивает с текущей макс. площадью. А может он больше? :D
Спроси любого спеца, разбирающегосся в алгоритмах, что если кадр, для решения задачи может предложить только алгоритм полного перебора, то это означает, что с задачей он не справился.
Значит возможны три варианта.
1. Зафиксируй свою программу. Скажи в данный момент это макс. на что я способен. Тогда я возьмусь за свою программу. Даже если она будет медленней твоего, обещаю, я его выставлю.
2. Исправь свою программу. Тогда я тоже напишу свою, ведь будет с чем его сравнивать.
3. Оставайся возле своего последнего мнения: искался только алгоритм, реализация второстепенна. Ну тогда я смысла не вижу в написании программы. Но в этом случае, будь добр, хотя бы не 3.14-и.
Вы сами подумайте - оно вам надо? Выясните отношения через приват что ли.
Mоngооsе - "Тогда я возьмусь за свою программу." Где то я уже это слышал :) Ну да ладно, не буду лезть, но тоже начинает смотреться не более красиво чем "Охинея..." Если че-то недопонимаю и хочется что-то сказать, то туда же - в приват.
Mоngооsе - "Тогда я возьмусь за свою программу." Где то я уже это слышал :) Ну да ладно, не буду лезть, но тоже начинает смотреться не более красиво чем "Охинея..." Если че-то недопонимаю и хочется что-то сказать, то туда же - в приват.
Конкретно где и от кого это слышал. Если хорошо помню, между нами был спор на ветке Pascal об одной программе. Я тебе выложил две версии.
На счет некультурности оппонентов. Думаю что можно спорить. Обороты речи, "я с тобой не согласен...мне кажется, что ты ошибаешься...я думаю по-другому...итп.
Хоть минимальное уважение к оппоненту.
Но не ругаться. Обороты речи "Что не слово - чушь...Какая глупость!...Очередная глупость"
Но есть люди с которых культура, как с гуся вода.
"творил" - т.е. мыслил творчески, создавал что-то новое пусть даже только для тебя. Какое же ты исключение? Или просто примеры перебивал из книжек? Тогда действительно исключение :)
Хм... На заре своего программистского развития :) я не особо творчески мыслил - так, апгрейдил примеры из книжек, порой придумывая что-то своё, оригинальное... Особенно криптография - там я буквально фонтанировал твсяческими идеями...
Так что считайте меня "полуисключением".
Я прочитал посты. Навоза на вентилятор бросил кадр с ником Green.
О! Опять переходим к моей личности. Уже не забавно... както обыйденно...
Если я стал для тебя занозой, смирись. Здесь уж ничего не исправить... :D
При этом, он твою маму не вспоминал и тебя никуда не посылал. Но ты в своем посте начал: "Чепуха...Охинея!...Да, действительно будет так... если человек полный идиот, а точнее с диагнозом "аутизм"...Что не слово - чушь...Какая глупость!...Очередная глупость."
Да, я бываю резок, но я ни разу не обсуждал чью бы то ни было личность. Обсуждению подвергаются лишь изречения.
Ты сперва определись, C - это педальный привод в программировании, или же на нем писали самую распространенную ОС.
Это все-го лишь язык программирования, предназначенный для решения определенного круга задач. Только и всего.
На счет подсчета белых прямоугольников...:)
На счет белых прямоугольников раслабься, поезд проехал, и ты на него не успел.
которая из-за имеющегосся бага, задачу могла решить только случайно.
Ага... случайность, 80 из 100. :)
Теперь несколько эпитетов от Mоngооsе:
Благодаря мне...
я тебе указал контрпример...
После этого я тебе указал...
Попробую объяснить на уровне трехлетнего ребенка, чтоб даже ты понял...
Хм... без коментариев, наша прелесть... :D
Но вместо этого ты включил вентилятор. + написал, что нужна не программа, а алгоритм.
Если бы ты читал ветки с начала, и старался вникнуть в дальнейшие посты, а не пытался в очередной раз совершить под иеня подкоп, то ты сразу бы заметил, что речь шла об АЛГОРИТМЕ, а не его реализации. Я уже устал об этом говорить.
3. Оставайся возле своего последнего мнения: искался только алгоритм, реализация второстепенна. Ну тогда я смысла не вижу в написании программы.
Программа была написана для тех, кто не в состоянии понять алгоритм без реализации.
Не пиши программу, представь свой расхваленный во все места алгоритм, но так чтоб кто-нибудь другой смог понять это описание и предложить свою реализацию. Сделай это на уровне трех летнего ребенка, чтоб даже я понял. Только сделай или промолчи, ибо обещания уже утомили.
Но в этом случае, будь добр, хотя бы не 3.14-и.
Спокойнее, нервные клетки восстанавливаются крайне медленно...
Кстати, на счет числа PI... Тебе не кажется, что ты в очередной раз ошибся темой? И после очередной саморекламы и рекламы своего алгоритма, сдулся как телемагазин. Где алгоритм? (в соотв. ветку, пожалуйста)
Даже сейчас я лучше програмирую на листике, чем за компом, особенно что касается сложных задач.
Листок иногда дело хорошее, но только когда касается высоких абстракций, например, создание архитектуры и т.п. Для подобных целей существуют соотв. инструменты, типа Toogether, Rational Rose, но у меня они не прижились, вместо них я по-прежнему пользуюсь листком бумаги.
Но вот программировать на листке, это по-некоторым соображениям вредная привычка.
Опять же не осуждаю, а делюсь опытом... :)
Ребята, ну хватит блин! Опять щас страшное гонево начнется, которое в очередной раз не покажет ничего кроме некультурности оппонентов.
В целом согласен, хотя поспорить без перехода на личности не против... :D
2Mongoose
Ну вы еще подеритесь тут. Как маленькие дети: "Это он первый начал.","Нет, это он.". Это бессмысленный спор, причем не по теме.
Листок иногда дело хорошее, но только когда касается высоких абстракций, например, создание архитектуры и т.п. Для подобных целей существуют соотв. инструменты, типа Toogether, Rational Rose, но у меня они не прижились, вместо них я по-прежнему пользуюсь листком бумаги.
Но вот программировать на листке, это по-некоторым соображениям вредная привычка.
Опять же не осуждаю, а делюсь опытом... :)
Проэктирую, само собой на листике. Я имел ввиду написание кода, с компилятором встроенным в листик :). Не буду спорить насчет вредности привычки, но насчет того что програмируя за листиком легче сосредоточиться думаю никто спорить не будет.
В целом согласен, хотя поспорить без перехода на личности не против... :D
Вообще-то про это говорил pacific_7, но я с ним полностью согласен.
Проэктирую, само собой на листике. Я имел ввиду написание кода, с компилятором встроенным в листик :). Не буду спорить насчет вредности привычки, но насчет того что програмируя за листиком легче сосредоточиться думаю никто спорить не будет.
Какой марки листок? Palm? :)
Приведу лишь один довод, который показался самым очевидным.
Я стараюсь использовать методику TDD (Разработка через тестирование), т.е. когда сначала пишутся тесты, которые определяют будущую функциональность, а потом уже пишется сам код, который реализует эту функциональность. При этом код пишется шажками, в конце каждого из которых производится компиляция и тестирование. При этом немаловажно, что код пишется "в лоб", т.е. не строются далекие логические цепочки как сделать код универсальным, оптимальным и т.п. Т.о. это дает возможность сосредоточится на текущем шаге, а не растекаться мыслью по древу, что, согласись, очень важно, особенно, для сложных систем, где всю картину, просто не удержать в голове.
Очень часто шаги начинают перекрываться или конфликтовать друг с другом, в этот момент производится рефакторинг и некоторая оптимизация. А т.к. для каждого шага существует тест, я не боюсь, что что-то сломаю.
Когда получается работоспособная версия, отвечающая функциональности, определенной с помощью тестов, начинается процесс рефакторинга и оптимизации по заданным критериям (не всегда критериями служит размер или скорость).
Т.о. процесс разработки получается итерационным и интерактивным, что, как виишь, предполагает постоянное использование компьютера.
Оптимизация происходит в конце по нескольким причинам.
Во-первых, нет смысла сосредотачиваться на ней во время раработки первой рабочей версии, т.к. не известно в правильном ли направлении ли мы движемся вообще и какой код в процессе итераций останется, а какой уйдет за ненадобностью.
Во-вторых, до получения работоспособной версии и её профилирования, не известны тонкие места, которые надо оптимизировать в первую очередь, а оптимизация наугад - лишняя трата времени.
В-третьих, оптимизированный код зачастую сложнее для понимания, чем неоптимизированный, а в процессе интерактивной итерационной разработки при постоянном рефакторинге очень важно иметь явный интуитивно понятный код.
Даже если ты не используешь TDD, то программирование на бумажке очень часто приводит к появлению неявных ошибок (бумажка не компьютер, все выдержит), которые потом очень досадны, когда начинаешь переносить все в электронный вид, и даже приводят к полному пересмотрению реализации. Да и само перенесение кода (обезьянья работа) лишняя трата времени.
Ну и как минус - это меньшая сосредоточенность при работе за компьютером.
Вот такой агитлисток получился... :)
Какой марки листок? Palm? :)
Марка листка - деревянная :)
Я стараюсь использовать методику TDD (Разработка через тестирование), т.е. когда сначала пишутся тесты, которые определяют будущую функциональность, а потом уже пишется сам код, который реализует эту функциональность. При этом код пишется шажками, в конце каждого из которых производится компиляция и тестирование. При этом немаловажно, что код пишется "в лоб", т.е. не строются далекие логические цепочки как сделать код универсальным, оптимальным и т.п. Т.о. это дает возможность сосредоточится на текущем шаге, а не растекаться мыслью по древу, что, согласись, очень важно, особенно, для сложных систем, где всю картину, просто не удержать в голове.
Очень часто шаги начинают перекрываться или конфликтовать друг с другом, в этот момент производится рефакторинг и некоторая оптимизация. А т.к. для каждого шага существует тест, я не боюсь, что что-то сломаю.
Когда получается работоспособная версия, отвечающая функциональности, определенной с помощью тестов, начинается процесс рефакторинга и оптимизации по заданным критериям (не всегда критериями служит размер или скорость).
Т.о. процесс разработки получается итерационным и интерактивным, что, как виишь, предполагает постоянное использование компьютера.
Оптимизация происходит в конце по нескольким причинам.
Во-первых, нет смысла сосредотачиваться на ней во время раработки первой рабочей версии, т.к. не известно в правильном ли направлении ли мы движемся вообще и какой код в процессе итераций останется, а какой уйдет за ненадобностью.
Во-вторых, до получения работоспособной версии и её профилирования, не известны тонкие места, которые надо оптимизировать в первую очередь, а оптимизация наугад - лишняя трата времени.
В-третьих, оптимизированный код зачастую сложнее для понимания, чем неоптимизированный, а в процессе интерактивной итерационной разработки при постоянном рефакторинге очень важно иметь явный интуитивно понятный код.
Даже если ты не используешь TDD, то программирование на бумажке очень часто приводит к появлению неявных ошибок (бумажка не компьютер, все выдержит), которые потом очень досадны, когда начинаешь переносить все в электронный вид, и даже приводят к полному пересмотрению реализации. Да и само перенесение кода (обезьянья работа) лишняя трата времени.
Ну и как минус - это меньшая сосредоточенность при работе за компьютером.
Вот такой агитлисток получился... :)
В целом я с тобой согласен. Но у меня были случаи, когда програмирование на листике очень сильно пригождалось. К примеру - поехал я с еще 3 чуваками на олимпиаду. Задание там дали на неделю и довольно много всякой бумажной работы - каждый день отчет, что сделано и т.д. А наша команда одна без ноутиков оказалась. Короче напряги были конкретные(в прошлом году ноутики никак бы не помогли и в этот раз никто не взял). Так что некоторый код приходилось писать вечером на листике ;(, когда все остальные писали на ноутиках. Блин, одни китайцы, и те аж с 4 приехали(по одному на рыло). Так что в програминге на листике имеются как и минусы так и плюсы(как минимум нужно знать хорошо компилятор, который используешь), пусть даже не такие большие как минусы, но все же...
Все начиналось с листков, у нас был предмет эээ... не помню названия, алгоритмы рисовали. Когда преподаватели решили что мы готовы для восприятия ЯП, началось... Те алгоритмы который рисовали давали жизнь. А потом прогаммирование связали с математикой и сообсно тут все и началось: ряды, уравнения методы. Потом геометрию завязали к программированию. Вот. Так все и было
В 8м классе купили компьютер, быстро учился...
В 9м классе друг показал на примере С++ Билдера простенькую програмку, мне стало интересно... Я юзал Билдер: перетаскивал кнопки на форму, делал простые вещи, и думал, что ЭТО называется программированием... думал, что я такой "крутой мега-программер" :) Решил присмотреться к этой специальности, мне все говорили, что там много математики ( а у меня в 9м была твердая тройка), но я говорил зачем, нахрена она там нужна... Выбрал универ, посмотрел учебный план... Тут я немного расстроился: матан, линал, аналитическая геометрия, дискретка, физика, функциональный анализ (!), диффуры, уравнения мат физики... я слов-то таких не знал, а от названия "дифференциальные уравнения с запаздывающим аргументом" меня вообще в дрожь бросало... Так же мне все говорили: "Какой С++? Учи бейсик!", но я по-прежнему никого не слушал... Купил книжку по С++ "ООП на С++"... но форм и кнопочек я там не нашл, вместо этого: наследование, полиморфизм, инкапсуляция, STL, функции, рекурсия... Послал всех в задницу и купил-таки книжку по бэйсику... Это было что-то... Переменные, процедуры, функции, файлы... Читал много, узнал много нового, въехал в основную суть программирования...
10 класс: летом учил математику, в четверти уже твердая 5, математика мне начинает нравится... Перешел на Паскаль
11 класс: пора поступать, хожу по репетиторам... экзамен по информатике непростой: более менее синтаксис выучил, но даже перевернуть строчку для меня - уже проблемма... Препод по информатике меня всему научил и я понял, что такое алгоритмизация, развил алгоритмическое мышление (как сейчас понимаю, это - САМОЕ главное)... Матрицы, рекурсии и т.п.
Поступил в универ :) C++, деревья, динамическая память... Сейчас на втором курсе, специальность: математик-программист, математика дается без проблем, кодинг тем более) Вобщем, имхо, это должно нравится, и начинать надо с самого простого... А остальное, если нравиться это дело, само приложится...
P.S. Че-то много накотал... пиво дает о себе знать :)
9-11 класс я поступил в лицей и там начал изучать Turbo Pascal. Лицей этот был при университете и нам можно было осле занятий ходить в компьютерные классы. В этих классах я и провел 10-11 класс, с понедельника по пятницу. За это время неплохо приуспел в программировании (имею ввиду придумывание алгоритмов и их реализация).
1-5 курс универа. Начал изучать VC++ 6.0. К середине 2 курса сумел собрать себе по частям комп. До сих пор помню неописуемую радость создания пустого окошка (без волшебника).
В этом году универ я закончил. Получил диплом технолога машиностроения. Положил этот диплом на полочку. Работаю не по специальности.
Вот так....
Начинающим Бы я посоветовал(хотя сам еще зеленющий =)))) :
1) Прочитать Фихтенгольца, Куроша и Кнута =)))
2) Стараться не писать много мелких прог, а писать че-нить крупное(относительно) скажем Базу Данных какую-нить на Билдере или Дельфях - там и с разнооБразными компонентами раБотать научишься и поиску и сортировкам(тока не списывать чужой код!!! Как сказал наш препод по прог-ю "Если вы можете сами по описанию алгоритма написать КвикСорт значит из вас пол-ся программист, если не можете - ....") или 3Д куБик какой-нить софтверный
3)Если с математикой все отлично то думаю стоит отнестись к програмированию Более глуБоко - изучить АСМ(и то как РаБотает процессор), стараться писать серъезные программы(не одноразовые, а которые можно писать вечно постоянно дораБатывая) вроде "антитетрис"(прога играющая в тетрис(те укладывающая фигурки сама) - своеБразный ИИ)(или како-нить другой вариант ИИ(Бота для лЮБимой Кваки =))), 3Д движок или хороший физический движок(но для начала примитивный 3Д =)), анализатор какой-нить или наоБорот синтезатор(скажем человеческой речи)).
4 Не гнаться за количеством однотипной информации - типа я знаю 5 языков и я крутой программист =)) - Главное уметь составлять алгоритмы, уметь мыслить, а новый язык можно выучить за неделю ИМХО
Марка листка - деревянная :)
В целом я с тобой согласен. Но у меня были случаи, когда програмирование на листике очень сильно пригождалось. К примеру - поехал я с еще 3 чуваками на олимпиаду. Задание там дали на неделю и довольно много всякой бумажной работы - каждый день отчет, что сделано и т.д. А наша команда одна без ноутиков оказалась. Короче напряги были конкретные(в прошлом году ноутики никак бы не помогли и в этот раз никто не взял). Так что некоторый код приходилось писать вечером на листике ;(, когда все остальные писали на ноутиках. Блин, одни китайцы, и те аж с 4 приехали(по одному на рыло). Так что в програминге на листике имеются как и минусы так и плюсы(как минимум нужно знать хорошо компилятор, который используешь), пусть даже не такие большие как минусы, но все же...
Наоборот, очень хорошо, что вашим головам не мешали блудливые руки. Как показывает практика, больших результатов достигают не там где много инструментов для производства, а там где собран наибольший умственный потенциал. Поэтому: берем одну машину (или ноут) на всех, садим шустрого кодера-машиниста, затем каждому по листочку с ручкой и вперед - это и есть залог успеха.
Человек не может мыслить машинным (или псевдо-) кодом, он всегда мыслить образами, идеями, а листок бумаги с беглыми мимолетными пометками, набросками необходим для построения логической цепочки наших умозаключений. Так, что на этом этапе компьютер, как таковой, и не нужен!
Наоборот, очень хорошо, что вашим головам не мешали блудливые руки. Как показывает практика, больших результатов достигают не там где много инструментов для производства, а там где собран наибольший умственный потенциал. Поэтому: берем одну машину (или ноут) на всех, садим шустрого кодера-машиниста, затем каждому по листочку с ручкой и вперед - это и есть залог успеха.
Человек не может мыслить машинным (или псевдо-) кодом, он всегда мыслить образами, идеями, а листок бумаги с беглыми мимолетными пометками, набросками необходим для построения логической цепочки наших умозаключений. Так, что на этом этапе компьютер, как таковой, и не нужен!
И здесь вы путаете этап проектирования с этапом реализации. Пытаться реализовывать что-то не имея компьютера - пустая трата времени.
Пытаться реализовывать что-то не имея компьютера - пустая трата времени.
Угу :(
Затем институт. Там на 1 курсе С++. Сначала было сложно, но потом очень полюбил этот язык. особенно он понравился после изучения Assembler - становится многое очень понятным. С тех пор моя жизнь программиста связана с языком С++. В ниституте и сам изучал разные библиотеки.
Недавно по работе пришлось изучить еще и 1c.
А так если знаешь один язык программирования другой изучить очень просто!!! Главное это уметь составлять алгоритм
Итак, задача:
а) написать функцию Min
б) применив ее сделать алгоритм на кнопку "Минимальное" и выдать результат.
begin
if a<b AND a<c then min := a
else
if b<c then min := b else min := c
end;
Неоптимально, но должно работать.
Неоптимально, но должно работать.
Да, вполне можно обойтись двумя сравнениями.
Пользователь вводит 3 числа (a, и и с);
Надо определить какое из них самое маленькое и выдать его в качестве результата.
Итак, задача:
а) написать функцию Min
б) применив ее сделать алгоритм на кнопку "Минимальное" и выдать результат.
{
DWORD retval;
__asm
{
push ebx
mov eax,a
mov ebx,b
mov ecx,c
sub ebx,eax
sbb edx,edx
and edx,ebx
add eax,edx
sub ecx,eax
sbb edx,edx
and edx,ecx
add eax,edx
pop ebx
mov retval,eax
};
return retval;
};
Всем спасибо. По тихоньку пробую. Часто с мыслями о том как решить задачу засыпаю :)
Вот дали задачку:
Пользователь вводит 3 числа (a, и и с);
Надо определить какое из них самое маленькое и выдать его в качестве результата.
Для этого мы создаем функцию Min(a, b) она получает на входе два числа, определяет какое меньше и возвращает. (такая функция где-то наверняка в стандартных библиотеках есть, но наша задача написать ее самим)
Я создал функцию
function Min(a, b:real) : real;
begin
if a < b then
Min := a
else
Min := b
end;
А теперь мне надо с помощью этой функции найти наименьшее из трех чисел.
Итак, задача:
а) написать функцию Min
б) применив ее сделать алгоритм на кнопку "Минимальное" и выдать результат.
Функция должна делать минимальную завершенную операцию, поэтому функцию оставляем прежную:
begin
if a < b then
Min := a
else
Min := b
end;
Минимальное трех числе тогда можно найти следующим образом:
Таким методом можно найти минимальное число из любого числа переменных, не изменяя функции
1) Начинайте с простого: Pascal, Delphi, не расстраивайтесь если что-то не получается,всё придёт со временем.
2) Если вы считаете, что "я крутой программер, ибо создал окно и поместил на него кнопочку" - вы ошибаетесь, программирование - это процесс многоэтапный, но изначально оно подразумевает написание алгоритма, поэтому подружитесь с математикой и алгоритмами.
зы: 2) и 1) вовсе не противоречивы
проще не бывает
и то же самое на Java
http://task00.narod.ru/task_j_0.htm
и далее по порядку
в большинстве университетов дают сначала что-то типа паскаля или С,потом ООП (кому Java,кому C++,кому и то и то) а потом уж лезут в ASM.И все плюються,типа ацки тупо составленный учебный план.Тут я согласна,начинать надо все таки сначала,а не с конца....но опять же перейти с азма на ооп так же сложно,как и обратно. И вообще,не стоит человека с пути истинного сбивать,потому что если уж начнет с ASM,то может оттуда и не вылезти:)))))
обычно если к программированию что-то там есть вроде способностей,то вкуривается всё очень быстро:схватываешь идею,а синтаксис там и прочее потом само накручивается.Главное-ДЕЛАТЬ,а не просто читать.
Ну и еще совет:не мешай в кучу разные уровни (asm,c,c++),начни с чего то одного,дойди до "эксперта",а там уже исследуй то,что вокруг:))