Научете как да бъдете по-добър програмист, като автоматизирате скучните неща

Снимка на Оскар Нилсон на Unsplash
Еквивалентът на игралните везни е писането на малки програми, сами. За съжаление, възпроизвеждането на кантар (а) не ви учи на музика и (б) е скучно като ад.

Това каза Ерик С. Реймънд в статията си „Как да научим хакерството“. Уча програмиране вече повече от една година и трябва да кажа, че съм съгласен с него.

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

Въпреки че подобни програми са в състояние да ви научат на механиката на това как работят условните оператори и цикли и как да пишат функции, те не успяват да осигурят по-дълбоко разбиране за тях.

Проблемът с подхода на преподаване чрез малки програми е, че не е така

  • развийте интуицията си - като как да продължите да модулирате кода си
  • адрес как да пишете функции, така че да може да се използва повторно, когато разширите програмата си до нови случаи на използване
  • говори за компромис между писане на четим код и компактен код
  • осигуряват фокус върху необходимостта от добър и последователен стил на програмиране

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

Писането на разширяващ се код не е толкова просто!

В допълнение към тези недостатъци, подходът е скучен като ад! Проектирането на такива функции във вашите програми е това, което прави програмирането забавно на първо място. Малките програми просто нямат достатъчно място, за да насърчат ученика да размишлява над тях и да придобие необходимите интуиции. От друга страна, с действителните програми тези умения стават необходимост.

Това означава, че трябва да вземете нещата в свои ръце, да намерите добър проблем и да кодирате решение за него.

Намиране на добри проблеми

Добър проблем осигурява етап. Етап, на който можете да приложите знанията си, да видите неговите ефекти и да направите изводи от него, за да се подобрите и да се върнете към изпълнението.

Важно е да изберете проблем, който искате да разрешите - нещо, което изглежда обезсърчително, но в същото време ви кара да се чувствате - „Би било готино, ако напиша програма за това“. Когато програмата, която изграждате, се опита да реши проблем, който ви интересува, ще бъдете мотивирани да учат и да растат. Винаги ще искате да работите върху подобряването на вашето решение.

Намирането на добър проблем, върху който може да се работи, може да се окаже трудно в началото. Това е само защото сте поставили летвата твърде високо. Може би сте гледали филма Социалната мрежа прекалено много и се надявате да направим следващия Google или Facebook от този проект. Това само ще забави обучението, ще ви накара да създадете нереалистични цели и най-опасното ще ви отложи.

Не забравяйте, че целта ви не е да напишете софтуер за милиард долара. Това е да създадете програма, която ще ви осигури етап, върху който да работите и просто да се учите от него.

Етап, който няма да ви уплаши!

Начин за намиране на подобни проблеми

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

Знаеш ли какво? Вече имате такъв домашен любимец - вашия компютър. Всяка от тези светски задачи предоставя възможност да напишете програма и да кажете на този „интелигентен домашен любимец“ какво трябва да направи за вас.

Писане на добри решения

След като сте избрали проблема си, ще искате да изработите възможно най-доброто решение. Да видим какво казва Брайън У. Кернингхан за добрия софтуер в книгата си „Практиката на програмирането“.

Основните принципи, които формират основата на добрия софтуер, са простотата, която поддържа програмите кратки и управляеми; яснота, която гарантира, че са лесни за разбиране, както за хора, така и за машини; обща, което означава, че те работят добре в широк спектър от ситуации и се адаптират добре, като възникват нови ситуации; и автоматизация, която позволява на машината да върши работата за нас, освобождавайки ни от светски задачи.

Тъжно е, че само няколко от книгите Въведение в <добавяне на език за програмиране тук> обхващат тези теми. Още по-тъжно е да се мисли как голяма част от курсовете по програмиране в колежите напълно пренебрегват този аспект на програмирането.

Когато имате проблем, който сами сте измислили (или най-вероятно преоткрили), ще имате решение, за което можете да се грижите. Решение, което искате постоянно да подобрявате.

В този раздел ще използвам пример от моя личен опит, за да обясня по-добре какво говоря.

Така че, аз случайно използвам Chrome маркери много!

Наистина МНОГО !!

Проблем 1: Добавяне на коментари към отметки с дълги заглавия

Ако се вгледате внимателно, може да откриете, че съм добавил лични коментари в края на тези отметки. Това е така, защото понякога може да стане наистина трудно да запомните точната причина или мотивация зад отметка. Разбира се, заглавието върши доста добра работа, като обяснява какво съдържа страницата, но не защо намерих съдържанието за полезно или това, което се страхувах да не загубя, ако не бях запазила връзката му - затова добавих коментарите.

Използвам || в края на името по подразбиране, предоставено от Chrome, и добавете коментарите (ите) след това.

Сега ето проблема.

