Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Managed Coder: Advice to a New Programmer



Managed Coder: Advice to a New Programmer

While speaking at a conference in Minneapolis earlier this week, I had the opportunity to sit on a speaker panel. Normally, from the panelist’s point of view, these are fascinating things, but after having done literally hundreds of them, I admit I’m a little bit jaded. They tend to be the same questions over and over again, to which offering up the same answers over and over again just… well, it tends to grate after a while.

 

However, this past panel was a bit different, largely because an attendee came up with a question that, while it shouldn’t have been new in any way, was. Or maybe it was that this was a question that hadn’t been asked in a while. Or perhaps it was simply that he asked it with a different inflection than I had heard before. Regardless, it threw me into a few moments of deep contemplation before I could respond.

 

http://www.codemag.com/article/1105121

That question, as you may have already inferred from the title of this column, was thus: “I’m a new programmer, having moved over after 20 years as a systems guy. What do you wish somebody had taught you back when you were new?”

While I was thinking about my answer, several of the other panelists responded with some very good answers, which deserve repetition for that reason.

Testing

Within the last decade, ever since Erich Gamma and Kent Beck wrote the seminal article on the subject, “Test Infected”, testing by programmers has become not only fashionable, but considered to be a core responsibility. Wrapped up at first as part of the “Agile” movement, unit-testing has now moved squarely into the collection of “mainstream” developer topics-much like object-oriented was two decades ago, whether developers are using it or not, they’ve at least heard about it. More importantly, developers increasingly find themselves required to justify not using it, instead of the other way around.

 

Dynamic Languages

The “rise” of dynamic languages-languages like Python, Ruby, or ECMAScript/JavaScript, often disparagingly and colloquially referred to as “scripting” languages-marked an important realization to the mainstream development community: that not all code really “fits” into the traditional statically typed, compiled-ahead-of-time language mindset. In fact, the productivity enhancements seen by Ruby-on-Rails in turn led to some shifts in how.NET developers looked at building web applications, moving from their traditional drag-and-drop WebForms-based style into a more testable and (to many) understandable format.

 

 

In fact, the dynamic language meme created directly observable change at Microsoft, including the creation of a new shell environment (PowerShell), the development of not one but two dynamic language environments on top of the CLR (IronPython and IronRuby), as well as a framework/engine for a variety of different dynamic languages (the DLR) that later got folded into the C# programming language as part of Visual Studio 2010.

 

Pairing

As a mechanism for brainstorming and producing creative ideas, authors, musicians, and artists have long known that pairing-or any other form of small-group collective collaboration-works phenomenally well. But for years, programming resisted the idea of “two programmers, one machine” on the grounds that it meant that code emerges half as fast as having each programmer hacking away on a machine of their own. Couple that with the inevitable arguments that: “I need my own machine to handle certain things” (like email and the inevitable browsing of web pages that have nothing to do with work), or: “You can’t really expect me to sit next to somebody else all day, can you?”, and pair programming seemed dead in the water.

 

 

And yet, when programmers actually practice pairing for a non-trivial amount of time, they quickly discover that pairing is nothing like they imagined it to be. In fact, when I talk to developers who initially resist pairing, and then give it a shot, the reactions that emerge are overwhelmingly positive-as Ward Cunningham once put it during an interview I had the opportunity to do with him, “Having somebody listen to you, as a programmer, is huge.”



 

Quality Is Fast

It’s at the heart of the Agile Manifesto, and at the heart of several other approaches beyond that, but it seems to be a lesson that developers have to learn individually and only over time: building applications “the right way” (whatever way that is) to produce a quality application is actually faster than producing an application quickly, then spending just as much time (or more) fixing the inevitable bugs and architectural changes that appear.

 

 

This, of course, has fascinating implications about building prototypes or proofs-of-concept kinds of applications, since the whole point of those clearly differs from that of a “production” application, yet too often developers are asked (by which I really mean “ordered”) to put those into production. But even allowing for those clearly mismanaged situations, it becomes fairly clear after studying the analyses and statistics that “building it right” trumps “building it fast” in almost every situation.

 

One Rule to Program By

For me, however, all of these answers paled in comparison to a lesson I’d had the privilege to learn the easy way. At my first professional programming job working for a startup company named Tangible Vision, I met Hussein Dalmouti, VP of Development, who taught me what I think is the most important lesson a programmer can learn-that of “egoless programming”.

 

Wikipedia defines “egoless programming” as “a style of computer programming in which personal factors are minimized so that quality may be improved.” A popular topic among programming classes during the 80s, it more or less completely disappeared as a topic of discussion by the 90s, and today lies all but forgotten. In fact, several people came up to me after the panel asking about, even as several “grizzled veteran” programmers remarked that they were shocked the topic even needed to be mentioned. Clearly, a nerve had been struck.

 

