Авторские статьи Как стать программистом

Discussion in 'Статьи' started by nerezus, 7 May 2007.

  1. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Многие вероятно интересуются, с чего начать обучение программированию. И именно поэтому я подобрал немного информаци.

    Введение.
    Эта статья не про выбор первого языка(несмотря на самый большой пункт тут).

    1) А надо ли мне это?
    действительно, советую хорошо подумать ;)
    Кто-то из KISS говорил примерно такое по смыслу "Если кто-то говорит, что он взял гитару и играет ради музыки, а не для того, чтобы заваливать телок, то это гон, можете плюнуть ему в лицо!" Тут заменяем телок на стабильные(хоть и небольшие) деньги, а музыку на кодинг =)

    2) Для чего?
    Собственно вопрос с подвохом. Ибо правильно ответят лишь немногие(и это будет совпадением).
    А дело в том, что человек сам не знает, чего хочет. Да и как правило одним языком не заканчивается.

    3) Определение первого языка для обучения. Эта часть займет около пары часов.
    Есть 2 варианта: взять актуальный язык, либо язык типа паскаля или бейсика: которые не применяются.
    Кто-то может возразить: мол Delphi или VB.NET. Разочарую их: Delphi и паскаль не имеют ничего общего кроме небольшого сходства в синтаксисе. Для VB.NET и BASIC оно и того меньше. И подходы в программировании абсолютно разные. Это все равно, что изучать C++, начав с книги по C. Но об этом поподробнее потом.
    Однако хочу дать заранее совет: не стоит начинать с низкоуровневых вещей, т.к. при обучении программированию придется уделять не только алгоритму, но еще и работе с указателями, выделением памяти и прочими "вкусностями". Именно этим "страдают" C/C++/asm. Поэтому я бы не рекомендовал начинать с них - наверстать можно будет и потом(ну если конечно это будет нужно).
    Итак, что у нас остается: Java, .NET(C#, VB.NET и подобные языки, распространено в основном в США), Delphi(только в бывшем СНГ, на общемировой арене это очень редкий зверь). и скриптовые языки: Python, Ruby, Perl. Так же существует PHP, однако для его изучения надо уже иметь теоретические(и желательно практические) знания о работе веба, многие этому не следовали, а что из этого получалось, можно узнать на phpclub.ru, посмотрев на тупейшие вопросы в основном разделе их форума).
    Сам бы я посоветовал Python или бейсик. Кстати их объединяет одинаковая типизация: dynamic, strong. Кстати хочу заметить, что именно strong типизация позволит минимизировать количество логических ошибок.
    Языки со strong-типизацией: Java, C++(именно C++, а не C), .NET языки, Python, basic, ruby, delphi. У C, Perl, PHP типизация weak(слабая).
    Подробнее читать про конкретный язык в википедии(wikipedia.org).

    4) Итак язык выбрали, с чего начинать?
    С самого начала. По мере изучения языковых конструкций пробуем применять их на практике. это не сложный этап, однако именно на нем отсеивается большинство. И проблема с нехваткой материала для тренировок. Пример задачки(задача 1) можно увидеть в приложениях.

    5) Допустим, выучили мы синтаксис. Ну или почти выучили. Ведь некоторые языки типа бейсика, C, Pascal или Java можно выучить(имеется ввиду только синтаксис, причем без magic-фишек) очень быстро. Но вот научиться применять его - намного сложнее.
    Эта часть похожа на изучение поведения сферического коня в вакууме. Потому что на примерах ее изучить практически нельзя. Отложим этот этап.
    Итак, добро пожаловать в реальный мир!

    6) Чем отличается реальная задача от задачи из задачника? Правильно, тем, что она реальная. Для примера возьмем такую: написание программы для сортировки мейлов в файле. С графическим интерфейсом.
    Что понадобиться знать? Работу с файлами, работу с GUI. Изучаем. Пишем. И перед нами уже начинает возникать проблема. Подробнее о ней немного дальше.
    И именно на этом этапе начинаем изучать стандартные библиотеки языка/технологии. и не только стандартные.
    Кстати, на этом этапе уже можно начинать зарабатывать. Однако качество продуктов будет хреновое ;)
    Решаем задачу 2(в приложениях).

    7) Насчет проблем из пункта 5. Если работу с файлами можно сделать по принципам структурного подхода, то уже работа с GUI в этом стиле будет сплошным мучением. Итак, изучаем ООП. Именно практическую часть, т.к. в пункте 4 теория уже была выучена. Этап занимает достаточно много времени.
    Именно по этой причине я не советовал начинать C++ с C, а Delphi с паскаля: переучиваться будет сложнее, чем начинать заново.
    То есть учим теорию: ООП(нужно много практики), которая плавно перейдет в ООД, естественно надо будет знать паттерны, UML, принципы разработки и т.д.
    Так же больше работаем на практике: регулярные выражения, работа с БД и SQL, GUI, сокеты, высокоуровневые протоколы, такие как HTML, FTP и всякие xmlrpc и SOAP, набор технологий XML и прочие.
    Решаем задачу 3(на выбор).

    8) Что дальше?
    Совершенствуем свои навыки. Ты уже будешь сам знать, что тебе дальше делать.
    P.S. Хочу заметить, что литературы на русском языке для тебя станет не хватать. Вообще. Так что знание английского обязательно. Именно обязательно, а не желательно.

    И пару нюансов:
    1) Практически для всех языком имеются свободные рабочие места. Ну кроме раритетных или специфических.
    2) И вообще, если заказчику нужен готовый продукт, то ему, как правило, монопенисуально, на чем написан продукт.
    3) У каждого языка своя направленность. Поэтому тупо применять к примеру PHP для написание клиентских приложений с GUI, а на ассемблере писать сайты или СУБД.
    4) Заработок не зависит от языка/технологии, а только от уровня профессионализма.
    5) А если занимаешься низкоуровневым программированием, то про ООП - не на твой счет.
    6) Есть такое заблуждение: "Программист - это тот, кто умеет составлять алгоритмы". Так вот: умение составлять алгоритмы - требование обязательное, но не достаточное, на этом дальше 5 пункта(в этом обзоре) не уедешь.

    Приложения:
    Задача 1 (уровень: продвинутый школьник)
    Старая задачка, обычно на школьных олимпиадах ее дают:
    Имеется матрица (n*m) заполненная 1 и 0. Единицы - это острова, а нули - море. Если единицы находятся рядом по горизонтали или вертикали - то они образуют один остров. Найти количество островов.
    P.S. Естественно могут быть "гнутые" и "дырявые" острова.
    P.P.S. Как не странно, но решают ее редко, хотя она достаточно легкая.
    Задача 2 Написать аналог wget.
    Задача 3A Написать BB-парсер. Естесвенно не тупой подстановкой регекспов.
    Задача 3Б Интерпретатор/HTTP-сервер/etc на выбор.

    Версия текста 1.06. Приветствуются дополнения. Аська для связи 547097. nerezus
     
    #1 nerezus, 7 May 2007
    Last edited by a moderator: 14 May 2013
    nynenado, maked0n, -PRIVAT- and 35 others like this.
  2. mR_LiNK[deface_0nl

    mR_LiNK[deface_0nl Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    147
    Likes Received:
    27
    Reputations:
    13
    Нужная вещь!
    Неплохо было бы закрепить в разделе "С/С++, C#, Delphi, .NET, Asm", для отсеивания пустых тем типа 'с чего начать и т.д. т.п.'
     
  3. Aag

    Aag Elder - Старейшина

    Joined:
    26 Jul 2005
    Messages:
    60
    Likes Received:
    19
    Reputations:
    8
    В программировании синтаксис и язык играют второстепенную роль. Основа это знание алгоритмов и принципов построения программ. А сами программы можно хоть в блок-схемах составлять. А лучший способ освоить синтаксис языка программирования состоит в том, чтобы, изучая литературу по алгоритмам, параллельно реализовывать эти алгоритмы на выбранном языке программирования. После освоения этих навыков языки программирования щелкаются как орешки.
     
  4. sni4ok

    sni4ok Elder - Старейшина

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    а я считаю, что синтаксис является самой основной,
    и изучать язык стоит с тщательного штудирования именно синтаксиса.А вот например изучение алгоритмов при начале изучения с++ является только вредом- поскольку, это развивает в человеке велосипедостроительство, вместо развития привычки использования везде где возможно стандартных алгоритмов, которых хватает на 90 случаев из 100.
     
  5. Aag

    Aag Elder - Старейшина

    Joined:
    26 Jul 2005
    Messages:
    60
    Likes Received:
    19
    Reputations:
    8
    Тема называется как стать программистом, а не как выучить язык программирования с++. Насчет алгоритмов, к велосипедостроительству ведет как раз незнание алгоритмов. На начальном этапе, программист должен изучить элементарные алгоритмы и принципы построения программ. Подумай откуда ты возмешь привычку использовать стандартные алгоритмы, если ты считаешь вредным изучать алгоритмы.
     
  6. r0

    r0 Elder - Старейшина

    Joined:
    17 Jul 2005
    Messages:
    450
    Likes Received:
    149
    Reputations:
    147
    Я думаю, что все эти слова можно выразит одной фразой:
    единственный способ научиться программировать - писать конкретные программы.
    А начать следует с устройства системы, того "мира" в котором будешь жить. Скажем, если это php, то лучше сразу понять как устроен Интернет, ибо сразу отпали бы вопросы типа:
    "а почему пишет can not modify headers. Header already sent" =/
    Хотя,однозначно, nerezus + за умение мыслить и четкое изложение результатов данного процесса =)
    Хотя не факт, искать "свое" лучше самому, ведь это тоже только точка зрения.
     
    1 person likes this.
  7. podkashey

    podkashey С крышкой по жизни!

    Joined:
    18 Jun 2005
    Messages:
    756
    Likes Received:
    351
    Reputations:
    353
    Мля, все прочитали статью и подумали - вот нер какой сцуко умный! сцуко начитаный! И даже никто предположить не может, как он жидкости некоторые из горла попивает по утрам!!! ыгыг
     
    #7 podkashey, 8 May 2007
    Last edited: 8 May 2007
    4 people like this.
  8. Dronga

    Dronga ВАША реклама ТУТ!!

    Joined:
    1 Jul 2005
    Messages:
    575
    Likes Received:
    239
    Reputations:
    249
    А я не согласен... Бейсик это вообще тупиковая ветвь навязываемая Майкрософтом во всём, даже в других языках программирования. С питоном не сталкивался, молодой язык, видимо на данный момент весьма специфичный.. значит начав с него на нем и сядешь. ИМХО.

    Очень правильная мысль про алгоритмизацию. Это начало начал программирования и с этим не поспоришь. Умеешь ты в голове разложить задачи на этапы, что и за чем... будет программист, если нет, то уж извините... не дано, сколько бы языков/синтаксисов/технологий ты не знал.

    Я начинал с бейсика, ещё на АГАТах =) Так я там ничего и не понял... А вот когда за персоналкой посидел за паскалем, я осознал, что не всё потеряно.

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

    Потом было _совсем поверхностное_ изучение Java. Можно сказать, мимолетная любовь, Java оказалась очень капризной и нудной.. Однако, после этого переход на PHP оказался делом очень приятным. Синтаксис очень схож, а остальное оказалось понятным и доступным. А там уже и SQL/JS/HTML прикладывается как правило.

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

    Слово подобрал какое =) И всё-таки извращенец вы, батенька, порядочный =) Статья понравилась, мнение отражает и мнение достаточно авторитетное.
     
    #8 Dronga, 9 May 2007
    Last edited: 9 May 2007
    1 person likes this.
  9. podkashey

    podkashey С крышкой по жизни!

    Joined:
    18 Jun 2005
    Messages:
    756
    Likes Received:
    351
    Reputations:
    353
    Есть знакомые на Ruby кодящие - не пьют, разгульный образ жизни не ведут, скучные. ИМХО Ruby - секта.
    Мы в инсте вообще изучали языки о которых тут 88 процентов форума не слышало даже. В 70х-80х придуманые. Я тогда не понмал зачем, почему и для кого мы это учим, когда все нормальные п0ц0ны уч0т дэлфи, ворд, интернет и компьютер. Только потом понял, что это все чтобы понять смысл построения алгоритмов итд, а от синтаксиса уже ничего в дальнейшем зависеть не будет... (в развитии программиста конечно)...
    А так обсуждать ИМХО нех - если у человека есть предрасположенность к кодингу, то он сначала выберет свою ветвь развития, а потом найдет ачат. А если он сначала найдет ачат, то вряд ли он станет заядлым кодером, а поломится кавычки подставлять, стучать в аси с тупыми вопросами, пытаться продать все, что можно (по его мнению) продать и потратит на это все свое время. Если он окажется Бендером (что очень маловероятно), то я ему даже отчасти завидовать буду, если не окажется, то будет "у разбитого корыта(ипала)"... Вобщем все ИМХА моя такая...
     
    6 people like this.
  10. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Уверен? А я тебе скажу, что ты 100% ошибаешься. Причем нетолько по поводу бейсика(VB) и питона(кстати они популярнее делфи. Намного.), но и во всех частях своего сообщения ;) Просто неправ ;)

    P.S. только что приехал в город ) Так что не надо... до сих пор башка трещит(8 литров на харю) )
     
    #10 nerezus, 9 May 2007
    Last edited: 9 May 2007
    1 person likes this.
  11. Un_0

    Un_0 Elder - Старейшина

    Joined:
    11 Apr 2007
    Messages:
    43
    Likes Received:
    43
    Reputations:
    17
    По теме. На питоне пишутся очень красивые исходники, так как отступы обязательны. Так что его можно изучить только затем, чтоб понять, КАК нужно программировать, а то иногда вместо листинга такая каша, что ничего не понятно.
     
  12. Benzin

    Benzin Elder - Старейшина

    Joined:
    15 Jan 2007
    Messages:
    39
    Likes Received:
    8
    Reputations:
    -5
    Чесно говоря статья вообще неочем..
    Причем тут: Как стать программистом..

    Так как в школе у нас по информатике был только гребаный ворд, эксель и прочая чушь, то никакие языки программирования мы не изучали..., но я все же взял книжку и по началу начал учить бэйсик, потом забил, начал учить С, пришел в универ уже зная основные понятия, сейчас в универе закончили С (в I семестре), а сейчас уже и C++ заканчиваем.. Дак вот к чему я все клоню: синтаксис в языке не главное!
     
  13. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Если ты не заметил, то это лишь 1 из пунктов. Из 8ми пунктов.

    P.s. Я бы на твоем месте не говорил
    . Уверен на 99.8% в обратном. По крайней мере ни один из 4 перподов(с которыми приходилось общаться) его не знал нормально у нас. И я уверен, что ситуация такая везде, т.к. не преподам платят мало, а программист может зарабатывать много. Поэтому преподы особо много не знают ;)
     
    2 people like this.
  14. _Pantera_

    _Pantera_ Характерне козацтво

    Joined:
    6 Oct 2006
    Messages:
    186
    Likes Received:
    356
    Reputations:
    109
    Я согласен с Dronga -й. На мой взгляд Делфи обходит питона, а бейсик подавно.
    Что бы стать программистом достаточно уметь строить алгоритмы, а синтаксис дело техники(help в помощь).
    Нерезус молодец +7.
    ps интересно какая бы была критика, если б эту статью написал кто то из обычных user-ов?
     
  15. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Понимаешь, можно долго высказывать свое мнение, но не подкрепленное фактами оно ничего стоить не будет.
    Вы не правы.
    Вот одно из подтверждений этого: http://www.tiobe.com/tpci.htm

    Пардон, но этого как раз не достаточно. Необходимо, но не достаточно. Даже в моей статье после этого идет много пунктов. Советую прочитать ;)
     
  16. ~Hidrag~

    ~Hidrag~ Member

    Joined:
    7 Dec 2006
    Messages:
    19
    Likes Received:
    17
    Reputations:
    28
    А почувствовать себя программистом можно тогда, когда перед тобой ставится задача и ты ее решаешь, а не думаешь о том как ее решить... :)
     
  17. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Зависит от задачи. Например задача(взял такую, ибо недовно изучал тему, запомнилось): написать реализацию какого нить языка. Т.е. интерпретатор, Vm или компилятор.
    И то эта задача не такая сложная ;)
     
  18. podkashey

    podkashey С крышкой по жизни!

    Joined:
    18 Jun 2005
    Messages:
    756
    Likes Received:
    351
    Reputations:
    353
    гыгыгы.... пипец... Сначала решаешь, а потом думаешь о чем вообще задача, читаешь тз, спецификации итд.
     
  19. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Лично я бы посоветовал в первую очередь решить для чего ты собираешся учить язык программирования, если хочется поднять алгоритмы, научится хорошо программировать на будущее, т.е. не ради денег здесь и сейчас, то начать стоит с паскаля (чтобы без лишних заморочек) и делать упор на изучение алгоритмов, т.е. читать классику Кнута, Кормена и т.д. Обязательно поучавствовать (если школьник) в олимпиадах. Затем изучать С++ и ООП.

    Если хочется быстро начать зарабатывать деньги, то начать стоит сразу с Java или C#.NET и искать себе работу. Если кажется, что C# или Java не потянуть, то учить PHP, HTML, JavaScript и идти в веб (платят обычно поменьше, если не свой успешный проект, но и стартануть по проще).

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

    Вроде бы всё :)

    З.Ы.
    Забыл добавить, в общем к пункту 2 обязательно выучить и SQL, независимо веб программирование или нет, БД нужны почти везде.
     
    #19 Qwazar, 13 May 2007
    Last edited: 13 May 2007
    2 people like this.
  20. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Против. Далеко не везде