<?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: Yaron Wittenstein</title>
    <description>The latest articles on DEV Community by Yaron Wittenstein (@yaronwittenstein).</description>
    <link>https://dev.to/yaronwittenstein</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%2F179415%2F284a6a7e-35ec-4cb6-ab37-1279c45c5d5f.jpeg</url>
      <title>DEV Community: Yaron Wittenstein</title>
      <link>https://dev.to/yaronwittenstein</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yaronwittenstein"/>
    <language>en</language>
    <item>
      <title>Read it or Throw it #213</title>
      <dc:creator>Yaron Wittenstein</dc:creator>
      <pubDate>Sat, 24 Aug 2019 17:00:12 +0000</pubDate>
      <link>https://dev.to/yaronwittenstein/read-it-or-throw-it-213-4bi5</link>
      <guid>https://dev.to/yaronwittenstein/read-it-or-throw-it-213-4bi5</guid>
      <description>&lt;p&gt;&lt;a href="https://read-it-or-throw-it.blogspot.com/2019/08/read-it-or-throw-it-213.html"&gt;https://read-it-or-throw-it.blogspot.com/2019/08/read-it-or-throw-it-213.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>news</category>
    </item>
    <item>
      <title>Top 8 Productivity Principles for Any Developer</title>
      <dc:creator>Yaron Wittenstein</dc:creator>
      <pubDate>Wed, 21 Aug 2019 11:52:12 +0000</pubDate>
      <link>https://dev.to/yaronwittenstein/top-8-productivity-principles-for-any-developer-42hm</link>
      <guid>https://dev.to/yaronwittenstein/top-8-productivity-principles-for-any-developer-42hm</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wp3c3RLc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/880/1%2AYmWrbpnaWh-lgUfzCBk_bA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wp3c3RLc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/880/1%2AYmWrbpnaWh-lgUfzCBk_bA.png" alt="Headline"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;One of the subjects I've always been very passionate about is productivity.&lt;br&gt;
Looking for ways to do more in less time and effort is a matter of high importance.&lt;br&gt;
Saving many tiny-energy exertions across a workday adds up to a significant energy saver in total.&lt;/p&gt;

&lt;p&gt;The internet is flooded with programming productivity articles.&lt;br&gt;
Isn't writing a new one is kinda unproductive? 😉&lt;/p&gt;

&lt;p&gt;Well, the vast majority of programming productivity articles are very specific.&lt;br&gt;
Here are some examples of the articles you should expect to find:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Must have tools for any Mac Web developer for 2019&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Top 10 tools for any Windows programmer&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Most popular tools for Web Development&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
I wanted to write an article that will focus on principles before the tools.&lt;/p&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;New tools come and go frequently. What stays with us are the principles.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I've picked, what I believe are the top 8 productivity principles any developer should employ.&lt;/p&gt;

&lt;p&gt;I'll also provide with tools recommendations for Mac since I'm a Mac user. Part of my recommendations run on other Operating-Systems as well.&lt;br&gt;
Regardless of my suggestions, applying these principles to other Operating-systems or finding alternative Mac tools should be easy.&lt;/p&gt;

&lt;p&gt;Again, what's important is sticking to the principles and not to the tools.&lt;/p&gt;

&lt;p&gt;So let's drill down...&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Principle #1 - Automating Workflows&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A decent amount of a programmer's time is spent on doing repetitive tasks over and over again.&lt;/p&gt;

&lt;p&gt;Here are a fraction of some common scenarios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Searching Stack Overflow via Google.&lt;/li&gt;
&lt;li&gt;Killing an Operating-System process that hangs frozen or just consumes too much memory due to a memory leak.&lt;/li&gt;
&lt;li&gt;Clearing the browser cache and refreshing our local &lt;a href="http://0.0.0.0:8000"&gt;http://0.0.0.0:8000&lt;/a&gt; development page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Part of these examples are non-directly programming tasks but are still indispensable for any professional programmer.&lt;br&gt;
For example: Looking for the time-zone/weather in other parts of the world.&lt;/p&gt;

