Как стать великим программистом с открытым исходным кодом Python? - PullRequest
1 голос
/ 08 января 2010

Я программист веб-приложений на C #.

Несколько недель назад я задал вопрос о stackoverflow о Что должен начать программист (web), изучая - Erlang, Haskell, Python, C ++, F # . Спасибо всем, кто высказал свои мысли и помог принять решение. Я обнаружил, что Python должен быть тем, кого я должен начать с нетерпением ждать. Я также заинтересовался Erlang. Я также постараюсь управлять какое-то время в месяце для Эрланга, но я начал с Python. Я начал учиться с Dive на Python, который пока хорошо работает.

Была причина, по которой я выбрал Python из-за множества других вариантов. Параллельно с моим постом (упомянутым выше) я также проводил расследование. Я имел в виду, прежде чем поставить вопрос здесь. Почему большинство великих инженеров (я не использую разработчиков - они заслуживают большего уважения, чтобы называть их инженерами) были / являются участниками проектов с открытым исходным кодом? И проект с открытым исходным кодом имеет свой формат. Все великие программы, когда-либо изобретенные, имеют прямую или косвенную связь с открытым исходным кодом. Они создали отличный проект с открытым исходным кодом, прежде чем создать его, они работали для открытого проекта и т. Д. И т. Д.

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

Когда я начал видеть что-то о Python, у него удивительная химия с C. И большинство его клиентов делили свои хардкорные процессы на C вместо Python. Это делает меня любопытным. Я ушел и начал больше изучать этот факт и нашел несколько громких имен, использующих Python с C. Даже некоторые великолепные проекты с открытым исходным кодом (предприятие) также разработаны таким образом.

Почему все хорошие имена поддерживают свой процесс на C и используют Python для сценариев? Разве Python не достаточно хорош, чтобы использоваться для внутреннего процесса? Если это хорошая практика сохранения дизайна, тогда почему мы еще не видели ни одной хорошей книги по этому вопросу? Или у нас есть? Я должен держать это в плане, поэтому, если у вас есть хорошие материалы для чтения, пожалуйста, укажите здесь.

Я собираюсь планировать более широкую область своего обучения. Цель состояла в том, чтобы выучить язык, который теперь стал синтезом на платформе с открытым исходным кодом. У меня есть рабочий стол DELL OPTIPLEX, на котором я собираюсь настроить среду с открытым исходным кодом с UNIX, VIM, PYTHON. Есть много гуру с открытым исходным кодом, работающих над некоторыми замечательными материалами с открытым исходным кодом. Я видел сэр Алекс Мартелли здесь на стеке потока Хотел бы я получить от него кое-что о том, как мне проектировать среду разработки с открытым исходным кодом? Но есть много других героев, и мне также нравится их опыт в этом.

Они изучают концепцию обучения и учатся становиться хорошим разработчиком с открытым исходным кодом (Unix, Python с C). Для этого мне нужно, как настроить среду разработки? Каковы отличные разработки среды разработки с открытым исходным кодом? Пожалуйста, держите ответ в контексте с Python.

Спасибо.

Ответы [ 4 ]

5 голосов
/ 08 января 2010

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

Почему все добрые имена имеют свои обрабатывать с C и использовать Python для скрипт? Разве Python не достаточно хорош, чтобы использоваться для бэкэнд-процесса?

Я не уверен, что вы имеете в виду. Python часто используется в серверной работе; если и когда какая-то часть оказывается узким местом ЦП, извлечение стабильного ядра и использование для него кода C (или C ++, или Fortran и т. д. - все они хорошо взаимодействуют с Python) - разумный первый шаг при оптимизации ( Cython также часто является выполнимой альтернативой) - точно так же, как в «последнем» варианте, можно углубиться в специфичный для платформы язык ассемблера, чтобы извлечь еще большую производительность (GMP, основная библиотека, которую я обертываю в gmpy , делает это при наличии гарантии - действительно хорошие сборочные детали на самом деле специфичны для конкретных моделей процессоров, даже не для «платформ»). Почему вы думаете (например), что наличие специфичной для CoreDuo сборки для полной оптимизации ЦП означает, что общая сборка x86 "недостаточно хороша", или наличие общей сборки означает, что C "недостаточно хорошо" и т. Д., И так далее? В (редких, но не неслыханных) случаях, когда сжатие каждого цикла ЦП действительно важно, для той крошечной части кода, для которой это важно , снижение уровня абстракции является отличной стратегией, и в ни в коем случае не подразумевается, что верхний уровень абстракции "недостаточно хорош".

Кстати, именно поэтому я поставил «последний» в кавычках - потому что, когда даже самая конкретная сборка все еще требует большей оптимизации, можно (для некоторых процессоров) перейти к микрокоду, или ПЛИС, или полностью настраиваемым ИС. Конечно, это решительно не означает, что программные решения не являются (чтобы использовать правильный глагол один раз ;-) достаточно хороши (для оставшихся 99,999% ваших потребностей): это означает настоящие инженеры понимают компромиссы в производительности ...! -)

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

