LINUX.ORG.RU
ФорумTalks

“Программируйте с использованием языка, а не на языке” vs быдлокодерские и небыдлокодерские языки


4

2

//Видит бог, тему хотел создать в Talks...

Здравствуйте. Я новичок в программировании, опыта работы у меня нет. Следовательно какие-то особенности работы программиста, явления в программировании и “подводные камни” для меня могут быть скрыты. Сейчас я подыскиваю работу или место для стажировки и мне стали доступны вакансии C#-программиста и Python-программиста.

И вот в чём мой вопрос.

Я заметил, что существует два образа мышления среди программистов:

1. “Программируйте с использованием языка, а не на языке”. Программист – это образ мышления, способность к абстракции, логике, знание алгоритмов. Язык – это лишь инструмент для выполнения определённой задачи. Если ты хороший программист, то ты (с некоторыми оговорками) можешь решать разные задачи, на разных языках.

2. В мейнстримовых языках снижают порог вхождения. Их делают простыми. Технологии развиваются таким образом, чтобы сделать создание программ максимально простым и быстрым. Это правильно, но приводит к тому, что программисты “тупеют”, можно быть программистом, не зная основопологающих и очень важных вещей. Таким образом появляется деление на “быдлокодерские” и “небыдлокодерские” языки. Соответственно, программирование на “быдлоколерских” языках какбы отупляет.

С одной стороны есть C#. Он считается, как мне показалось, именно “быдлокодерским”. С другой стороны Python. Конечно, не haskell какой-нибудь, но язык (опять же – как мне показалось), считается серьёзным, пользуется популярностью в академиечских кругах, сам видел MIT'шные курсы на нём.

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

И в итоге, главный вопрос: в начале карьеры, стоит ли выбрать программирование на серьёзных языках (то есть, принять ли правильным пункт 2), или не парить себе мозг (принять пункт 1)? Или возможно, даже если первый пункт верен, всё равно стоит предпочесть Python?

Перемещено post-factum из general


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

ну хз, мне возможностей c99 хватает

я не про возможности, а про типизацию, которая в C++ таки есть, и вполне строгая(компилятор выдаёт warning, и этого достаточно. В любом случае, при желании в любом языке можно сконвертировать всё что угодно куда угодно. Просто в C++ это можно сделать наиболее очевидным способом)

99 хватает, а ведь есть еще c++11, который вообще жесть и не особо понятно, зачем это все нужно в императивном языке

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

int increment(int x)
{
    return x+1;
}
просто эквивалентно x++ для целых, компилятору достаточно сложно. А макросы сложно читать/отлаживать.

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

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

но тогда откуда претензии к С++11? там есть мовающие конструкторы, специально для использования некопиабельных объектов в списках, векторах, и т.д. уже одно это стоит того, чтоб проклять старый с++03.

и лямбды хороши собой весьма. и <thread> и <atomic>. и variable templates в некоторых ситуациях весьма облегчают жизнь.

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

те же лямбды просто тупо удобны

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

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

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

не будь интелисенса неймспэйсы были бы более лаконичны.

динамически - картина следующая инструменты облегчающие всякую деятельность не только повыщают производительность у лучших , но и снижают порог вхождения для «худших» т.е интелисенс(+ подобные) не левелап(+100 к) всем его использующим ,а амплифаер(*10) т.е при «отрицательных» навыках прямо уходщающий ситуацию ( т.е создание проходящего компиляцию ужаса тем лицом которое просто напросто не знает используемой подбиблиотеки но следующей рекомендациям интелисенс)

регулярные выражения регулярным выражениям рознь.

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

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

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

http://channel9.msdn.com/blogs/matthijs/anders-hejlsberg-trends-and-future-di... с середины 1 по 3 четверть включительно 7 минуты.

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

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

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

кстати +1. ИМХО это исправление давнишней кривизны C++. Их ещё Страуструп должен был придумать, но не осилил.

и лямбды хороши собой весьма. и <thread> и <atomic>. и variable templates в некоторых ситуациях весьма облегчают жизнь.

ещё ++

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

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

Зачем они?

т.е. зачем лямбды в Си++?

удобно.

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

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

и что?

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

проблема не в ЯП и не в редакторе. Промлема в засранном нэймспейсе.

ne samozarojdena, a sledstvie

ты что там пьёшь? делись!

drBatty ★★
()

В мейнстримовых языках снижают порог вхождения. Их делают простыми

К сожалению, их обычно делают ешё более сложными и раздутыми (ср: C vs C++ vs D). Сотни фич могут поначалу упростить написание программы, но в итоге усложняют полное изучение языка и способствуют неразберихе в коде.

Или возможно, даже если первый пункт верен, всё равно стоит предпочесть Python^WGo, если он подходит для задачи?

