مصاحبه با آقای پیمان دودانگه، مدرس جاوا در دانشگاه شريف

يکی از اهداف انجمن جاواکاپ، ترويج آموزش زبان جاوا است. ارائه پيشنهاد و هماهنگی سيلابس برای دروس برنامهنويسی در سطح دانشگاههای شاخص کشور نيز در چشمانداز فعاليتهای انجمن ديده شده است. در همين راستا، انجمن اقدام به بررسی وضعيت فعلی دروس برنامهنويسی در دانشگاههای مهم کشور کرده است و از نظرات مدرسان و صاحبنظران در اين حوزه جويا میشود. به همين منظور، انجمن جاواکاپ سلسله مصاحبههایی با مدرسان دروس برنامهنويسی در دانشگاههای کشور ترتيب داده است. مصاحبه با آقای پیمان دودانگه به عنوان دومین مصاحبه در این زمینه پیش روی شما خواننده محترم است.
- با سلام. از اين که مصاحبه با انجمن جاواکاپ را پذيرفتيد از شما ممنونيم. لطفاً خودتان را برای خوانندگان ما معرفی بفرماييد و درباره سابقه تدریستان در حوزه نرمافزار بفرمایید.
اینجانب پیمان دودانگه هستم. دانشجوی سال دوم دکتری در رشته مهندسی کامپیوتر، گرایش امنیت داده و شبکه در دانشگاه صنعتی شریف. سابقه تدریس بنده به دو سال پیش برمیگردد که درسهای این رشته را در موسسههای خصوصی تدریس میکردم. همچنین زبان C و ++C را در شرکتهای خصوصی تدریس کردهام. در درسهای امنیت پایگاه داده و سیستم عامل در دانشگاه شریف، دستیار اصلی استاد بودهام و امسال هم برنامهنویسی پیشرفته Java را در دانشگاه تدریس می کنم.
- نظرتان را راجع به تدریس Java بفرمایید. با این پیش فرض که دانشجو در ابتدا چیزی از برنامه نویسی نمیداند، آیا تدریس Java به عنوان درس مبانی مناسب است؟ در درس برنامهنویسی پیشرفته تا چقدر می توان در سیلابس های این درس پیشرفت؟
بنده توصیه نمیکنم دانشجویی که از برنامهنویسی چیزی نمیداند با Java آشنا شود، چراکه به ارزش افزودههای Java نسبت به سایر زبانها پی نمیبرد. خصوصیتی که باعث میشود Java به برنامهنویس کمک کند، پشتیبانیاش از مباحث OOP است که آن را در زبان C نمیبینم و در زبان ++C هم بهصورت ضعیف وجود دارد. (هرچند که بنده معتقدم با زبان Assembly هم میتوانیم OOP بنویسیم) اما کمکی که Java در مباحثی همچون مستقل از Platform به ما میکند بسیار ارزنده است. اگر قبلا برنامهنویس، زبان های C یا ++C را مطالعه کرده باشد، با سختیهای نگاشت مفاهیم دنیای واقعی به مباحث نرم افزاری آشنایی دارد و متوجه می شود که در بسیاری از موارد با زبان C کاری از پیش نمیبرد و وقتی با Java کار می کند، پی به وسعت این زبان می برد.
- از چه منابعی برای این درس استفاده می کنید و سیلابسهای درسیتان به چه صورت است؟
بنده از سه کتاب معتبر و مهم به صورت موازی در حوزه تدریس Java استفاده کردهام:
1- Java: How To Program, Deitel
2- Thinking in Java (TIJ), Bruce Eckel
3- Head First Java, O’Reilly Media
کتاب اول روان، ساده و پر از مثال است. کتاب دوم از بهترین کتابهای برنامهنویسی Java است که مرجع بسیار خوبی برای جاواکاران میباشد و دانشگاه Carnegie Mellon آمریکا هم که از مهمترین دانشگاههای صنعت نرم افزار است برای تدریس Java از این کتاب استفاده میکند و کتاب سوم که به صورت آموزش interactive است، از مثالهای زیادی جهت انتقال مفاهیم استفاده کرده است. مثلا مفهوم Reference به Object را به کنترل تلویزیون مثال زده است و قسمتهایی از کد را با اشاره به این مفهوم در دنیای واقعی توضیح می دهد. اگر دانشجو نتواند با این گونه مفاهیم ارتباط برقرار کند، کار سخت جلو می رود.
سیلابس درس عبارت است از: تاریخچه، مروری بر دستورات Java ، مفاهیم OOP و مباحث پیشرفتهتری همچون Generics، Collections، Multi Thread، IO ، Serialization و Reflections. علاقه دارم در ترم بعدی راجع به JDBC هم صحبت شود.
بد نیست که پروژههایی تعریف شود که دانشجویان علاقمند سراغ مباحث EJB ، Spring، Hibernate و Maven هم بروند. البته شاید لازم باشد که یک درس اختیاری سه واحدی به نام Java2 داشته باشیم تا دانشجویان با این مباحث نیز آشنا شوند.
- آیا شرایط به گونه ای بود که بتوان به مباحث بیشتری از قبیل تفاوت نسخه های Java هم اشاره کرد؟ مثلا در Java7 مواردی اضافه شد که دانستنشان به برنامهنویس کمک می کند.
فکر می کنم رسالت اصلی ما در این درس دو مطلب است:
1- آشنایی دانشجو با Java که وقتی کد Java را می بیند، کاملا متوجه شود.
2- دانشجو بفهمد که Java نسبت به سایر زبانها چه ارزش افزودهای دارد.
لذا در این زمان محدود نمیتوان درباره تفاوت نسخهها مطالبی گفت. البته بد نیست که سر کلاسهای حل تمرین این موضوع در قالب ارائههای دانشجویی مطرح شود که لازمهاش این است که واقعا دانشجو به مباحث مسلط شده باشد.
- نظرتان راجع به سایر زبانها مانند Python برای تدریس درس مبانی چیست؟
به نظرم دانشجو باید با OOP آشنا شود تا از عهده مباحث Analyze،Design و Programming برآید. برای یادگیری OOP لازم است که دانشجو با زبانهای قبل از OOP آشنایی داشته باشد. گرچه Python هم زبان جدید و با ارزشی است، اما بنده به شدت زبان C را توصیه می کنم، چراکه زبان به شدت قدرتمندی است و به نظرم باید دانشجو آن را به خوبی فراگیرد.
- در درسهای برنامهنویسی دانشکدههای این دانشگاه، چه زبانهای برنامهنویسی آموزش داده می شود؟
در درس مبانی، C و Python و در درس پیشرفته، ++C و Java تدریس می شود. در پروژههای بقیه دروس مانند ساختمانداده و طراحیالگوریتم، انتخاب زبان به عهده خود دانشجو است.
- آیا هنوز زبان Pascal در درس مبانی تدریس می شود؟
خیر، از همین ترم به جای Pascal زبان Python تدریس می شود ولی تا سال پیش Pascal تدریس می شد.
- آیا در دروس مبانی و پیشرفته کمبودی در سیلابسهای درسی حس می کنید؟ آیا تدریس OOP در مبانی صحیح است؟
می دانیم هنوز بعضی از برنامهها و نرمافزارها بر پایه Procedural است، بنابراین اگر در مبانی اصول و تفکر برنامه نویسی Procedural تدریس شود، بهتر است. اگر این قسمت خوب یاد گرفته شود، دانشجو به راحتی می تواند تفاوت زبان Java با زبانهای قبل از OOP را متوجه شود.
- برخی معتقند که دانشگاه محل یادگیری تکنولوژی نیست و عدهای هم میگویند که باید دانشجو به اندازهای آموزش ببیند تا بعد از تحصیل به راحتی وارد صنعت شود. نظر شما در این باره چیست؟
متاسفانه سیستم آموزشی ما دارای ضعف است. زیرا از همان بدو ورود با دانشجو کاری می کنیم که نمره محور بالا میآید و به فکر یادگیری نیست. بنده همیشه در کلاس به دانشجویان گفتهام که دغدغه نمره را نداشته باشید. به شخصی که یاد بگیرد، نمره خواهم داد. اما واقعیت این است که مگر چیزی جز امتحان میان ترم و پایان ترم و چند تمرین برای ارزیابی داریم؟! از کجا بفهمیم که موضوع را یاد گرفته است؟ تجربه شخصی بنده این است که از سال آخر لیسانس درگیر کار شدم و تازه فهمیدم که دانشگاه برای ورود به کار و صنعت هیچ دانشی را به بنده یاد نداده است. حتی دانشگاه از بنده researcher هم نساخته که بتوانم برای مسالهام یک راه حل پیدا کنم و ارائه دهم، هرآنچه که از لحاظ فنی یاد گرفتهام از محل کارم بوده است. احساس می کنم دانشگاه در رسالت خودش به عنوان یاد دهنده موفق نیست. البته این موضوع در مقاطع ارشد و دکتری تفاوت می کند، چون در این مقاطع دانشگاه می تواند افراد Solution Provider تربیت کند. شرایط کنونی به این صورت است که افراد وارد محیط کار می شوند و بعد تکنولوژی خاصی را میآموزند و دانشگاه فقط می تواند اشخاصی را تربیت کند که ده تا پانزده درصد عمق دارند. مثلا دیدهام اشخاصی که فارغ التحصیل رشته مهندسی نرمافزار هم نیستند وارد بازار کار این رشته میشوند و افراد موفقی هم هستند و این نشان میدهد که حداقل ما نتوانستیم در فضای آموزشی دانشگاه رسالت خود را به درستی ایفا کنیم.
- نظر شما راجع به حوزه Open Source و فرهنگ استفاده از سیستمعامل و برنامههایش چیست؟ مثلا بعضی از اساتید آزمایشگاه سیستمعامل به خاطر بعضی از مسائل (مانند از بین رفتن Partition و…) سیستم عامل Linux را بر روی Virtual Machine نصب می کنند و ممکن است دانشجو فقط در قالب این یک واحد درسی با آن کار کند و بعضی اوقات این وسواس و یا دلهرهای که به دانشجو منتقل شده است باعث میشود حتی بر روی کامپیوتر شخصی خود نیز لینوکس را نصب نکند.
واقعیت این است که Open Source فضای وسیعی در اختیار ما قرار می دهد، البته به شرطی که درست معرفی شود. یادم می آید که به ما هم گفتند ممکن است هنگام نصب لینوکس Partition ها صدمه ببیند و البته ما هم نصب کردیم. حتی Boot سیستم عامل ویندوز هم دچار مشکل شد! ولی بعد از اینکه ترسمان ریخت، ماجرا تغییر یافت. معتقدم که اگر Open Source را به درستی نشناسیم و معرفی نکنیم، خیانت بزرگی کردهایم. مثلا در حوزه امنیت، خیلی از نرمافزارهایی که بنده استفاده می کنم، Open Source است. حداقل در حوزه پژوهشی که انجام می دهم اگر این نرم افزارها نبود، فاجعه بار میشد.
- در حیطه مهندسی نرم افزار چقدر دانشجو می تواند در دانشگاه با تکنولوژی Java (نه صرفا زبان برنامه نویسی Java) آشنا شود؟
متاسفانه ما به Java فقط به دید Programming Language نگاه می کنیم. بنده در درس سه واحدی Java میخواستم JUnit و بحث Build کردن پروژهها با ant و maven را بگویم. هم زمان زیادی نداشتم و هم مقاومت شدیدی از طرف دانشجویان شد. حتی خواستم ساختن فایل با پسوند jar را آموزش دهم. به دلیل اینکه متاسفانه دید نمره ای وجود داشت، به بنده میگفتند که jar فایل نه در امتحان میان ترم و پایان ترم میآید و نه در پروژه پایان ترم به دردمان میخورد! بنابراین جز کسانی که علاقمند Java هستند و به دنبال آن می روند، کسی نه به سراغ Hibernate و Spring می رود و نه به سراغ سایر تکنولوژیها. متاسفانه من دانشجو به این فکرم که این واحد درسی را بگیرم و آنرا بگذرانم. بنابراین خیلی هم دنبال مطالب جدید نیستم. در نتیجه وقتی در محیط کار میروم، تاسف میخورم که چرا مباحث مختلف را یاد نگرفتهام.
- به نظر شما اگر در این دروس Project Based باشیم، مشکل حل میشود؟ مثلا استاد تمام نمره را به پروژه پایان ترم بدهد.
متاسفانه در مقطع لیسانس فضایی از دید دانشجو شکل گرفته که تا مادامیکه استاد مطلبی را درس نداده، لزومی ندارد فراگرفته شود. حل این مشکل نیاز به همکاری همه دارد و البته زمان زیادی هم نیاز دارد.
- به نظر شما چه اشکالاتی در حوزه تکنولوژی Java در صنعت کشورمان وجود دارد؟
متاسفانه متخصصین این حوزه در کشور مانند سایر تکنولوژیهای برنامهنویسی مثل Net. زیاد نیستند، شاید یکی از دلایلش این است که کاری که Java برایمان انجام می دهد را به درستی نشناختیم. شاید صاحبان صنایع درباره Java دانش خاصی ندارند و باعث شده که در کشور، این تکنولوژی غریب افتاده وگرنه در اروپا و آمریکا بازار بسیار بزرگی در حوزه نرم افزار به Java اختصاص داده شده است. حتی در هند هم به همین صورت است.
- در صنعت کشورمان چقدر اعتماد و اطمینان به فضای Open Source وجود دارد؟
متاسفانه با مشکلاتی در این حوزه در صنعت مواجهیم. مثلا در پروژهای بر روی mail server کار می کردم. یکی از mail server های معروف open source نرم افزار postfix میباشد که در حقیقت یک mail transfer agent هست و به عنوان یک سرویس عمل میکند، با این امر مواجه شدم که اطمینانی به نرم افزار Open Source وجود ندارد. در کشور کلی هزینه و زمان صرف میکنیم که MTA ملی یا ایرانی تولید کنیم. چرا؟ چون هنوز اعتماد به نرم افزارهای Open source وجود ندارد. حتی اگر این گونه موارد را که مربوط به حوزه امنیت است قبول کنیم، باز در بحث های دیگر عدم اعتماد به open source به چشم می خورد. آمدیم و لینوکس را ملی کردیم، در صورتی که هیچ فعالیتی انجام نشده و صرفا یک پوسته فارسی برای آن تولید شده است. این هاست که باعث بدنامی open source می شود. این موارد است که همه فکر می کنند open source دست آویزی است برای کلاه برداری. متاسفانه به دلیل فقر علمی هنوز تفاوت بین open source و Free جانیفتاده است و بعضا تصور می شود که برنامه های Free لزوما Open Source هم هستند و برعکس.
- به نظر شما چشم انداز نرم افزارهای Open source و تکنولوژی Java چگونه است؟ حتی اخیرا گفته شده بود که زبان برنامه نویسی Scala همان Java آینده است.
رویکرد Java نشان می دهد که آینده از آنِ Open Source هاست. در مقاله ای می خواندم که شرکت HP ظرف دو ماه می تواند ساختار خود را Rearrange کند. به هر حال در دنیایی زندگی می کنیم که هر لحظه ممکن است نگرشها متفاوت شود و شرکتها برای اینکه زنده بمانند باید بتوانند به سرعت خود را با این شرایط وفق دهند. جدای از این بحثها، دنیای امروز دنیایی است که به سمت Open Source حرکت می کند و این رویکرد Java فعلا از بین نمیرود. فقط برای اینکه از قافله عقب نمانیم باید تلاش کنیم و نیروهای متخصصی تربیت کنیم که به ارتقای فضای جاوایی کشور کمک کنند.
- آیا در این راستا دانشگاه هم می تواند کمک کند؟ چراکه متاسفانه تعامل دانشگاه با صنعت ضعیف است.
دانشگاه به شدت می تواند در این حوزه کمک کند. حداقل افراد آگاه می توانند تلنگر بزنند. به عنوان مثال بنده به عنوان مدرس که اهمیت maven را می دانم، باید به دانشجویان اطلاع دهم. وقتی می دانم که در صورت مراجعه شخص برای کار به مراکز و شرکتها، یکی از فاکتورهای مهم maven است، چرا به دانشجو معرفی نکنم؟ چرا درباره EJB به دانشجو چیزی نگویم؟ حداقل بایستی توضیحاتی درباره RMI به دانشجو بدهم. درباره مسائل client-server مطالبی بگویم و حداقل بخشهای Advanced Java را معرفی کنم. به هر حال دانشجو در این فضای نمره محور قرار دارد، ما می توانیم این را ابزاری قرار دهیم و بگوییم مثلا اگر شما طرز کار Spring را فهمیدید، نمرهای به شما داده میشود. چه اشکالی دارد کسی که Database درس میدهد، به دانشجویان اجبار کند که با یکی از Framework های این حوزه مثل Hibernate کار کند. حداقل شخص عقب نمینماند و میتواند چرخ این صنعت را بچرخاند. البته شرایط در آمریکا هم همین طور است. در آنجا دانشجو بعد از چهار سال تحصیل کارشناسی نرمافزار در دانشگاه، یکی دو سال دورههای فشرده را میگذراند و بعد از آن، شخص وارد صنعت می شود. تفاوت اینجاست که در ایران زیاد روی موضوع تمرکز وجود ندارد. مثلا فارغ التحصیل این رشته به دلیل اینکه بیکار نماند مجبور است امروز در یک شرکت جاوایی و فردا در شرکتی که Net. کار می کند، باشد. با این وضعیت سرمایهها را از دست می دهیم.
- نظر شما راجع به سایر تکنولوژی ها مانند Net. و PHP و … نسبت به Java چیست؟ مثلا شاید شخصی بگوید که در حوزه کاری بنده PHP خیلی خوب جواب می دهد.
باید در ابتدا ببینیم برای صورت مساله ما کدام راه حل مناسب تر است؟ هر تکنولوژی کاربرد خاص خود را دارد و باید در جای خود استفاده شود، اما متاسفانه به دلیل عدم شناخت Java ، استفاده از این تکنولوژی در صنعت کشور کمرنگ شده است. اگر شما در صنعت، بستر Java را راه انداری کنید و چند سرویس بر پایه Java ارائه دهید، کارفرما هم علاقمند به استفاده از تکنولوژی Java می شود. چه بهتر که از ابتدا از سرویسهای بر پایه Java استفاده کنیم تا در صورت گسترده شدن پروژه، اختیارات بیشتری داشته باشیم. چون در نهایت مباحثی همچون Flexibility، Safety و Security در تکنولوژی Java خیلی بیشتر و بهینه تر نسبت به سایر تکنولوژیهاست.
- پیشنهاد شما به افراد تازه کار برای ورود به این حوزه چیست؟ به عنوان مثال فرض کنید میخواهید دانشجویی را که به این مباحث علاقمند است راهنمایی کنید.
توصیه بنده به افراد مطالعه است که کورکورانه یک تکنولوژی را انتخاب نکنند. امکاناتی که یک تکنولوژی در اختیارشان قرار می دهد را کاملا مطالعه کنند. متاسفانه بیشتر مشکلات ما در حوزه نرم افزار این است که افراد این حوزه از کاربرد واقعی تکنولوژی که از آن طرفداری و یا با آن کار میکنند، بیاطلاع هستند. محدودیتها و ارزش افزودههای آن تکنولوژی چیست؟ لذا توصیه می کنم که به حدی مطالعه کنند که از راهی که انتخاب می کنند مطمئن باشند.
- بسيار عالی. از اين که وقت خودتان را در اختيار انجمن جاواکاپ قرار داديد، بسيار ممنونيم. در پايان هم اگر نظری درباره فعاليتهای انجمن جاواکاپ داريد لطفاً بفرماييد.
امیدوارم به رسالتی که دارید پایبند باشید و دچار حاشیه نشوید. چون متاسفانه بعضی از این انجمنها بعد از مدتی از مسیر اصلی خود خارج میشوند. اگر بر روی روابطمان کارنکنیم، اگر همدیگر را درست نشناسیم، اگر یک تیم نباشیم، شکست میخوریم. پیشنهاد می کنم که به هدف و رسالت خودتان پایبند بمانید، چراکه فضای خوبی است و این امکان وجود دارد که از افراد علاقمند به جاوا، نیروهای متخصصی برای آینده تربیت شوند. سعی کنید با سایر مراکز و شرکتهای جاوایی که شناخته شده هم هستند رابطه برقرار کنید، در این صورت همدلی ایجاد میشود. اینکه میتوانید به عنوان یک خادم، نیروهای جاوایی معرفی کنید و افراد را به سمت جاوا تشویق کنید، بدون تردید کمک زیادی به این حوزه میکنید.
مطالب مشابه: مصاحبه با سرکار خانم شراره علیپور
بسیار لذت بردیم، امیدواریم مصاحبه های دیگر از سایر اساتید جاوا یا سوالات دیگری از ایشان هم درسایت مطرح شود. ممنون.
با سلام خدمت شما، مصاحبه پربار و جالبی بود.
با تشکر فراوان.
سلام
خیلی خوب بود استفاده کردیم
با سلام و خسته نباشید . جالب بود .
می توان با زبان اسمبلی هم OOP کار کرد ولی فقط به خاطر تفکرات OOP که بعد از JAVA برایمان مسجل شده وگرنه ذاتا امکان پذیر نیست
با دکتر احمد زائری استاد برنامه نویسی پیشرفته 2 از دانشگاه اصفهان هم محاسبه کنید
خدا کنه اساتید کمی به این صرافت بیافتند که زبانهایی را در دانشگاه تدریس کنند که در بازار خواهان دارد.
واقعا مصاحبه پرباری بود.