| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Как стать программистом C++? |
| Автор: WhKitten 24.11.2010, 11:07 |
| Как выучиться на программиста C++ и что, нужно знать, чтобы устроится на работу программистом C++. Впринципе требования конечно можно понять из объявления работодателей, но всё же хочу узнать мнение профессиональных программистов на этот счёт. Собственно, хочу устроится на работу программистом C++, до этого немного писал программы на Delphi, написал в колледже дипломную работу, связанную с программированием. Потом понял, что Delphi это всё же не то и стал учить C++. С++ стал учить по книге Бьёрна Страуструпа "Язык программирования C++". На сколько я понимаю, что если я прочту эту книгу и выполню все задания в ней, то можно сказать, что я знаю C++ и STL, но программистом работать всё ещё не могу так как не знаю библиотек и специфичных технологий? Т.е если потом освоить ещё какую-нибудь часто используемую библиотеку, например Qt или MFC, например по книге Джоржа Шеферда "Программирование на Visual C++ .NET", то можно устраиваться на работу? Или я всё же, что-то упустил? Как Вы учились на программиста? Просто получили соответсвующее образование в ВУЗе (ИМХО врят ли это будет достаточно)? Или всё же учили язык в большей части самостоятельно? Какие книги посоветуете прочитать? Что минимум надо знать, какие книги прочитать, чтобы можно было легко устроится на работу программистом? Как и где лучше начать карьеру программиста? Заранее спасибо за ответ на мой вопрос. |
| Автор: bsa 24.11.2010, 12:37 |
| WhKitten, интересно, как ты собираешься учить Qt по "книге Джоржа Шеферда "Программирование на Visual C++ .NET""? .Net это вообще другая технология и другой язык (C++/CLI и C#). Теоретических знаний недостаточно. Единственное, на что можно претендовать, это на самую низкооплачиваемую должность кодера (это когда дают четкое задание и тебе нужно его выполнить). Через некоторое время дорастешь до настоящего программиста. К сожалению, язык С++ невозможно выучить по книгам - нужно несколько лет практики. Добавлено через 5 минут и 17 секунд Изучал basic и pascal в школе + ассемблер дома, затем С в институте + С++ дома (и то, тот вариант, что зовется "Си с классами"). Затем работал 5 лет на ассемблере, дошел до ведущего программиста. Под новый проект взяли С++ программиста, от него узнал о существовании STL и boost. Начал самостоятельное их освоение... Прошло три года с тех пор. И я могу сказать, что я хорошо (не отлично!) знаю STL и удовлетворительно boost. Ну что, еще готов изучать С++? |
| Автор: Леопольд 24.11.2010, 13:13 | ||
О чём речь? |
| Автор: WhKitten 24.11.2010, 13:21 | ||||||
По книге Visual C++ .NET я собираюсь учить WinAPI и MFC. http://www.books.ru/contents?id=86712 судя по содержанию это не CLI и по первым главам тоже про CLI ничего нет. И язык там C++, а не C#. Разумеется Qt по этой книге я учить не собираюсь. Я думаю знание MFC важнее Qt, ну так Qt вроде хорошая документация идёт в QAssistant. У Страуструпа есть практические задания и в книге "Visual C++ .NET" тоже подробно разбирается с примерами разработка Win32 приложения на C++. Или это не то?
Вы что имеет ввиду? C++ слишком сложный язык чтоль по сравнению с Delphi, его никто выучить не может. Или что? Я не понял Ваше сообщение. Сейчас для меня уже очевидно, что с выбором C++ я не ошибся - это намного более удобный и практичный язык, а также более полезный в сравнении с Delphi. Ну эта тема не про сравнение Delphi с C++, т.е двух абсолютно разных вещей.
#include <algorithm> или Вы все алгоритмы сами пишите с нуля и библиотеки вообще не используете? Не всё конечно есть в стандартной библиотеке, но большинство то есть. К тому же всегда можно найти, как наилучшим образом сделать то, что нужно. Есть иные библиотеки, тот же boost. По поводу структурного программирования: разве объектно-ориентированное программирование не более совершенный и удобный способ? Ну опять же тема не про это. Т.е Вы хотите, сказать что выучится на программиста C++ вообще нельзя? Или нужно пять лет для этого учить ассемблер? Странное какое-то отношение, если честно. |
| Автор: A5uKa 24.11.2010, 13:24 | ||
|
| Автор: Леопольд 24.11.2010, 13:26 |
| Зачем? Только под винду программировать планируешь? С++ кросплатформенный язык. Не только у Win есть Api. |
| Автор: azesmcar 24.11.2010, 13:29 | ||
Ну скажи что же самое то, для реальной работы? На рынке сегодня хорошо оплачиваются .NET, C++ и Java, что именно ты предлагаешь? ошибаешься, MFC уже много лет как мертв.
Кто это говорил? дельный совет тоже не стоит, на практике применяется редко, а для глубоких знаний еще рановато, в основном ничего не поймешь. Через 2-3 года Рихтера почитай, этого будет достаточно. |
| Автор: Леопольд 24.11.2010, 13:35 |
| Прямой путь... |
| Автор: mrbrooks 24.11.2010, 13:38 |
это профанация. |
| Автор: WhKitten 24.11.2010, 13:45 | ||
Мне казалось, что начинающие программисты знающее MFC и основные виндовые технологии востребованее, чем начинающие программисты не знающие их, но знающие к примеру Qt. Понятное дело, что с использование Qt можно писать кроссплатформенный код, но мне кажется что всё же важнее знать MFC нежели Qt, особенно для начинающего программиста, поскольку Windows всё же доминирует. Я прекрасно понимаю, что писать различные сложные программы я сразу не смогу. Мне бы выучить тот минимум при котором, я мог бы устроится на какую-нибудь должность связанную с программированием, а дальше расти в этой области как программист C++. А потом, уже можно будет учить Qt... Или всё же лучше учить сразу Qt? Но разве можно стать программистом не зная WinAPI и основных виндовых технологий (MFC, OLE, COM, ActiveX)? И еще у Стауструпа на мой взгляд хорошие практические задания. Например: "Определите класс, реализующий арифметику с произвольной точностью. Оттестируйте его вычислив факториал 1000." Вроде хорошее задание для начинающего программиста или всё же на Ваш взгляд слишком простое? Но я думаю, потом будут задания по сложнее - это начало книги фактически. |
| Автор: azesmcar 24.11.2010, 13:49 | ||
Windows доминирует для desktop-а, а для desktop-а на C++ вообще сейчас редко пишут, C++ скоро плотно займет нишу низкоуровнего программирования, особенно с принятием нового стандарта.
Учи какой нибудь востребованный язык, алгоритмы, структуры данных, ООП и патерны проектирования..этого для поступления на позицию junior-а должно хватить. |
| Автор: A5uKa 24.11.2010, 13:50 | ||||||
Всё ещё.
Пиши калькулятор.
Можно |
| Автор: kemiisto 24.11.2010, 13:54 | ||||
Такое ощущение, что ты упрямо не хочешь читать сообщения. Я цитирую:
Первое и очевидное замечание - учится надо на программиста, на не на программиста С++. Второе, речь ведь об обучении. Причём явно о начальных этапах. Ибо только в этом случае будет желание (иррациональное) учить MFC. А ты сразу про бабло. Может он и программистом не станет, может пророчество майя сбудется, ... Третье. Никогда, НИКОГДА, при выборе технологии для изучения не ориентируйся на текущее состояние рынка. Учить надо базовые принципы, которые вряд ли изменятся в обозримом будущем. Если уж такое желание сразу "щупать" практические вещи - тогда cutting edge. Но уж никак не C++. Но cutting edge сейчас суров. Scala по сложности недалеко от ++, а для императивно мыслящего программиста может показаться и сложнее. Но есть и интересные разработки. http://cobra-language.com/, например. Очень много печенок искаропки. Добавлено через 2 минуты и 20 секунд Современные модульные системы. Punto Switcher под Mac никак не хочет дружить с Google Chrome. Это пощупать нужно. |
| Автор: Леопольд 24.11.2010, 14:03 | ||||
| Это всё уже относится к конкретному проекту. Все ньюкамеры, оbычно проходят тренинг, прежде чем приступить к раbоте. Чем сложнее проект тем дольше тренинг. Как правило, этот тренинг выливается в то, что теbе выдают документацию по всему этому, и практическое задание. Знакомишься с документацией, иногда весьма bегло иногда вдумчиво, в попытке понять новую концепцию или аbстракцию. В нормальной конторе никто не дасть теbе bез пригляда ваять что попало. На соbеседовании главное показать что достаточно умён и умеешь писать простой и понятный код на языке, который ты хорошо знаешь (т.е. грамотно и доступно выражать свои идеи в коде). Добавлено через 5 минут и 49 секунд
Но в пользу С++ можно сказать что в нём столько всего наворочено, что изучить после него другой промышленный язык не составит труда. |
| Автор: azesmcar 24.11.2010, 14:09 | ||||
| [*] Я то читаю, но не воспринимаю все буквально. Из текста ясно видно, что у человека цель - найти работу, ты говоришь, что C++ "не самое то", а что же "самое то"? Если сравнение шло с дельфи в контексте поиска работы, то полагаю, что дельфи
Верно, на программиста. Программист - это человек, который пишет программы, но программы пишут на каком нибудь яыке, это неизбежно и хочешь не хочешь а какой нибудь выбирать придеться. Я не говорю, что надо учить WinAPI или MFC, как раз наоборот, я писал
|
| Автор: Леопольд 24.11.2010, 14:12 |
| http://www.google.ru/#hl=ru&newwindow=1&biw=1177&bih=664&q=Punto+Switcher+%D0%BF%D0%BE%D0%B4+Mac+%D0%BD%D0%B8%D0%BA%D0%B0%D0%BA+%D0%BD%D0%B5+%D1%85%D0%BE%D1%87%D0%B5%D1%82+%D0%B4%D1%80%D1%83%D0%B6%D0%B8%D1%82%D1%8C+%D1%81+Google+Chrome.&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=6b80d38ad031c95 чересчур прозрачный намёк, можно "потолще"? Добавлено @ 14:17 WhKitten, когда ЯП выbран, bольшим плюсом является знание инструментария для раbоты с ним. Компилятор/Интерпертатор (очень важно знать, во что превращается твой код на этапе выполнения), деbаггер, тестинг, генератор документации и т.д. |
| Автор: WhKitten 24.11.2010, 14:40 |
| Насколько я понял: 1. Не важно какой язык учить, главное учить программирование. 2. Windows API, MFC и другие виндовые технологии знать для устройства на работу Junior программистом не нужно. Qt тоже не обязательно или всё же лучше изучить? 3. Помимо языка программирования нужно прочитать книги про алгоритмы и проектирование ПО. 4. Изучение C# для desktop лучше, чем C++, который заточен на более низкий уровень. По поводу C# и C++ мне всегда казалось, что C++ более полезный язык ввиду обилия библиотек, своей универсальности и проверенной временем востребованностью. А также, почитав Страуструпа понял, что это ещё и очень быстрый язык позволяющий писать, как низкоуровневый код, так и код более высокого уровня. К тому же на C++ можно писать кроссплатформенный код. На C# вроде тоже можно под mono, но как я понял будущее этих технологий мне представляется туманным. А C++ вроде кажется будет всегда востребованным и универсальным языком. Поэтому и хочу учить именно C++, хотя если честно привлекает больше именно программирование для desktop, нежели более низкие уровни. По поводу алгоритмов я так понимаю надо прочитать четырёхтомник Кнута? А по поводу проектирования ПО, что посоветуете почитать? |
| Автор: azesmcar 24.11.2010, 14:51 | ||||||||
Ну в принципе да..но учить BrainFuck тоже не дело. Желательно учить то, что потом пригодиться.
Естественно, язык программирования - это всего лишь инструмент, с помощью которого ты диктуешь свои мысли компьютеру, но вместе с инструментом тебе нужны эти самые мысли
Да, если планируешь писать desktop и только под windows то лучше C#. Спроса намного больше.
Термин "полезный язык" мне лично непонятен, да и проверенность языка тоже понятие туманное.
При разработке высокоуровневых приложений это низкоуровневость только мешает..и что значит "быстрый язык"? Не все сразу Для начала изучи немного язык, циклы, операторы, структуры, функции, массивы, указатели...потом начинай решать задачи: списки, сортировки, поиск... итд (смотри в Центре помощи, там полно задач), а там видно будет. |
| Автор: bsa 24.11.2010, 15:49 |
Для общего развития. Там почти все очень грамотно спроектировано. В разделе для новичков есть прикрепленная тема "ответы на часто задаваемые вопросы". Почитай, там есть ответ на твой вопрос. |
| Автор: mimik 24.11.2010, 19:00 | ||
a поконкретнее?
а как же Вирт, Oberon? |
| Автор: ufna 25.11.2010, 19:10 |
| По-моему пофиг что учить и как учить, в том плане что должна быть ведущая цель, идея, мотивация. Просто быть "программистом" - нуу... не знаю. Какие программы ты хочешь писать? Что ты хочешь создавать? В какую область пойти? Зачем тебе это? Ключевые вопросы. Кнута точно рано читать, это очень серьезная книжка. Есть попроще книги, где заложены азы алгоритмов. Советую купить книгу по олимпиадным заданиям по программированию для школьников старших классов и прорешать хотя бы треть, используя С++ - научишься многому. Как основа программистской мысли. Устраиваться на работу нужно тогда, когда ты можешь что-то делать. В какой-либо области. Может быть тебе нравится работать с железом, может быть - программировать интерфейс, может - базы данных и т.п. - все это ооочень разные вещи по необходимым умениям, нужен разный опыт и т.п. |
| Автор: baldina 25.11.2010, 19:50 |
вполне адекватное желание. ну, нравится! помните: "как стать писателем? - если можете не писать, не пишите" |
| Автор: ufna 25.11.2010, 19:56 |
| Нее, не надо путать теплое с мягким, я о другом. Когда творчество прет, вопросов "как учиться" не возникает - ты пишешь/рисуешь/поешь и т.п., потому что идет изнутри. То же самое здесь - прет быть кодером, да давно бы зарылся к кучу книжек и просто получал кайф от кодерства, как реализации своего творчества - да и тогда у тебя будет желание не просто кодить, а что-то кодить. А как только речь зашла о "как устроиться на работу С++ кодером", то вопрос аналога "как стать лабухом по ресторанам" - это процесс больше технический, чем творческий. |
| Автор: WhKitten 25.11.2010, 20:05 |
Прикладные программы. Драйверы, низкоуровневые приложения, серверы писать не хочу. Т.е пока реально приложения предназначенные для решения какой-то определённой задачи на desktop'е. В том числе приложения взаимодействующие с базами данных к этой же категории отношу. Я так думаю это не самое сложное. Потом может можно и ещё что-то будет освоить. Как я понял C# лучше в этом плане, но не хочется учить технологию, которая только для Windows. Считаю полезное уменение, написать программу которая тебе нужна. Пригодится не только на работе, но и дома. К тому же в плане карьеры, считаю что программистам есть куда расти. Да и просто нравится программировать. По опыту, проще разобраться в непонятных вещах в одной серьёзной книжке, чем разбирать неинтересные и простые вещи в других и так не узнать про эти вещи из серьёзной книжки. Что-то делать я могу. Как я говорил, написал диплом на Delphi - прога работающая с базами данных, через ADO на 40000 строк кода. Недавно написал сетевое приложение GUI на Qt под Windows с использование boost::asio, совершенно ничего не зная не о boost, не о Qt (документация и примеры, а также куча howto рулят). Но всё таки чувствую, что программистом меня не возьмут, ибо сам чувствую что пишу код не оптимально и язык знаю плохо. Сейчас изучаю C++ по книге Страуструпа и цель реально как можно быстрее найти работу. Что-то знаю, что-то нет и вот реально возникло желание узнать, что именно надо знать и выучить, чтобы устроится на работу программистом. И цель реально не учить программирование несколько лет, а устроится на работу программистом. Как я уже написал, некоторые знания имеются, как и диплом о высшем образовании по специальности информационные системы. |
| Автор: ufna 25.11.2010, 20:17 |
| Кнут - это не "сложная книжка где все в одном", это другая парадигма. Тебе нужны в первую очередь прикладные алгоритмы, в декстопном софте в большинстве случаев алгоритмы уровня Кнута не понадобятся и тем более они не привязаны к языку - там далеко не сипипи рассматривается. Вот реально, "живые алгоритмы" - это олимпиадные задачи для школьников 10-11 классов. Оптимизация памяти, скорости работы, поиск интересных решений - вот это главное. Ну и книгу по базовым алгоритмам, к примеру Томаса Кормена - очень рекомендую. Для десктопа расклад такой. Устроиться на работу проще всего С# или сипипи с WinAPI, .NET, MFC. Си шарп нынче моден и для винды он реально удобен - на нем кодить можно очень быстро рабочие прикладные программы для нужд организаций. И не так сложен в освоении для начала работы. Есть Qt - обалденная вещь, с которой я работаю последние лет шесть. Но устроиться в офис будет посложнее гораздо. Главное - общие принципы создания прикладного ПО, тогда вопрос языка и SDK становится вторичным. И тут реально большее значение имеют не алгоритмы математического плана, а проектирование программ, оптимизация их работы. Страуструп сложен для обучения сипипи, имхо. Лучше Р.Лафоре, выполняя задания в книге, потом уже немного практики и затем Страуструп для закрепления. Готов ли ты устраиваться в компанию решается просто - напиши пару небольших приложений, красивых и быстрых, используя ту технологию что тебе понравилась. И далее уже пробуй устраиваться. Ну и можно посмотреть вакансии в твоем городе, посмотреть какие у них требования. Добавлено через 12 минут и 58 секунд Приведу пару примеров задач с реального собеседование на место С++ кодера в LG в Питере (устраивался мой знакомый) Задача: 3 непрозрачные вазы. Известно, что в одной белые шарики, в другой черные шарики и в третьей смесь из белых и черных шариков. На вазах висят таблички с информацией, какие там шарики. Таблички не соответствуют содержимому. Как, достав шарик из любой одной вазы, развесить таблички правильно? Задача 2: лифт поднимается с 1 по 6 этаж за 30 секунд, за сколько он доедет с 1 до 12? Вообще - задачи 6-7 класса в ЦДМО каком-нибудь. Главная суть - как голова работает, а остальное определят в испытательном сроке. Это "чтобы устроиться". Задачи могут быть более сложные, но часто проверяют именно логику, а где посерьезней - еще твое знание языка, дав задание написать примерно реализацию какой-нибудь задачи на алогритмическое мышление, или найти ошибку в листинге. |
| Автор: Леопольд 25.11.2010, 22:10 |
| Знакомый в Intel устроился, интерном. Ему такую задачку задали. Есть состав из вагонов, неизвестной длинны. Они зациклены. Можно ходить по вагонам, включать и выключать свет. Когда заходишь в вагон, свет уже может bыть включенным изначально. Надо посчитать длину состава. |
| Автор: borisbn 25.11.2010, 23:37 |
| WhKitten, знание одного языка (или одной платформы - Windows) всегда накладывает ограничения на решения задачи (я бы даже сказал ЗАДАЧИ). Во главу угла всегда нужно ставить решение проблемы, а не инструмент, имеющийся в наличие. Как ты дамаешь, кто зарабатывает больше: электрик, у которого есть тестер, паяльник и пасатижи, или прораб, у которого есть электрик, плиточник, сатнехник и др.? Так вот, изучив (пусть даже в совершенстве) плюсы, ты станешь неплохим электриком, а изучив (пусть не в совершенстве, но, ессно, на уровне) плюсы, жава, шарп, питон, пиэйчпи; winAPI, stl, boost, Qt (моя любимая |
| Автор: ufna 25.11.2010, 23:41 |
| Ну сильно распыляться тоже не стоит. Я на уровне ликбеза знаю много API и языков, но во все не суюсь - т.к. работая в своей специфике я набираю опыт, имя, и просто умею больше. Но - начинать нужно именно с ликбезов, что есть что. Хочется сипипи и гуи проги - смотрим самые крупные либы, насколько они имеют будещее, возможности и т.п. и изучаем. А вот в офис - по другому немного, имхо. Я то фриланс по жизни. |
| Автор: bsa 25.11.2010, 23:46 |
| WhKitten, ты лучше сходи на пару собеседований. Там и поймешь, что реально нужно работодателям. Если ты собеседование провалишь, это ничего не значит. Конечно, если у тебя в регионе есть только один работодатель, то тут сложнее. Не исключен такой вариант: твой нос не понравился твоему потенциальному начальнику. Или ты показался ему умней его. |
| Автор: ufna 25.11.2010, 23:54 |
| Кстати да, совершенно согласен - нужно попробовать что такое собеседование и т.п. Часто компании берут "птенцов для выращивания", тем самым не требуя чего-то сверх, лишь голову на плечах и желание работать. |