Хочу изучить программирование

До этого с программирование связан не был.
Уважаемые гуру объясните пожалуйста с чего начать и посоветуйте полезные в этом деле книги.

Интересующий язык С+ +, Java. К стати слышал о том что лучше начинать с С+ +, тогда легче освоить Java — это правда?

Да и хотелось бы услышать отзыв о книге Герберт Шилдт — С++. Руководство для начинающих — можно ли начать свой путь с неё?

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn

Лучшие комментарии пропустить

Какой язык учить?
Хочешь программировать на выразительном и мощном языке: Python
Нужно по-быстрому веб-сайт: PHP
Желаешь в тусовку зовущих себя «рок-звездами» программирования: Ruby
Реально нужно научится программировать: C
Ищешь просветления: Scheme
Уйти в хандру: SQL
Потерять одну хромосому: Microsoft Visual Basic
Для получения постоянной, заурядной, но хорошо оплачиваемой работы по созданию финансовых приложений в офисной загородке под лампами дневного света: Java
Тоже самое, но с аббревиатурами и списком сертификатов в своей подписи: C#
Для получения волшебного, забытого в детстве, ощущения избавления от мании величия: Objective C

С закрытой части быдлохабра

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

все зависит от того за какое время вы рассчитываете «изучить программирование».

можно и с С++ начинать. скажем уйдет 1 год.
потом взять джаву — уйдет 0.5 года.

если сразу джаву — то 1 год.

то есть — если готовы «изучать программирование» в полтора раза дольше — то конечно начинайте с С++.

причем это оптимистично.

вот это

До этого с программирование связан не был.
означает, с высокой долей вероятности что С++ вы не освоите и за год.

как я молча реагирую на собеседованиях
студент: — я изучал С++ в институте!
«аха, значит совсем нулевый, лучше б сайтик какой сделал и рассказал о том как делал. или для смарта чего-нибудь»

С++ — самый сложный ЯП из массовых.

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

Рекомендую пройти великолепный курс Гарвардского университета CS50 по основам программирования, он доступен на courseera.org на английском.
есть перевод: level-80.com/...a-russkom-2016-nedelya-0

Учите сначала С++, а потом можно и Java начать

Может мнение и не ново, но хочу акцентировать внимание на том факте, с какой целью программирование будет изучаться. Если для заработка денег (от 2000$), то лучше всего начать с С/С++, а потом перейти на Objective-C и вести разработку под платформу iOS. А выбранную книгу не рекомендую. Гораздо лучше будет книга Джеса Либерти «С++ за 21 день».

Поделюсь своим опытом изучения программирования. Я начинал с Pascal еще в школе. Соответственно сейчас я бы порекомендовал для начала изучения программирования — Python. Это реально классный язык программирования, от которого я сам получил кучу фана хотя зарабатываю на жизнь программированием на Java (тоже классный язык). Хотя на Питоне тоже можно неплохо заработать. также осваивайте структуры данных, алгоритмы, функции, ООП все потихоньку и углубленно. Еще классный язык Ruby — но он джедайский, требует некоторого количества мидихлориан в клетках:)
Теперь к вопросу об адресной арифметике. Я ее учил и применял на лабах, но не думаю что это что — то супер-приоритетное. Если вам так уж хочется знать что там в машине внутри — купите или скачайте книгу об устройстве ЭВМ вообще, в целом как устроена память указатели, что такое кодирование в дополнительном коде, арифметика чисел с плавающей точкой и т.д. Вам это 100% пригодится так что изучить советую.

Ну и наконец если вы решите заниматься действительно сложными проектами и Computer science, то тут без глубинных знаний математики вам никак не обойтись, тут одна математика всерьез и надолго. так что вот вам карта, думайте действуйте, учите best practices в инете. Учитесь на лучших примерах в инете на иностранных сайтах особенно. Я часто читаю IBM Developerworks чисто для примера..

А что такого джедайского в руби? Язык как язык

Видимо диабет от сахара развиваеться.

а вам все это читать, запоминать, пробывать не впадло ?

девки ждут, и пиво стынет!

Так ведь чтоб была возможность покупать то самое пиво и, скажем так, «мутить» с девушками, нужна хорошая работа, с хорошей зарплатой...
А этого не будет без хорошего образования (по тех. специальности) этого не получить =( А хорошее образование (по технической специальности) требует обязательного знания хотя бы нескольких языков...
Так что... Выбора нет =)

Я считаю что практика залог успеха и не начав решать задачи научится программировать нельзя. Если захотите учить C++ ,C# то могу посоветовать ресурс it-interview.org. Там можно найти множество интересных задач ,а также вопросы которые реально задаются на собеседованиях.

Учим вместе! www.rubyplus.org — зарегистрировался — будем посмотреть соберется ли группа в Киеве! Если нет — сам соберу))))

Учите пхп, самый быстрый способ заработать на еду

C++ для начала. А потом смотрите куда вас тянет.

Учи с++, он когда надоест — JAVA, когда опять надоест — английский, потом снова с++ и т.д.:) Тута еще советуют питон, будь толерантным, включай в цикл и питон, какие проблемы?)

Минимальный порог вхождения, с учётом инструментов, поддержки, примеров, библиотек, фреймворков, книг, блогов, специалистов и всего остального это C#
Microsoft берёт всё самое лучшее, что есть в программировании и адаптирует к реальным потребностям, прежде всего, самих программистов.

Если появляется какая-то модная фича и не исчезает в течение пары лет, то MS её позаимствует и добавит в свои продукты.

За последние три-четыре года года стек технологий от MS стал всеобъемлющим.

Если хочется поизучать, то можно конечно и с ассемблера начать или ещё с какого нибудь «мёртвого» языка.

А если получать удовольствие и в перспективе зарплату, то C# проверенное и надёжное решение.

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

C#, а точнее сообщество .net языков, это всеобъемлющий, проверенный, и применяемый опыт.

Java очень похожа, платформонезависима и поэтому немного сложнее, но более применяема, хотя на получение работы это никак не влияет сейчас, наверное.

Изучать C++ или C, как советуют тру-программеры, это как изучать устройство лампового телевизора — лишним не будет, но и толку столько же. Лучше вернуться к истокам потом, когда будет время и желание. На первом этапе C++ можно убить всякое желание вообще что-то изучать.

За последние три-четыре года года стек технологий от MS стал всеобъемлющим.

Зато мультиплатформенным не стал, а ведь какой потенциал... Моно не в счёт.

Если хочется поизучать, то можно конечно и с ассемблера начать или ещё с какого нибудь «мёртвого» языка.

Ассемблер не мёртвый, и мёртвым никогда не будет.

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

