newsmode
search
Меню
arrow_back Назад

Advice on How to Become a Programmer | Rob Walling

auto_awesomeКраткое саммари

Роб Уоллинг отвечает читателю на три вопроса о том, как стать хорошим программистом. Он подчёркивает необходимость постоянного обучения, перехода от синтаксиса языков к концепциям (D.R.Y., теория разбитых окон, переиспользование кода) и общения с более опытными разработчиками — в том числе через блоги Скотта Гатри, Рокки Лхотки и других. Среди путей получения знаний автор выше всего ставит ученичество у опытного разработчика, затем работу с полной занятостью, книги (The Pragmatic Programmer, Code Complete, Facts and Fallacies) и журналы; колледж даёт теорию, но проигрывает практике, а техшколы — наоборот. Знание математики, по его мнению, не обязательно для большинства задач (кроме игр), но люди с математическим складом ума обычно осваивают код быстрее. В конце автор предлагает бесплатную 33-страничную электронную книгу How to Become a Programmer.

Advice on How to Become a Programmer

Советы о том, как стать программистом

A Software by Rob reader writes:

Читатель Software by Rob пишет:

I want to learn to program computers:

Я хочу научиться программировать:

  • What is your advice on becoming a good programmer?

  • How do you acquire the knowledge?

  • Is it necessary to know mathematics, specifically algebra, to be a good programmer?

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

    I receive several emails per month along these lines, so I’ve decided to share my advice on the subject. Note that I said “my advice” and not “the one and only way”; there are too many paths for one person to know them all. Here are some thoughts based on my experience:

    Я получаю по несколько писем в месяц с похожими вопросами, поэтому решил поделиться своими соображениями. Обратите внимание: я сказал «свои соображения», а не «единственно верный путь»; путей слишком много, чтобы один человек знал их все. Вот несколько мыслей, основанных на моём опыте:

    Q: What is your advice on becoming a good programmer?

    В: Какой ваш совет о том, как стать хорошим программистом?

    Everyone I’ve talked to has taken a different path. Programming is different from other engineering disciplines; if you want to become an electrical engineer you go to school, graduate, work for an engineering firm, and one day take a test and get licensed. Programming is different because people do it as a hobby; no one designs electrical subsystems for fun. This creates more possibilities for learning how to code.

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

    Here are the elements I think are key:

    Вот элементы, которые я считаю ключевыми:

  • Learn, learn, learn. You must have an insatiable appetite for knowledge. This usually means reading a programming book every few weeks in the early days, and moving on to more conceptual books like The Pragmatic Programmer, Code Complete, and Facts and Fallacies after 6-12 months of full-time coding. I can’t stress enough the value of reading, nor the value of immersing yourself in code early in the process.

  • Transition into Concepts. Learning how to be a good programmer begins with learning logic concepts and language syntax; they are much easier to understand when taken together. But good developers quickly desire knowledge that transcends language syntax. Perl, PHP, Java, ColdFusion, ASP…all languages I used in my first 18 months as a professional programmer. What made me a good programmer was not my knowledge of each language, but my desire to understand and refine concepts like D.R.Y., the broken window theory, and code re-use.

  • Hang Out With Programmers Who Are Better Than You. As a guitar player, the most I ever learned about the craft of songwriting was when I was hanging out with people who were much better than I. The same goes for writing software. And due to this new-fangled internet thingy you don’t even have to be physically present to be a part of the community: read programming blogs from the heavy hitters (Scott Guthrie, Rocky Lhotka, Dino Esposito, Scott Mitchell, etc…), check out programming forums, and look at other peoples’ code. Reading source code can be a pain, but the more you see the more you will be able to identity code that’s easy to understand, and code that takes a PhD to figure out how they output “Hello World” to the screen.

  • Учитесь, учитесь, учитесь. У вас должен быть ненасытный аппетит к знаниям. Обычно это означает читать книгу по программированию раз в несколько недель в начале пути и переходить к более концептуальным книгам, таким как The Pragmatic Programmer, Code Complete и Facts and Fallacies, спустя 6–12 месяцев программирования на полную ставку. Я не могу переоценить пользу чтения, как и пользу полного погружения в код в начале пути. Переходите к концепциям. Обучение тому, как стать хорошим программистом, начинается с изучения логических концепций и синтаксиса языка; их гораздо проще понимать вместе. Но хорошие разработчики быстро начинают желать знаний, выходящих за рамки синтаксиса. Perl, PHP, Java, ColdFusion, ASP… все языки, которые я использовал в первые 18 месяцев работы профессиональным программистом. Хорошим программистом меня сделало не знание каждого языка, а стремление понять и отточить такие концепции, как D.R.Y., теория разбитых окон и переиспользование кода. Общайтесь с программистами лучше вас. Как гитарист, больше всего о ремесле сочинения песен я узнавал, когда общался с людьми, которые были намного лучше меня. То же самое верно и для написания программ. И благодаря этой новомодной штуке под названием интернет вам даже не нужно физически присутствовать, чтобы быть частью сообщества: читайте блоги ведущих программистов (Scott Guthrie, Rocky Lhotka, Dino Esposito, Scott Mitchell и т. д.), заглядывайте на программистские форумы и смотрите чужой код. Чтение исходников может быть мучительным, но чем больше вы видите, тем лучше сможете отличать понятный код от того, в котором нужно иметь степень PhD, чтобы разобраться, как они выводят «Hello World» на экран.

    Q: How do you acquire the necessary knowledge?

    В: Как приобрести необходимые знания?

    There are a number of possibilities:

    Есть несколько вариантов:

  • A Software Apprenticeship. If you haven’t read my article on Software Apprenticeships, I recommend you do. The best (and I would argue the quickest) way to become a good programmer is to write code under the wing of an experienced developer who will teach you not only the basics, but the in-depth knowledge that takes years of experience to learn. I consider this option leaps and bounds above all others.

  • Learning while Doing. Want to learn to code? Get a job writing code. I don’t care if you make $5 an hour; you will progress more in 1 month as a full-time developer than you will in a year of hobby programming. There’s no better way to learn to program than to write code.

  • Books & Mags. Books and magazines have been key in my quest for programming knowledge. When I’ve apprenticed developers in the past, I use books as their primary source of basic knowledge, having them read 1-2 programming books per month, while teaching them more advanced techniques in person.

  • College. Having gone this route myself I am well aware of the limitations of the U.S. College system in preparing students for a career in computer programming. Preparing them for a career in determining little-o and big-O notation, sure, but actually writing code from the get go? Nope. College is great for high-level theory, but work experience trounces it when it comes to learning software development.

  • Tech school. I’ve only worked with one programmer who went to a technical school and she had good knowledge of language and coding concepts, but not a ton of theory or design knowledge. As a result, her code was utilitarian and used a lot of brute-force, but was often not well-designed or easily maintainable. There’s obviously a balance between not enough practical knowledge (college) and not enough theoretical knowledge (tech school). I am using a very narrow sample, so don’t take this as a blanket judgment of tech schools. Perhaps an SbR reader with more experience in this area can enlighten us. As an aside, the network administrators I’ve worked with from tech school have been well-trained and great to work with. Perhaps the nuts and bolts of networking are better suited for such a practical teaching approach.

  • Программистское ученичество. Если вы ещё не читали мою статью о программистском ученичестве, рекомендую это сделать. Лучший (и, я бы сказал, самый быстрый) способ стать хорошим программистом — писать код под крылом опытного разработчика, который научит вас не только основам, но и глубоким знаниям, на которые уходят годы опыта. Я ставлю этот вариант существенно выше всех остальных. Учитесь, делая. Хотите научиться программировать? Найдите работу, где надо писать код. Мне всё равно, будут ли вам платить $5 в час; за 1 месяц работы разработчиком на полной ставке вы продвинетесь больше, чем за год программирования как хобби. Нет лучшего способа научиться программировать, чем писать код. Книги и журналы. Книги и журналы были ключевыми в моём пути за знаниями в программировании. Когда я в прошлом брал учеников, я использовал книги как основной источник базовых знаний, заставляя их читать по 1–2 книге по программированию в месяц, а более продвинутым техникам обучая лично. Колледж. Пройдя этот путь сам, я хорошо осознаю ограничения системы американских колледжей в подготовке студентов к карьере в программировании. Подготовить их к карьере в определении little-o и big-O нотации — это да, но реально писать код с самого начала? Нет. Колледж хорош для высокоуровневой теории, но рабочий опыт обходит его, когда речь идёт о том, чтобы научиться разработке ПО. Техшкола. Я работал лишь с одним программистом, который окончил техническую школу, и у неё были хорошие знания языка и концепций кодирования, но не так много теории и знаний по проектированию. В результате её код был утилитарным и использовал много решений «в лоб», но часто не был хорошо спроектирован и легко поддерживаем. Очевидно, есть баланс между нехваткой практических знаний (колледж) и нехваткой теоретических (техшкола). Я опираюсь на очень узкую выборку, так что не воспринимайте это как обобщённую оценку техшкол. Возможно, читатель SbR с большим опытом в этой области может нас просветить. К слову, сетевые администраторы, с которыми я работал, окончившие техшколы, были хорошо подготовлены, и с ними было приятно работать. Возможно, именно нюансы сетей лучше подходят такому практическому подходу к обучению.

    Q: Is it necessary to know mathematics, specifically algebra, to be a good programmer?

    В: Нужно ли знать математику, особенно алгебру, чтобы быть хорошим программистом?

    Quite simply, no; it’s not necessary to know math in order to be a programmer.

    Если коротко — нет; знание математики не обязательно, чтобы быть программистом.

    If you’re developing games, then mathematics and physics play a large part, but building an invoicing application does not require much beyond basic addition and subtraction.

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

    However, from personal experience, people who have an easy time learning mathematics and enjoy solving logic problems (be they algebra or how to move Mount Fuji), tend to learn code quicker and enjoy it more in the long run. It takes a twisted mind, my friends.

    Однако, по личному опыту, людям, которым легко даётся математика и которые любят решать логические задачи (будь то алгебра или как сдвинуть гору Фудзи), обычно быстрее учатся коду и больше получают от него удовольствия в долгосрочной перспективе. Тут нужен особенный склад ума, друзья мои.

    ==

    ==

    If you are interested in reading more on the subject of becoming a programmer, I’ve written a totally free 33-page ebook titled How to Become a Programmer: Everything (Non-technical) You Need to Know. You can download it here.

    Если вам интересно почитать больше на тему того, как стать программистом, я написал совершенно бесплатную электронную книгу на 33 страницы под названием How to Become a Programmer: Everything (Non-technical) You Need to Know. Скачать её можно здесь.