LINUX.ORG.RU

Какой ЯП выбрать?


2

1

Всем привет. Вопрос этот поднимался 100500 раз в интернетах, но я опять задам его. Мне 15 лет, дружу с математикой (и очень люблю её), но вот ответ на свой вопрос я так и не нашёл. Больше мне нравятся скриптовые языки (по синтаксису и «смыслу») и хочется заниматься вебом (серверная, а не клиентская часть). До этого я не программировал и сказали, что PHP/Ruby/Perl как первый ЯП не подходят, а вот Python подходит отлично. Правда ли это? И какую лит-ру по Python 2.x подскажите (говорят Python 3.x для веба совсем не подходит).

Но! Прежде чем заняться вебом, я хотел бы вообще выучить алгоритмы и т.д, т.к хочу стать программистом, а не тупым кодером. Так что книги заточенные под веб (если брать книги по Python), а надо «общую» книгу, где объясняются азы и самого ЯП, и программирования в общем.

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

Всем заранее спасибо!

Перемещено maxcom из general

Ответ на: комментарий от Nagibator98

ООП вне языков. ООП учить надо независимо отнизкоуровневой чуши.

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

Питон не испортит, MIT гарантирует это.

Дык, насколько понимаю, на питоне там преподают как раз не-программистам (типа робототехников), а что касается тех, у кого computer science - основная тема, то их мучают по-прежнему лиспом и sicp.

dave ★★★★★
()
Последнее исправление: dave (всего исправлений: 1)
Ответ на: комментарий от dave

Питон не испортит, MIT гарантирует это.

Дык, насколько понимаю, на питоне там преподают как раз не-программистам (типа робототехников)

Это неважно.

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

Это неважно.

Наш автор пишет: «[...] я хотел бы вообще выучить алгоритмы и т.д, т.к хочу стать программистом, а не тупым кодером.»

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

зря??? значит ты не курил Алгоритмы + структуры данных == программы

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

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

есть оптимизаторы - книжка(бетонная) для вторых.

по факту это не должности - а навыки и специализации

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

если уж рекомендовать Кнута то Конкретная Математика

ТС писал, что для него математика - не проблема. Пусть изучает, одно другому не мешает.

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

на сколько баллов было самое бальное задание которое сам решил?

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

Вообще, матана у Кнута конечно много, ну что поделать… Его и в жизни не мало, только у web-говнокодеров матана нет.

drBatty ★★
()

Сначала следует подучить английский - без него никак. Стартовать лучше с Free Pascal. Если чувствуешь в себе силы - с Python.

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

если совсем не прогал. и компитентен в матане то можно сразу питон

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

А почему ты промолчал про лисп?

Почему не предлагаю дифференциальное исчисление человеку, который читать и писать не умеет?

mv ★★★★★
()
Последнее исправление: mv (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Special for you :) Python - язык слишком высокого уровня. Вначале нужно разобраться с низкоуровневым. Запутаться в указателях там, поймать не одну утечку памяти, споткнуться о то, что твоя локальная переменная уже тю-тю из-за того, что стек находится совсем в другом состоянии, ну и куча всего другого (кстати, точно такую же ошибку с локальной переменной я не так давно поймал в common lisp в чужом коде, но быстро раскусил - вот там дикая смесь очень высокоуровневых и довольно низкоуровневых вещей, на выбор).

Тут добрые люди советуют начать со Scala. Ну что же, на ЛОРе и не такое бывает. Почему бы и нет? А чем питон тогда лучше? Но я считаю, что плох тот программист на Scala, который не представляет себе, как она может быть скомпилирована на Java, а потом, как Java может быть скомпилирована на Си, и наконец, как код на Си может быть переведен в машинные коды (эх зря, отдал одному товарищу такую классную голубенькую книжечку с компилятором довольно большого подмножества Си - чертовски теперь жалею). Хотя, быть может, я требую слишком многого :)

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

Вначале нужно разобраться с низкоуровневым.

Почему именно в начале?

Запутаться в указателях там, поймать не одну утечку памяти, споткнуться о то, что твоя локальная переменная уже тю-тю из-за того, что стек находится совсем в другом состоянии,

