<?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: Abdelrahman Mohamed Abdelnabi</title>
    <description>The latest articles on DEV Community by Abdelrahman Mohamed Abdelnabi (@abdelrahmanabdelnabi).</description>
    <link>https://dev.to/abdelrahmanabdelnabi</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%2F323857%2F5d49a570-cd22-4419-8aae-12990fc0d72f.png</url>
      <title>DEV Community: Abdelrahman Mohamed Abdelnabi</title>
      <link>https://dev.to/abdelrahmanabdelnabi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abdelrahmanabdelnabi"/>
    <language>en</language>
    <item>
      <title>Fill in the Gaps of Your CS Education with MIT</title>
      <dc:creator>Abdelrahman Mohamed Abdelnabi</dc:creator>
      <pubDate>Sat, 15 Feb 2020 06:58:36 +0000</pubDate>
      <link>https://dev.to/abdelrahmanabdelnabi/fill-in-the-gaps-of-your-cs-education-with-mit-3081</link>
      <guid>https://dev.to/abdelrahmanabdelnabi/fill-in-the-gaps-of-your-cs-education-with-mit-3081</guid>
      <description>&lt;p&gt;So you are studying for a computer science degree or you are self taught programmer or a software engineer who recently joined the workforce. You feel there are little gaps in your CS foundations which is affecting your confidence and making you feel like an imposter.&lt;/p&gt;

&lt;p&gt;Luckily, MIT CSAIL (computer science and artificial intelligence lab) has just published an 11 lecture course for free on the internet along with lecture notes and exercises. And guess what! the course title is "the missing semester of your CS education". (link is at the end)&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it about
&lt;/h2&gt;

&lt;p&gt;The course walks you through most of the tools you should know as a software engineer.&lt;/p&gt;

&lt;p&gt;It begin with the shell, how it works, how to use, what is the PATH environment variable, writing bash scripts, and piping commands together.&lt;/p&gt;

&lt;p&gt;Then it talks about text editors like Vim that you should start using. If you don't know what vim is then you should read my article on it &lt;a href="https://dev.to/abdelrahmanabdelnabi/why-vim-is-great-and-why-use-it-1ecf"&gt;here on DEV.&lt;/a&gt; They also talk about "tmux" which is a a very useful tool for managing terminal sessions and grouping them into panes and windows.&lt;/p&gt;

&lt;p&gt;Next up is data wrangling, which is just a fancy name for transforming data from one format to another. This is a great lecture which talks about some of most useful linux commands like &lt;code&gt;sed&lt;/code&gt;, &lt;code&gt;awk&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;head&lt;/code&gt;, &lt;code&gt;tail&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;ssh&lt;/code&gt;, &lt;code&gt;sort&lt;/code&gt; and &lt;code&gt;uniq&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The course then talks about the command line environment, processes, how to kill them, background/foreground them, command aliases, dot files, terminal emulators.  Then it introduces git, the most popular version control system.&lt;/p&gt;

&lt;p&gt;Finally, it switches to more advanced topics like debugging, profiling for code optimization, build systems (the &lt;code&gt;make&lt;/code&gt; tool, package/dependency managers, CI systems), security and cryptography.&lt;/p&gt;

&lt;p&gt;The course ends with topics chosen by students. They discuss a lot of separate but very interesting (mostly linux) tools and tricks that you must know and then exits with a Q&amp;amp;A lecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should I watch it?
&lt;/h2&gt;

&lt;p&gt;Absolutely, if the description I wrote in the introduction applies to you, then you should definitely take it. Luckily, the course isn't too long and you should be able to finish it quickly. Trust me, it will make you life (especially on linux) much easier as a software engineer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where is it?
&lt;/h2&gt;

&lt;p&gt;So without further ado, here is &lt;a href="https://missing.csail.mit.edu/"&gt;the link.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mit</category>
      <category>computerscience</category>
      <category>bash</category>
      <category>beginnner</category>
    </item>
    <item>
      <title>Why Vim is Great and why use it!</title>
      <dc:creator>Abdelrahman Mohamed Abdelnabi</dc:creator>
      <pubDate>Sat, 25 Jan 2020 12:33:34 +0000</pubDate>
      <link>https://dev.to/abdelrahmanabdelnabi/why-vim-is-great-and-why-use-it-1ecf</link>
      <guid>https://dev.to/abdelrahmanabdelnabi/why-vim-is-great-and-why-use-it-1ecf</guid>
      <description>&lt;p&gt;My first impression of vim was rather not impressive. The first time I saw or used vim was around 4 years ago when I was in my first year of university. I didn't imagine how could someone use a text editor in a terminal with no GUI, no mouse, no buttons, and no clear way how to exit it. But here I am four years later, using vim like a maniac and loving it. So what made me do the switch?&lt;/p&gt;

