تصویری از اعماق فضا

عکس بالا را به طور اتفاقی در ویکی پدیا دیدم.

فضاپیمای Voyager 2 این تصویر را در سال ۱۹۷۹ ثبت کرده است. نزدیک به ۳۷ سال پیش. چند لحظه به تصویر خیره ماندم. مشتری ۶۲۸,۷۳۰,۰۰۰ کیلومتر با زمین فاصله دارد. این تصویر را فضاپیمای Voyager 2 از قمر مشتری به نام IO ثبت کرده. تصور این که ساخته دست بشر تصویری از ۶۰۰ میلیون کیلومتر آن طرف تر ارسال کرده است هنوز نفسم را در سینه حبس می کند. مانند آن زمانی که تمام فکر و ذکرم سیارات منظومه شمسی بود!

سعی کنید تخیل خود را به کار وا دارید. خود را جای Voyager بگذارید. اگر آنجا بودید و با چشم خود شاهد این صحنه بودید، چه دنیایی را نظاره می کردید؟

لحظه ای به این فکر کردم که در کودکی و نوجوانی چقدر به فضا علاقه داشتم. دفترچه ای که خصوصیات تمام سیارات منظومه شمسی را در آن لیست کرده بودم را هنوز دارم!!

مهارت های غیر فنی یک برنامه نویس

به عنوان برنامه نویس همه ما به دنبال بهتر شدن در زمینه فنی هستیم. همه ما تصور می کنیم دانش فنی بالاتر مساوی است با درآمد بیشتر.

تا به حال افرادی را دیده اید که علارغم دانش فنی پایین تر از شما، موقعیت و پست بالاتری دارند؟ البته ممکن است خیلی از این افراد ارتباط هایی داشته باشند که شما ندارید! ولی در اصل قضیه به این اندازه سیاه نیست.

در حالت کلی موقعیت و درآمد بیشتر در برنامه نویسی الزاما از دانش فنی ناشی نمی شود. تقریبا در همه رشته های مهندسی علاوه بر دانش فنی که لازمه کار است، نیاز است فرد مهارت هایی داشته باشد. نمونه ای از این مهارت ها به صورت زیر می باشند:

۱) شرکت در جلسات و مدیریت آنها

شرکت در جلسات در اکثر مشاغل اجتناب ناپذیر است. اگر در خود مهارت موثر بودن در جلسا ت و صحبت کردن و به نتیجه رسیدن را نمی بینید حتما روی این موضوع کار کنید. چون به ناچار نیاز خواهد بود برای پیشرفت، در جلسات متعددی حضور پیدا کنید. مدیریت جلسه به این معنا است که در زمان معین به نتیجه ای هر چند کوچک برسید. تصمیمی اتخاذ کنید. موارد را بررسی کنید و …

۲) برقراری ارتباط

به دلیل زندگی در یک جامعه انسانی، هر فردی نیاز دارد که ارتباطات موثری با افراد پیرامون خود برقرار کند. در شغل برنامه نویسی از آن جایی که هدف اصلی معمولا رفع مشکل یک فرد یا سازمان است. و اصولا کار تیمی بالای را میطلبد، نیاز به برقراری ارتباطات موثر بیشتر احساس می شود. درست است که geek بودن در برنامه نویس ها صفت خوبی به نظر می رسد. ولی geek منزوی در دنیای امروز راه به جایی نخواهد برد!

۳) قابلیت تحلیل انتظار مشتریان

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

۴) کار تیمی فوق العاده

برنامه نویسی و تولید نرم افزار به شدت کار تیمی ای است. شما نمی توانید به صورت انفرادی پیشرفت کنید. پیشرفت شما در گرو مهارت شما در انجام تیمی کارهاست.

۵) آموزش

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

موارد فوق چند مورد از مهارت هایی بود که می توان برای یک برنامه نویس در نظر گرفت. موارد پیشنهادی دیگری را در نظر دارید؟

سلام docs.com

تا به حال به این موضوع فکر کرده اید که جایی در وب داشته باشید برای به اشتراک گذاشتن فایل ها  و اسنادی که مورد نیاز همکاران یا دیگر افراد باشد؟

چند روز پیش با docs.com آشنا شدم. وبسایتی از طرف مایکروسافت که در مجموعه office online وجود دارد. دقیقا برای همین کار!

برای اشتراک گذاری فایل ها معمولا اولین انتخاب افراد وبلاگ یا وبسایت هست. ولی اکثر افراد به امکانات نوشتاری یک وبسایت نیازی ندارند و بیشتر در جهت اشتراک گذاری فایل ها اقدام به این کار میکنند.