Попробуйте наконец что ни буть кроме с#. Хоть тот же ДжаваСкрипт. От тамошнего ООП по началу волосы быдом.

Изучать C++ или C, как советуют тру-программеры, это как изучать устройство лампового телевизора — лишним не будет, но и толку столько же. Лучше вернуться к истокам потом, когда будет время и желание. На первом этапе C++ можно убить всякое желание вообще что-то изучать.

А потом такой человек будет думать что ООП == Программирование. Что мягко говоря — не тру.

Хоть тот же ДжаваСкрипт. От тамошнего ООП по началу волосы быдом.
Но со временем понимаешь что оно куда правильнее чем в Ц№ или Джаве.

Только язык — гoвно. И в плане дизайна , и в плане синтаксиса.

Конечно, всем языкам далеко до джавы. Там ещё и класов нет, и типизации строгой. И как на нём люди пишут то

Только язык — гoвно. И в плане дизайна , и в плане синтаксиса.

Ваши аргументы, сэр.

P.S. Я немного выдохся в сраче Ц№ против Джавы, так шо попридержите тяжелую артиллерию. :)

>Изучать C++ или C, как советуют тру-программеры, это как изучать устройство лампового телевизора — лишним не будет, но и толку столько же.

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

>Можно заметить тенденцию, что все языки тянутся в сторону классического ООП

Кто это тянецца? Как не было сообщений в яве и шарпе, так и нет. Какое уж тут классическое ООП?

Как не было сообщений в яве и шарпе
Вы про System.Windows.Forms.Message и интенты?
Нет. Я про то, что у объекта любого класса можно вызвать любой метод, даже несуществующий, т.к. вызова метода, как такового, не происходит. Происходит отправление объекта вызова метода (сообщения), объекту вызываемого класса. Дальше, этот вызов разруливаецца внутри самого класса и класс уже решает, взывать ли ему эксепшн, т.к. такого метода в нем нет, выполнить метод, передать сообщение какому-нить другому классу.
Или есть? Если есть, то один шаг есть в нужном направлении. Сколько лет назад появился?

В таком случае, как насчет позднего связывания, возможности модификации объекта в рантайме (добавление, удаление сообщений, аксессоров, свойств), метаклассов, безтиповых объектов, протоколов? Скажите, а говорят, что при вызове метода от указателя объекта, если указатель NULL, ява и шарп до сих пор падают?

что у объекта любого класса можно вызвать любой метод, даже несуществующий

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

Херассе, я не в курсе, ребята © :)

А мсье знает толк в извращениях :)

возможности модификации объекта в рантайме

Генерация в рантайме сборок, компилляция из кода в рантайме подойдет?

ява и шарп до сих пор падают

Чур меня, я unsafe types не использую. А IntPtr.Zero таких эффектов не вызывал. А по-другому через com interop вы nullовый указатель не передадите.

Херассе, я не в курсе, ребята © :)

А мсье знает толк в извращениях :)

А чего такого то, типичный Джавоскриптовый объект.

Мне кажется, имелся ввиду обычный NullReferenceException для null.ToString()

NullReferenceException для null.ToString()

Тут кого-то что-то смущает? :)

Имелось в виду :

Socket *a = NULL;

a.listen();

Так вот, оно падает?

Иными словами, NULL являецца объектом?

Если указатель a хранил адрес актуального сокета — вы только что «откусили» тупо кусок памяти и у вас началасть «утечка»

Кто ж NULL пишет в указатель, не вызывая delete ?

Иными словами, NULL являецца объектом?

В данном случае, я вижу указатель на экземпляр. Уже потеряна информация об экземпляре класса на куче. Кому должен передасца объект вызова, а?
Смотрим декларации типов не помню в каком .h файле (по-моему, windows.h) и видим, что NULL это типа typedef int(0) Посему, вы просто записали ЧИСЛО НОЛЬ в указатель. И еще удивляетесь, почему упадет с NullReference :)
Я так понял, вы владеете сакральными знаниями, что где-то оно не только не упадет, но и передаст вызов кому-то другому? А можно поконкретнее, мне аж интересно :) А то ничего, кроме распределенных приложений на ум не приходит
p.s. Вот, нашел в WinDef.h:
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif

вот и видим, что NULL — это просто 4 байта нулей :)

так же, как и
#ifndef FALSE
#define FALSE 0

#endif

>Если указатель a хранил адрес актуального сокета — вы только что «откусили» тупо кусок памяти и у вас началасть «утечка» Кто ж NULL пишет в указатель, не вызывая delete ?

В указателе просто нуль. Дял простоты написал такой пример.

Дереференс нуля приведет к падению? Уныленько.

>Я так понял, вы владеете сакральными знаниями, что где-то оно не только не упадет, но и передаст вызов кому-то другому?

Необязательно передаст. Хотя бы просто не свалит программу. Например, обж-С, при вызове методов нуля возвращается нуль, если возвращаюцца примитивы (например, то там уже поведение сложнее).

Передавать могут, например, Руби и Смолтолк, где нуль — это объекты, наследующиеся от базового объекта, а не объекты с отдельным поведением (как в обж-с, где нуль по сути своей и не объект, а какая-то фингя с хвостиком, умеющая работать с вызовами).

Мы же с вами на тему ниже говорим?
>>Можно заметить тенденцию, что все языки тянутся в сторону классического ООП

>Кто это тянецца? Как не было сообщений в яве и шарпе, так и нет. Какое уж тут классическое ООП?

Дык вот, какое нафиг классическое ООП, если базовых дял ООП вещей не наблюдаецца в сиих творениях сана и мс?

Дереференс нуля приведет к падению? Уныленько

А вот не падает, однако, даже код отдебажил:
MyClass *a = new MyClass();
a = NULL;
int i = a->GetValue();

На шарпе бы упало, что и должно быть правильно :)

Не падает в каком языке?

Я ведт спрашивал про такой вариант:
MyClass *a = NULL;

int i = a->GetValue();

Я о шарпе и спрашивал (пример написал не на шарпе, т.к. синтаксис шарпа не знаю особо, а на псевдокоде, описывающем условия). Оно там падает?

Если да, то как можно считать, что язык идет в направлении классического ООП, когда что-то не являецца объектом и не обрабатывает сообщения?

Ну на шарпе ясен пень, могу сходу сказать, что:
Object obj = new Object();
obj = null;
int i = obj.GetHashCode();

честно упадет с NullReferenceException

ИМХО, надо еще поэкспериментировать, на сях просто ссылка на объект ИМХО не убивается внутренними костылами. А должна ведь, верно? Или кто тогда получит вызов, особенно если у нас туева хуча экземпляров — статик чтоле?