&lt;p&gt;Just to make sure were are on a common ground, Vim is a text editor rather than an IDE. So it is similar to Sublime rather than VSCode or IntelliJ. This means you won't get the features offered by various IDEs, however you will get a tool that will make text editing absolutely enjoyable and efficient.&lt;/p&gt;

&lt;p&gt;Vim is designed so that your fingers will rest on the home row of your keyboard most of the time, with no need to switch to the arrow keys or to the mouse. All editing can be done using just keystrokes including switching tabs, running commands, copying and pasting text, and any other thing a text editor can do. By eliminating this context switch between the keyboard, arrow keys, and the mouse, you gain a significant improvement in efficiencyj once you get your head around Vim commands. I definitely admit that Vim has a steep learning curve but surpassing it is totally rewarding.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Glimpse of what you can do with Vim
&lt;/h2&gt;

&lt;p&gt;It would take a book to cover the things vim can do, so here I will try to mention some of the most useful vim features that hopefully will convince you to give it a try and possibly make the switch.&lt;/p&gt;

&lt;h3&gt;
  
  
  inserting text
&lt;/h3&gt;

&lt;p&gt;Let's start with inserting text. In Vim if you are standing with your cursor in the middle of a line on any character in normal mode you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;use O to insert a new line above the current line and jump to it and go to insert mode&lt;/li&gt;
&lt;li&gt;use o to insert a new line below the current line and jump to it and go to insert mode&lt;/li&gt;
&lt;li&gt;use I to jump to the beginning of the line and go to insert mode&lt;/li&gt;
&lt;li&gt;use A to jump to the end of the line and go to insert mode&lt;/li&gt;
&lt;li&gt;use i to insert at the current position of the cursor&lt;/li&gt;
&lt;li&gt;use a to insert at the next character just after the cursor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is very handy when writing code as you usually need to insert code at one of these locations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Repetition
&lt;/h3&gt;

&lt;p&gt;In vim you can combine numbers with commands to repeat the command a specific number of times. For example, typing "15k" in normal mode will jump down 15 lines.&lt;/p&gt;

&lt;p&gt;In vim you can also use the "." (dot) command to repeat the last command.&lt;/p&gt;

&lt;p&gt;Think of how easy it is to repeat the boring stuff in vim this simply.&lt;/p&gt;

&lt;h3&gt;
  
  
  Navigating the code
&lt;/h3&gt;

&lt;p&gt;Code navigation in vim is very powerful either in the same file or across multiple files. In vim you can just to the next or previous instance of the word under the cursor using * and #, which is useful if you are searching for the declaration/usage of a variable/function.&lt;/p&gt;

&lt;p&gt;In vim, there is a thing called a jump list which records the jumps you have made from a location in the file to another location. You can access it using &lt;code&gt;:jumps&lt;/code&gt;. You can jump in or out of you jump list using Ctrl/I and Ctrl+O. This turns out very helpful when are jumping between multiple files/functions in the codebase.&lt;/p&gt;

&lt;p&gt;You can go to the declaration of a function using "gd" (short for go declaration).&lt;/p&gt;

&lt;p&gt;You can jump to the beginning and end of a file using "gg" and "G".&lt;/p&gt;

&lt;p&gt;You can jump to the top, middle, and bottom of the screen/viewport using H, M, and L respectively (short for high, middle and low).&lt;/p&gt;

&lt;p&gt;You can scroll half a page up or down using Ctrl+u or Ctrl+d&lt;/p&gt;

&lt;p&gt;You can jump to the beginning or end of a line using ^ and $.&lt;/p&gt;

&lt;p&gt;You can even define bookmarks on any line, or more precisely if you want, a character on a line and give this bookmark a letter which you can use to jump to it.&lt;/p&gt;

&lt;p&gt;You can scroll the viewport/screen so that the current line (line with the cursor) becomes at the top, middle, or bottom of the screen using "zt", "zz", and "zb" respectively.&lt;/p&gt;

&lt;p&gt;This is just the beginning, the list goes on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Combining Commands and Text Objects
&lt;/h3&gt;

&lt;p&gt;Text objects are like the operators of an operand, the text that the command will act on. Text objects include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a word (aw)&lt;/li&gt;
&lt;li&gt;a paragraph (ap)&lt;/li&gt;
&lt;li&gt;a sentence (as)&lt;/li&gt;
&lt;li&gt;inner word (iw)&lt;/li&gt;
&lt;li&gt;inner paragraph (ip)&lt;/li&gt;
&lt;li&gt;inner sentence (is)&lt;/li&gt;
&lt;li&gt;text inside parentheses/brackets/quotes/html tags ...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can combine commands with text objects to do more powerful stuff. So for example, to copy the word the cursor is currently at you can use "yiw" (y for yank and iw for inner word). Similarly, to delete the paragraph the cursor is at you can use "dip". Also, if you a have a string delimited by double quotes and your cursor is anywhere inside the string you can change (delete and go into insert mode) by typing "ci"" (short for change inside ") this also works with other delimiters like [], {}, (), '', ... Very efficient, isn't it?&lt;/p&gt;

