توانمندی‌های لازم برای یک جاوا کار حرفه‌ای

مقدمهدر چند سال گذشته به خوبی متوجه این موضوع شده‌ام که من یکی از خوش‌شانس‌ترین افراد بوده و هستم که به وسیله آدمهای با سواد و رفقای خوب تونستم کار خوب بدست بیارم. کار خوب یعنی اینکه پرورش پیدا کنی. همکار خوب یعنی پیشرفت کنی و پروژه خوب که از کوکایین هم بهتر عمل میکنه. این باعث شد تا یاد بگیرم چه چیزی، کی، کجا و چطوری باید استفاده بشه، این هم‌ یعنی تجربه خوب. حالا به جایی رسیدم که وطیفه خودم میدونم این تجربه رو با بقیه به اشتراک بذارم و به درخواست یکی از دوستان این مطلب رو‌ می‌نویسم با این هدف که چه چیزی یاد بگیریم تا بتونیم شغل مناسب و مورد علاقه مون رو پیدا کنیم. نکته: این مطالب رو به عنوان تعریف از خود نمی‌نویسم چرا که در اون حد نیستم لذا هر جا اشتباهی هست به پای دانش کم بگذارید و در کامنتها به من کمک بکنید.نکته: در این مطلب به موضوعاتی مثل Clean Code و DesignPattern و ... اشاره نکرده‌ام. در مطلبی جدا به این موارد اشاره خواهم کرد.java-10-logoگام اول؛ هدف تو زندگیتون اگر هدف نداشته باشید به هیچ جا نمیرسید، پس همیشه برای خودتون مشخص کنید که میخواهید به چی برسید لذا پیشنهاد میکنم قبل از هرچیزی یه جست و جو در خصوص موارد زیر و هم چنین محدودیت‌ها و چالش‌های هر کدوم انجام بدید. -برنامه نویس وب-برنامه نویس موبایل-برنامه نویس سیستم های embedded -برنامه نویس سیستم های واسط و سوییچ‌ها و سیستم‌های بنیادی و مرکزی (هر نرم افزاری که در سه دسته بالا نیستند و وظیفه سنگین پردازش های اصلی و ارتباط بین سیستم های دیگه رو‌برقرار میکنن، مثل سوییچ بانک) با این چهار دسته سعی کردم تمام شغل‌های موجود در بازار رو پوشش بدم. دو دسته اول پر طرفدارترین و دو دسته بعدی پولسازترین هستن. پس از الان بدونید ‌دنبال چی میگردید. من جزو دسته اول و چهارم هستم. من full-stack محسوب نمیشم چون فقط بخش هایی که لازم دارم رو برداشتم و دانش پیاده سازی خیلی از بخش‌های Front End رو ندارم.گام دوم؛ مشورت بگیریدبزرگترین چیزی که من رو تو چند سال گذشته عقب انداخته بود نداشتن یک فرد کاربلد در کنارم بود که می‌تونست هر لحظه بهترین مشاوره‌ها رو به من بده. اینکه چی رو یاد بگیرم، چه جوری انجامش بدم و کجا استفاده‌اش کنم بهتره. برای همین این خلا رو سعی کردم با شبکه‌های اجتماعی، اینترنت و دیدن ویدئوهای مختلف پر کنم. اما در نهایت هیچ چیزی جای یک فرد با تجربه رو نمیگیره. غربی‌ها در هر شرکت برای هر فردی یک Team Lead دارند که این وظیفه رو به عهده داره.خدا رو شکر الان شما راحت می تونید با زدن یک توییت به راحتی جواب اولیه رو دریافت کنید. هم چنین یادتان باشد که شما به عنوان یک تازه کار یا نیروی کمی با تجربه چیزی رو اختراع نخواهید کرد و تمام مشکلات معمولی قبل از شما حل شده‌اند، پس خوب جست و جو کنید. عضویت در گروه های خبری و یا پیگیری اخبار مربوط به JUG ها و هم چنین Java Champion ها به شدت می تواند به شما کمک کند. این افراد معمولا در هفته حداقل یک کنفرانس و یا پست وبلاگ منتشر می‌کنند که به شدت کمک کننده است. گام سوم؛ آگهی بخوانیدچه تازه کار باشید چه نباشید تنها مرجع شما برای اینکه چه چیزی امروز به عنوان نیاز محسوب می‌شود تنها از آگهی‌های مشاغل دریافت خواهد شد. به شخصه هفتگی یک ساعت مشاغل سایت های مختلف را دنبال میکنم و اگر تکنولوژی مهمی باشد که در آن سر رشته نداشته باشم حداقل چند جست و جوی ساده برای سر در آوردن از آن انجام خواهد داد. در حال حاضر برنامه نویس‌های جاوا باید یک یا دو زبان دیگه برنامه‌نویسی رو حداقل در حد تجربه با کد کار کرده باشند و قابل قبول نیست که بخوان از این مسولیت شانه خالی کنند.گام چهارم؛ شروع یادگیری زبان جاواپیدا کردن یک دوره آموزشی جاوا اصلا کار سختی نیست. کلاس، ویدئو، کتاب (که خیلی توصیه نمیکنم)‌ هیچ فرقی نمی کنند مهم این است که شما به راحتی و در سریعترین زمان ممکن یاد بگیرید مفاهیم اولیه چه هستند و چگونه باید استفاده شوند. در کلاس‌هایی که برگزار می‌کردم همیشه چند نفری بودند که به دنبال ریز دستورات و نحوه کار آن‌ها هستند. این غلط‌ترین شیوه آموزش می‌باشد. یادبگیرید که صبور باشید. اینکه یک دستور برای شما دقیق روشن نیست مهم نیست، مهم کلیت کار است که بدانید مثلا برای ایجاد یک کلاس چه مراحلی طی می شود. حال اینکه از کلاس دقیقا چه استفاده‌ای می‌شود برای مرحله بعدی است. نمیشود همه چیز را یکجا فراگرفت. صبور باشید. بیشتر از خواندن و دیدن و شنیدن، در کار ما انجام دادن اهمیت دارد. هر کدی که می بینید یکبار برای خودتان بنویسید. سعی کنید تغییرات کوچک را در آن اعمال کنید و تفاوت‌ها را ببینید. برخی مواقع با تغییر یک خط کد کل برنامه از کار می افتد و این یک تجربه بزرگ برای شما خواهد بود. اما یادتان باشد که با این کار وقت تلف نکنید.همه شما اول از همه باید بدانید که JavaSE اولین چیزی است که باید فرابگیرید. تمام آن چیزی که برای ادامه کار لازم دارید همین است. بعد از آن تحقیق کنید که بقیه بخش های مرتبط به آن چیست به عنوان مثال JavaEE یا همان JEE که به تازگی تغییرات بسیاری در آن رخ داده است. افرادی که می‌خواهند برنامه نویسی موبایل (آن هم فقط بر روی سیستم عامل اندروید را یاد بگیرند)‌تنها لازم دارند JavaSE را بلد باشند. باقی مطالب در دوره‌های آموزشی اندروید به شما آموزش داده خواهد شد.گام پنجم؛ چه چیزی را اول یادبگیریمهمانطور که گفتم اول باید JavaSE را یادبگیرید. اما تمام JavaSE به چه کاری خواهد آمد ؟ تنها موارد زیر را درک کنید،‌ منظورم از درک این هست که بتوانید وقتی کد دیگران را میخوانید آن را ترجمه کنید و خروجی آن را در ذهن ایجاد کنید. اکثر شاگردهای من بعد از پایان دوره همچنان فرق بین Class و Instance را نمیدانند. در واقع آن‌ها درک درستی از این دو پیدا نکرده‌اند. پس مفاهیم شی‌گرایی (Object Oriented) را نیز نمی‌توانند به درستی پیاده سازی کنند. وقتی هم که نتوانند، خب برنامه نویس جاوا نیستند ! پس به ترتیب یاد بگیرید:مراحل نصب جاوا و اصلا jdk چیست و چه چیزهایی را شامل می‌شود؟چگونه جاوا را به سیستم عامل معرفی کنیم تا از طریق command line و یا shell به آن دسترسی داشته باشیم (جست و جو کنید : how to add java to path)چگونه از intellij استفاده کنیم (محیط یا ابزاری برای نوشتن و اجرای کدهای شما بدون خون ریزی، تفکر کد زدن در notepad برای احمق‌ها است)چگونه در intellij جاوا را معرفی کنیم ؟یک پروژه ساده را در intellij چگونه میسازیم ؟ یک کد ساده hello world پیدا کنید و بعد توضیحات آن کد را بخوانیدبعد مفاهیمی مثل متغیر، عملگرها، نحوه نوشتن شرط و کنترل روند برنامه (همان If/else و for اول کار یاد بگیرید کارتون راه می افته بقیش کاری نداره)، چگونه در consoleیک متن را چاپ کنیم؟لطفا به فکر گرفتن ورودی از کاربر تا اینجای کار نباشید! صبور باشید. حالا میرسیم به شی‌گرایی، شی‌گرایی را از روی کد یادنگیرید، از روی مفاهیم انتزاعی بفهمید. جوری بفهمید که وقتی به شما گفتن میخوایم یک سیستم انبار داری بنویسیم، هر چیزی در ذهن شما یک شی باشد و بتوانید آن را دسته بندی کنید. این موضوع آنقدر مهم است که همه افرادی که نتوانستند برنامه‌نویسی را ادامه دهند در واقع نتوانسته‌اند شی‌گرایی را درک کنند. (تقریبا درصد بالایی از فارغ التحصیلان مهندسین نرم افزار مملکت). مفاهیم کلاس، آبجکت‌ها، متدها (تفاوت با فانکشن)، propertyها از همه مهم تر هستند. مفاهیمی مثل ارث بری و چند ریختی ها مفاهیمی هستند که در اول کار فقط یاد بگیرید که اگر اتفاق بی افتند چه تغییری در کد ایجاد میشه وگرنه شما تا زمانی که مبتدی هستید فضایی برای استفاده از اونها ندارید. (علت اینکه توصیه به کتاب نمی کنم این است که در کتاب‌ها به شدت روی این موضوعات صحبت شده است و گاها تا 10 فصل اول شما حتی یک کد ساده را نیز نمی‌تواند بنویسید) به مرور در کدهای دیگران و استفاده از فریم‌ورک‌های دیگر درک خواهید کرد که چه اتفاقاتی خواهد افتاد. همچنان صبور باشید.حالا شما می تونید ادعا کنید که نزدیک به برنامه نویسی هستید. بعد از فراگیری این موارد می‌توانید کدی بنویسید که خروجی داشته باشد و احیانا در console متنی را نمایش بدهید. مفاهیمی مثل کار با فایل، برنامه نویسی در سطح شبکه (چی هست اصلا این ؟:))‌ ) ، کتابخانه‌های گرافیکی (swing , javafx) رو حداقل تا مراحل بعد بیخیال شوید. این‌ها فقط برای پر کردن کلاس‌های آموزشگاه استفاده می‌شوند. همه این موارد زمانی که نیاز داشته باشید برای شما چالش مناسبی خواهند شد اما الان وقت آن نیست.به سرعت یک دیتابیس را فرابگیرید. آسانترین آنها mysql می‌باشد (اگر تحریم مانع شما می شود MariaDb استفاده کنید) . نصب ساده، پشتیبانی مناسب به شما کمک خواهد کرد. در همین حین دستورات اصلی اسکریپت sql را هم بیاموزید. select, insert, update,delete دستورات اصلی شما هستند. باقی کارها را به نرم‌افزارهای ارتباط با دیتابیس مثل workbench بسپارید. بعدتر دستوراتی مانند Alter و ... که معمولا DBA ها از آن بیشتر استفاده میکنند به خودی خود برای شما دردسر ایجاد خواهند کرد.افرادی که از command line استفاده میکنند شاید خفن به نظر بیایند اما کار خاصی انجام نمی‌دهند، این افراد دو حالت دارند یا ابزار گرافیکی دوست ندارند یا دستورات مورد نظر را فقط باید در console نوشت که طبعا شق القمر نیست. حرفه‌ای تر که بشوید میفهمید. قبل از ارتباط با دیتابیس و نحوه استفاده از آن باید بدانید یک کتابخانه در جاوا چیست. jar فایل چه کار میکند. بعد باید یاد گرفت که چگونه یک کتابخانه را در پروژه خود اضافه کنیم و از کدهای آن استفاده کنیم.به وسیله کتابخانه jdbc باید بتوانید به هر دیتابیسی متصل شوید. sql statement ها را اجرا کنید و تفاوت بین statement و prepared-statement را بدانید. مفهوم resultSet را بشناسید و برای امتحان یکبار از delete و update هم استفاده کنید. در همین حد کفایت خواهد کرد. (اگر خیلی مایلید با این کتابخانه کار کنید کتاب JDBC4 چاپ شده است که در فصل اول همه این موارد توضیح داده شده.)همینجا یک لحظه درنگ کنید. شما تنها نباید کد یاد بگیرید. باید بدانید ابزارهای راحتی کار چه چیزهایی هستند و ارتباطات برنامه نویسی به چه صورت شکل می‌گیرند. پس اول از همه نحوه استفاده از ابزار maven را یاد بگیرید. با توجه به اینکه می‌دانید یک کتابخانه چیست باید بتوانید یک پروژه ساده را به وسیله maven مدیریت کنید. این مدیریت در حد دانلود فایل‌های کتابخانه پروژه باشد، کفایت می‌کند چرا که باقی کارها را intellij برای شما انجام می‌دهد.اگر بتوانید قبل از ادامه تحقیق کنید که git چیست، چه کارهایی انجام می‌دهد و دستورات clone,fetch,pull,push,status را یاد بگیرید عالی خواهد بود. با توجه به اینکه کلی ابزار برای مدیریت سورس ها توسط git وجود دارد خودتان را دستورات shell درگیر نکنید. من بلد نیستم اما هیچ وقت هم مشکلی ندارم چون میدانم که هر دستور یعنی چی اما استفاده از آن را به intellij و github desktop واگذار کرده‌ام. بدانید یک repository چیست، دستورات clone, status, fetch, pull, push, statsh, commit, merge, branch تقریبا نیازهای اولیه شما را برطرف میکند.حالا می‌توانیم به برنامه‌های بهتری فکر کنیم. هنوز خیلی چیزها هست که فرا نگرفته‌اید اما نترسید فقط ادامه بدهید.گام ششم؛ برنامه نویسی Enterpriseتا اینجا، کار با خیلی از موارد را فراگرفته‌اید، حداقل ۲ ماه زمان لازم دارید تا موارد قبلی را خوب بخوانید. غرق نشوید. مسیر را آهسته و پیوسته ادامه دهید. یک دریای وسیع با عمق کم بسیار بهتر از یک چاه با عمق ۱۰۰ متر است.اصل کار جاوا تولید نرم‌افزار با مقیاس بزرگ است. یعنی چه؟ این بدان معناست که اگر قرار است نرم ‌افزار تولیدی شما دارای تعداد بسیاری کاربر باشد، حجم زیادی از داده را مدیریت کند، بار بسیار زیادی در پردازش تولید کند، در سطح چند کامپیوتر (سرور) توزیع شود، در فضای ابری کار کند و دلایلی از این دست (یکی از آن‌ها می‌تواند کفایت کند)، شما می‌توانید از جاوا استفاده کنید. در غیر اینصورت پروژه یا زبان اشتباهی را انتخاب کرده‌اید. استاندارهای JEE برای همین تولید شده‌اند. یادمان باشد که این‌ استانداردها برای این هستند که هر برنامه‌نویسی به شکلی کد تولید کند که دیگران نیز از آن سر در بیاورد. از اینها :مفاهیم Servlet, Servlet Container, Application Server, Session Object, Request Object, Response Object , حالا سعی کنید یک برنامه ساده که از طریق کدهای HTML ورودی بگیرد، برای servlet ارسال کند و از این طریق داده‌ها را در دیتابیس ذخیره کنید. حالا شما یک برنامه تحت وب دارید. در حال حاضر به فکر ایجاد امکانات نباشید. در همین حد هم کاری زیادی خواهید کرد.قبل از اینکه ادامه بدهیم باید گریزی به مفاهیم خارج از JEE بزنیم. نوبت این است تا با ORM آشنا شویم. برای این موضوع هم باید اول یاد بگیرید که چگونه از طریق یک کتابخانه، Frameworkتولید می شود بعد به سراغ Hibernate بروید. به وسیله Maven می‌توانید به راحتی کتابخانه‌های خود را مدیریت کنید. برای استفاده از Hibernate باید مفاهیم Object Oriented را به خوبی فراگرفته باشید تا بتوانید هر جدول را به صورت یک شی در کد خود مدیریت کنید. تنها یاد بگیرید که چگونه یک کلاس به یک جدول مرتبط می‌شود، ارتباط با دیتابیس چگونه است و نحوه ذخیره و واکشی داده چگونه است. در مرحله بعدی پیاده سازی یک رابطه یک به یک، چند به یک یا برعکس را پیاده سازی کنید. این موارد ممکن است زمان زیادی را بگیرد اما باید بدانید که در تمام پروژه‌های آینده با این فریم‌ورک سر و کار خواهید داشت. دقت داشته باشید که حتما از Annotation ها استفاده کنید و از تنظیمات XML پرهیز کنید.حالا که بلدید با Hibernate کار کنید چطور است که کمی حرفه‌ای‌تر شویم و از JPA هم سر در بیاوریم. بعد از کمی تحقیق می فهیمد که همان Hibernate را دارید با یک لایه بیشتر امتحان میکنید و چیز عجیبی نیست.کمی برای EJB زود است صبر کنید.پیش از این با یک کد HTML و ساختن فرم ها توانستیم یک ورودی از کاربر بگیریم و وارد دیتابیس کنیم. حالا چطور است از JSF استفاده کنیم و قابلیت AJAX را به نرم افزار تحت وب خود اضافه کنیم؟ این Framework به شما قابلیت ایجاد نرم افزارهای تحت وب با قابلیت ها خیلی خوب را می‌دهد. می توانید JSF که به ظاهر فقط از کدهای HTML استفاده میکند و ظاهر بسیار زشتی دارد را با هر چیزی که می خواهید ترکیب کنید اما Primefaces تنها چیزی است که با آن به خوبی سازگار می شود. همه اینها را در یک پروژه ساده استفاده کنید و قابلیت‌ها بشناسید. صبر کنید تا مراحل بعدی را به شما معرفی کنم و اگر همچنان خواستید به JSF بازگردید.من از JSF و Primefaces بدم می‌آید. علت ؟ دلم می خواهد. دلیل منطقی برای آن در سطح شما نیست. از یکجایی به بعد تمام تلاشم را بر روی Javscript و یاد گرفتن تکنولوژی‌های Front گذاشتم. یاد گرفتم که از jQuery استفاده کنم و درخواست های UI به سرور را مدیریت کنم. بعد از آن Bootstrap یاد گرفتم. (تمام این ها را در یک پروژه سنگین بانکی یاد گرفتم که تنها یک نفر باید همه آن را انجام میدادم. این پروژه سال 94 انجام شده.) متوجه شدید که حالا وارد فضایی از تکنولوژی می‌شویم که برای پیاده سازی یک پروژه نه یک انتخاب بلکه چند انتخاب داریم و این کار را سخت میکند. اما تحقیق و مطالعه همیشه راهکار حل مشکل است. بروز باشید. شاید جالب باشد بدانید امروز دیگر از هیچ کدام استفاده نمیکنم و از materializeCSS و AngularJS استفاده میکنم.وقتی از JSF استفاده نمی کنید پس باید چیزی جای آن را بگیرد، پس سرویس‌های Rest را پیاده سازی کنید. کتابخانه های Jersey و RestEasy (درست نوشتم؟) را یاد بگیرید. از نسخه 1.9 jersey شروع کنید چرا که راحت تر و مقاله بیشتری برای آن تولید شده است. مفهوم MVC را حالا باید بدانید.بعد از این درس حالا با مفهوم وب سرویس آشنا هستید، یک سرویس SOAP چطور است؟ چگونه از آن استفاده کنیم؟ فرق آن با API را باید حالا بدانید.حالا شما می‌توانید نرم افزاری بنویسید که با کاربر در تعامل است. توسعه دهنده‌های جاوا دو دسته هستند، دسته اول EJB یاد میگیرند، دسته دوم با Spring کار میکنند. بعضی‌ها مثل من مجبورند هر دو را بلد باشند. دسته اول دنبال روی JEE هستند و دسته دوم فقط از مفاهیم JEE سر در میاورند و بعد از مدتی دیگر از مفاهیم اولیه آن استفاده نمیکنند و کار را تمام به Spring میسپارند. دسته اول اصولا مجبور به انجام تنظیماتی بیشتری هستند اما نه آنقدر زیاد که نتوانند کار کنند. حداقل از نسخه 6 به بعد. اما دسته بعدی....گام هفتم؛ Spring Bootزمانی بود که ما مجبور بودیم تمام عملیات‌های طاقت فرسا را تنظیم و بعد مدیریت کنیم. اما Spring Boot تمامی این دردسرها را پایان داده است. این پلتفرم اجازه می‌دهد تا شما تنها به کدهای مورد نیاز نرم افزار بپردازید و مسایلی مانند ارتباط با دیتابیس، مدیریت حافظه و ... را بهتر در اختیار خود گرفته (اجازه نمیدهد ما خرابکاری کنیم). در نتیجه امروز پروژه‌های بسیاری بر روی این پلتفرم ایجاد می‌شوند و از همه مهم‌تر اینکه ساختارهای Cloud که آینده را می‌سازند نیز از این فضا برای پیشبرد پروژه‌ها کمک میگیرند. من Spring Boot را با آموزش 4 ساعته‌ای که در سایت TreeHouse بود و از P30download دانلود کردم، یاد گرفتم و هر بار که نیاز به موضوع جدیدتر داشته باشم به مثال‌های خود Spring Boot مراجعه میکنم. بعد از این مرحله شما با Spring MVC, Spring IOC, Spring Security, Spring Data تقریبا آشنایی اولیه را خواهید داشت.من تمام پروژه‌های جدید را با این ساختار تولید میکنم.موارد دیگردستورات لینوکس را در حد ابتدای بشناسیداز JMS حداقل یکبار استفاده کنیداز JSON تا الان باید استفاده کرده باشیددیتابیس‌های دیگر مثل Mongo و oracle را هم امتحان کنید.از Freemarker برای مدیریت صفحات وب استفاده کنید (حداقل یکبار تا بدانید templating چیست)و البته هزاران ابزار و کتابخانه دیگر که شما می توانید یاد بگیرید و من اگر بنویسم این مطلب انتها نخواهد داشت.اما مهم تر از همه این است که شما معماری‌ها را نیز بشناسید.تفاوت‌های ساختاری و نحوه قرارگیری هر ماژول در کنار هم را بدانید. integration Point های یک مجموعه را بشناسید. نحوه مستند سازی را بیاموزید و هم چنین یاد بگیرید که چگونه از کد دیگران استفاده کنید. نتیجه‌گیریخیلی از موضوعات بود که اینجا حتی اشاره نکرده‌ام، این موضوعات چیزهایی هستند که شما تنها با کار و تجربه به آن خواهید رسید. شاید خیلی‌ها با من موافق نباشند و عقیده داشته باشند که باید کتاب‌ها را از سر تا ته بخوانیم. الگوریتم‌ها را حفظ کنیم و بدون اینترنت کد بزنیم. من اینطوری کار نکرده‌ام و بلد هم نیستم. خنده‌دار شاید باشد، اما این‌ها تمام چیزی است که لازم دارید تا بتوانید نرم‌افزارهای ساده و اولیه را تولید کنید. در حین کار متوجه خواهید شد که بسیاری از موارد را لازم دارید، کار با فایل، استفاده از کتابخانه‌هایی که دیگران نوشته‌اند، خواندن stackOverflow و شاید ده ها مطلب دیگر که حتی یک خط در مورد آن ننوشتم. من چند قانون را همیشه رعایت میکنم. 1- ساده فکر میکنم. 2- قبل از حل مشکل اول به سراغ دومی نمیروم.3-- اول ورژن ساده‌ای که قابلیت برطرف کردن نیاز مشتری را دارد ارایه می‌دهم بعد آن را بهبود می‌دهم. یکجا هیچ سیستمی را نمی‌توان عرضه کرد.4- دنبال راه‌هایی که قبلا جواب داده‌اند میروم و هر وقت در آن‌ها حرفه‌ای شدم راه خودم را میسازم.5- برای یاد گرفتن یک موضوع ساده‌ترین کدی که من را به نتیجه دلخواهم می رساند به صورت مستقل امتحان میکنم و بعد در نرم افزار از آن به صورت یک ماژول استفاده میکنم. 6- وقتی چیزی کار نمی‌کند، مسیر را عوض میکنم و یا آن را باز بینی می‌کنم. 7- در نهایت، هرگز شاخ نمی شوم و فکر نمیکنم که من ته دنیا هستم. فقط یکبار به این فکر کنید کسی که سیستم عامل لینوکس را تهیه کرده حتی یک درصد از ابزهای شما را نداشته و یا اینکه چیزی که بقیه تولید کرده‌اند گاها شما در استفاده از آن مشکل دارید و نمیدانید چه قابلیت‌هایی دارد.هر کدام از بندهایی که نوشتم حداقل چند روزی (اگر تیز باشید) شما را درگیر خواهد کرد. در ابتدای کار سعی کنید شکیبا باشید. هیچ کس با یک ماه و دو ماه نمی تواند این مطالب را یاد بگیرد. من یکسال طول کشید تا توانستم خودم یک نرم افزار را از صفر بنویسم و تازه کلی از کدهای آن کپی شده از پروژه‌های دیگران بود. این مطلب ممکن است به روز شود.