&lt;p&gt;Many of these repetitive tasks involve a sequence of steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When looking for help at &lt;em&gt;Stack Overflow&lt;/em&gt;, we need to go to the browser first and make a search via some search-engine.
Then, we'll select one of the top results which will probably direct us to a  &lt;em&gt;Stack Overflow&lt;/em&gt; page, even if we didn't add the term &lt;code&gt;stackoverflow&lt;/code&gt; explicitly to the search itself.&lt;/li&gt;
&lt;li&gt;In order to shut down a frozen Operating-System process, we first need to look for its process id (PID) and then execute a kill command.
(or go to a process explorer GUI, find it there and ask for killing it).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fortunately, there exist various tools dedicated to automating these manual repetitive actions.&lt;/p&gt;

&lt;p&gt;If you're a Mac user then, macOS ships with a tool called &lt;a href="https://support.apple.com/en-gb/guide/automator/welcome/mac"&gt;Automator&lt;/a&gt; that lets you create very complicated workflows.&lt;br&gt;
I can't say more on that tool since I didn't actually use it. I do use another one-stop-shop productivity tool called &lt;a href="https://www.alfredapp.com/"&gt;Alfred&lt;/a&gt; which I'll mention a few times&lt;br&gt;
during the course of this article.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.alfredapp.com/"&gt;Alfred&lt;/a&gt; is a versatile productivity app for Mac users. It's one of the most popular productivity Mac apps for years, and for a good reason!&lt;br&gt;
One of the key strengths of Alfred is Workflows.&lt;br&gt;
Here is an image for illustration: &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--r35QqeJ2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.alfredapp.com/media/pages/home/workflows-ff4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r35QqeJ2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.alfredapp.com/media/pages/home/workflows-ff4.png" alt="Alfred Workflow Image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basically, each tool has its own strengths and it depends on the situation.&lt;br&gt;
To my understanding, &lt;a href="https://support.apple.com/en-gb/guide/automator/welcome/mac"&gt;Automator&lt;/a&gt; is more &lt;a href="https://ifttt.com/"&gt;IFTTT&lt;/a&gt;/&lt;a href="https://zapier.com/"&gt;zapier&lt;/a&gt; style tool. &lt;a href="https://support.apple.com/en-gb/guide/automator/welcome/mac"&gt;Automator&lt;/a&gt; hooks into to low-level Operating-System events,&lt;br&gt;
while &lt;a href="https://www.alfredapp.com/"&gt;Alfred&lt;/a&gt; mainly glues different components together and start running when we command it to.&lt;/p&gt;

&lt;p&gt;Tools like &lt;a href="https://support.apple.com/en-gb/guide/automator/welcome/mac"&gt;Automator&lt;/a&gt;/&lt;a href="https://www.alfredapp.com/"&gt;Alfred&lt;/a&gt; are general-purpose Workflow tools. Each has its own pros.&lt;br&gt;
There are also other, niche workflow tools/features. I use vim macros when I find a text-editing recurring pattern I'd like to automate during my work.&lt;br&gt;
A classic example for using a vim macro would be scanning a list of words separated by a comma, surrounding each with quotation marks.&lt;/p&gt;

&lt;p&gt;If you use tools like Excel, then I know its comes with full-featured programming-language called &lt;a href="https://en.wikipedia.org/wiki/Visual_Basic_for_Applications"&gt;VBA&lt;/a&gt;.&lt;br&gt;
The internet has articles about people that automated most of their day-work leveraging &lt;a href="https://en.wikipedia.org/wiki/Visual_Basic_for_Applications"&gt;VBA&lt;/a&gt; magic!&lt;/p&gt;

&lt;p&gt;Sometimes the best workflow solution is essentially writing code. Usually, it'll be a small script consuming less than 100 LOC like a build script.&lt;br&gt;
Other times, it'll be coding a small mini-project.&lt;/p&gt;

&lt;p&gt;The key point to take is that if you find yourself manually repeating a workflow-oriented process, think whether it can be automated using a general-purpose Workflow tool&lt;br&gt;
or using some ad-hoc software or if developing a solution from scratch will do the trick.&lt;/p&gt;

