۱۳۹۱ اردیبهشت ۱۷, ۱۰:۳۳ ب.ظ
امروز جوملا نسخه 2.5 فارسی رو دانلود کردم تا بشینم جوملا یاد بگیرم.
واقعا برنامه نویسی کار سختیه و با این همه آدم جور واجور در سطوح و با دانش و مهارت مختلف که ریخته توش و این همه قیمت های پایین و کلاهبرداری که توش هست صرف نمیکنه آدم بخواد هر پروژه ای رو کدنویسی کنه.
بنظر من آدم هرچی هم سوادش بیشتر باشه درسته که قدرتش بیشتر میشه و از نظر شخصی بیشتر ارضاء میشه اما از نظر وجدان و فشار کاری مشکلات و پیچیدگی و فشار براش بیشتر میشه، چون خیلی چیزها رو میفهمه که احساس میکنه باید رعایت کنه و بین وجدان و کیفیت و پیشرفت علمی و پول و واقعیت ها گیر میکنه. مثلا بنده چون در زمینهء مسائل امنیتی خیلی مطالعه داشتم الان برای هر سیستم و هر خط کد کلی نکته و ایدهء امنیتی بنظرم میرسه که دیگران اونا رو نمیدونن و انجام نمیدن و حتی ظاهر برنامه هاشون سریعتر و تمیزتر و یوزرفرندلی تر هم میشه به همین خاطر!! درحالیکه اونا از دید من اصلا برنامه نیستن، ولی خودشون کلی هم حال میکنن که برنامه نویس شدن، و از این بابت انرژی میگیرن.
البته از طرفی هم مثلا بنده روی شیء گرایی و MVC تاحالا کار خاصی نکردم و در این زمینه نیاز به تحقیق و تمرین و تجربه دارم و ممکنه دیگران هم از این جهت از برنامه نویسی من ایراد بگیرن.
برنامه نویسی خیلی وسیع و پیچیده است و یاد گرفتن همه چیز اون واسه اینکه آدم واقعا در زمینهء گسترده ای توانایی واقعی داشته باشه سالها طول میکشه. بنظر من اگر بخوایم در چند حیطه کارایی داشته باشیم، ذکر زمانی برابر با 10 سال برای یادگیری تئوریک و عملی اغراق نیست. چون خیلی مطالعات و خوندن رفرنس ها هم نیاز هست. باید پروتکل خوند. زبان یاد گرفت. رمزنگاری رو مطالعه کرد. الگوریتم ها رو مطالعه کرد. استانداردها رو خوند. فناوریهای مختلف. حمله های مختلف و روشهای جلوگیری. حیطه های مختلف مثل وب و دستکاپ. و مقداری هم آپدیت در طول زمان.
از نظر سابقه و آشنایی قبلا با CMS مامبو کار کرده بودم. تقریبا ساده بود و در کمتر از یک هفته تونستم یادگیریش رو جمع و جور کنم و پروژه ای رو که قرار بود تحویل بدم در زمان مقرر انجام بدم. اگر میخواستم کد بنویسم بیشتر طول میکشید و کیفیت و امکانات کار هم کمتر میبود و تازه یک ابزار و قابلیت جدید هم بدست نمیاوردم.
اما ظاهرا مامبو بهترین انتخاب نبود. بعد از مقداری پرس و جو یکی بهم گفت برو دنبال مامبو که منم رفتم دنبالش. اما بعدا متوجه شدم ظاهرا جوملا چیز خیلی بهتریه و کاربران خیلی بیشتری داره. راستش من خودمم چیزهایی از مامبو دیدم و کدهاش رو هم نگاه کردم بنظرم ناشی گری هایی درش دیده میشد و کدهاش رو انگار افراد ناشی نوشته بودن. مثلا برای یک جایی که میخواستی با CSS استایل بدی به یک بخشی از اون، برای عنصر مورد نظر هیچ id یا class ای نذاشته بودن و هرچی هم گشتم نتونستم جایی که اون کد رو خروجی میداد پیدا کنم (البته اگر بیشتر میگشتم و تحقیق میکردم شاید پیدا میشد، ولی بهرحال این بنظر بنده یک نقص طراحی بود). یا مثلا برای یک چیز ساده ای مثل اینکه بین مطالب مجزا خط بندازی امکانی نداشت (تاجاییکه دیدم و پرسیدم) و در خروجی استاندارد خودش تفکیک راحت و سریع مطالب از هم مشکل بود، اما خوشبختانه در این مورد موفق شدم خودم در کد منبع چنین امکانی رو اضافه کنم.
تاجاییکه یادمه، البته اون زمان و اون نسخه، خبری هم از شیء گرایی و MVC و این حرفا نبود در کدهاش.
حالا بریم سراغ جوملا ببینیم چیه.
کسانی که تجربه دارن میتونن بگن تفاوت و شباهت های میان مامبو و جوملا چیه.
ظاهرا جوملا در زمینهء شیء گرایی و MVC هم خیلی خوب کار کرده تا جاییکه امروز یه نگاهی به ساختار فایلها و کدهاش انداختم.
البته جوملا هم مثل خیلی از پروژه های دیگه از ابتدا اینقدر کامل و اصولی و دقیق نبوده و به مرور تکامل و پیشرفت پیدا کرده. مثلا در نسخه های قدیمی تر شیء گرا نبوده.
بنظرم این نکته ای هست که باید درنظر داشته باشیم و فکر نکنیم لزوما هر برنامه ای باید از ابتدا شبیه نسخه های آخر برنامه های معروف و پیشرفته باشه. شاید اینطور اصلا بهینه نباشه. مثلا وقتی هنوز کلیت و الگوریتم و امنیت یک برنامه ای کار داره و دید و مهارت و تجربهء کافی نسبت بهش بدست نیامده، بنظرم این بهینه نیست که خیلی وقت و انرژی روی چیزهایی مثل شیء گرایی و MVC و بهینه سازی کامل و پیشرفته اون صرف بشه، در عین اینکه احتمال تغییرات وسیع و ساختاری در نسخه های آیندهء اون هم خیلی زیاده بطور طبیعی و ممکنه کلی از وقت و انرژی صرف شده عملا به هدر بره.
بنظر من یک برنامه باید بصورت متعادل و طبیعی پیشرفت کنه و کامل بشه؛ یعنی این روش بهینه است که درمورد اکثر یا خیلی از برنامه های معروف و موفق هم دیده میشه. اگر ما یک برنامه داشته باشیم که در ظاهر خیلی پیشرفته است اما مثلا شیء گرایی و MVC اون خیلی کاملتر و دقیقتر از امنیت و الگوریتم ها و امکانات اون باشه، این کار چندان عاقلانه بنظر نمیرسه. و بنظر بنده اصولی تر اینه که اول امنیت و امکانات و کمال و دقت الگوریتم ها تا یک حد حداقلی برسن. چون اینا هسته ای هستن که در نهایت کارها رو انجام میدن و یک برنامه بدون چیزهای دیگه هم میتونه کار رو درست انجام بده، اما بدون امنیت و الگوریتم اصولی نمیتونه کار رو درست انجام بده. مثل اینکه بدنهء اتومبیل پورشه رو بذارید روی شاسی و موتور پیکان! همینطور یادگیری خود برنامه نویسها هم باید اینطور باشه. چون الان میبینی همه از شیء گرایی و MVC و کلی از اینطور حرفها و اصطلاحات قلمبه سلمبهء دیگه صحبت میکنن، طوری که انگار همه چیز رو بقدر خوب بلدن و فقط مونده مدیریت و توسعهء برنامه های بزرگ و مهم، درحالیکه فکر میکنم بتونید تایید کنید که در واقعیت درمورد خیلی افراد اینطور نیست. پس آدم هرچیزی رو باید بصورت متعادل و طبیعی پیش ببره و تمام پله ها باید طی بشن، نه اینکه هنوز پلهء اول رو کامل نکرده بپریم به پلهء دهم. باید بدونیم واقعا چه مراحل و پایه ها و اولویت هایی به چه ترتیب و اهمیتی در برنامه نویسی وجود دارن، و اونا رو به همون ترتیب طی کنیم و بصورت متعادل دانش و مهارت های خودمون رو افزایش بدیم. باید توجه داشت بعضی موارد نسبت به موارد دیگه ساده تره و/یا از نظر ظاهری سریعتر به نتایج و نمودهای عملی میرسه که طبیعتا آدم رو وسوسه میکنن که چیزهای دیگر رو رها کنه یا ازشون کم بذاره و به سمت چیزهای ساده تر بره. معمولا افراد تمایل دارن دنبال چیزی برن که هرچه سریعتر با کد و ایجاد برنامه درگیر و منجر میشه، چون علی الظاهر این موفقیت و کاربرد عملی است، و احتمالا میشه ازش پول هم درآورد یا اعتبار کسب کرد. البته کار کردن عملی و روی کد و برنامه خوبه و انگیزه میده، اما باید توجه داشت که این فقط 50% تمام چیزهای موجود و مورد نیاز در این علم و فناوری گسترده و پیچیده رو تامین میکنه. یک بخش بزرگ و مهمی هم هست که با تئوری و مطالعات گسترده و پیچیده و حجیم بدست میاد، نه با صرف کد زدن و کد دیدن.
بهرحال بنظر بنده اگر تمام مردم این واقعیت ها رو میدونستن و میخواستن رعایت کنن، احتمالا خیلی از افرادی که وارد برنامه نویسی شدن چنین تصمیمی نمیگرفتن. هرکسی این علاقه و پشتکار و فرصت و شرایط مورد نیاز رو نداره که این راه سخت و طولانی رو طی کنه.
بنظر بنده استفاده از چیزهایی مثل CMS در این بین خیلی خوب و به صرفه است. چون هم از نظر فنی و امنیت و امکانات در سطح بهتری هستن (نسبت به کارهای شخصی خیلی افراد) و هم از نظر صرفه و عدم اتلاف وقت و انرژی ارزشمند استفاده از اونا کاملا معقوله. بجای اینکه مدام کدهای کم ارزش و کم کیفیت و تکراری سرهم کنیم میتونیم وقت و انرژی خودمون رو روی کارهای خلاق تر و مهمتر و مفیدتر و پیشرفته تر و یادگیری و آپدیت تئوریک روز افزون صرف کنیم. واقعا این همه کد زدن و برنامه های مشابه نوشتن تاجاییکه عملا دیدم موجب نمیشه آدمها سریع و زیاد پیشرفت کنن. شاید در نوشتن برنامه های تجاری و کلیشه ای دستشون باز و راحت و سریع بشه و کمی هم به پیشرفت اطلاعاتی و فنی و کیفیت بالاتر برسن، اما بازم در خیلی موارد بهینه و کافی نیست بنظر بنده و خیلی موارد تکراری و نه چندان خلاق در کارهای تجاری وجود داره و میزان یادگیری حداکثری نیست؛ و بسیاری ضعفها و نقصها در برنامه نویسان و کارهاشون میتونه همچنان حتی بعد از سالها تجربه و انبوهی کد زدن باقی بمونه و حتی متوجه هم نباشن.
واقعا برنامه نویسی کار سختیه و با این همه آدم جور واجور در سطوح و با دانش و مهارت مختلف که ریخته توش و این همه قیمت های پایین و کلاهبرداری که توش هست صرف نمیکنه آدم بخواد هر پروژه ای رو کدنویسی کنه.
بنظر من آدم هرچی هم سوادش بیشتر باشه درسته که قدرتش بیشتر میشه و از نظر شخصی بیشتر ارضاء میشه اما از نظر وجدان و فشار کاری مشکلات و پیچیدگی و فشار براش بیشتر میشه، چون خیلی چیزها رو میفهمه که احساس میکنه باید رعایت کنه و بین وجدان و کیفیت و پیشرفت علمی و پول و واقعیت ها گیر میکنه. مثلا بنده چون در زمینهء مسائل امنیتی خیلی مطالعه داشتم الان برای هر سیستم و هر خط کد کلی نکته و ایدهء امنیتی بنظرم میرسه که دیگران اونا رو نمیدونن و انجام نمیدن و حتی ظاهر برنامه هاشون سریعتر و تمیزتر و یوزرفرندلی تر هم میشه به همین خاطر!! درحالیکه اونا از دید من اصلا برنامه نیستن، ولی خودشون کلی هم حال میکنن که برنامه نویس شدن، و از این بابت انرژی میگیرن.
البته از طرفی هم مثلا بنده روی شیء گرایی و MVC تاحالا کار خاصی نکردم و در این زمینه نیاز به تحقیق و تمرین و تجربه دارم و ممکنه دیگران هم از این جهت از برنامه نویسی من ایراد بگیرن.
برنامه نویسی خیلی وسیع و پیچیده است و یاد گرفتن همه چیز اون واسه اینکه آدم واقعا در زمینهء گسترده ای توانایی واقعی داشته باشه سالها طول میکشه. بنظر من اگر بخوایم در چند حیطه کارایی داشته باشیم، ذکر زمانی برابر با 10 سال برای یادگیری تئوریک و عملی اغراق نیست. چون خیلی مطالعات و خوندن رفرنس ها هم نیاز هست. باید پروتکل خوند. زبان یاد گرفت. رمزنگاری رو مطالعه کرد. الگوریتم ها رو مطالعه کرد. استانداردها رو خوند. فناوریهای مختلف. حمله های مختلف و روشهای جلوگیری. حیطه های مختلف مثل وب و دستکاپ. و مقداری هم آپدیت در طول زمان.
از نظر سابقه و آشنایی قبلا با CMS مامبو کار کرده بودم. تقریبا ساده بود و در کمتر از یک هفته تونستم یادگیریش رو جمع و جور کنم و پروژه ای رو که قرار بود تحویل بدم در زمان مقرر انجام بدم. اگر میخواستم کد بنویسم بیشتر طول میکشید و کیفیت و امکانات کار هم کمتر میبود و تازه یک ابزار و قابلیت جدید هم بدست نمیاوردم.
اما ظاهرا مامبو بهترین انتخاب نبود. بعد از مقداری پرس و جو یکی بهم گفت برو دنبال مامبو که منم رفتم دنبالش. اما بعدا متوجه شدم ظاهرا جوملا چیز خیلی بهتریه و کاربران خیلی بیشتری داره. راستش من خودمم چیزهایی از مامبو دیدم و کدهاش رو هم نگاه کردم بنظرم ناشی گری هایی درش دیده میشد و کدهاش رو انگار افراد ناشی نوشته بودن. مثلا برای یک جایی که میخواستی با CSS استایل بدی به یک بخشی از اون، برای عنصر مورد نظر هیچ id یا class ای نذاشته بودن و هرچی هم گشتم نتونستم جایی که اون کد رو خروجی میداد پیدا کنم (البته اگر بیشتر میگشتم و تحقیق میکردم شاید پیدا میشد، ولی بهرحال این بنظر بنده یک نقص طراحی بود). یا مثلا برای یک چیز ساده ای مثل اینکه بین مطالب مجزا خط بندازی امکانی نداشت (تاجاییکه دیدم و پرسیدم) و در خروجی استاندارد خودش تفکیک راحت و سریع مطالب از هم مشکل بود، اما خوشبختانه در این مورد موفق شدم خودم در کد منبع چنین امکانی رو اضافه کنم.
تاجاییکه یادمه، البته اون زمان و اون نسخه، خبری هم از شیء گرایی و MVC و این حرفا نبود در کدهاش.
حالا بریم سراغ جوملا ببینیم چیه.
کسانی که تجربه دارن میتونن بگن تفاوت و شباهت های میان مامبو و جوملا چیه.
ظاهرا جوملا در زمینهء شیء گرایی و MVC هم خیلی خوب کار کرده تا جاییکه امروز یه نگاهی به ساختار فایلها و کدهاش انداختم.
البته جوملا هم مثل خیلی از پروژه های دیگه از ابتدا اینقدر کامل و اصولی و دقیق نبوده و به مرور تکامل و پیشرفت پیدا کرده. مثلا در نسخه های قدیمی تر شیء گرا نبوده.
بنظرم این نکته ای هست که باید درنظر داشته باشیم و فکر نکنیم لزوما هر برنامه ای باید از ابتدا شبیه نسخه های آخر برنامه های معروف و پیشرفته باشه. شاید اینطور اصلا بهینه نباشه. مثلا وقتی هنوز کلیت و الگوریتم و امنیت یک برنامه ای کار داره و دید و مهارت و تجربهء کافی نسبت بهش بدست نیامده، بنظرم این بهینه نیست که خیلی وقت و انرژی روی چیزهایی مثل شیء گرایی و MVC و بهینه سازی کامل و پیشرفته اون صرف بشه، در عین اینکه احتمال تغییرات وسیع و ساختاری در نسخه های آیندهء اون هم خیلی زیاده بطور طبیعی و ممکنه کلی از وقت و انرژی صرف شده عملا به هدر بره.
بنظر من یک برنامه باید بصورت متعادل و طبیعی پیشرفت کنه و کامل بشه؛ یعنی این روش بهینه است که درمورد اکثر یا خیلی از برنامه های معروف و موفق هم دیده میشه. اگر ما یک برنامه داشته باشیم که در ظاهر خیلی پیشرفته است اما مثلا شیء گرایی و MVC اون خیلی کاملتر و دقیقتر از امنیت و الگوریتم ها و امکانات اون باشه، این کار چندان عاقلانه بنظر نمیرسه. و بنظر بنده اصولی تر اینه که اول امنیت و امکانات و کمال و دقت الگوریتم ها تا یک حد حداقلی برسن. چون اینا هسته ای هستن که در نهایت کارها رو انجام میدن و یک برنامه بدون چیزهای دیگه هم میتونه کار رو درست انجام بده، اما بدون امنیت و الگوریتم اصولی نمیتونه کار رو درست انجام بده. مثل اینکه بدنهء اتومبیل پورشه رو بذارید روی شاسی و موتور پیکان! همینطور یادگیری خود برنامه نویسها هم باید اینطور باشه. چون الان میبینی همه از شیء گرایی و MVC و کلی از اینطور حرفها و اصطلاحات قلمبه سلمبهء دیگه صحبت میکنن، طوری که انگار همه چیز رو بقدر خوب بلدن و فقط مونده مدیریت و توسعهء برنامه های بزرگ و مهم، درحالیکه فکر میکنم بتونید تایید کنید که در واقعیت درمورد خیلی افراد اینطور نیست. پس آدم هرچیزی رو باید بصورت متعادل و طبیعی پیش ببره و تمام پله ها باید طی بشن، نه اینکه هنوز پلهء اول رو کامل نکرده بپریم به پلهء دهم. باید بدونیم واقعا چه مراحل و پایه ها و اولویت هایی به چه ترتیب و اهمیتی در برنامه نویسی وجود دارن، و اونا رو به همون ترتیب طی کنیم و بصورت متعادل دانش و مهارت های خودمون رو افزایش بدیم. باید توجه داشت بعضی موارد نسبت به موارد دیگه ساده تره و/یا از نظر ظاهری سریعتر به نتایج و نمودهای عملی میرسه که طبیعتا آدم رو وسوسه میکنن که چیزهای دیگر رو رها کنه یا ازشون کم بذاره و به سمت چیزهای ساده تر بره. معمولا افراد تمایل دارن دنبال چیزی برن که هرچه سریعتر با کد و ایجاد برنامه درگیر و منجر میشه، چون علی الظاهر این موفقیت و کاربرد عملی است، و احتمالا میشه ازش پول هم درآورد یا اعتبار کسب کرد. البته کار کردن عملی و روی کد و برنامه خوبه و انگیزه میده، اما باید توجه داشت که این فقط 50% تمام چیزهای موجود و مورد نیاز در این علم و فناوری گسترده و پیچیده رو تامین میکنه. یک بخش بزرگ و مهمی هم هست که با تئوری و مطالعات گسترده و پیچیده و حجیم بدست میاد، نه با صرف کد زدن و کد دیدن.
بهرحال بنظر بنده اگر تمام مردم این واقعیت ها رو میدونستن و میخواستن رعایت کنن، احتمالا خیلی از افرادی که وارد برنامه نویسی شدن چنین تصمیمی نمیگرفتن. هرکسی این علاقه و پشتکار و فرصت و شرایط مورد نیاز رو نداره که این راه سخت و طولانی رو طی کنه.
بنظر بنده استفاده از چیزهایی مثل CMS در این بین خیلی خوب و به صرفه است. چون هم از نظر فنی و امنیت و امکانات در سطح بهتری هستن (نسبت به کارهای شخصی خیلی افراد) و هم از نظر صرفه و عدم اتلاف وقت و انرژی ارزشمند استفاده از اونا کاملا معقوله. بجای اینکه مدام کدهای کم ارزش و کم کیفیت و تکراری سرهم کنیم میتونیم وقت و انرژی خودمون رو روی کارهای خلاق تر و مهمتر و مفیدتر و پیشرفته تر و یادگیری و آپدیت تئوریک روز افزون صرف کنیم. واقعا این همه کد زدن و برنامه های مشابه نوشتن تاجاییکه عملا دیدم موجب نمیشه آدمها سریع و زیاد پیشرفت کنن. شاید در نوشتن برنامه های تجاری و کلیشه ای دستشون باز و راحت و سریع بشه و کمی هم به پیشرفت اطلاعاتی و فنی و کیفیت بالاتر برسن، اما بازم در خیلی موارد بهینه و کافی نیست بنظر بنده و خیلی موارد تکراری و نه چندان خلاق در کارهای تجاری وجود داره و میزان یادگیری حداکثری نیست؛ و بسیاری ضعفها و نقصها در برنامه نویسان و کارهاشون میتونه همچنان حتی بعد از سالها تجربه و انبوهی کد زدن باقی بمونه و حتی متوجه هم نباشن.
God knows