Egoless programming’s roots lie in the book, “The Psychology of Computer Programming” by Jerry Weinburg, 1971. Weinburg describes a style of development environment relying heavily on peer reviews. He coined the phrase to describe programmers who had worked within this environment for some significant period of time. And at its heart, his philosophy-that code improved when multiple pairs of eyeballs are looking at it and either implicitly or explicitly judging it-sounds eerily familiar to developers familiar with Agile principles and specifically that of pairing.

 

But egoless programming means more than just putting your code in front of somebody else’s eyeballs for judgment. Over 30 years later, Lamont Adams wrote an article for techrepublic.com in which he laid out “Ten Commandments for Egoless Programming”:

 

Understand and accept that you will make mistakes. The point is to find them early, before they make it into production. Fortunately, except for the few of us developing rocket guidance software at JPL, mistakes are rarely fatal in our industry, so we can, and should, learn, laugh, and move on.

 

Advertisement

You are not your code. Remember that the entire point of a review is to find problems, and problems will be found. Don't take it personally when one is uncovered.

No matter how much "karate" you know, someone else will always know more. Such an individual can teach you some new moves if you ask. Seek and accept input from others, especially when you think it's not needed.

 

Don't rewrite code without consultation. There's a fine line between "fixing code" and "rewriting code." Know the difference, and pursue stylistic changes within the framework of a code review, not as a lone enforcer.

Treat people who know less than you with respect, deference, and patience. Nontechnical people who deal with developers on a regular basis almost universally hold the opinion that we are prima donnas at best and crybabies at worst. Don't reinforce this stereotype with anger and impatience.

The only constant in the world is change. Be open to it and accept it with a smile. Look at each change to your requirements, platform, or tool as a new challenge, not as some serious inconvenience to be fought.

 

The only true authority stems from knowledge, not from position. Knowledge engenders authority, and authority engenders respect-so if you want respect in an egoless environment, cultivate knowledge.

 

Fight for what you believe, but gracefully accept defeat. Understand that sometimes your ideas will be overruled. Even if you do turn out to be right, don't take revenge or say, "I told you so" more than a few times at most, and don't make your dearly departed idea a martyr or rallying cry.

 

Don't be "the guy in the room." Don't be the guy coding in the dark office emerging only to buy cola. The guy in the room is out of touch, out of sight, and out of control and has no place in an open, collaborative environment.

Critique code instead of people-be kind to the coder, not to the code. As much as possible, make all of your comments positive and oriented to improving the code. Relate comments to local standards, program specs, increased performance, etc.

 

Even more important than just writing code, adherents to these 10 commandments will find themselves not only learning more, but gathering the respect and admiration of their peers at a shockingly accelerated rate. In fact, just about every programming career sin I can rattle off is a violation of one of the above dictates.

Think about it-of all the “jerkwad” developers you’ve ever known over time, how did they get that reputation? What did they do to earn it? The architect who insists that the only way to obtain any sort of effective interoperability between platforms is WS-* clearly stands accused of violating #7. The consultant who stands in front of management and says “I don’t know what idiot wrote this code, but he should be fired” pretty obviously doesn’t get #10. The 30-year-employee who refuses to learn any new programming language because “COBOL works” egregiously sins against #6. And who hasn’t been on a project where working code suddenly becomes less working because one of the developers “didn’t like the way the code looked” and rewrote it all overnight, without asking anybody else’s opinion, on the grounds that “now it’s more understandable”?

 

Be Egoless

However, of all of these, by far the most important principle to understand is that of the first: “You are not your code.” This is a lesson I wish every developer would be forced to learn before ever being allowed to launch a compiler or interpreter, because everything else stems from that basic realization.

Let’s be honest: many developers got started writing code because they found social interaction painful and uncomfortable. Not uncommonly, these teenagers found solace in the quiet and solitude of writing code: they could feel good about themselves, and express themselves, through technology.

 

Advertisement

Then, as they moved out into the workplace, they discovered that knowledge of that technology translated into direct value to customers or employers-and suddenly, they were valued. Not necessarily because of themselves, but because of what they could do. Though unintentional, the young programmer receives confirmation that they are only valued for the code that they write: their code is an extension of themselves, logically at the core of their sense of self-worth.

 

It sounds ridiculous to say it. And yet, anecdotally, how many developers do you know who get unreasonably angry when “their” code is criticized?