در این سرویس امکان embed کردن اسناد افیس و فایل های sway*  در دیگر وبسایت ها نیز وجود دارد. همچنین این قابلیت در سرویس وجود دارد که در کنار آپلود فایل ها از دستگاه شخصی از فایلهای موجود در onedrive مایکروسافت جهت اشتراک استفاده کنید. در کنار تمام امکاناتی که این سرویس در اختیار کاربران می گذارد امکان ایجاد صفحه اختصاصی شخصی نیز خیلی جذاب است.

هنگام اشتراک یک فایل می توانید سطوح دسترسی متفاوتی را برای آن در نظر بگیرید. همچنین امکان انتخاب یک License  نیز وجود دارد.

*Sway سرویس وب ایجاد نوع خاصی از presentation از طرف مایکروسافت است.

 

پرکاری و بدهی فنی

blog.castsoftware.com
technical-debt

چه برنامه نویسی یک برنامه نویس مفید است؟ ممکن است برنامه نویس های پرکاری را دیده باشید، که همیشه در حال جنب و جوش اند. همیشه در حال فعالیت. اما چه مقدار از این فعالیت مفید است؟ یکی از فاکتورهای مهم مفید بودن یک فعالیت برنامه نویسی مقدار بدهی فنی ای است که به جای می گذارد. در واقع هر چه مقدار بدهی فنی برنامه نویس بیشتر باشد، کار او کمتر مفید واقع خواهد شد.

بدهی فنی نمونه ها و مصادیق فراوانی دارد. در زیر چند مورد از انها را مشاهده می کنید.

  • کلاسهای (class) بسیار بزرگ با مسئولیت های فراوان. (بیشتر سیستم توسط چند کلاس بزرگ مدیریت می شوند)
  • یک stored procedure برای بسیاری از کارها.
  • Copy paste کردن کد! (فاجعه)
  • عدم استفاده مجدد مناسب از کلاسها
  • عدم refactor کردن کدها جهدت استفاده مجدد و نوشتن تکه کدهای جدید برای حل مسائل جدید
  • عدم بروزرسانی سیستم های مشتریان و نیاز به نگهداری سیستم های قدیمی در مشتریان خاص

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

آخرین نفر مسئول است

مسئله مهمتر و خطرناکتر در مورد بدهی فنی این است که پرداخت بدهی ها الزما به عهده کسی نخواهد بود که آنها را به بار آورده است. ممکن است نفرات قبلی تیم خرابکاری هایی کرده باشند که شما به عنوان آخرین کسی که روی پروژه کار کرده اید مجبور به پاسخگویی در قبال آنها باشید. هیچ چیز دردناکتر از این نخواهد بود که جوابگوی اشتباهاتی باشید که در ایجاد آنها نقشی نداشته اید!

پرکار هستید؟ پس دقت کنید

اگر برنامه نویس پرکاری هستید حتما به این مورد توجه کنید که تنگی وقت و پرکاری منجر به ایجاد بدهی های فراوان برای تیم شما نشوند. به طور خاص وقتی در حال ارائه تخمین زمانی برای کارهای سفارش داده شده هستید موضوع رفع بدهی های فنی را در نظر بگیرید. نیازی نیست که مدیریت پروژه یا مدیریت محصول در جریان ریز کارهای انجام شده در فعالیت های مختلف باشند.

مطالب مرتبط:

آیا سابقه کاری در درآمد برنامه نویسی نقش مهمی دارد؟

هفت تله فکری در راه اندازی یک استارتاپ

استارتاپ

همه در حال جنب و جوش اند. رشد روز افزون استارتاپ ها غیر قابل انکار است. جوی که در جامعه ایجاد شده بسیار هیجان انگیز است. احتمالا شما هم دوست دارید استارتاپی داشته باشید.

در هنگان بررسی و تحقیق اولیه در مورد کسب و کار جدید ممکن است در تله هایی گرفتار شویم.  در ادامه به بررسی چند نمونه از این مشکلات خواهم پرداخت. در ابتدا بهتر است تعریفی از مفهوم استارتاپ ارائه دهم.

یکی از دقیق ترین تعاریف یک استارتاپ این است:

استارتاپ یک سازمان موقت است که با هدف یافتن یک مدل کسب و کار تکرارپذیر و مقیاس پذیر بوجود آمده است. (از خوشفکری)

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

۱) پولدار می شوم

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

۲) رئیس خواهم شد

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

۳) با استفاده از ارتباطات فعلی خودم موفق خواهم شد

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

به خواندن ادامه دهید

همان بهتر که سر پایین تایپ کنید

9-17-14