Кто должен быть получателем объекта вызова в шарпе в данном примере, если принять, что ваше поведение — верно, а в инфраструктуре фреймворка баг? :)

В C# можно такое делать с помощью Extension methods

bradwilson.typepad.com/...-extension.html

Но такая возможность — скорее побочный эффект, null объектом не является.

Extention method — это обманка :) На самом деле, ничего не расширяется и не добавляется, а просто в статический класс, в соотв. метод передается экземпляр класса соотв. типа для обработки. Посему, в том примере, фокус с наллом — это всего-лишь фокус :)

А вот я могу показать фокус, в котором первый объект связан со вторым, хотя кроме общего типа он ничего общего с ним не имеет. А все потому, что не НА ЭКЗЕМПЛЯРЕ вызывают методы, а СТАТИК МЕТОДУ передают экземпляр. Не верите? Смотрите:

using System;
using System.Collections.Generic;

using System.Text;

namespace ExtTest
{
static class ExtentionClass
{

static int mValue;

public static void SetValue(this object obj, int value)
{
mValue = value;

}

public static int GetValue(this object obj)
{
return mValue;
}

}

class Program
{
static void Main(string[] args)
{
Object obj1 = new object();

obj1.SetValue(10);

Object obj2 = new object();
Console.Write(obj2.GetValue());
Console.ReadKey();
}
}

}

в консоли мы увидим 10 :)

Я в курсе, поэтому и написал про побочный эффект :)

Ну и я о том, что шарп — недообъектный и идет не в ту сторону, в которую Толоконников указывает.

Так вот, оно падает?

ОООООО!!! Если класс-статический (свой класс со своим методом, вместо Socket) — то не падает :) ИМХО, в таком случае, ему указатель будет по барабану :)

> Херассе, я не в курсе, ребята © :)

Вы спросили, что такое messaging и получили ответ. Я так понимаю, этой базовой составляющей ООП в языках, адвокатом которых вы выступаете, нет?

>А мсье знает толк в извращениях :)

Да нет. Все логично. Объект — это цельная сущность. Он сам должен вызывать свои методы, все остальные должны ему только посылать сообщения о том, что хотят, чтобы он вызвал метод (это логично даже с точки зрения инкапсуляции).

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

>Генерация в рантайме сборок, компилляция из кода в рантайме подойдет?

Хочу уточнить. Предположим, у нас есть класс, который держит в себе указатель на маллоченную область памяти, в конструкторе она аллочится, в деструкторе убиваецца. Мы создаем объект этого класса, после чего, хоитм добавить ему геттер для доступа к области памяти, которые считает количество вызовов и переменную, в которой это количество вызовов храницца. Теперь вопрос, указанными вами методами (генерация сборок в рантайме и компиляция в рантайме) мы можем добавить к именно этому объекту (уже созданному нами) геттер и переменную? Или нам надо куда-нить сохранить данные из объекта, перекомпилить, заново запустить, инстанциировать объект и вернуть ему предыдущее состояние из ранее сохраненных данных?

>com interop

Переведите для тупых, если не затруднит.

>Чур меня, я unsafe types не использую. А IntPtr.Zero таких эффектов не вызывал.

Я сразу хочу уточнить, в системной библиотеке все методы возвращают IntPtr.Zero, если у них что-то не удалось?

после чего, хоитм добавить ему

Нарушение контракта в рантайме? Реально — не встречал, не видел, и не пойму практического смысла. Да и возможно ли? Разве что, писать напрямую в кучу :) Гуглить влом :)

сохранить данные из объекта, перекомпилить, заново запустить, инстанциировать объект и вернуть ему предыдущее состояние из ранее сохраненных данных

Так точно. Либо сам себе их считает, если в его конструкторе поставить вызов на чтение, после инстанцирования. Либо без инстанцирования — в статик конструкторе.

com interop

Инфраструктура для взаимодействия управляемого кода в .net с неуправляемым

в системной библиотеке все методы возвращают IntPtr.Zero, если у них что-то не удалось

Вы прикалываетесь? Стандартно — если что не удаецца — возвращаемое значение — отрицательное (самый старший бит — в единице) Но и это — не факт. Нужно потом читать GetLastError. Но и это не факт :)

>Нарушение контракта в рантайме? Реально — не встречал, не видел, и не пойму практического смысла. Да и возможно ли? Разве что, писать напрямую в кучу :) Гуглить влом :)

Т.е., extreme late binding отутствует. Еще одно подтверждение того, что в сторону классического ООП шарп не движецца (разву что аналог унылого анонимного объекта ввели и все).

Практический смысла — выполнение финтов Александреску в рантайме, например. Изменение деятеьности объекта (например, имеем целый класс коллекций, таких, как массив, дерево, словарь и т.п., переключение между реализациями в зависимости от количество данных в коллекции). Тысячи их.

>Так точно. Либо сам себе их считает, если в его конструкторе поставить вызов на чтение, после инстанцирования. Либо без инстанцирования — в статик конструкторе.

А если вы хоите сохранить состояние 100 объектов разных классов, а изменить хотите методы только одного класса, то что, та же самая процедура дял каждого класса + наследование, либо один из паттернов разделения ответственности?

>Вы прикалываетесь? Стандартно — если что не удаецца — возвращаемое значение — отрицательное (самый старший бит — в единице) Но и это — не факт. Нужно потом читать GetLastError. Но и это не факт :)

Нет. Я пользуюсь языком, где, если объект не иснтанциировался, то его метод аллокациии/инициализации может вернуть nil (аналог NULL), либо другой объект с протоколом первоначального объекта, вместо указателя. А у вас, если метод возвращает объект, но что-то пошло не так, то указатель на него будет отрицательным? Уныленько, однако.

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

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

Прикол не в конкретном языке.
Прикол в разширении сознания.
Примеры:
-Углубление в то, как же собственно работает компьютер.

-Углубление в то как строить программы и алгоритмы способом отличным от языка вашего choise.

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

В джаве с С++ общая парадигма (точнее, на С++ можно писать в т.ч. и на объектной парадигме сходной с явой).

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

Я думаю по большей степени вы правы. Но такой тип обучения подходит людям, которые начали задумываться о будущем в программировании лет хотя бы в 16-18. Теперь о тех, кто в программирование пришел из других областей айти, или вообще не из айти! Что делать таким, которых содержат не мама с папой, как большинство студентов и некоторых 30-летних «джуниоров». Они не могут себе позволить потратить год-два на то, чтобы глубоко вникнуть во все. Т.е. карьера программистов для них заканчивается, даже не начавшись толком, на формочках и фреймворках? Что плохого в параллельном зарабатывании денег и более детального изучения структур и базовых алгоритмов в свободное время?

