نوشتن به جای مسکن

از لب شعرم بنوشی درد هستی را

از لب شعرم بنوشی درد هستی را

فکرهای روزانه، در باب زندگی، تکنولوژی و فلسفه های هست بودن!

آخرین مطالب

۳ مطلب با موضوع «برنامه نویسی» ثبت شده است

۲۳:۱۰۰۲
شهریور

سلام

امشب رو بی‌خیال دنیا، بریم سراغ مخدر‌ها؛ یکی از با مزه‌ترین و دوست داشتنی ترین این مخدر‌ها جاوااسکریپت هست. اگر برنامه جاوااسکریپت نوشته‌اید حتما از کنسول هم استفاده کردید. یکی از کارهایی که می‌تونید تو کروم و فایرفاکس (نسخه‌های به روز) انجام بدید لاگ کردن اطلاعات با استایل هست. مثلا اگر بخواهید متن خروجی با رنگ قرمز روی پس زمینه مشکی چاپ بشه بنویسید:

console.log("%c Hello World", "font-color:red; background-color:black")

در این قسمت از کد وجود c% که در رشته اصلی بولد شده و سپس یک رشته که حاوی استایل به صورت css هست باعث میشه تا متن به صورت رنگی چاپ بشه. همونطوری که خودتون هم حدس زدید حالا تنها بگذارید تخیلتون پرواز کنه تا یک کنسول دوست داشتنی رو تجربه کنید.

این هم از خروجی ‌اش تو کنسول کروم 36.0.1985.143:

پ.ن: این قابلیت می‌تونه کلی تو لاگ کردن اطلاعات مختلف و تمییز اون‌ها از هم کمک بکنه.

جواد محمدیان امیری
۲۲:۲۴۱۳
تیر

تا اونجا گفتم که به سال دوم رسیده بودم و به دریایی از کتاب های الکترونیکی دست پیدا کرده بودم. کتاب زیاد می‌خوندم اما بیشتر با این قصد که بتونم مشغول کار بشم. سال سوم اوضاع بهتر بود. درس مهندسی نرم‌افزار داشتیم و پایگاه داده‌ها و چندین درس جالب دیگه. شبکه‌های کامپیوتری داشتیم که استاد احسان ملکیان تدریس‌اش می‌کرد و یکی از لذت بخش ترین کلاس‌هایی که در عمرم رفته‌ام کلاس ایشون بوده. از درس مهندسی نرم‌افزار ۱ چندان سر در نیاوردم. مهندسی نرم‌افزار ۲ نسبتاً اون چیزی بود باید نرم‌افزار ۱ می‌بود یعنی تجزیه و تحلیل سیستم‌های نرم‌افزاری. بخش زیادی UML می‌خوندیم و روش طراحی شئ‌گرا. 

به سال چهارم رسیدم و درس زیبای امنیت اطلاعات دوباره با دکتر احسان ملکیان. اگرچه کلاس به دلیل شرایط ویژه‌اش در یک هفته از صبح تا شب برگزار شد و در روز پنج شنبه هم امتحانش رو دادیم اما باید بگم که واقعاً این کلاس حتی از شبکه‌های کامپیوتری هم بهتر بود. الگوریتم‌های رمز گذاری و رمزگشایی، DES،‌ AES،‌ روش ها متقارن و نامتقارن،‌ گواهی دیجیتال، امضای دیجیتال اون چیزی بود که ملکیان با همه جزییاتش می‌دونست و با همه توانش درس می‌داد. اونقدر این درس برام لذت بخش بود و اونقدر ملکیان استاد دوست داشتنی و نازینی بود که واقعا تصمیم گرفته بودم ادامه تحصیلم در رشته امنیت باشه. درس‌های سال آخر بیشتر اختیاری بودند: امنیت داد‌ها، داده کاوی و چند تا درس دیگه که اصلا یادم نمی‌آد چی بودند؛ شاید کامپایلر و این‌ها. 

بر خلاف علاقه ای که به امنیت داشتم، پایان نامه کارشناسی‌ام درباره تست نرم‌افزار بود. بحث جالبی بود و من فکر می‌کردم که این دیگه خیلی مهندسیِ. روی پایان‌نامه نسبتا خیلی کار کردم اما در عمل پایان‌نامه من ترجمه و چکیده چندین کتاب Software Testing بود. با این اوصاف اما استاد راهنمای من خیلی استقبال کرد از اینکه یک نفر واقعا روی موضوعی کار کرده که به مهندسی نرم‌افزار مربوط می‌شه و نه به علوم کامپیوتر.

