LINUX.ORG.RU
ФорумTalks

Программист ли это?


0

0

Читая разную писанину на форумах и общаясь с людьми пишущих на языках сверх высокого уровня, ясли можно так выразится, я был удивлен, что много из них даже не представляют что и как устроенно в компьютере. Они слабо представляют себе как данные хранятся в памяти, что такое машинный код, ну и так далее. Для них есть просто переменная, в которую можно положить все что угодно, и все, — дальше черный ящик. Мне интересно что по этому поводу думаете вы.
1) Нужны ли эти знания человеку пишущем на Python/Ruby/PHP/Java/etc?
2) Можно ли таких программистов называть полноценными программистами?

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

>Не знаю, мне понятие его устройства помогает понять почему его «кидать» не нужно, например.

А простого знания, что «кидать не нужно» - недостаточно? :) Ну так в этом случае и знание архитектурных особенностей процессора может не помочь. Там тоже много вещей есть, которые нужно просто принять, не разбираясь. Или закапываться уже на уровень микрокодов и блоков процессора. А там - на уровень логических схем. А после - на уровень дискретки. Затем - физхимия полупроводников. Наконец - квантовая механика и космология :)

...

Я когда-то гордился тем, что мог (поэтапно, понятно) описать основные процессы работы, сорри за тавтологию, процессора, именно от уровня квантовой механики и до уровня высокоуровневой программы. Но это знание мне ничего не даёт, кроме ЧСВ :) Знание архитектуры процессора - давало, пока системным программированием занимался. Ну так на то оно и системное.

...

Думаю, можно сформулировать так: В любой области специалист обязан отлично знать уровень, на котором работает и хорошо разбираться на уровене на один ниже. Иметь представление об одном ещё более низком уровне. Знать работу уровней от трёх и дальше - не обязательно.

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

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

Системщик низкого уровня (например, занимающийся ядром ОС) должен знать ОС и устройство процессора, иметь представление о схемотехнике, но ему не нужно знать технологию изготовления процессоров.

и так далее :)

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

Вот кстати первая же ссылка в гугле http://naf-st.ru/articles/mpmc/m08/ аппаратный 8 уровневый стек. Если ты хотел сказать что о стеке тут думать не надо то вдвойне ошибся - о таком стеке вообще хрен забудешь ибо вложенность вызовов может переполнить стек в любое время а еще прерывания асинхронно могут в люой момент случиться :)

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

>Это какоето древнее еще совдеповское поделие

i8748 до сих пор купить можно :)

То что нет команд работы со стеком еще не значит что процессор его не содержит


Не содержит :)

Там нет команд call или push

и наверняка у него ограниченный аппаратный стек для вложенных вызовов


Вот в классическом Бейсике нет подпрограмм. Нет, соответственно, вложенных вызовов и стека. Это не делает существование этого языка невозможным :D

...

x86/PPC/DEC - это ещё не все архитектуры мира... :)

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

>Ну, это же машина Тьюринга, не? :)
скорее архитектура фон Неймана

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

>смотря какой байт

Да, верное замечание. Многие путаются тут, не различая байт и октет :)

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

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

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

>Не содержит :)

Там нет команд call или push

Ага - а из подпрограмм и обработчиков прерываний он по щучьему велению адрес возврата находит ? :)

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

>Вот кстати первая же ссылка в гугле

Ч0рт! Epic fail. Значит, не ВЕ48, память подвела. Но была одна из первых однокристаллок, с которой рабтал, без аппаратного стека. Подпрограммы вызывались с программной эмуляцией оного. JMP запоминал при переходе IP в отдельном регистре. В подпрограмме этот регистр, если нужно было, сохранялся в память. Возврата (ret) не было, для возврата содержимое регистра (или сохранённой памяти) грузилось в РОН и делалася JMP по нему.

Может быть это 35-я была? (/me гуглит) нет, там был двухуровневый стек... Короче, давно было, не помню :)

а еще прерывания асинхронно могут в люой момент случиться


Есть процессоры без прерываний :) И даже не все процессоры, прерывания поддерживающие, используются в архитектурах, где этот механизм используется. Скажем, в Радио-86РК прерывания в 8080 не использовались, а выход статуса разрешения/запрета прерываний использовался как однобитный порт для управления динамиком :)

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

>Конкретные претензии плз в студию.

И еще один.:)

?: слева стоит (возможно через приведение типа) булевый результат. Он проверяется на истинность и в случае успеха возвращается true. Инача false. Быдлокод же!