Извините, но я категорически несогласен. Мы говорим с вами о человеке, не имеющем знаний в программерстве вообще (ТС). Если сразу лезть на верхний уровень, то выйдет еще один калека-фопмошлеп, который на каждый чих городит 150 паттернов.

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

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

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

Год-два? Вы меня неправильно поняли, я не настаиваю на том, чтобы господа обучающиеся заучили назубок Александреску, Танненбаума и решили все задачи из 5-книжия вирта. На базы столько времени не надо.

Я вас действительно не правильно поняла. Теперь я полностью согласна.

На начальном этапе действительно наверное стоит учить только фреймворки и самые верхи возможностей языка так-как:
— за знание фреймворков платят;
— за знание фреймворков, понимание того, как работает машина, умение сортировать пузырьком и еще миллионом других способов, умение реализовать алгоритм бинарного поиска, знание страшного слова «рекурсия» и другие очень важные вещи платят много;
— за понимание того, как работает машина, умение сортировать пузырьком и еще миллионом других способов, умение реализовать алгоритм бинарного поиска, знание страшного слова «рекурсия» и другие очень важные вещи при незнании фреймоврков не платят ничего.

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

Поправлю вас только в одном:

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

За бугром может и так. Но у нас куда не кинь, везде в вакансиях знание Spring, Hibernate и т.д. И почти нигде я не встречал требований хорошо знать базу. А на работу за бугром можно претендовать только после хорошего опыта здесь.

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

* если это конечно не школоло-трояны весом по пол мегабайта на Delphi с формой внутри экзешника, у которой Visible = false;

>А на работу за бугром можно претендовать только после хорошего опыта здесь.

Я же об этом и написал, что не надо. Можно поработать удаленщиком, либо пофрилансить. Почему бы и нет? ЗАчем идти на нищий и бездарный украинский рынок? Ведь программерство — международная специализация без ограничений. ЗАчем себя ограничивать?

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

Минимальный порог вхождения, с учётом инструментов, поддержки, примеров, библиотек, фреймворков, книг, блогов, специалистов и всего остального это C#

Странно, на это всегда претендовал php, который на самом деле — шаблонизатор и языком его зовут по недоразумению.

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

Глупости.

Если появляется какая-то модная фича и не исчезает в течение пары лет, то MS её позаимствует и добавит в свои продукты.

Ага, они html нормально не могут уже сколько лет добавить в свой продукт — IE?

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

Он еще и фанат мелкософта и искренне верит что мелкомягкие несут инновации и

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

Ну естессно, также, верит, что он умеет думать. Ну не будем же переубеждать в таковом, нет?

>искренне верит что мелкомягкие несут инновации

Великий вождь, нижайше прошу вас с ним разобрацца в наиболее куртуазной форме.

Когда я решила изучать программирование (с нуля, абсолютно без базы), я была уже далеко не студенткой и время тратить на всякие паскали и делфи(или чем там еще в универе пихают) не собиралась. С переменными, циклами и массивами начала разбираться сразу на примере Java. Я понятия не имею, чем обусловлен выбор языков в университетах для обучения, но я не могу сказать, что Java для новичка не самый удачный выбор. Сложности начинаются не в момент постижения азов программирования, а чуть позже — когда уже начинаешь искать работу. Вот здесь для Java порог вхождения гораздо выше, чем в том же питоне, но не потому, что она такая сложная, а потому, что знать надо ох как дофига. Возможно сейчас меня закидают помидорами, и скажут, что если я не постигла таинства указателей С++, то мне можно искать умиральную яму.. Ну не знаю, я интересовалась у многих уважаемых мною специалистов — по большому счету это все понты (для большинства сегодняшних задач в аутсорсе). Программируют люди и без этого, и зп получают... Нет, я не отрицаю необходимости хорошо понимать предметную область, но все можно постичь выборочно и за какой то промежуток времени (как я проработала страшно важные основы С++). Как правильно тут уже сказали(да и не только тут), да и я сама уже убеждаюсь, все знания приходят с опытом. Если только человек не совсем ленив и не гуглит только готовые решения, а смотрит хотя бы на метр вперед и в сторону, все очень быстро постигается и из таких потом вырастают нормальные специалисты. Есть время — учите все подряд, нету — ну и не тратьте его зря. К сожалению, большинство знаний впрок не откладывается. А вот если вы изучите какой нибудь паттерн или алгоритм, параллельно применяя его на практике(когда действительно понадобится), то такие знания отложатся, в отличии от просто прочитанной книги.

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

Суть в том, чтобы понять организацию памяти
подобные вещи ведь не осваиваются только при работе с плюсами?

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

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

Ну да. Еще на С вполне осваиваюцца.

Мда. И только после ассемблера ясно, что с указателями (и их создателями) не всё ясно. Альтернативная арифметика Си, она конечно, вполне годная, для отвязно и альтернативно мыслящих.

Когда прибавишь единицу, Вы, по наивности своей рассчитывали, что альтернативных арифметик не бывает, и что указатель прыгает, вы что подумали, на единицу? Недостаточно вы альтернативно натасканы, надо бы пожестче... А если прибавить к байту со значением FF единицу, разряд обнулится, и всегда произойдет перенос в следующий разряд? А от 5 отнять 6, то подумали, что единица займется из предыдущего разряда? Экий вы наивный человек, неплюралистичный и не альтернативно мыслящий. Ортодокс, короче. А звучит-то как обидно, как мастодонт, правда? :))

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

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

Не понимаете указателей? Это нормально, перестаньте беспокоиться. :)))

Оказывается, на плюсах писать невыгодно... www.korova.ru/...9-untitled2.jpg

Какой язык учить?
Хочешь программировать на выразительном и мощном языке: Python
Нужно по-быстрому веб-сайт: PHP
Желаешь в тусовку зовущих себя «рок-звездами» программирования: Ruby
Реально нужно научится программировать: C
Ищешь просветления: Scheme
Уйти в хандру: SQL
Потерять одну хромосому: Microsoft Visual Basic
Для получения постоянной, заурядной, но хорошо оплачиваемой работы по созданию финансовых приложений в офисной загородке под лампами дневного света: Java
Тоже самое, но с аббревиатурами и списком сертификатов в своей подписи: C#
Для получения волшебного, забытого в детстве, ощущения избавления от мании величия: Objective C

С закрытой части быдлохабра

Автор сего опуса — явно питонщег. При этом, он понимает, что С — лучше:

Реально нужно научится программировать: C

p.s. Я против 3.14тона ничего против не имею, мне просто не понятно где его ниша? Нафига его учить?
Если чисто для изучения программизма, так это ИМХО как

