Как поднять свой уровень в искусстве программирования. План из шести шагов

http://jasonrudolph.com/blog/2011/08/09/programming-achievements-how-to-level-up-as-a-developer/
  • Перевод

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

Изучайте различные парадигмы программирования:


  • напишите программу на ассемблере
  • напишите программу на функциональном языке
  • напишите программу на объектно-ориентированном языке
  • напишите программу на прототипном языке
  • напишите программу на логическом языке
  • напишите программу, используя Модель акторов
  • напишите программу на Forth


Изучайте тонкости программирования на различных платформах:


  • напишите нетривиальное веб приложение
  • напишите нетривиальное десктоп приложение
  • напишите нетривиальное мобильное приложение
  • напишите встраиваемое приложение
  • напишите систему реального времени


Совершенствуйте понимание программного обеспечения на различных уровнях:


  • напишите сетевой клиент (HTTP, FTP)
  • напишите драйвер устройства
  • напишите B-tree базу данных
  • напишите обертку существующей библиотеки для более удобного пользования
  • напишите приложение или фреймворк, который использует модель плагинов
  • напишите фреймворк для тестирования
  • напишите язык программирования


Совершенствуйте себя с коанами, катами и мудростью веков:




Программируйте открытое программное обеспечение:


  • внесите долю кода в open source проект
  • убедитесь, что ваш патч принят
  • заработайте права на коммиты в большом open source проекте
  • опубликуйте open source проект
  • проведите Refactotum open source проекта


Учитесь, обучая других:


  • проведите блиц-доклад
  • участвуйте в локальных юзер группах
  • участвуйте в конференциях
  • создайте учебный курс
  • опубликуйте учебное пособие (туториал)
  • опубликуйте конструктивную ревизию кода open source проекта
  • напишите книгу по программированию