Что-то не припомню, чтобы такие проблемы были в Scheme (ага, тот самый SICP, с которого начинают обучение Ъ-прогеров в MIT).

Тут добрые люди советуют начать со Scala. Ну что же, на ЛОРе и не такое бывает. Почему бы и нет? А чем питон тогда лучше?

Потому что Scala идет с двойным грузом - JVM и очень нетривиальной системой типов.

плох тот программист на Scala, который не представляет себе, как она может быть скомпилирована на Java, а потом, как Java может быть скомпилирована на Си, и наконец, как код на Си может быть переведен в машинные коды

Не понимаю, почему ты остановился. Давай спустимся вниз до микроархитектуры, потом до триггеров и вентилей (кстати, всё это реально полезно). Но мы говорим о первом языке или об университетском курсе CS/SE?

P.S. ИМХО, прогеру на Scala нафиг не нужно знать, какой машкод получится из его программы.

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

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

P.S. ИМХО, прогеру на Scala нафиг не нужно знать, какой машкод получится из его программы.

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

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

Тогда пусть товарищ пообещает нам после питона обязательно изучить си.

...параллельно с SML :)

Кстати, почему не посоветовали coursera?

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

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

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

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

например во всех алгол-языках различаетя «lvalue» VS «rvalue» семантика одного и того же терминала ( имя переменой )

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

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

sml - если сильно не танцевать вокруг строгой типизации - а чисто как язык описания процедур - вполне хорош для научения алгоритмизации

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

Тогда пусть товарищ пообещает нам после питона обязательно изучить си.

...параллельно с SML :)

Да, тут без честного пионерского не обойтись.

Кстати, почему не посоветовали coursera?

Я про нее почти ничего не знаю. Заходил на сайт пару раз и все.

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

Алголовские языки хороши для обучения. Мне школьником очень нравились Modula-2 и Ada-83. Наверное, их тоже можно считать алголовскими.

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

А, понял. Я названия не помню, потому что это было 13 лет назад. Сейчас попробую пробить. Может быть, и она.

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

Да, там был Small C, но обложку не признаю. Может, и совсем забыл, как она выглядит, но по-моему обложка была другой.

dave ★★★★★
()
Последнее исправление: dave (всего исправлений: 2)
Ответ на: комментарий от qulinxao

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

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

лисп это реальный матан

никакой это не матан. Обычный ЯП, просто подход не естественный. Создатели машинных кодов тупо хотели сделать такие коды, на которых удобнее и быстрее было-бы программировать. Сделали. И не один набор, а МНОГО. Пришлось придумать C, что-бы можно было писать сразу на любой CPU, в т.ч. и тот, которого ещё или уже нет. Параллельно этим заинтересовались математики, и задумались о том, а что собственно нужно, что-бы написать «идеальный C». Нужны функции. Ну и всё. Всё остальное можно выкинуть нафиг. Так возник LISP. Один тип данных(список) + одна идиома(функция). Остальное пусть кодер додумывает, если оно ему надо. Как это не удивительно, для некоторых целей, такой подход оказался годен. Ибо избавлял от лишних сущностей, и давал возможность обдумать алгоритм. В этом смысле C получился более низкоуровневым, и более приземлённым.

Фишка в том, что как не крути, мысли в комп не запихаешь, и приходится придумывать какой-то костыль-ЯП. Не факт, что более близкий к мозгам костыль будет лучше, потому и получается так, что концептуально более сложные задачи проще решать на LISP'е, а более простые - на всяких C-диалектах.

можно конечно асемблерить и на лиспе

нельзя. Это УЖЕ ассемблер, только для очень простой придуманной машины. Но её «простота» похожа на простоту машины Тьюринга - IRL сделать невозможно.

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

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

Машинные коды делаются для _машины_. То есть для того, чтобы процессору удобно было их исполнять. Удобство человека тут и рядом не пробегало.

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

Машинные коды делаются для _машины_. То есть для того, чтобы процессору удобно было их исполнять. Удобство человека тут и рядом не пробегало.

сам-то понял что сказал? А кто код писать будет? Если ты не понял, я про ситуацию 50 лет назад, задолго до твоей JVM.

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

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

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