upload.wikimedia.org/...IRA_example.png

РАПИРА — Расширенный Адаптированный Поплан-Интерпретатор, Редактор, Архив — процедурный язык программирования. Разработан в начале 80-х годов в СССР в качестве средства перехода от более простых языков (в частности, учебного языка Робик) к языкам высокого уровня. Синтаксис построен на основе русской лексики. Язык использовался в школах для изучения информатики. Преподавание на Рапире велось в «Заочной школе программирования» в журнале «Квант» с начала 1980 г.

Поплан-интерпретатор — это ржака :)))))))))))))))

>Я против 3.14тона ничего против не имею, мне просто не понятно где его ниша?

Там же, где и R. Математика, моделлирование и прототипирование на нем (в Sage) и на R (Matlab, SciLab, etc.) конкурирует по удобству и скорости. При этом, т.к. язык таки не матричный, то весьма удобно делать на нем не абстрактные алгоритмы, а что-нить поближе к телу.

Ну, эт то, что я вижу. Еще есть веб, но я профан в нем.

Желаешь в тусовку зовущих себя «рок-звездами» программирования: Ruby

А что, этот каммент никто из пишущих на Руби не прочитал еще?

Java это еще и Android. Так что офисная загородка не всегда актуальна.

*я сам, конечно, Шаляпина не слышал, но мне Изя напел, так мне не понравилось.*

Вы не правы. Андроид — синтаксис явы. Не более. ПО словам пересевших с явы на андроидовский далвик, говорят, что разница принципиальная.

Если «язык» это только синтаксис и стандартные библиотеки lang, util, io, то они в Android почти полностью соответствуют яве.

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

До этого с программирование связан не был.

Значит акцент вам надо делать не на синтаксисе какого-то языка, а на изучении фундаментальных основ программирования, алгоритмов, структур данных и т.п. Язык здесь лишь средство, а не цель изучения, и в качестве базового языка лучше использовать скриптовый язык с ясным синтаксисом вроде Python-а, знание которого никогда не помешает даже если в будущем он не будет основным в вашей профессиональной деятельности.
В качестве литературы можно воспользоваться следующими книгами:
Practical Programming: An Introduction to Computer Science Using Python

Python Programming for the Absolute Beginner, 3rd Edition

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

Это в теории оно так, а на практике — путь в никуда. Сначала нужно получить собственно представление о программировании, научиться писать програмки под консоль и всё такое. Иначе все эти теоретические премудрости не усвоятся.

Не вижу противоречий с тем что я написал. :)
Какие «теоретические премудрости»? Я же не предложил изучать трехтомник Кнута или дискретку — если вы откроете рекомендованную мной литературу, то увидите что это практические пособия для начинающих, где разбираются азы программирования, фундаментальные основы на практике, с использованием Python-а. И чем писать какие-то «hello world», лучше попрактиковаться в реализации например алгоритмов сортировки, как это предлагается в соответствующих упражнениях учебника.

В итоге изучающий будет хорошо знать структуры и алгоритмы, но не будет знать, как сделать вывод в консоль :)

С чего вдруг он не будет этого знать, если практически все примеры и упражнения, которые предлагается сделать в рекомендованных учебниках консольные? :)

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

И чем писать какие-то «hello world», лучше попрактиковаться в реализации например алгоритмов сортировки, как это предлагается в соответствующих упражнениях учебника.

То есть вместо того, что бы учить таблицу умножения, вы предлагаете разобраться с теорией чисел? Фундаментальные основы математики, хуле. Какая сортировка, 2/3 начинающих, не сможет с первой попытки считать строку с консоли.

И вообще, зачем автору Питон? Он же написал в заголовке интересует Java. Значит его путь С->C++>C#/Java.

То есть вместо того, что бы учить таблицу умножения, вы предлагаете разобраться с теорией чисел? Фундаментальные основы математики, хуле. Какая сортировка? 2/3 начинающих, не сможет с первой попытки считать строку с консоли.

Ну так сортировка это и не первые темы при изучении основ программирования. :)

Рекомендую вам прежде чем спорить посмотреть хотя бы содержание предложенных учебников и тогда вы поймете абсурдность своих аналогий и отпадет большинство вопросов. :)

И зачем автору питон? Он же написал в заголовке интересует JAVA.

Базовые знания скриптового языка никогда не помешают Java-программисту. К тому же повторюсь: Python в данном случае лишь средство. Автор первой книги, на которой кстати основан соответствующий университетский курс, вполне аргументировано объясняет почему именно Python в качестве языка для обучения, в том числе и в сравнении с С:

— It is free and well documented.
— It runs every where.
— It has a clean syntax. Yes, every language makes this claim, but in
the four years we have been using it at the University of Toronto,
we have found that students make noticeably fewer «punctuation»
mistakes with Python than with C-like languages.

-It is relevant. Thousands of companies use it every day; it is one of
the three «official languages» at Google

Значит его путь C->C+±>Java.

Почему?
Вы считаете, что если для изучения основ выбрать Python, то он уже не сможет потом освоить Java? :)

И С++, кстати, лишний в этой цепочке на мой взгляд, если целью стоит конкретно Java.

it is one of

the three «official languages» at Google

Ну и что? Продиджи, они говорят на Ризоне темы делают :)

Если все бы было так хорошо, то почему же ондроед SDK (напомню — он от гуглА) — под жаву, а NDK — под си. Есть разве Питон под него без SL4A? И примеры приложеий в студию плиз :)

А к чему вы это написали? — Автор привел гугл лишь как один из примеров. Или вы хотите оспорить его утверждение «it is relevant»? :)

Если вы имеете ввиду релевантность как не только оценка степени соответствия, но и степени практической применимости результата, а также социальной применимости варианта решения задачи — таки да, утверждение спорно.

Простите, времени и желания вникать в самоучители по питону у меня нет, так что я коментирую исключительно ваши слова.

Базовые знания скриптового языка никогда не помешают Java-программисту.

Ага. И не помогут.

— It is free and well documented.
— It runs every where.
— It has a clean syntax.

— It is relevant.

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

Вы считаете, что если для изучения основ выбрать Python, то он уже не сможет потом освоить Java? :)

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

И С++, кстати, лишний в этой цепочке на мой взгляд, если целью стоит конкретно Java.

Можно этот этап и пропустить, но лучше сначала ознакомится с классами и коллекциями в С++, ИМХО.

Ага. И не помогут.

Далеко не факт. Недавно присутствовал на любопытном докладе джависта из Сигмы о его практике использования Mercurial (который в основном написан на Python) на крупных проектах и его преимуществах перед SVN, так допиливание под свои нужды он производил как раз на Python. :)

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