staseg ★★★★★
()

1) Да. Иначе далее джанги, быдлосайтиков на пэхапэ и редактора таблиц с овер9к классов с тольки же памяти человек не уйдёт => он быдлокодер.
2) Знает - да. Ничего не знает - нет.
Я сам пишу на пайтоне как прикладное, так и веб(на Pylons).
Однако имею бурное прошлое на сях, плюсах, шарпе. Не раз приходилось делать велосипеды вроде низкоуровневых хаков для winapi и утилит для архивации в собственный формат. В общем, байтоводом побывать успел.

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

>Ага - а из подпрограмм и обработчиков прерываний он по щучьему велению адрес возврата находит ? :)

Ну, вот, я когда на x86 Форт с прямым шитым кодом делал, там для управления стек нигде не использовался :) Стек x86 там целиком и полностью как стек данных юзался :)

При линейном исполнении блока адресов вызовов как таковых вообще не было, а каждое слово вместо RET завершалось конструкцией NEXT, что-то типа:
ADD SI, 2
JMP [SI]

кстати, растактовка получалась более быстрая, чем в связке CALL/RET, поэтому прямой шитый низкоуровневый код выполнялся быстрее подпрограммного. Вот при вызове высокоуровневого слова приходилось, понятно, WP (word pointer) сохранять в самодельный стек:
SUB DI, 2
MOV AX, SI
MOV [DI], AX
MOV SI, ADDR
JMP [SI]

тут уже call/ret получал преимущество.

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

> return пункт1() ? true : false;
Да, долго смеялся. Вроде, на баше даже было.
Хотя, видимо, человек хотел подчеркнуть то что это значение типа bool. Не очень понятно почему он не использоват либо тайп-каст, либо конструктор типа(смотря какой язык он хотел продемонстрировать).

tia
()

> 1) Нужны ли эти знания человеку пишущем на Python/Ruby/PHP/Java/etc?

2) Можно ли таких программистов называть полноценными программистами?


системное программирование vs прикладное программирование, frontend vs backend.. дополните сами.

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

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

Блин, ну не подумал, пардон, и вообще у меня пятница ;)

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

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

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

>> return пункт1() ? true : false;

Да, долго смеялся.


А где смеяться? В PHP такое имеет смысл :) Скажем, у меня метод может вернуть 0 как ID, NULL в случае отсутствия объекта и false в случае ошибки :)

Если я не ошибаюсь, в 6-м Питоне такое тоже есть.

И, самое смешное, такая конструкция имеет смысл и в Си. Если результат потом будет, например, битово использоваться (подразумеваем #define 0 false и #define -1 true).

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

>А где смеяться? В PHP такое имеет смысл :) Скажем, у меня метод может вернуть 0 как ID, NULL в случае отсутствия объекта и false в случае ошибки :)

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

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

>просто никто так не делает и все это реализуется в процессоре аппаратно.

Не, таки, повторюсь, есть процессоры без аппаратного стека :)

Кстати, даже в ВЕ35 назвать двухуровневую конструкцию полноценным стеком язык не повернётся :) Там даже указателя, скорее всего классического нет, тупо переключается битик выбора регистра при каждом call/ret :)

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

>Пхп не видел уже пару лет,.. но разве там нет приведения типов? По-моему были

Там есть сравнение с приведением типа («==» и "!=«) и без оного (»===" и "!==«). Поэтому false == 0, но false !== 0

Иногда это очень удобно :)

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

>Там есть сравнение с приведением типа («==» и "!=«) и без оного (»===" и "!==«). Поэтому false == 0, но false !== 0

Это я знаю. Но емнип тип можно приводить и принудительно. Что-то вроде сишного (type).

=== и !== удобные, да. Пользовался).

staseg ★★★★★
()

1) Нужны, если это действительно надо знать.
2) Да.

Профи мастер-кодеры знают абсолютно всё =)

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

>Не, таки, повторюсь, есть процессоры без аппаратного стека :)

Таки для них можно писать на «Python/Ruby/PHP/Java/etc» или хотя бы не заботиться об архитектуре ?

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

Я, конечно, давненько уже не кодил на сях, а на пэхапэ и вовсе не кодил что-то своё/новое, но!
1) http://php.net/manual/en/language.types.boolean.php
http://www.php.net/manual/en/language.types.type-juggling.php

$bar = (boolean) $foo; // $bar is a boolean

Комментарии излишни.

метод может вернуть 0 как ID, NULL .. false

Данный метод может вернуть только true или false. К.О.(с)

