Изучить программирование с нуля?
==================================

 Здравствуйте!  
  
  

Для начала, расскажу немного о себе.  
  

Мне 19 лет, учусь на психологическом факультете, подрабатываю на фрилансе дизайнером интерфейсов, последние 5-7 месяцев активно интересуюсь программированием. Вот такой вот разношерстный человек)  
  
  

Живу в Тольятти, нормальных технических университетов у нас нет, только в Самаре самые ближайшие. Учусь на бюджете, 2 курс. Есть вероятная возможность перевестись в другой вуз на техническую специальность с потерей курса, но вряд ли удастся на бюджетную основу.  
  
  

Теперь, собственно, к вопросам. Реально ли самому выучить программирование? Или для этого обязательно необходимо учиться в университете? Если можно самому, то какую литературу посоветуете читать, чтобы понять основы и сформировать фундамент? А если все же лучше в университете, то сильно ли хуже заочное образование очного? 

 прочитал предыдущих ораторов — большинство технари и их точка зрения очень ясна и понятна.  

Но, парень четко указал, что он не технарь, потому что занимается дизайном. Хотя я и работа программистом и учился на разработчика, но также я сам художку закончил и студентом дизайнером подрабатывал. Мы, люди искусства, — не гуманитарии и не технари, поэтому оба эти направления даются нам одинаково легко и тяжело одновременно.   

 Я бы на твоем месте сперва спросил себя:  

«Ты хочешь „видеть“ что ты создаешь или же тебе очень нравится понимать и решать математические задачки?»  

1) Если «видеть», то в твоем случае html+CSS+javascrip + твой дизайн = оптимальный вариант. Как альтернатива — silverlight сайты или наконец flash. Быть спецом по user Interfaces. Им, кстати, тоже нормально платят.  

2) Если же тебе нравится решать головоломки (а со временем я стал за собой замечать, что решаю их даже в повседневной жизни), задачки по физике или алгебре или геометрии (или потому что от учительницы многое зависеть может) в школе и эти предметы шли + ты понимаешь их, то можно и пробовать программировать.  

Добавлю про себя: даже код писать в универе меня не научили (зато алгоритмы составлять и описывать ясным языком), пришлось карпеть самому. Советую взять книгу Дж. Либерти «С++ за 21 день» (читать её можно на много дольше) и читать. Там будет все очень разжовано и понятно написано.  

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

1) ООП. Основы. Знать на зубок (в приведенной мной книги все очень ясно описано с примерами)  

2) Сам язык, на котором хочешь писать. Синтаксиса + основные библиотеки (строки, числа, даты пожалуй все для начала)  

3) SQL запросы и базовая теория баз данных.  

Что касается языков, то тут можно разводить кучу споров и холиваров, но есть 2 их типа по синтаксису: С++ подобные и все остальные (когда уже знаешь 1 язык, тогда синтаксис перестает быть важным, сперва он только и важен).  

С++: С++, JAVA, C#, Javascrtipt, actionscript, php и др.  

не С++: Pascal, Python, Basic, Prolog и др… тут кто во что горазд.  

Я бы рекомендовал как и сам начать изучать С++ (а потом перейти на C# или Java). Учить любой язык с 0 будет одинаково сложно а потом легче и легче, поэтому не слушай тех, кто говорит: не учи «С++, он сложный». Он скорее основа основ + синтаксис похожий с другими языками группы. А решать любые задачки можно на любом языке.   

Я бы на твоем месте и проучился больше 2 курсов, то уже закончил бы универ, попутно изучая javasctipt+дизайн и занимался интерфейсами с точки зрения психологии пользователя и не парился сменой профессии, применил все свои знания универа + программирование. 

 Чтобы выучить программирование **нельзя** учить его в российском ВУЗе.   

Фигне какой-нибудь научат.   

Алгоритмизацию в универе послушайте, кодинг — пропускайте мимо ушей. 

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

Сам же учусь в университете на около программистской специальности и к программированию также имею отношение.  

А теперь мое мнение по началу изучения программирования:  

Начните с основ, причем не с основ С++ или Java, а с основ архитектуры компьютера, его принципов работы, а также большого математического аппарата, который за всем этим стоит. Обратите внимание на дискретную математику, математическую логику и абстрактную алгебру. Зная три эти категории, даже в ознакомительном варианте, погружаться в такое непростое дело, как программирование, будет гораздо приятнее и интереснее, а также проще.  

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

 Не учите в качестве первого языка PHP, потом будет **очень** сложно с другими! 

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

  

Просто так, поставить цель перед собой, и мотивируя себя словом «надо» далеко не уедешь. А если знаешь, что за твою работу ты получишь какой-то материальный бонус — то ты будешь ее делать. И чем лучше будешь делать — тем больше бонус. Сегодня многие крупные IT компании имеют вакансии для Junior developer — платят мало, пашешь много (потому что ничего не знаешь толком). Так что дерзайте, но мат.часть подтянуть придется. Есть второй путь — принять участие в Open Source проекте. Но там все на чистой романтике, да и порог вхождения в большинство крупных и интересных проектов высоковат — но оно того стоит.   

  

И не ведитесь на громкие слова — «технологии», «актуальный», «современный» — сегодня это есть и востребовано, завтра придается забвению. Не распыляйтесь, одним словом. Я попытался — получилось плохо =) Если пишешь на С/С++, то лучше шлифовать и оттачивать его, чем долбать LAPM или пайтон. 

 Научиться программировать самостоятельно «по книжкам», имхо, вполне реально. Но нужен реальный (или близкий к нему) проект, а не отрывочные учебные задачи, какие обычно предлагаются в книгах. То есть после начального вхождения в язык ставим себе задачу и начинаем её реализовывать. Важно реализовать до пригодного в продакшен вида (пускай не будет каких-то интересных фич, но те, что есть должны быть закончены, а не «всё равно никто никогда не увидит, потому входные данные проверять, а выходные экранировать не буду»). Очень желательно иметь качественный фидбэк на свой код (вариантов — тьма).  

  