درست تابستون سال آخر مشغول به کار شدم. برنامه نویس جاوا و اوراکل شدم و سیستم‌های ERP می‌نوشتیم.

شرکت بد نبود، بچه‌های شرکت همه خوب بودند اما ما همیشه مشکل داشتیم. همیشه مشتری ناراضی داشتیم. مدیر پروژه من یکبار من رو مخاطب قرار داد و به من گفت “اصلاً می‌دونی من فکر می‌کنم کلا مهندسی نرم‌افزار چیز مزخرفیه.” با تعجب پرسیدم چطور؟ ادامه داد: “اگر کسی برنامه نویس باشه که با خوندن کد میتونه بفهمه برنامه قراره چی‌کار کنه دیگه من نمی‌فهمم که کامنت نوشتن چه سودی داره!” برای من چنین حرفی عجیب بود چون فکر نمی‌کردم که مهندسی نرم‌افزار تنها بخواد بگه که روی کد کامنت بگذارید و تمام. البته خودم فکر می‌کردم که مهندسی نرم افزار یعنی طراحی و معماری سیستم که خیلی مهم هست. اون وقت‌ها کمی ذهنیتم نسبت به رشته‌ای که می‌خوندم تغییر کرده بود. Agile رو می‌شناختم، می‌دونستم People ware کتاب مهمی در مهندسی نرم‌افزار هست اما نخونده بودمش و نسبتا آشنایی با بحث‌های غیر فنی مهندسی نرم‌افزار داشتم. منظورم از بحث‌های غیر فنی اونجایی هست که بحث الزاماً بحث الگوریتم و ساختمان داده‌ها و برنامه نویسی و طراحی و این جور امور نیست.

با خودم فکر می‌کردم که  این بحث‌های مدیریت پروژه‌ای و اینکه extreme programming کار کنیم خیلی علم نیست، فکر می‌کردم علم باید توش ریاضی داشته باشه، باید ساختار‌های پیچیده دیتا بحث بشه و قس علی اینجور چیزا. علم باید هوش مصنوعی باشه، کامپایلر باشه داده کاوی باشه و یا نهایاتا باید software testing باشه یا معماری، UML و این جور چیزا.

شرایط کاری خیلی هم جالب نبود. با اینکه در عمل من از نظر به روز بودن علمم بیشتر از مدیر پروژه مون می‌دونستم و خیلی وقت‌های بحث‌های جدیدی مطرح می‌کردم که می‌تونست کلی در انجام کارها و تولید نرم‌افزار با کیفیت کمکمون کنه اما کسی اهمیتی نمی‌داد. یادمه یک بار برای اولین بار تو شرکت ایده اینکه برای داشتن کد بهتر به unit testing رو بیاریم رو مطرح کردم. اما تنها اتفاقی که افتاد این بود که یک سمینار فسقلی گذاشتم و بعدش تموم شد و رفت.

از اون شرکت امدم بیرون و رفتم جایی دیگه. در شرکت جدید با دات نت برنامه می‌نوشتیم و SQL Server. در این شرکت هم اوضاع بهتر از جای قبلی نبود و بی‌برنامگی موج می‌زد. مدیر پروژه‌ای داشتیم که اصالتاً سوئیسی بود و به ما می‌گفت که وقتی برنامه می‌نویسید یا کد شخص دیگه ای رو تست می‌کنید بعدش اگر اشکالی در برنامه وجود داشته باشه مقصر شما هستید! سرتون رو درد نیارم. اونجا اصلا نتونستم کار کنم و تصمیم گرفتم برای ادامه تحصیل به داشنگاهی برم که با گرفتن مدرک دیگه هر کسی نتونه به من بگه که چه کاری بکنم و چه کاری نکنم.

