<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Mohammad Mohammadi</title>
        <link>https://virgool.io/feed/@mohammadim48</link>
        <description>فعلا بیشتر میخونم</description>
        <language>fa</language>
        <pubDate>2026-06-19 11:49:57</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/198016/avatar/7QoHqa.jpeg?height=120&amp;width=120</url>
            <title>Mohammad Mohammadi</title>
            <link>https://virgool.io/@mohammadim48</link>
        </image>

                    <item>
                <title>آموزش Angular SSR از صفر</title>
                <link>https://virgool.io/@mohammadim48/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-angular-ssr-%D8%A7%D8%B2-%D8%B5%D9%81%D8%B1-sfnmtl8poll6</link>
                <description>سلام، Server-Side Rendering (SSR) در منظر توسعه وب مدرن بیشتر از یک کلمه متداول است. این نقش اساسی در بهبود عملکرد یک برنامه وب و بهینه‌سازی موتور جستجو (SEO) دارد. اگر از Angular، چارچوب محبوب گوگل برای ایجاد برنامه‌های مشتری-سمت استفاده می‌کنید، شانس خوبی دارید! Angular دارای پشتیبانی داخلی برای SSR از طریق Angular Universal است. بیایید به جزئیات فنی پیاده‌سازی رندرینگ سمت سرور در برنامه‌های Angular پرداخته و ببینیم که Angular Universal چیست؟آنگولار یونیورسال چیست؟آنگولار یونیورسال مشابه یک ابزار چاقوی سوئیسی برای اجرای برنامه‌های آنگولار شما در سرور است. این ابزار تمام تنظیمات و رابط‌های مورد نیاز برای رندرینگ سمت سرور (SSR) را گروه‌بندی می‌کند و به طور قابل توجهی فرآیند ایجاد برنامه‌های وب با عملکرد بالا و مناسب برای موتورهای جستجویی و سئو را ساده‌تر می‌کند. حتی اگر برنامه‌ی آنگولار موجودی داشته باشید، می‌توانید با استفاده از چند دستور CLI ساده به آنگولار یونیورسال اضافه کنید.چرا نیاز به رندرینگ سمت سرور داریم؟مزایای سئوهرچند موتور جستجوی گوگل می‌تواند صفحات وب مبتنی بر جاوااسکریپت را جستجو کرده و نمایه‌گذاری کند، اما موتورهای جستجوی دیگر ممکن است در این زمینه عقب‌افتاده باشند. استفاده از رندرینگ سمت سرور قابلیت‌های سئوی برنامه‌ی شما را با تولید محتوای ضروری در سرور بهبود می‌بخشد و امکان پیدا شدن آسان‌تر توسط ربات‌های موتورهای جستجو را فراهم می‌کند.سریع‌ترین نمایش محتوای اولیه (FCP)رندرینگ سمت سرور به سرور اجازه می‌دهد تا مارکاپ HTML اولیه را تولید کند. به عبارت دیگر، کاربران سریعتر یک رابط کاربری پر شده را مشاهده می‌کنند که اثر مثبتی بر بقای کاربران و اشتیاق آن‌ها دارد.بارگذاری بهینه‌سازی شده سمت مشتریرندرینگ سمت سرور برخی از وظایف محاسباتی را از سمت مشتری به سمت سرور منتقل می‌کند، که برنامه‌های وب شما را برای کاربرانی با دستگاه‌های ضعیف یا شرایط شبکه کم‌سرعت قابل دسترسی تر می‌کند.ایجاد کردن پروژه جدیدبرای ایجاد یک پروژه Angular جدید:ng new project-nameدر داخل این پروژه، بسته‌های زیر را دانلود کنید و Angular Universal را اضافه کنید:perlCopy codecd project-name
