Как мы делаем ЭТО и зачем оно нам надо?
Начну с того, что я очень долго думал над вопросом: "Ну вот, свершилось, я программист, я могу то, се, пятое, десятое; а вот как я ЭТО могу, и, самое главное ЗАЧЕМ? (Не сошелся же свет клином на программировании?)
Ну что ж, давайте по-порядку. Итак: "Как мы делаем ЭТО?"
Я уверен, что этот вопрос задавало себе не так много народу, но, хорошие спецы своего дела всегда приходили к нему и задавали его, как минимум, самим себе, чтобы передать свои знания другим людям. Ведь, естественно, как передать то, чего не можешь объяснить?
Кто же такие программисты? Чем они живут? Чем они занимаются. Вы будете шокированы, если я скажу: "Программисты, это те люди, которые каждый день ходят в туалет по всем правилам!" И в этом нет ничего смешного!
Я придумал хороший тест для приема программистов на работу. Если Вы ищите программиста, то определить, является ли тот кто пришел к Вам на собеседование, программистом или нет - очень просто.
Задайте ему задачку. Друг любезный, построй мне полный алгоритм похода в туалет (сортир в простонаречье). Если вдуматься, то это не такакя простая проблема, поскольку отсутствие бумаги в сортире, является багом, если ты пошел по большему (ну это так, в качестве примера), и если, в построенном алгоритме Вы не найдете недочетов, то парень или девушка, которые стоят перед Вами, дествительно программисты.
Профи может привести веский аргумент против этого подхода. Какой нахрен алгоритм, скажет он, а языки программирования, а базы данных, протоколы и схемы, либы и ситемы? Они должны знать!
Но, если человек безупречно построил дерево событий определенного процесса, то можно предположить (а так оно и есть) что этот человек, прежде чем возьмется за решение определенной задачи, выявит всю проблематику и проанализирует существующие технологии на предмет использования их для своей задачи точно так же, как он ходит в сортир. Он способен обучаться как Маугли (Copyright http://progstone.nm.ru/ советую почитать), он использует все свои знания и свою картину мира для решения поставленной перед ним задачи. А, если, эта картина не полная, то он начнет дополнять ее, изучая то что есть, т.е. все теже системы, либы и языки и.т.д.
Чтож, самое время рассказать КАК МЫ ДЕЛАЕМ ЭТО?
- Мы читаем маны до дыр
- Мы изучаем операционные системы, протоколы и RFC до байтов
- Мы изучаем чужие ошибки и стараемся их не повторять
- Мы сами делаем ошибки, но находим и исправляем их
- Мы стараемся рассказать другим о том, что мы знаем и не боимся идти туда, где никто до на не был
- Нам платят деньги за то, что мы ДЕЛАЕМ а не за то что мы могли бы сделать
- Мы живем нашим миром ВВОП (всегда, вобще, обычно, постоянно) и как ни странно, самые продуктивные идеи приходят именно в сортире.
Может я и ошибаюсь, но программирование это не специальность и не работа - это стиль жизни. Где бы ты ни был и чтобы ни случилось, ты всегда живешь на лезвии бритвы нового в этом мире, потому что, если, ты не следишь за этим новым, то ты отстаешь и уже не способен правильно ходить в новые сортиры, хотя в старые ходишь успешно.
Ну вот теперь Вы знаете (хотя и весьма приблизительно) что значит быть программитом. Порой это совсем неинтересно, поскольку приходится читать кучу статей, новостей, ковыряться в чкжих исходных кодах с единственной целью: исправить ошибку, чтобы либа, которая тебе нужна работала так как надо, чтобы протокол, который используется всем миром был безупречен и не дыряв, чтобы ткнуть носом разработчиков софта в проблемы безопасности их детища, поскольку вечна истина: "В нашем мире, все что придумано одним человеком, может быть понято и использовано другим." И вторая, самая фундаментальная: "Чудес в нашем мире (программирования) НИКОГДА НЕ БЫВАЕТ!"
Но тут Вы спросите. Нуу ребята, ну и геморой же вы на свою попу придумали! А оно Вам надо? Вот мы и подошли к вопросу: "ЗАЧЕМ НАМ ЭТО НУЖНО?"
Ответ на этот вопрос скорее филосовский чем логический.
Ответ первый. Это очень интересно. Почему? Попробую объяснить на ассоциациях (отдать кусочек карты, так сказать).
Я уверен, что большинство здесь присутствующих играли в стариегии типа Heros, Might and magic, различные квесты и.т.д. И если да, то все прекрасно знают, что пока ваш герой неопытен и слаб сделать что-то в игре крайне тяжело и, только, набравшись опыта начинаешь строить стратегию развития событий в игровом пространстве. Это почти то же самое, что происходит при познании компьютерного мира. Сначала ты учишься работать с системой, потом с настройками периферии для нее, потом с языками и пошло, поехало. Вам не кажется что мы играем в стратегию под название ПРОГРАММИРОВАНИЕ? И, хочу отметить, что эта игра мне нравится, поскольку выигрыши в ней выражаются не просто в моральном удовлетворении, но и в денежном эквиваленте (у кого в каком, завичит от experience и желании продолжать игру на более высоких уровнях)
Тут как и в стратегии. Как только ты прошел начальные уровни, второй раз их проходить не интересно, но очень часто к ним приходится возвращаться.
Сорри, я слегка отвлекся. Итак, мы играем в глобальную стратегию и это интересно. Если это интересно только из-за денег, то лучше сразу бросить эту игру, поскольку она еще интересна и сама по себе. И, я рискну, высказать третье незыблемое правило: "C ростом опыта в игре ПРОГРАММИРОВАНИЕ, растет количество денег, которое ты получаешь за свою работу". И очень интересно получать деньги не за простую, а именно за сложную работу, которая не делается левым мизинцем правой ноги, а над которой приходится сидеть, схватившись за голову и думать, думать, думать.
Рискну предложить пару рекомендаций для начинающих, напрямую следующих из моих высказываний.
1. Читайте документацию. Даже когда Вам кажется что вы поняли все, прочитайте ее еще раз и вы найдете много нового.
2. Если у вас возникли технические проблемы, то см. п.1
3. Не пытайтесь получить готовое решение вашей проблемы от Васи Пупкина. Вася Пупкин может быть классным программером, но ему Ваша проблема настолько неинтересна, или он читает что она настолько тривиальна, что он не будет Вам помогать. Вместо этого попытайтесь решить ее сами, а технические (не стратегические, а именно технические) вопросы задайте Васе Пупкину, и тогда (если они нетривиальны) он с радостью на них ответит.
4. Не повторяйте чужих ошибок и исправляйте свои ошибки сами, не вываливайте вагон кода Васе Пупкину, ему не интересно искать тривиальную ошибку в вашем вагоне, спрашивайте посуществу, приводя, как можно меньше кода.
5. Правильный вопрос получает правильный ответ. Задайте вопрос сначала самому себе, а потом уже Васе Пупкину.
6. Если что-то должно работать и не работает, то это не ЧУДО! Это или Ваше незнание, или ошибка в алгоритме, или баг используемых программных средсв, третьего нет!
Ну чтож, в добрый и долгий, иногда нудный и неинтересный, но, в основном, очень увлекательный путь по дороге программирования. Жаль только, что до конца игры никогда не доиграешь!
Начну с того, что я очень долго думал над вопросом: "Ну вот, свершилось, я программист, я могу то, се, пятое, десятое; а вот как я ЭТО могу, и, самое главное ЗАЧЕМ? (Не сошелся же свет клином на программировании?)
Ну что ж, давайте по-порядку. Итак: "Как мы делаем ЭТО?"
Я уверен, что этот вопрос задавало себе не так много народу, но, хорошие спецы своего дела всегда приходили к нему и задавали его, как минимум, самим себе, чтобы передать свои знания другим людям. Ведь, естественно, как передать то, чего не можешь объяснить?
Кто же такие программисты? Чем они живут? Чем они занимаются. Вы будете шокированы, если я скажу: "Программисты, это те люди, которые каждый день ходят в туалет по всем правилам!" И в этом нет ничего смешного!
Я придумал хороший тест для приема программистов на работу. Если Вы ищите программиста, то определить, является ли тот кто пришел к Вам на собеседование, программистом или нет - очень просто.
Задайте ему задачку. Друг любезный, построй мне полный алгоритм похода в туалет (сортир в простонаречье). Если вдуматься, то это не такакя простая проблема, поскольку отсутствие бумаги в сортире, является багом, если ты пошел по большему (ну это так, в качестве примера), и если, в построенном алгоритме Вы не найдете недочетов, то парень или девушка, которые стоят перед Вами, дествительно программисты.
Профи может привести веский аргумент против этого подхода. Какой нахрен алгоритм, скажет он, а языки программирования, а базы данных, протоколы и схемы, либы и ситемы? Они должны знать!
Но, если человек безупречно построил дерево событий определенного процесса, то можно предположить (а так оно и есть) что этот человек, прежде чем возьмется за решение определенной задачи, выявит всю проблематику и проанализирует существующие технологии на предмет использования их для своей задачи точно так же, как он ходит в сортир. Он способен обучаться как Маугли (Copyright http://progstone.nm.ru/ советую почитать), он использует все свои знания и свою картину мира для решения поставленной перед ним задачи. А, если, эта картина не полная, то он начнет дополнять ее, изучая то что есть, т.е. все теже системы, либы и языки и.т.д.
Чтож, самое время рассказать КАК МЫ ДЕЛАЕМ ЭТО?
- Мы читаем маны до дыр
- Мы изучаем операционные системы, протоколы и RFC до байтов
- Мы изучаем чужие ошибки и стараемся их не повторять
- Мы сами делаем ошибки, но находим и исправляем их
- Мы стараемся рассказать другим о том, что мы знаем и не боимся идти туда, где никто до на не был
- Нам платят деньги за то, что мы ДЕЛАЕМ а не за то что мы могли бы сделать
- Мы живем нашим миром ВВОП (всегда, вобще, обычно, постоянно) и как ни странно, самые продуктивные идеи приходят именно в сортире.
Может я и ошибаюсь, но программирование это не специальность и не работа - это стиль жизни. Где бы ты ни был и чтобы ни случилось, ты всегда живешь на лезвии бритвы нового в этом мире, потому что, если, ты не следишь за этим новым, то ты отстаешь и уже не способен правильно ходить в новые сортиры, хотя в старые ходишь успешно.
Ну вот теперь Вы знаете (хотя и весьма приблизительно) что значит быть программитом. Порой это совсем неинтересно, поскольку приходится читать кучу статей, новостей, ковыряться в чкжих исходных кодах с единственной целью: исправить ошибку, чтобы либа, которая тебе нужна работала так как надо, чтобы протокол, который используется всем миром был безупречен и не дыряв, чтобы ткнуть носом разработчиков софта в проблемы безопасности их детища, поскольку вечна истина: "В нашем мире, все что придумано одним человеком, может быть понято и использовано другим." И вторая, самая фундаментальная: "Чудес в нашем мире (программирования) НИКОГДА НЕ БЫВАЕТ!"
Но тут Вы спросите. Нуу ребята, ну и геморой же вы на свою попу придумали! А оно Вам надо? Вот мы и подошли к вопросу: "ЗАЧЕМ НАМ ЭТО НУЖНО?"
Ответ на этот вопрос скорее филосовский чем логический.
Ответ первый. Это очень интересно. Почему? Попробую объяснить на ассоциациях (отдать кусочек карты, так сказать).
Я уверен, что большинство здесь присутствующих играли в стариегии типа Heros, Might and magic, различные квесты и.т.д. И если да, то все прекрасно знают, что пока ваш герой неопытен и слаб сделать что-то в игре крайне тяжело и, только, набравшись опыта начинаешь строить стратегию развития событий в игровом пространстве. Это почти то же самое, что происходит при познании компьютерного мира. Сначала ты учишься работать с системой, потом с настройками периферии для нее, потом с языками и пошло, поехало. Вам не кажется что мы играем в стратегию под название ПРОГРАММИРОВАНИЕ? И, хочу отметить, что эта игра мне нравится, поскольку выигрыши в ней выражаются не просто в моральном удовлетворении, но и в денежном эквиваленте (у кого в каком, завичит от experience и желании продолжать игру на более высоких уровнях)
Тут как и в стратегии. Как только ты прошел начальные уровни, второй раз их проходить не интересно, но очень часто к ним приходится возвращаться.
Сорри, я слегка отвлекся. Итак, мы играем в глобальную стратегию и это интересно. Если это интересно только из-за денег, то лучше сразу бросить эту игру, поскольку она еще интересна и сама по себе. И, я рискну, высказать третье незыблемое правило: "C ростом опыта в игре ПРОГРАММИРОВАНИЕ, растет количество денег, которое ты получаешь за свою работу". И очень интересно получать деньги не за простую, а именно за сложную работу, которая не делается левым мизинцем правой ноги, а над которой приходится сидеть, схватившись за голову и думать, думать, думать.
Рискну предложить пару рекомендаций для начинающих, напрямую следующих из моих высказываний.
1. Читайте документацию. Даже когда Вам кажется что вы поняли все, прочитайте ее еще раз и вы найдете много нового.
2. Если у вас возникли технические проблемы, то см. п.1
3. Не пытайтесь получить готовое решение вашей проблемы от Васи Пупкина. Вася Пупкин может быть классным программером, но ему Ваша проблема настолько неинтересна, или он читает что она настолько тривиальна, что он не будет Вам помогать. Вместо этого попытайтесь решить ее сами, а технические (не стратегические, а именно технические) вопросы задайте Васе Пупкину, и тогда (если они нетривиальны) он с радостью на них ответит.
4. Не повторяйте чужих ошибок и исправляйте свои ошибки сами, не вываливайте вагон кода Васе Пупкину, ему не интересно искать тривиальную ошибку в вашем вагоне, спрашивайте посуществу, приводя, как можно меньше кода.
5. Правильный вопрос получает правильный ответ. Задайте вопрос сначала самому себе, а потом уже Васе Пупкину.
6. Если что-то должно работать и не работает, то это не ЧУДО! Это или Ваше незнание, или ошибка в алгоритме, или баг используемых программных средсв, третьего нет!
Ну чтож, в добрый и долгий, иногда нудный и неинтересный, но, в основном, очень увлекательный путь по дороге программирования. Жаль только, что до конца игры никогда не доиграешь!