این شد که دیگه مشغول کار نشدم و به شدت رو آوردم به مطالعه زبان برای امتحان تافل. یه مدتی برای تافل خوندم و کلی دانشگاه رو بالا و پایین کردم. بین اینکه مهندسی نرم‌افزار بخونم یا علوم کامپیوتر مونده بودم اما ته دلم ترجیح می‌دادم نرم‌افزار بخونم.  یکی از دانشگاه‌هایی که براش اقدام کردم و خیلی دوست داشتم تا بتونم ازش پذیرش بگیرم و تونستم، موسسه تکنولوژی بلکینگ در سوئد بود که سابقه خیلی خوبی در مهندسی نرم‌افزار داشت.

سرفصل درس‌هاش رو از سایت دانشگاه دانلود کردم و بی‌صبرانه منتظر آغاز شدن درس‌ها بودم. چه سرفصل خوبی: مدیریت پروژه‌های نرم‌افزاری، معماری نرم‌افزار و کیفیت، مهندسی نیاز سنجی، متریک‌های نرم‌افزار، مدیریت کیفیت نرم‌افزار و چندین درس جالب و دوست داشتنی دیگه.

رفتم سوئد و درس‌ها شروع شد.

اولین درس مدیریت پروژه‌های نرم‌افزاری.

و این داستان ادامه دارد...

جواد محمدیان امیری
۲۱:۲۱۳۰
خرداد

پیش آگهی(precaution): این نوشته نظر شخصی اینجانب بوده و از نظر بیان نیز دارای مقادیر زیادی زبان غیر علمی است. بنابراین ادعای این را ندارم که مطالبش به صورت تمام وکمال با حقیقت رشته مهندسی نرم‌افزار و علوم کامپوتر همخوانی داشته باشد. همچنین برای نوشتن این مطلب من ترجیح داده‌ام تا وقایع تاریخی و تجربه شخصی خودم را بیان کنم که این موضوع باعث شده تا این مطلب داستان‌واره‌ای باشد که ممکن است برای کسانی که تنها به دنبال دانستن مطالب علمی هستند ملال آور باشد.

 

خیلی از ماها وقتی برای کنکور درس میخونیم دوست داریم دانشجوی کامپیوتر بشیم و به دنیای پر هیاهو و پر رمز و راز کامپیوتری ها وارد بشیم. برای خود من این دنیا با خرید کامپیوتر شخصی در سال دوم دبیرستان آغاز شد. پیش از رفتن به دانشگاه زبان برنامه نویسی C رو یاد گرفتم و با اون شروع به برنامه نویسی کردم. اون وقت ها تازه اینترنت داشت جای خودش رو با خط های ۳۳۶۰۰ بیتی با مودم های dial up  تو خونه های ایرانی ها باز میکرد. 

خوب یادم هست که چقدر شور و شوق یاد گرفتن هرچه بیشتر و بیشتر درباره کامپیوتر داشتم. همه خیالات و رویاهام پر بود از اینکه بالاخره یک روز من یک هکر معروف و بزرگ میشم و میتونم به هر کامپیوتری در جهان نفوذ کنم. از سمت دیگه خیلی دوست داشتم ویروس بنویسم و بدونم که ویروس های کامپیوتری چطور کار می‌کنند. یادم نمیره که یک شب برای خرید  کارت اینترنت به یک کافی نت رفته بودم؛ مسئول کافی نت داشت با یکی از دوستانش در مورد اینکه چطور یک شخص رو disconnect  کرده و از اینترنت یا چت روم -یادم نمی‌آد کدوم بود- انداخته بیرون صحبت می‌کرد. چقدر اون موقع دلم خواست تا من هم میتونستم همین کار رو بکنم و هروقت که خواستم بتونم آدم ها رو از چت روم بیرون کنم یا اینکه اینترنتشون رو قطع کنم.

این شور و شوق ادامه داشت و با خوندن من در مورد روش‌های crack کردن نرم‌افزار به اوج خودش رسید. بالاخره وقت کنکور کارشناسی رسید و من بعد از کنکور پاهام رو کردم تو یِ کفش که الا و لابد من میخوام کامپیوتر بخونم، حالا هر کجای جهان که باشه. اون وقت ها خیلی هم درگیر این موضوع بودم که نرم‌ا‌فزار بخونم یا سخت‌افزار. با بعضی دوستان که صحبت می‌کردم بحث به اینجا کشیده می‌شد که هرکس مهندسی سخت‌افزار بخونه مجبور می‌شه که نرم‌افزار هم بخونه اما کسی که مهندسی نرم‌افزار بخونه بی‌سواد بار می‌آد چون نیازی به خوندن سخت افزار نداره پس کلا سخت افزار بهتره.