Понякога това име по подразбиране е наистина дълго и добавянето на коментар означава да се наложи Ctrl + да оставите на много думи, преди да успея да стигна до края. Изтощително!

Осъзнавам, че проблемът може да не изглежда твърде тежък, но понякога може наистина да обърка потока от изследвания. Също така, ей, ние не се опитваме да създадем софтуер за милиард долара, помниш ли?

Проблем 2: Копиране на отметка с нейното заглавие

Маркирам всяко добро нещо, от което се страхувам да не го изгубя, организирам го по папки в зависимост от темата, към която може да принадлежи, и го пускам коментар. Поради тази причина те са от голяма полза за мен. Всеки път, когато някой ме попита за някаква конкретна тема, за която знам, се опитвам да насоча разговора, така че да мога да споделя някои отметки от папката на тази тема.

Не, не се опитвам да се похваля, че знам всичко или демонстрирам, че не съм егоист. Искрено мисля, че това ще им помогне, защото:

  1. Папката съдържа най-доброто от моето собствено ноу-хау по темата.
  2. Със заглавието и личните коментари всяка отметка става добре документирана - така че човекът не получава просто хипервръзки и получава добавена стойност.
  3. Вярвам, че това е по-добре от това, че се опитвам да го храня с лъжици и да го обясня устно. Истинското обучение може да се случи само когато хората сами сърфират в мрежата.

Сега ето проблема. Доколкото знам, Chrome не предоставя бърз и лесен начин за копиране на отметка заедно с нейното заглавие. Ако копирам някоя отметка и я поставите в някакъв редактор, получавам само нейната хипервръзка.

Така че, ако искам да споделя всичко, трябва да отида на опцията за редактиране, да изберете заглавието от там, да го поставите някъде и да направя същото за хипервръзката. А какво ще стане, ако искам да споделя цял куп отметки? Трябва да направя това за всяка връзка отделно!

Изключително светска задача

Това е, което бих искал да добавя отметка в Chrome вместо това

  • Иска ми се иконата на звезда в горния десен ъгъл на адресната лента да има опция за коментар заедно с име и папка.
Текущите опции
  • Иска ми се Chrome да ми позволи да изтеглям всички отметки в папка на моята локална машина като обикновен текстов файл. В този файл той трябва да показва всяка отметка в следния формат:
    * Заглавие -
    * Коментар -
    * URL адрес -

Така че разтрих вълшебната си лампа, мислейки: „О, Джини! Това са моите желания. Може ли да ги направите, за да се сбъднат? _ / \ _ "

Решението

До миналия месец дори не си мислех, че има правдоподобен начин всъщност да направя това. Мислех, че единственият начин, по който това е възможно, е да използвам браузър с отворен код и да оправям кода в него, за да отговаря на моите нужди.

След някои първоначални изследвания открих, че никога няма да се занимавам с това. Браузърите са едни от най-трудните и най-големи части от софтуера и със сигурност не се вълнувам с техния код, без значение колко приветлива е общността с отворен код на Firefox.

След това прочетох отговор на въпроса „Какви са страхотни програми за програмиране за начинаещи“ в Quora. В него се казва как новакът може да направи разширение за браузър Chrome, което замества всички снимки в новинарския ефир на Facebook с снимки на котки.

Тогава разбрах силата на разширенията на браузъра и помислих, че това ще ми помогне да изпълня желанията си.

Разширение и хром на браузъра Chrome. * API

Браузърът на Chrome има чист API, наречен chrome. * API. Тоест всеки API, чието име започва с хром.

Всеки може да го използва за създаване на собствено разширение за браузър. По принцип той дава на разработчиците достъп до няколко функции, които те могат да използват за лесно създаване на по-абстрактен код.

Разширението на браузъра използва обикновен HTML / CSS заедно с JavaScript. Четох, че е лесно, дори и за начинаещи, да създадете просто разширение за браузър. Всичко, от което се нуждаете, е малко познаване на HTML / CSS и JavaScript.

Преди бях преминал през Head First HTML и CSS book, но не познавах JavaScript. Мислех да се отклоня от проекта. В крайна сметка исках да направя проект, за да подобря владеенето си с език, който вече знаех (Python или C ++).

Но също така отчаяно се нуждаех от проект, който да покажа в моя профил в Github.

Време е да научите нов език

Реших да науча основите на JavaScript като декларации за променливи и функции и дефиниции, цикли и условия. Това едва ли отне време изобщо. Изглежда, че е основно едно и също на всички езици.

Бих научил останалите функции на JavaScript, докато попаднах на тях в ръководствата и ръководствата за създаване на разширение. Беше време да създам собствено разширение.

Четене на документацията и учене от нея

