- Регистрация
- 09.11.20
- Сообщения
- 177
- Онлайн
- 20д 2ч 3м
- Сделки
- 0
- Нарушения
- 1 / 5
Что общего у Марка Цукерберга, Джеффа Безоса и Ларри Пейджа? Да, все они создали компании с многомиллиардными оборотами, не имея бизнес-образования. Но еще все они – бывшие разработчики софта и хакеры, и этот опыт, несомненно, научил их критически мыслить и решать проблемы. И принимать умные решения не только по продуктам, но и по продажам, маркетингу, рекрутингу и всем другим аспектам бизнеса. (Безос до основания Amazon работал в хедж-фонде DE Shaw, но его задачи там не имели особого отношения к предпринимательству или управлению компанией.) Я считаю, что их программистский опыт был критически важен для успеха и во всех остальных областях.
Я всерьез не занимался программированием после 30 лет, но не сомневаюсь, что мой опыт обучения программированию в 12 лет, а также преподавание программирования детям и взрослым изменили мое представление практически обо всех сторонах жизни. Я одержим анализом фактов и формальным описанием процессов в инвестировании, образовании и даже в моих личных делах.
Главный разработчик Conigent Джастин Джеймс говорит, что хорошие программисты понимают не только то, что делает их программа, но и как и почему она это делает. Программирование – это, по сути, решение проблем на высоком уровне анализа.
Но писать программы – дело нелегкое. Компиляторы не принимают двусмысленностей и неточностей повседневной речи. Если программист может объяснить проблему так, чтобы компьютер ее понял, эта проблема уже, можно сказать, решена. И отличный программист почти всегда найдет способ решить проблему с помощью компьютера.
Так что не удивительно, что лидеры, которые применяют в бизнесе свой программистский опыт и алгоритмическое мышление, меняют расстановку сил на рынке. Алгоритмически мыслящий человек обычно находит более умное решение и отбивает доходы у менее сметливых конкурентов.
Скептически настроенный читатель, наверное, думает, что алгоритмическое мышление – абстрактное и не слишком нужное, что это излишние мудрствования. Вовсе нет: не суметь применить правильный алгоритм – ошибка, которая обходится куда дороже, чем время, потраченное на поиск оптимального решения. Вот основные шаги, с помощью которых алгоритмически мыслящий человек подбирается к решению:
1. Проанализируйте и четко определите проблему. Для чего вы ищете решение? Какая информация доступна? Есть ли ограничения? Элегантное решение – это простое решение, а простое решение устраняет все, что не ведет к ответу.
2. Разбейте проблему на составляющие. Какие конкретные шаги нужны, чтобы полностью решить проблему. Полезно на этом этапе решить упрощенный пример.
3. Отшлифуйте базовое решение. Не окажется ли, что отдельные шаги повторяют другие или что это уже решенные ранее проблемы?
4. Примените эти начальные шаги к более частным проблемам, обнаруженным на шаге 3.
5. Реализуйте решение каждой частной проблемы. Важно заранее проработать повторяемость решения – определять термины, добавлять объяснения и т.д.
6. Проверьте в деле решение каждой подпроблемы. Проверьте пограничные случаи. Тщательное тестирование каждого модуля в отдельности позволяет программистам быстро искать ошибки, а не прочесывать код всей программы. Этот принцип применим практически ко всем сложным системам.
7. Найдите минусы решения и постепенно его усовершенствуйте. Программирование – это зачастую умение вернуться к своей работе, заново что-то оптимизировать или подправить, т.е. никогда не удовлетворяться сделанным. Движение Lean Startup основано на этой же философии.
8. Когда все решения более частных проблем протестированы и отточены, переходите к общему решению.
Как адаптировать этот программистский подход к проблемам бизнеса? Есть два полезных механизма:
1. Фиксируйте процесс и результаты. В краткосрочной перспективе это лишний труд, но в долгосрочной перспективе это делает вашу работу куда более практичной и полезной.
2. Планируйте процесс на долгую перспективу и на автоматизированное использование. Важнейшая черта хороших программистов – это способность жертвовать текущим удобством ради устойчивого долгосрочного решения. Легкие и короткие пути дают немасштабируемый, полный проблем код. Первоклассные программисты держат в уме долгосрочные последствия своей разработки. Они способны контролировать свои порывы и откладывать момент удовлетворения.
Известно исследование: дети, которые способны сопротивляться искушению съесть мармеладку в течение 20 минут (чтобы получить вторую мармеладку), оказываются более психологически устойчивыми, более надежными и демонстрируют более высокие результаты в стандартных тестах, чем дети, которые съедают конфету сразу. К счастью, можно укрепить самоконтроль, если вы учитесь думать о мире в более глобальном, абстрактном смысле, разглядывать более общую картину.
Алгоритмическое мышление ориентировано на процесс и всеохватно. Оно заставляет осмыслять проблемы, разбирать их логическую структуру, учитывать возможные случайности и формулировать решение. Поскольку редко когда правильный ответ только один, это вынуждает постоянно искать новые варианты и более достойные решения. А самое главное, алгоритмы легко освоить.
Что еще в вашей жизни поддается подсчету?
Оригинал поста – teten.com/blog/2013/08/05/how-to-think-like-a-hacker-even-if-you-cant-code/
Я всерьез не занимался программированием после 30 лет, но не сомневаюсь, что мой опыт обучения программированию в 12 лет, а также преподавание программирования детям и взрослым изменили мое представление практически обо всех сторонах жизни. Я одержим анализом фактов и формальным описанием процессов в инвестировании, образовании и даже в моих личных делах.
Главный разработчик Conigent Джастин Джеймс говорит, что хорошие программисты понимают не только то, что делает их программа, но и как и почему она это делает. Программирование – это, по сути, решение проблем на высоком уровне анализа.
Но писать программы – дело нелегкое. Компиляторы не принимают двусмысленностей и неточностей повседневной речи. Если программист может объяснить проблему так, чтобы компьютер ее понял, эта проблема уже, можно сказать, решена. И отличный программист почти всегда найдет способ решить проблему с помощью компьютера.
Так что не удивительно, что лидеры, которые применяют в бизнесе свой программистский опыт и алгоритмическое мышление, меняют расстановку сил на рынке. Алгоритмически мыслящий человек обычно находит более умное решение и отбивает доходы у менее сметливых конкурентов.
Скептически настроенный читатель, наверное, думает, что алгоритмическое мышление – абстрактное и не слишком нужное, что это излишние мудрствования. Вовсе нет: не суметь применить правильный алгоритм – ошибка, которая обходится куда дороже, чем время, потраченное на поиск оптимального решения. Вот основные шаги, с помощью которых алгоритмически мыслящий человек подбирается к решению:
1. Проанализируйте и четко определите проблему. Для чего вы ищете решение? Какая информация доступна? Есть ли ограничения? Элегантное решение – это простое решение, а простое решение устраняет все, что не ведет к ответу.
2. Разбейте проблему на составляющие. Какие конкретные шаги нужны, чтобы полностью решить проблему. Полезно на этом этапе решить упрощенный пример.
3. Отшлифуйте базовое решение. Не окажется ли, что отдельные шаги повторяют другие или что это уже решенные ранее проблемы?
4. Примените эти начальные шаги к более частным проблемам, обнаруженным на шаге 3.
5. Реализуйте решение каждой частной проблемы. Важно заранее проработать повторяемость решения – определять термины, добавлять объяснения и т.д.
6. Проверьте в деле решение каждой подпроблемы. Проверьте пограничные случаи. Тщательное тестирование каждого модуля в отдельности позволяет программистам быстро искать ошибки, а не прочесывать код всей программы. Этот принцип применим практически ко всем сложным системам.
7. Найдите минусы решения и постепенно его усовершенствуйте. Программирование – это зачастую умение вернуться к своей работе, заново что-то оптимизировать или подправить, т.е. никогда не удовлетворяться сделанным. Движение Lean Startup основано на этой же философии.
8. Когда все решения более частных проблем протестированы и отточены, переходите к общему решению.
Как адаптировать этот программистский подход к проблемам бизнеса? Есть два полезных механизма:
1. Фиксируйте процесс и результаты. В краткосрочной перспективе это лишний труд, но в долгосрочной перспективе это делает вашу работу куда более практичной и полезной.
2. Планируйте процесс на долгую перспективу и на автоматизированное использование. Важнейшая черта хороших программистов – это способность жертвовать текущим удобством ради устойчивого долгосрочного решения. Легкие и короткие пути дают немасштабируемый, полный проблем код. Первоклассные программисты держат в уме долгосрочные последствия своей разработки. Они способны контролировать свои порывы и откладывать момент удовлетворения.
Известно исследование: дети, которые способны сопротивляться искушению съесть мармеладку в течение 20 минут (чтобы получить вторую мармеладку), оказываются более психологически устойчивыми, более надежными и демонстрируют более высокие результаты в стандартных тестах, чем дети, которые съедают конфету сразу. К счастью, можно укрепить самоконтроль, если вы учитесь думать о мире в более глобальном, абстрактном смысле, разглядывать более общую картину.
Алгоритмическое мышление ориентировано на процесс и всеохватно. Оно заставляет осмыслять проблемы, разбирать их логическую структуру, учитывать возможные случайности и формулировать решение. Поскольку редко когда правильный ответ только один, это вынуждает постоянно искать новые варианты и более достойные решения. А самое главное, алгоритмы легко освоить.
Что еще в вашей жизни поддается подсчету?
Оригинал поста – teten.com/blog/2013/08/05/how-to-think-like-a-hacker-even-if-you-cant-code/