LINUX.ORG.RU

> с чего начать? хочу серьезно этим занятся

С того, что определиться с ответом на вопрос: «Что я хочу писать?». Иначе тебе сейчас тут дадут 10500 вариантов, и каждый из них будет верным, с одной из точек зрения.

Norgat ★★★★★ ()

Это очередной вброс для холивара? Незачёт.

хочу серьезно этим занятся

В какой именно области?

с чего начать?

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

geekless ★★ ()

Python и C, очевидно же.

GotF ★★★★★ ()
Ответ на: комментарий от MaZy

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

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

babusha ()

схему выбирай. Не ошибёшься.

ugoday ★★★★★ ()

coq или agda

anonymous ()
Ответ на: комментарий от MaZy

> хочу чтото универсальное,

Твайумать, в какой области универсальное? Не бывает универсального для всего.

может с++ попробовать?

Попробуй, если секса не хватает.

geekless ★★ ()
Ответ на: комментарий от geekless

я наверно не понимаю, какие области бывают.

определенной цели «чтото именно писать» нету, просто хочу понять

MaZy ★★★★★ ()
Ответ на: комментарий от MaZy

> хочу чтото универсальное, может с++ попробовать?

Имхо, разберись в C\C++ с тем, как работать с динамической памятью, а потом переходи на... да на Java хотя бы.

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

Norgat ★★★★★ ()
Ответ на: комментарий от Norgat

Он хочет писать калькуляторы и etc. Си ему нужен, Си!

babusha ()
Ответ на: комментарий от MaZy

Ну кстати можно по классическому пути: C (вот даже не в курсе про хорошие книжки) потом С++ (Страуструп, Мейерс, Саттер, Александреску, ...) и ООП (Буч, Банда и т.д.) ну и параллельно всякое дополнительное типа «Идеального кода» и т.д. и чего-нибудь по алгоритмам (если очень суров - то можно и самого Кнута). Потом по ОС (можно Иртегова, к примеру, ну и Танненбаума и т.д. Лекции МИТовские просто супер, кстати), по сетям, по БД, по компиляции.. Ну и для расширения кругозора можно чего-нибудь по функциональщине, тут народ лучше подскажет.

Года за 4 управишься. :)

gizzka ★★ ()
Ответ на: комментарий от MaZy

Чтобы иметь нормальный бэкграунд, для программирования как такового, желательно понимать, как крутится всё в машине на относительно низком уровне. Лучше всего изучить Си и _понять_ лежащие за ним идеи: указатели, индексация вектора, стек, куча, управление памятью, экспорт имён, линковка бинарников и т.п. (Желательно еще и асмом для целевой платформы владеть, но не обязательно.)

С другой стороны, нужно не быть тупым императивщиком, накручивающим код из 100500 вложенных циклов и условий, а развивать алгоритмическое мышление и понимание различных парадигм. Лучше взять для этой цели Руби/Питон. Я бы лично рекомендовал Руби. Очень богатая стандартная библиотека + мощный синтаксис, позволяющие писать почти в функциональном стиле. Ну и там грамотное ООП, разумеется. Всевозможные C# и прочие жавы недостаточно высокоуровневы для этого, сильно грузят мозги избыточными деталями. В перспективе после Руби - изучение CL, если попрёт.

Так что берём Си + Руби + хорошие книжки по сабжам.

geekless ★★ ()
Ответ на: комментарий от geekless

Я не хотел советовыть руби, если не знаю какой то другой язык, то в руби наверно еще труднее разобраться, и тем более — руби есмъ ООП, а для обучения ООП не нужно.

babusha ()
Ответ на: комментарий от babusha

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

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

geekless ★★ ()
Ответ на: комментарий от MaZy

> приведи пример, когда оправданно?

Один характерный и распространённый пример, когда оправданы C++: высокопроизводительные графические приложения — движки игр и сред 3d-проектирования. Нужна производительность уровня Си с одной стороны, с другой же стороны игра - это не ядро, которое 20 лет в разработке, нужно за 2 года склепать, кое-как отладить, выпустить и забыть. C++ имеет смысл при такой постановке вопроса.

geekless ★★ ()
Ответ на: комментарий от MaZy

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

babusha ()
Ответ на: комментарий от MaZy

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

Norgat ★★★★★ ()

Вопрос слишком общий. Знания свои ты не обозначил, будем считать, что ты студент без оных. Поэтому переформулирую твой вопрос: «Как стать программистом, а не кодирующей обезьяной?»

Про паттерны ЗАБУДЬ. Пока. Сейчас для тебя паттерны — это антипаттерн. :) Когда ты до них дорастёшь, такие вопросы уже задавать перестанешь. Раз спрашиваешь, чего это — не трогай. А то голова уже болит от юниоров, клепающих эти паттерны к месту и (чаще) не к месту. Это приходит вместе с чувством меры, вместе с практикой.

Далее: McConnell — неумный зануда, мешающий разные вещи в один котёл, слушать его не следует. Этот перец как раз из таких, которые делать уже не могут, принимаются учить. Хотя кому что. Если не чувствуешь, что бякой кормят, то вперёд, будешь бякой сам.