Какой предмет (ы) вы думаете о том, что сами по себе стоят целую книгу? Я не думаю, что существует большой потенциальный рынок для книги о (скажем) том, как и когда выбирать части Python для перекодирования в C, части C для перекодирования в универсальной сборке для выбранной вами платформы (ей), части универсальной сборки перекодировать в сборку для конкретной модели процессора и т. д. вплоть до микрокода, FPGA, пользовательских микросхем - это моя мотивация, чтобы не посвятить (скажем) год моей жизни написанию такой книги. Я думаю, что Nutshell делает достойную работу, обрисовывая в общих чертах самые основы - как вы используете профилирование для выбора частей, которые являются нагрузками на процессор (если таковые имеются), оптимизации их на уровне Python и перекодирования на языках более низкого уровня, если это необходимо (без упоминания Cython - еще не было, когда я в последний раз переписывал Nutshell). Но, конечно, эта часть книги составляет 10% или меньше.

Я собираюсь планировать более широкую сферу учусь. Целью было изучить язык теперь оказывается синтез на платформе с открытым исходным кодом. У меня рабочий стол DELL OPTIPLEX, на котором Я думаю, чтобы настроить с открытым исходным кодом среда с UNIX, VIM, PYTHON. Есть много гуру с открытым исходным кодом работая над большим открытым исходным кодом вещи. Я видел сэра Алекса Мартелли здесь на стеке потока Мне бы хотелось, чтобы я мог получить что-то от него о том, как я должен проектирование разработки с открытым исходным кодом среда? Но есть много других герой и мне также нравится их опыт на этом.

Трудно побить Ubuntu (хотя я лично использую в основном Mac, это потому, что Mac OS X по-прежнему предлагает превосходные возможности для ноутбуков, и мои персональные компьютеры в настоящее время в основном ноутбуки - моя рабочая станция на работе работает с Ubuntu) хотя я почти уверен, что другие современные дистрибутивы Linux были бы вместе. Моя личная причуда: код, который я считаю критически важным для моей работы (с открытым исходным кодом), я всегда стараюсь пересоздать с нуля исходники - Python, множество расширений Python, GMP, svn, hg, Cython ... Я допускаю эти дни я делаю исключение для самой ОС, gcc suite, X11 и друзей, gvim - нужно нарисовать линию некоторые , где можно получить любые свободные циклы, чтобы получить некоторые полезная работа выполнена; -).

Они изучают концепцию обучения стать хорошим разработчиком с открытым исходным кодом (Unix, Python с C). Для этого мне нужно как настроить разработку среда? Какие великие разработка open source разработка среда? Пожалуйста, сохраните ответ в контексте с Python.

Не думаю, что в этом есть что-то особенное.

Некоторые люди клянутся IDE (например, с помощью PyQt - или Eclipse plus pydev); я придерживаюсь gvim (и хотя иногда я использую iPython, я все еще использую обычный python). Аналогично для VCS, таких как svn и hg, или для таких баз данных, как PostgreSQL и т. Д., Существует множество графических интерфейсов, но я считаю, что инструменты командной строки больше подходят для моих личных предпочтений.

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

Ключ - это то, что вам действительно нужно, лично , о котором вы заботитесь - работаете ли вы с Ubuntu или Gentoo, или с Gvim, или с Emacs, или с Эриком и т. Д. очень незначительное соображение ИМНШО.

1 голос
/ 08 января 2010

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

0 голосов
/ 08 января 2010

Есть две основные причины писать код на C вместо Python: скорость и клей.

Python значительно медленнее, чем C. В большинстве случаев это вообще не имеет значения, но иногда это имеет значение. Если бы вы написали функцию преобразования Фурье на чистом Python, вы не были бы довольны скоростью; поэтому ребята из SciPy предоставили реализацию преобразования Фурье на C, которую вы можете просто вызвать из Python.

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

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

Другая основная причина написания модулей C для Python - это предоставление «связующего» слоя, который адаптирует Python для использования некоторого внешнего ресурса. Например, в версии Python для Windows вы можете использовать модуль C, чтобы позволить вам использовать COM-объекты. Весь COM API написан для C, поэтому модуль C - лучший способ адаптировать COM для Python.

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

P.S. Это отличный ресурс для начинающих программистов на Python:

http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html

0 голосов
/ 08 января 2010

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

а) ваш стиль может унаследовать лучшие их части

b) у вас не будет плохой привычки всегда делать вещи так, как вы впервые учились (поскольку Python постоянно меняется, и поэтому «лучшая» идиома имеет привычку переключаться на

Задайте много вопросов, и удачи !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...