خیلی سخته توی جمعی زندگی بکنی که شناخت درستی از رشتهی تحصیلی و حوزهی حرفهایت ندارن و تصور و انتظاراتشون ازت اشتباهه و گاهی اوقات حتی نمیخوان درستش رو هم بدونن و با همون تصور غلط نصیحتت هم میکنن و کلی قضاوت میشی.
ولی از اون بدتر اینه که خودت رشتهات رو به خوبی نشناسی و روزی بفهمی وارد چه رشتهای شدی و بدتر بفهمی بهش علاقه نداری که دیگه سال دوم سوم دانشگاهی. این اتفاق هرسال برای خیلی از دانشجوهای این رشته میفته!
به طور خاص اگر بخوام این موضوع رو روی رشتهی خودم (یعنی مهندسی کامپیوتر) بررسی کنم با چند تا نگرش زیر رو به رو هستیم:
منظور از کامپیوتری کسیه که خدمات فروش، نصب، راهاندازی و تا حدی تعمیرات مربوط به دستگاههای کامپیوتری و موبایل انجام میده و شغل شریفی هم هست اگر همراه با گرونفروشی و خالیبندی برای گرفتن پول بیشتر نباشه. قصد جسارت به کسی رو ندارم.
مسئول آی تی یعنی کسی که مدیر سیستم، مدیر شبکه، نصاب، تعمیرکار، تنظیمکار و فرشتهی نجات کارمندان شرکته و هر چیزی هم که خراب بشه تقصیر اونه
برنامهنویس یعنی کسی که فلوچارت و برنامهنویسی و کار با بانکهای اطلاعاتی بلده و میتونه یک سری کارها رو توی سازمان/شرکت اتوماسیون کنه؛ یه برنامه بنویسه که خودش یه سری کارها رو انجام بده و کار کارمندها راحتتر بشه. اگر مشکلی پیش اومد قطعا خیلی بیسواده.
در هر حال از این نگرش این رو نتیجه میگیریم که اصلا مهندسی کامپیوتر یه رشتهی صنعتی نیست و با یه نفر متخصص که درسش رو توی یه دانشگاه دولتی با معدل بالا خونده باشه و قبلا شاگرد یه متخصص دیگه بوده باشه میشه کل قضیه رو جمع کرد و نیازهای سازمان رو حل کرد.
خب از این جا به بعد نگرشها بیشتر متعلق به خود بچههای کامپیوتر یا فعالهای این حوزه است.
مملکت ما الان مهندس و پژوهشگر و فلان و فلان نمیخواد. بیشتر نیروی کار چابک و همهچیبلد میخواد.
نگرش نمایشی یا خودخفنپندارانه: این دسته همونان که میان رشتهی کامپیوتر که هکر بشن. یه صحنهی کدری تو ذهنم میاد که واقعا یادم نیست خودم دیده بودم یا کسی برام تعریف کرده بود. اون هم این بود که توی مدرسه مثلا کامپیوتر به پروژکتور وصل نمیشده، پسره اومده cmd باز کرده توش یه ping گرفته که بگه من خیلی خفنم. اینا همونان که بدون این که چیزی راجع به شبکه و سیستم عامل و خیلی چیزای دیگه بدونن میرن کالی نصب میکنن و کلاس «نفوذ و امنیت شبکه» ثبت نام میکنن. چار تا کار باحال حفظ میکنن که جلوی بقیه انجام بدن بدون این که بدونن پشتش چه خبره. بعضیاشون بعد از یه مدت از خر شیطون میان پایین بعضیاشون هم جدی ادامهاش میدن و بعد از این که سواد کافی بهدست آوردن متخصصهای خوبی میشن. اما من بیشتر نگران اونایی هستم که میفهمن کلا با تفکر اشتباهی وارد داستان شدن. به این دسته ولی پیشنهاد میکنم حالا که تا این جا اومدن خیز بردارن برای مدیریت سیستم (System Administration) و از خودشون یه قهرمان بسازن.
نگرش مسابقهای و نیمهآکادمیک: این خودش یه مقالهی طولانی میخواد که من واقعا صلاحیت نوشتنش رو ندارم ولی ارتباط تنگاتنگی با بچههای سمپادی، المپیادیها و بچههای رباتیک داره. در این مورد خاص اگر هم چیزی بخوام بنویسم بعدا راجع به انجمنهای علمی مینویسم.
نگرش کهنهبرنامهنویسها: نوبت میرسه به استادامون! این نگرش مربوط میشه به مهندسیهای قدیمی کامپیوتر؛ اونایی که شاید حتی قبل از این که رشتهای به اسم مهندسی کامپیوتر به وجود بیاد، با تحصیل توی رشتههایی مثل آمار یا ریاضیات وارد این حیطه شدن و خالق سیستمهای انفورماتیک نسل قبل بودن که الان ما بهشون میگیم legacy و بعضا استاد دانشگاه شدن که الان دیگه تقریبا وارد دوران بازنشستگی شدن. این دسته از متخصصین ریاضتها کشیدن تا مهندس شدن. خیلی چیزها رو خودشون خوندن بدون هیچ فیلم آموزشی و کتاب درست حسابی. خیلی از سیستمها رو خط به خط خودشون کد کردن و هیچ لایبرری آمادهای نبوده که کارشون رو راحتتر کنه و نهایتا نمیتونن قبول کنن که الان خیلی از کارها دیگه به دشواری گذشته نیست و ابزارها و زبانهای برنامهنویسی راحت رو نمیتونن بپذیرن. شاید هیچ زبانی به جز Pascal، Fortran، C، BASIC، COBOL و خود حضرت اسمبلی رو زبان نمیدونن و اکثرا مخالف سرسخت زبانهایی مثل پایتون هستن و به هیچ وجه حاضر نمیشن حتی امتحانش کنن و از نظرشون کسی که از این ابزارها استفاده میکنه مهندس نیست! جالبه بگم دیده شده وقتی این گروه از افراد به ناچار برای اولین بار با پایتون کد میزنن هر روز بیشتر از روز قبل عاشقش میشن ولی تا مدتها با یه جور واکنش دفاعی از نوع فرافکنی با خودشون درگیرن تا بالاخره حقیقت رو قبول میکنن.
افراد با این نگرش نمیدونن که دیگه الان اگر هم قرار باشه ریاضت بکشیم، اون ریاضت توی پیادهسازی برنامه و سختی کد کردنش نیست و توی کانسپتهای دیگه است!
توجه: چیزی که پایینتر قراره بخونین لزوما دقت علمی و تاریخی نداره و فقط قراره یه ایدهی کلی رو به شما بده تا به نتیجهگیری برسه. قطعا اشکالات زیادی در تقدم و تقدم موضوعات وجود داره اما نهایتا تاثیر زیادی در نتیجهگیری مورد نظر نخواهد داشت.
نیمنگاهی به نگرش نزدیک به حقیقت:
بعد از انقلاب صنعتی، انقلابی که اوج درخشش مهندسی مکانیک به عنوان کلیدیترین حوزهی مهندسی بود، لازم شد عدهای از مهندسین برای مدیریت تعلیم ببینن تا بتونن کارخونهها رو به سامانهای از انسانها و ماشینها تبدیل کنن که طبق یک سری قوانین، استانداردها و «فرآیندهای» مشخص فعالیت کنن و به این ترتیب بشه زیر نظرشون گرفت و بهبودشون داد. این جا بود که مهندسی صنایع مطرح شد. این اصول و نظاممندسازی وارد سایر رشتههای مهندسی شد و حوزههای تحقیقاتی بسیاری رو ایجاد کرد که خیلی زود به مطالعات بین رشتهای بدل شد.
از یه طرف مدتها بود ریاضیدانها روی مفاهیم جدیدی کار میکردن که اگه میشد به شکلی پیادهسازی بشه اون وقت میشد یک سری کارها رو به صورت خودکار انجام بشه. این منجر به ساخت اولین خودکارهها (یا همون automatonها که جمعش میشه automata) شد. اولین خودکارهها به صورت مکانیکی پیاده شدن. بعد خودکارههای الکترومکانیکی بوجود اومدن. کم کم بار اصلی پیادهسازی این خودکارهها روی دوش مهندسهای برق قرار گرفت و با اختراع ترانزیستور و پدید اومدن علم الکترونیک، خودکارههای الکترونیکی پدید اومدن که من الان با یکیشون دارم این مطلب رو مینویسم. خودکارهها در حقیقت پیادهسازی نظریهی محاسبات «Computation Theory» هستند که فک کنم بگیم نظریهی رایانش بهتر باشه.
خلاصه چیزی که بدست اومد یک ماشین بود که میتونست محاسبه انجام بده و از یه جا به بعد مفهوم برنامهنویسی وارد قضیه شد و عصای دست دانشمندها و مهندسین توی محاسباتشون شد و بعد کار با دادهها، ذخیره و بازیابی اطلاعات، آمارگیری و گزارشگیری چاشنی ماجرا شد. خب در این مرحله مهندس یه طرف مهندس برق داشتیم که درگیر «صنعت» ساخت این ماشینها و تعمیر و نگهداریشون میشد و از طرف دیگه «دانشمندی» که برنامهنویسی بلده و میتونه از دستگاه چیزی که میخواد رو استخراج کنه یا یک «اپراتور». طبیعتا در این دوره تعداد ماشینهای محاسبهگر (کامپیوتر) که تولید میشدن خیلی محدود بود و نرمافزار چیز پیچیدهای نبود؛ بخشیش که برای عملکرد خود ماشین بود که برعهدهی تولید کننده بود و باقی ماجرا هم اگر نیاز به برنامهنویسی (یا بهتر بگم برنامهریزی) میداشت افرادی بودن که توی دپارتمان کامپیوتر شرکت/موسسهی خریدار کار رو انجام میدادن.
تا مدتها حوزهی کامپیوتر و فناوری اطلاعات یک حوزهی کمکی بود و بدون حضور رشتههای دیگه معنایی نداشت. اما کم کم با گستردهتر شدن تولید کامپیوتر، گستردهتر شدن شبکههای کامپیوتری و مطرح شدن نرمافزارهای کاربردی و اتوماسیونها از پیشآمادهی سازمانی، لازم شد افرادی به طور خاص برای توسعه کامپیوترها تحصیل کنن و از اون جا رشتهها یا گرایشهای مربوط به کامپیوتر در دنیا مطرح شد. تولید انبوه کامپیوترهای شخصی و صنعتی، تولید و پشتیبانی از نرمافزارهایی با تعداد کاربر بالا و گسترده (مثل سیستمهای عامل و بازیهای رایانهای) و همینطور تولید نرمافزارهای اختصاصی و سفارشی، همه و همه باعث شد که مهندسی کامپیوتر به عنوان یک حوزهی صنعتی وارد بازی بشه و همون اتفاقی که بعد از انقلاب صنعتی در مورد صنایع مکانیکی افتاد برای صنایع انفورماتیکی رخ بده. از این جا به بعد شاهد ترکیبهای مختلف مهندسی کامپیوتر با رشتههای دیگه هستیم.
در حال حاضر مهندسی کامپیوتر و فناوری اطلاعات نه تنها هیچی از یک رشتهی صنعتی کم نداره بلکه خودش به تنهایی روز به روز مفاهیم جدیدی رو وارد مهندسی صنایع و مدیریت صنعتی میکنه که در حوزههای دیگه استفاده میشن
اگرچه برای ادعایی که بالا کردم نیاز به استدلال هست ولی برای مثال اگه بخوایم فقط و فقط صنعت نرمافزار رو در نظر بگیریم، این صنعت خودش به تنهایی به پیچیدگی بیسابقهای رسیده که باز لازمه مهندسان صنایع (این بار با گرایش فناوری اطلاعات و نه مهندسی مکانیک) وارد ماجرا بشن و بهش نظام ببخشن و البته این اتفاق در تیمها و شرکتهای بزرگ تولیدکنندهی نرمافزار افتاده. به طوری که وظایف متعددی در این صنعت تعریف میشه و دیسیپلینهایی که برای یک خط تولید در یک کارخونه مطرح میشه برای نرمافزار هم به شکل یک سری متدلوژی مطرح میشه. اصلا چنین فکری راجع بهش میکردین؟
یه مهندس نرمافزار به طور خاص میتونه سراغ هر کدوم از این کارها بره:
صنعت همیشه نیاز به سرعت بیشتر و اتوماسیون داره. کامپیوتر به صنایع مختلف کمک کرد که خیلی از کارهاشون رو خیلی راحت به کمک یک ماشین قابل برنامهریزی انجام بدن. همین خدمت رو هم به ادارات و سازمانها کرد. اما اگر خود این صنعت برای کار خودش نیاز به اتوماسیون داشته باشه چی؟ اخیرا شاهد اتفاقات جالبی تو صنعت نرمافزار هستیم! به طور اصولی یک نرمافزار از زمان تحلیل تا تحویل باید مراحل مختلفی رو طی کنه. در ۲۰ ساله گذشته که مفهوم مهندسی نرمافزار مطرح شده، نرمافزارهای مختلفی با عنوان CASE (به معنی مهندسی نرمافزار به کمک کامپیوتر) ایجاد شدن که گذار از هر فاز به فاز بعدی رو راحتتر میکنن. مثلا نتایج تحلیل تحلیلگران راحتتر و سریعتر به یه چیز قابل استفاده برای طراح نرمافزار تبدیل میشه و حاصل زحمات طراح به سادگی تبدیل به زیربنایی برای کار توسعهدهندهی نرمافزار میشه و به همین صورت ادامه پیدا میکنه. چند سالیه که تست نرمافزار خیلی بیشتر از گذشته اهمیت پیدا کرده و بر این اساس ابزارها، متدلوژیها و استانداردهای جدیدی وارد بازی شدن و منطقا نیازهای جدیدی هم وارد صحنه شده. نیاز به یک فرآیند بههمپیوسته، سریع و مستمر برای پیمایش مراحل «پیادهسازی نسخهی جدید»، «آزمایش» و اگه آزمایش جوابش مثبت بود «استقرار نسخهی جدید» در تمام جاهایی که باید این اتفاق بیفته. اینجا بود که نقش جدیدی آفریده شد به اسم DevOps. این دسته از متخصصین معمولا یا توسعهدهندههایی بودن که به نقش آفرینی در عملیات مستقرسازی علاقمند شدن یا SysAdminهایی بودن که به برنامهنویسی و scripting علاقه داشتن و وارد این حوزه شدن.
اگه تا این جا مطالعه کردین (که خودم تعجب میکنم اگه کرده باشین) حتما نظرتون رو بنویسین. اگه دوستش داشتین منتشرش کنین.
اگه دانشجوی کامپیوتر هستی اینو برای تو نوشتم: