وقتی ماها می خواستیم برنامه نویسی یاد بگیرم یادم می آید انقد سخت می شد منبع پیدا کرد که همون منبع رو روی چشممون می ذاشتیم و برای فهمیدنش کلی سعی و خطا می کردیم تا اون زبان رو درکش کنیم
بگذریم، بهتره اینجوری این نوشته رو شروع کنم.
بعد از چند سالی که تو بازار کار وقت گذروندن به این نتیجه رسیدم که ما برنامه نویس خیلی زیاد داریم، اما برنامه نویس خوب واقعا کم پیدا میشه. شاید بد نباشه از دیدگاه خودم دلایل رو ذکر کنم.
1- همیشه وقتی می بینم آدما تازه میخوان برنامه نویسی رو شروع کنن دنبال یه زبان می گردن و توی هزار توی اینترنت فقط می گردن که چه زبانی خوبه و یکی رو انتخاب می کنن.
جواب من به این دسته : بهتره دنبال این باشی که چه نیازی رو میخوای برطرف کنی و تازه قبل از اون بگردی دنبال اینکه خود کلمه برنامه نویسی یعنی چی و یه مقداری وقت صرف خوندن الگوریتم ها بکنیم.
یه برنامه نویس خوب برنامه نویسی هستش که الگوریتم نویسی بلد باشه نه کد نویسی
2- فیلم های آموزشی خوب هستند اما همیشه می بینم یه رویه رو از توی این فیلم ها انتخاب می کنند و همیشه طبق اون جلو می رند. بهتره بدونیم فیلم های آموزشی فقط همون فیلم آموزشی هستند و دارند زبان رو به ما یاد می دند نه کد نویسی درست .
بهتره پروژه های بازی که توی دنیای اینترنت هست رو باز کنید و اونها رو نگاه کنید.
3- توی اغلب شرکت هایی که کار می کنم بدترین چیزی رو که دیدم اینه که برنامه نویس هایی که تجربه کم دارند برنامه نویس های با تجربه تر رو زیر فشار می ذارند. بهتره بجای این کار در اول راه بیشتر به خودمون فشار بیاریم تا اونا.
شاید عکس کاور مطلب کاملا مفهوم باشه که می خوام در مورد چه چیزی صحبت کنم.
بیایید از همین الان به خودمون قول بدیم هر روز بجای یادگیری سینتکس های مختلف، در مورد الگوریتم ها و چیز هایی که مرتبط می شه با اینکه من قدمی مثبت در راه کد نویسی بردارم وقت بذاریم.
در کل سه تایمر/کانتر به نامهای "تایمرصفر ، تایمریک و تیامردو " داریم که صفر و یک هشت بیتی هستند و تایمریک ۱۶ بیتی.
رجیسترهایی که باید بشناسید
TCNTn: Timer / Counter Register
این رجیستر با هر بار کلاک یک عدد به مقدارش اضافه میشه درکل کار شمارنده رو انجام میده. مقدار اولیه اش صفره و قابلیت نوشتن و خوندن ازش رو داریم.
TOVn: Timer Overflow Flag
هر تایمر فلگ سرریز داره که وقتی تایمر سرریز میکنه ،یا وقتی شمارنده به تهش میرسه ، این فلگ ست میشه.
TCCRn : Timer Counter Control Register
این رجیستر برای تنظیم حالت های تایمر/کانتر استفاده میشه.
OCRn : Output Compare Register
مقدار داخل این رجیستر با شمارنده مقایسه میشه وقتی برابر باشند فلگ OCFn ست میشه.
در ادامه تایمر صفر رو بررسی میکنیم. اول باید رجیستر های اساسی تایمر صفر رو درک کنیم.
TCNT0: Timer / Counter Register 0
یک رجیستر هشت بیتی که با هرپالس یکی بهش اضافه میشه.که بهش شمارنده میگیم.
TCCR0: Timer / Counter Control register 0
یک رجیستر هشت بیتی برای تنظیم حالت و منبع کلاک
Bit 7- FOC0: Force compare match
بیت هفتم ، تنها بیتی که هنگام تولید موج استفاده میشود، را مینویسد. نوشتن یک در این بیت باعث میشود که تولید کننده موج مانند زمانی عمل کند که مقایسه انجام شده.
Bit 6, 3 - WGM00, WGM01: Waveform Generation Mode
Bit 6, 3 - WGM00, WGM01: Waveform Generation Mode
حالتهای عملکرد تایمر با بیت سوم و ششم این رجیستر طبق جدول بالا مشخص میشوند.
Bit 5:4 - COM01:00: Compare Output Mode
این دو بیت تعیین کننده حالت تولیدکننده شکلموج هستند.
Bit 2:0 - CS02:CS00: Clock Source Select
این سه بیت برای انتخاب منبع کلاک استفاده میشوند. وقتی مقدار سه بیت صفر باشد تایمر متوقف میشود.
ولی بعد از ست کردن مقدار بین ۲ تا ۵ باینری با pre-scaler شروع به تولید کلاک میکنه و شمارنده عددش رو اضافه میکنه در هر سیکل.
تعیین کلاک
خب تصویر بالا نیاز به توضیح نداره از مقدار ۲ باینری تا ۵ باینری کلاک رو تقسیم بر عدد سمت راستش میکنه.
TIFR: Timer Counter Interrupt Flag register
رجیستر فلگ وقفه تایمر/کانتر
Bit 0 - TOV0: Timer0 Overflow flag
بیت صفر فلگ سرریز تایمر صفر. صفر بودن این بیت یعنی سرریز نشده و یک بودن یعنی سرریز شده.
Bit 1 - OCF0: Timer0 Output Compare flag
فلگ خروجی مقایسه : وقتی مقدار شمارنده و مقایسه شونده برابر شوند این بیت یک در غیر اینصورت صفر میشود.
بقیه بیت ها هم به صورت زیر هستند.
Bit 2 - TOV1: Timer1 Overflow flag
Bit 3 - OCF1B: Timer1 Output Compare B match flag
Bit 4 - OCF1A: Timer1 Output Compare A match flag
Bit 5 - ICF1: Input Capture flag
Bit 6 - TOV2: Timer2 Overflow flag
Bit 7 - OCF2: Timer2 Output Compare match flag
درحالت نرمال : وقتی شمارنده سرریز میشود، یعنی مثلا از صفر به ۲۵۵ میرود، فلگ TOV0 ست میشود.توجه کنید که مقدار شمارنده بصورت خودکار صفر نمیشود و باید بصورت دستی این کار را انجام دهیم.
مقدار شمارنده بر اثر زمان
ساخت تاخیر با اسفاده از تایمر صفر
مراحل برنامه نویسی :
برنامهی وقته با تایمر
#include <avr/io.h> void T0delay(); int main(void){ DDRB = 0xFF; /* PORTB as output*/ while(1){ /* Repeat forever*/ PORTB=0x55; T0delay(); /* Give some delay */ PORTB=0xAA; T0delay(); } } void T0delay() { TCNT0 = 0x25; /* Load TCNT0*/ TCCR0 = 0x01; /* Timer0, normal mode, no pre-scalar */ while((TIFR&0x01)==0); /* Wait for TOV0 to roll over */ TCCR0 = 0; TIFR = 0x1; /* Clear TOV0 flag*/ }
مثال
یک شکل موج مربعی با طول ۱۰ میلی ثانیه بالا و ۱۰ میلی ثانیه پایین تولید کنیم.
اول باید یک وقفه ۱۰ میلی ثانیهای با تایمر صفر تولید کنیم.
فرض که میکرو رو روی فرکانس ۸ مگاهرتز تنظیم کردیم.
با استفاده از pre-scaler اه ۱۰۲۴ ، فرکانس منبع کلاک میشود :
8 MHz / 1024 = 7812.5 Hz
زمان هر سیکل :
1 / 7812.5 = 128 μs
بنابراین برای وقفه ۱۰ میلیثانیهای تعداد سیکلهای مورد نیاز تقریبا 78 میشه
10 ms / 128 μs = 78
پس ما به ۷۸ سیکل نیاز داریم تا وقفه ۱۰ میلیثانیهای بسازیم. پس مقداری که باید توی TCNT0 بزاریم میشه 178 :
TCNT0 = 256 – 78
یعنی شمارنده از ۱۷۸ شروع میکنه به شمردن و ۷۸ تا سیکل میشماره تا سرریز کنه.
پس ما اگه مقدار 0xB2 رو داخل رجیستر TCNT0 بزاریم ، تایمر بعد از ۱۰ میلی ثانیه سرریز میکنه.
برنامه وقفه ۱۰ میلیثانیهای با تایمر صفر
#include <avr/io.h> void T0delay(); int main(void) { DDRB = 0xFF; /* PORTB as output */ PORTB=0; while(1) /* Repeat forever */ { PORTB= ~ PORTB; T0delay(); } } void T0delay() { TCCR0 = (1<<CS02) | (1<<CS00); /* Timer0, normal mode, /1024 prescalar */ TCNT0 = 0xB2; /* Load TCNT0, count for 10ms */ while((TIFR&0x01)==0); /* Wait for TOV0 to roll over */ TCCR0 = 0; TIFR = 0x1; /* Clear TOV0 flag */ }
وقفه تایمر
TIMSK: Timer / Counter Interrupt Mask Register
ما باید بیت TOIE0 (Timer0 Overflow Interrupt Enable) رو در رجیستر TIMSK ست کنیم تا وققهی تایمر صفر فعال بشه. بعد از فعال شدن ، به محض سرریز تایمرصفر ، کنترلر به روتین وقفه تایمر صفر پرش میکنه.
برنامه وقفه یک میلیثانیهای با تایمر صفر
#include <avr/io.h> #include <avr/interrupt.h> /* timer0 overflow interrupt */ ISR(TIMER0_OVF_vect) { PORTB=~PORTB; /* Toggle PORTB */ TCNT0 = 0xB2; } int main( void ) { DDRB=0xFF; /* Make port B as output */ sei(); TIMSK=(1<<TOIE0); /* Enable Timer0 overflow interrupts */ TCNT0 = 0xB2; /* Load TCNT0, count for 10ms*/ TCCR0 = (1<<CS02) | (1<<CS00); /* Start timer0 with /1024 prescaler*/ while(1); }
منبع :
یکی از گروه هایی که ما همیشه در حوزه کاریمون باهاشون سر و کار داریم برنامه نویس ها هستند و من معمولا میگم که برنامه نویس ها قلب تیم و مارکتینگ همانند مغز تیم هستش و هر کدوم نباشن قطعا تیم موفق نخواهد شد.
با برنامه نویس های مختلفی در دو حالت کار استارتاپی و کار سازمانی تجربه همکاری داشتم در ادامه سعی می کنم بررسی ای از این دو فضا در ایران و نحوه کار دوستان برنامه نویس داشته باشم.
یکی از اجزای جدایی ناپذیر استارتاپ ها برنامه نویس ها هستند و اونهایی که در این فضا حضور دارند اکثرا دانشجویان و جوان های علاقمندی هستند که معمولا به سه گروه تقسیم میشن :
مهمترین مشکلات در این فضا که معمولا استارتاپ ها با برنامه نویس ها دارند، فضای فکری اونهاست ، خیلیاشون معمولا خودشون رو در حد خدا می دونن، ادعای زیادی دارند و طرز فکرشون اینه که فقط اونا کار می کنند و بقیه تیم بیکارن که دقیقا همین آفت کار تیمی هستش ،بدون اینکه توجه کنن که موفقیت یک استارتاپ رو مجموعه ای از عوامل ،در کنار هم هستن که رقم میزنه و کار هر فرد دارای ارزش هست که البته دلایلش رو همونطور که در این
چیزی که در سازمان ها دیده میشه یه ذره اوضاع بهتره ، برنامه نویس ها از تجربیات بیشتری برخوردارن ، و با توجه به قرارداد و حقوق ثابتی که دریافت می کنن،حرفه ای تر عمل می کنن.
البته در سازمان ها با معضل دیگه ای درگیرن و اون عدم ساختار سازمانی برنامه نویس ها هستن ، معمولا زیاد به زمان ورود و خروج توجهی ندارن و این چیزا زیاد براشون اهمیت نداره که البته یه سری از سازمان ها با دادن ساعت های شناور سعی در حل این موضوع داشتن ولی مهمترین مشکلی که اینجا هم هنوز دیده میشه روحیه حساسشون و عدم تعهد هستش که کمتر در برنامه نویس ها دیده میشه و به راحتی یهو بدون هیچ دلیلی به سرکار بر نمی گردن بدون اینکه دغدغه ای درباره این موضوع داشته باشند.
مطالب بیشتر در این زمینه رو می تونین در
اگه هدفی توی سر نداشته باشی هر جا که باد بره تو هم میری
اگر میخواهید در شغل برنامه نویسی موفق باشید, باید بدانید که دقیقا کجا میخواهید بروید.
داشتن یک ذهنیت مبهم از کاری که در یک فاصله زمانی میخواهید انجام دهید, کافی نیست. در عوض شما باید اهداف محکمی داشته باشید;تا در هر نقطه از راه جهت شما مشخص باشد.
خیلی از برنامه نویسان و متخصصان , بعد از دهها سال شغل و مسئولیت سابق خود شون رو دارند, بعله ده سال !!!
این اتفاق ناراحت کنندهاس ولی انتخاب پیشفرضه. اگه شما هنوز هدف کاریتون رو به وضوح مشخص نکردید, تقریبن همین اتفاق هم برای شما میوفته.
خب چکارش میشه کرد؟
امروز,همین الان,وقت بزارید و فکر کنید در مورد شغل ایدهآل تون و تصمیم بگیرید که اهداف نزدیک تون چی هستند.
یعنی ببینید مقصد اصلی تون کجاست و الان کدوم وری باید برید؟؟؟
وقتی به هدف نزدیکتون رسیدین , هدف نزدیک بعدی رو انتخاب کنید.
و هدف اصلی رو همیشه به یاد داشته باشید. مصلا روی یه کاغذ بنویسید بزنید به دیوار تا همیشه بدونید که به کجا دارید میرید.
و اشتباهی که حتی از هدف نداشتن هم رایج تره , تعویض سریع هدفه.
خب بدیهیه که کسی که هر هفته از یک شاخه به اون شاخه بپره نتیجه ای هم نمیگیره.
اگر میخواهید برنامه نویس بهتری باشید , باید خلاقیت , سرعت عمل , سلامت جسمی و بقیه موارد مشابه رو هم داشته باشید و بهشون توجه کنید.
پس در کنار تقویت مهارت کد نویسی به روش های تقویت مهارت های نرم هم توجه کنید.
در مورد مهارتهای نرم میتونید سرچ کنید.
بودن در جامعه کمک میکنه تا حس تنهایی نکنید و حس کنید که به جایی تعلق دارید.
بعلاوه میتونید رابطه های جدیدی پیدا کنید و از اطراف ایده بگیرید.
اگه عضو یک اجتماع برنامه نویسی نیستید, پیشنهاد میکنم که حتما عوض (عضو) بشید.
عضو چیزی بزرگتر از خودت بودن , راهیه برای رشد.
بودن در یک جامعه برنامه نویسی فایده های زیادی داره :|
تو خارج که کد کمپ میزنن ولی ازین سوسول بازیا ما نداریم !!!
شما میتونید برید به کلاس های آموزشی.
یا اگر حضوری راحت نیستید مجازی که زیاده :/
عمیق کار کنید. چون تخصص داشتن توی یک زمینه خیلی فایده داره :|
شما هم شنیدید که همه کاره هیچ کاره اس. بد برداشت نکنید این که اطلاعات پایه در مورد همه چی داشته باشید, لازمه.
اول در یک حوضه مشخص متخصص بشید و بعد میتونید در حوضهی بعدی کار کنید.
چون میگن توی برکه ماهی بزرگه باشی بهتره تا توی دریا ماهی کوچیکه.
بعد ازین که توی برکهی خودتون بزرگ شدید میتونید برید جاهای بزرگ تر و عمیق تر شنا کنید.
در طول زندگی خیلی چیزا میان و میرن. شما ممکنه شغلتون رو چند بار عوض کنید, ممکنه پولدار بشین یا ورشکسته, ممکنه چاق بشین یا لاغر ولی یک چیز هست که تغییر نمیکنه.
اسم شما.
اسم شما یا برند شخصی شما یک دارایی خییییلییی با ارزشه.که بسیاری از برنامه نویسان حتی خبر ندارند ازین داراییشون.
داشتن یک برند میتونه خیلی در گرفتن کار یا ترفیع درجه کمک کنه. یا شما میتونید بیزنص خودتون رو راه بندازید.
اگه شما اسم و رسم خوبی داشته باشید میتونید همه چیزو با یک علامت دست عوض کنید.
خب فروش محصولات و سرویس ها که طبیعی بنظر میرسه, ولی تاحالا فکر کردید به ارزش فروش خودتون؟(به عنوان برنامه نویس).
برای ساختن یک برند شخصی تو رشته برنامه نویسی, من توصیه میکنم با ساختن یک بلاگ شروع کنید و یک مبحص یا تخصص , که قراره با اون شناخته بشین , رو انتخاب کنید. و یاد بگیرید که چطور حرفتون رو پخش کنید و اسمی بدر کنید.
یک راهش تولید محتوایی که برای بقیه مفید باشه.
کار کردن روی پروژه های جانبی خیلی مفیییده :|
اکثر افرادی که شاغل هستند گله میکنند که فرصت نداریم تا روی دیگر تکنولوژی ها کار کنیم.
شما با کار کردن روی پروژه های جانبی میتونید به ترز فجیعی مهارت های برنامه نویسی خودتون رو تقویت کنید و کنارش یه اضافه درآمد هم میتونید داشته باشید.
همه ی برنامه نویسانی که پروژه جانبی کار میکردن (یا زیر آبی میرفتن تو شرکت) در نهایت اون پروژه جانبی تبدیل به کار تمام وقت شون شد.
فواید دیگه ای هم هست که اینجا نامبرده نمیشن
داشتن برنامه منظم برای یادگیری و آپدیت اطلاعات خییییلی مفیده :|
چون یکی از فاکتور های موفقیته و نداشتن اینچنین برنامه ای اشتباهه
این جور آدمی نه تنها خودشو رشد میده بلکه آدمهای اطرافش رو هم رشد میده.
میتونید برنامه ریزی کنید که هر ماه یک کتاب بخونید و هر سال 12 تا کتاب خوندید :/
یا هر روز نیم ساعت مطالعه کنید , و بعد از یکی دو سال خیییلییی تغییر میکنید.
شااااااید مطالب این پست بنظرتون مفید بود ولی چه فایده اگه تغییری در شما ایجاد نکنه؟
پس بجای خوندن و پر کردن مغزتون , عمل کنید , همین امروز
همه میدانیم که در دنیای برنامه نویسی همه چیز خیلی سریع پیشرفت و تغییر میکند. ما به عنوان برنامه نویس هر روز باید وقت بگذاریم برای یادگیری تکنولوژی های جدید.
چون ممکنه تکنولوژی که ما بلدیم قدیمی شه و بی کار بشیم :/
مقدمه کافیه این تکنیک هارو اجرا کنید تا سریعتر هر زبانی که میخواهید یاد بگیرید.
فقط با خوندن کتاب و نگاه کردن به نمونه کد ها بطور موثر چیزی یاد نمیگیرید, نمونه کدی که خوندید رو دوباره بنویسید و اجرا کنید و بعدش باهاش بیشتر بازی کنید تا خوووب تو ذهنتون فرو بره -_-
هر زبانی یا موضوعی یا کتابخانه ای که بخواهید باهاش کار کنید اگر پایهی کار اون رو ندونید بعدن گیر میکنید و در درک اون مطلب به مشکل خواهید خورد.
پس اگه از اول اصول رو خوووب یاد بگیرید و به حافظه بلند مدت فرو کنید, مطمئن باشید در آینده سریع تر یاد میگیرید.
با خودکار رو کاغذ کد بنویسید , چون اونجا آیدیای نیست که کمکتون کنه.
با این روش دقت خودتون رو بیشتر میکنید و یکی از متد های عمومی یادگیری نوشتن هست.
ثانیا برای گرفتن کار به این مهارت نیاز دارید, معمولن توی آزمون های دانشگاه ها یا شرکت ها مجبورید با دست روی کاغذ کد بنویسید.
بهتر است که یک راهنما داشته باشید تا راه پیش رو را به شما نشان دهد.
خب کمتر به بیراهه کشیده میشوید و وقت کمتری تلف میکنید.
اگر فهم و درک یک موضوع برایتان سخت است, در اینترنت بدنبال منابع مشابه بروید و آموزش های دیگری را هم امتحان کنید شاید آنقدر هم که فکر میکردید آن موضوع سخت نبوده!
وقتی که دیباگ میکنید خیلی آسان است که در یک سوراخموش گیر کنید و ساعت ها در آن سر در گم بمانید و هیچ ضمانتی نیس که اگر اونجا خودتون رو چند ساعت درگیر کنید باگ را مشکل را حل میکنید.
برای جلو گیری از این:
کمی استراحت کنید و به کار دیگری بپردازید و چند ساعت از باگ و درد سر دور باشید.
در این زمان باگ جایی نمیره و شما حد اقل سرحالتر شدهاید و مغز شما بهتر کار میکند.
نتیجه گیری :
سلام ویرگولی های عزیز
تو این پست میخوام در مورد چند تا از مشخصات و ویژگی های شخصیتی که فکر میکنم بسیاری از برنامهنویس های بزرگ دارند،صحبت کنم. من اهل کتابخوندن نیستم و کتابی بلد نبودم براتون بنویسم : /
قبل ازینکه شروع کنیم باید بگم که این موارد نتیجه تجربهی شخصی منه ، چیزهایی که خودم دیدم و از بقیه یاد گرفتم در طول چند سالی که کار کردم. شما هم مجبور نیستید تمام این مشخصات رو داشته باشید تا یک برنامه نویس بزرگ باشید.چندتاشونو هم اگه داشته باشید وضعیت تون خوبه.
اگه شما صفت خاصی مد نظرتون هست که توی این لیست نیومده حتما توی کامنت ها بگید.
برای ما ایرانیها یادگیری زبان انگلیسی واجبه، چون تاثیرش رو دارم میبینم میگم
خودم وقتی تازه شروع کردم نصف وقتم رو برای زبان میگذاشتم الان هم به تازه کارها میگم نصف وقتتون رو برای زبان بزارید. شاید در اول کار بشه از روی آموزش های قدیمی فارسی کارتون رو راه بندازید ولی قطعا جلو تر که برید به زبان انگلیسی نیاز خواهید داشت.
داشتن صبر در همهی زمینهها لازمه اون هم تو زمینهی تکنولوژی ، تکنولوژیها معمولا کاری که ما میخواهیم رو انجام نمیدن! چه تعمیر کامپیوتر باشه یا شبکه یا هرچیز دیگهای ،
اولین استاد ما گفت " شما تو برنامه نویسی میخواید به کامپیوتر بگید که چیکار کنه ولی کامپیوتر ها هم بسیار خنگ هستن و منظور شمارو براحتی درک نمیکنن”
فهموندن دقیق منظورمون به کامپیوتر ها کار پیچیدهایه. و همیشه چیزهای زیادی هست که طبق انتظار ما درست کار نمیکنه. پس طبیعیه که بعضی وقتا چند دقیقه یا چندساعت حتی ممکنه چند روز لازم باشه تا وقت بزارید و مشکل رو پیدا و حلش کنید.
پس اهمیت صبر برای برنامهنویسان بزرگ خیلی روشنه
کسانی که به مدرسه قانون میرن ، یاد میگیرن تا به مساعل به دید قانونی نگاه کنن ، ما برنامه نویسها هم یاد میگیرم تا به مساعل به دید شی گرایی (و … ) نگاه کنیم! نمیدونم اوباما یا موسس اپل گفته بود همه باید برنامهنویسی یاد بگیرن چون برنامهنویس به مردم یاد میده چجوری فکر کنند.
توی برنامهنویسی کار اصلی ما مدل کردن مساعل و مشکلات دنیای واقعی به کده ، و اگر اهل حل کردن مشکلات و راهحل دادن هستید خیلی عالیه. خودم معمولا دوست ندارم چیزهای خونه که خراب میشن رو درست کنم ولی وقتی یه راهحل بهتر مشکلاتم توی برنامههام پیدا میکنم خیلی حال میکنم :)
علاقه مهم ترین آیتم این مطلبه ، من عاشق برنامهنویسیام ، شغل دیگهای جز برنامهنویسی انتخاب نمیکنم.چون هیچ کار دیگهای رو اونقدر دوست ندارم که منو روزی ۱۶ ساعت پشت میز نگه داره.نمیگم که علاقه واجبه ولی خیلی تاثیر داره.
جایی هم شنیدم که باید به کارت علاقه داشته باشی تا پیشرفت کنی و الان بهش اعتقاد دارم.
ممکنه هنوز درک واقعی از برنامه نویسی نداشته باشین، پس اگه هنوز عاشقش نشدین بیشتر درگیرش بشین. من خودم حسم نسبت به برنامه نویسی خیلی فرق داشت چون اول که با اندروید شروع کردم و اطلاعاتم در مورد فریموورکاندروید کم بود ، خیلی کار اعصاب خوردکنی بود ، ولی همین که فهمیدم چی به چیه دیگه کار لذتبخش شد.
تکنولوژیها سریع پیشرفت میکنند، همه چیز خیلی سریع عوض میشه و چیزای بهتر هر روز میاد ، چزایی که بیست سال پیش بودند دیگه استفاده نمیشن و کاربردی ندارند. اگه برنامهنویس ۲۰ سال پیش به امروز سفر زمان کنه ، کاری نیست براش! و مجبوره تکنولوژیهای امروزی رو یادبگیره.
موسس NPM توی آمار سال قبل گفت طول عمر هر تکنولوژی و فریموورک حداکثر پنج ساله!
شما مجبور نیستید عاشق یادگیری باشید ولی مجبورید یادبگیرید! پس شل کنید و کمی لذت ببرید :)
مهارت کارگروهی قطعا به شما در این کار کمک بزرگی میکنه. زمونهای که دو نفر تو گاراژ خونهشون مینشستند و بزرگترین شرکت تکنولوژی رو میساختن دیگه گذشت.
تکنولوژی خیییلییی پیشرفت کرده که برای ساخت چیز مهمی شما مجبورید با دیگران کار کنید، پس اگه خیلی مغرور یا از خودراضی باشید هیچموقع از دیگران فیدبک نمیگیرید.پس اگه از این اخلاقها دارید بدونید که راه رو اشتباه میرید.
وقتی بخواید تو یک شرکت کار کنید شما باید بتونید افرادی که باهاشون کار میکنید رابطهی موثر بسازید.از هم فیدبک بگیرید و همکاری خوبی داشته باشید تا بتونید چیز های بزرگی بسازید. حتی اگه فرینلسر هستید باید بتونید با کارفرما ارتباط خوبی برقرار کنید.
اگه مثل من درونگرا هستید از هر فرصت استفاده کنید تا مهارتهای اجتماعی تون رو ارتقاع بدید.
دنیای تکنولوژی مثل یک اقیانوس خیلی وسیع و عمیقه. کسی که فکر میکنه همه چیز رو بلده ، با دیگران کار نمیکنه و حتی بعضی افراد که به بقیه توهین میکنند، این اخلاق تاثیر منفی جدی توی پیشرفتشون داره.
هیچکس نمیتونه همه چیز رو توی یه فیلد بدونه.اگه همچین فکری میکنه یعنی چیزی نمیدونه ، چون هرچی بیشتر یاد بگیری زمینههای بیشتری رو میبینی که وجود دارند که ازشون خبر نداشتی.
یکی از برنامه نویسان ارشد سیستم عامل اندروید توی استک شیش تا سوال پرسیده بود!
تو آدمایی که شناختم ، هرکی دانشاش بیشتر بود ، تواضعاش هم بیشتر بود.
باید به مهارتهایی که یاد گرفتید اعتماد به نفس داشته باشید و اگه راه حلی داشتید توی جمعی ساکت نمونید ، یا اگه مهارت شما از بقیه بالاتره نباید کسایی که مهارتشون کمتره رو مسخره کنید. و …
پس به خودتون و کارتون اعتماد داشته باشید و به خودتون افتخار کنید حتی اگه یه برنامه ساده رو از روی یه آموزش ساختید. هر کسی بلد نیست کاری که شما کردید رو بکنه پس باید بهش افتخار کنید حتی اگه کد خوبی نیست. شما بیشتر تمرین میکنید بیشتر یاد میگیرید و کم کم کار شما پیشرفت میکنه.
تقسیم کارها به تسکهای کوچیکتر و مدیریت زمان به پیشرفت سرعت شما خیلی کمک میکنه.خودم پروژه هامو توی مغزم مدیریت میکردم و پروژه ها کم کم بزرگتر شد تا دیگه بدون trello نمیتونستم کار کار کنم. حتما مدیریت زمان و مدیریت تسک هارو انجام بدید تا ببینید چقد تاثیر مثبت داره
وقتی کار فریلنسری بکنید یا شرکت خودتون رو مدیریت کنید مهارت تخمین زمان یک تسک خیلی واجبه.
داشتن تمرکز روی کار هم خیلی واجبه که مدیرت تسکها باعث میشه تمرکزتون روی مدیرت پروژه از دست ندین.
به پایان رسید این مطلب
بهتر از دیروز باشید.
براحتی بدون دانلود یا نصب چیزی ،شروع به ویرایش عکسهاتون کنید.
به عنوان یه برنامه نویس سمت سرور که هیچ نیازی به ویرایش عکس نداشتم و ندارم ولی وقتی اندروید کار میکنم بعضی وقتا لازمه یه عکس رو ویرایش کنم یا یه آی طراحی کنم و .
مشکل من اینجا بود که به دلایل خیلی زیادی دیگه از ویندوز استفاده نمیکنم و فقط از توضیع های لینوکسی روی لبتابم استفاده میکنم. (دبیان یا اوبونتو) ، متاسفانه شرکت ادوبی نسخهی لینوکس فوتوشاپ رو نساخته و نمیتونید به راحتی روی لینوکس فوتوشاپ نصب کنید.
گیمپ یا gimp که یه ویرایشگر عکس اوپن سورس ، که خوبیا و بدیهای خودشو داره شبیه فوتوشاپه تا حدودی و خیلی فرق داره کار باهاش . من که باحاش حال نکردم . سعی کردم یادش بگیرم نشد!
نصب فوتوشاپ با واین خب این هم میشه ولی آسون نیست و گیر و گور زیاد داره . هنوز نتونستم درست نصب و اجراش کنم اگه شد برای شما هم میزارم.
نصب ویندوز این گزینه آخرم بود که بد ترین گزینه هم بود . خیلی سخت میشه که بخوام هی سوییچ کنم بین ویندوز و لینوکس چون روش توسعه من اینجوریه که تغییرات زیاد میدم و یکچیز خاص از اول تو ذهنم نیست. شاید بگید چرا تو ماشین مجازی نصب نمیکنی؟ خب اگه ssd داشتم سرعت هاردم داغون نبود این گزینه هم میشد ولی بازم نمیخوام ویندوز نصب کنم.
در نهایت با فوتوپی آشنا شدم . فرشته نجات من
برای استفاده ازش خیلی راحت میرید تو سایت photopea.com کمتر از یک دقیقه سایت لود میشه با بد ترین اینترنت ، و waollah این شما و این فوتوشاپ توی مرورگر !
فوتوپی رو میشه گفت نسخه آنلاین فوتوشاپ
برای یک طراح یا گرافیست کار فوتوشاپ رو نمیتونه انجام بده ولی برای یه کابر معمولی با استفاده های معمولی عالیه. توی یوتیوب دیدم که کارای حرفهای هم باحاش انجام میدن.
فوتوپی خیلی بیشتر از یه ویرایشگر عکس ساده است ، خیلی از فرمت هارو بخوبی ساپورت میکنه.خیلی کارایی که تو فوتوشاپ بلد بودم اینجا هم انجام میدم و در کل چیزی کم نذاشته برای من یکی :)
توضیحات فنی و آموزش اش رو میتونید توی سایت خودش بخونید.
فوتوپی اوپنسورس نیست ولی توی صفحهی گیتهاب میتونید بهش استار بدین و issue ثبت کنید.
امیدوارم به دردتون بخوره ; به قول جادی شاد باشید و خوشحال :)))
سلام ، اهمیت زبان بر هیچکس پوشیده نیست. دیدم که خیلی ها مشکل دارند توی یادگیری زبان و خیلی هاشون بخاطر مشکلاتی بیخیال شدن .
توی این پست از تجربه یادگیری خودم براتون میگم که شاید بدرد شما بخوره
برای یادگیری زبان متد های زیادی وجود داره که هر روش تاثیر و سختی متفاوتی داره شما بهتره تا جایی که میتونید این متد هارو امتحان کنید تا بهترین متدهارو که برای شما مناسبتر هستند رو انتخاب و استفاده کنید.
چند نکته کلی قبل از شروع معرفی متدها
اگه چیزی یاد بگیرید و ازش استفاده نکنید وقت تون رو هدر دادید و خیلی سریع هم از یادتون میره پس وقتی که میزارید روی یادگیری زبان بعدا تلف نکنید! ، همه از زبان استفاده میکنند تا صطح کارشون رو ارتقا بدن ، شما تلاش کنید تا در زمینهی کاری خودتون از انگلیسی استفاده کنید تا کارتون رو رشد بدید ، مثلا تو اینترنت بدنبال محتوا های مفید برای کسب و کارتون بگردید ، یا توی سایت های دوست یابی دوستی پیدا کنید و از تنهایی در بیایید ، با مردم کشور های دیگه آشنا بشید و صحبت کنید و خیلی کارای باحال دیگه .
من شروع کردم داکیومنت های جاوا رو به زبان اصلی خوندم ، کار سختی بود خیلی از لغات رو بلد نبودم برای یه خط ده بار میرفتم تو گوگل ترنسلیت معنی کلمه هارو یکی یکی در میاوردم . اولش سخته ولی کم کم راه میوفتی ، و کمتر به دیکشنری سر میزنی و بعد از یه مدتی دیگه نیاز به مترجم نداری و از طر
من شروع کردم داکیومنت های جاوا رو به زبان اصلی خوندم ، کار سختی بود خیلی از لغات رو بلد نبودم برای یه خط ده بار میرفتم تو گوگل ترنسلیت معنی کلمه هارو یکی یکی در میاوردم . اولش سخته ولی کم کم راه میوفتی ، و کمتر به دیکشنری سر میزنی و بعد از یه مدتی دیگه نیاز به مترجم نداری
بعد از اون بخاطر اینکه مشکلاتم توی برنامه نویسی رو حل کنم مجبور شدم متن های انگلیسی رو بخونم . بعد تر دوباره برای اینکه آموزش ها داکیومنت هارو بخونم مجبور شدم کل اون متن هارو ترجمه کنم برای خودم . خلاصه همیشه درگیری با زبان داشتم و دارم .
خیلی اون لحظه باحاله که میبینی یه متن یا یه آهنگ یا فیلم همه کلمه هاشو میفهمی و بلدی :)
یادگیری زبان خیلی بیشتر از چیزی که فکر میکنید نیاز به زمان و انرژی داره و خیلی کم کم پیشرفت میکنید.
مثل باشگاه بدنسازی ، یکی دو ماه میرفتم تغییری نمیدیدم و ول میکردم . ولی اونهایی که هیکل های درست و حسابی داشتن هر کدوم سه چهار سال حداقل هر روز تمرین کرده بودن.
پس بیشتر وقت بزارید و مداوم کار کنید ، هر روز ، نه یکی دو روز در هفته
یعنی متنی که میخونید اگه همهشو بلدین که چیز جدیدی یاد نمیگیرید اگر هم خیلی کلماتشو بلد نیستید چیزی نمیفهمید. پس محتوایی که انتخاب میکنید باید صطح بندی شده باشه.
فقط روی یک مهارت تمرکز نکنید و همهی مهارت هارو باهم جلو ببرید ، یکی از استاد هام گفت که هر مهارت مثل یک تیکه از چرخه ،وقتی همهی تیکه های چرخ باشند ، چرخ میتونه بچرخه.
چهار مهارت اصلی : Speaking ,Listening , Reading , Writing
تکنیک های یادگیری لغت زیاده ، تبلیغات الکی هم هستند مثل یادگیری در خواب و . هم هستند.
منبع اول :
منبع دوم : از محتواهای آموزشی ،هر جا کلمهای جدید دیدین توی متن زیرش خط بکشید و همونجا معنیشو توی دیکشنری چک نکنید ، سعی کنید معنی لغت رو خودتون بر اساس معنی جمله و پاراگرافی که توش استفاده شده حدث بزنید.
وقتی یک کلمه براتون زیادی آشنا بود و بیشتر از سه چهار بار به چشمتون خورد اون کلمه ، دیگه لازمه که معنیشو از دیکشنری چک کنید و توی دفترچه اتون یادداشتش کنید تا بعدا بتونید مرورش کنید.
فایدهی این روش اینه که معنی کلمه هارو کاربردی یاد میگیرید که خیلی موثر تره ، هرچقد راحت تر یاد بگیرید سریع تر فراموش میکنید! پس اگه چند بار به خودتون فشار بیارید تا معنیشو حذث بزنید و بخودتون زحمت بدین که توضیحات دیکشنری رو بخونید توضیحات رو درک کنید و خلاصه توضیحات رو یادداشت کنید با چند تا مثال تاثیرش توی حافظه بیشتره
دیکشنری مناسب :LongMan ، بهترین و کاملترین دیکشنری از نظر من چون همهی معانی و کاربرد های یک لغت رو داره به همراه مثال و ضرب المثلها و نکات گرامری و خیلی چیزای دیگه. یادتون باشه که انگلیسی رو با فارسی یاد نگیرید ، انلگیسی رو باید با انگلیسی یاد بگیرید اگه میخواهید روون انگلیسی صحبت کنید.
* کتابهای Oxford Word Skills هم سه تا کتاب توی سه تا صطح هم خوبه
انگلیسی برای نوجوانان :
هر وقت حوصله کار دیگه ای نداشتم یک مطلب از این سایت برمیداشتم و توی سایت keybr میزاشتم و تایپش میکردم ، هم زبان یاد میگرفتم هم تایپ ده انگشتی.
این سایت بخش های مختلفی داره ، مهارتهای اصلی و بخش های فرعی مثل بازی و . برای تازه کارها مناسبه و مطالبش هم صطح بندی هستند.
انگلیسی بدون زحمت :
محتواهایی که aj استفاده میکنه نه تنها زبان شمارو بهتر میکنه ، زندگی شمارو هم بهتره میکنه ! از نویسندگان و بزرگان و افراد موفق صحبت میکنه که خیلی توصیه میکنم گوش کنید.
انگلیسی با موزیک : آهنگ هایی که دوست دارید متنشون رو بخونید و معنیشون رو هم میتونید توی اینترنت پیدا کنید ، یه اپلیکیشن باحال هم بود به اسم musimax فک کنم ، بهترین راه اینه که توی یوتیوب اسم آهنگ رو با Lyrics سرچ کنید ، قطعا پیدا میکنید. مجموعه راه های دانلود از یوتیوب هم توی یه پست دیگه میزارم
کتاب داستان : کتاب های Oxford bookworms ، که داستان های جالبی رو در سطح های مختلف (stage) تنظیم کردن انتشارات دیگهای هم هستن ولی stage آکسفورد استاندارد تره ، اسم کتابهایی که خودم خوندم یادم رفته مال چند سال پیشه ولی خیلی جالب بودن داستان هاش که باعث میشد تا ته کتاب داستان رو بخونم.
آها یادم اومد Ethan Frome اولین کتاب داستانی انگلیسی بود که خوندم و ازش خوشم اومد .
بازی کامپیوتری : بازی های کامپیوتری یک متد خیلی فان و باحاله و کاربردی کلمات رو یاد میگیرید ، الان همه میدونن فایر این د هول یعنی چی :) ، بازی های زیادی هست ولی یک سری شون نیاز زیادی به خوندن و فهمیدن انگلیسی داره ، بازی های پیشنهادی من MineCraft هستش که توش یک عالمه چیزه که میتونید اسمشون رو توی بازی یاد بگیرید.
بازی بعدی Fortnite که میتونه از مواد اعتیادآورتر باشه ، توی بازی های آنلاین میتونید با هم تیمی هاتون صحبت کنید و این جای خیلی خوبیه که با چند تا خارجی هم کلام بشید :)
شبکههای اجتماعی زبانآموزان :منظورم فیسبوک و اینا نیست یه سری سایتها به اسم Language Exchange هم باحالا از توی این گروه ها توی چند گروه اسکایپی عضو شدم که خیلی خوب بودن همه اعضا و هنوز باهاشون در تماسم .
تمرکزم بهم خورد دیگه بقیه اش باشه در فرصت بعدی.
شما هم اگه متد یا روش خاصی مد نظرتونه توی کامنت ها بگید .
با تشکر
@semycolon
تو این مطلب میگم که چرا باید به اندرویدایکس مهاجرت کنید و چطور.
اگه ازJetPack و اندرویدایکس نمیدونید درموردش جستجو کنید و اطلاعات کسب کنید.
امروز دیدم که بازار آپدیت نهم اپلیکیشنام رو رد کرده بود (هشت تا ورژن قبلی رو چطوری تایید کرده بودین آخه؟) ، بعد که CrashLytics رو چک کردم دیدم که آره کتابخونه انتخاب عکس کرش داده بود. مشکل اون کتابخونه هم توی ورژن های بعدی حل شده بود ولی چون ورژن بالاتر از androidX استفاده کرده بود من از ورژن قبل از androidX اش استفاده کرده بودم.
اینکه چرا از ورژن قبلش استفاده کردم بخاطر این بود که چون توی ورژن های بعدی Dependency هاش از androidX استفاده کرده بود ولی من از SupportLibrary توی پروژم استفاده کرده بودم که دچار کانفلیکت میشد و مجبور میشدم به طور کامل مهاجرت کنم به androidX.
مشکل اینجاست که یک سری کتابخانه ها به androidX مهاجرت کردند و دیگه از SupportLibrary استفاده نمیکنند ولی بقیه مهاجرت نکردند و یک نوع دوگانگی به وجود اومده بود برام.
نمیدونم چرا زودتر به اندرویدایکس مهاجرت نکردم و میترسیدم ازش! فکر میکردم خیلی به مشکل بخورم ولی توی نصف روز کل یک پروژه رو refactor کردم.
خلاصه همونروز خیلی اتفاقی توی StackOverflow دیدم یکی به Jetifier اشاره کرده بود. حالا این Jetifier چی هست ؟ یک ابزار از JetPack که مشکل امثال من رو حل میکنه. کتابخانه هایی که مهاجرت نکرده بودن و به SupportLibrary وابستهان رو میگیره و اون SupportLibrary هارو به androidX تبدیل میکنه. و مشکل دوگانگی خیلی راحت حل میشه :) الان میتونم همه نوع کتابخانه ای به پروژه ام اضافه کنم چه جدید چه قدیم.
ولی باز هم مجبور بودم سورس خودم رو به androidX تغییر بدم ، یعنی وابستگیهای توی فایل build.gradle و import هارو از android.support به androidx.* تغییر میدادم.
برای این مشکل هم گوگل یک راه حل در نظر گرفته بود . در منوی Refactor توی اندروید استدیو گزینه ای به اسم Migrate to Androidx هم اضافه شده که بصورت خودکار وابستگی ها و import هارو عوض میکنه.
خب تا اینجا همهچی خیلی عالی و باحال به نظر میرسه ولی ریفکتور اندروید استدیو بی مشکل نیست!
راه حل اینه که پروژه رو بیلد بگیرید تا ارورها خودشون رو نشون بدن ، نترسید تقریبا کل فایل های پروژه قرمز میشن :)) ولی خیلی راحت میتونید با استفاده از کات کنترل شیفت آر import ها رو توی کل پروژه تغییر بدید.
به این صورت که اول Import رو پاک کنید بعدش روی کلاس ها کلید آلت اینتر بزنید تا خودش اون کلاس رو Import کنه. بعد اون رو توی کل پروژه از طریق کات قبلی عوض کنید.
یک سری کلاس هارو هم باید به صورت مجزا به dependency هاتون اضافه کنید مثلا کلاس TabLayout دیگه توی com.android.support:design نیست و باید بجاش از com.google.android.material:material استفاده کنید چون توی اندرویدایکس کامپوننت ها مجزا شدن.
ارور های دیگه ای هم خواهید داشت ولی نگران نباشید ، درست گوگل کنید و راه حل رو پیدا کنید.
خوشحال باشید و خندان :)
امروز سیگنال وای فای توی اتاقم خیلی کم بود و نمیتنونستم کار کنم یه فکری زد به سرم که مودم دومی که داشتم و بی استفاده بود رو به مودم اصلی شبکه کنم.
شاید این نکته رو ندونید که وسیله هایی که به مودم وصل میشن ،چه با وایفای و چه با کابل شبکه همه با هم شبکه شدن و امکان اتصال این دستگاهها به هم وجود داره مثلا تلوزیون و لبتاب و موبایل ای که به یک مودم وصلن میتونن با هم ارتباط برقرار کنند و خیلی از نرم افزارها ازین قابلیت استفاده میکنند.
کاربردهاش میشه گفت شبکه کردن چند تا لبتاب و کامپیوتر توی خونه ، اشتراک گذاری فایل ها بین دستگاه ها ، تماشای فیلم از موبایل و کامپیوتر روی تلوزیون با وایفای ، بازی بصورت شبکه ای( مثلا کانتر) و خیلی کاربرد های دیگه.
خب هر دوتا مودم پورت لن دارند و احتمالا باید بشه و چون روی مودم هم نوشته adsl2 model + router خب اون قسمت روترش یعنی باید بشه به عنوان فقط روتر ازش استفاده کرد. اگه کلاش میکروتیک بود میگفتم که ما نیاز به DHCP سرور و یک DHCP کلاینت و یک رول فایر وال برای srcNat لازم داریم ولی سیستم عامل مودم ها خیلی عقب مونده تر ازین حرفا هستن.
بعد از یکم ور رفتن با مودم ها و سرچ توی اینترنت به این راه حل رسیدم
مودم اول مثل همه مودم ها تنظیمات ADSL روش انجام شده و به اینترنت متصل هستش و هیچ تنظیمات دیگه ای لازم نداره.
اول دوتا مودم رو با کابل Lan به هم متصل میکنیم دقت کنید که بعضی روتر ها درگاه مخصوص wan دارند ولی این جا اصلا لازم به همچین پورتی نیست و پورت Lan معمولی کار میکنه.
توی بخش WAN مودم دوم رو میزاریم روی حالت bridge که حالت پیشفرضاشه. لازم نیست چیزی رو تغییر بدین اگه این نبود اضافه اش کنید.
برای اینکه یک آدرس مجزا برای هر مودم داشته باشیم آی پی مودم دوم رو عوض میکنیم توی بخش Lan مودم دوم و بعدش با همین آی پی وارد تنظیمات مودم دوم میشیم.
به بخش Lan -> DHCP میریم و تنظیمات رو تغییر میدیم
مقادیر Default Gateway و DNS Server رو باید آی پی مودم اول رو وارد کنیم تا مودم دوم کار کنه.
ایزی ایزی تامام تامام :)
خب از مزایای این کار میشه گفت :