&lt;p&gt;What's important is to stay alert and open for new automating opportunities.&lt;/p&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Principle #2 - API &amp;amp; Inspection tools&lt;/strong&gt; 
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;API Tools&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Almost any developer has some connection to at least one HTTP connection during his workday (sorry if the pun wasn't funny). Be it faking an HTTP request for testing,&lt;br&gt;
or triggering some running code on a server endpoint. Good HTTP interface (a.k.a API tool) is mandatory.&lt;/p&gt;

&lt;p&gt;I highly recommend using &lt;a href="https://paw.cloud/"&gt;Paw&lt;/a&gt;. Most people use &lt;a href="https://www.getpostman.com"&gt;Postman&lt;/a&gt;, which is more feature-heavy. &lt;a href="https://www.getpostman.com"&gt;Postman&lt;/a&gt; also has running load-testing capabilities and many integrations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GMmNOFH_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-static.paw.cloud/img/discover/landing/landing-header-1ac8944e97.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GMmNOFH_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-static.paw.cloud/img/discover/landing/landing-header-1ac8944e97.png" alt="Paw image"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Once you use an API tool, make sure you save request files for future use.&lt;br&gt;
This can be a huge time saver if you mess a lot with the same API endpoints, only changing parameters instead of synthesizing from scratch each time&lt;br&gt;
you need. Additionally, sharing files between team members is important. You may want to have some shared place with widely used requests.&lt;br&gt;
It's can also serve as a complement to your knowledge-base of the system.&lt;/p&gt;

&lt;p&gt;If you work with higher-level popular protocols like gRPC you'll probably find matching UI tools that will suit your needs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Inspection Tools&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On other occasions, you may want to be passive and just sniff traffic and record the packets for later investigation or for replaying traffic.&lt;br&gt;
When I really needed a good proxy for inspecting data for Mac, I've used &lt;a href="https://www.charlesproxy.com/"&gt;Charles&lt;/a&gt;.&lt;br&gt;
Many years ago I've played a bit with &lt;a href="https://www.telerik.com/fiddler"&gt;Fiddler&lt;/a&gt; on Widows. It outgrew to support any popular Operating-Systems.&lt;/p&gt;

&lt;p&gt;This item won't be complete without mentioning the classic &lt;a href="https://www.wireshark.org"&gt;Wireshark&lt;/a&gt; of course.&lt;br&gt;
As you probably know, each Operating-System comes with built-in command-line tools such as tcpdump / curl.&lt;/p&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Principle #3 - Clipboard History&lt;/strong&gt; 
&lt;/h3&gt;

&lt;p&gt;Did it ever occur to you that you pasted some text into your IDE file just to realize that the Clipboard had another more recent content while you&lt;br&gt;
had no longer access to the previous Clipboard data?&lt;/p&gt;

&lt;p&gt;Not anymore. Using a Clipboard history is a must-have tool!&lt;/p&gt;

&lt;p&gt;I'm using &lt;a href="https://apps.apple.com/us/app/flycut-clipboard-manager/id442160987"&gt;Flycut&lt;/a&gt; but there are more alternatives for Mac. Actually, &lt;a href="https://www.alfredapp.com/"&gt;Alfred&lt;/a&gt; has a Clipboard History feature built-in.&lt;br&gt;
Even if you have a Clipboard history integrated within your IDE. It's still advisable to have a cross Operating-System Clipboard History tool.&lt;/p&gt;

&lt;p&gt;A small tip: if you're a Mac user and wants a very nice utility for selecting text and copying into the Clipboard, I highly recommend &lt;a href="https://apps.apple.com/us/app/popclip/id445189367"&gt;PopClip&lt;/a&gt;.&lt;br&gt;
This tool has many extensions. Like, selecting a word and asking for a Dictionary translation, or selecting a word and opening &lt;a href="https://kapeli.com/dash"&gt;Dash&lt;/a&gt; on that word.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WbR4DqZ9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ytimg.com/vi/9yNW6AOXosA/maxresdefault.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WbR4DqZ9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ytimg.com/vi/9yNW6AOXosA/maxresdefault.jpg" alt="Flycut image"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Principle #4 - Text Expansion &amp;amp; Abbreviations&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;General Text Expansion&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The classic usage of text expansion is writing an abbreviation representing a longer text-blob and then the text expander semi-magically substitutes the abbreviation&lt;br&gt;
for the expanded text.&lt;/p&gt;

&lt;p&gt;Programmers can benefit from text-expansion a lot in the context of code snippets.&lt;br&gt;
I'm currently not using a Snippets Manager, although I might use one someday. BTW, &lt;a href="https://www.alfredapp.com/"&gt;Alfred&lt;/a&gt; comes with a Snippets Manager out of the box too.&lt;/p&gt;

&lt;p&gt;I mostly use text expansions for visiting links like Google Docs I frequently visit.&lt;br&gt;
My text expander software for Mac is &lt;a href="https://www.trankynam.com/atext/"&gt;aText&lt;/a&gt;. You probably guessed right that &lt;a href="https://www.alfredapp.com/"&gt;Alfred&lt;/a&gt; offers it's own Text Expansion feature which I didn't try yet, but I bet it's awesome.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UHyOsGfn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.trankynam.com/atext/screenshots/main_window_variables.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UHyOsGfn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.trankynam.com/atext/screenshots/main_window_variables.png" alt="aText image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Command Line&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the command-line, I use many abbreviations aliases for longer commands (defined in my &lt;code&gt;.zshrc&lt;/code&gt; dot file).&lt;/p&gt;

&lt;p&gt;For example: Instead of writing &lt;code&gt;git reset HEAD --hard&lt;/code&gt; for a local Git repository, I just write &lt;code&gt;grhh&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If I need to merge branch &lt;code&gt;develop&lt;/code&gt; onto the current branch, I just type &lt;code&gt;gmd&lt;/code&gt;.&lt;br&gt;
Or instead of opening vim with the &lt;code&gt;vim&lt;/code&gt; command, I just insert &lt;code&gt;v&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Side Note&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a side note. Another tool in the realm of writing text is called &lt;a href="https://www.grammarly.com"&gt;Grammarly&lt;/a&gt;.&lt;br&gt;
It's an AI-powered writing assistant. I use it all the time when composing emails (also for fixing mistakes while writing this blog post ;) )&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d0jRGxeg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.techworld.com/cmsdata/downloads/34374/img3File_thumb800.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d0jRGxeg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.techworld.com/cmsdata/downloads/34374/img3File_thumb800.png" alt="Grammarly image"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Principle #5 - Instant local Search&lt;/strong&gt; 
&lt;/h3&gt;

&lt;p&gt;People are flooded with data. And we're the programmers are no exception to that.&lt;br&gt;
In order to shorten the search time looking for a piece of information, we must have good search tooling.&lt;/p&gt;

&lt;p&gt;What do we search?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Files / Directories / Apps&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Well, that's relevant for any computer user. Search is the most used feature of &lt;a href="https://www.alfredapp.com/"&gt;Alfred&lt;/a&gt;.&lt;br&gt;
I prefer it over &lt;em&gt;Spotlight&lt;/em&gt; which comes with macOS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V03xY7Qb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.alfredapp.com/media/pages/home/search.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V03xY7Qb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.alfredapp.com/media/pages/home/search.jpg" alt="Alfred Search and Browse"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fuzzy-Search the Command-line History&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The command-line is a programmer's best friend. We execute tons of commands during any single programming session.&lt;br&gt;
We usually repeat some recently used command, but not necessarily the very last one, making us press ↑↑..↑ in order to find the desired command.&lt;/p&gt;

&lt;p&gt;The cool way is to fuzzy-search our Command-line history.&lt;br&gt;
I'd like to recommend an awesome tool called &lt;a href="https://github.com/junegunn/fzf"&gt;fzf&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This gem lets us enrich our Command-line history with search-as-you-type (a.k.a fuzzy-search/incremental-search) capabilities.&lt;br&gt;
Not only that, but it also has another great feature for searching for a file by name with a preview mode option.&lt;br&gt;
So if we search for a file we can see it's preview in order to make sure that's what we seek for prior selecting it.&lt;/p&gt;

&lt;p&gt;This treasure is supported by any Operating-System and even has an official vim plugin called &lt;a href="https://github.com/junegunn/fzf.vim"&gt;fzf.vim&lt;/a&gt;.&lt;br&gt;
(I believe there are non-official plugins to other IDEs).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MvfbDyuc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://miro.medium.com/max/770/1%2A-LuwMJGzvqMUisXF54sPXA.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MvfbDyuc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://miro.medium.com/max/770/1%2A-LuwMJGzvqMUisXF54sPXA.gif" alt="fzf gif"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;If you're a zsh user, a super-handy plugin is &lt;a href="https://github.com/zsh-users/zsh-autosuggestions"&gt;zsh-autosuggestions&lt;/a&gt;.&lt;br&gt;
I use &lt;a href="https://github.com/zsh-users/zsh-autosuggestions"&gt;zsh-autosuggestions&lt;/a&gt;, and when I type a command, I get suggestions from my Command-line history&lt;br&gt;
which makes finding most commands a breeze without even asking for the assistance of &lt;a href="https://github.com/junegunn/fzf"&gt;fzf&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So &lt;a href="https://github.com/junegunn/fzf"&gt;fzf&lt;/a&gt; + &lt;a href="https://github.com/zsh-users/zsh-autosuggestions"&gt;zsh-autosuggestions&lt;/a&gt; make an unbeatable couple together!&lt;/p&gt;

&lt;p&gt;We use Command-line a significant fraction of our work. Being able to search our Command-line history is truly a must.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Offline Documentation&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the most frequent actions while programming is questioning "What's the syntax for doing &lt;em&gt;X&lt;/em&gt; in programming language &lt;em&gt;Y&lt;/em&gt;?"&lt;/p&gt;

&lt;p&gt;Instead of Googling for a syntax keyword or for some example showing how to use the standard library, it's suggested to have offline documentation ready for instant search on our machine.&lt;br&gt;
It can save loads of time and reduce context-switches substantially while programming.&lt;/p&gt;

&lt;p&gt;I use the most popular offline documentation tool for Mac called &lt;a href="https://kapeli.com/dash"&gt;Dash&lt;/a&gt;. It comes with documentation sets for almost every programming-language&lt;br&gt;
and also for many popular libraries. It also has integrations with any known IDE. Not only that, but you can add custom documentation of libraries&lt;br&gt;
since &lt;a href="https://kapeli.com/dash"&gt;Dash&lt;/a&gt; connects to many Packages Managers too.&lt;/p&gt;

&lt;p&gt;For activating &lt;a href="https://kapeli.com/dash"&gt;Dash&lt;/a&gt;, most of the times I'm using the &lt;a href="https://github.com/Kapeli/Dash-Alfred-Workflow"&gt;Dash Alfred Workflow&lt;/a&gt; for &lt;em&gt;Search &amp;amp; Open Dash&lt;/em&gt; via Alfred's prompt (it's super useful).&lt;/p&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--39QjxjKQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://kapeli.com/img/dash-s2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--39QjxjKQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://kapeli.com/img/dash-s2.png" alt="Dash image"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Principle #6 - Knowledge Management&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Inspired by the famous &lt;a href="https://gettingthingsdone.com/"&gt;GTD method&lt;/a&gt; for organizing knowledge, I'm using a &lt;em&gt;TODO list&lt;/em&gt; app to ease my mind and offload tasks out of my brain.&lt;br&gt;
Each time I'm thinking about something I need to do, I first add it as an item to my &lt;em&gt;TODO list&lt;/em&gt; app.&lt;br&gt;
Later, this item might be translated into a GitHub issue or even a roadmap / technical-debt document.&lt;/p&gt;

&lt;p&gt;For the past several years, I've been using &lt;a href="https://apps.apple.com/us/app/clear-tasks-reminders-to-do-lists/id504544917"&gt;Clear&lt;/a&gt;.&lt;br&gt;
I'll probably move to another app sometime since the last update was in 2016, and because I feel it lacks some features.&lt;br&gt;
But overall, it does the job!&lt;/p&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ao_qE--x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://assets.sbnation.com/assets/1700603/CLEAR_MAC_double_windows.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ao_qE--x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://assets.sbnation.com/assets/1700603/CLEAR_MAC_double_windows.png" alt="Clear image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to have fewer tabs hanging open in your browser and gain more focus, please consult using &lt;a href="https://getpocket.com/"&gt;Pocket&lt;/a&gt; for saving articles for future reading.&lt;br&gt;
It will help you clear your mind and focus on the current relevant tabs.&lt;/p&gt;

&lt;p&gt;You may also use a Sticky Notes app for jotting down pieces you'll probably want to move later for another long-term representation usage.&lt;br&gt;
And Speaking on long-term use, I'm a long-time avid user of &lt;a href="https://evernote.com"&gt;evernote&lt;/a&gt;. Some people use &lt;a href="https://evernote.com"&gt;evernote&lt;/a&gt; as their TODO list app too.&lt;br&gt;
Whatever works for you, just make sure you don't overload your brain with information, you can let someone else store for you.&lt;/p&gt;

&lt;p&gt;Knowledge Management can't be complete without mentioning a backup platform Dropbox/iCloud/GoogleDrive style.&lt;br&gt;
Anything mentioned in this article is encouraged to be backed-up. Some of the apps have a &lt;code&gt;Connect-with&lt;/code&gt; to a Cloud-provider integration,&lt;br&gt;
thus making the backup process smooth.&lt;/p&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Principle #7 - Keyboard Shortcuts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You probably know the keyboard shortcut for saving the current file changes in your IDE.&lt;br&gt;
But do you know for example the shortcut for re-opening your last closed browser tab?&lt;/p&gt;

&lt;p&gt;I believe that if one finds himself using the Mouse too often when a Keyboard shortcut exists, then he should struggle to start it.&lt;br&gt;
The best technique for memorizing these Keyboard shortcuts is by using a Spaced-repetition flashcards software like &lt;a href="https://apps.ankiweb.net/"&gt;Anki&lt;/a&gt;.&lt;br&gt;
&lt;a href="https://apps.ankiweb.net/"&gt;Anki&lt;/a&gt; is available for any operating system (Mac, Windows, Linux, Android, and iOS).&lt;/p&gt;

&lt;p&gt;I'm a big fan of &lt;a href="https://apps.ankiweb.net/"&gt;Anki&lt;/a&gt; and it helps me much learning new things (Keyboard shortcuts is a good use-case) and retaining them for long-term use.&lt;/p&gt;

&lt;p&gt;A side-note: speaking about flash-cards. Spaced-repetition is the best way to extend your language vocabulary.&lt;br&gt;
For that I deeply recommend &lt;a href="https://supermemo.com"&gt;SuperMemo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Putting the time to learn and memorize useful Keyboard shortcuts can have a tremendous positive impact on productivity.&lt;/p&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Principle #8 - Reading Code&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Apart from writing code, it's very important to have our reading and navigating an existing source code a pleasant experience.&lt;br&gt;
When I read other people's code I usually prefer to read it outside of an IDE (it's just a personal taste).&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
If I browse a GitHub repository I sometimes use &lt;a href="https://www.octotree.io"&gt;Octotree&lt;/a&gt; but I usually prefer to go with &lt;a href="http://sourcegraph.com"&gt;sourcegraph&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I really like &lt;a href="http://sourcegraph.com"&gt;sourcegraph&lt;/a&gt; navigation and searching features. &lt;a href="https://help.github.com/en/articles/navigating-code-on-github"&gt;GitHub has recently launched&lt;/a&gt; their take on code navigation, so we should expect it's only the&lt;br&gt;
beginning of something big.&lt;/p&gt;

&lt;p&gt;I recently came across a tool called &lt;a href="https://www.codestream.com/"&gt;codestream&lt;/a&gt; that lets you have an inner chat on the code within your IDE.&lt;br&gt;
Although I didn't try that tool yet (vim support is upcoming), I believe it can be a great assistant for reading code since it lets you add bookmarks (called &lt;a href="https://www.codestream.com/codemarks"&gt;codemarks&lt;/a&gt;).&lt;br&gt;
&lt;a href="https://www.codestream.com/"&gt;codestream&lt;/a&gt; also integrates it with other tools like Slack and many issue-tracking tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d03qevsm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://raw.githubusercontent.com/TeamCodeStream/CodeStream/master/images/animated/Spatial%2520VSC.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d03qevsm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://raw.githubusercontent.com/TeamCodeStream/CodeStream/master/images/animated/Spatial%2520VSC.gif" alt="codestream image"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Make sure you enjoy a good reading experience while reading other people's code. It can mitigate this already mentally demanding process.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this article, I've summarised what I believe, are the top 8 productivity principles each programmer should aim to apply.&lt;br&gt;
I'm humbled by the infinite number of tools and tricks available for us to apply these principles.&lt;/p&gt;

&lt;p&gt;I believe that using these principles, can not only speed our work but also increase our joy and sense of fulfillment.&lt;/p&gt;

&lt;p&gt;I'd like to thank you for reading this article!&lt;br&gt;
I hope you enjoyed reading it, and if you did please share it with your friends / Co-workers programmers.&lt;br&gt;
  Thank you!&lt;/p&gt;



&lt;p&gt;Links:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.alfredapp.com/"&gt;Alfred&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kapeli.com/dash"&gt;Dash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://paw.cloud/"&gt;Paw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.getpostman.com"&gt;Postman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.charlesproxy.com/"&gt;Charles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.telerik.com/fiddler"&gt;Fiddler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.wireshark.org"&gt;Wireshark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/us/app/flycut-clipboard-manager/id442160987"&gt;Flycut&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/us/app/popclip/id445189367"&gt;PopClip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.trankynam.com/atext/"&gt;aText&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/junegunn/fzf"&gt;fzf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.grammarly.com"&gt;Grammarly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.ankiweb.net/"&gt;Anki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://supermemo.com"&gt;SuperMemo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gettingthingsdone.com/"&gt;GTD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://evernote.com"&gt;evernote&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/us/app/clear-tasks-reminders-to-do-lists/id504544917"&gt;Clear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getpocket.com/"&gt;Pocket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.octotree.io"&gt;Octotree&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sourcegraph.com"&gt;sourcegraph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codestream.com/"&gt;codestream&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/YaronWittenstein/productivity-tips-for-mac"&gt;https://github.com/YaronWittenstein/productivity-tips-for-mac&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Read it or Throw it #212</title>
      <dc:creator>Yaron Wittenstein</dc:creator>
      <pubDate>Fri, 28 Jun 2019 21:13:29 +0000</pubDate>
      <link>https://dev.to/yaronwittenstein/read-it-or-throw-it-212-585g</link>
      <guid>https://dev.to/yaronwittenstein/read-it-or-throw-it-212-585g</guid>
      <description>&lt;p&gt;&lt;a href="https://read-it-or-throw-it.blogspot.com/2019/06/read-it-or-throw-it-212.html"&gt;https://read-it-or-throw-it.blogspot.com/2019/06/read-it-or-throw-it-212.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>news</category>
    </item>
    <item>
      <title>The importance of unlearning</title>
      <dc:creator>Yaron Wittenstein</dc:creator>
      <pubDate>Fri, 28 Jun 2019 12:34:44 +0000</pubDate>
      <link>https://dev.to/yaronwittenstein/the-importance-of-unlearning-3322</link>
      <guid>https://dev.to/yaronwittenstein/the-importance-of-unlearning-3322</guid>
      <description>&lt;p&gt;The world of software is changing constantly at a very fast pace.&lt;br&gt;
Yesterday’s axioms might be tomorrow’s anti-patterns.&lt;/p&gt;

&lt;p&gt;Newborn technologies rise to popularity and most of them will become obsolete sooner than expected and hardware advancements make game changers for things that were considered as science-fiction a few years ago.&lt;/p&gt;

&lt;p&gt;The only certainty is that we don’t know what the future will bring us.&lt;/p&gt;

&lt;p&gt;Here is a partial list of recent years emerging technologies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Blockchain&lt;/strong&gt;&lt;br&gt;
Needless to say that blockchain has a good chance to disrupt the world as we know today&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Machine Learning Renaissance&lt;/strong&gt;&lt;br&gt;
The increase of Hardware capabilities brought a new wave of tools and disruption to many industries that take advantage of Machine Learning&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Containers&lt;/strong&gt;&lt;br&gt;
Now it’s much easier to deploy self-contained isolated components to the cloud. Containers orchestration infrastructures that only giants like &lt;em&gt;Google&lt;/em&gt; had in-house are now publicly available for everyone (Kubernetes is the king here for now but the future will bring new tools for sure)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;WebAssembly&lt;/strong&gt;&lt;br&gt;
The motivation is to have one universal bytecode that will be used not only on the browsers but on everything (desktop/smartphones/god knows).&lt;br&gt;
This technology will transform the portability of software between platforms&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rust&lt;/strong&gt;&lt;br&gt;
One of the most innovative programming languages ever invented,&lt;br&gt;
makes system programming a real joy. The most loved programming language in &lt;em&gt;Stack Overflow survey&lt;/em&gt; for the last 4 years&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Elixir&lt;/strong&gt;&lt;br&gt;
The solution to how to make Erlang virtual machine (called BEAM) mainstream, mainly thanks to its Ruby-like syntax and great tooling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Serverless&lt;/strong&gt;&lt;br&gt;
Why deploy containers to the cloud when we want only a single function that doesn’t need to be up 24x7?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GraphQL&lt;/strong&gt;&lt;br&gt;
REST API is not ideal for every problem, many data models are actually viewed better as a graph and this protocol plays nicely with them&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Redis&lt;/strong&gt;&lt;br&gt;
The innovative key-value database having so many data-structures.&lt;br&gt;
The most loved database in &lt;em&gt;Stack Overflow survey&lt;/em&gt; for the last 3 years&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kafka&lt;/strong&gt;&lt;br&gt;
Distributed commit log that serves as the single point of truth of a system data. It makes it very easy to add/remove independent producers/consumers for our system architecture.&lt;br&gt;
Thanks to Kafka it's easy to select a checkpoint and &lt;em&gt;“re-play”&lt;/em&gt; historical data.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On the one hand, it’s an exciting time to be a software developer.&lt;br&gt;
On the other hand, it means that in order to keep up, we must not stop learning or we’ll become irrelevant&lt;/p&gt;

&lt;p&gt;I’ve always loved (and still do) learning.&lt;br&gt;
I love reading technical books (I own too many).&lt;br&gt;
I love reading beautiful pieces of source code.&lt;br&gt;
I always seek for ways to be more productive and get out of my comfort zone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But, I think there is one important thing that people often overlook and is the importance of unlearning things&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s review again the above list of technologies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Blockchain&lt;/strong&gt;&lt;br&gt;
In order to understand how blockchain technologies work, we must forget about the centralized middleman model.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Machine Learning&lt;/strong&gt;&lt;br&gt;
For example, we need to accept here that computer neural networks can output results which we’ll be impossible for us to understand exactly where they came from&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Containers&lt;/strong&gt;&lt;br&gt;
Containers disrupted the DevOps world and are the key reason for the micro-services architecture explosion. Without them, we’d stay with more monolithic systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;WebAssembly&lt;/strong&gt;&lt;br&gt;
Will open many opportunities, the obvious is using new programming languages for Frontend Programming. Another world of possibilities will be consuming WebAssembly libraries and using them within our applications. For example, a Rust program that will initiate a WebAssembly runtime hosting other wasm programs that were originally coded in Golang/Swift/other)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rust&lt;/strong&gt;&lt;br&gt;
Learning the Rust programming language &lt;a href="https://www.influxdata.com/blog/rust-can-be-difficult-to-learn-and-frustrating-but-its-also-the-most-exciting-thing-in-software-development-in-a-long-time/"&gt;requires us to think on resources differently&lt;/a&gt; in terms of borrowing/ownership.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Elixir&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://ferd.ca/the-zen-of-erlang.html"&gt;The Let it crash&lt;/a&gt; philosophy of Erlang asks us to accept unknowns and that things will break and prepare for them from the beginning&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Serverless&lt;/strong&gt;&lt;br&gt;
Asks us to stop thinking only about services but also about single functions. It opens new opportunities to save money since we only pay for when the usage of a function (which might not be available 24x7)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GraphQL&lt;/strong&gt;&lt;br&gt;
Requires us to accept that REST isn’t always the best for every scenario and that sometimes there is actually a graph. (I personally think that starting from a REST API and gradually move towards a GraphQL is less risky for a green-field project)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Redis&lt;/strong&gt;&lt;br&gt;
Requires us to represent data in many more shapes: Key-Value / Hashes / Set / SortedSets / Lists etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kafka&lt;/strong&gt;&lt;br&gt;
Once we start viewing our &lt;a href="https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying"&gt;system data as a log&lt;/a&gt;, we can think more about replaceable components on our system. For example, we can easily add a new consumer and make it process data and spill it into a new database and know it won’t interfere with the rest of the system.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Unlearning means we need to accept that there might be more than one solution to a given problem, and this solution might be counterintuitive for us.&lt;/p&gt;

&lt;p&gt;It also requires humility and willingness to start over in order to gain a new perspective and extend our toolbox.&lt;/p&gt;

&lt;p&gt;Doing unlearning is a continuous inner fight. If done properly can be a huge enabler and if not, then we risk missing growth opportunities.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A change in perspective is worth 80 IQ points (Alan Kay)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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