Повторю цитату автора, которую вы почему то не приняли во внимание:
Yes, every language makes this claim, but in
the four years we have been using it at the University of Toronto,
we have found that students make noticeably fewer «punctuation»

mistakes with Python than with C-like languages.

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

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

Кроме того мы говорим о самых азах, основах программирования, а не каких то промышленных паттернах. — Вы действительно считаете что разобравшись в работе циклов на основе Python, он потом будет испытывать трудности в понимании работы оператора цикла в Java?

Yes, every language makes this claim, but in
the four years we have been using it at the University of Toronto,
we have found that students make noticeably fewer «punctuation»

mistakes with Python than with C-like languages.

В джаваСкрипте можно не ставить точку с запятой в конце строки. В С это — ошибка. А значит опыт ДжаваСкрипта в данном случае больше вреден чем полезен. С Питоном аналогично.

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

А я знаю пару ребят, которым JavaScript, с её слабой типизацией, сильно вывихнула мозг, а прошлый опыт мешал нормально воспринимать .net. К чему эти трудности, если можно их избежать?

Вы действительно считаете что разобравшись в работе циклов на основе Python, он потом будет испытывать трудности в понимании работы оператора цикла в Java?

А зачем ему разбираться с циклами на Питоне, если он может разобраться с циклами на С? Которые ничуть не сложнее, и, кстати, идентичны Джававским.

Либо C#->C+±>C (для обратной совместимости :)

Язык здесь лишь средство, а не цель изучения

Расскажите об этом интервьюеру на собеседовании, когда попросят нарисовать, скажем, double checked locking singleton. Или когда спросят о пуле потоков в IIS и асинхронной работе :)

Язык без технологий — это балабольство :)

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

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

Должен должен! Вперед за опытом за еду или в опенсорс проект! Как по-вашему приходит опыт?

И вот если он уже не знает в конкретной технологии стандартные классы — это будет попа, потому что имея мощную абстрактную теор.подготовку — он рискует, скажем, в .net framework, допустим написать свою Hashtable, унаследовавшись от System.Object :)

Должен должен! Вперед за опытом за еду или в опенсорс проект! Как по-вашему приходит опыт?

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

Поэтому практический опыт программирования всегда начинается с каких то учебных проектов, в лучшем случае с практики под присмотром «старших товарищей».

И вот если он уже не знает в конкретной технологии стандартные классы — это будет попа, потому что имея мощную абстрактную теор.подготовку — он рискует, скажем, в .net framework, допустим написать свою Hashtable, унаследовавшись от System.Object :)

Чем ему пригодятся знания о существовании Hashtable и каких то методов в нем, если он не будет иметь представления о том что такое хэш-функция?
Изучение технологий, библиотек, фреймворков и паттернов конкретной платформы это уже следующий шаг после овладения основами программирования. Бесполезно начинать учить Hibernate, не имея представлений о реляционных бд и sql.

И никто не говорит об «абстрактной теоретической подготовке» — программирование это не матан — теория без практики здесь никому не нужна, поэтому повторюсь: рекомендованная литература носит сугубо практический характер.

Никто не возьмет работать «за еду» абсолютного новичка

Бедные выпускники ВУЗов, как же они умудряются находить работу после диплома, при этом занимаясь учебой в основное время, а не работой вместо лекций?

Чем ему пригодятся знания о существовании Hashtable

А можно и не знать, что такое хэш-функция, и прекрасно пользоваться этим классом, поверьте :)

Бесполезно начинать учить Hibernate

Это типа бесполезно учить SQL, не зная булевой алгебры :)
p.s. ИМХО, джун, на которого пока может претендовать автор топика, это приложение к рукам более старшего товарища: говорят. сделай то-то, он делает... Ему нужно знать практическую часть ИМХО. Всякие алгоритмы и т.д. — ну в этом случае сеньор должен задать ему, так сказать, вектор направления. Если нет оговорок — все по существующему окружению приложеия, например, по фреймворку. Поэтому ИМХО во главе угла — технологичность, а не алгоритмы, на этом этапе развития специалиста.
Вот пример: скажем, есть джун, есть среда .net, я ему говорю — вот солюшн наш, вот DLLка в виде неуправляемого кода, нужно в солюшене создать новый проект, подключить к нему эту сборку, и сделать формочку для ввода данных и передачи их в этот DLL движок. Совсем не сложно, верно?
И вот если он не реализует IDisposable и сделает кривой маршаллинг данных (типа long вместо IntPtr) — во-первых, он поймет, что на данном жизненом этапе ему фундаментальные знания не нужны, во-вторых, отправлю его учить COM interop в .net :)

А если он сразу почует, что нужно делать проверку и на 64 bit OS, и напишет соотв. реализацию — то он автоматом переходит в мидлы :)

Бедные выпускники ВУЗов, как же они умудряются находить работу после диплома, при этом занимаясь учебой в основное время, а не работой вместо лекций?

Думаете потому что они никогда не учили никаких алгоритмов и прочей «ненужной» ерунды? ;)

А можно и не знать, что такое хэш-функция, и прекрасно пользоваться этим классом, поверьте

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

ИМХО, джун, на которого пока может претендовать автор топика

Какой джун??? Для джуна да, знание технологий не мене важны чем хорошая фундаментальная база. Но мы говорим о человеке, который делает первые шаги в программировании... — Если вы посмотрите мой первый пост с которого началась наша дискуссия, то я сразу написал:

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

Вот на этом этапе уже изучаются конкретные технологии, и лишь после него он уже сможет претендовать на джуна. :)

Думаете потому что они никогда не учили никаких алгоритмов и прочей «ненужной» ерунды? ;)

Если мой ВУЗ, считающийся лучшим в Харькове, хоть в какой то мере отражает ситуацию с Ай-Ти образованием Украины, то вполне могут и не учить. У нас была толковая математика, толковое железо и уже не такая толковая физика, но профильные предметы — тихий ужас. Какие там алгоритмы.

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

Начинать надо с С. Смолтолк по большей части мертв, ибо проектов мало. Так что имеет смысл после С смотреть на идейного наследнка Смолтолка (Обжектив-С), которым распространен, как я не знаю кто.

Нафиг Smalltalk! Ассемблер для 8086! :)

Тю. Только БИСы и аналоговые схемы, только хардкор тогда уже.

А чего бред? Система команд современных пентиумов — это 8086 + защищенный режим + новые математические команды сопроцессора + нанотехнологии :) Ну и регистры расширились в 2 или 4 раза :)

И вообще, девелоперы, достигшие дзена и просветления, пишут на асме под венду (формочка на асме — около 20 строк кода)

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

