Суть проблемы: Хочу мутировать из PHP кодера в Программиста. Как я понял для этого как минимум необходимо: 1. Хорошо знать как работает компьютер на низком уровне. 2. Понять теорию программирования. 3. Научиться самостоятельно искать пути решения проблемы а не тупо кодировать в PHP то что посоветовали. Что я предпринимаю/планирую в дальнейшем: 1. У нас начался курс языка Ассемблера. Читаю книги по дискретной математике, затем возьмусь за теорию автоматов. 2. Сейчас читаю "Дисциплина Программирования"(Эдгар Дейкстра), на очереди огромный том "Алгоритмы. Построение и анализ"(Т. Кормен, Ч. Лейзренсон, Р. Ривест) и Дональд Эрвин Кнут - "Искусство программирования". Буду их перечитывать до полного осознания(очень надеюсь оно наступит раньше чем смерть ). 3. Хм... Еще не знаю. Вопросы: 1. Что еще может помочь в достижении моей цели? 2. Как мутировали в true программистов Вы? Спасибо всем кто прочел. [UPD] Я уважаю мнение тех, кто считает что для программирования вполне достаточно манула... Но все же просьба посоветовать что-нибудь по теме, ссылку про PHP на танке и тему с литературой я прочел еще месяцев 6-7 назад, ман до конца еще не выучил, но уже в процессе. [/UPD]
Алгоритмы не читать, читать сначала Асм (если он действительно нужен), основы, ну хотя бы Питера Абеля. Плюс начать делать корявый проектик "лишь бы опыта набраться" (обычно пишут всякие плееры/блокноты/калькуляторы/саперов), чтобы целеноправлено искать инфу, а не тупо уроки проходить - лучше усваивается. Есть так же мнение, что начав изучать сразу прикладной более высокого уровня (Си, Дельфи) ничего не потеряешь. Не всем нужно понимать, как устроена адресация памяти на уровне машкода (тем более, что в мало-мальски крепкой ОС тебе все равно прямого доступа не дадут, только если под х86 не будешь код в нулевое кольцо защиты пихать (драйвер какой, руткит)). Более того, иногда знание асма немного мешает абстрагивароться Сразу возникают лишние вопросы - а что будет потом? типа вызвал я конструктор объекта, а чего потом, а как он в памяти разложится и тп, хотя всеми этими вопросами займется компилятор Я бы даже порекомендовал сразу поучить прикладной высокого. Асм всегда успеешь, если он будет востребован, если нет - потеряешь время. Для виндов могу порекомендовать почитать Русиновича и Дейкстру Кнут - это так, для прокачки скилов В дельфи можно вызвать встроенный отладчик и посмотреть состояние регистров и выполняемый асм-код - наглядное пособие получается, тем более, что генерится код рабочий (в отличии от кучи древних книжек, которым еще реалтайм подавай). Думаю уж в Си точно есть дебагер свой (я компилил батником, с ее ИДЕ практически не работал). А я вот деградировал в false программисты %))) кстати, вполне можно искать пути решения и в ПХП Я вот, при задаче парсинга каких то текстовых файлов запускаю апач и быстренько кодю в ПХП скриптик с регулярками. Получается очень быстро написать готовое решение. Пусть оно требует вебсервера и работает значительно медленей бинарника, зато быстро. А в каком нибудь дельфи я бы гораздо дольше ковырялся.
Участвую в проекте www.express-site.ru (Да, та самая ссылка "Создать сайт" которая мозолит всем глаза ... Но пока что с дальше просто PHP кодера не ушел... Эм... Я почему-то думал что если понимаешь принцип создания алгоритмов и умеешь их делать = для любого языка высокого уровня остается выучить только синтаксис. Я ошибаюсь?
dAllonE Присоединюсь к antonn, но другими словами: То, что ты затеял - это примерно тоже самое, что начать изучать вождение автомобиля с изучения работы всех-всех-всех гаек, потом конкретных узлов, потом сопряжения узлов и т.д. Ассемблер - брось. В современном мире он во-первых нафик тебе не нужен, а во-вторых, после него будет очень сложно переходить на более-менее абстрагирующиеся языки. Потому что в асма первая задача - это максимальная оптимизация. А у любого ООП-ориентированного языка - первая задача - это реализация абстрактного алгоритма. И эти две вещи диаметрально противоположны. "До полного осознания" - не надо. Для начала достаточно внимательно прочитать один раз. Что запомнишь - всё твоё. Лучше держи их под рукой и периодически почитывай. Голую теорию, без практики - не выучишь никогда. А если тебе покажется, что ты таки выучил - вспомни поговорку "ни одна теория не выдерживает столкновения с практикой". Можно даже заменить слово "Научиться" на "заставлять себя" - эффект будет полнее. Вообще-то это хорошо для тех, кто, либо учится на низкоуровневых программеров, либо для тех уже состоявшихся программеров, которые повышают свой скилл, а точнее, мутируют в низкоуровневых программеров. Лучше поставить цель "Хорошо знать как работает операционная система и знать её библиотеки" - этой целью ты начнёшь учить ООП. А в двух словах - начни с ООП. Раньше был святой Страуструп. Сейчас не знаю, насколько это актуально. Начни либо с Delphi, либо с С++, либо с Java. И будет тебе счастье.
Только хотел написать об этом. Только этот эффект работает, когда уже знаешь языков хотя бы 5 и сталкиваешся ещё с одним. Так что, то, что ты знаешь хотя бы синтаксис php и немного научился на нём работать - уже плюс.
Кстати, на Яву сейчас спрос нехилый. Правда она не очень прикладная, в смысле не такая прикладная, как Си ЗЫ в асме интересно (если вообще достигается состояние интереса) сначала, а потом просто задалбывает делать рутину. Там где в дельфи на vcl я кнопочку и форму делаю около 5 сенкуд, на ВинАпи минут 20-30 с использованием своих наработок с других проектов, то на асме я ваще задолбаюсь Асм прикольно при обработке данных заюзать, частенько прирост нехилый, а импортировать функции из винапи нудно и неинтересно Вот бы еще при ММХ был бы доступен FPU
dAllonE А в какого программиста мутировать хотите? программирование для ВЕБа, программирование приложений и программирование для устройств очень сильно друг от друга отличается и набор изучаемых дисциплин, соответственно, тоже. По моему мнению, начинать надо именно с выбора направления деятельности. Фраза "хочу стать программистом" это как-то очень расплывчато и неопределённо. Учить теорию это конечно хорошо и полезно, но осознание теории придёт только после того, как вы начнёте решать конкретные проблемы. Необходимость знания того или иного языка и аппаратуры будет определяться спецификой решаемых задач. Пока вы с этой спецификой не определитесь, рассуждать на тему "какие языки учить" бесполезно.
Я не тру, но прокомментировать хотца. dAllonE, почему бы тебе не идти ниже в той сфере, в которой хочешь быть тру. PHP язык для веба, так и чеши от него, как от отправной точки - всё ниже: протоколы, апачи-фигачи и пока не упрёшься в ОСь.
тут как раз в ось-то практически и не упрёшься. Упрёшься в "апачи-фигачи" и в html-яваскрипт. И всё. Если только в сторону - mysql-mssql. Только imho - проще начать с дельфи-хуе.... (пардон, увлёкся) и от неё плясать. Там можно и вниз и вверх развиваться.
PHP - язык серверного программирования, приемущественно для решения задач в области WEB, и не может бы использован для системного программирования, так что изучение ассеамблера и дискретной математики не поможет прямо доститич поставленой задачи. В случае с языком PHP тебе не нужно знать API ОС на которой работает твой сервер, в каких блоках памяти хранятся переменные и пр. По своему (пока однако не богатому опыту в облати PHP) могу сказать, что здесь гораздо важнее понять логику языка. Программист должен уметь думать на языке на котором он пишет, иными словами, должен уметь для любой задачи быстро предложить несколько вариантов решения - и выбрать сразу лучший, не наступая на грабли. Поэтому - изучай встроенные функции, вникай в то, как они работают, для этого пиши функции сам, изучай ООП, сам пиши методы... Ну и конечно нужно хорошо понимать такие фундаметальные вещи как подключение PHP к веб-серверу, работа PHP с БД, протокол HTTP. Если хочешь стать программистом "вообще", а не только в веб-области, то начинать рекомендую с C++.
я бы рекомендовал для начала усвоить основные парадигмы, посредством освоения соответствующих языков: функциональную - lisp, haskell, xslt логическую - prolog императивную - C, paskal, объектную - smalltalk, javascript классовую - java, c++ многопоточную - erlang, ada при этом писать не "лишь бы работало", а чтобы написанный код не вызывал отторжения. если для совершения простого действия приходится городить сложный языковой оборот - подумать как это дело исправить, прикинуть, как то же самое можно было бы реализовать на другом языке меньшей кровью. при необходимости - переписать приложение полностью используя новый подход. прикинуть, чем новый подход оказался удачней, а чем - наоборот - разочаровал. подумать, как писать так, чтобы в следующий раз "полностью переписывать весь код" было бы проще. или не требовалось вообще.
я бы порекомендовал трехтомник Кнута. В свое время сильно сдвинул мне приоритеты в правильном направлении.
Я бы ещё посоветовал Фаулера "Рефакторинг: улучшение существующего кода" и "Приемы объектно-ориентированного проектирования. Паттерны проектирования" (Гамма, Хелм, Джонсон, Влиссидес).
RomanBush, Ну учить его все равно придется, т.к. по нему нужно в мае сдать курсовой проект. Я хочу его выучить не на уровне гуру, а просто что бы понимать что стоит за моими действиями. mmaavv, Я не спрашиваю, какие языки учить, мне хочется сформировать программистки-логичный стиль мышления ) Горбунов Олег, А разве может быть иначе? Я всегда ищу свой путь. Но это не мешает поинтересоваться путем становления других и позаимствовать нужные мне моменты. 440Hz, Sergey89 Спасибо. Найду, прочитаю, постараюсь осознать.
языки программирования и само программирование довольно далекие понятия. многие путают программирвоания с кодингом. для меня программирвоание скорей алгоритмизация и архитектура, а на чем это потом написать дело как раз кодеров. --- лирика... я начинал на Алголе, Фортране и PL/1 на тех больших компах которые занимали по 2-3 комнаты (EC-1033/45). потом появились писюки (PS/2) и C под MSDOS. Потом пришел C++ и Smalltalk и я открыл для себя мир юникс (аминь!). Потом я для себя открыл как раз то, что называется программированием и наконец нашел себя. Я реализовывал деревья, стеки, очереди и диспетчеры памяти. Реализовал RLE,LZW сжатие и посмотрел ка работают архиваторы. Написал вирус. Реализовал быстрые поиски. написал графический движек по типу DOOM1, что бы понять как вычисляются трехмерные изображения. Но это все были чужие алгоритмы... Понимаешь о чем я? =) Вот когда ты придумаешь что-нить свое и реализуешь его. Вот тогда ты станешь програмистом. А пока мы все тут К О Д Е Р Ы! а на чем писать дело десятое. было бы ЧТО писать
на мой взгляд программер от кодера отличается в первую очередь мышлением! Программер - творчесская личность, а кодер - математик! Это как архитектор и строитель!
Тут ОСь как железобетонный пол. В него как раз и упрёшься: для веба дальше апачей-фигачей только пустота. Вот что я имел в виду. Скажи это математикам и они тебя убьют. По-моему, "программист" и "кодер" это синонимы "таланта" и "посредственности", соответственно. Именно этими словами людей делят во всех других сферах деятельности предпологающих творчество.
lexa Напрасно, я не сказал ничего плохого! Это две разные, но одинакого полезные профессии! Один без другого ничего хорошего не сделает. Для этого создаются команды из архитекторов систем, кодеров и дизайнеров. Это как в кино, главные творцы: Режиссер-постановщик, оператор-постановщик и художник-постановщик! ;-)
Любая профессия творческая если к ней творчески подойти. А чтоб стать программером достаточно творчески подойти к профессии кодера !!! (ИМХО само собой)
S.t.A.M., а вот и сказал. Математики считают себя самыми творческими людьми, они пологают, что математика это верх творческой деятельности, ибо она есть всё и во всём (что, кстати, отрицать сложно ).