This. Язык — инструмент, и стоит выбирать наиболее простой и удобный для конкретной задачи.
---
Но программировать на PHP не стоит, причём примерно по той же причине, почему не следует писать скрипты на csh.

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

qulinxao
ne samozarojdena, a sledstvie

Это у него гуглопереводчик с китайского настебнулся ☺

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

Чини свой гуглопереводчик! Он у тебя херачит латинницей!

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

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

Зачем они?

Функциональное программирование.

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

ешё более сложными и раздутыми (ср: C vs C++ vs D)

кто мешает тебя НЕ использовать всякие лямбды, и писать на C++ в стиле C? Религия?

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

...разруха не в клозетах, а в головах. Значит, когда эти баритоны кричат «бей разруху!» - Я смеюсь.(Лицо Филиппа Филипповича перекосило так, что тяпнутый открыл рот).Клянусь вам, мне смешно! Это означает, что каждый из них должен лупить себя по затылку! И вот, когда он вылупит из себя всякие галлюцинации и займется чисткой сараев - прямым своим делом, - разруха исчезнет сама собой. Двум богам служить нельзя!

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

для решения большинства задач самый простой и удобный инструмент - лом. А лучше отбойный молоток - устаёшь меньше.

Но программировать на PHP не стоит,

про ЛЮБЫЕ другие ЯП можно понаписать в точности тоже самое. Проблема у PHP только одна - малый порог вхождения, и как следствие 100500 школьников, пишущих очередную 100500ю сортировку пузырьком. Это не относится к ЯП, в котором кстати есть и встроенные сортировки и даже интерфейсы к промышленным СУБД. Просто школьники об этом не знают, и делают таблицы из файлов, сортируя строчки в них пузырьком. Причём тут ЯП?

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

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

Зачем они?

Функциональное программирование.

что «функциональное программирование»? Это у тебя мантра такая? Религия? Я задал вполне конкретный вопрос.

drBatty ★★
()

В последнее время по ЛОРу прокатилась очередная волна лиспо- и иже с ними срачей, и бурление говн в сознаниях местных обывателей не позволило просто запшикать этот негодный тред, как это следовало сделать.
Такая инфа.

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

кто мешает тебя НЕ использовать всякие лямбды, и писать на C++ в стиле C? Религия?

Тут есть две проблемы: первая — необходимость строжайшей дисциплины в рамках проекта, вторая — компилятор становится настолько раздутым, что даже hello world компилируется по полчаса.

про ЛЮБЫЕ другие ЯП можно понаписать в точности тоже самое

Про любой язык можно написать что-то плохое, но не про любой, что он defective by design.

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

Тут есть две проблемы: первая — необходимость строжайшей дисциплины в рамках проекта, вторая — компилятор становится настолько раздутым, что даже hello world компилируется по полчаса.

ИМХО это всё из-за неумеренного применения шаблонов в хидерах. Если вся низкоуровневая ерунда лежит в Over9000 файлах, то да, hello world будет компиллится полчаса - а что вы хотели? Те-же std::string в любом нормальном ЯП(и ненормальном тоже) один раз скомпиллены, и просто работают, компиляя HW приходится компиллить и обработку строк. ВСЮ. Это получается на 5% быстрее в рантайме, и всем плевать, надо это кому-то или нет? Я уж не говорю про всякие boost'ы. ИМХО это НЕ проблема ЯП.

Про любой язык можно написать что-то плохое, но не про любой, что он defective by design.

что-же там в PHP плохого by design?

drBatty ★★
()

ЯП - это всего лишь средство реализации концепции «в железе».

drSchur ★★★
()

По поводу 1: все правильно. «Учат» естественные языки, а формальный язык - всего лишь инструмент. Конечно, это не значит, что его можно не знать. По поводу 2: ознакомься и с тем, и с тем. Чуть ли не единственный фактор, влияющий на качество кода - это прослойка между монитором и креслом.

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

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

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

Я задал вполне конкретный вопрос.

Опять грубишь. В общем, иди лесом.

слив засчитан.

drBatty ★★
()

Кмрад! Запомни раз и навсегда. Программист программирует не «на языке» или «с использованием языка». Программист программирует в рамках и в терминах своей предметной области.

В первую голову программист обязан знать устройство объектов и процессов своей предметной области. Досконально. На уровне лучших теоретиков и на уровне лучших практиков. Реализация с использованием наличествующих средств - задача, скорее, механическая.

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

Посмотри, например, http://www.cs.cmu.edu/~rwh/plbook/book.pdf Для начала сойдет, а в конце ба-а-альшой список (весьма актуальный) литературы.

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

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

Учи C#, Python для Windows такая же диковенка, как фугу на пьяном столе Васи с соседом

Наглое 4.2. Python под Windows работает, писать под него легко - сам проверял, в том числе с использованием tkinter и django. Полностью кроссплатформенный язык, и вроде как помимо windows/linux поддерживает какие-то другие ОС.

