Как программист, я должен знать языки программирования низкого и высокого уровня? [закрыто]


18

Со мной связались для выполнения некоторых работ по удаленному управлению светодиодными дисплеями через TCP / IP, но мой опыт и подготовка в основном касаются языка программирования высокого уровня. Я сказал это человеку, который связался со мной по поводу работы, и он сказал мне, что:

«если ты называешь себя программистом, ты должен знать все это»

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


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

1
@delnan: При работе на высоком уровне, конечно, необходимо маскировать детали нижнего уровня. Тем не менее, я думаю, что каждый программист должен знать, как машины, которые они программируют, работают и на более низком уровне. Знания не должны быть слишком подробными - достаточно просто знать, как создать базовый компьютер с нуля.
Шедлер

4
«если вы называете себя программистом, вы должны знать все эти вещи». Если они так сильно хотели вас, что проклинали за отсутствие у вас опыта, это очень неправильно. Я бы проигнорировал их комментарий как лишенный смысла. Либо они хотят, чтобы вы были с вашим фоном, либо они не хотят вас и не должны проклинать вас за фон, которого у вас нет.
С.Лотт

3
Еще один случай: «Ух ты, рад, что пропустил эту пулю!» Вы действительно не хотите работать или с таким снобом?
Эдвард Стрендж

2
@Schedler - и если они не сжигают свои собственные доски, они просто новички.
Эдвард Стрендж

Ответы:


37

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

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

Я не буду работать на кого-то, кто имеет отношение, которое делает ваш контакт.


4
+1: комментарий не имеет смысла в первую очередь.
С.Лотт

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

22

«если ты называешь себя программистом, ты должен знать все это»

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

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


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

4
Вы упускаете суть. Да, программисты высокого уровня должны уметь понимать аспекты низкого уровня, но должен ли он знать, как написать обновление прошивки для маршрутизатора Linksys?
maple_shaft

7
Я думаю, что они должны знать, как узнать, как, хотя. Большая часть современного программирования - это знание того, что нужно запомнить и что подать в качестве ссылки.
Майкл К

8

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

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

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


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

6

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

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

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

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


6

Я действительно презираю это, когда люди говорят: «Вам нужно знать X, чтобы называть себя программистом». В самом деле? Ну, некоторые люди работают на COBOL весь день и любят его. Возможно, они настолько хорошо справились с этой задачей и своей проблемной областью, что рядом с ними мы все притворщики.

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


3

Я предлагаю вам прочитать это:

http://www.joelonsoftware.com/articles/LeakyAbstractions.html

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

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


Может быть, мне нужно уточнить, что я знаю, как работает TCP / IP =), моя точка зрения заключается в том, что реализация чего-то вроде сокетов поверх TPC / IP мне не известна, могу ли я узнать это на лету? Конечно, я хочу выучить это? не совсем, в основном потому, что я не уверен, что конечный результат будет полностью проверен для производственной среды или будет соответствовать всем требованиям в данный момент. Я просто думаю, что в то время, когда мне потребовалось достичь уровня знаний по языку высокого уровня, и я не думаю, что предоставленного времени будет достаточно, чтобы узнать все ошибки, которые вызывают у меня опасные ощущения.
работа

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

2

Его аргумент является хорошим примером логической ошибки « Нет истинного шотландца» .

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

Например, взгляните на эту библиотеку для работы со светодиодной матрицей на Arduino. Это не ракетостроение, и на самом деле любой программист мог бы понять это с небольшим усилием, если бы они не подняли «низкий уровень, о нет!» ментальный блок.


1

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

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

Может быть, человек, который сказал вам, что «Фраза» разочарована, возможно, вы были не единственным контактным лицом, с которым он говорил.

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

веселит,

Wardy


1

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

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


-2

Я перефразирую

«если ты называешь себя программистом, ты должен знать все это»

К

«если вы называете себя программистом, вы должны знать достаточно, чтобы быстро научиться всему этому»

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.