По теме поддерживаю SICP, HTDP, Pragmatic Programmer. Хватит для начала. Далее уже книги по алгоритмам и по языкам программирования, которые будешь применять. По алгоритмам Кнута неплохо бы осилить хоть 1-й том, хоть в режиме «могу понять, о чём это всё». Сейджвика (Robert Sedgewick) почитай, он полегче. По языку, который будешь в ближайшее время в основном использовать книг приличных. Не «выучу за 21 день», а самые глубокие основы, потом уже детали и практику применения.

Языки ты не указал, могу подкинуть идею: выбирать на двух уровнях. Во-первых из тех, что используются в отрасли: C, C++, Java, C#. Первый знать необходимо, второй полезно (и как мощную гимнастику, как дополнительную базу), на последней паре легче будет найти работу, в том числе за рубежом. К тому же после C++ последняя пара это вообще отдых.

И во-вторых действительно высокоуровневые языки, которые обязательно изучать параллельно, чтобы мозги не приросли к одной парадигме. Лисп, конечно — уже боевой CL, а не урезанную scheme. Это и гимнастика для ума и мощный инструмент в одном флаконе. Книги: Practical Common Lisp Successful Lisp On Lisp Common Lisp the Language

И т.п. по гуглам, ссылкам (lambda-the-ultimate.org хотя бы, там ещё ворох ссылок найдёшь).

Читай, сколько сможешь, систематизируй и практикуй. Кодогенерация [на лиспе] — вещь. Изучи её. (c) За нею будущее. Не сможешь — так и будешь лапками _все_ свои программы набирать. В отличие от. :)

http://www.linux.org.ru/jump-message.jsp?msgid=4497049&cid=4498207

anonymous ()
Ответ на: комментарий от MaZy

Не могу: мне С во все поля хватает.

А вообще, подозреваю, что в случае реальной необходимости ООП и наследований классов...

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от MaZy

> С и С++ сильно отличаются? это же родственники, не?

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

Если все-таки решишь изучать C++, обязательно изучи этот сайт http://yosefk.com/c++fqa/ и подумай над своим выбором ещё раз.

nozh ()
Ответ на: комментарий от Eddy_Em

> А вообще, подозреваю, что в случае реальной необходимости ООП и наследований классов...

Добавлю, что в случае реальной необходимости, ООП и наследование как в C++ можно сделать в C на структурах и указателях на функцию.

nozh ()
Ответ на: комментарий от nozh

Там нельзя сделать перегрузку операторов (что иногда нужно, но это «иногда» чуть чаще, чем «никогда»); нет явного наследования: дочернюю структуру придется либо копировать с родительской (внося нужные изменения), либо создавать в ней объект - родительскую структуру...

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

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

> Но я примера придумать не могу.

Быдлокодинг игровых движков. И то не всяких, впрочем. Я, на самом деле, других примеров тоже сходу найти не могу. Во всех случая получается что: либо экстремальная производительность не критична (или проблемные места можно вынести в отдельный модуль на Си), либо высокоуровневость некритична, либо наоборот средств Си++ недостаточно для обеспечения нужной степени высокоуровневости.

geekless ★★ ()

C - это для уже более-менее опытных. Как ни странно, для начального обучения/практического использования рекомендую freepascal, или что-нибудь еще паскалеподобное вроде модулы или ады, но это маргинальщина^W экзотика. С одной стороны даст понятие о низкоуровневых must know вещах типа «указатели, индексация, стек, куча, управление памятью, экспорт имён, линковка бинарников», о реализации списков, деревьев, алгоритмах сортировки и т.п. С другой стороны язык строгий, высокоуровневый, приучит к культуре написания четкого и ясного кода, и, в большинстве случаев, не даст выстрелить себе в ногу. С третьей - по производительности и потреблению ресурсов примерно на одном уровне с C/C++, более чем пригоден для создания качественных приложений. В отличие от всякого модного г...

Следующим этапом можно и C/C++ осваивать. А затем уже, под влиянием ЛОР-а, внезапно открыть для себя волшебный мир LISP :)))

Вот такой ТРУЪ-way.

anonymous ()

C, C++ изучи, но главное - и не думай на них программировать. Они нужны для понимания принципов выполненения программ. Когда разберешь, тогда садись серьезно за Java или C#.

vertexua ★★★★★ ()
Ответ на: комментарий от MaZy

Госспади, и как меня в этот топик занесло-то???

приведи пример, когда оправданно?

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

Плюсы позволяют гораздо меньше думать о всякой рутине типо освобождения ресурсов в случае ошибки (RAII, smart pointers). И это очень сильно сокращает спектр ошибок, которых можно наделать. И код более емким становится, больше смысла, меньше вознию. Ну и благодаря шаблонам там куда более богатые возможности в компайл тайме. Чего стоят хотя бы Boost.MSM, Boost.Spirit. А если уж про C++0x (грядущий стандарт) говорить...

Если конкретных целей стать программистом нету - поддерживаю совет изучить Scheme по SICP. Хотя, может оказаться не самым простым чтивом.

ratatosk ()
Ответ на: комментарий от vertexua

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

п.с. Лично я гораздо больше fun'а получаю от С++ нежели от Java.

ratatosk ()

Без знания родного человеческого языка изучение машинного - преждевременно.

Shtucer ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.