PS. не пинайте за перевод — он отчасти «вольный».
Метки:
Поделиться публикацией
Комментарии 147
  • +13
    Учитесь, обучая других
    Странно. Читая это я всегда вспоминаю цитату Б.Шоу: Кто знает, тот делает, кто не знает — тот учит других
    • +61
      Ха, а я вспоминаю цитату «Уже и сам понял, а они еще нет!». А вообще проговаривание, прорисовывание перед кем-то — очень сильный метод для понимания.
      • +12
        точно сказано, иногда думаешь, что знаешь что-то, потом по мере объяснения появляются белые пятна
        • +20
          Точняк. Я вот например, когда чего-то не знаю, но хочу изучить — статью по этой теме на Хабру пишу. :)
        • +9
          Да!
          Имхо, если не можешь объяснить что-то другому человеку, значит не до конца понял это сам.
          • +7
            Или просто скудный социальный опыт и ты не умеешь красиво излагать свои мысли :)
            • +3
              ну, красота это уже другое, можно некрасиво, но понятно объяснить
              конечно, это все субъективно, но в целом опыт показывает, что незнающий человек не может объяснить, а знающий как правило может
              • +2
                Ну я вот не умею, как раз по обозначенным выше причинам, мне всегда проще сделать, а там пусть другие смотрят что и как, чем пытаться кого-то чему-то научить.
                • +2
                  Говорят, что настоящий ученый может считаться настоящим, если сможет объяснить свою теорию 6-летнему ребенку.
                  Если человек внятно не может объяснить чем он занимается и зачем это нужно…

                  Вообще, у людей очень туго с логикой и пониманием. Было одно время програмил простенькую программку для бухгалтерии (1С тогда в организации не использовался). У меня НЕДЕЛЯ ушла на то, чтобы из БУХГАЛТЕРА вытащить сведения о том, как соотноситься информация о товарах и в какую группу налогового учета их надо внести (ну и остальное по мелочи).
                  Кажется, к концу той недели она сама начала понимать, как нужно вести складской учет (точнее, почему именно так, а не иначе, в соответствии с установленными правилами) и для чего нужны все те статьи затрат и т.п… :)
              • –1
                Прям, как Шелдон
              • +1
                А если можешь объяснить, но другие не поняли, считается что объяснил?
              • +2
                Это не ИМХО, это еще Бернард Шоу сказал (по крайней мере, ему приписывают). Дословно,
                «Если вы что-то не можете объяснить 6-летнему ребёнку, вы сами этого не понимаете.» ;)
              • +2
                А вот преподаватели к примеру ТФКП часто считают иначе ;)
              • +1
                Называется «постукаться об дурака».
                • +2
                  Из своего опыта давно уже заметил, что обучая, учишься сам.
                  Качественный рассказ о теме вынуждает разобраться во всех краевых случаях, пройти цепочки зависимостей, установить все причинно следственные связи.
                • +10
                  Ничего странного. Именно обучение других часто позволяет найти «лазейки» в знаниях. Там так и написано «Учитесь, обучая других:»
                  • +2
                    вы не замечали, что подобных цитат от, скажем так, не глупых людей очень много, и они по большей части друг другу противоречат? ;) всё складывается из личного опыта, в общем виде для саморазвития на определённой стадии обучение других даёт профит и себе. вопрос в том кого обучать, чему и зачем
                    • 0
                      Помнится, в инете встречал упоминание об одном сильно эрудированном товарище, который на спор мог привести цитаты/афоризмы известных/великих людей в защиту каждой из двух спорящих друг с другом точек зрения. Я таким «полнофункциональным» :) набором афоризмов не обладаю, но всё же не раз встречал прямо противоречащие друг другу высказывания великих людей.
                    • –1
                      Я с Б.Шоу не согласен. Как ни крути, сениоры ВСЕГДА учат юниоров. А уж простите, посмеиватся над кем-то кто учит или над тем кто учится — грубо. Взрослым человек не станет, пока не выростит ребёнка, здесь подобная ситуация.
                      • +2
                        К сожалению, в нашей реальности бывает прав и Б.Шоу. Поэтому ваше «ВСЕГДА» следует заменить на «как правило».
                      • +2
                        По-моему, у Шоу о другой ситуации. О том, когда человек, не понимая, только учит других, а сам ничего не делает.
                        • +6
                          Как бы не парадоксально это не звучало, но это очень полезно.
                          Как-то прочитал в подобном топике банальный совет «посещайте форумы для новичков, помогайте им решить проблемы, и это вернется вам вторицей».
                          С тех пор стараюсь по свободе заглядывать в разделы для новичков и стараться помогать практически (а не просто тыкать в документацию). Это развивает, во первых прерывая литературу в поисках ответа, освежаются фундаментальные знания, по ходу приобретаются новые.
                          Да и просто приятно помочь кому-то, это улучшает карму и настроение. :)
                          • 0
                            А вы думаете, что анекдот, кончающийся фразой «На третий раз я уже и сам понял», тупой и не несет в себе смысла?
                            • +2
                              Три уровня понимания:
                              — объяснили — понял
                              — сделал сам не хуже
                              — рассказал другому, и тот понял

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

                              Плюс к тому, при объяснениях вслух мысли структурируются лучше. Я часто, объясняя кому-то, почему что-то нельзя сделать, обнаруживаю другой способ это сделать.
                              • +4
                                Стив Макконнелл, Дональд Кнут, Пол Грэм, Гай Стил… Они ну совсем ничего не знают, правда? (:
                                • +11
                                  Меня удивляет некоторая часть хабралюда, которая плюсует сомнительное утверждение Бернарда Шоу, имеющее смысл только в определённом контексте, но минусуют за намёк на его некорректность. Вдумайтесь — Шоу, быть может, сказал эту фразу так, между делом, говоря о каком-то конкретном человеке, или просто ради красного словца, а теперь люди декламируют её как прописную истину.
                                  И вообще, надо понимать, что любые подобные категоричные утверждения обречены быть ошибочными в некоторых или даже многих ситуациях.

                                  По крайней мере, я обосновал своё мнение.
                                • –2
                                  «Кто может — делает. Кто не может — учит»
                                  Закон Х.Л.Менкена.

                                  «Кто не может учить — управляет»
                                  Дополнение Мартина.
                                  • 0
                                    Заметьте, учит, а не обучает.
                                    • 0
                                      А если перевести фразу обратно в оригинал, то что надо заметить?
                                  • +112
                                    Открыл пост, повелся на маркетинг «Всего за 6 шагов!», а тут план лет на 10,
                                    • +1
                                      100%
                                      • +17
                                        А вы любите числа, ага
                                      • +4
                                        Если бы вы прочитали «Как поднять свой уровень в искусстве программирования. План на 10 лет», то заинтересовались бы меньше, если вообще бы заинтересовались.
                                        • +2
                                          И тут не обошлось без маркетинга
                                        • 0
                                          5 лет университета
                                        • +1
                                          С ума сойти! Ну и списочек. Я уже года три как мечтаю C++ или Java выучить, но понимаю что и HTML, CSS и JavaScript можно до конца жизни изучать.
                                          • –1
                                            Ну Вы преувеличиваете :)
                                            • +1
                                              Нет, я всё же считаю что совершенствовать свои знания в фронт-энд веб разработке можно бесконечно.
                                              А уметь делать всё из вышеперечисленного списка хорошо (подчеркиваю, делать хорошо) мне вообще представляется почти нереальным.
                                              Или это я просто такой легивый и медленный, что у меня на осваивание новых технологий уходит много времени. Тоже не исключено.
                                              • 0
                                                Да нет, просто новые технологии последнее время ОЧЕНЬ быстро стали появляться, развиваться и угасать, что за всем не уследишь…
                                            • 0
                                              Главное начать. Со взрослыми языками очень приятно работать :)
                                              • +3
                                                Что вы подразумеваете под взрослыми? Вы считаете JavaScript недостаточно взрослым? [последнее предложение не попытка похоливарить]
                                                • –6
                                                  Да, являясь веб-разработчиком, я нахожу JS и PHP не слишком серьёзными в сравнении с более «взрослыми» языками, вроде семейства C или Java. С них можно начать, но с них со временем нужно уходить. Естественно, это личное мнение. :)
                                                  • +5
                                                    Как можно считать «недостаточно взрослым» такой замечательный язык! 535 саособов перенаправить страницу — это сила и взрослость!

                                                    www.phpied.com/files/location-location/location-location.html

                                                    P.S. троллфейс.жпг :D
                                                    • 0
                                                      Ну вообще там в два раза меньше способов, поскольку перечислены просто два варианта нотации при работе со свойствами и методами объектов :)
                                                      • +1
                                                        267,5 способа?
                                                        • 0
                                                          Да, именно.

                                                          А по секрету: надо исключить первый, location = location иначе не напишешь.
                                                      • 0
                                                        Не хватает location.reload.call() и location.reload.apply() со всеми комбинациями обращения к свойствам как к членам массива :)
                                                      • +2
                                                        Каждый язык создан для решения определенного круга задач. А сравнивать их этот хороший, а этот плохой бессмыленно.
                                                        • –5
                                                          Абсолютно верно, именно поэтому я их так и не сравниваю.
                                                          • +1
                                                            > «Да, являясь веб-разработчиком, я нахожу JS и PHP не слишком серьёзными в сравнении с более «взрослыми» языками, вроде семейства C или Java.»
                                                            Разве это не Вы написали?
                                                            • –7
                                                              А разве из написанного вытекает ваше предположение? Необязательно. Я это заявлял исключительно с целью подчеркнуть, что эти языки достаточно просты и бедны и многого с ними не добьёшься. Укрепившись в них, надо браться изучать те, где больше возможностей, а не топтаться на месте.
                                                              • +2
                                                                Вы очень сильно недооцениваете PHP и Javascript.
                                                                • –4
                                                                  JS я люблю, но для своих целей. А PHP, увы, я даже переоценил, после того как покодил под .Net.
                                                                • +1
                                                                  А вы какие цели преследуете? Изучить как-можно больше «достаточно взрослых» языков?
                                                                  Практически любой язык программирования, в конечном итоге не более чем инструмент для решения определённого круга задач. Это выше уже прозвучало.
                                                                  В моём понимании, движение вперёд это углубление в каком-то конкретном деле (в данном случае язык программирования либо фреймворк), а не изучение всего подряд, понемножку.
                                                                  А в вашем?
                                                                  • 0
                                                                    Нет, таких целей я пока не преследую и не ставлю, хотя тред почти к этому и призывает. Я лишь говорю, что какие-то темы имеют в себе меньше потенциала, их можно изучить относительно быстро, а дальше будет рутинное пережёвывание старого в «новое». Я согласен с автором в том, что надо расширять свой кругозор, чтобы стать толковым программистом. Однако, по недавнему опыту сужу, далеко не всегда опыт можно будет применить обратно к тому, с чего начинал.

                                                                    Да и, будем честны, веб-девелоперы так много не зарабатывают, как товарищи с толстых клиентов и мобильных платформ. :)
                                                                    • +1
                                                                      >Да и, будем честны, веб-девелоперы так много не зарабатывают, как товарищи с толстых клиентов и мобильных платформ. :)

                                                                      1. Всё зависит от человека и от компании.
                                                                      2. Если заниматься тем, за что больше платят, всегда будут платить мало.
                                                                      • –2
                                                                        Я сужу по аналитическим топикам с Хабра же, простите.
                                                                        • 0
                                                                          А я стараюсь судить по личному опыту. Извините за бестактность…
                                                                      • +2
                                                                        > «Да и, будем честны, веб-девелоперы так много не зарабатывают, как товарищи с толстых клиентов и мобильных платформ. :) „

                                                                        Вот это новость. Сколько для Вас “много»?

                                                                        Я считаю, что главное это заниматься тем, что тебе нравится и тогда деньги будут. А если гнаться только за деньгами, то можно и у разбитого карыта оказаться.
                                                                        • –1
                                                                          Сейчас для меня много 60-80. А вообще денег много не бывает, только мало, уж простите мне мой материализм. Но и неправильно не поймите, богатства я не ищу и не ценю, для меня важнее другие вещи. Тем не менее, в нашем мире без этого никуда.

                                                                          А если мне нравится разработка программного обеспечения и электронных систем в целом? Почему бы тогда не стремиться туда, где и работать приятней (а именно про это был мой первый комментарий, на PHP и JS мне работать не так приятно, как на том же C#), и платят больше?
                                                                          • 0
                                                                            > «А если мне нравится разработка программного обеспечения и электронных систем в целом?»

                                                                            Если Вам нравится (душа лежит так сказать) работать в это области, то Вы по любому будете стремится к самосовершествованию в ней. И поверьте Вас заметят, найдут.
                                                                            • 0
                                                                              Сейчас для меня много 60-80.

                                                                              Килорублей в месяц? Зарабатывают. В принципе и килобаксов в год столько зарабатывают, но это уже за океаном преимущественно.
                                                                              • 0
                                                                                > Сейчас для меня много 60-80
                                                                                Уверяю вас, в Москве это вполне посильная задача. Занимайтесь тем, к чему лежит душа и у вас всё получится. Удачи вам!
                                                                  • –2
                                                                    Ну почему же? Для обучения Borland Pascal хороший, а Quick BASIC — говно.
                                                                    • 0
                                                                      > Каждый язык создан для решения определенного круга задач
                                                                      Предлагаю ознакомиться с понятием "язык общего назначения".
                                                                      • 0
                                                                        И что Вы хотите сказать?
                                                                        • 0
                                                                          Что не каждый язык создан для определенного круга задач. Например я не вижу отличий в кругах задач Ruby и Python, почему бессмысленно сравнивать их?
                                                                          • 0
                                                                            Каждый язык создан для определенного круга задач.

                                                                            Например, вот сравнение:
                                                                            habrahabr.ru/blogs/ruby/48952/
                                                                            И какой вывод следует из этого сравнения?
                                                                            • 0
                                                                              Вывод: с выходом ruby 1.9 минус один аргумент против руби о его тормознутости. :)
                                                                  • +3
                                                                    Взрослый язык программирования — это язык, который не может осилить школота :)
                                                                    • +1
                                                                      Извинитe, картинку забыл:
                                                                • 0
                                                                  Здесь предлагают просто попробовать, чтобы иметь представление.

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

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

                                                                  3. Совершенствуйте понимание программного обеспечения на различных уровнях.
                                                                  За исключением B-tree БД и своего ЯП, со всем остальным вам всеравно прийдется столкнутся. Первую программу я написал 15 лет назад, за это время все эти пункты у меня были, причем вынужденные, а не интереса ради.

                                                                  Остальное опять же с опытом будет само собой, ну разве что кроме open source — для такого нужно время и деньги, а не все обладают такой роскошью.
                                                                • +2
                                                                  А почему, интересно, в парадигмы затесался ассемблер? Он вообще язык, и ассемблеры они разные. Там наверное уместнее смотрелось бы процедурное программирование.
                                                                  • +2
                                                                    Имеется ввиду, скорее всего, низкоуровневое программирование, хотя, тоже сомнительно называть это парадигмой…
                                                                    • 0
                                                                      Имеется ввиду именно ассемблер, ибо является своеобразным «языком электроники». Ближе к железу только машинные коды или программирование ПЛИС. Это очень своеобразная область, так как даже сам алгоритм пишется не в древовидном, а в линейном виде (нет вложенных конструкций).
                                                                      • 0
                                                                        это как (линейный вид и вложенные конструкции?)
                                                                        • +2
                                                                          Это

                                                                            ldi r16, 10
                                                                            ldi ZL, Low(str)
                                                                            ldi ZH, High(str)
                                                                          LOOP_START:
                                                                            lds r20, Z+
                                                                            cmpi r20, 0
                                                                            breq NEXT
                                                                            call do_something
                                                                            subi r16, 1
                                                                            breq LOOP_START
                                                                          NEXT:
                                                                            ...
                                                                          

                                                                          вместо

                                                                          const char *p_char = str;
                                                                          
                                                                          for (int i = 0; i < 10; ++i)
                                                                          {
                                                                            if (*p_char == 0)
                                                                              break;
                                                                          
                                                                             ++p_char;
                                                                          }
                                                                          


                                                                          Пример надуманный, но суть передаёт.
                                                                          • 0
                                                                            а разница в чем?
                                                                            • +2
                                                                              В способе записи. Как между "(* (+ a b) (- c d))" и "(a + b) * (c — d)". Для вас это, возможно, станет открытием, но способ записи алгоритма сильно влияет на мышление.
                                                                              • +1
                                                                                Может быть я совсем непонятно задал вопрос. Вы написали, что алгоритм в ассемблере записывается в линейном, а не древовидном виде. И, после моего вопроса привели в качестве иллюстрации два листинга похожих алгоритмов на ассемблере и си. Листинги практически идентичные и я действительно не понимаю в чем отличие.

                                                                                И разве не так будет правильно записать декомпиляцию ассемблерного листинга?
                                                                                int i = 10;
                                                                                const char *p_char = str;
                                                                                do
                                                                                {
                                                                                if (*(p_char++) == 0)
                                                                                break;
                                                                                do_something();
                                                                                --i;
                                                                                }(while i > 0)

                                                                                (насчет инкремента в if, как-то страно правда вышло)
                                                                                • +1
                                                                                  Код на C древовидный, так как в нём имеются обособленные вложенные конструкции. Код же на ассемблере линеен: там управление передаётся только вперёд или назад, но не вглубь. Вы про «плоское» хранение древовидных структур в файле/буфере слышали? Вот это то же самое, только дерево — C, а его плоское представление — ассемблер.
                                                                    • +6
                                                                      Ассемблер — сейчас уже это особый мир. После него может сильно поменяться отношение к программированию, когда видишь, что софтинка, деляющая что-то осмысленное, занимает единицы килобайт и при этом «летает».
                                                                      Плюс к тому — начинаешь очень хорошо осознавать, во что в итоге превращается код. В результате получается эдакая фоновая оценка — насколько эффективна та или иная фича, как она может быть реализована. Хотя это не после одной программы, конечно.

                                                                      As for me — через низкоуровневое программирование должен пройти каждый приличный программист. Очень помогает от code bloat и нагромождени абстракций.
                                                                      • 0
                                                                        Я о том, что он не подход к программированию, а язык. Хоть там в основном рулит процедурный подход, но никто (кроме здравого смысла) не может помешать вам использовать объектно-ориентированный подход для написания приложений на ассемблере.
                                                                        • +4
                                                                          Согласен, формально говоря — да, не подход. Но, с другой стороны — отличия от высокоуровнеывх языков всё же разительны и, думаю, выделение в отдельную категорию ассемблер заслужил.
                                                                          • 0
                                                                            Это язык программирования со своим подходом.
                                                                            Инструкции ассемблера как правило более низкоуровневые и для написания эффективных программ на ассемблере нужно мыслить иначе, чем при написании программ на ЯВУ.

                                                                            Лучшей иллюстрацией разницы в подходах между ассемблерами и ЯВУ будет, пожалуй, Brainfuck.
                                                                            По сути это язык ассемблера для специфичного RISC-процессора. Является тьюринг-полным, но мысля теми же категориями, что и при написании программ на Си и прочих ЯВУ, далеко не уедешь.
                                                                            • 0
                                                                              Только в брейнфаке отсутствуют некоторые конструкции, которые обычно каждый уважающий себя ассемблер/процессор предоставляет.
                                                                              А возьмем x86. Чего там нет что есть в Си? Циклы, условные операторы, арифметические/логические операции, вызов подпрограмм. Есть, конечно стандартные функции, но их вряд ли стоит здесь рассматривать как часть языка.
                                                                              • 0
                                                                                В ассемблере более мелкие «строительные блоки», из чего автоматически следует, что для написания эффективных программ нужно мыслить в несколько ином ключе, чем при использовании ЯВУ.

                                                                                На вскидку:

                                                                                В ассемблере (возьмём тот же IA32/x86) я могу выполнить одно сравнение, а затем, в зависимости от результатов, разветвить выполнение на более, чем две ветви:

                                                                                cmp eax, ebx
                                                                                ja @@above
                                                                                jb @@below
                                                                                jz @@zero


                                                                                В большинстве ЯВУ нам понадобится минимум два if-a. Можно найти и другие примеры.

                                                                                Естественно, ассеблер не настолько сильно отличается от тех же C++ или Java, насколько от них отличаются ФЯП а-ля Haskell.
                                                                      • +9
                                                                        Был у меня как-то на собеседовании чрезвычайно развитый человек — обо всем мог поговорить, но не знал нормально ни одной технологии :)) Что вы думаете насчет узкой специализации? Так ли нужно писать веб-приложение человеку, от которого ждут код ассемблере?
                                                                        • +10
                                                                          Всё ясно. А работать-то когда? На пенсии?
                                                                          • +23
                                                                            А жить когда?
                                                                            • +1
                                                                              кстати, да!
                                                                              • –2
                                                                                А жить работая… или если вы работаете что бы жить, то вы треть жизни тратите впустую.
                                                                                • 0
                                                                                  Однажды я задумался. При рождении ребёнок спит почти весь день. Потом его сон сводится к половине дня. Средний подросток должен спать 6-8 часов. 8 часов — это треть дня. 6 — часов — это четверть дня. Ладно, возьмём 8 часов — среднее время сна человека в день. После университета человеку где-то 21 год. Треть этого он проспал, т.е. 7 лет. Вот я и задумался над этим, я 5-7 лет своей жизни просто проспал. Сколько же я мог сделать за это время… наверное, после этого я начал ценить время. Учусь (всю жизнь учиться надо), работаю, не трачу время на плевание в потолок. Треть жизни и так теряется, куда уж далее…
                                                                                  • 0
                                                                                    Вот я и задумался над этим, я 5-7 лет своей жизни просто проспал. Сколько же я мог сделать за это время…

                                                                                    Немного. Заболевания, вызывающие полное отсутствие сна очень быстро приводят к смерти ( en.wikipedia.org/wiki/Sporadic_fatal_insomnia), значительно сокращающие период сна — к нарушению работы мозга и заметному снижению когнитивных функций.

                                                                                    Так что не стоит жалеть о той трети жизни, она вам позволяет получить больше от оставшихся двух.
                                                                            • –1
                                                                              К сожалению, многие шаги не сработают для 90% программистов здесь — на похапе не работает ни ФП, ни СРВ ;-)
                                                                              • +2
                                                                                Ну, кстати, если язык тьюринг-полный, то программировать на нём можно почти по любой парадигме (особенно если язык интерпретируемый, как php), только можно быть не так удобно. Вот, например, про ООП на C: www.planetpdf.com/codecuts/pdfs/ooc.pdf
                                                                                • 0
                                                                                  Да не в языке здесь дело. А в программистах.
                                                                                  Впрочем, для них и предназначена статья — так что может быть я и не прав.
                                                                                  • +1
                                                                                    Спасибо за ссылку. Я тут пилю компилятор потихоньку, и изложенные в ней идеи очень пригодятся.
                                                                                    • +2
                                                                                      > если язык тьюринг-полный, то программировать на нём можно почти по любой парадигме

                                                                                      … за которую от коллег не получишь стулом по точке вход.
                                                                                      • +1
                                                                                        Страшно подумать, чем и куда можно получить за ООП на Brainfuck.
                                                                                        • +6
                                                                                          искренне уважение коллег и доброту медицинского персонала.
                                                                                  • –1
                                                                                    Покажите мне хоть одного человека, который выполнил все эти пункты?

                                                                                    И вообще, оно надо? Лично для меня лучше быть узким спецом, чем везде и понемногу
                                                                                    • +5
                                                                                      Оно приносит пользу именно в области специализации. По многим причинам — начиная с освоения различных стратегий мышления и заканчивая возможностью увиденное использовать в своей сфере.
                                                                                      • 0
                                                                                        Там статья о том, что приобретая опыт в различных областях, мы совершенствуем себя, как разработчика. Что определенного пути нет, но чтобы веселее было, можно выделить себе «достижения», как в компьютерных играх и приводится список нужных, по мнению автора, ачивок. Рекомендуется менять по своему усмотрению.
                                                                                        Скорее всего, в этом пересказе я переврал статью. Так же как и автор перевода.
                                                                                        • +7
                                                                                          >Покажите мне хоть одного человека, который выполнил все эти пункты?

                                                                                          все пункты из всех шести шагов? ничего сверхъестественного — они перекрываются же, у меня, например, из каждого шага по 3-4 пункта выполнено, только SICP и всякие прологи не осиливал еще.

                                                                                          >Лично для меня лучше быть узким спецом

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

                                                                                          кроме того, это просто развивает мозг, как рабочий инструмент (допаминчик выделяется при изучении нового, связей между нейронами становится больше).
                                                                                          кроме того, это дает больше возможностей по трудоустройству
                                                                                          • 0
                                                                                            > ничего сверхъестественного — они перекрываются же, у меня, например, из каждого шага по 3-4 пункта выполнено, только SICP и всякие прологи не осиливал еще.
                                                                                            Так у меня тоже процентов 80-85 выполнено, но я говорил именно про все пункты. Еще же пункты, которые не выполнило процентов 99 всех разработчиков (да и не пыталось выполнить). Например, «напишите язык программирования», «напишите драйвер устройства», «напишите книгу по программированию». Кто выполнил эти три пункта?
                                                                                            • +1
                                                                                              >Например, «напишите язык программирования», «напишите драйвер устройства», «напишите книгу по программированию». Кто выполнил эти три пункта?

                                                                                              а что сложного в написании драйвера устройства — это какая-то страшная магия? пишу в перерывах между троллингом на хабри.

                                                                                              про язык программирования — многие пишут встроенные DSL для своих проектов, мне для геймдева приходилось писать что-то вроде VM, где абилки фактически программировались опкодами.
                                                                                        • 0
                                                                                          интересно, а Джейсон Рудольф все пункты выполнил которые описал.
                                                                                          • 0
                                                                                            Вы забыли в конце дописать: станьте богом.
                                                                                            • +11
                                                                                              *позвоните родителям
                                                                                              • +1
                                                                                                … Геннадию.
                                                                                                • +2
                                                                                                  Не тупить целый день на хабре
                                                                                            • +2
                                                                                              По-моему, эти 6 шагов, нифига не 6, а больше. Это раз. И, по-моему, чтобы стать гуру во всем этом, жизни не хватит. Это два. Сам автор не выполнил все эти пункты. Это 3.

                                                                                              Так как после этого можно относиться к данным советам? :(

                                                                                              • 0
                                                                                                Наоборот — там не про «стать гуру», а про «попробовать и понять основные моменты». Ну и за всё не поручусь — но книгу автор таки написал :-)
                                                                                                • +1
                                                                                                  написать «нетривиальное приложения», выступать на лекциях и прочее — это таки гуру.

                                                                                                  хелловорлды на хаскеле можно и из торрентов скочять.
                                                                                                • 0
                                                                                                  И вообще, это не шаги, а «достижения». Цифры 6 в оригинале тоже нет
                                                                                                • –4
                                                                                                  Спасибо, отличная статья!
                                                                                                  Добавил несколько фишек в свой арсенал.
                                                                                                  • +1
                                                                                                    Подняли мне настроение!
                                                                                                  • +2
                                                                                                    Всё-таки статья не описывает весь спектр требований к современному программисту.

                                                                                                    Полный же список уже пробегал на хабре, вот он.
                                                                                                    • –3
                                                                                                      Делайте то, что вам интересно, и не мучайте себе мозг такими статьями.

                                                                                                      Ну а что касается Open Source — не знаю как в других областях, у нас в веб-технологиях Open Source продукты являют лишь пример либо быдлокодинга и непрофессионализма — Drupal/Joomla/Wordpress/многочисленные shop-движки, либо оверинжинеринга и явапоклонничества — всякие доктрины/симфонии и иже с ними.

                                                                                                      Их изучать стоит лишь для того, чтобы так никогда не делать.

                                                                                                      Хотя есть конечно, и неплохие примеры, вроде Yii.
                                                                                                      • +2
                                                                                                        >у нас в веб-технологиях Open Source продукты являют лишь пример либо быдлокодинга и непрофессионализма — Drupal/Joomla/Wordpress/многочисленные shop-движки, либо оверинжинеринга и явапоклонничества — всякие доктрины/симфонии и иже с ними.

                                                                                                        костыли и непрофессионализм — это у вас в PHP-мирке, а не у нас в веб-технологиях.

                                                                                                        вот именно поэтому и советуют учить более одного языка и более одной платформы — чтобы не казалось, что все вокруг точно так же, как в родном уютном болоте.
                                                                                                        • –3
                                                                                                          Ну насколько я знаю, с высокоуровневыми языками в вебе все не очень весело: большинство руби-продуктов завязано на тяжелом Ruby on Rails из сотен переплетенных классов, и Питоновский джанго тоже не легкий. Плюс, вещи, которые в PHP реализованы на Си (веб-сервер, многие функции, разбор Урл-параметров), там написаны нативно, то есть неэффективно.

                                                                                                          А еще в PHP есть много библиотек на Си для работы с СУБД, архивами, и еще много чем. А в других языках их либо нет, либо они не на Си.

                                                                                                          Код может и красивый, и логичный, но громоздкий (если учитывать библиотеки) и жадный до памяти в итоге выходит. Вряд ли сайт на Руби в 10 Мб на поток по памяти уложится.

                                                                                                          А, еще Яваскрипт и Нода есть, но там тоже половина вещей, к которым я привык в PHP, типа операций со строками и с массивами, расширение классов, написаны на самом же яваскрипте. Но это все равно интересная платформа, из-за особенности асинхронных вызовов.

                                                                                                          Как-то страшно пытаться там что-то делать и тратить силы, если изначально понятно, что летать оно точно не будет с таким подходом. Да и фейсбуки всякие не на Руби написаны — это показательный пример.
                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                            • +2
                                                                                                              >Плюс, вещи, которые в PHP реализованы на Си (веб-сервер, многие функции, разбор Урл-параметров), там написаны нативно, то есть неэффективно.
                                                                                                              >А еще в PHP есть много библиотек на Си для работы с СУБД, архивами, и еще много чем. А в других языках их либо нет, либо они не на Си.

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

                                                                                                              >Код может и красивый, и логичный, но громоздкий (если учитывать библиотеки) и жадный до памяти в итоге выходит. Вряд ли сайт на Руби в 10 Мб на поток по памяти уложится.

                                                                                                              а зачем жалеть память? ей не больно, в нее много влезет
                                                                                                              • 0
                                                                                                                К слову сказать, с учетом copy-on-write у меня воркеры Rails занимают по 5-8 Мб памяти каждый, так что вполне себе укладываются.
                                                                                                          • +1
                                                                                                            Из известного анекдота:
                                                                                                            деньги, машину, квартиру — это раз.…

                                                                                                            P.S. Code Kata кто-нибудь бы перевёл.
                                                                                                            • +1
                                                                                                              Займусь на выходных.
                                                                                                          • +3
                                                                                                            Статья из серии «Что ты должен успеть сделать этим летом» или «Места, которые надо посетить в своей жизни», которые публикуют в журналах вроде Космополитен или Менс Хелф.

                                                                                                            Люди сами должны понимать, что им надо, а что нет.
                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                            • 0
                                                                                                              • взорвите свой мозг и соберите кусочки обратно в надежде получения новых знаний и навыков
                                                                                                              • +18
                                                                                                                • 0
                                                                                                                  Картинка-загадка, то она есть, и вот её нет o.O
                                                                                                                  • 0
                                                                                                                    Не знаю, не знаю… Картинку честно скопипастил из хабратопика Выучить С++ за 21 день.

                                                                                                                    Может она под ниндзю из топика косит...
                                                                                                                    • 0
                                                                                                                      Среди хабравчан ходят легенды, что только один сайт может сдюжить хабрасилу великую, иные сайты роняющую. Зовётся тот сайт хабрасторейджем да обитает он под доменом орговским. Путь-дорогу к нему знает всякий сервер днсный, спросить просто его достаточно. Попробуй, и не будут картинки пропадать впредь у тебя.
                                                                                                                • +3
                                                                                                                  Узнавайте и вникайте во все мелочи и тонкости языка, на котором пишите. Это будет выделять вас среди говнокодеров-верхоглядов.
                                                                                                                  Мелочи — не главное. Мелочи — САМОЕ главное.
                                                                                                                  • 0
                                                                                                                    Соглашусь. И этот совет обнажает ошибку в одном довольно распространённому мнении: «под каждую задачу следует брать наиболее подходящий инструмент => программист должен знать много языков».
                                                                                                                    • 0
                                                                                                                      А почему вы поставили "=>" между этими двумя тезисами? Они не связаны никак.

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

                                                                                                                      А «Right Tool For The Right Job» — это совсем другое золотое правило. Просто не беритесь за «не свои» задачи, вот и все.
                                                                                                                  • 0
                                                                                                                    У меня возникла идея насчёт нового проекта. Создам систему ачивментов (achievement), которые буду отмечать галочками. Да, к этому следует сремиться. Ачивки на то и создаются. Спасибо автору.
                                                                                                                    • –1
                                                                                                                      Основное — это структуры данных, алгоритмы, как устроены внутренности ПК. А тут описано не искусство программирования, а все его разнообразие.
                                                                                                                      • 0
                                                                                                                        Такой вопрос: какое приложение понимать как нетривиальное, а какое как тривиальное?
                                                                                                                        • 0
                                                                                                                          Я думаю, что под тривиальным имеются ввиду наборы готовых решений. Т.е. разработки «под копирку», а нетривиальные — придуманные решения самим разработчиком.
                                                                                                                          • 0
                                                                                                                            Если разработчик написал, допустим, веб-сайт для обмена книгами с использованием, допустим, php фреймворка, можно ли считать это приложение нетривиальным? Вроде как фреймворк и предоставляет, частично, готовые решения, но и разработчику необходимо потрудиться.
                                                                                                                            • 0
                                                                                                                              По сравнению с полиморфным вирусом под x64 — нет.
                                                                                                                        • 0
                                                                                                                          А деньги когда зарабатывать?????

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