При чем тут мертв? Я говорю про изучение программирования. На Smalltalk-e реально понять что такое настоящее ООП, тестирование, рефакторинг, экстремальное программирование, метауровни, лямбда-функции, на которых весь Smalltalk. И все это на очень доступном уровне в простом IDE.
Да и кстати, Smalltalk далеко не мертв.

>Я говорю про изучение программирования.

И я про него. Изучать надо базы, к коим смолтолк не относицца, в отилчии от С.

Изучать же ООП надо уже на том, на чем будешь писать. Толку от кеевского ООП, если почти всюду парадигма ООП страуструпоподобная? К тому же, зачем учить на смолтолке, когда все фичи смолтолка есть в Обжектив-С? И тут встает вопрос живости, на смолтолке пишут мало, на обежктиве — много и часто, соответственно, шансы на работу выше.

З.Ы. Это не значит, что я против смолтолка. Язык, как папа обжекетива мне крайне нравицца, но давайте будем реалистами, юноша же не JFF учит проггерство, да?

Тестирование, рефакторинг, экстремальное программирование вообще не относятся к конкретным языкам. ООП от языка к языку отличается, знание ООП на смалтолке не гарантирует его успешного применения на том же Шарпе. И вообще, если топикастер хочет изучать программирование с целью получения работы, то ему нужен востребованный язык, а в левой теорией можно и потом разбраться. Так что С->C++>C#/Java.

>>С->C++>C#/Java.

You’re doing it wrong.

C->Objective-C.

не поверишь, недавно ковырял смолток , прикольная вещь, тем более на нынешнем железе , не понравилось только одно — там мышкой надо почти все время... прямо делфи какой-то

Не поверишь, я тоже. Прикольная. А теперь представь, что я пишу постоянно на родственном смолтолку языке и от этого балдею. Но ведь мы не аспект прикольности СТ обсуждаем, а целесообразность изучения с точки зрения изучения баз и работы, да?

ну тут да.

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

Хех. Походу, ты не сткалкивался с лиспом? СТ — не единственный, чья машина так умеет. ДУмаю, и еще наберецца языков. Другое дело, что для людей СТ наиболее прост, по сравнению с остальной кавалькадой.

Не пойму, откуда этот дрoчь на смолтолк, все равно он не первый ОО-язык.

Smalltalk самый легкий для изучения. Точка.

И один из самых бесполезных.

Программирование — знание языка? ОМГ. Вы явно что-то упустили в своей жизни.

Мы говорим об изучении смолтолка с вами? Он бесполезен для ребенка, который только думает учить проггерство. Оценить красоту и удобство он не сможет, работу по этому языку найти крайне сложно.

Если мы говорим об изучении программирования, как такового, как науки, то тем более SТ не впился, т.к. на его примере не выйдет изучить парадигму, которая наиболее распространена (С++ - подобное ООП), не выйдет и изучить то, как работает машина на уровне памяти. Изучить базовые алгоритмические вещи можно, но для этого есть С или Паскаль, который еще проще ST для таких вещей.

Первый полноценный. До него, были потуги, а он все эти потуги объединил.

Simula вполне полноценный ОО-язык. Причем более полноценный чем С++.

С++ - не ООП, а ошметки.

Simula — годный ОО, но ООП на нем не выполнишь. Ибо первым термин «ООП» определил как раз папа смолтолка Кей, а более ранняя симула под него не попадает.

Если я не прав и в симуле есть все нижесказанное:
OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme LateBinding of all things.

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

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

Лично я не могу доверять языку в котором у Integer около 1000 методов.

Лично я не могу доверять холодильнику, в котором стоит около 1000 сортов пива

Вы все так интересно пишите: «Осваивайте то на чем собираетесь кодить на первой работе и вперед на собеседование. » А вышее образование уже не спрашивают? Я говорю про Украину? А даже если говорить про зарубежъе, то как туда можно попасть без опыта роботы?

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

>А даже если говорить про зарубежъе, то как туда можно попасть без опыта роботы?

Фриланс. Лехко.

Я совсем неопытный разработчик, но попробую что-то сказать )

И наверное никогда не стоит читать книг типа «с[<,c++][<,java] для чайников». Мне когда-то посоветовали начать учить с++ с Страуструпа. Мне было 12 лет и мне было сложно, так как не было возможности с кем-то посоветоваться или спросить(например про указатели, ссылки), не было у меня тогда нормального\доступного интернета как сейчас. Начал с С. Прата «ЯП С++» и был доволен )

А вообще я соглашусь с комментарием: «лучший способ научиться программировать — начать программировать». Читайте книги и ставьте себе разные задачи, по ходу дела у вас будут возникать вопросы и с ними будите обращаться к литературе, затем пробовать решать эти задачи.

лучший способ научиться программировать — начать программировать)

Я бы лично посоветовал начать с С, и покурить www.cplusplus.com/...es/tutorial.pdf (чтобы пришло прозрение насчет векторов, указателей, разыменовывания указателей — базиса синтаксиса, так сказать, указателей на функции, фундаментальных типов данных). Потом плавно учим WinAPI (делаем упор на работу с формами — туеву хучу функций, многопоточность, WinSock, работа с файлами, сообщения (аж 3 типа), локализация, ну и естественно стандартные библиотеки С. А также с помощью какой директивы аттачится к отладчику :). Потом пытаемся овладеть STL. Если есть желание писать на сях под дотнет (лично у меня — нет:) — курим CLI. После ставим Windows SDK, и под Visual Studio пытаемся написать хэлловорд, при этом гугля по поводу какого ругается линкер или какая должна быть сигнатура главной функции, какие свойства должны быть в проекте (после этого, реально понимаешь, что такое гвнокодер :). Ну и какой вообще общий подход + message loop :) Если желание учить дальше не пропадет — можно читать MFC.
Я лично си осиливал после C$, реально — фреймворк просто инкапсулирует некоторые фичи, поэтому многие вещи, с которыми на шарпе на ты несколько лет, шли как по маслу.
Потом, можно учить, как наджаве, в частности под ондроед, писать на С, используя фичу под названием Java Native Interface :)

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

