Если ничего до сих пор серьзного не написал, то лучше всего начать с C. Потом к чему-нибудь более специализированному и удобному в своей области.
Существует обоснованное мнение, что если на чём то пишешь, то нужно знать как оно работает. т.е. используешь Java - разберись с устройством VM и GC. Используешь Python - напиши пару интерпретаторов. Используешь C - учи asm. ;)
Недавно в Москву приезжал дядька из МС, говорил, что они давно уже экспериментируют с Хаскелем. Уверял, что ФП и в частности Хаскель - это очень круто, потому что можно автоматически распараллеливать код, а это сейчас очень важно в свете многоядерных процессоров.
>Недавно в Москву приезжал дядька из МС, говорил, что они давно уже экспериментируют с Хаскелем.
вас это удивляет? ghc разрабатывается в microsoft research'е
>Уверял, что ФП и в частности Хаскель - это очень круто, потому что можно автоматически распараллеливать код, а это сейчас очень важно в свете многоядерных процессоров.
то что можно -- это все понятно(функции "чистые"), но на практике не выгодно автоматически распараллеливать (хотя паралелизовать при помощи Control.Parallel очень легко и понятно, хотя явный хак). ну еще не стоит забывать про ленивость, она сильно производительность снижает
если выбор из C и C++, то несомненно C. независимо от того, какой высокоуровневый язык будешь применять в дальнейшем, без знания C далеко не уйдёшь. удачи
я за c(системное программирование), python(всё остальное программирование), perl(логи парсить), sh/bash(стартовые скрипты итп, нужно знать в виду широкой рапсространённости).
Моё имхо C++ потерял красоту C. Слишком сложный он. Вот с C как-то гораздо проще имхо, его можно изучить прочитав Кернигана и Ритчи. А вот дока по cpp, чую, в разы больше будет.
>не учили. с системами типов у меня вообще пока плохо. если обьяснишь буду весьма благодарен
par :: a -> b -> b seq :: a -> b -> b
у нас функции возвращают значения типа b, и примимают два аргуманта с типами a и b, при этом мы никак не можем преобразовать первый аргумент (a) к типу b, а следовательно компилятор в праве соптимизировать эти определения до следующих:
>у нас функции возвращают значения типа b, и примимают два аргуманта с типами a и b
это понятно
>при этом мы никак не можем преобразовать первый аргумент (a) к типу b
а зачем ?
>а следовательно компилятор в праве соптимизировать эти определения до следующих:
вот это совершенно непонятно. почему из невозможности приведения одного типа к другому слует возможность подобной оптимизации ? и какой в ней смысл ?..
>par :: b -> b seq :: b -> b
или par :: b -> b -> b seq :: b -> b -> b ? почему теряем аргумент ?..
Нас вот в универе учили по такой схеме
Pascal-[парралельно Assembler]-C++-C-Delphi-VC
Мы всей группой в одну глотку кричали, что изучение C++ пеед С - это по крайней мере глупо, преподы же говорили, что у них щас мало времени на возню с нами и если вы освоите С++ то С считай тоже.
Хм.., глупо конечно но действенно. Хотя канеш они не стали рассказывать о различиях в действиях компиляторов С <> С++, про уловки и где что можно не писать, н главное азы потом сам книжку какую-нибудь возмешь и догонишься.
>вот это совершенно непонятно. почему из невозможности приведения одного типа к другому слует возможность подобной оптимизации ? и какой в ней смысл ?.. почему теряем аргумент ?..
потому что у нас первый аргумент никак не влияет на возвращаемое значение, т.е он не нужен.
>Выбор языка в первую очередь определяется задачей
чтобы правильно выбрать язык для решения задачи, ты должен знать эти языки. или я что-то путаю? :) вопрос ведь не стоит, на каком языке мне сделать вот это... человек спросил, с чего лучше начать ;).