حدود ۳ سال پیش به مدت یک سال تمرین کردم که تایپ به صورت سر بالا! را یاد بگیرم. منظورم تایپ ده انگشتی نیست. قبل از آن هم به صورت ده انگشتی تایپ می کردم. ولی تمام سعیم را کردم که در هنگام تایپ به صفحه کلید نگاه نکنم.

به خواندن ادامه دهید

چه چیزهایی یاد بگیریم: زبان برنامه نویسی

Languages

انتخاب زبان برنامه نویسی هم شاید یکی از تعیین کننده ترین  تصمیمات برای زندگی حرفه ای یک برنامه نویس باشد.  موضوعاتی که در این مطلب ارائه می کنم محدود به بحث انتخاب زبان برنامه نویسی نیست. ولی تصمیم گرفتم که در این بخش از این سری مطالب ارائه کنم.

 موضوع اصلی این مطلب مقایسه ی زبان های برنامه نویسی مختلف نیست. اگر یک برنامه نویس با توجه به مواردی که در پست های قبل گفتم سلسله مراتب نسبی برای انتخاب زمینه کاری خود را رعایت کند انتخاب های محدودی برای زبان برنامه نویسی مورد نظر خود خواهد داشت.

سوالات زیادی در زمان انتخاب زبان برنامه نویسی ممکن است پیش بیاید. فنی و غیر فنی. ولی به صورت اجمالی مهمترین های غیر فنی آن ها را در زیر لیست میکنم. سعی کنید در زمان انتخاب زبان این موضوعات را در ذهن داشته باشید

  • آیا نیاز به cross platform بودن دارید؟
  • به بازار کار خارج از ایران نیم نگاهی دارید؟ یا فقط به بازار ایران توجه دارید؟
  • دوست دارید موقعیت های کاری زیادی داشته باشید؟ یا اگر موقعیت کاری کمتری داشتید ولی درآمد تان خوب بود کافی است؟

آیا نیاز به cross platform بودن دارید؟

با توجه به این که اکوسیستم فعلی زبان های برنامه نویسی به سمت cross platform شدن بیشتر پیش می روند خیلی نیازی نیست نگران این موضوع باشید. اگر تکنولوژی های مایکروسافت ای را انتخاب کنید با درصد قابل قبولی می توانید برنامه ها و سیستم های مستقل از پلتفرم تولید کنید. ولی همیشه در نظر  داشته باشید که موضوع cross platform کار ساده و پیش پا افتاده ای نیست و درد سرها و مشکلات خاص خود را دارد.

به بازار کار خارج از ایران نیم نگاهی دارید؟ یا فقط به بازار ایران توجه دارید؟

به این نکته هم توجه داشته باشید که ممکن است اکوسیستم زبان های داغ برنامه نویسی و بازار کار در کشورهای مختلف متفاوت باشد. تحقیقات بیشتری در این زمینه انجام دهید. ممکن است بررسی کردن کشور یا کشور های مد نظر خود، باعث تغییر در استراتژیهای شما شود.

دوست دارید موقعیت های کاری زیادی داشته باشید؟

اگر از شخصیت هایی هستید که با کم شدن مورد های شغلی به شما استرس زیادی وارد می شود، به دنبال زبانی بروید که بازار کار زیادی در ایران دارد. ولی در این مورد نیز بیشتر دقت کنید. بیشتر جستجو کنید. زیرا در هر زمینه و پلتفرم زبان های مختلفی محبوب هستند. احتمالا اگر چنین شخصیتی داشته باشید به مد روز نیز توجه خواهید کرد. برنامه نویسی هم مانند بقیه زمینه های زندگی بعضی وقت ها درگیر مد می شود! به طور مثال به نظر من الان مد روز برنامه نویسی وب در ایران SPA است. مستقل از این که مشتری نیاز داشته باشد یا نه!

نکته: از نظر فنی خیلی خوب خواهد بود که یک در زبان هایی که می آموزید یک زبان با ذات dynamic و یک زبان با ذات static وجود داشته باشد. مشاهده کردن تفاوت های زبان های dynamic و static قدرت حل مسئله و طراحی شما را بالا می برند.

 

ایده های نو در طراحی وبسایت

چند روز پیش یک سری وبسایت راجع به طراحی وب سایت پیدا کردم. بهترینشون webcreme.com بود. این سایت مجموعه زیادی از سایت ها رو جمع آوری کرده که دیدنشون مثل دیدن اثر هنریه یا دیدن یک کار فنی. من که خستگیم در میره وقتیسر میزنم بهشون. از این مجموعه سایت مورد علاقه من http://blacknegative.com هست.