Съществуват само няколко ръководства за видео или статии, които могат да ви насочат към създаването на разширение за браузър Chrome. Вероятно защото разширенията на браузъра никога не са станали твърде горещи.

Открих, че нещата, от които щях да се нуждая, присъстват в API на chrome.bookmarks. Това се оказа някак необичайно искане. Сравнително малко разширения го използват. Това означаваше, че няма урок как да го използвате.

Преди това всичко, което научих някога, беше в добре опаковани уроци или ръководства, които биха накарали темата да се захранва с лъжица. Но този път трябваше да се уча, като прегледах само документацията.

Сякаш бях представен с целия този арсенал от методи пред мен, заедно с малко ръководство за потребителя. Сега трябваше да идентифицирам от себе си инструментите, които биха могли да са от най-голяма помощ при осъществяването на целта ми.

Правейки всичко това, осъзнах важността на програмата „Здравей свят“

Винаги съм имал чувството, че „Здравей, световната програма“ е силно надценен.

Искам да кажа, че е вид посрещане на новодошлите и всичко, но не е толкова голямо, че всяка книга / урок по програмиране някога трябва да започва с него.

Никога не ме е очаровало достатъчно, за да напиша и да го пробвам за себе си.

Бях настроил браузъра си, така че да може да зареди разширението от моята локална машина. Следвах инструкциите от документацията и създадох някои задължителни файлове. Сега бих могъл да започна да кодирам действителното разширение с помощта на API на отметките.

Но почакай. Ами ако има някакъв проблем с настройката? Ами ако пропусна нещо критично в документацията? Трябваше да съм сигурен, преди всъщност да свърша някаква работа и да отделя време за създаване на нещо, само за да осъзная, че не може да работи.

Тогава почувствах нуждата да създам разширение „Hello World“.

Мисля, че програмата Hello World не е толкова първа програма, колкото уверение, че нещата работят. Че ако го направя правилно, програмата ми също може да работи.

Проблем 1: Решен

Снимка на Ариел Лустър на Unsplash

Ето какво дойдох тази нощ:

Маркира текущия URL адрес на раздела

Реших, че заглавието на уеб страницата служи като добро заглавие по подразбиране и за отметката. Следователно не добавих полето заглавие в изскачащото меню.

По време на писането кодът не е добре документиран или модулиран или нещо друго. Просто работи. Възнамерявам да го направя в бъдеще. Това ще бъде моят истински урок по програмиране.

Проблем 2: Неразрешим?

Доколкото гледах, Chrome не предоставя никакъв начин за генериране и изтегляне на текстови файлове на локалната машина на потребителя с помощта на отметки. Това означава, че не можем да изтеглим и отметките .

Замяна на страниците

Самата документация ми представи решение.

Документация за API на Chrome. *

След като прочетох това, реших, че това ще направя.

Ще заменя страницата на отметките със собствената ми, създадена по поръчка страница с мениджър на отметки.

В него отметките няма да се показват в избираеми раздели, както са сега.

По-добре би било дизайнът да има прост текст за всяка отметка, точно както повечето други уеб страници правят (да речем например този, който четете). Всяка отметка в текста трябва да има следния формат:
* Заглавие-
* Коментар-
* URL-

Все още не съм създал тази страница, но смятам да я направя в близко бъдеще. Ако искате да обсъдите този проект или наистина нещо друго, моля, коментирайте по-долу.

Благодаря за четенето! Надявам се това да е било полезно за вас.

И последно нещо за намирането на вдъхновение и мотивация, докато тръгвате по новото си пътуване и правите нещо страхотно -

„Вашите влияния не са непременно нещата, каквито смятате, че са. Не забравяйте, че влиянията ви са всевъзможни неща и някои от тях ще ви изненадат, но най-важното, което можете да направите, е да се отворите за всичко. "
- Нийл Гейман в своя MasterClass-the Art of Storytelling

Намирането на вдъхновение може да бъде също толкова важно, колкото научаването на нови концепции за програмиране, ако не и повече. Интернет е изпълнен с страхотни неща, създадени от вдъхновяващи хора от всички сфери на живота. Направете си навик да ги следвате и да четете такива неща, защото точно това ще ви накара да правите повече, да научите повече и да бъдете по-добра версия на себе си.

Може да е трудно да намерите такова съдържание в тази епоха на социалните медии, но движете ми поведение, но вярвайте ми, че съществува. И затова, за да ви помогна да се ориентирате по-добре в този океан, стартирах безплатен седмичен бюлетин за електронна поща - Good Surfer. Пиша всеки бюлетин с една цел -
Научете читателите как да намират мотивиращо и проницателно съдържание по интернет.

Ако смятате, че Good Surfer ще ви е от полза, бих се радвал да ви има като абонат! :)

Също така, можете да ме следите в Twitter - https://twitter.com/nityeshaga; Няма да спам емисията ви.