Я бы лично посоветовал начать с С, и покурить www.cplusplus.com/...es/tutorial.pdf (чтобы пришло прозрение насчет векторов, указателей, разыменовывания указателей — базиса синтаксиса, так сказать, указателей на функции, фундаментальных типов данных). Потом плавно учим Linux Kernel (делаем упор на работу с процессами — пару функций, многопоточность, sys/socket, работа с файлами, сообщения, локализация, ну и естественно стандартные библиотеки С. А также с помощью какой директивы аттачится к отладчику :). Потом пытаемся овладеть STL. Если есть желание писать на сях под mono(лично у меня — нет:) — курим CLI. После ставим Qt SDK, и под Qt Designer пытаемся написать хэлловорд, при этом гугля по поводу какого ругается линкер или какая должна быть сигнатура главной функции, какие свойства должны быть в проекте (после этого, реально понимаешь, что такое гвнокодер :). Ну и какой вообще общий подход + message loop :) Если желание учить дальше не пропадет — можно читать GTK.
Я лично си осиливал после Java, реально — фреймворк просто инкапсулирует некоторые фичи, поэтому многие вещи, с которыми на джаве на ты несколько лет, шли как по маслу.
Потом, можно учить, как наджаве, в частности под ондроед, писать на С, используя фичу под названием Java Native Interface :)

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

Linux Kernel программер гораздо актуальнее чем виндовый, и зарплаты примерно как в JavaEE — то есть самые высокие. Да и холивар же.

Да мы народ скромный, бодишопский, линух кернел на аутсорс вроде не отдают

Да уж, чувствую себя полным джуном :)

Герберт Шилдт — С++. Руководство для начинающих? Если это — www.ozon.ru/...ail/id/5089079 — она, то рекомендую. Я бы лично посоветовал бы вам начать с С++, проникнутся основами ООП, и потом немного поучить чистый С. Насчет Явы, да, это правда, языки многим похожи. Кстати, говорят, книга Дейтлов неплохая, но утверждать ничего не могу так как не читал, тем более, что Шилдт дешевле ;)

начать с плюсов а потом учить С? Оригинальный совет! Давайте сначала научимся управлять самолётом, а потом на мопед пересядем.

Дело не в этом! Дело в том, что начав с С, человек может потом не привыкнуть к ООП (аж если человек выбрал Яву, то, очевидно, что ООП для него важно). С можно особо не учить, просто немного среднеуровневого процедурного программирования в любом случае не помешает, тем более, что средства С действуют и в С++.

По хорошему, Керниган и Ричи в базе это на 2 недельки под чай с печеньками, зато будет понятно как переменную в плюсах определить.

Насчет K&R я не сомневаюсь, сейчас и эта книга у меня есть. Дело-то в том, что K&R — это не совсем учебник — скорее руководство по языку (хотя и не спорю, очень простое), и кстати, после Шилдта K&R пойдет просто отлично, проверено на собственном опыте.

проникнутся основами ООП

Вот Си как раз тем и хорош, что не декларирует определенной парадигмы: хочешь — пиши процедурно, хочешь — объектно :)

Объектно? На С? Ну не все же знают С на уровне Линуса и людей из проекта Gnome.

Легко. Парадигма от языка не зависит, если он вообще позволяет писать в стиле нужном дял данной парадигмы (иными словами, в любом императивном языке даже без поддержки объектов можно писать в объектной парадигме).

Не верите? Текстовый редактор в зубы и извольте изучить Apple’овскую CoreFoundation.

Начните сразу с Хаскелля

А что в этом совете плохо? Есть те кто начинает с PHP и в итоге ниочем

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

1. Полный справочник по JAVA SE 6 Edition, 7 издание; Герберт Шилдт;

2. Философия JAVA; 4 издание; Брюс Эккель

А вообще следует юзать гугл

А нагуглить ответ на ваш вопрос не получилось?

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

Например, в заголовке вы сообщаете, что хочете изучить программирование. Какое именно? Их много, этих программирований.

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

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

Посему начните с того языка, на котором программируют в вашем окружении.

Если в вашем окружении не программируют — выходите из этого окружения, бо всё пропадет втуне.

А еще учитьсе грамотей русскаго, ни памишаит.

К стати слышал о том что лучше начинать с С+ +, тогда легче освоить Java — это правда?

Ну как тебе сказать, мне конечно сейчас выучить джаву будет полегче чем лет 10 назад... Кроме того чем шире твои горизонты тем они у тебя шире, но, всё-таки если твоя цель джава я б рекомендовал её и учить, если спп — учи его

Да и хотелось бы услышать отзыв о книге Герберт Шилдт — С++. Руководство для начинающих — можно ли начать свой путь с неё?

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

Ещё по плюсам активно предлагают новичкам книжку Стенли Липмана — говорят что лучшая, сам её разве что держал в руках.

Нет, она довольна жесткая. Издание 2002 года.

Фамилия Автора интересная :-)

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

З.Ы. Почему ява, а не обжектив-с?

З.З.Ы. Вы б сначала выбрали сферу, где хотите работать, а от этого уже отталкивались в том, что вам надо учить. В люобм случае, знакомство с С — обязательно, а с С++ хотя бы поверхностное — вреда не будет.

Извиняюсь за отход от темы но...... Это напоминает ситуацию когда кто-то новенький приходит в тренажерный зал и спрашивает :"Как мне накачать мышцы" и тут же к нему подбегает стадо дрыщей и начинают промывать мозг))) Я в программировании слаб и тоже мучаюсь данным вопросом и после общения с людьми «проф» в данном исскувстве прихожу к выводу:"ДУМАЙТЕ САМИ РЕШАЙТЕ САМИ (ИМЕТЬ_ ИЛИ_ НЕ ИМЕТЬ) :)

ЕСЛИ
____ иметь()
ТОГДА

____ как именно(ПОЗА);

«1С» — «неприличными словами не выражаться!» © некто Шариков

:)

Только перед этим инглиш.

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

Ай, малаца! Повеселил с утреца.
Особенно понравилось — видеть сквозь одежду и, не бояться секретарш. :D

ПЯТЬ БАЛЛОФФ, ЯПЛАКАТЬ!

Если бы не «аллергия на офисную пыль», то можно было бы предположить, что это действительно сочинение школоло. А так очень тонко, явно писал взрослый.

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

Where are the “Why I Love Python” slides from the keynote you gave at the Python conference?

www.mindviewinc.com/.../LovePython.zip

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

Наверное, Вы правы. Изучайте С++.

В такой последовательности много технического смысла.

Однозначно сразу Джава — легче, эффективнее (в плане поиска работы). Освоение Джава через С++ както слишком сложно, С++ вам может никогда не пригодиться. Хотя если у вас уйма времени и вы не ищете легких путей — тогда вперед, знание нескольких языков никому не помешает.

Поддерживаю, начинайте с С++ (сам когда то начинал с С). Про Шилдта С++ ничего сказать не могу, но Шилдт C# - книга очень простая и толковая.

Если нет вообще ни какого опыта(Pascal,Basic, etc.) то лучше обратиться к учителю. Но java проще в изучении. А еще проще Python.

Начните с поиска по форуму.

Подписаться на комментарии