چرا کد زدن دیگه کافی نیست؟! (قسمت ششم)

مثل همیشه اولش بگم که برای دسترسی به قسمتهای قبلی می‌تونید از انتهای قسمت اول شروع کنید.قسمت ششم) شما دقیقا چی کاره‌اید؟!بیایید فرض کنیم شما به یه مشکل حقوقی خوردین و نیازمند کمک یه وکیل هستید. آیا به نظرتون تنها «وکیل بودن» یه نفر کافیه برای اینکه بتونه به شما کمک کنه؟ احتمالا نه. چون وکالت هم خودش به زیرمجموعه‌های زیادی تقسیم میشه که هر کدوم تسلط و تخصص خودش رو می‌طلبه. مثلا وکیلی که تو پرونده‌های جنایی کار می‌کنه احتمالا نمی‌تونه کمک زیادی تو پرونده طلاق به شما بکنه و وکیلی که در زمینه مسائل حقوقی شرکتها کار می‌کنه احتمالا آدم مناسبی برای بررسی پرونده مهاجرت شما نیست. در واقع بیشتر وکیل‌های حرفه‌ای از پذیرفتن پرونده‌هایی خارج از دایره تخصصی خودشون شونه خالی می‌کنند چون محدوده تخصص خودشون رو می‌شناسند.همین موضوع در مورد برنامه‌نویس‌ها هم صادقه. برای اینکه یه برنامه‌نویس حرفه‌ای باشید باید دایره تخصصی خودتون رو داشته باشید. برنامه‌نویسی هم مثل وکالت بسیار گسترده است و یه نفر نمی‌تونه توی همه حوزه‌ها حرفی برای گفتن داشته باشه.منظور از تخصص، زبانی که باهاش کد می‌زنید نیست!اشتباه رایجی که در دنیای برنامه‌نویسی وجود داره اینه که وقتی از یه برنامه‌نویس می‌پرسید که تخصصش چیه خیلی رایجه که جواب بده: «من برنامه‌نویس سی شارپ هستم» یا «من برنامه‌نویس جاوا هستم» اما باید بدونید که منظور از تخصص، زبانی که باهاش کد می‌زنید نیست! بلکه منظور از تخصص، (دقیقا مثل مورد یک وکیل) طیف مسائلیه که شما قادر به حلش هستید.زبان برنامه‌نویسی چیزی در مورد نوع محصولی که شما تولید می‌کنید نمی‌گه. زبان برنامه‌نویسی نمیگه شما چه توانایی‌هایی دارید و دقیقا چه مشکلی رو می‌تونید حل کنید. زبان فقط اسم ابزاری رو که شما بلدید ازش استفاده کنید اعلام می‌کنه.من نمی‌خوام با انتخاب یک تخصص، به بقیه فرصت‌هام نه بگم!شما ممکنه از اینکه بخواهید خیلی تخصصی روی یه موضوع کار کنید بترسید. چون فکر می‌کنید که با زیادی عمیق شدن در یک حوزه ممکنه فرصت‌های کاری که در سایر حوزه‌ها براتون پیش میاد رو از دست بدید. این ترس تا حدی درسته که متخصص شدن در یک حوزه شما رو از فرصت حضور در حوزه‌های دیگه دور می‌کنه اما از طرف دیگه، فرصت‌های خیلی زیادی هم براتون ایجاد می‌کنه که در صورت متخصص نبودن، در دسترس شما قرار نمی‌گرفتند. باز هم وکیل‌ها رو مثال می‌زنیم. اگه شما به یه مشکل حقوقی برخورد کنید چقدر احتمال داره به یه وکیل که تخصصی کار نمی‌کنه و همه پرونده‌ها رو قبول می‌کنه مراجعه کنید؟! آیا ترجیح نمی‌دید که به وکیلی که به شکل تخصصی سالها روی مسائلی مشابه مسئله شما کار کرده مراجعه کنید؟همه چیز دان بودن، اندازه استخر مشتریانتون رو بزرگتر می‌کنه اما عمقش رو کم می‌کنه! با متخصص شدن، شما تعداد مشتریان بالقو‌ه‌تون رو کم می‌کنید اما در عوض به مهره جذاب‌تری برای مشتریانی که مشکل‌شون در حوزه تخصص شماست تبدیل میشید که حاضرند پول بیشتری برای شما بدن و هزینه جایگزینی شما براشون بیشتر از زمانیه که از یه همه چیز دان کمک می‌گیرند.خب این تخصص که میگی اصلا چی هست؟!اگه زبانی که باهاش کد می‌زنیم تخصص ما محسوب نمیشه، پس چی تخصص محسوب میشه؟ جواب این سوال اینه که: «بستگی داره!» بستگی به هدف شما و همینطور بزرگی بازار شغلی در محل زندگی شما.بذارید براتون یه مثال بزنم. اگه شما برنامه‌نویسی باشید که به شکل تخصصی رو برنامه‌نویسی برای چاپگرها کار کرده باشید و دنبال کار باشید به نظرتون چند تا فرصت شغلی با این عنوان می‌تونید پیدا کنید؟ اگه دایره جستجوی شما کل دنیا باشه خب طبیعتا شرکتهای زیادی هستید که دارند توی این حوزه کار می‌کنند و شما احتمالا بتونید بین اونها یکی رو پیدا کنید. اگه توی کل کشور دنبال این شغل باشید هم احتمال داره چند تایی پیدا کنید اما اگه اصرار داشته باشید که فقط توی شهر خودتون کار کنید چی؟ به نظرتون چند تا فرصت شغلی برای برنامه‌نویس متخصص چاپگرها وجود داره؟ داشتن چنین تخصصی شما رو به یه مهره ارزشمند برای شرکتهایی که توی این حوزه کار می‌کنند تبدیل می‌کنه چون تعداد برنامه‌نویس‌های متخصص چاپگر خیلی محدوده اما از طرف دیگه تعداد فرصت‌های شغلی شما رو هم به شدت کاهش می‌ده. بنابراین جواب این سوال بستگی به بزرگی بازار کاری داره که دارید توش جستجو می‌کنید. شما باید عنوان تخصص‌تون رو به اندازه بزرگی بازار کارتون انتخاب کنید. قانون کلی اینه:هر چه در یک حوزه خاص عمیق‌تر بشید، تنوع فرصت‌های شغلی‌تون کمتر میشه اما در عوض احتمال اینکه اون فرصت‌های محدود رو بین همه رقبا، شما به دست بیارید بیشتر میشه.فرض کنیم که شما یه برنامه‌نویس جاوا هستید که اصرار دارید توی شهر محل زندگی‌تون کار پیدا کنید. خب فرصت‌های شغلی برای یه برنامه‌نویس جاوا معمولا زیاده. مثلا فرض کنیم که ۵۰۰ تا فرصت شغلی جاوا وجود داره. اما شما همه اون ۵۰۰ تا شغل رو نمی‌خواهید. فقط یکی‌اش رو می‌خواهید. پس لازمه که دایره تخصص رو تنگ‌تر کنیم. فرض کنیم شما می‌خواهید به عنوان یه برنامه‌نویس وب (back-end) با زبان جاوا کار کنید. حالا یه قدم تخصصی‌تر شدیم و تعداد شغل‌ها مثلا از ۵۰۰ به ۲۵۰ شغل محدود شد. اما شما ۲۵۰ تا شغل نمی‌خواهید. یه دونه می‌خواهید. پس می‌تونید باز هم دایره تخصص رو کوچکتر کنید.در مرحله آخر فرض کنیم که از بین ۲۵۰ تا شغل موجود ۵۰ تاش مربوط به متخصصین جاوا برای وب است که دارند با فریم‌ورک Spring کار می‌کنند. پس شما می‌تونید تخصص‌تون رو برنامه‌نویس فریم ورک Spring جاوا اعلام کنید. حالا تعداد فرصت‌های شغلی اونقدر محدود شد که می‌تونید درخواست کار بدید. اما با این مزیت که اگه شما تخصص‌تون برنامه‌نویس فریم‌ورک Spring باشه، شانس خیلی بیشتری از کسانی که صرفا خودشون رو برنامه‌نویس جاوا معرفی می‌کنند، برای به دست آوردن اون شغل‌ها دارید.چه تخصص‌هایی برای برنامه‌نویس‌ها وجود داره؟بسته به اینکه چطور به مسئله نگاه کنیم، تقسیم‌بندی‌های مختلفی برای تخصص‌های برنامه‌نویسی وجود داره. بعضی از تقسیم‌بندی‌ها بر مبنای تکنولوژیه،‌ بعضی بر مبنای صنعت کاری و بعضی بر اساس پلتفرم.یکی از تقسیم‌بندی‌ها بر مبنای لایه‌ایه که شما در اون کد می‌زنید. لایه اول لایه کاربریه (‌user interface) که به برنامه‌نویس این لایه، برنامه‌نویس front-end گفته میشه. می‌تونید برنامه‌نویس لایه میانی (middle-ware) باشید و قوائد بیزینس مورد نظر رو به صورت کد در بیارید و یا برنامه‌نویس back-end باشید و در سطح دیتابیس کد بزنید. یا اینکه همه این تخصص‌ها رو با هم داشته باشید (full-stack) که در اون صورت باید یک stack خاص رو انتخاب کنید. مثلا stack دات نت که شامل (ASP.Net + زبان سی شارپ + SQL Server) میشه.یه راه دیگه تقسیم بندی بر اساس سیستم عامله. می‌تونید برنامه‌نویس ویندوز یا مک یا لینوکس باشید. یا مثلا برنامه‌نویس موبایل باشید و برای اندروید یا iOS اپلیکیشن بنویسید.یه حوزه مهم دیگه هم مربوط به برنامه‌نویسان سیستمهای سطح پایینه که برای میکروکنترلرها کد می‌زنند (یا اصطلاحا سیستمهای Embedded) که نیاز به تخصص بالایی داره.هر چند تقسیم‌بندی‌های دیگه‌ای هم وجود داره اما به شکل کلی فهرست زیر، متداول‌ترین تقسیم‌بندی حوزه نرم‌افزار در زمان ما رو نشون میده:برنامه‌نویس وب (front-end یا back-end یا full-stack)برنامه‌نویس میکروکنترلر یا سیستمهای داخلی (‌Embedded Systems)برنامه‌نویس یک سیستم عامل خاص (ویندوز، لینوکس، مک و ...)برنامه‌نویس موبایل (اندروید، iOS و ...)برنامه‌نویس یک Framework خاصبرنامه‌نویس سیستمی (سیستمهای تجاری یا صنعتی خاص)من چه تخصصی رو انتخاب کنم؟اگه هنوز در ابتدای راه هستید و هنوز تخصص خاصی رو انتخاب نکردید، شاید سردرگم شده باشید که باید توی چه حوزه‌ای کار کنید. جواب این سوال به خیلی چیزها بستگی داره که فقط خودتون می‌دونید اما شاید پرسیدن سوالات زیر از خودتون بتونه به شما در پیدا کردن جواب این سوال کمک کنه:چه مشکلی الان در شرکت شما وجود داره که بیشترین زحمت و هزینه رو برای شرکت شما به وجود آورده؟ آیا شما می‌تونید کسی باشید که اون مشکل رو حل می‌کنه؟آیا مسئله‌ای توی شرکت هست که هیچ‌کس دوست نداره حلش کنه یا کمبود آدم متخصص برای حلش وجود داره؟توی همایش‌ها و جلسه‌های فنی بیشتر در مورد چه موضوعاتی بحث میشه؟چه نوع سوالات فنی بیشتر از شما پرسیده میشه (حضوری یا در گروههای اینترنتی)؟نکته آخر:‌ اگه تخصصت رو دوست نداری عوضش کن!تخصص شما یه چیز ازلی ابدی نیست. اگه یک تخصص رو انتخاب کردید به این معنی نیست که باید تا آخر عمر کاری‌تون توی همون حوزه بمونید. با پیشرفت فناوری و تقاضای بازار، بسیاری از تخصص‌هایی که قبلا پرطرفدار بودند از بین میرن و تخصص‌های جدیدی به وجود میاد. بنابراین اصلا عجیب نیست اگه چند سال بعد بخواهید حوزه کاری‌تون رو عوض کنید.اگه مایل به خوندن ادامه این مجموعه هستید، من رو دنبال کنید. منتظر نظرات شما هستم.قسمت بعدی: شرکت کوچک، شرکت متوسط، یا شرکت بزرگ؟