Насколько полезным / трудным для меня будет изучение сценариев оболочки Linux? Альтернативные рекомендации? - PullRequest
12 голосов
/ 14 февраля 2009

Мне очень нужен совет.

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

Вся моя школьная работа многому научила меня в области компьютерных наук, но мало о практическом программировании. Хотя у меня много мотивации, у меня почти нет свободного времени, чтобы позволить мне заняться сторонними проектами. Это расстраивает меня по двум причинам: 1) я искренне увлекаюсь этой областью и 2) я понимаю, что многим работодателям нравится видеть студентов с некоторым опытом за пределами школы.

Так что у меня недавно возникла идея: что если я сделаю Linux своей основной ОС, но максимально ограничусь терминалом в попытке естественным образом (с помощью Google) ознакомиться с командной строкой и, надеюсь, постепенно подбирайте сценарии оболочки, используя онлайн-уроки.

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

Большое спасибо, я люблю этот сайт (и подкаст) и буду благодарен за любые отзывы.

Ответы [ 10 ]

13 голосов
/ 14 февраля 2009

Звучит как хороший план. Некоторые предложения:

  1. Научитесь автоматизировать все, что можете. Сделай это привычкой. Если вы делаете что-то больше, чем пару раз, поместите это в сценарий. Это не просто для того, чтобы не печатать, а для документирования процесса. Улучшайте свои сценарии, когда вы замечаете проблемы. Поделитесь своими сценариями, когда это уместно.

  2. Изучите мощь конвейеризации. Откройте для себя цель команды xargs. Перепишите стандартную утилиту командной строки, такую ​​как grep или sort на выбранном вами языке. (Я неравнодушен к Perl, но это почти измена.; -)

  3. Настройте файл .bashrc. Знайте, какие настройки вам нравятся, а какие вам не подходят.

  4. Используйте ksh вместо bash для скриптов. Отличий не так много, но ksh имеет несколько дополнительных функций, которые очень приятно иметь. Однако я предпочитаю bash для интерактивных оболочек.


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

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

Теперь, чтобы различать наши операции и тестирование, мы используем две разные учетные записи. Поэтому, прежде чем вводить систему в эксплуатацию, мы очищаем определенные файлы, созданные тестовой учетной записью. По сути, это двухэтапный процесс:

  1. Найти все файлы, созданные тестирующим пользователем.

  2. Ударь их.

Я полагаю, что мне понадобится минута или две, чтобы написать код для этого на Perl, и еще пару минут, чтобы протестировать его. Это простая работа. Я даже не уверен, как это сделать в C / C ++. Я думаю, что вы начнете с stat корневого каталога.

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

$ find /data -user test | xargs rm -rf

Тестирование состоит из запуска команды и отслеживания ошибок. Эта конкретная проблема - шаг софтбола прямо в рулевой рубке для bash. Perl выполняет свою работу, но это немного менее естественно. (Я бы использовал find2perl, который просто добавляет шаг.) Попытка сделать это на C или C ++ была бы квиксотическим квестом. Эти языки предназначены для решения различных проблем.

Теперь, если вы не работаете в среде UNIXy, вероятно, есть набор инструментов, предназначенный для таких вещей. (Я не эксперт, но в Windows я, вероятно, запустил бы поиск, чтобы собрать все файлы в одном окне, выбрать все и удалить. Очень легко. Однако я не знаю, как это автоматизировать.) Но если вы планируете найти работу в мире UNIX / Linux, вы должны быть знакомы с командной строкой, чтобы вам не потребовалось 5 минут, чтобы выполнить работу за 30 секунд.

4 голосов
/ 14 февраля 2009

Сценарии оболочки в основном бесполезны. Я парень из Linux, и я могу написать сценарий оболочки, если потребуется, но любая задача, которая обычно требует сценария оболочки, может быть выполнена в Python более программистским способом. Если вам нужно много сценариев, вы можете разложить более полезный код на классы, которые могут использоваться несколькими сценариями. Скрипты Python будут выполняться на порядки быстрее, чем аналоги из чистой оболочки. Я считаю, что синтаксис сценария оболочки (например, Bash) не поддерживает приличные структуры данных. Даже Perl является улучшением по сравнению с чистыми сценариями оболочки.

Если вы хотите расширить свой кругозор, изучите различные языки программирования и парадигмы. Если вы учили Java, изучите динамический язык, такой как Python или Perl, и язык низкого уровня, такой как C или Pascal. Если вы написали приложения CLI, напишите приложение, которое имеет уровень GUI. Если вы только научились писать традиционные настольные приложения, напишите веб-приложение на основе базы данных.

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

3 голосов
/ 14 февраля 2009

Делайте то, что вас интересует - если Linux и сценарии оболочки вас заводят - запускайте его. Хотя в наши дни есть много способов научиться кодировать в Windows, OS X или любой другой операционной системе. Вы можете бесплатно скачать любое из следующего на нескольких платформах .... PHP, Ruby, SQL Server, Oracle, Java, C, C # .... и Google (и, конечно, SO) имеют все необходимое с точки зрения документации за любую проблему, с которой вы столкнетесь.

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

1 голос
/ 22 октября 2017

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

После того небольшого вступления вы позволили себе ... пойти и выучить правильный язык, такой как python или pearl ... потратить годы на освоение языка по вашему выбору ... но в то же время для быстрых и неприятных сценариев и понимания файлы запуска операционной системы linux и т.д ... ваша неделя изучения bash всегда будет с вами

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

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

1 голос
/ 14 февраля 2009

Почему вы хотите тратить много времени на изучение сценариев оболочки? Когда-то я был мастером в этом деле и писал целые системы со скриптами sh, но это было до perl и других скриптовых языков. Это ужасный язык, который поощряет вредные привычки и не пользуется спросом. Изучите только минимальные основы - что вы можете получить из одного или двух прочтений справочной страницы sh. Тогда изучите что-то полезное - Perl и Python - хорошие ставки для тех, кто ограничен во времени.

1 голос
/ 14 февраля 2009

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

Если вы планируете стать администратором инфраструктуры или системным администратором, изучите сценарии bash. В противном случае потратьте время на программирование. Вы можете выбрать язык сценариев в качестве основного направления, тогда вы сможете использовать его и для сценариев оболочки, таких как python.

НТН

1 голос
/ 14 февраля 2009

Что ж, при хорошем понимании компьютерных наук так называемое «практическое программирование» не так сложно освоить. Это не значит, что учиться особо нечему; однако обладание мастерством в области компьютерных наук подразумевает, по сути, что изучение различных языков программирования не будет очень трудным. Вы уже взяли курс по операционным системам? Если нет, вы должны взять так называемую книгу «Динозавры» и начать ее изучение. Программирование на Bash очень просто. Вы должны изучать такие языки, как C и т. Д .; программирование оболочки довольно тривиально по сравнению с этим. Хотя важно учиться. Если вы не взяли операционные системы, то, безусловно, вы будете частью своей степени, если ваша программа того стоит. В этом курсе вы должны пройти множество упражнений, и даже реализация собственной простой оболочки - очень распространенный вводный проект.

В любом случае, обязательно начните изучать Linux. Найдите классические инструкции по Bash, программированию ядра и так далее. Насколько реалистично ... Я ожидаю, что все студенты CS будут строго понимать все эти концепции. Я бы не позволил студенту получить свою степень без него!

0 голосов
/ 14 февраля 2009

Я настоятельно рекомендую Perl всем, кто использует Linux как инструмент для автоматизации и облегчения жизни. С помощью Perl вы можете писать быстрые и простые программы, которые на самом деле решают реальные задачи за небольшое время. Python является хорошей альтернативой и намного лучше обрабатывает объекты, хотя он отличается от стиля C, и я предполагаю, что это то, с чем вы столкнулись в большинстве случаев.

0 голосов
/ 14 февраля 2009

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

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

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

0 голосов
/ 14 февраля 2009

Я бы определенно предложил вам изучить хотя бы основы C / C ++, чтобы понять, как работают компьютеры.

Вам также следует изучить основы C # или Java, чтобы узнать об управляемом мире и таких понятиях, как сборка мусора, байт-код / ​​IL, компиляция jit.

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

Добавьте Rails, PHP или ASP.NET, чтобы получить представление о веб-программировании и таких понятиях, как MVC.

Прочтите о модульном тестировании, разработке через тестирование, внедрении зависимостей / инверсии управления, ORM. Почувствуйте себя комфортно в мире контроля версий и постоянной интеграции. По крайней мере, проверьте модные слова Википедии, такие как Agile, Scrum, Lean и Kanban.

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

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

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

Опять же, я лично не очень много знаю о Баше, так что, возможно, я совершенно неправ ...

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