خلاصه زد و من مهندسی نرم‌افزار قبول شدم. خیلی خوشحال بودم و خودم رو بالقوه یک هکر، یک ویروس نویس خوش جنس لبخند و یک آدم حرفه ای در دنیای کامپیوتر می‌دیدم. ترم اول که مبانی برنامه نویسی داشتیم و من با خوندن برنامه نویسی از زمان دبیرستان اصلا مشکلی تو اون درس نداشتم. درس‌های عمومی هم که مثل همه رشته‌ها فراوان بودند. فیزیک ۱، ریاضی ۱ و قِس علی هذا. اصلا حال و حوصله‌ی عمومی خوندن نداشتم چون فکر می‌کردم که من باید درباره هک کردن بخونم، درباره ویروس نوشتن و روش‌های نوشتن آنتی ویروس، باید در مورد ام پی ۳ بخونم و این فیزیک و ریاضی خیلی از فضای ذهنی من دور بود.

بی‌صبرانه منتظر ترم های بعدی بودم و اینکه ممکن هست چه روزهای خوبی در انتظار من باشه. ترم دو برنامه سازی پیشرفته با جاوا شروع شد. واقعا تا اواسط اردی‌بهشت اصلا نمی‌دونستم که ما داریم چی‌کار می‌کنیم، کجای برنامه هستیم، نمی‌فهمیدم اگر قراره Interface هم برای method پیاده سازی نداشته باشه و Abstract Class هم پیاده سازی method نداشته باشه، پس چرا دو تا مفهوم براشون داریم.

ترم دوم ریاضی گسسته هم داشتیم. خیلی ازش خوشم نمی‌اومد اما خب بد هم نبود. باز هم تو دلم به خودم وعده می‌دادم که :

دور گردون گر دو روزی بر مراد ما نرفت

دائماً یکسان نباشد حال دوران غم مخور

ترم دوم رسید به سوم. مدار الکتریکی؛ وای چه کابوسی! از این بدتر نمی‌شد. آخه من دانشجوی مهندسی نرم‌افزار بودم، این چه ربطی داشت به خوندن مدار الکتریکی؟ سرتون رو درد نیارم؛ ترم‌های بعدی هم رسید با مدار الکترونیکی، مدار منطقی، اسمبلی و چه و چه و چه. فهمیدم که خبری تو این درس‌ها نیست و من از این مزخرفات چیزی عایدم نمیشه. البته باید اذعان کنم حالا که دست کم یک دهه از اون وقت گذشته تمام اون درس‌ها رو بد نمی‌دونم اما واقعا فکر می‌کنم که بعضی‌هاش از جمله مدار الکتریکی و الکترونیکی به همراه آزمایشگاه‌هاش واقعاً هیچ دردی از مهندس نرم‌افزار دوا نمی‌کنه. این حس نسبت به درس‌ها باعث شد تا خودم شروع به مطالعه درباره کامپیوتر کنم. جاوا می‌خوندم و همچنین دات نت که چون تازه اومده بود خیلی اون وقت ها تو بورس بود. اون وقت‌ها یک منبع خوب برای یاد گرفتن ebook ها بودند و من که تازه تونسته بودم به سایت‌هایی دست پیدا کنم که توش پر بود از کتاب بال در آورده بودم و فکر می‌کردم حالا که از دانشگاه نمی‌تونم به جایی برسم باید با خوندن کتاب‌هایی که دانلود می‌کنم برای خودم آدمی بشم. از بحث های جالبی که در اون موقع نظر من رو به خودش جلب کرد بحث تولید نرم افزار به روش چابک یا agile بود.

من رو ببخشید که الان نمی‌تونم بحث رو تموم کنم سعی می‌کنم که کم کم مطالب رو تکمیل کنم تا تجربیاتم بتونه کمکی باشه برای کسانی که حالا در آستانه انتخاب رشته هستند و می‌خوان بدونند که آیا تحصیل در رشته مهندسی کامپیوتر گرایش نرم‌افزار همون چیزی هست که به دنبالش‌اند یا که نه.

جواد محمدیان امیری