npm install --save @angular/platform-server @nguniversal/module-map-ngfactory-loader ts-loader@3.5.0 express
ng generate universal project-nameاین دستورات فایل‌های زیر را ایجاد و به‌روز می‌کنند:ایجاد src/app/app.server.module.tsایجاد src/main.server.tsایجاد src/tsconfig.server.jsonبه‌روزرسانی package.jsonبه‌روزرسانی .angular-cli.jsonبه‌روزرسانی src/main.tsبه‌روزرسانی src/app/app.module.tsبه‌روزرسانی .gitignoreماژول‌ها: اکنون دو ماژول ریشه جداگانه دارید: app.server.module.ts و app.module.ts. ماژول سرور، ServerModule را از بسته @angular/platform-server وارد می‌کند. ماژول مرورگر، متد withServerTransition() از BrowserModule را فراخوانی می‌کند که به Angular اطلاع می‌دهد ما از رندر سمت سرور استفاده می‌کنیم و باید نمایش تا زمانی که چارچوب کامل بارگذاری شود تعویض شود.نقطه ورود: شما همچنین دو نقطه ورود برای برنامه دارید: src/main.ts و src/main.server.ts. این آخری نقطه ورود برای سرور است و به سادگی ماژول سرور ما را صدا می‌زند.فایل‌های پیکربندی: برای اعلام به کامپایلر Angular که دو ماژول ورود داریم، فایل tsconfig.server.json ایجاد می‌شود. tsconfig.app.json نیز برنامه مرورگر را کامپایل می‌کند.Angular CLI: در فایل angular-cli.json، یک پروفایل دوم برای مجموعه سرور اضافه می‌شود.بوت‌استراپ: فایل main.ts شما با تابع زیر به‌روزرسانی می‌شود:javascriptCopy codedocument.addEventListener(&#039;DOMContentLoaded&#039;, () =&gt; {
   platformBrowserDynamic().bootstrapModule(AppModule)
   .catch(err =&gt; console.log(err));
});این کار برای اطمینان از اینکه برنامه Angular پس از بارگذاری DOM بوت‌استراپ می‌شود انجام می‌شود. منطق بوت‌استراپ برنامه در داخل رویداد DOMContentLoaded قرار داده می‌شود.Node Serverبعداً، شما باید یک سرور در دایرکتوری اصلی برنامه ایجاد کنید. این فایل از فایل جاوااسکریپتی استفاده می‌کند که با اجرای دستور npm run build:ssr با استفاده از برنامه سروری که در فایل .angular-cli.json تنظیم شده است تولید شده است. سپس به صفحه index.html اعمال می‌شود. یک فایل server.ts در دایرکتوری اصلی پروژه خود ایجاد کنید و کد زیر را اضافه کنید:// These are important and needed before anything else
import &#039;zone.js/dist/zone-node&#039;;
import &#039;reflect-metadata&#039;;

import { renderModuleFactory } from &#039;@angular/platform-server&#039;;
import { enableProdMode } from &#039;@angular/core&#039;;

import * as express from &#039;express&#039;;
import { join } from &#039;path&#039;;
import { readFileSync } from &#039;fs&#039;;

// Faster server renders w/ Prod mode (dev mode never needed)
enableProdMode();

// Express server
const app = express();

