<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Saikat Chandra Das</title>
    <description>The latest articles on Forem by Saikat Chandra Das (@saikatcdas).</description>
    <link>https://forem.com/saikatcdas</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1287506%2F3fd5d17b-42df-4a82-8f0c-ac764ecfc45c.jpeg</url>
      <title>Forem: Saikat Chandra Das</title>
      <link>https://forem.com/saikatcdas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/saikatcdas"/>
    <language>en</language>
    <item>
      <title>Essential Soft Skills for Software Engineers</title>
      <dc:creator>Saikat Chandra Das</dc:creator>
      <pubDate>Fri, 04 Oct 2024 11:54:38 +0000</pubDate>
      <link>https://forem.com/saikatcdas/essential-soft-skills-for-software-engineers-o57</link>
      <guid>https://forem.com/saikatcdas/essential-soft-skills-for-software-engineers-o57</guid>
      <description>&lt;p&gt;When we think of software engineers, technical expertise often comes to mind—coding, debugging, and solving complex problems. However, &lt;strong&gt;soft skills&lt;/strong&gt; are equally important in determining success. While technical proficiency is essential, how engineers collaborate, communicate, and adapt makes all the difference in today’s fast-paced development environment. Here’s a look at the key soft skills every software engineer should develop.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. &lt;strong&gt;Effective Communication&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Communication is at the heart of every successful software project. Software engineers must communicate with a variety of stakeholders—product managers, designers, clients, and fellow engineers. The ability to &lt;strong&gt;explain complex technical concepts&lt;/strong&gt; in simple terms ensures that everyone is on the same page. Whether it's writing clear documentation, contributing to code reviews, or presenting technical findings, communication is a critical skill that helps teams move forward efficiently.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. &lt;strong&gt;Collaboration and Teamwork&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Engineering is rarely a solo activity. Modern software development follows practices like &lt;strong&gt;Agile&lt;/strong&gt; and &lt;strong&gt;DevOps&lt;/strong&gt;, which rely on tight collaboration. Engineers need to work seamlessly in teams, whether it’s pair programming, collaborating on feature development, or resolving production issues. Being a good team player means actively contributing, supporting others, and sharing knowledge to achieve common goals.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. &lt;strong&gt;Adaptability&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Technology is constantly evolving, and software engineers must be ready to adapt to new tools, languages, and frameworks. &lt;strong&gt;Adaptability&lt;/strong&gt; means not only keeping pace with new technology but also adjusting to changing project requirements, timelines, or roles within a team. Engineers who are open to learning and unlearning as needed stay relevant in an industry where change is the only constant.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. &lt;strong&gt;Problem-Solving and Critical Thinking&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Software engineers are problem solvers at their core, but the ability to think critically is a skill that goes beyond just fixing bugs. Engineers must approach problems logically, break them down into manageable parts, and explore multiple solutions. &lt;strong&gt;Critical thinking&lt;/strong&gt; also helps in making architectural decisions, optimizing performance, and anticipating potential issues before they arise.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. &lt;strong&gt;Time Management&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Engineering projects are often on tight schedules. Balancing multiple tasks—whether it's coding, testing, or participating in meetings—requires excellent &lt;strong&gt;time management&lt;/strong&gt; skills. Knowing how to prioritize tasks, manage deadlines, and focus on what's important ensures that projects stay on track without compromising quality. Engineers who can manage their time well are not only more productive but also contribute to a more efficient development cycle.&lt;/p&gt;

&lt;h4&gt;
  
  
  6. &lt;strong&gt;Receiving and Giving Feedback&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;A critical part of a software engineer’s growth is the ability to accept and learn from feedback. Whether it’s in the form of &lt;strong&gt;code reviews&lt;/strong&gt;, performance evaluations, or peer feedback, being open to constructive criticism is crucial for improvement. On the flip side, providing helpful, respectful, and actionable feedback to peers helps maintain a positive and growth-oriented team culture.&lt;/p&gt;

&lt;h4&gt;
  
  
  7. &lt;strong&gt;Attention to Detail&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Software engineers must have a high level of &lt;strong&gt;attention to detail&lt;/strong&gt;. Whether debugging code or ensuring proper implementation of a feature, small mistakes can have significant consequences. An engineer who takes the time to carefully check their work, understand requirements deeply, and think through edge cases will deliver more reliable and maintainable code.&lt;/p&gt;