&lt;p&gt;More about text objects and the difference between each one in this amazing guide &lt;a href="https://blog.carbonfive.com/2011/10/17/vim-text-objects-the-definitive-guide/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  recording macros
&lt;/h3&gt;

&lt;p&gt;If you find yourself repeating a sequence of commands to edit some text you can record them and replay them later as much as you want with two keystrokes. You can start recording a macro using "q" then the letter that the macro will be saved at then type the sequence of commands you want to perform then "q" to stop recording. You can then repeat the macro using "@letter" where letter is the letter you saved the macro at. That's just one of the powerful features of Vim.&lt;/p&gt;

&lt;h3&gt;
  
  
  Plugins
&lt;/h3&gt;

&lt;p&gt;Barebones vim may not have the features provided by powerful IDEs like IntelliJ or PyCharm for example. Features like source control integration, linting, whitespace highlighting, multiple line commenting, file tree navigation sidebar are available as plugins that can be easily installed for Vim through a plugin manager.&lt;/p&gt;

&lt;p&gt;You can browse plugins for vim &lt;a href="https://vimawesome.com/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Windows and Tabs
&lt;/h3&gt;

&lt;p&gt;Vim organizes buffers (files) into windows and windows into tabs. You can open a file for editing using &lt;code&gt;:e filename&lt;/code&gt;. Window commands start with Ctrl+W then a windows command. You can open windows jump between windows, close windows, swap windows, split windows, resize windows all with Ctrl+W and a single keystroke.&lt;/p&gt;

&lt;p&gt;You can open a new tab with &lt;code&gt;:tabnew&lt;/code&gt; or &lt;code&gt;:tabn&lt;/code&gt; for short and jump between the next and pervious tab using "gt" and "gT".&lt;/p&gt;

&lt;p&gt;This logical grouping of windows and tabs is very convenient and makes it easy to organize revelant files into the same tab to together and makes navigating the codebase efficient with a few keystrokes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Find and Replace
&lt;/h3&gt;

&lt;p&gt;Find and replace in vim is very powerful. It accepts "sed" like expressions and you can apply them to a single line, a sequence of lines, a file, or a directory, or files matching a specific pattern. You can search forward using "/" and backward using "?". You can search for characters forward using "f" and backward using "F".&lt;/p&gt;

&lt;h3&gt;
  
  
  Defining your own commands (Advanced)
&lt;/h3&gt;

&lt;p&gt;You can define your own commands and bind them to a sequence of keystrokes. Vim has this thing called the leader key which is configurable key that you can define and then use to define new commands and use them by first typing the leader key then the key (or sequence of keys) you have bound the command to. So this leader key allows you to reuse all the keys that vim already uses but use them to perform your own set of commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vimifying your computer
&lt;/h2&gt;

&lt;p&gt;I found the Vim life using the keyword very efficient and found myself trying to adopt it in other tasks. "Surfing keys" is one chrome plugins that allows you to use vim like commands to navigate the web.&lt;/p&gt;

&lt;p&gt;Tmux is a terminal multiplexer that allows you to manager multiple terminal windows and sessions in a single window and manipulate them using the keyboard. It is very powerful and it will make your terminal life easier and more efficient and enjoyable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to Start
&lt;/h2&gt;

&lt;p&gt;The vim learning curve might be steep at the beginning but once you are through it you will feel enjoyment when using it. I definitely recommend it if you are a software engineer who is trying to optimize his development and coding time.&lt;/p&gt;

&lt;p&gt;I recommend &lt;a href="https://www.youtube.com/watch?v=1lzXr-MztOU&amp;amp;list=PLy7Kah3WzqrEjsuvhT46fr28Q11oa5ZoI"&gt;this video series&lt;/a&gt; on YouTube by "The Frugal Computer Guy". The tutorials are very easy to follow and will make you a vim user in no time. I've watched many Vim talks but this playlist is very comprihensive.&lt;/p&gt;

&lt;p&gt;If you are still reluctant to try it out, most IDEs will have community built plugins that will bring vim editing into it. So this may help you ease yourself into vim and get you up and running without leaving your favourite IDE.&lt;/p&gt;

&lt;p&gt;The vim manual is also the go to documentation when you are looking for ways to do a specific task in vim. You can launch it by typing &lt;code&gt;:h &amp;lt;topic&amp;gt;&lt;/code&gt; inside vim&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Vim is very powerful and what I've just talked about here only scratches its surface. People usually spend years to become experts in vim. It is very normal to find yourself learning new things about vim everyday for years. You just have to have enough courage to take the first step and get past the initial phase of getting yourself around, and I believe you will find it very rewarding.&lt;/p&gt;

</description>
      <category>vim</category>
    </item>
  </channel>
</rss>