const PORT = process.env.PORT || 4201;
const DIST_FOLDER = join(process.cwd(), &#039;dist&#039;);

// Our index.html we&#039;ll use as our template
const template = readFileSync(join(DIST_FOLDER, &#039;index.html&#039;)).toString();

// * NOTE :: leave this as require() since this file is built Dynamically from webpack
const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require(&#039;./dist-server/main.bundle&#039;);

const { provideModuleMap } = require(&#039;@nguniversal/module-map-ngfactory-loader&#039;);

app.engine(&#039;html&#039;, (_, options, callback) =&gt; {
  renderModuleFactory(AppServerModuleNgFactory, {
    // Our index.html
    document: template,
    url: options.req.url,
    // DI so that we can get lazy-loading to work differently (since we need it to just instantly render it)
    extraProviders: [
      provideModuleMap(LAZY_MODULE_MAP)
    ]
  }).then(html =&gt; {
    callback(null, html);
  });
});

app.set(&#039;view engine&#039;, &#039;html&#039;);
app.set(&#039;views&#039;, DIST_FOLDER);

// Server static files from dist folder
app.get(&#039;*.*&#039;, express.static(DIST_FOLDER));

// All regular routes use the Universal engine
app.get(&#039;*&#039;, (req, res) =&gt; {
  res.render(&#039;index&#039;, { req });
});

// Start up the Node server
app.listen(PORT, () =&gt; {
  console.log(`Node server listening on http://localhost:${PORT}`);
});فایل server.ts به یک تنظیمات webpack نیاز دارد تا فایل جاوااسکریپتی را تولید کند که در سرور اجرا شود. یک فایل به نام webpack.server.config.js در دایرکتوری اصلی برنامه‌ی خود ایجاد کنید و کد زیر را به آن اضافه کنید:const path = require(&#039;path&#039;);
const webpack = require(&#039;webpack&#039;);
 
module.exports = {
    entry: { server: &#039;./server.ts&#039; },
    resolve: { extensions: [&#039;.ts&#039;, &#039;.js&#039;] },
    target: &#039;node&#039;,
    // this makes sure we include node_modules and other 3rd party libraries
    externals: [/(node_modules|main\..*\.js)/],
    output: {
        path: path.join(__dirname, &#039;dist&#039;),
        filename: &#039;[name].js&#039;
    },
    module: {
        rules: [
            { test: /\.ts$/, loader: &#039;ts-loader&#039; }
        ]
    },
    plugins: [
        // Temporary Fix for issue: https://github.com/angular/angular/issues/11580
        // for &amp;quotWARNING Critical dependency: the request of a dependency is an expression&amp;quot
        new webpack.ContextReplacementPlugin(
            /(.+)?angular(\\|\/)core(.+)?/,
            path.join(__dirname, &#039;src&#039;), // location of your src
            {} // a map of your routes
        ),
        new webpack.ContextReplacementPlugin(
            /(.+)?express(\\|\/)(.+)?/,
            path.join(__dirname, &#039;src&#039;)
        )
    ]
};به فایل package.json خود، دستورات زیر را به آرایه‌ی scripts اضافه کنید:&quot;build:ssr&quot;: &quot;npm run build:client-and-server-bundles &amp;&amp; npm run webpack:server&quot;,&quot;serve:ssr&quot;: &quot;node dist/server.js&quot;,&quot;build:client-and-server-bundles&quot;: &quot;ng build --prod &amp;&amp; ng build --prod --app 1 --output-hashing=false&quot;,&quot;webpack:server&quot;: &quot;webpack --config webpack.server.config.js --progress --colors&quot;اول npm run build:ssr را اجرا کنید و وقتی که انجام شد، npm run serve:ssr را اجرا کنید. برنامه‌ی شما باید روی localhost:4201 اجرا شود.انتقال وضعیت (Transfer State)زمانی که از Angular Universal استفاده می‌کنیم، API که محتوا را ارائه می‌دهد دو بار ترکیب می‌شود. اولین بار زمانی که سرور صفحه را پردازش می‌کند و دومین بار زمانی که برنامه راه‌اندازی می‌شود. این امر باعث مشکلات تأخیر و تجربه‌ی کاربری نامطلوبی می‌شود زیرا صفحه معمولاً وقتی این اتفاق می‌افتد، چشمک می‌زند. برای مشاهده نمودار زیر، به تصویر زیر نگاه کنید تا ببینید که چگونه کار می‌کند:ما می‌توانیم از سرویس TransferState برای ارسال اطلاعات از سرور به مشتری استفاده کنیم، که از ایجاد تماس‌های API تکراری جلوگیری می‌کند. مشاهده کنید که این چگونه کار می‌کند:در اینجا اطلاعات داده شده در مورد استفاده از سرویس TransferState در برنامه‌ی ما ترجمه شده است:&quot;بیایید در برنامه‌ی ما از سرویس TransferState استفاده کنیم. در فایل app.module.ts، ماژول BrowserTransferStateModule را وارد کنید:imports: [
BrowserModule.withServerTransition({ appId: &#039;my-app&#039; }),
BrowserTransferStateModule,
]
در فایل app.server.module.ts، ماژول ServerTransferStateModule را وارد کنید:```typescript
import { ServerModule, ServerTransferStateModule } from &#039;@angular/platform-server&#039;;
imports: [
  AppModule,
  ServerModule,
  ServerTransferStateModule,
 ...
]می‌توانید از تابع makeStateKey برای ایجاد یک کلید برای ذخیره داده‌ها در وضعیت (که به مرور به مرورگر منتقل می‌شود) استفاده کنید. شما از this.state.get برای دریافت داده از وضعیت و this.state.set برای تنظیم داده در وضعیت استفاده خواهید کرد. وقتی یک فراخوانی API انجام می‌شود، داده‌های بازگشتی را با استفاده از کلیدی که با makeStateKey ایجاد کرده‌اید در وضعیت ذخیره خواهید کرد.در فایلی که دارید از API استفاده می‌کنید، ماژول‌های TransferState و makeStateKey را وارد کنید:```typescript
import { TransferState, makeStateKey } from &#039;@angular/platform-browser&#039;;
```سرویس TransferState را در تابع سازنده‌ی خود درج کنید:```typescript
constructor(
   private state: TransferState,
  ...
) {}
```کلیدها را برای ذخیره داده‌های خود ایجاد کنید:const KEY_NAME = makeStateKey(&#039;variable_name&#039;);در داخل تابعی که به API فراخوانی می‌کنید، داده‌های خود را از وضعیت با استفاده از this.state.get دریافت کنید. اگر مشخصات یافت نشود، فراخوانی HTTP خود را انجام دهید. وقتی داده‌های خود را از فراخوانی HTTP دریافت کردید، آن را با استفاده از this.state.set در وضعیت ذخیره کنید.functionName() {
   let variable_name = this.state.get(KEY_NAME, null as any);
   if (variable_name) {
     return Observable.of(variable_name);
   }
   return this.http.get(&#039;url&#039;)
     ...
     this.state.set(KEY_NAME, variable_name as any);
    return variable_name;
 }حالا سمت مشتری شما هنگام بازگشت داده از سرور رندرینگ، چون در وضعیت ذخیره شده است، فراخوانی HTTP انجام نخواهد داد.&quot;</description>
                <category>Mohammad Mohammadi</category>
                <author>Mohammad Mohammadi</author>
                <pubDate>Tue, 26 Sep 2023 12:45:29 +0330</pubDate>
            </item>
                    <item>
                <title>داستان من، FOMO و Threads -قسمت اول</title>
                <link>https://virgool.io/@mohammadim48/%D8%AF%D8%A7%D8%B3%D8%AA%D8%A7%D9%86-%D9%85%D9%86-fomo-%D9%88-threads-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-cj7dsl2ufrnc</link>
                <description>داستان ترسی که زندگی هامونو داره کنترل میکنه!تقریبا از وقتی پام رو به دنیای عجیب غریب اینترنت گذاشتم با دو تا موضوع آشنا شدم.یکی بلاگفا(جایی بود که وبلاگ میساختیم و مینوشتیم) یکی هم یاهومسنجر!با اینترنت dial-up متصل میشدیم به اینترنت و قدر لحظه به لحظه کارت اینترنت هامون رو میدونستیم.اون زمان وقتی فامیل میفهمید که تو میری! اینترنت اولین چیزی که ذهنشون نقش میبست این بود که صد در صد یا داری یه دختر رو از راه به در میکنی یا یکی داره تو رو از راه به در میکنه :)بعد از گذشت مدتی، به یادم می‌آید که فیسبوک در ایران محبوب شد. فیسبوک با یاهو مسنجر تفاوت‌های زیادی داشت و برای اولین بار، یک موضوع به نام &quot;کی لایکش بیشتره&quot; مطرح شد. از آن زمان مدت زیادی گذشته و سرعت اینترنت بسیار تغییر کرده است. در واقع، من حس می‌کنم که بر خلاف آن چه در سال‌های گذشته بود، امروزه سرعت اینترنت دیگر دغدغه اصلی مردم نیست (اگر فیلترینگ را در نظر نگیریم!). البته ارتقاء سرعت اینترنت همواره مورد استقبال قرار می‌گیرد، اما حداقل دیگر نیازی به صبر کردن یک دقیقه برای مشاهده یک عکس در فیسبوک نداریم:)کارت اینترنت های ساعتیدر طول این سال‌ها، بسیاری از شبکه‌های اجتماعی معروف شده‌اند و میلیون‌ها کاربر جذب کرده‌اند، که به تدریج به ارشیو تاریخ ما پیوسته‌اند. مهاجرت های دسته جمعی ما ایرانی ها هم یک شبکه اجتماعی به شبکه اجتماعی دیگر خیلی جالب است مثلا در کمتر از یک هفته انتقال اکثریت مردم از وایبر به تلگرام صورت گرفت!بدون کوچیک ترین تبلیغ رسمی از طرف جایی برای تلگرام!وقتی که هنوز به تلگرام میگفتیم تلگِرام به صورت خودجوش همگی نصبش کردیم.یکی از مشکلات وایبر این بود که فقط از استیکر های خودشون میشد استفاده کرد.یادمه برای عید نوروز همون سال ها استیکر های &quot;نوروزی&quot; اضافه کرده بودن به وایبر و ما ملت بیدار ایرانی هم تا ماه از اون استیکر های نوروزی استفاده میکردیم،صرفا چون فارسی بود،مثلا وسط آبان ماه به پایان مکالمه با همکارت استیکر &quot;سال خوبی داشته باشید&quot; میفرستادیم و عشق میکردیم :))خب منم اون زمان برنامه نویس اندروید بودم و به این فکر کردم چرا یک برنامه ننویسیم که عکس هایی شبیه استیکر فارسی داشته باشه و ملت بتونن تو وایبر از استیکر های فارسی استفاده کنن؟اون برنامه رو نوشتم و به صورت رایگان تو کافه بازار و مایکت منتشر کردم!اسمشو گذاشتم &quot;استیکر ایرونی&quot; و تو 9 روز به 50,000 نصب فعال رسید و من دیگه فکر میکردم استیوجابز آینده کسی نیست به جز خودم!اون هنوز تو کافه بازار موجوده و هنوز بعضیا نصبش میکنن ولی نمیفهمن چرا باید به جای استیکر عکس داشته باشه :)))من هنوز زنده امتو روزایی که با برنامه ای که منتشر کرده بودم داشتم به معنی واقعی عشق میکردم تلگرام ظهور کرد و کاسه کوزه وایبر رو جمع کرد و خب قطعا &quot;استیکر ایرونی&quot; من هم کنار وایبر ایستاد و رفتن مردم به سمت تلگرام رو نگاه میکردن.سخت تر از کنار اومدن با مرگ آرتور مورگان بود برام :)برای من خیلی سخت تر از بقیه مردم بود که با این واقعیت کنار بیام که برم به سمت تلگرام، و وایبر محبوبم رو از دست رفته بدونم!هیچکدوم از ویژگی های تلگرام منو مجاب نکرد که نصبش کنم و یادمه تا یک ماه مقاوت کردم ولی در نهایت جلوی یک موضوع نتونستم مقاومت کنم!اونم چیزی نبود به جز پدیده ای به اسم FOMO!معنی کامل این کلمه عبارت &quot;fear of missing out&quot; به معنی &quot;ترس از دست دادن&quot; میباشد.احتمالاً پیش آمده که شبکه اجتماعی را باز کنید و متوجه شوید که دوستانتان در حال تفریح و لذت بردن هستند، همکارانتان به سفر رفته‌اند و شما ناگهان درگیر احساسی به نام فومو یا ترس از از دست دادن می‌شوید.معمولا در مواجه با این پدیده مردم دو واکنش مختلف نشان میدهد:یک دسته با احساس افسردگی و جاماندن غرق در ویترین نمایشی افراد میشوند دسته دوم سعی میکنند &quot;جا نمانند&quot; و اگر مردم در حال انجام کاری هستند آنها هم به اکثریت مردم میپیوندنت تا احساس بازنده بودن نکنند.من تو روز هایی که وایبر و در کنارش برنامه ای نوشته بودم داشتن اخرین نفس هاشون رو میکشیدن، نتونستم جلو FOMO مقاومت کنم.به معنی واقعی ترس از دست دادن گروه های دوستانم که دیگه رفته بودن به سمت تلگرام، یا ترس عقب ماندن از ویژگی های جدید تلگرام در مقابل وایبر!هفته گذشته، شرکت Meta از شبکه اجتماعی جدیدش به نام Threads رو منتشر کرد.برنامه ای که رقیب اصلی توییتر شناخته میشود.این برنامه به پشتوانه Instagram در کمتر از چند ساعت به میلون ها کاربر رسید.من واقعا کشش یک برنامه اجتماعی دیگه رو نداشتم و تصمیم داشتم کلا نصبش نکنم حتی با آگاهی به پدیده قدرتمندی به اسم FOMO تصمیم رو گرفتم که نصب نکنم.ولی باز مثل 10 سال پیش که جلو تلگرام شکست خوردم این سری هم جلو تردز شکست خوردم،وقتی دیدم همه دوستام نوشته هاشون رو به اشتراک میزارن حس کردم دارم چیزی رو از دست میدم.انگار همه داشتن به انزلی سفر میکردن و منو نمیبردن،دیگه نتونستم مقاومت کنم و رفتم AppStore و Threads نصب کردم و توش نوشتم: &quot;خیلی تو زندگیم تمرکز دارم اینم نصب کردم&quot;من بیشتر از هر مکان دیگری، عاشق انزلی هستم.5 تا از دوستام لایک کردن،منم نوشته چندتاشونو خوندم و لایک کردم و آروم شدم...الان چند روز از اون هیجان اولیه گذشته و فهمیدم ملت همچین سمت انزلی هم نمیرفتن و بهترین فرصته که ببینم اصلا این FOMO چقدر تاثیر گذاشته تو زندگی شخصی خودم،البته تصمیم گرفتم بعد از مطالعه روی رفتار خودم در مواجه با این پدیده غیرمنطقی، یکم هم عمومی تر بهش نگاه کنم و در نهایت مطالعه کنم که چجوری میتونم جلو این موضوع مقاوت کنم.چطور میتونم به جای اینکه به ویترین -معمولا پوشالی افتخارات و زندگی افراد خیره بمونم و بتونم زندگی خودمو بسازم.این اولین قسمت از این مجموعه نوشته است خوشحال میشم نظرات و تجربه هاتون رو از این پدیده بنویسید و اگر راهکار های شخصی دارید برای مقابله با فومو به اشتراک بگذارید.</description>
                <category>Mohammad Mohammadi</category>
                <author>Mohammad Mohammadi</author>
                <pubDate>Sat, 08 Jul 2023 16:58:37 +0330</pubDate>
            </item>
                    <item>
                <title>20 مهارت لازم برای توسعه دهندگان نرم افزار در سال 1402</title>
                <link>https://virgool.io/programer/20-%D9%85%D9%87%D8%A7%D8%B1%D8%AA-%D9%84%D8%A7%D8%B2%D9%85-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D9%88%D8%B3%D8%B9%D9%87-%D8%AF%D9%87%D9%86%D8%AF%DA%AF%D8%A7%D9%86-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%AF%D8%B1-%D8%B3%D8%A7%D9%84-1402-sytyww05eibl</link>
                <description>برای کسب مهارت در این صنعت باید دائماً مهارت‌های خودتان را تقویت کنید تا با همه چیز همگام بمانید. این موضوع تنها مختص افراد مبتدی نیست و افراد باتجربه را نیز شامل می‌شود. در اینجا برخی از ارزشمندترین مهارت‌های توسعه‌دهندگان برای دستیابی در سال جاری فراهم آورده شده است.البته شما به تمام آن‌ها احتیاج نخواهید داشت. مطمئناً این فهرست کامل نیست، اما می‌تواند به شما کمک کند تا بفهمید که باید چه چیزهایی را یاد بگیرید یا چه چیزهایی را بهبود ببخشید.1. هر روز کدنویسی را تمرین کنیدهر روز کدنویسی را تمرین کنید، حتی اگر 30 دقیقه باشد. این کار به شما کمک می‌کند تا بهترین روش‌های توسعه را یاد گرفته و مهارت‌های خودتان را رشد دهید. همچنین با انجام این کار می‌توانید از مسائل روز دنیا مطلع باشید و بر روی تکنولوژی‌های جدید تسلط پیدا کنید.2. درست ارتباط برقرار کردن را یاد بگیریدلازم نیست که زبان انگلیسی را مثل یک شخص بومی صحبت کنید، اما به مهارت‌های ارتباطی کافی برای کمک به مشتریان در درک صحبت‌های خود نیاز دارید. این ارتباطات میتواند از طریق نشست‌ها، ایمیل‌ها و یا حتی گوشی صورت بگیرد. نباید مشتریان خود را به خاطر نفهمیدن حرف‌هایتان از دست دهید. نوشتن کدهای تمیز هم یک مهارت مهم است که باعث میشود از سایر توسعه‌دهندگان متمایز شوید.3. اصول طراحی شیءگرا را تمرین کنیدحتی اگر به تازگی برنامه‌نویسی را شروع کرده باشید، یاد گرفتن اصول شیءگرا در درازمدت مزایای زیادی را برای شما به همراه خواهد داشت. این تمرین‌ها باعث می‌شود تا خواندن کدهای دیگران برای شما بسیار آسان شود. این موضوع هنگام کار کردن با سایر توسعه‌دهندگان و اعضای تیم بسیار اهمیت دارد.4. نحوه استفاده‌ی موثر از سیستم‌های کنترل نسخه (مانند Git) را یاد بگیریدسیستم‌های کنترل نسخه برای توسعه‌دهندگانی اهمیت دارد که به طور همزمان روی چندین پروژه کار می‌کنند یا در کنار سایر افراد بر روی یک پروژه‌ی واحد مشغول به کار هستند. با مطالعه‌ی کتاب‌هایی در این زمینه می‌توان نحوه استفاده از Git را یاد گرفت.5. مهارت‌های حل مسئله‌ی خودتان را بهبود بخشیدتوسعه‌ی نرم‌افزار یک حوزه پیچیده است. شما در طول کارهای خود با مشکلات و وظایف مختلفی روبرو خواهید شد. ابتدا مثل یک توسعه‌دهنده فکر کنید و سپس مشکلات را به شکلی تاثیرگذار برطرف کنید.6. نحوه استفاده از ابزارهای طراحی مانند Photoshop، Sketch و Illustrator را بیاموزیداگر می‌خواهید محصول با کیفیتی را بسازید که مورد قبول کاربران واقع شود، وبسایت‌ها و برنامه‌های زیبا ضروری می‌باشند. اگرچه میتوان طراحی کردن را به کمک فیلم‌های آموزشی یوتیوب یاد گرفت، اما معمولاً هنگام شروع پروژه‌های واقعی به آموزش‌های رسمی در این زمینه نیاز خواهید داشت.7. به یادگیری تکنولوژی‌ها و زبان‌های جدید ادامه دهیدفقط به یک پشته بسنده نکنید. یادگیری زبان‌ها و فریمورک‌های جدید به شما کمک می‌کند تا در این صنعت قابلیت استخدام شدن داشته باشید. اگر برای مدت طولانی از پشته خود استفاده کنید، به مرور زمان احتمال قدیمی شدن مهارت‌های شما بالا می‌رود. همیشه سعی کنید از جدیدترین تکنولوژی‌های مورد استفاده توسعه‌دهندگان برتر در سراسر دنیا مطلع باشید.8. حداقل یک زبان اسکریپت‌نویسی (مثل پایتون) را یاد بگیریدزبان‌های اسکریپت‌نویسی برای اتومات کردن کارهای تکراری مفید هستند. حتی اگر نمیخواهید به یک توسعه دهنده تمام وقت تبدیل شوید، اسکریپت نویسی میتواند زندگی شما را به عنوان یک مهندس نرم افزار آسانتر کند.9. نحوه نوشتن کد تمیز و قابل نگهداری را یاد بگیریدشما می‌بایست زمان زیادی را صرف خواندن کدهای دیگران کنید. اگر کدها تمیز نباشد، فهمیدن آن‌ها برای شما مشکل خواهد بود. بنابراین خودتان باید کدهای تمیز و خوانا را بنویسید. یکی از روش‌های تقویت مهارت‌های کدنویسی، نوشتن تست‌های یونیت با استفاده از Junit است. این موضوع به شما کمک می‌کند تا بتوانید باگ‌ها را در مراحل ابتدایی روند توسعه مشخص کنید. همچنین سعی کنید روش‌های خود را کوتاه نگه دارید. وقتی از روش‌های کوتاه‌تر استفاده کنید، بعدها خیلی راحت‌تر میتوانید کدهای قبلی خود را بخوانید.10. دوراندیشی کنید و نحوه عملکرد یک ویژگی را قبل از شروع توسعه برنامه‌ریزی کنیدما برای نوشتن ایده‌ی اولیه‌ی یک ویژگی یا محصول تا آماده کردن آن برای ارائه به بازار به زمان نیاز داریم. باید بتوانید از قبل به این مسائل فکر کنید و مطمئن شوید که همه چیز در طول این فرآیند به درستی با یکدیگر تناسب دارد. این موضوع می‌تواند شامل برنامه‌ریزی با اعضای تیم، پرسش از کاربران در مورد خواسته‌هایشان و صحبت با سهامداران در رابطه با نیازهایشان باشد. بدون فکر کردن به این مسائل، کدنویسی را شروع نکنید.11. نحوه‌ی اجرای درست اقدامات امنیتی را یاد بگیریداطلاعات زیادی در رابطه با امنیت وجود دارد و همین موضوع باعث می‌شود تا به راحتی گیج شوید. ابتدا باید مطمئن شد که فقط به موارد مشخصی مثل «مطمئن شوید که گذرواژه شما به اندازه کافی قوی باشد» توجه نمی‌کنید و درباره تهدیدات امنیتی و نحوه‌ی برطرف کردن آن‌ها نیز مطالب بیشتری را یاد می‌گیرید.12. از سوال پرسیدن نترسیدسوال پرسیدن یک روش عالی برای یادگیری است. یکی از بزرگترین اشتباهاتی که می‌توانید مرتکب شوید، این است که تصور کنید همه چیز را می‌دانید. خیلی از توسعه‌دهندگان درخواست کمک را نشانه ضعف می‌دانند، اما در واقع نشانه قدرت است. اگر نمی‌توانید یک چیز را بفهمید، از کسی سوال کنید که آن موضوع را فهمیده است. سپس سعی کنید خودتان به تنهایی آن را درک کنید. این کار به شما کمک می‌کند تا درک عمیق‌تری از موضوع مورد نظر داشته باشید.13. نحوه‌ی کار با محیط‌های مختلف (Mac، Linux، Windows) را یاد بگیریدنیازی به کسب تخصص در تمام سیستم عامل‌ها نیست، اما باید نحوه کارکرد، مزایا و معایب آن‌ها را بدانید. مطلع بودن از نحوه عملکرد محیط‌های مختلفِ توسعه به شما کمک می‌کند تا هنگام جا به جایی بین آن‌ها، در وقت و انرژی خود صرفه‌جویی کنید. مثلاً توسعه دادن یک برنامه اندروید در Windows یا Mac شما را مجبور می‌کند تا جریان کاری خودتان را تغییر دهید چون روند کار  فعلی شما با Linux یا Ubuntu متفاوت است.14. به طور منظم برنامه‌نویسی دونفره را با اعضای تیم خود تمرین کنیدبرنامه‌نویسی دونفره به معنای کار کردن دو نفر به طور همزمان بر روی یک کامپیوتر است. یک نفر پشت کیبورد نشسته و کدها را می‌نویسد در حالی که نفر دوم کدها را می‌بینید و بازخورد، پیشنهادات و سایر مسائل مهم را به فرد مقابل ارائه می‌دهد.برنامه‌نویسی دونفره مزایای بسیاری مثل درک بهتر دامنه‌ی مشکل، به اشتراک‌گذاری دانش و ایده بین اعضای تیم، خطایابی سریع‌تر و غیره را به دنبال دارد. در این روش برنامه نویسان به واسطه‌ی ارتباط منظمی که دارندُ با یکدیگر احساس راحتی بیشتری خواهند کرد. این موضوع به آن‌ها در ایجاد اعتماد نیز کمک می‌کند که به نوبه خود کار گروهی را بسیار بهبود می‌بخشد.15. الگوهای طراحی را درک کنیدمجبور نیستید که تک تک الگوها را به خاطر داشته باشید، اما دانستن آن‌ها به عنوان یک توسعه‌دهنده نرم‌افزار می‌تواند کمک زیادی به شما کند. الگوهای طراحی شیءگرا به طور مکرر در فریمورک‌ها و تکنولوژی‌های مختلف مورد استفاده قرار می‌گیرند، بنابراین درک کردن آن‌ها برای شغل شما به عنوان یک توسعه‌دهنده نرم‌افزار بسیار مفید خواهد بود.اصول SOLID ما را هنگام کد نوشتن راهنمایی می‌کند:اصل تک مسئولیتیاصل باز – بستهاصل جایگزینی لیسکوفاصل جداسازی رابط‌هااصل وارونگی وابستگی16. کنار آمدن با تغییر را به عنوان یک توسعه‌دهنده نرم‌افزار یاد بگیریدگاهی اوقات هنگام کار کردن بر روی پروژه‌های جدید یا دیتابیس‌ها، اوضاع کمی تغییر می‌کند. اگر می‌خواهید در این تجارت به کارهای خود ادامه دهید، باید دائماً با این تغییرات سازگار شوید. اگر نتوانید به خوبی با این تغییرات کنار بیایید، در نهایت به مهارت‌های قدیمی خود محدود می‌شوید؛ همان مهارت‌هایی که دیگر کمک چندانی به شما نمی‌کنند.17. یاد بگیرید که چگونه می‌توانید خودتان را جای شخص دیگری بگذاریداین یک مهارت مفید در صنعت توسعه نرم‌افزار است. باید یاد بگیرید که چگونه می‌توانید از دید مشتری به مسائل نگاه کنید و سعی کنید خواسته‌ها و نیازهای آنان را درک کنید. باید با آن‌ها ارتباط برقرار کنید و مطمئن شوید تنها خواسته‌های آن‌ها را برآورده می‌کنید.18. اطلاعاتی در مورد فرآیندهای تجاری و مهارت‌های نرم کسب کنیداینکه برای خودتان یا شرکت دیگری کار کنید، هیچ فرقی ندارد. باید از فرآیندهای تجاری مطلع باشید و مهارت‌های نرم مانند ارتباطات، مدیریت زمان، حل مشکلات و موارد دیگر را درک کنید. این‌ها جزو مهارت‌های مهمی هستند که باعث می‌شود از سایر توسعه‌دهندگانی که چیزی در رابطه با آن‌ها نمی‌دانند متمایز شوید.19. چگونگی رویارویی با مهلت‌های زمانی را بیاموزیدهمه می‌دانند که گاهی اوقات پروژه‌ها دیر انجام می‌شوند و کارها مطابق با مهلت‌های زمانی پیش نمی‌رود. شما به عنوان یک توسعه‌دهنده باید با تنظیم چک‌پوینت‌های کوچکتر در پروژه‌های خود، نحوه‌ی رعایت مهلت‌های زمانی را یاد بگیرید. این موضوع به شما کمک می‌کند تا موثرتر باشید و وظایف خود را به موقع انجام دهید.20. نحوه‌ی یادگیری سریع تکنولوژی‌های جدید را بیاموزیدهمانطور که قبلاً هم به این موضوع اشاره شد، توسعه‌دهندگان باید با فناوری‌ها همگام باشند و به سرعت تکنولوژی‌های جدید را یاد بگیرند. این مسئله به معنای یادگیری زبان‌ها، فریمورک‌ها و کتابخانه‌های جدیدی است که می‌تواند به شما در حل موثرتر مشکلات کمک کند.اگر چیزی را نمی‌فهمید یا چیزی وجود دارد که برایتان واضح نیست، سوال بپرسید. از احمق به نظر رسیدن نترسید چون اگر چیزی را نفهمید، هرگز نمی‌توانید کاملاً به آن مسلط شوید.</description>
                <category>Mohammad Mohammadi</category>
                <author>Mohammad Mohammadi</author>
                <pubDate>Sat, 11 Mar 2023 12:26:57 +0330</pubDate>
            </item>
                    <item>
                <title>فعلا خداحافظ PostMan :)</title>
                <link>https://virgool.io/@mohammadim48/%D9%81%D8%B9%D9%84%D8%A7-%D8%AE%D8%AF%D8%A7%D8%AD%D8%A7%D9%81%D8%B8-postman-mls4p3cwisnl</link>
                <description>امروز چشمم به یک افزونه VS Code افتاد که فکر میکنم باید کم کم Postman رو برای همیشه از سیستمم حذف کنم!خب Postman کار راه انداز بود تا جایی که قرار بود تو محل کارمون به صورت تیمی روی یک Collections کار کنیم.اوایل همه چیز گل و بلبل بود تا اینکه فهمیدیم بیش از این نمیتونیم به صورت رایگان کار کنیم(باید از Collections خروجی json میگرفتیم و اون فایل رو به صورت سنتی بین تیم جابجا میکردیم!)و مورد دوم هم سنگین بودن خودم Postman  بود!افزونه thunderclient که برای IDE محبوب VS Code منتشر شده رو یک نگاه بندازید!به نظرم همه ی کار هایی که با Postman انجام میدادیم رو انجام میده به صورت رایگان و بسیار سبک تر از Postman، به صورت یک افزونه ساده روی VS Code.لینک گیت هاب افزونه:GitHub</description>
                <category>Mohammad Mohammadi</category>
                <author>Mohammad Mohammadi</author>
                <pubDate>Sat, 03 Jul 2021 16:00:39 +0430</pubDate>
            </item>
            </channel>
</rss>