چگونه از آموزش علوم کامپیوتر نهایت استفاده را ببریم
اکثر برنامه نویسان مدرن تحصیلات خود را در دانشگاه ها دریافت کردند. با گذشت زمان، این تغییر خواهد کرد، اما اکنون شرایط به گونه ای است که هنوز هم پرسنل خوب در شرکت های فناوری اطلاعات از دانشگاه ها می آیند. در این پست، استانیسلاو پروتاسوف، مدیر روابط دانشگاه Acronis، در مورد دیدگاه خود از ویژگی های آموزش دانشگاه برای برنامه نویسان آینده صحبت می کند. معلمان، دانشآموزان و کسانی که آنها را استخدام میکنند ممکن است حتی نکات مفیدی در این زمینه پیدا کنند.
در 10 سال گذشته ریاضیات، الگوریتم ها، زبان های برنامه نویسی و یادگیری ماشین را در دانشگاه های مختلف تدریس کرده ام. امروز علاوه بر سمت خود در Acronis، معاون بخش علوم کامپیوتر نظری و کاربردی در MIPT نیز هستم. از تجربه کار در دانشگاههای خوب روسیه (و نه تنها)، مشاهداتی در مورد آمادگی دانشجویان در رشتههای کامپیوتری انجام دادم.
قانون 30 ثانیه دیگر کار نمی کند
مطمئنم با قانون 30 ثانیه برخورد کرده اید که می گوید یک برنامه نویس باید هدف یک تابع را پس از نگاهی گذرا به کد آن درک کند. مدت ها پیش اختراع شد و از آن زمان سیستم عامل ها، زبان ها، سخت افزارها و الگوریتم های زیادی ظاهر شد. من 12 سال است که کد می نویسم، اما نسبتاً اخیراً کد منبع یک محصول را دیدم که در نگاه اول برای من مانند طلسم های جادویی به نظر می رسید. امروز، اگر در حوزه موضوع غوطه ور نباشید، قانون 30 ثانیه از کار می افتد. در غیر این صورت، نه تنها 30، بلکه 300 ثانیه برای شما کافی نخواهد بود تا بفهمید چیست.
به عنوان مثال، اگر میخواهید درایورها را بنویسید، باید به این منطقه بروید و هزاران خط کد خاص را بخوانید. با این رویکرد برای مطالعه یک موضوع، یک متخصص "احساس جریان" را ایجاد می کند. مثل رپ که احساس یک قافیه خوب و ریتم مناسب بدون منطقی خاص ظاهر می شود. به همین ترتیب، یک برنامه نویس خوب آموزش دیده می تواند به راحتی کدهای ناکارآمد یا به سادگی بد را بدون بررسی دقیق محل وقوع نقض سبک یا استفاده از رویکردی غیربهینه تشخیص دهد (اما توضیح این احساس می تواند بسیار دشوار باشد).
تخصص و پیچیدگی فزاینده منجر به این واقعیت می شود که تحصیلات لیسانس دیگر فرصت مطالعه همه زمینه ها را با عمق کافی فراهم نمی کند. اما دقیقاً در این سطح از آموزش است که فرد نیاز به یک دیدگاه دارد. پس از آن، در مقطع تحصیلات تکمیلی یا در محل کار، باید مدتی را صرف غوطه ور شدن در مشکلات و ویژگی های حوزه موضوعی، مطالعه زبان عامیانه، زبان های برنامه نویسی و کد همکاران، مطالعه مقالات و کتاب کنید. به نظر من این تنها راه است که با کمک دانشگاه می توان برای آینده "تقاطع" را بالا برد. متخصصان T شکل.
چه زبان برنامه نویسی برای تدریس در دانشگاه بهتر است؟
برای خوشحالی من، معلمان دانشگاه قبلاً از جستجوی پاسخ صحیح برای این سؤال منصرف شده اند: "بهترین زبان برای برنامه نویسی چیست؟" بحث در مورد اینکه کدام بهتر است - سی شارپ یا جاوا، دلفی یا سی پلاس پلاس - تقریباً ناپدید شده است. ظهور بسیاری از زبان های برنامه نویسی جدید و انباشت تجربه آموزشی منجر به درک تثبیت شده در محیط دانشگاهی شده است: هر زبان جایگاه خاص خود را دارد.
مشکل آموزش با استفاده از یک یا آن زبان برنامه نویسی دیگر در اولویت قرار ندارد. فرقی نمی کند دوره به چه زبانی تدریس شود. نکته اصلی بیان کافی زبان است. کتاب "هنر برنامه نویسی چند پردازنده ای” تصویر خوبی از این مشاهدات است. در این نسخه کلاسیک، همه نمونه ها به زبان جاوا ارائه شده اند - زبانی بدون اشاره گر، اما با جمع آوری زباله. به ندرت کسی استدلال می کند که جاوا از انتخاب بهینه برای نوشتن کدهای موازی با کارایی بالا دور است. اما زبان برای توضیح مفاهیم ارائه شده در کتاب مناسب بود. مثالی دیگر - دوره کلاسیک یادگیری ماشین اندرو ننا، در Matlab در محیط Octave تدریس کرد. امروزه میتوانید زبان برنامهنویسی متفاوتی را انتخاب کنید، اما واقعاً چه تفاوتی دارد که ایدهها و رویکردها مهم باشند؟
عملی تر و به واقعیت نزدیک تر
در عین حال، در سالهای اخیر تعداد شاغلان بسیار بیشتری در دانشگاهها وجود داشته است. اگر برنامههای دانشگاهی روسیه قبلاً به دلیل جدا شدن از واقعیت مورد انتقاد قرار میگرفتند، امروز نمیتوان همین را در مورد آموزش فناوری اطلاعات گفت. 10 سال پیش تقریباً هیچ معلمی در دانشگاه ها با تجربه واقعی در صنعت وجود نداشت. امروزه بیشتر و بیشتر کلاس ها در یک بخش تخصصی نه توسط معلمان تمام وقت علوم کامپیوتر، بلکه توسط متخصصان IT تمرین می شود که تنها 1-2 دوره را در اوقات فراغت خود از کار اصلی خود تدریس می کنند. این رویکرد خود را از نقطه نظر آموزش پرسنل با کیفیت بالا، به روز رسانی دوره ها و البته جستجوی کارکنان بالقوه در شرکت توجیه می کند. فکر نمیکنم این راز را با گفتن اینکه ما از یک دپارتمان پایه در MIPT حمایت میکنیم و با سایر دانشگاهها روابط برقرار میکنیم، از جمله برای آمادهسازی دانشجویانی که میتوانند شغل خود را در Acronis شروع کنند، فاش کنم.
ریاضی دان یا برنامه نویس؟
جنگ های مقدس که قبلاً حول محور زبان های برنامه نویسی می چرخیدند، به سمت و سوی فلسفی رفته اند. اکنون به اصطلاح "برنامه نویسان" و "ریاضیدانان" با یکدیگر بحث می کنند. اصولاً این مدارس را میتوان به دو برنامه آموزشی تفکیک کرد، اما صنعت هنوز در تفکیک چنین ظرافتهایی ضعیف است و از دانشگاهی به دانشگاه دیگر آموزشهای مشابه با تمرکز کمی متفاوت داریم. این بدان معنی است که هم دانش آموز و هم شرکتی که در آن به کار ادامه می دهد باید پازل دانش را با قطعات گمشده تکمیل کنند.
ظهور شاغلین در دانشگاه ها که کدهای صنعتی را به زبان های مختلف می نویسند، به دانش آموزان مهارت های رشد بهتری می دهد. برنامه نویسان مجرب با آشنایی کامل با پیاده سازی کتابخانه های استاندارد، چارچوب ها و تکنیک های برنامه نویسی، میل به نوشتن کدهای خوب و انجام سریع و کارآمد آن را در دانش آموزان القا می کند.
با این حال، این مهارت مفید، گاهی اوقات منجر به ظهور کسانی می شود که دوست دارند چرخ را دوباره اختراع کنند. دانشجویان برنامه نویسی به این صورت فکر می کنند: "آیا باید 200 خط دیگر کد خوب بنویسم که مشکل را حل کند؟"
معلمانی که آموزش ریاضی کلاسیک را دریافت کرده اند (مثلاً از دانشکده ریاضیات یا ریاضیات کاربردی) اغلب در یک محیط شبه علمی یا در زمینه مدل سازی و تجزیه و تحلیل داده ها کار می کنند. «ریاضی دانان» مشکلات در زمینه علوم کامپیوتر را به گونه ای متفاوت می بینند. آنها در اصل نه با کد، بلکه با الگوریتم ها، قضایا و مدل های رسمی عمل می کنند. یکی از مزیت های مهم رویکرد ریاضی، درک اساسی روشن از آنچه می توان و نمی توان حل کرد است. و نحوه حل آن.
بر این اساس، معلمان ریاضیات در مورد برنامه نویسی با تعصب به نظریه صحبت می کنند. دانشآموزانی که از «پیشزمینههای ریاضی» میآیند، احتمالاً راهحلهای اندیشیدهشده و از نظر تئوری برتر ارائه میکنند، اما معمولاً از نقطهنظر زبانشناختی کمتر از حد مطلوب هستند و اغلب به سادگی نوشته میشوند. چنین دانش آموزی معتقد است که هدف اصلی او نشان دادن توانایی در حل اصولی چنین مسائلی است. اما اجرای ممکن است لنگ باشد.
کودکانی که به عنوان برنامه نویس در مدرسه یا در سال های اول زندگی خود بزرگ شده اند "دوچرخه بسیار زیبایی" را با خود می آورند، که با این حال، معمولاً به طور مجانبی خیلی کارآمد کار نمی کند. برعکس، آنها وظیفه نظریه پردازی عمیق و روی آوردن به کتاب های درسی در جستجوی راه حل های بهینه را بر عهده خود قرار نمی دهند و کدهای زیبا را ترجیح می دهند.
در دانشگاههای مختلف، در طول مصاحبههای دانشجویی، معمولاً میبینم که کدام «مدرسه» زیربنای تحصیل اوست. و من تقریبا هرگز با تعادل کامل در آموزش ابتدایی مواجه نشده ام. در دوران کودکی، در شهر من می توانستید برای المپیادهای ریاضی آماده شوید، اما هیچ باشگاه برنامه نویسی وجود نداشت. اکنون در کلوپها، کودکان یاد میگیرند که با Go و Python "مد" برنامهنویسی کنند. بنابراین حتی در سطح پذیرش در دانشگاه ها نیز تفاوت هایی در رویکردها وجود دارد. من معتقدم حفظ هر دو مهارت در دانشگاه مهم است، در غیر این صورت یا یک متخصص با پایه نظری ناکافی، یا فردی که یاد نگرفته و نمی خواهد کد خوبی بنویسد، در شرکت می آید.
واضح است که در چنین شرایطی دانش آموز به سادگی آنچه را که بیشتر دوست دارد انتخاب می کند. معلم به سادگی دیدگاهی را که به او نزدیکتر است منتقل می کند. اما اگر کد زیبا نوشته شود و از نظر الگوریتم ها همه چیز واضح، معقول و موثر باشد، همه سود خواهند برد.
افق های فناوری اطلاعات. فارغ التحصیل مقطع لیسانس در رشته علوم کامپیوتر یک متخصص آماده با دید فنی پیشرفته است که احتمالاً مشخصات خود را انتخاب کرده است. اما در سال اول، ما نمی دانیم که او چه خواهد کرد. او می تواند وارد علم یا تجزیه و تحلیل شود، یا برعکس، می تواند هر روز مقدار زیادی کد بنویسد. بنابراین لازم است که دانش آموز تمام جنبه های کار در حوزه فناوری اطلاعات را نشان داده و با تمام ابزارها آشنا شود. در حالت ایدهآل، معلمان دورههای نظری ارتباطی با تمرین نشان میدهند (و بالعکس).
نقطه رشد. به نفع خود دانش آموز است که به خود اجازه افراط ندهد. درک اینکه آیا شما یک "ریاضیدان" یا یک "برنامه نویس" هستید دشوار نیست. کافی است هنگام حل یک مشکل به اولین انگیزه گوش دهید: چه کاری می خواهید انجام دهید - در جستجوی رویکرد بهینه به کتاب درسی نگاه کنید یا چند کارکرد را بنویسید که بعداً قطعاً مفید خواهد بود؟ بر این اساس، می توانید یک مسیر تکمیلی بیشتر از یادگیری خود بسازید.
منابع جایگزین دانش. اتفاق می افتد که برنامه به خوبی متعادل است ، اما "برنامه نویسی سیستم" و "الگوریتم ها" توسط افراد کاملاً متفاوت آموزش داده می شود و برخی از دانش آموزان به معلم اول و برخی دیگر به معلم دوم نزدیک تر هستند. اما حتی اگر استاد را دوست ندارید، این دلیل نمی شود که از برخی موضوعات به نفع دیگران غفلت کنید. خود لیسانس ها علاقه مند به یافتن اراده کار با منابع دانش هستند و به هیچ وجه به نظرات رادیکالی مانند "ریاضیات ملکه علوم است، نکته اصلی این است که الگوریتم ها را بدانیم" یا "کد خوب همه چیز را جبران می کند" اعتماد نمی کند.
با مراجعه به ادبیات تخصصی و دوره های آنلاین می توانید دانش خود را در تئوری عمیق تر کنید. میتوانید مهارتهای خود را در زبانهای برنامهنویسی در Coursera، Udacity یا Stepik، که در آن دورههای مختلف ارائه میشود، افزایش دهید. همچنین، اگر دانشآموزان احساس کنند که معلم الگوریتمها ریاضیات را خوب میداند، اما نمیتواند به سؤالات پیادهسازی پیچیده پاسخ دهد، اغلب شروع به تماشای دورههای زبان سختکور میکنند. همه با من موافق نیستند، اما در تمرین من به خوبی خود را ثابت کرده است تخصص در C ++ از Yandex، که در آن ویژگی های پیچیده تر و بیشتر زبان به طور متوالی تجزیه و تحلیل می شود. به طور کلی یک رشته با رتبه بالا از شرکت ها یا دانشگاه های معتبر انتخاب کنید.
مهارت های نرم افزاری
دانشجویانی که از دانشگاه برای کار در هر شرکتی، از یک استارت آپ گرفته تا یک شرکت بزرگ، می آیند، حتی از دانشگاه های برتر، خود را ضعیف با محیط کار واقعی تطبیق می دهند. واقعیت این است که امروزه دانشگاهها بهشدت از دانشآموزان مراقبت میکنند. حتی پس از غیبت در تعداد زیادی از کلاسها، آماده نشدن به موقع برای آزمونها و آزمونها، پرخوابی یا تأخیر در امتحان، همه میتوانند آن را قبول کنند و دوباره شرکت کنند - و در پایان باز هم دیپلم دریافت کنند.
اما امروزه همه شرایط برای آمادگی دانش آموزان برای زندگی بزرگسالی و فعالیت حرفه ای مستقل وجود دارد. آنها نه تنها باید برنامه ریزی کنند، بلکه باید ارتباط برقرار کنند. و این نیز نیاز به آموزش دارد. دانشگاه ها قالب های مختلفی برای توسعه این مهارت ها دارند، اما افسوس که اغلب به آن ها توجه کافی نمی شود. با این حال، ما فرصت های زیادی برای به دست آوردن مهارت های کار گروهی موثر داریم.
ارتباطات تجاری مکتوب. متأسفانه اکثر فارغ التحصیلانی که دانشگاه را ترک می کنند هیچ اطلاعی از آداب نامه نگاری ندارند. ویژگی ارتباط در پیام رسان های فوری در تبادل پیام در شب و روز و استفاده از سبک مکالمه و واژگان غیر رسمی است. با این حال، آموزش گفتار نوشتاری زمانی امکان پذیر است که دانشجو با گروه و دانشگاه ارتباط برقرار کند.
در عمل، مدیران اغلب با نیاز به تجزیه یک پروژه بزرگ به وظایف کوچک مواجه هستند. برای انجام این کار، باید به وضوح هر کار و اجزای آن را توصیف کنید تا توسعه دهندگان جوان بفهمند که چه چیزی از آنها خواسته می شود. یک وظیفه تعریف نشده اغلب منجر به نیاز به انجام مجدد کاری می شود، به همین دلیل است که تجربه در ارتباطات نوشتاری به فارغ التحصیلان کمک می کند تا در تیم های توزیع شده کار کنند.
ارائه کتبی از نتایج کار شما. دانشآموزان ارشد میتوانند برای ارائه پروژههای آموزشی خود، پستهایی در Habr، مقالات علمی و همچنین فقط گزارش بنویسند. فرصت های زیادی برای این وجود دارد - کار دوره در سال دوم در برخی از دانشگاه ها آغاز می شود. شما همچنین می توانید از مقالات به عنوان نوعی کنترل استفاده کنید - آنها معمولاً از نظر شکل به یک مقاله روزنامه نگاری نزدیک تر هستند. این رویکرد قبلاً در دانشکده عالی اقتصاد دانشگاه تحقیقات ملی اجرا شده است.
اگر یک شرکت رویکردی انعطافپذیر برای توسعه داشته باشد، باید نتایج کار خود را در بخشهای کوچکتر، اما بیشتر اوقات ارائه دهد. برای انجام این کار، مهم است که بتوانیم به طور خلاصه نتایج کار یک متخصص یا کل تیم را منتقل کنیم. همچنین، امروزه بسیاری از شرکت ها "بررسی" را انجام می دهند - سالانه یا نیمه سالانه. کارمندان در مورد نتایج و چشم انداز کاری بحث می کنند. بررسی موفقیت آمیز دلیل اصلی رشد شغلی، پاداش ها، به عنوان مثال، در Microsoft، Acronis یا Yandex است. بله، شما می توانید به خوبی برنامه ریزی کنید، اما "در گوشه ای نشستن" حتی یک متخصص باحال همیشه به کسی که می داند چگونه موفقیت خود را به خوبی ارائه دهد، بازنده خواهد بود.
نگارش دانشگاهی. نوشتن آکادمیک شایسته ذکر ویژه است. آشنایی دانشجویان با قواعد نگارش متون علمی، استفاده از استدلال، جستجوی اطلاعات در منابع مختلف و قالب بندی مراجع به این منابع برای دانشجویان مفید است. توصیه می شود این کار را به زبان انگلیسی انجام دهید، زیرا متون خوب بسیار بیشتری در جامعه آکادمیک بین المللی وجود دارد، و برای رشته های مختلف از قبل الگوهایی برای ارائه نتایج علمی وجود دارد. البته هنگام تهیه نشریات روسی زبان به مهارت های نوشتاری آکادمیک نیز نیاز است، اما نمونه های کمتری از مقالات مدرن خوب به زبان انگلیسی وجود دارد. این مهارت ها را می توان از طریق یک دوره مناسب به دست آورد که اکنون در بسیاری از برنامه های آموزشی گنجانده شده است.
جلسات پیشرو. بیشتر دانشآموزان نمیدانند چگونه برای جلسات آماده شوند، صورتجلسه بگیرند و دادهها را پردازش کنند. اما اگر این مهارت را در دانشگاه پرورش دهیم، مثلاً با شرکت در پروژه های تیمی، می توانیم از اتلاف وقت در محل کار جلوگیری کنیم. این امر مستلزم نظارت بر کار پروژه دانش آموزان است تا به آنها آموزش داده شود که چگونه جلسات را به طور مؤثر برگزار کنند. در عمل، این برای هر شرکتی هزینه زیادی دارد - به هر حال، اگر چندین نفر که حقوق زیادی دریافت میکنند، یک ساعت از زمان کار خود را در یک تجمع صرف کنند، میخواهید بازدهی مربوط به آن را داشته باشید.
سخنرانی عمومی. بسیاری از دانشجویان تنها در حین دفاع از پایان نامه خود با نیاز به صحبت عمومی مواجه می شوند. و همه برای این آماده نیستند. من دانش آموزان زیادی را دیده ام که:
پشت به تماشاگر بایستند،
تاب می خورد، سعی می کند کمیسیون را به خلسه معرفی کند،
قلم، مداد و اشاره گر را بشکنید،
راه رفتن در دایره
به زمین نگاه کن
این طبیعی است زمانی که شخص برای اولین بار اجرا می کند. اما شما باید زودتر کار با این استرس را شروع کنید - با دفاع از درس خود در یک فضای دوستانه، در میان همکلاسی های خود.
علاوه بر این، رویه استاندارد در شرکتها این است که به کارمند فرصت ارائه ایده و دریافت بودجه، موقعیت یا پروژه اختصاصی برای آن داده شود. اما، اگر در مورد آن فکر کنید، این همان حفاظت از درس است، فقط در سطح بالاتر. چرا در حین تحصیل چنین مهارت های شغلی مفیدی را تمرین نمی کنید؟
چه چیزی را از دست دادم؟
یکی از دلایل نوشتن این پست همین مقاله بود در وب سایت دانشگاه ایالتی تیومن منتشر شده است. نویسنده مقاله فقط بر کاستی های دانش آموزان روسی که توسط معلمان خارجی متوجه شده اند تمرکز می کند. تمرین تدریس من در دانشگاه های مختلف نشان می دهد که مدارس و آموزش عالی روسی پایه خوبی را فراهم می کند. دانش آموزان روسی در ریاضیات و الگوریتم ها باهوش هستند و برقراری ارتباط حرفه ای با آنها آسان تر است.
در مورد دانش آموزان خارجی، برعکس، انتظارات یک معلم روسی گاهی اوقات می تواند بیش از حد بالا باشد. به عنوان مثال، در سطح آموزش پایه از نظر ریاضی، دانش آموزان هندی که من ملاقات کردم، شبیه به دانش آموزان روسی هستند. با این حال، گاهی اوقات زمانی که از تحصیلات کارشناسی خود فارغ التحصیل می شوند، فاقد دانش تخصصی هستند. دانشآموزان اروپایی خوب احتمالاً پیشزمینه ریاضیات قویتری در سطح مدرسه دارند.
و اگر در دانشگاه درس میخوانید یا کار میکنید، اکنون میتوانید روی مهارتهای ارتباطی (خود یا دانشآموزانتان) کار کنید، پایههای اساسی خود را گسترش دهید و برنامهنویسی را تمرین کنید. برای این منظور، سیستم آموزشی روسیه تمام فرصت ها را فراهم می کند - فقط باید از آنها به درستی استفاده کنید.
خوشحال می شوم اگر در نظرات پست پیوندهای خود را به دوره ها و روش هایی که به ایجاد تعادل در آموزش کمک می کند و همچنین راه های دیگر برای بهبود مهارت های نرم در حین تحصیل در دانشگاه به اشتراک بگذارید.