2) http://www.python.org/dev/peps/pep-0308/
В общем, это давний холивор.
Оставили такую форму:

<expression1> if <condition> else <expression2>

3) А вот

#define 0 false и #define -1 true

есть быдлокод.
Если в question-mark-выражении использовать отличные от true и false операторы в качестве результатов, то логично что оно правильно.
Тогда должно быть так:

return exp ? 0 : -1;

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

>>метод может вернуть 0 как ID, NULL .. false

Данный метод может вернуть только true или false. К.О.(с)

Я говорю про метод, в котором используется код

return пункт1() ? true : false;

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

>Но емнип тип можно приводить и принудительно

Можно. Но это в данном случае менее наглядно :)

...

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

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

>Типа, прикладник должен знать психологию? Да, где-то так :)
типа система состоит из кусочков, но не просто так, а чтобы быть частью ещё большей системы

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

>Таки для них можно писать на «Python/Ruby/PHP/Java/etc» или хотя бы не заботиться об архитектуре ?

Если ты пишешь на Python/Ruby/PHP/Java/etc - тебе глубоко фиолетово, что там в процессоре. Вон, я же приводил пример Форта, где аппаратный стек использовался под стек данных, а стек возвратов реализовывался программно. При чём это - распространённый подход в Форте. Но с точки зрения программирования на самом Форте - пофиг, как оно там реализовано внутри.

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

>3) А вот

#define 0 false и #define -1 true

есть быдлокод.


Ты ещё спроси, чему в Си NULL равен :)

Тогда должно быть так


Это если у тебя возврат только в одном месте и одним способом используется.

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

>>Данный метод может вернуть только true или false. К.О.(с)

Я говорю про метод, в котором используется код


Он про приведение (boolean), которое делает возврат совершенно аналогичным, но без тернарного оператора.

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

> Зачем? :)
Ладно, сдаюсь. :)

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

> спроси у художника химический состав красок, ёпт.

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

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

>Ты ещё спроси, чему в Си NULL равен :)
Нет нет нет нет, достаточно холиворов на эти темы :) Таки Си был создан для холиворов, а С++ дьяволом.
Во всяком случае, я предпочитаю не делать таких «махинаций» с такими именами. Уж легче назвать его иначе. Хоть MYTRUE/MYFALSE.

Это если у тебя возврат только в одном месте и одним способом используется.

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

tia
()

Интересный вопрос.

Мне жена примерно то же самое говорит: «Неужели для того, чтобы работать на компьютере я должна быть инженером-программистом, разбираться в компьютерных железяках и знать пару-другую сотен команд баша?»

:)

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

>> Если я не ошибаюсь, в 6-м Питоне такое тоже есть.

Дай машинку времени погонять, а?


:D

...

s/Питоне/Перле/

...

У кого что, тот и по Фрейду :D

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

>Если ты пишешь на Python/Ruby/PHP/Java/etc - тебе глубоко фиолетово, что там в процессоре.

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

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

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

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

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

>Именно поэтому на моем компьютере нет шлака написанного на вышеперичисленном

Тяжёлый случай идиосинкразии :) Жаль, что остальному миру с тобой не по пути :D Может, сойдёшь? ;)

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

>Где же то счастливое время, когда мужчины были мужчинами и сами писали драйверы для своей периферии?

О, да! МС-6312! http://balancer.ru/tech/forum/2007/12/t58955--printer-ms-6312-antikvariat.609...

Чтобы печатать на нём этикетки для продаваемого на тушинском радиорынке софта, пришлось не только драйвер принтера написать, но и софт для сэмплирования VGA в принтерное разрешение с имитацией градаций серого... Ух, сколько методов тогда перепробовал, от матричных разного рода до рэндомных :)

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

мне чтобы окончательно перелезть на netbsd нужно написать драйвер wifi-карточки. чтобы и с wpa2 работал ( в линупсе airo сломали чегойто ), и состояние восстанавливалось после суспенда.

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

Дык, раньше телегу грамотный мужик мог сам изготовить. А ты попробуй сейчас себе «Порше» сам слепить? :)

KRoN73 ★★★★★
()

1) Да.
3) Нет.

Хорошая аналогия:
Автолюбитель может не знать устройство автомобиля.
Водитель-профи знать должен (покажите мне такого кто не знает).
Автогонщик хорошо знает устройство своего автомобиля и участвует
в его доводке вместе с инженерами (аналог системного программера).

PS: с каких это пор Java язык сверхвысокого уровня?

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