В преддверии RubyC, которая состоится в Киеве 31 мая — 1 июня 2014 года, организаторы предлагают поближе познакомиться со спикерами конференции.
Ниже первое интервью — с Джереми Эвансом (Jeremy Evans) — ведущим разработчиком калифорнийского государственного аудиторского бюро (California Bureau of State Audits). Подробнее о его теме Deep Dive into Eager Loading Limited Associations можно узнать на сайте http://rubyc.eu/#speakers, а о самом Джереми — из его ответов.
1. Какой инструментарий ты чаще всего используешь в своей работе? / What tools do you usually use in your practice?
В качестве операционной системы на всем оборудовании я использую OpenBSD. Большинство людей используют OpenBSD из соображений безопасности, и для меня это тоже важно, но приоритетом является легкость в администрировании и стабильная работа. Я использую OpenBSD с 2002 года и полностью перешел на эту ОС в 2008 году. В 2010 стал разработчиком OpenBSD. Сейчас отвечаю за портирование Ruby для OpenBSD, включая JRuby и Rubinius. В качестве текстового редактора я использую Vim. И до сих пор, даже после нескольких лет эксплуатации, я использую только «чистый» Vim (без плагинов). Иногда использую SciTE для более простых задач, где не надо много редактировать. В качестве графической оболочки я использую fluxbox, он простой и удобный, особенно мне нравится, как организованы оконные вкладки и клавиши быстрого доступа.
/The operating system I use on all of my personal machines is OpenBSD. When most people think about OpenBSD, they think about security, and while that's important to me, the main reason I use OpenBSD is that it is easy to administer and rarely breaks. I've been an OpenBSD user in some capacity since 2002, and have been using it on all of my personal machines since 2008. In 2010 I became an OpenBSD developer, and I'm currently responsible for OpenBSD's ruby ports, including JRuby and Rubinius. My preferred text editor is vim, though even after a few years of use I still only use the basics (no vim plugins). I occasionally use SciTE for simpler coding tasks that don't require a lot of editing. I use fluxbox as my window manager. It's simple and gets out of the way, and I like the way window tabs and keyboard shortcuts work.
2. Почему ты уделяешь столько времени обучению людей? / You spend a lot of time teaching people. What are your personal reasons?
Мне приятно осознавать, что люди решают свои проблемы с помощью моего софта. Приятно быть частью этого сообщества. В большинстве случаев я стараюсь помочь другим разобраться с теми проблемами, с которыми столкнулся сам, и использовать для этих целей мой софт. Я отлично помню, как начинал программировать. Я был очень признателен всем, кто мне помогал и обучал, поэтому помогаю другим, так сказать возвращаю «долг». Очень часто, помогая кому-то, я сам лучше понимаю суть проблем в моем софте. Иногда не хватает некоторых документов, или в них находятся ошибки, или что-то просто работает не так, как должно. Меня расстраивает, когда мой код работает неправильно, так что стараюсь не допускать ошибок, чтобы не расстраивать других. Помогая людям развиваться, я развиваюсь сам, это выгодно для всех. Кроме того, я не люблю, когда долго отвечают на мои запросы о помощи. Вот и сам стараюсь всегда отвечать быстро, раз уж жду этого от других.
/I definitely get some personal satisfaction from knowing that people are able to solve their problems using software I wrote. I think in many cases I feel a sense of camaraderie. Most of the time I am helping people, I'm helping them learn how to use the software I wrote, to solve similar problems that I have faced. I also remember what I was like when I was starting as a programmer. I remember how much I appreciated when other programmers helped me learn, and so helping others is a way to pay back for the help other programmers have given me. In many cases while I'm helping people, I get a better understanding of what the problems are in my own software. These may be missing or incorrect documentation, or things that just plain don't work the way they should. I get frustrated when software I use doesn't work correctly, so I try hard to make sure that my software does work correctly, so that other programmers don't feel frustrated when using it. Helping other programmers helps me improve my own software, which benefits all of the programmers that use the software I write. In addition to getting frustrated when software doesn't work correctly, I also get frustrated when I ask for help from other programmers when using their software, and they take a long time to respond or don't respond at all. I think it would be hypocritical if I expected other programmers to respond quickly when I asked for their help, while not responding quickly when other programmers ask me for help.
3. Каким проектом ты гордишься? / Can you name the project that you are proud of?
В первую очередь работой над Sequel. Я взялся за проект в Марте 2008, после того как месяц сам им пользовался. Это самый большой проект, которым я занимался. Проблема была в том, что, несмотря на хорошую общую архитектуру Sequel, его реализация оставляла желать лучшего, а документации практически не было. Тем не менее, благодаря хорошему «покрытию» кода тестами, я смог качественно реорганизовать и улучшить код. Мне кажется, мне удалось превратить Sequel из простой библиотеки с быстрым доступом к БД (ORM, object relational mapper) в один из лучших примеров таких библиотек для Ruby. Может, он никогда не станет самым популярным Ruby ORM, поскольку это не базовый ORM для Rails, но он уже заслужил уважение среди многих рубистов.
/While it is not and may never be the most popular ruby ORM, since it is not the default ORM for Rails, I think it is still widely respected in the ruby community. I'm certainly most proud of my work on Sequel. I took over maintenance of the Sequel project in March of 2008, after only using it for about a month. It was largest project I had worked on at the time I took over maintenance. While the overall architecture of Sequel was good and in general persists to today, the implementation was a mess and there was very little documentation. However, the test coverage was excellent, which gave me confidence in refactoring and improving the implementation. Under my maintenance, I think Sequel has gone from a simple database library for quick database access, to the premier ruby database library and object relational mapper (ORM). While it is not and may never be the most popular ruby ORM, since it is not the default ORM for Rails, I think it is still widely respected in the ruby community.
4. Какой стартап, написанный на RoR, Вас больше всего впечатлил? Возможно, Вы лично принимали участие в разработке? / Can you name your favorite start-ups, written on RoR, maybe you personally have participated in some of them?
Сам с такими стартапами не работал, поэтому назову Heroku. Они активно используют Sequel в своих внутренних системах, и к тому же хостят многие мои веб-приложения бесплатно.
/While I've never worked for them or any other start-up, my favorite start-up is Heroku. In addition to using Sequel extensively in their internal systems, they also host many of my personal web applications for free.
5. Как часто ты тестируешь код в своих проектах? Какие инструменты используешь? / How often do you test code in your projects. What technologies of testing do you use?
Тестирую код всех своих проектов перед каждым коммитом или, в крайнем случае, перед размещением изменений на GitHub. Для Sequel тестирование особенно тщательное, я проверяю около 6 реализаций на ruby, более 10 адаптеров баз данных, более 10 баз данных, общее количество групп тестов (test suites), наверное, добегает до 100. Проверяя саму библиотеку, обычно использую RSpec. Стиль тестирования не меняю с момента появления RSpec 1, и многие мои библиотеки работают на RSpec 1, 2 или 3. Еще использую Travis-CI для Sequel или других проектов. И хотя Travis часто не дает 100% точные результаты, пропуская существующие ошибки, я думаю его использование оптимально в большинстве случаев.
/In general, I test code in all my projects before every commit, or at least before I push changes to GitHub. For Sequel, this testing is quite extensive, as I'm testing on about 6 ruby implementations, over 10 database adapters, and over 10 databases, with the total number of test suites run probably numbering over 100. In terms of the testing library itself, I usually use RSpec. The test style I use hasn't changed much since RSpec 1, and many of the libraries I work on, including Sequel, will run on RSpec 1, 2, or 3. I do use Travis-CI on Sequel and another project, but in general I've found it reports more false positives than actual issues. Still, for my more popular projects, I still think it is a net benefit to use Travis.
6. Каков, на твой взгляд, наиболее эффективный и быстрый путь стать популярным Ruby-программистом - создание собственных Ruby проектов или участие в разработке проектов, уже пользующихся популярностью? / What is the most effective and fast way to become a popular Ruby programmer – create your own Ruby project or write patches to famous projects?
Я бы сказал, что если вы жаждете славы, то стоит задуматься над созданием проектов, которые были бы полезны для как можно большего количества программистов. Чем он быстрее и эффективнее – тем лучше. В случае с известными проектами вся слава чаще уходит к руководителям проекта, а не к определенным разработчикам. Разбираться, кто что написал, будут немногие.
/I'd say if popularity is your goal, creating a ruby project that fulfills a need that many ruby programmers have is probably the most effective and fast way. While some people may notice who wrote which patch for a famous project, in most cases the glory goes to the project maintainers, not to the individual contributors.
7. Известно, что большинство успешных разработчиков начинали программировать с детства (до 10 лет). Какой язык программирования ты бы посоветовал для обучения детей? / It is known that the most successful developers have tried toprogram in small age (some under the age of 10 years). What a programming language would you start to teach or advise your children to try?
Я в детстве не очень увлекался программированием (разве что, какое-то базовое графическое программирование, когда мне было около 10 лет), чуть больше - в студенческие годы (C++ and Java), но профессионально программировать начал в 23. Наверное, я был бы лучшим программистом, если бы начал раньше. Я не уверен, что я бы посоветовал своим детям попробовать программирование вообще, если они не проявляют к этому интерес. Тем не менее, если они захотят изучать программирование, я бы посоветовал начать с Ruby или Python.
/I did have very brief exposure to programming as a child (some basic graphic programming when I was around 10), and some additional exposure during college (C++ and Java), but I didn't start programming professionally until I was 23. I would probably be a much better programmer now if I had started younger. I'm not sure I would advise my children to try programming at all unless they showed an interest in doing so. However, if they wanted to learn programming, I'd probably try to start them on Ruby or Python.
8. Есть профессиональные советы? / What else professional advice can you propose?
Чтение очень важно, но, как и любое занятие, программирование требует опыта. Я читаю много книг и, конечно, многое из них почерпнул, но больше пользы принесли попытки что-то создать после прочтения. Одного чтения недостаточно.
/I think reading is important, but like many things, programming is something that requires a large amount of experience to do well. I read a lot of free programming books, and while I've definitely learned things just from reading, I've learned far more by trying to build something after reading.
9. Какие дальнейшие планы после RubyC? / What are your next steps after RubyC?
Вернусь к работе с Sequel. Скорее всего, вернусь к изучению новых языков, я давно этим не занимался, последний раз пытался разобраться с Io. В списке - Smalltalk, Nimrod, Elixir и Forth. Обычно я пытаюсь реализовать библиотеку или приложение на новом языке. Приложение должно быть достаточно небольшим для того, чтобы не занять много времени, но достаточно большим для освоения языка.
/I plan to continue working on Sequel. It's been a little while since I tried learning a new programming language (my last one was Io), so I may take some time to learn a new one. I'm looking at Smalltalk, Nimrod, Elixir, and Forth as possible new programming languages to learn. Usually I try to implement a small library or application in the language. It needs to be small enough that it doesn't take too much time, but large enough so that I get a good feel for the language.
Спасибо до встречи на RubyC!
Следите за новостями на https://twitter.com/rubyc_eu и https://www.facebook.com/RubyC.eu
>>> Подробности