&lt;h4&gt;
  
  
  8. &lt;strong&gt;Empathy and User-Centered Thinking&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;In addition to technical skills, engineers must cultivate &lt;strong&gt;empathy&lt;/strong&gt; for both their teammates and the end-users. Understanding how users will interact with the software and keeping user needs at the forefront of design decisions leads to better product outcomes. Empathy within the team fosters better collaboration, reduces misunderstandings, and strengthens team dynamics.&lt;/p&gt;

&lt;h4&gt;
  
  
  9. &lt;strong&gt;Resilience and Handling Pressure&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Software engineers often work under pressure, whether it’s meeting tight deadlines or fixing production issues in real-time. The ability to stay &lt;strong&gt;calm under pressure&lt;/strong&gt;, maintain focus, and not let stress impact work quality is essential. Resilient engineers can handle unexpected challenges and setbacks, allowing them to bounce back stronger and keep projects moving forward.&lt;/p&gt;

&lt;h4&gt;
  
  
  10. &lt;strong&gt;Continuous Learning&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Software engineering is a field that demands continuous learning. Engineers need to stay updated on the latest trends, tools, and best practices. But beyond technical learning, they must also work on personal development—enhancing communication, leadership, and collaboration skills. As engineers grow, the balance of soft and technical skills becomes crucial to their long-term success.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;While coding skills are foundational for software engineers, &lt;strong&gt;soft skills&lt;/strong&gt; are what make them thrive in real-world environments. From communication and collaboration to problem-solving and adaptability, these interpersonal skills play a pivotal role in building strong teams, fostering innovation, and delivering successful software projects. Engineers who invest in developing their soft skills become better collaborators, leaders, and contributors in their organizations.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>discuss</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Integrating WordPress Media Upload with Vue 3: Simplifying Image Selection for Your WordPress Plugin</title>
      <dc:creator>Saikat Chandra Das</dc:creator>
      <pubDate>Mon, 04 Mar 2024 16:22:24 +0000</pubDate>
      <link>https://forem.com/saikatcdas/integrating-wordpress-media-upload-with-vue-3-simplifying-image-selection-for-your-wordpress-plugin-1pp9</link>
      <guid>https://forem.com/saikatcdas/integrating-wordpress-media-upload-with-vue-3-simplifying-image-selection-for-your-wordpress-plugin-1pp9</guid>
      <description>&lt;p&gt;Incorporating media upload functionality can significantly enhance user interactions when building WordPress plugins. In this guide, we'll explore how to seamlessly integrate media upload capabilities using Vue 3. Specifically, we'll create a custom media frame that allows users to select or upload images effortlessly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Enqueue the Media&lt;/strong&gt;&lt;br&gt;
