Что означает быть хорошим на языке программирования? [закрытый]

Вы можете использовать функцию, которая ищет оператор OR или AND в заданном списке токенов и нарезает список по индексу, где он найден, и рекурсивно обрабатывает два нарезанных списка с обеих сторон. оператора и примените соответствующие методы (Q.__or__ и Q.__and__) к возвращаемым Q объектам. Если оператор не найден, вернуть новый объект Q со ссылочными данными запроса:

def q(query, tokens):
    if isinstance(tokens, list):
        for operator in ('OR', 'AND'): # OR first since it has a lower precedence than AND
            try:
                index = tokens.index(operator)
                break
            except ValueError:
                pass
        else:
            return q(query, tokens[0])
        return (Q.__or__ if operator == 'OR' else Q.__and__)(
            q(query, tokens[:index]), q(query, tokens[index + 1:]))
    else:
        d = query[int(tokens)]
        return Q(**{'__'.join((d['field'], d['operator'])): d['value']})

, так что с учетом:

tokens = [[['1', 'OR', '2', 'OR', '4'], 'AND', '4']]
query = {'logic': u'(1 OR 2 OR 4) AND 4',
         'query': [{u'field': u'first_name',
                    u'id': 1,
                    u'opertor': u'icontains',
                    u'value': u'A'},
                   {u'field': u'first_name',
                    u'id': 2,
                    u'opertor': u'icontains',
                    u'value': u'b'},
                   {u'field': u'show_tag',
                    u'id': 3,
                    u'opertor': u'includes',
                    u'value': u'1955'},
                   {u'field': u'organisation__organisation_name',
                    u'id': 4,
                    u'opertor': u'icontains',
                    u'value': u'a'}]}
query = {q['id']: q for q in query['query']} # transform the above to a dict indexed by id

q(query, tokens) должен вернуть Q объект, который вам нужен.

Отказ от ответственности: я не проверял этот код.

7
задан epochwolf 13 April 2009 в 03:40
поделиться

6 ответов

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

Я думаю, что «знание языка» означает способность читать и понимать большинство программ (~ 90%), не ища ничего в справочном ресурсе, и точно зная, куда обратиться, чтобы найти технические подробности о более непонятных частях фреймворк. Для языков / платформ, которые сами по себе не имеют «фреймворка», он обладает знаниями об основных библиотеках, общепринятых в сообществе.

Для написания на этом языке это означает тратить ~ 90% + время на дизайн того, что вы пишете, включая исследования дизайна, и менее 10% ищут техническую справочную информацию.

и точно знать, куда идти, чтобы найти технические подробности о более непонятных частях каркаса. Для языков / платформ, которые сами по себе не имеют «фреймворка», он обладает знаниями об основных библиотеках, общепринятых в сообществе.

Для написания на этом языке это означает тратить ~ 90% + время на дизайн того, что вы пишете, включая исследования дизайна, и менее 10% ищут техническую справочную информацию.

и точно знать, куда идти, чтобы найти технические подробности о более непонятных частях каркаса. Для языков / платформ, которые сами по себе не имеют «фреймворка», он обладает знаниями об основных библиотеках, общепринятых в сообществе.

Для написания на этом языке это означает тратить ~ 90% + время на дизайн того, что вы пишете, включая исследования дизайна, и менее 10% ищут техническую справочную информацию.

7
ответ дан 6 December 2019 в 11:52
поделиться

Действительно «знание» языка для описания себя как «хорошего» означает

  • , что вы знаете о всех особенности языка, включая оба
    • уникальные / хорошие особенности и когда их использовать , а также
    • пыльные углы и что следует избегать
  • вы знаете о общих соглашениях
  • ] (как вы упомянули) вы знаете библиотеки платформы
  • , вы знаете весь набор инструментов (IDE, проекты сборки, отладчики, профилировщики), чтобы вы могли хорошо владеть языком
4
ответ дан 6 December 2019 в 11:52
поделиться

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

Знает ли он

  • все / большинство доступных библиотек ? Я так не думаю, потому что есть произвольное количество часто используемых библиотек, которые создаются в процессе изучения. Даже библиотеки base для многих языков сегодня имеют тысячи различных концепций (классов) и десятки тысяч функций.
  • Зная, как реализованы возможности языка ? Который' Это свойство данной реализации языка, а не самого языка. Но я думаю, что это способствует. Знание того, что регулярные выражения часто реализуются как конечные автоматы (и знание теории для этого) очень важно для понимания языков регулярных выражений. Хотя знание того, как работает байт-код Java, никогда не имело никакого отношения к Java-приложениям, над которыми я работал ... [1] Я полагаю, что некоторые языки имеют более четкое отделение от своих возможных реализаций, чем другие: это может быть ключевым отличием между high и языки низкого уровня.

Если вы имеете в виду определенный язык, хорошим тестом является поиск в нем серьезных примеров. В случае C, читая (например) ядро ​​Linux, утилиты GNU OS, PostgreSQL или Subversion, и выяснение того, как они работают , является не только указанием, но и хорошей практикой.

[1] Было одно задание о статическом анализе байт-кода; но фактическое решение могло быть написано во что угодно.

3
ответ дан 6 December 2019 в 11:52
поделиться

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

Например, давайте рассмотрим Java.

Большинство заданий не согласятся с тем, что вы хорошо владеете базовым языком, они ожидают, что вы разбираетесь в определенных API (например, Swing для GUI) или даже в третьих. сторонние API (как и все вещи Apache). Вам не обязательно знать каждый случай.

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

В образовании и в QA часто важно знать все странные углы и их риски. Это типично для C ++. В образовании, потому что вы можете рассчитывать на то, что студенты допустят эти ошибки случайно. В QA, потому что именно там лежат некоторые странные ошибки (например, условия гонки в статической инициализации).

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

2
ответ дан 6 December 2019 в 11:52
поделиться

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

1
ответ дан 6 December 2019 в 11:52
поделиться

Учитывая алгоритм , если вы можете реализовать решение , которое

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

Я думаю, что вы знаете язык лучше ...

0
ответ дан 6 December 2019 в 11:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: