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

14

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

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

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

FinnNk
источник

Ответы:

18

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

Мартин Викман
источник
Мартин, я проголосовал, потому что твое сообщение заставляет меня улыбаться этим дождливым и холодным субботним утром, но ты не отвечаешь на вопрос;)
Добавлено «Я узнал, что ...»
Мартин Уикман,
+1 потому что я один из тех программистов в этом месяце. 70+ часов на прошлой неделе == "моя очередь в бочке".
Дэн Рэй
Я узнаю это! Это должна быть цитата! «Требуется только один гнилой менеджер, чтобы испортить весь проект, но потом нужно много хороших программистов, чтобы навести порядок».
Амир Резаи
12

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

Можно включить довольно много элементов функционального программирования в императивный язык, такой как Java, и даже если он не всегда идиоматичен, он может быть очень полезным в некоторых задачах. Например, анонимные классы примерно равны замыканиям, как описано в википедии . Ленивая оценка должна быть нормой, а не чем-то необычным. Неизменность вряд ли может быть чрезмерным. Просто избавьтесь от (почти) устаревшей идеи, что создание новых объектов вместо изменения существующих является дорогостоящим из-за GC и потребления кучи - в 99,9% случаев это просто не актуально. Фактически, параллельная обработка может перевернуть даже аргумент эффективности в обратном направлении: создание новых неизменяемых объектов может быть дешевле, чем изменение существующих, поскольку вы избавляетесь от блокировки.

Больше информации о выполнении FP в чистой Java здесь , здесь , здесь и здесь .

Joonas Pulakka
источник
+1 согласен Печально, что в Java так плохо поддерживается функциональное программирование.
Джонас
У меня был давний интерес к FP (моя первая работа включала в себя lisp), и я думаю, что это очень интересно, что в последние несколько лет он наконец стал довольно «обычной» парадигмой наряду с OO и т. Д.
FinnNk 30.10.10
Java 7 должна иметь как минимум лучшие замыкания. И использование умных библиотек, таких как lambdaj, может творить чудеса, исправляя недостатки самого языка.
Joonas Pulakka
Я хотел бы иметь лучшую поддержку хвостовой рекурсии в Java / JVM.
Йонас
1
Метод @Helper: первые две ссылки в моем ответе - статьи по FP с Java. Я не знаю ни одной книги на эту тему. Я думаю, что лучший способ «получить это» - это изучить какой-то реальный язык FP, а затем просто начать использовать больше неизменяемых объектов в вашем коде Java.
Joonas Pulakka
10

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

Короче говоря: политика имеет значение, а иногда и политика, которая влияет на вас, вы не можете контролировать.

Фрэнк Шиарар
источник
Я даю вам виртуальный +1, потому что Мартин уже заставляет меня улыбаться с подобным ответом;) Вы читали Dead March? это книга о чем ты говоришь
(Я превращаю виртуальный голос в реальный)
9

Я узнал, что целью тестирования программного обеспечения является поиск ошибок . Это не означает, что система работает правильно.

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

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

Этот психологический эффект более подробно обсуждается в книге «Искусство тестирования программного обеспечения» , классической книге, которую я очень рекомендую. Автор, Myers, также рекомендует, чтобы тот, кто тестирует программу, не был автором или даже в той же цепочке управления. Вы можете сделать это, если вы пишете код самостоятельно, так что это требует дисциплины.

Макнейл
источник
8

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


источник
Обратите внимание, что я не нашел способа привязать «последний юнит-тест Rerun» к ключу. Это сделало это немного утомительным.
5

Истинная ценность программирования без эго.

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

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

Джори Себрехтс
источник
3

Вот мой ответ на мой собственный вопрос:

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

FinnNk
источник
3

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

Питер Стуйфзанд
источник
1
У вас есть пример?
Марк С
В книге «Элемент программирования» есть пример, в котором используется функция, которая вычисляет мощности, и некоторые вещи Фибоначчи, которые вычисляют fib за время O (log n). Я думаю, что пример можно найти здесь cpp-next.com/archive/2010/03/eop-ch3-preview , но этот веб-сайт отвечает внутренней ошибкой сервера.
Питер Стуифзанд
3

Помимо политики, о которой говорил Фрэнк Шиарар , я недавно обнаружил, что QUnit и JSCoverage сделали мой день. И месяц. Никогда не думал, что можно будет протестировать JavaScript с охватом кода, но это так ... :-)

доктор Ганнибал Лектер
источник
Это на моем радаре в следующем году, я немного побаловался юнит-тестированием JS, но пока не работал над реальным проектом. Не знал, что был доступен инструмент покрытия!
FinnNk 30.10.10
2

Мои первые три благодарности за последний год программирования были бы следующие (в порядке убывания важности и благодарности):

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

    (Я лично благодарю Томаша Петржичека за его превосходную книгу «Функциональное программирование в реальном мире» .)

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

    (Если бы мне пришлось упомянуть хороший учебный ресурс, я бы сказал « Искусство модульного тестирования» Роя Ошерова .)

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

stakx
источник
2

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

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

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

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

bedwyr
источник
0

Я бы сказал, используя модульное тестирование Microsoft в Visual Studio 2010.

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

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

Младший М
источник
0
  • Изучил базовый Python (иногда его используют для написания быстрых скриптов)

  • Установил ArchLinux в ВМ (раньше был Ubuntu в ВМ, мой ПК работает быстро!)

  • Начал с MATLAB (особенно для построения графиков и быстрых числовых проверок)

  • Перешел на Mercurial (из SVN) (ветвление и слияние!)

Вайбхав Баджпай
источник
0

Изучение шаблона MVVM помогло мне стать гораздо менее взломанным.

bufferz
источник
-1

Мне пришлось начать поддерживать веб-приложение на Python, поэтому я решил, что сейчас самое время изучить Vim . Сейчас я использую плагин IdeaVim для Intellij для разработки на Java и Flex, и я уверен, что благодаря ему мой набор текста стал быстрее и эффективнее.

Уотсон
источник
1
Действительно - -1? Вы хотите распаковать это для меня - люди не думают, что VIM является полезным или полезным?
Уотсон