In the PHP file of your plugin where you enqueue scripts, ensure to include the following lines to enable WordPress media functionality:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (function_exists('wp_enqueue_media')) {
   wp_enqueue_media();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;- Setup Vue Component&lt;/strong&gt;&lt;br&gt;
Let's dive into creating a Vue.js component named MediaSelector.vue that will handle the media selection functionality&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;template&amp;gt;
   &amp;lt;button @click="openMediaFrame"&amp;gt;{{ title }}&amp;lt;/button&amp;gt;
&amp;lt;/template&amp;gt;


&amp;lt;script setup&amp;gt;
import { defineProps, defineEmits, onMounted } from 'vue';


const props = defineProps({
   // Whether you want to select a single file or multiple files
   multiple: false,
   // Button Title
   title: {
       default: 'Add Media'
   },
   // Title of the Button when you select a media file
   action_title: {
       default: 'Use This Media'
   }
});


let mediaFrame = null;
const emit = defineEmits(['onMediaSelected']);


// Function to open the media frame
const openMediaFrame = () =&amp;gt; {
   if (mediaFrame == null) {
       return;
   }
   mediaFrame.open();
};
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;- Initialize Media Frame&lt;/strong&gt;&lt;br&gt;
In the onMounted hook, we'll initialize the media frame and set up listeners for media selection.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;script setup&amp;gt;
// Existing code...


onMounted(() =&amp;gt; {
   if (!window.wp || !window.wp.media) {
       return;
   }
   mediaFrame = window.wp.media({
       title: 'Select or Upload Media',
       button: {
           text: props.action_title
       },
       library: {
           type: 'image'
       },
       multiple: props.multiple ? 'add' : false,
   });


   // Listen for media change
   listenForMediaChange();
});
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;- Listen for Media Selection&lt;/strong&gt;&lt;br&gt;
We'll listen to the media selection event and emit the selected attachments to the parent component.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const listenForMediaChange = () =&amp;gt; {
   mediaFrame.on('select', function () {
       const attachments = mediaFrame.state()
           .get('selection').toJSON()
       emit('onMediaSelected', attachments)
   })
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: If you select a single item or multiple items, the attachments array will contain the chosen item's information. Like url, id, filesize author, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Usage&lt;/strong&gt;&lt;br&gt;
Now, let's utilize this component in your Vue application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;template&amp;gt;
   &amp;lt;div&amp;gt;
       &amp;lt;MediaSelector
           :attachments="attachments"
           @onMediaSelected="handleMediaSelected" /&amp;gt;
   &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;


&amp;lt;script setup&amp;gt;
import MediaSelector from '@/components/MediaSelector.vue';
import { ref } from 'vue';

// It's a demo 
const attachments = ref([
   {
   "id": 132,
   "title": "image",
   "filename": "image-20.png",
   "url": "http://wordpress.test/wp-content/uploads/2024/02/image-20.png",
   "description": "",
   "caption": "",
   "mime": "image/png",
   "filesizeInBytes": 708072,
   "height": 1208,
   "width": 800,
   "author": "1",
   "authorLink": "http://wordpress.test/wp-admin/profile.php",
   "authorName": "admin",
}]);




const handleMediaSelected = (selectedMedia) =&amp;gt; {
   attachments.value = selectedMedia;
};
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;- Additional Customizations&lt;/strong&gt;&lt;br&gt;
If you want to handle pre-selected media, you can utilize the provided functions setUpPreSelectedIds and setPreselected. Additionally, you can customize the media modal by overriding its default class.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;script setup&amp;gt;
// Existing code…


let preSelectedIds = [];
const isNumeric = (value) =&amp;gt; {
   return /^\d+$/.test(value);
}
// Set up selected items id
const setUpPreSelectedIds = () =&amp;gt; {
   preSelectedIds = [];
   if (
       Array.isArray(props.attachments) &amp;amp;&amp;amp;
       props.attachments.length &amp;gt; 0)
   {
       Object.values(props.attachments)
           .forEach((attachment, index) =&amp;gt;
           {
           if (isNumeric(attachment['id']))
           {
               preSelectedIds.push(attachment['id'])
           }
       })
   }
}
// Select those media file from your attachments id 
const setPreselected = () =&amp;gt; {
   mediaFrame.on('open', function () {
       let selection = mediaFrame.state().get('selection');
       preSelectedIds.forEach(function (id) {
           let attachment = window.wp.media.attachment(id);
           if (attachment) {
               selection.add(attachment)
           }
       }); // would be probably a good idea to check if it is indeed a non-empty array
   });
}


onMounted(() =&amp;gt; {
   // check is media frame exist or not
   setUpPreSelectedIds();
   // initial media frame
   setPreselected();
   // listen media change
})




// Override the default media modal with a custom class
wp.media.view.Modal = wp.media.view.Modal.extend({
   className: 'your-custom-class',
});
&amp;lt;/script&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;- Conclusion&lt;/strong&gt;&lt;br&gt;
In this guide, I tried to demonstrate how to seamlessly integrate WordPress media upload functionality with Vue 3. By creating a custom media selector component, users can effortlessly select or upload images, enhancing the usability of your WordPress plugin. With these steps, you'll be well on your way to creating a more engaging and user-friendly WordPress experience. Happy coding!&lt;/p&gt;

&lt;p&gt;Feel free to adjust and expand upon this guide to suit your specific requirements and audience preferences.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>vue</category>
      <category>wordpressmedia</category>
    </item>
  </channel>
</rss>
