<?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>DEV Community: Charbel Sarkis</title>
    <description>The latest articles on DEV Community by Charbel Sarkis (@charbelsako).</description>
    <link>https://dev.to/charbelsako</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%2F228512%2F83bd8156-5ccd-4620-a5b8-45db63888d47.jpg</url>
      <title>DEV Community: Charbel Sarkis</title>
      <link>https://dev.to/charbelsako</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/charbelsako"/>
    <language>en</language>
    <item>
      <title>My bashrc</title>
      <dc:creator>Charbel Sarkis</dc:creator>
      <pubDate>Thu, 03 Dec 2020 15:56:24 +0000</pubDate>
      <link>https://dev.to/charbelsako/my-bashrc-4l3g</link>
      <guid>https://dev.to/charbelsako/my-bashrc-4l3g</guid>
      <description>&lt;p&gt;I have my bash terminal show me the git branch that i'm on for no particular reason.&lt;br&gt;
&lt;a href="https://github.com/charbelsako/dwmconfig"&gt;my bashrc&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bashrc</category>
      <category>linux</category>
    </item>
    <item>
      <title>Database systems 2</title>
      <dc:creator>Charbel Sarkis</dc:creator>
      <pubDate>Thu, 05 Nov 2020 08:16:23 +0000</pubDate>
      <link>https://dev.to/charbelsako/database-systems-2-2jgl</link>
      <guid>https://dev.to/charbelsako/database-systems-2-2jgl</guid>
      <description>&lt;p&gt;A few key terms of advanced databases.&lt;/p&gt;

&lt;p&gt;Procedures&lt;br&gt;
Functions&lt;br&gt;
Triggers&lt;br&gt;
CONSTRAINTS (FOREIGN KEY, CHECK)&lt;br&gt;
ROLES&lt;br&gt;
CURSORS&lt;br&gt;
GRANT PRIVILEGES&lt;/p&gt;

</description>
      <category>database</category>
      <category>keyterms</category>
    </item>
    <item>
      <title>Linux issues</title>
      <dc:creator>Charbel Sarkis</dc:creator>
      <pubDate>Wed, 04 Nov 2020 20:12:43 +0000</pubDate>
      <link>https://dev.to/charbelsako/linux-issues-2mbf</link>
      <guid>https://dev.to/charbelsako/linux-issues-2mbf</guid>
      <description>&lt;p&gt;Problem: Can't lower / raise volume and brightness&lt;br&gt;
Solution: get xbindkeys for volume and then get xbacklight for brightness, then finally add your user to the video group&lt;/p&gt;

&lt;p&gt;Problem: can't read hard disk or any ntfs device. &lt;br&gt;
Solution: Get ntfs-3g&lt;/p&gt;