В отличие от.

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

По всему, что я видел, не сказал бы.

Быдлокодер может и на Си написать жутко прожорлимый и тормознючий код, Java тут не виновата =)

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

Что до типов, то о них думать вообще не нужно в нормальном ЯП. Пусть компилятор думает, у него голова больше. Твоя a.getB().getSomething() должна возвратить именно то, что должна. А если это не так - проблема в тебе. Получишь warning, намекающий на то, что ты ламо...

Позволю себе с вами не согласиться. Не всегда приходится писать свой код с нуля. Иногда (а именно в 90% случаев) приходится разбираться в коде, написанным другими людьми. И все люди думают по-разному (и пишут по-разному). IDE в этом плане очень помогает, если его средствами можно быстро узнать тип переменной, сослаться на определение/реализацию вызываемого метода, и т.п....

Как пытался vim освоить - не получилось. Текст в нём набирать научился, да. Текст в нём набирать может и действительно быстрее. Кстати, было для eclipse дополнение, на глаза попадалось - позволяющее использовать vim-like набор, надо попробовать поставить...

Но что касается vim like IDE - не осилил.

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

Опять в интернете кто-то не прав...

большинство IDE не умеют работать с hg

Про большинство не скажу, но http://javaforge.com/project/HGE

Кроме того, (hg не пользовался, только git почуть) - не вижу ничего сложного чтобы пользоваться этим из консоли... интеграция с IDE не так уж много делает.

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

Зря ты так. C# - инструмент. Между прочих один из самых удобных которые я знаю.

А MS головного мозга лечится использованием линукса и mono.

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

А computer science относим к математике? Или только теорию алгоритмов?

На выбор. Прикладная математика, она и в Африке прикладная математика.

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

Что до типов, то о них думать вообще не нужно в нормальном ЯП. Пусть компилятор думает, у него голова больше. Твоя a.getB().getSomething() должна возвратить именно то, что должна. А если это не так - проблема в тебе. Получишь warning, намекающий на то, что ты ламо...

Позволю себе с вами не согласиться. Не всегда приходится писать свой код с нуля. Иногда (а именно в 90% случаев) приходится разбираться в коде, написанным другими людьми. И все люди думают по-разному (и пишут по-разному). IDE в этом плане очень помогает, если его средствами можно быстро узнать тип переменной, сослаться на определение/реализацию вызываемого метода, и т.п....

это проблема архитектуры кода.

Как пытался vim освоить - не получилось. Текст в нём набирать научился, да. Текст в нём набирать может и действительно быстрее. Кстати, было для eclipse дополнение, на глаза попадалось - позволяющее использовать vim-like набор, надо попробовать поставить...

режим НАБОРА текста (который i) в vim убогий.

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

Кроме того, (hg не пользовался, только git почуть) - не вижу ничего сложного чтобы пользоваться этим из консоли... интеграция с IDE не так уж много делает.

(оно заметно)

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

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

p.s. наверное не набора, а редактирования скорее. и навигации по коду.

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

вы сказали, что НЕТУ. я опровёрг ваше утверждение. Я не пробовал эту библиотеку (я вообще на пыхпыхе не пишу), не знаю насчёт её качества.

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

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

Вообще-то довольно удобно прям во время отладки (говно)кода по-быстрому вызвать annotate и history для текущего файла и видеть хоть какие-то пояснения к коду, на котором стоит отладчик. С консолью так не получится.

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

Наглое 4.2. Python под Windows работает

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

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

это проблема архитектуры кода.

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

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

Кстати, Питер Норвиг пишет в PAIP, что одно из достоинств (общего) лиспа состоит в том, что язык программирования приближается к предметной области, когда строится такой язык (на основе функций и макросов, ясное дело), на котором уже формулируются понятия предметной области. Происходит не сразу, а постепенно в процессе разработки. Язык программы становится все ближе и ближе к предметной области.

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

Основаны эти утверждения на его богатом опыте создания и изучения программ по ИИ (AI) (целую книгу PAIP написал на тысячу страниц).

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

Реальность, конечно, сложнее. Часто встречается итеративная разработка, но в случае использования C# или Java, она все же ближе к нисходящему методу проектирования с периодическими остановками.

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

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

Категорически не согласен. Давно на практике была признана необходимость разделять людей на инженеров,теоретиков и техников.
В программировании так и происходит, только без чёткой градации и явного профессионального разделения.

ТС описал две категории, инженеров и техников.
Попробуйте на несколько лет за работу техника посадить какого-нибудь замечательного математика, к примеру писать код для какого-нибудь виджет-тулкита, типа jqueryUI. Думаю он уже через пару месяцев запьёт от тоски...

dmitryalexeeff
()
Последнее исправление: dmitryalexeeff (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.