Для начального обучения хорошо подходят, по-моему, Python (+Django если говорить о вебе) или Ruby (+RoR в вебе), на худой конец PHP. Компилируемые языки со статической типизацией, по-моему, приводят начинающего программиста в ситуации, когда за деревьями не видно леса — заставляя уделять много внимания формальной правильности они способствуют снижению внимания на логическую правильность. 

 Если Вы талантливый человек или же вам очень нравится программировать, то конечно же возможно!  

Предлагаю вашему вниманию: [www.ozon.ru/context/detail/id/3811652/](http://www.ozon.ru/context/detail/id/3811652/)  

Сам начинал с html. 

 Самарский ГУ на международных олимпиадах очень хорошие результаты показывает.  

Это информация к размышлению, она не отражает полной картины.  

  

Можно самому стать хорошим специалистом, но корки у вас не будет (а иногда она нужна).  

Если учиться, то, скорее всего, куча дисциплин не по специальности. Когда учишься — часть информации тебе дают пережеванную. Кто-то тебя проверяет, следит за качеством программ и кода. 

 Согласен с предыдущими ответами. Выучиться самому — реально. Сам выучился еще по книге «Бейсик для детей» (Вам не рекомендую, эта книжка действительно для детей ;) ).  

Добавлю, еще кое что. В качестве именно языка программирования для начала неплохо подходит Паскаль — он изначально для этого создавался. Хотя можно и сразу брать что-то более используемое в реальной жизни.  

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

  

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

 а еще у Microsoft все-таки самый лучший подход разработчикам в плане обучения. Просто куча информации для таких как ты с «0» и на русском.  

вот только что в другом вопросе увидел ссылку на уроки с «0» в MSDN (это огромная справочная служба по всем языкам и технологиям MS )   