This was what Hussein taught me: that when somebody turns to you and says, “I think I’ve found a bug in your code,” that the right response is to say, “Oh, that’s wonderful. Where is it?” That when somebody says, “I think I have a better way of handling this particular situation,” the right response is to say, “Excellent! Show me your ideas.” And that when somebody says, “I still don’t understand how this thing works,” the right response should be, “OK, tell me what part doesn’t make sense and let’s go over it again.” Even when that developer is a not-yet-graduated barely-21-year-old with zero years of professional experience under their belt. Even when you’re a seasoned professional with over a dozen years’ programming on your resume.

 

 

Wrap-up

My term of employment with Tangible Vision didn’t last long-my wife and child were still in California, and I grew depressed and my work suffered. They cut me loose after a few months. Tangible Vision as a company no longer exists-I lost contact with them shortly after moving back to California and finishing up school. But the lessons I learned there, even for the short time I was there, stuck with me.

 

Not everybody gets the chance to work with a Hussein Dalmouti. I wish they could-it made all the difference in the world to me. But if you take those 10 Commandments to heart, you can make a difference not only to the other developers around you, but to yourself, as you become the kind of programmer that others want to work with.

Thank you, Hussein.

 

Управляемый Coder: Консультирование Нью-программист


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


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

 


Этот вопрос, как вы возможно уже догадались из названия этой колонки, был таким: "Я начинающий программист, переехав на себя после 20 лет, как человек системы. Вам жаль, что никто не учил вас тогда, когда вы были новыми? "


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


тестирование


В течение последнего десятилетия, с тех пор Эрих Гамма и Кент Бек написал оригинальную статью на эту тему, "Тест Infected", тестирование программистами стало не только модно, но считается основной обязанностью. Завернутые сначала как часть движения "Agile", модульного тестирования в настоящее время переехал прямо в коллекции «основных» для разработчиков тем, очень похожие объектно-ориентированный два десятилетия назад, то ли разработчики используют это или нет, они "ве, по крайней мере слышали о нем. Что еще более важно, разработчики все чаще оказываются необходимы, чтобы оправдать его не используете, а наоборот.


Динамические Языки


"Рост" динамических языков-языков, таких как Python, Ruby, или ECMAScript / JavaScript, часто пренебрежительно и разговорно называют "Сценарии" языки-ознаменовало важный реализацию для сообщества разработчиков основной: Это не весь код действительно "соответствует" втрадиционный статически типизированных, составленный вперед-из-времени язык мышления. В самом деле, усовершенствования производительности видел Руби-на-Rails в свою очередь, привело к некоторым сдвигам в том, как.NET разработчики посмотрел на создании веб-приложений, переход от традиционного стиля перетащить и падение WebForms основе в более проверяемым и (в много) понятной форме.

 


В самом деле, динамический язык мем создается непосредственно заметные изменения в Microsoft, в том числе создание новой оболочки среды (PowerShell), развитие не одного, а двух динамических языков условиях на вершине CLR (IronPython и IronRuby), а такжерамки / двигатель для разнообразных динамических языков (DLR), которые позже получили сложенными в C # язык программирования как часть Visual Studio 2010.


спаривание


В качестве механизма для мозгового штурма и создания художественных идей, авторы, музыканты, и художники уже давно известно, что спаривания или любая другая форма малых групп коллективных сотрудничества-работ феноменально хорошо. Но в течение многих лет, программирование сопротивлялся идее "два программиста, одной машине" на том основании, что это означало, что код появляется вдвое медленнее, чем того, что каждый программист рубил на машине самостоятельно. Пара, что с неизбежными аргументов, что: "мне нужен мой собственный аппарат для обработки определенные вещи" (например, электронной почты и неизбежного просмотра веб-страниц, которые не имеют ничего общего с работой), или: "Вы не можете действительно ожидать меня, чтобы сидеть рядом с кем-то еще весь день, не так ли? ", и парное программирование казался мертвым в воде.


И все же, когда программисты практике спаривание нетривиального количества времени, они быстро обнаруживают, что спаривание не что иное, как они себе это, чтобы быть. В самом деле, когда я говорю для разработчиков, которые изначально противостоять спаривание, а затем дать ему шанс, реакции, которые возникают в подавляющем большинстве положительно, как Уорд Каннингем однажды выразился во время интервью, которое я имел возможность с ним делать ", имея кого-то слушать вам, как программисту, огромен ".


Качество быстро


Это в самом сердце Agile Manifesto, и в основе ряда других подходов пределами, но это, кажется, урок, который разработчики должны учиться индивидуально и только с течением времени: Построение приложений»правильный путь" (любым способом, который) для получения качественное приложение на самом деле быстрее, чем производство приложение быстро, то проводить столько же времени (или более) крепления неизбежные ошибки и архитектурные изменения, которые отображаются на экране.


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


Одно правило Программы По