&lt;p&gt;Problem: no nm-applet &lt;br&gt;
Solution: use &lt;code&gt;nmcli d w&lt;/code&gt; to list devices&lt;br&gt;
then &lt;code&gt;nmcli d w connect SSID password&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Problem: display volume in dwmblocks status bar.&lt;br&gt;
Solution: this is the command for it on pulseaudio&lt;br&gt;
&lt;code&gt;pactl list sinks | grep '^[[:space:]]Volume:' | \&lt;br&gt;
    head -n $(( $SINK + 1 )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,'&lt;/code&gt;&lt;br&gt;
This uses multiple sinks and chooses only one of them. I got it from askubuntu or something&lt;/p&gt;

</description>
      <category>linux</category>
      <category>void</category>
    </item>
    <item>
      <title>Moving to the U.S for a software developer job</title>
      <dc:creator>Charbel Sarkis</dc:creator>
      <pubDate>Tue, 08 Sep 2020 15:10:03 +0000</pubDate>
      <link>https://dev.to/charbelsako/moving-to-the-u-s-for-a-software-developer-job-dnp</link>
      <guid>https://dev.to/charbelsako/moving-to-the-u-s-for-a-software-developer-job-dnp</guid>
      <description>&lt;p&gt;Is it worth it to move to the U.S for a software developer position. I have been hearing all about how housing is extremely expensive and takes out most of your salary.&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Priority Queue in python with a custom object</title>
      <dc:creator>Charbel Sarkis</dc:creator>
      <pubDate>Sat, 20 Jun 2020 18:31:50 +0000</pubDate>
      <link>https://dev.to/charbelsako/priority-queue-in-python-with-a-custom-object-60f</link>
      <guid>https://dev.to/charbelsako/priority-queue-in-python-with-a-custom-object-60f</guid>
      <description>&lt;p&gt;I've come across this because you can use this &lt;code&gt;priority queue&lt;/code&gt; in the &lt;strong&gt;selection process&lt;/strong&gt; in the A* algorithm (i.e the process where you choose the node with the lowest f score), to get an &lt;code&gt;O(1)&lt;/code&gt; instead of the traditional &lt;code&gt;O(n)&lt;/code&gt; solution.&lt;/p&gt;

&lt;p&gt;Since we are choosing the node with the lowest score and the priority queue keeps the lowest value at the beginning, we can then achieve this &lt;code&gt;O(1)&lt;/code&gt; solution.&lt;/p&gt;

&lt;p&gt;Here is the first file &lt;br&gt;
&lt;strong&gt;node.py&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Node(object):
    def __init__(self, title, i, j):
        self.title = title
        self.i = str(i)
        self.j = str(j)
        self.f = 0
        self.g = 0
        self.h = 0
        # no neighbors at first
        self.neighbors = []

    def __str__(self):
        return '&amp;lt;' + self.title + '&amp;gt;'

    def __repr__(self):
        character = 'W' if self.title is '#' else 'O'
        return '&amp;lt;' + self.i + ' ' + self.j + ' ' + self.title + ', ' + str(len(self.neighbors))+'&amp;gt;'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Don't mind the unnecessary code.&lt;/p&gt;

&lt;p&gt;Here is the second and final file&lt;br&gt;
&lt;strong&gt;priority_item.py&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from dataclasses import dataclass, field
from typing import Any
from queue import PriorityQueue
from node import Node


@dataclass(order=True)
class PrioritizedItem:
    priority: int
    item: object = field()

q = PriorityQueue()
n = Node('a', 0, 0)
n.f = 1
n2 = Node('b', 0, 0)
n2.f = 0
n3 = Node('c', 0, 0)
n3.f = 2
q.put(PrioritizedItem(n.f, n))
q.put(PrioritizedItem(n2.f, n2))
q.put(PrioritizedItem(n3.f, n3))
print(q.get())
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this file I create a new &lt;strong&gt;PrioritizedItem&lt;/strong&gt; which will encompass my custom object.&lt;/p&gt;

&lt;p&gt;Below it I make 3 new node objects just as a test where the second has the lowest f score.&lt;/p&gt;

&lt;p&gt;When inserting these custom nodes into the list, you wrap it in the &lt;code&gt;PrioritizedItem&lt;/code&gt; and pass the value that you want to be used as the priority as the first argument, and then the priority queue will sort them from lowest to highest. This is because the &lt;code&gt;PriorityQueue&lt;/code&gt; uses a &lt;code&gt;min-heap&lt;/code&gt; data structure in its underlying implementation. &lt;/p&gt;

</description>
      <category>python</category>
    </item>
    <item>
      <title>Exploring javascript</title>
      <dc:creator>Charbel Sarkis</dc:creator>
      <pubDate>Tue, 17 Mar 2020 20:44:56 +0000</pubDate>
      <link>https://dev.to/charbelsako/exploring-javascript-501p</link>
      <guid>https://dev.to/charbelsako/exploring-javascript-501p</guid>
      <description>&lt;h4&gt;
  
  
  Yet another free online book that I'm tho it is worth buying.
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Object.freeze&lt;/strong&gt; does exactly that except it is shallow&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ToObject&lt;/code&gt; throws errors upon encountering &lt;strong&gt;null&lt;/strong&gt; and &lt;strong&gt;undefined&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;0.1 + 0.2 !== 0.3&lt;/strong&gt; floating point numbers can't be represented accurately. Although numbers close to 0 can be stored more accurately&lt;/p&gt;

&lt;p&gt;Accurate Math Functions. &lt;code&gt;Math.expm1&lt;/code&gt; &lt;code&gt;Math.log1p&lt;/code&gt; &lt;br&gt;
Used for asm.js &lt;code&gt;Math.fround&lt;/code&gt; &lt;code&gt;Math.imul&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Bitwise operations &lt;code&gt;Math.clz32(0b0000001)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can represent bytes/hex/octal by adding &lt;code&gt;0b&lt;/code&gt; &lt;code&gt;0x&lt;/code&gt; &lt;code&gt;0o&lt;/code&gt; respectively to the beginning of a string&lt;/p&gt;

&lt;p&gt;To avoid versioning -- that thing that happened with python -- javascript made itself backwards compatible. Which proved to be difficult since old code could break upon changing. So they added "strict mode" which gives you all the new errors and enhancements to the language. This is enabled by default in classes and in modern web frameworks, you can however enable it in a single function only by adding &lt;code&gt;"use strict"&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://javascript.info/mixins"&gt;Add mixins to JavaScript&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is the capability of making &lt;code&gt;factories&lt;/code&gt; or &lt;code&gt;lazy generators&lt;/code&gt; in JavaScript&lt;/p&gt;

&lt;p&gt;Iterators with &lt;code&gt;Symbol.Iterator&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can extend an Error class in javascript.&lt;/p&gt;

&lt;p&gt;There are maps in javascript&lt;/p&gt;

&lt;p&gt;BigInt in javascript&lt;/p&gt;

&lt;p&gt;Static method to Number. &lt;code&gt;IsSafeInteger&lt;/code&gt; &lt;code&gt;Number.MAX_SAFE_INTEGER&lt;/code&gt; &lt;code&gt;Number.parseInt&lt;/code&gt; &lt;code&gt;Number.parseFloat&lt;/code&gt; &lt;code&gt;Number.isNAN&lt;/code&gt; &lt;code&gt;Number.EPSILON&lt;/code&gt; &lt;code&gt;Number.isInteger&lt;/code&gt; &lt;code&gt;Number.isFinite&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://exploringjs.com/es6/ch_template-literals.html#sec_implementing-tag-functions"&gt;Implementing tag functions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://exploringjs.com/es6/ch_symbols.html"&gt;JavaScript Symbols&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  why const prevents the weird closure bug
&lt;/h5&gt;

&lt;p&gt;const creates one binding per iteration, var creates one binding per loop. That is why const solves the closure bug.&lt;br&gt;
&lt;a href="https://dev.toconst%20in%20loops"&gt;https://exploringjs.com/es6/ch_variables.html#sec_rationale-per-iteration-bindings&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.toParameter%20default%20values%20don't%20see%20the%20scope%20of%20the%20body"&gt;https://exploringjs.com/es6/ch_variables.html#sec_rationale-per-iteration-bindings&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cool websites about Javascript&lt;/p&gt;

&lt;p&gt;&lt;a href="https://javascript.info"&gt;javascript.info&lt;/a&gt;&lt;br&gt;
&lt;a href="https://v8.dev"&gt;v8.dev&lt;/a&gt;&lt;br&gt;
&lt;a href="https://exploringjs.com/es6/ch_symbols.html#sec_symbols-crossing-realms"&gt;Crossing realms with symbols&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
    <item>
      <title>[WIP] The pragmatic programmer book review</title>
      <dc:creator>Charbel Sarkis</dc:creator>
      <pubDate>Fri, 06 Dec 2019 14:22:20 +0000</pubDate>
      <link>https://dev.to/charbelsako/the-pragmatic-programmer-3nlb</link>
      <guid>https://dev.to/charbelsako/the-pragmatic-programmer-3nlb</guid>
      <description>&lt;p&gt;The pragmatic programmer surprised me by being a no-code book, but started off by explaining how software engineering was an art and software engineers are craftsman, and went into somewhat philosophical speech about the art of making software. That drew me in. As a geek with no life and still in university, I just had to read it. &lt;/p&gt;

&lt;p&gt;Albeit, I feel like I'm reading this book too early since you need to be working to actually utilize all of this knowledge.&lt;/p&gt;

&lt;p&gt;Here I'll be briefly discussing the main parts of the book.&lt;/p&gt;

&lt;h3&gt;
  
  
  You should take responsibility
&lt;/h3&gt;

&lt;p&gt;Don't be afraid to tell people that you don't know a particular technology. Don't tell people that you can't deliver some code because of lame stupid reasons. Think about what you're gonna say before saying it. &lt;/p&gt;

&lt;p&gt;Does it sound reasonable?&lt;/p&gt;

&lt;p&gt;Is it really reasonable for an app not to be done because you only like working with a particular language or framework? Don't make excuses or blame other people for your own downfalls.&lt;/p&gt;

&lt;p&gt;Trust is important in a team environment. You could say a team environment relies on implicit trust between team members.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I take this advice to heart, because before reading I probably would have nagged about using new technologies&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Software Entropy
&lt;/h3&gt;

&lt;p&gt;This is by far the most important topic I've read so far (Currently @ Orthogonality). This term describes how much disorder exists in your software. The book discusses how to identify it. It could be a piece of code that needs refactoring, bad design choices or even plainly wrong decisions. If you find any of these problems and don't fix it, then your software is gonna end up badly.&lt;/p&gt;

&lt;p&gt;Don't write bad code if the code base is already bad. Take your time to fix it, then write good code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Your portfolio
&lt;/h3&gt;

&lt;p&gt;As technology evolves so should your knowledge, otherwise you would be left behind. Keep reading books on technology even if you don't work in it. Learn new programming languages or paradigms. &lt;/p&gt;

&lt;h3&gt;
  
  
  Knowing when to stop
&lt;/h3&gt;

&lt;p&gt;Sometimes It is best to publish your software and stop adding features. This problem is called feature bloat, where a program has too many features. Maybe you don't need all the shiny icons or offline notifications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Communicate
&lt;/h3&gt;

&lt;p&gt;Know what you want to say. Write an outline. Does it say what you want? &lt;br&gt;
Know your audience.&lt;br&gt;
Choose your moment.&lt;br&gt;
Choose a style. Just the facts or detailed.&lt;br&gt;
Make it look good. Check spelling. Good design.&lt;br&gt;
Involve your audience. In drafts&lt;br&gt;
Be a listener.&lt;br&gt;
Get back to people.&lt;br&gt;
Keep code and documentation together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Orthogonality
&lt;/h3&gt;

&lt;p&gt;Try to keep modules/classes dependent on themselves. This will significantly help in debugging, since the bug will belong to a single class.&lt;/p&gt;

&lt;h3&gt;
  
  
  DRY
&lt;/h3&gt;

&lt;p&gt;Don't repeat yourself, but sometimes you should. If you find yourself copy pasting code, maybe you shouldn't be.&lt;/p&gt;

&lt;h3&gt;
  
  
  Staying on track
&lt;/h3&gt;

&lt;p&gt;to be continued&lt;/p&gt;

&lt;h3&gt;
  
  
  Reversibility
&lt;/h3&gt;

&lt;p&gt;Write code that is abstract and won't break if you change an underlying structure. As you may notice this relates back to orthogonality.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;I'm gonna stop here to not ruin the experience of reading the book to people. As much as I would love to write a summary of the book to use for myself. I feel like people need to read it for themselves.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Great quotes
&lt;/h2&gt;

&lt;p&gt;I'm not here to live up to your expectations, and you're not here to live up to mine - Bruce Lee&lt;/p&gt;

&lt;p&gt;The greatest of all weaknesses is the fear of appearing weak.&lt;/p&gt;

&lt;p&gt;You can change your organization or change your organization. - Martin Fowler&lt;/p&gt;

&lt;p&gt;An investment in knowledge always pays the best interest - Benjamin Franklin&lt;/p&gt;

&lt;p&gt;Every piece of code must have a single, unambiguous, authoritative representation within a system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;p&gt;The cat ate my source code. page 111.&lt;/p&gt;

&lt;p&gt;Don't live with broken windows: Topic 3 software entropy. No broken windows. Don't cause collateral damage, just because there's crisis.&lt;/p&gt;

</description>
      <category>books</category>
      <category>csharp</category>
      <category>productivity</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>My take on the LCPC (Lebanese Competitive Programming Competition)</title>
      <dc:creator>Charbel Sarkis</dc:creator>
      <pubDate>Thu, 31 Oct 2019 20:02:17 +0000</pubDate>
      <link>https://dev.to/charbelsako/my-take-on-the-lcpc-lebanese-competitive-programming-competition-3g3b</link>
      <guid>https://dev.to/charbelsako/my-take-on-the-lcpc-lebanese-competitive-programming-competition-3g3b</guid>
      <description>&lt;h2&gt;
  
  
  How we trained?
&lt;/h2&gt;

&lt;p&gt;For this part I could seriously say we slacked off a lot. Not to mention the fact that we were solving the wrong questions to begin with. We ended up attempting to solve the ICPC questions instead of LCPC, believe it or not, there is a vast difference between them. So we were way in over our heads and programming in a language we didn’t have that much experience in (C++).&lt;/p&gt;




&lt;h2&gt;
  
  
  The actual competition
&lt;/h2&gt;

&lt;p&gt;The competition wasn’t THAT tough. It’s like every question was within the team’s grasp except for a tiny overlooked detail. As frustrating as it was, we only managed to solve 2 questions, but on the bright side, the food was great so it doesn’t matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  A couple of images from the competition
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q-Yo_Iu9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1080/1%2AHpea7z04ZlXs4VeKfILf-Q.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q-Yo_Iu9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/1080/1%2AHpea7z04ZlXs4VeKfILf-Q.jpeg" alt="" width="800" height="679"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zixbmpi2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/446/1%2A2dvyuPBx4aChBRD0X3x0UQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zixbmpi2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/max/446/1%2A2dvyuPBx4aChBRD0X3x0UQ.jpeg" alt="" width="446" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>competition</category>
      <category>lcpc</category>
      <category>cpp</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>My experience taking CS50's introduction to computer science</title>
      <dc:creator>Charbel Sarkis</dc:creator>
      <pubDate>Thu, 31 Oct 2019 19:36:16 +0000</pubDate>
      <link>https://dev.to/charbelsako/my-experience-taking-cs50-s-introduction-to-computer-science-5h2n</link>
      <guid>https://dev.to/charbelsako/my-experience-taking-cs50-s-introduction-to-computer-science-5h2n</guid>
      <description>&lt;p&gt;Ever since I found out about CS50 I thought of it as the best place to learn about computer science. So when I discovered the course was on edx I was more than thrilled to enroll. Personally, youtube videos were more than enough for me, but what really stands out in the online course is the homework part.&lt;/p&gt;




&lt;p&gt;Now you might think, how is the homework the distinguished part? Well, the course videos sort of explain what you need to build the program specified in the problem sets. The actual problem sets, however, are the meaty part of the course, this is where you can put your brain to work and (kind of) solve real world problems. Such problems include, retrieving lost images from a raw data file, ciphering messages and/or passwords, or even implementing your own hash table to make a spell checker. Not even does it stop there, but it continues to teach about python, how to use python for the back-end and some front-end knowledge as well.&lt;/p&gt;




&lt;p&gt;One thing that I especially admired about the course Is their insistence that your code should be formatted properly. This is the kind of topic that may not be spoken of or hashed out.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--37fDSACX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/800/0%2AobJosdy91RPPEHC6" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--37fDSACX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/800/0%2AobJosdy91RPPEHC6" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;This is the BEST online resource anyone could take to get into computer science. No background needed. It encapsulates most of the aspects of computer science to give the student a general overview of what they're getting themselves into. I've seen many universities that fail at doing this in my region, thus creating a group of students that change their major later on and that only wastes a person's time.&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>c</category>
      <category>onlinecourse</category>
    </item>
    <item>
      <title>My first web developer intern position</title>
      <dc:creator>Charbel Sarkis</dc:creator>
      <pubDate>Thu, 31 Oct 2019 19:04:15 +0000</pubDate>
      <link>https://dev.to/charbelsako/my-first-web-developer-intern-position-2efb</link>
      <guid>https://dev.to/charbelsako/my-first-web-developer-intern-position-2efb</guid>
      <description>&lt;p&gt;First thing’s first. How did I even find the company? I mean, I spent weeks searching for an intern position and couldn’t find one. So the fact is that my friend found the company and told them about my website which led to me to the interview.&lt;/p&gt;

&lt;h2&gt;
  
  
  The interview
&lt;/h2&gt;

&lt;p&gt;I was basically asked about what I know, although he did not ask for a CV so many things that I already knew (such as git) were not mentioned at the time. The employer then asked us to finish a coding challenge to write in ANY language.&lt;/p&gt;

&lt;p&gt;The challenge consisted of reading in an excel file, getting the names from its rows and finding the images corresponding to the names, then copying them into a new folder. (I know what you’re thinking, where’s the challenge?). However, for some reason I used &lt;code&gt;nodejs&lt;/code&gt; and completely forgot about the asynchronous nature of the &lt;code&gt;fs&lt;/code&gt; module, so I ended up taking a long time to finish the challenge.&lt;/p&gt;

&lt;h2&gt;
  
  
  The actual Job
&lt;/h2&gt;

&lt;p&gt;On the first day, we were given reading tasks to learn about gitlab, HTML/CSS/JS, a niche db manipulating package that is no longer maintained, SQL. Pretty easy right? Well…the fact is no one tells you that the niche db manipulating package that is no longer maintained is actually no longer maintained since 10 years.&lt;/p&gt;

&lt;p&gt;The setup was nice. It was a dual monitor setup with a macbook pro.&lt;/p&gt;

&lt;p&gt;The task that was given to me and my colleague was nowhere near as simple as what they give you in university. It required me knowing extensive knowledge in 2 different APIs that I’ve never seen before. That was part of the reason why I’m writing this. University is like when your dad tells you to get him the screwdriver, you feel like you actually did something productive and helpful, but the actual work is much more difficult than you think.&lt;/p&gt;

&lt;p&gt;Overall, however hard it may get once you get the job done you just gained valuable experience that’s gonna help you in your career.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>internship</category>
      <category>frontend</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