[msdn.microsoft.com/ru-ru/beginner/ee344863.aspx](http://msdn.microsoft.com/ru-ru/beginner/ee344863.aspx) (на русском)  

  

для php или другого языка ты такого не найдешь. Хотя теория и ООП везде должны быть одинаковые.  

  

PS про курсы. У нас, например, фирмы сами устраивают курсы. Бесплатно и с перспективой работы, но нужно показать, что ты не человек слева и уже имеешь какой-то опыт… т.е. опять уже базовые знания нужны.  

И еще — хороший разговорный английский. Без него уже вообще не стоит пробовать даже. 

 Ну, я тоже отучился на психологическом факультете по специальности «Организационная психология», правда в мск. Сечац работаю прграммистом. Начал гораздо позже вас — уже через 2 года после окончания, но все равно потихоньку учусь. Книги умные читать терпеть не могу. Меня товарищ пригласил попробовать программировать в один институт научный, договорился с начальством. Он от меня сначала месяц не отходил, а потом я становился все более самодостаточным (точнее гуглшодостаточным) и сейчас активно развиваюсь без посторонней помощи (и все так же без книг, только с гуглем). Начинал как с самого простого с C++Builder'а, сейчас пишу Java Enterprise.  

  

Мораль сей басни такова: у каждого свой путь и ничего нереального в вашей задаче нету. 

 мм… я бы не советовал. (с)  

  

дано: гуманитарий 19 лет  

надо: научить программированию  

решение: вернуться назад во времени на 5 лет и начать с Basic'а  

  

не знаю, как там в Тольятти, но в МСК еще в 90х преподавали программирование в старших классах школы. Если человек в то время не решил для себя, что программирование — это его, если его не пропёпрло от алгоритмов, а вместо этого он школьные домашки по программированию списывал у друзей — это уже не лечится.   

Конечно, м.б. в Тольятти и не учат программированию в школах…  

  

  

Я бы посоветовал автору топика задуматься о то, что ему реально нужно. Если он видит себя психологом/дизайнером интерфейсом, то ему надо осваивать инструменты, полезные для профессии. Средства прототипирования, языки типа UML и т.д.   

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

 Я бы посоветовал C#. Хорошо структурированный и понятный язык. Учится легко, программы пишутся быстро. А самое главное, в msdn куча примеров для него 

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

В сети есть большое множество ресурсов, которые учат программированию – онлайн туториалы по различным языкам или по основам программирования, с теорией и без, где можно писать код онлайн прямо на сайте и ресурс при вас проверяет правильно ли вы решили задачку, с множеством фич). Платные и частично… - выше упомянуто достаточно, могу лишь добавить ресурс который встретился неддавно [codeasy.net](https://codeasy.net).  
  

Совет – ищите и пробуйте, везде задачки разные, в любом случае это полезно. 

 Реально, главное — приложить достаточно количество усилий. Например, на реддите есть [неплохой список книг](http://www.reddit.com/r/books/comments/ch0wt/a_reading_list_for_the_selftaught_computer/) для самообучения. В комментариях тоже очень много полезной литратуры. Удачи! 

 Я, например, вообще радикально поступил. Отчислился с первого курса, с самой что ни на есть программерской специальности. Сижу вот теперь, учусь сам и попутно небольшой проект пишу. А на следующий учебный год поступлю куда-нибудь заочно, только ради диплома о ВО. Но, до университета у меня было небольшое представление о программировании и я умел немного быдлокодить на питоне.  

  

И да, я потихоньку пишу статью о своём небольшом сервисе, но всё равно не хватает одной единицы кармы для публикации, а попрошайничать не прилично =) 

 Пользуясь случаев спрошу. Ребят, с детства самоучка, абсолютно все знания получены самостоятельно.  

  

Сейчас понял свой потолок, нативная алгоритмизация по интуиции это, конечно, прекрасно, но требуется скиллап по алгоритмизации.  

  

Зарекомендуйте, пожалуйста литературы хорошей по этому вопросу. Про Кнута знаю сам, уже качаю. Тематически интересует работа с текстами/строками.  

  

Спасибо! 

 Я бы порекомендовал для начала чисто Си. Когда набьется рука реализацией алгоритмов основных (задачки на строки, сортировка массивов, очереди и стэки… что там еще...) можно постепенно переходить к C++. На C++ уже можно набивать руку в плане объектно-ориентированных программ (в универе у меня был такой замечательный предмет как ООПП, который фактически мне ничего не дал. Но для начинающего программиста предмет будет довольно полезен. Литературы по этой дисциплине валом.)  

  

Собственно — ставьте себе задачи и решайте их. 

 Начните с простого, основ: Basic, Pascal, C. Книжечкой с примерами и просто ставьте себе например прикольные задачки, к примеру написать простенький текстовый редактор с поиском, заменой и т.п.  

Всё даже можно в консоли и без интерфейсов.  

Ну или уже попоже заняться графикой, это интересно например создавать простейшие графические приложения, пусть это даже будет GDI, пусть QT без разницы, уже будет интересно, главное не киснуть.  

  

Ни в коем случае не начинайте с языков с динамической типизацией, так вы не поймёте как на самом деле всё работает внутри, на что тратятся ресурсы и что скрывается внутри капота, а это очень важно для вас будет в будущем.  

  

Удачи! 

 Не ходите на заочное — 99% заочного — покупка диплома в рассрочку. Программирование выучить реально, есть уже положительный опыт. Пишите в личку, подскажу. 

 В свое время я изучал новый язык по курсам на сайте intuit.ru 

 Ничего лучше [JavaRush](http://javarush.ru/user/reference/798d11a9-36a9-4775-b915-a1f4e938a880) для изучения Java не нашел. Курс построен в форме онлайн игры. Есть возможность стажировки в реальной IT компании. 

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

Думаю после НГ начну выкладывать первые материалы. 

 Нашёл добротный самоучитель на Java, может кому пригодится   

[javarush.ru/user/reference/5536bf1b-c5bd-425c-972a...](http://javarush.ru/user/reference/5536bf1b-c5bd-425c-972a-bdfa416ef949) 

 Если учите самостоятельно могу дать один очень простой но очень важный совет, которой просто невероятно поможет учить любой язык или фреимворк и никогда не зыбвать: **Кратко записывайте то что вы учите**: ключевые конструкции, слова, рецептики. В электронном виде. Для этого есть специальный сервис <https://maketips.net/about> , там есть возможность форматировать код, экспортировать в пдф то что вы написали и быстрый поиск по тексту, названиям, тегам.