Для меня, однако, все эти ответы бледнели по сравнению к уроку я имел честь учиться в легкий путь. В моем первом профессиональном программирования работу к начинающей компанией по имени Материальные видение, я встретил Хусейна Dalmouti, вице-президент по развитию, который научил меня, что я думаю, что это самый важный урок, программист может узнать, что из "эго программирования".


Википедия определяет "эго программирование" как "стиль программирования, в котором личностные факторы сведены к минимуму, так что качество может быть улучшено." Популярной темой среди классов программирования в 80-х, это более или менее полностью исчезли в качестве темы обсуждения 90-х годов, и сегодня лежит но все забыли. В самом деле, несколько человек подошли ко мне после панели с просьбой о, даже несколько «седой ветеран" программисты заметил, что они были в шоке тему даже необходимо упоминается. Очевидно, что нерв был поражен.


Корни эго программирования лежат в книге, "Психология программирования" Джерри Вайнбург, 1971. Вайнбург описывает стиль среды разработки полагаясь на экспертные обзоры. Он придумал фразу, чтобы описать программистов, которые работали в этой среде в течение некоторого значительного периода времени. И в его сердце, его философия, что код улучшается, когда несколько пар глазные яблоки, глядя на него, и, явно или неявно, судя IT-звучит устрашающе знакомы разработчикам, знакомым с Agile принципов и, в частности, что спаривания.


Но эго программирования означает больше, чем просто положить ваш код перед глазных яблок кого-то еще для суждения. Более 30 лет спустя, Ламонт Адамс написал статью для techrepublic.com, в котором он изложил "Десять заповедей для эго программирования":

 


Понять и принять, что вы будете делать ошибки.Дело в том, чтобы найти их раньше, прежде чем они делают это в производство. К счастью, для некоторых из нас в разработке ракеты Guidance Software в JPL, кроме, ошибки редко заканчивается смертельным исходом в нашей отрасли, поэтому мы можем и должны, узнать, смеяться, и двигаться дальше.


реклама


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


Независимо от того, сколько "каратэ" Вы знаете, кто-то всегда будет знать больше. Такой человек может научить вас некоторые новые ходы, если вы спросите. Ищите и принимать ввод от других, особенно, когда вы думаете, что это не нужно.

 


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


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

 


Только константы в мире изменений. Будьте открыты для него и принять это с улыбкой. Посмотрите на каждой смене вашим требованиям, платформы, или инструмента, как новый вызов, а не как некоторые серьезные неудобства надо бороться.

 


Только истинной властью вытекает из знания, а не с позиции. Знание порождает власть, и власть порождает уважение, так что если вы хотите уважения в эго окружающей среды, развивать знания.

 


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


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


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

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


Подумайте об этом, из всех «jerkwad" разработчиков вы когда-либо известных в течение долгого времени, как они попали, что репутация? Что они делают, чтобы заработать?Архитектор, который настаивает на том, что единственный способ получить какую-либо эффективного взаимодействия между платформами и WS- * ясно обвиняется в нарушении # 7.Консультант, который стоит перед руководством и говорит: "Я не знаю, какой идиот написал этот код, но он должен быть уволен" довольно явно не получить # 10.30-летний сотрудник, который отказывается изучить любой новый язык программирования, потому что "COBOL работает" в высшей степени грехи против # 6. И кто не был на проекте, где работает код вдруг становится менее работает, потому что один из разработчиков "не нравится, как код выглядел" и переписал все это в одночасье, не спрашивая ничьего-то мнение, на том основании, что "в настоящее время это более понятно "?


Будьте эго


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


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


реклама


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

 


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


Это было то, что Хусейн научил меня: что, когда кто-то обращается к вам и говорит: "Я думаю, что я нашел ошибку в коде," что правильный ответ есть: «О, это замечательно. Где это? "Это когда кто-то говорит:" Я думаю, что у меня есть лучший способ обработки эту конкретную ситуацию ", правильный ответ есть," Отлично! Покажи мне свои идеи. "И что, когда кто-то говорит:" Я все еще не понимаю, как эта вещь работает, "правильный ответ должен быть:" Хорошо, скажите мне, что часть не имеет смысла и пойдем по нему снова. "Даже если что разработчик пока еще не закончил едва 21-летний с нулевыми лет профессионального опыта под их поясом. Даже тогда, когда вы опытный профессионал с более чем десятка лет программирования на ваше резюме.

 


Подведение итогов


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

 


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

 


Дата добавления: 2015-08-28; просмотров: 62 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
1.Three lights, disposed vertically 6 feet apart, are exhibited from a framework mast, 53 feet in height. | The Internet changes everything

mybiblioteka.su - 2015-2024 год. (0.03 сек.)