<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ustun Ozgur - Software Engineering Blog</title>
    <description>Ustun Ozgur - Software Consultant and Engineer. Expert solution architect and programmer in Python (Django), JavaScript (React), .NET, Clojure and Java.
</description>
    <link>http://ustunozgur.com/</link>
    <atom:link href="http://ustunozgur.com/feed.xml" rel="self" type="application/rss+xml" />
    <pubDate>Fri, 11 Jan 2019 19:30:55 +0000</pubDate>
    <lastBuildDate>Fri, 11 Jan 2019 19:30:55 +0000</lastBuildDate>
    <generator>Jekyll v3.7.4</generator>
    
      <item>
        <title>The NoSQL Database Every Software Developer Uses</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://cdn-images-1.medium.com/max/2600/0*vjLOAZszHK6CJoPu&quot; alt=&quot;&amp;quot;Test&amp;quot;&quot; /&gt;&lt;/p&gt;

&lt;figure&gt;
&lt;figcaption class=&quot;imageCaption&quot;&gt;Photo by &lt;a href=&quot;https://unsplash.com/@fanhungry?utm_source=medium&amp;amp;utm_medium=referral&quot; data-href=&quot;https://unsplash.com/@fanhungry?utm_source=medium&amp;amp;utm_medium=referral&quot; class=&quot;markup--anchor markup--figure-anchor&quot; rel=&quot;photo-creator nofollow noopener&quot; target=&quot;_blank&quot;&gt;Dương Trần Quốc&lt;/a&gt; on&amp;nbsp;&lt;a href=&quot;https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral&quot; data-href=&quot;https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral&quot; class=&quot;markup--anchor markup--figure-anchor&quot; rel=&quot;photo-source nofollow noopener&quot; target=&quot;_blank&quot;&gt;Unsplash&lt;/a&gt;&lt;/figcaption&gt;

&lt;/figure&gt;

&lt;p&gt;One of the greatest ironies of software development is that programmers use plain text files for their most valuable assets, the code; whereas they would rarely use that for storing the data of their products.&lt;/p&gt;

&lt;p&gt;Almost every programmer, even the most adamant ones who would never think of using anything other than a relational database for storing data, use a NoSQL database when they are developing software: the file system. And the file system is messy and unstructured.&lt;/p&gt;

&lt;p&gt;Almost every programmer, even the most adamant ones who would never think of using an untyped or dynamically typed language uses untyped things called “files” for storing their code. What is the type of your files? All your files have the following type: String!&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;progressiveMedia-image js-progressiveMedia-image&quot; data-src=&quot;https://cdn-images-1.medium.com/max/1600/0*MwHGy69nfg2LvRhC&quot; src=&quot;https://cdn-images-1.medium.com/max/1600/0*MwHGy69nfg2LvRhC&quot; /&gt;&lt;/p&gt;
&lt;figcaption class=&quot;imageCaption&quot;&gt;Photo by &lt;a href=&quot;https://unsplash.com/@steve_j?utm_source=medium&amp;amp;utm_medium=referral&quot; data-href=&quot;https://unsplash.com/@steve_j?utm_source=medium&amp;amp;utm_medium=referral&quot; class=&quot;markup--anchor markup--figure-anchor&quot; rel=&quot;photo-creator nofollow noopener&quot; target=&quot;_blank&quot;&gt;Steve Johnson&lt;/a&gt; on&amp;nbsp;&lt;a href=&quot;https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral&quot; data-href=&quot;https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral&quot; class=&quot;markup--anchor markup--figure-anchor&quot; rel=&quot;photo-source nofollow noopener&quot; target=&quot;_blank&quot;&gt;Unsplash&lt;/a&gt;&lt;/figcaption&gt;

&lt;p&gt;All files have some metadata as well. File name is the most common metadata. A file’s name is not inside the file. Neither its creation or access dates. And that’s more or less what this database we store our code on, the file system provides. Could you do better? How about if every symbol in our code had some sort of metadata? Very few languages have this, and even the ones who has this builtin like Clojure rarely make use of it.&lt;/p&gt;

&lt;p&gt;You might argue that Git is sort of a database for storing the code, and it is true to a certain extent. It stores the data after some transformation and optimization, and it stores older versions of the data, but that’s pretty much about it. As metadata, it has “tags”, but tags are metadata for commits, not specific files. As a database, Git lacks lots of functionality that ordinary, relational databases provide.&lt;/p&gt;

&lt;p&gt;Think about all the code organization a software developer does: Moving files around, requiring a file from another file in the form of modules or types. Think about the querying we do for our codebase: Searching for a text instance, or getting the list of functions in our code base, or getting the dependent symbols for the current class or function. These are mostly done in a half-baked and on-demand manner. Want to get a list of functions: Let your IDE or language server parse your code, and present you the options, only for it to forget it after all. It is almost like the metadata is being regenerated all the time via the compiler.&lt;/p&gt;

&lt;p&gt;Think about all the discussions about code organization: Should this file go into this folder, and that folder? You have one choice! You are making a “write” operation that strictly limits your “read” operations.&lt;/p&gt;

&lt;p&gt;Whenever you double click a folder in your system, you are effectively doing a query for that table. Whenever you enter another folder in that folder, you are doing a subselect.&lt;/p&gt;

&lt;p&gt;Do you want to store additional data about a specific file? Where do you put it? Inside comments within that file? Wouldn’t it be better if you could put that data as a real metadata so that you could search for it?&lt;/p&gt;

&lt;p&gt;Wouldn’t we be better of if our code was stored in databases? I am not advocating just relational databases, but even a proper JSON-based NoSQL database might be better for some query operations.&lt;/p&gt;

&lt;p&gt;Downsides of this suggested approach: You lose most of the functionality of Unix tools. In Unix, everything is a file and it is a good thought that has served its purpose and is holding us back at this point. Tools that can parse&lt;/p&gt;

&lt;p&gt;Of course, none of this is new, and the reason I’m writing this article is nothing other than to spark some discussion around the subject. In further articles, I would like to expand on this topic and see what we can come up with. It seems like we have reached a local maxima that presents us from reaching greater heights.&lt;/p&gt;

&lt;p&gt;Just imagine how better it would be if we had treated our code as we treated our data!&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;progressiveMedia-image js-progressiveMedia-image&quot; data-src=&quot;https://cdn-images-1.medium.com/max/1600/0*lrhhjxximYI89WYh&quot; src=&quot;https://cdn-images-1.medium.com/max/1600/0*lrhhjxximYI89WYh&quot; /&gt;&lt;/p&gt;
&lt;figcaption class=&quot;imageCaption&quot;&gt;Photo by &lt;a href=&quot;https://unsplash.com/@christopher__burns?utm_source=medium&amp;amp;utm_medium=referral&quot; data-href=&quot;https://unsplash.com/@christopher__burns?utm_source=medium&amp;amp;utm_medium=referral&quot; class=&quot;markup--anchor markup--figure-anchor&quot; rel=&quot;photo-creator nofollow noopener&quot; target=&quot;_blank&quot;&gt;Christopher Burns&lt;/a&gt; on&amp;nbsp;&lt;a href=&quot;https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral&quot; data-href=&quot;https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral&quot; class=&quot;markup--anchor markup--figure-anchor&quot; rel=&quot;photo-source nofollow noopener&quot; target=&quot;_blank&quot;&gt;Unsplash&lt;/a&gt;&lt;/figcaption&gt;

&lt;p&gt;Some useful pointers for further research:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;WinFS: Microsoft actually decided to tackle this once upon a time in the form of WinFS. There would be metadata for everything, but it was abandoned.&lt;/li&gt;
  &lt;li&gt;Image based coding vs file based coding: Smalltalk and some Lisps have this. Didn’t get main stream. See &lt;a href=&quot;http://wiki.c2.com/?ImageBasedLanguage&quot;&gt;http://wiki.c2.com/?ImageBasedLanguage&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Datomic and Codeq: Clojure creator Rich Hickey and his company Cognitect’s database is an immutable database that records every change. Hickey also experimented briefly with a side project called Codeq, that would parse your code, and add them to the db so that you could do queries like: Which functions did this commit change? In which commits this function was changed? See &lt;a href=&quot;https://www.datomic.com&quot;&gt;https://www.datomic.com&lt;/a&gt; and &lt;a href=&quot;http://blog.datomic.com/2012/10/codeq.html&quot;&gt;http://blog.datomic.com/2012/10/codeq.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;SQLite as an application data format: Imagine storing your code inside SQLite so that you could query it? See &lt;a href=&quot;https://www.sqlite.org/appfileformat.html&quot;&gt;https://www.sqlite.org/appfileformat.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The Image Dilemma &lt;a href=&quot;https://playingwithobjects.wordpress.com/2012/06/01/the-image-dilemma/&quot;&gt;https://playingwithobjects.wordpress.com/2012/06/01/the-image-dilemma/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Which programming languages (besides Smalltalk) are image based? &lt;a href=&quot;https://stackoverflow.com/questions/722204/which-programming-languages-besides-smalltalk-are-image-based&quot;&gt;https://stackoverflow.com/questions/722204/which-programming-languages-besides-smalltalk-are-image-based&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Git as a NoSql database by Kenneth Truyers &lt;a href=&quot;https://www.kenneth-truyers.net/2016/10/13/git-nosql-database/&quot;&gt;https://www.kenneth-truyers.net/2016/10/13/git-nosql-database/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Content Addressable Storage: &lt;a href=&quot;http://www.wikiwand.com/en/Content-addressable_storage&quot;&gt;http://www.wikiwand.com/en/Content-addressable_storage&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;The web of names, hashes and UUIDs by Erlang creator Joe Armstrong &lt;a href=&quot;https://joearms.github.io/published/2015-03-12-The_web_of_names.html&quot;&gt;https://joearms.github.io/published/2015-03-12-The_web_of_names.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article originally appeared on Medium at &lt;a href=&quot;https://medium.com/@ustunozgur/the-nosql-database-every-software-developer-uses-10c841278a13&quot;&gt;https://medium.com/@ustunozgur/the-nosql-database-every-software-developer-uses-10c841278a13&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 01 Jan 2018 00:00:00 +0000</pubDate>
        <link>http://ustunozgur.com/programming/coders/nosql/sql/databases/2018/01/01/nosql-database-every-software-developer-uses.html</link>
        <guid isPermaLink="true">http://ustunozgur.com/programming/coders/nosql/sql/databases/2018/01/01/nosql-database-every-software-developer-uses.html</guid>
        
        
        <category>programming</category>
        
        <category>coders</category>
        
        <category>nosql</category>
        
        <category>sql</category>
        
        <category>databases</category>
        
      </item>
    
      <item>
        <title>Two URLs are enough for everyone</title>
        <description>&lt;h1 id=&quot;or-the-death-of-web-programming-as-we-know-it&quot;&gt;or the death of web programming as we know it&lt;/h1&gt;
&lt;p&gt;How many entrance doors does your house have? Would you be willing to enter
your home from the windows? Can you enter the living room from the outside?
Your entrance door is the supernode of your house.&lt;/p&gt;

&lt;p&gt;How many entrance web sites do you visit daily? Google, Facebook, Twitter,
Hacker News, Reddit? How many? Not that many. Usually these sites
take you to other places. These sites are the supernodes of the web.&lt;/p&gt;

&lt;p&gt;How many entrance urls does your web application have? Many? How many? A few?
Two? One? Why is it that we have scattered our endpoints so much?&lt;/p&gt;

&lt;p&gt;With the proliferation of single page applications, we had it coming, but
Facebook’s GraphQL puts the final nail in the coffin for the web development
and URLs as we know them:&lt;/p&gt;

&lt;h1 id=&quot;two-urls-are-enough-for-everyone&quot;&gt;Two URLs are enough for everyone.&lt;/h1&gt;

&lt;p&gt;Of course, I’m exaggarating a bit for the purposes of demonstration. What I
mean is, for most web applications to be built now and in the future, two
endpoints will suffice – one for constructing the client page and one for the
API requests. Let me explain.&lt;/p&gt;

&lt;h1 id=&quot;why-do-we-need-urls&quot;&gt;Why do we need URLs?&lt;/h1&gt;

&lt;p&gt;Web was invented to share documents at Cern. It was mainly for human
consumption – share links within each other. If a URL does not need to be
shared or bookmarked or crawled by search engines, it does not need to exist
beyong a simple endpoint.&lt;/p&gt;

&lt;p&gt;Facebook’s GraphQL achieves exactly that vision. It gives you a single
endpoint, from which you drill down to the resources you have. The resources
do not have unique endpoints, rather you ask the endpoint what resource and
what fields of that resource you are interested in.&lt;/p&gt;

&lt;h1 id=&quot;it-is-functions-all-the-way-down&quot;&gt;It is functions all the way down&lt;/h1&gt;

&lt;p&gt;We as programmers are accustomed to programming languages with
functions. These functions are so powerful that they can accept multiple
arguments! That might seem like a trivial statement, but think about how we
call functions on our servers from the client side.&lt;/p&gt;

&lt;p&gt;We effectively send a string to a url which is another string: The server
receives two strings: the path and the query params (or post body as
string). The first string is parsed to get the function to call and some
parameters to be passed to that. The second string is parsed to get the
additional parameters to be passed to that function. Ugh. The poor application
tries hard enough to understand what our query is.&lt;/p&gt;

&lt;p&gt;Why do we need that? We have been accustomed to getting JSON responses from the server. Isn’t it time to stop sending strings to the server and start sending a structured data format? GraphQL achives exactly that.&lt;/p&gt;

&lt;p&gt;Take this example from jsonapi.org: &lt;code class=&quot;highlighter-rouge&quot;&gt;/articles?include=author&amp;amp;fields[articles]=title,body&amp;amp;fields[people]=name&lt;/code&gt;
Jsonapi in theory does not say how you should build your urls, but this is the recommended approach.&lt;/p&gt;

&lt;p&gt;What are we trying to achieve here? How would you explain this to a
nontechnical person? You would literally expect him to parse this breathless
sentence, with weird delimiters.&lt;/p&gt;

&lt;p&gt;As programmers, sometimes we get so accustomed to tradition that we do not
question the strangeness of our solutions. Sending strings might been a good
way in the 1990s or even 2000s, but do we really need to torture ourselves and
the server to communicate the following request?&lt;/p&gt;

&lt;p&gt;I want to get articles. For each article, include the related author too and
their name. For the article itself, send me the title and body.&lt;/p&gt;

&lt;p&gt;How would you express it if you had come up with a way on your own? Think
about it for a minute before proceeding.&lt;/p&gt;

&lt;p&gt;This is what GraphQL, a query language for the web proposes:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;    &lt;span class=&quot;nx&quot;&gt;query&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
       &lt;span class=&quot;nx&quot;&gt;articles&lt;/span&gt;
       &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;nx&quot;&gt;title&lt;/span&gt;
          &lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;
          &lt;span class=&quot;nx&quot;&gt;author&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
       &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Beautiful and simple. This is not some clever trick. In my opinion, this is
what should have been all the time.&lt;/p&gt;

&lt;p&gt;And what is this &lt;code class=&quot;highlighter-rouge&quot;&gt;articles&lt;/code&gt; thing on server side? It is just a function or an
object with a resolve method!  It resolves the articles, and for each article,
you need to define additional resolve methods for the fields, namely title,
body and author. And note that author is another object, not a field on the
article, so that in turn has a resolve method for its name property. You can
go as deep as you’d like!&lt;/p&gt;

&lt;p&gt;And what if I want to send parameters to my resource? Simple: keyword
arguments, supported one way or another in any language. If your function can
accept an object that is essentially a bag of arguments, that is called to get
that object.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;    &lt;span class=&quot;nx&quot;&gt;query&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
       &lt;span class=&quot;nx&quot;&gt;article&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
       &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;nx&quot;&gt;title&lt;/span&gt;
          &lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;
          &lt;span class=&quot;nx&quot;&gt;author&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;name&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
       &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;What is &lt;code class=&quot;highlighter-rouge&quot;&gt;article&lt;/code&gt; here? It is simply a function that somehow accepts that &lt;code class=&quot;highlighter-rouge&quot;&gt;id&lt;/code&gt;
parameter. There is nothing magical about id, it is just the name of the
keyword argument the &lt;code class=&quot;highlighter-rouge&quot;&gt;article&lt;/code&gt; resolve method accepts.&lt;/p&gt;

&lt;p&gt;Now here is the other great thing: Remember we constructed our query by
specifying what we want. The search gives us exactly that: What we want, in
the format we want it.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;title&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;URLs must die&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;body&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Is GraphQL the killer?&quot;&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;author&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;s2&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Ustun Ozgur&quot;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;So, back to my original point: Two endpoints is good enough for most people
for web application programming. You might actually have more than 2 “URLs”
per se, but those do not need to be concerning the server other than simple
redirection of the response. The URLs itself are not redirected, you just
return the same response that generates your HTML from these human visible
URLs. You can do the routing on the clientside, the client side router simply
determines the parameters to be passed to the GraphQL endpoint.&lt;/p&gt;

&lt;p&gt;On the server side, you have two functions: One for generating the initial
HTML that bootstraps your application. If you want to have the following URLS,
/, /home/, /account/, /questions/ , provided that you need them bookmarked and
shared, simply return what your single endpoint for generating your HTML
returns. For everything else, there is GraphQL.&lt;/p&gt;

&lt;p&gt;If you want to learn about GraphQL, watch this talk by one of its creators Lee Byron: &lt;a href=&quot;http://oredev.org/2015/sessions/introduction-to-graphql&quot;&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cannot wait to dive in? You can play with it and the StarWars API at
&lt;a href=&quot;http://bit.ly/1Qa4h00&quot;&gt;GraphQL server for StarWars API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just hit Ctrl-Space and you are on your own. Oh, had I mentioned that GraphQL
has a schema with types, so it can help you build correct queries with full
documentation on the fly? Click docs at the right there, but you probably
don’t need it because of intellisense.&lt;/p&gt;

&lt;p&gt;Your backend is written in Python: Check out this very convenient
implementation called &lt;a href=&quot;http://graphene-python.org/playground/&quot;&gt;Graphene&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two years ago at DjangoCon Europe, I gave a talk on how React would kill the
template layer of Django. It is much more powerful and the war scene nowadays
is client side. You cannot enter this war with crippled templating solutions,
you need the full power of a good language. At the time, the url routing layer
of Django and similar solutions seemed safe.&lt;/p&gt;

&lt;p&gt;The tides have changed there too. Now, you need just two endpoints: One for
serving the initial HTML, one for the API endpoints. This is the essence of
web programming in the future: Two endpoints to rule them all.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Discuss at &lt;a href=&quot;https://news.ycombinator.com/item?id=10722265&quot;&gt;HackerNews&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 11 Dec 2015 10:44:00 +0000</pubDate>
        <link>http://ustunozgur.com/web/graphql/react/javascript/programming/2015/12/11/two-urls-are-enough-for-everyone.html</link>
        <guid isPermaLink="true">http://ustunozgur.com/web/graphql/react/javascript/programming/2015/12/11/two-urls-are-enough-for-everyone.html</guid>
        
        
        <category>web</category>
        
        <category>graphql</category>
        
        <category>react</category>
        
        <category>javascript</category>
        
        <category>programming</category>
        
      </item>
    
      <item>
        <title>My Recent Talks on JavaScript</title>
        <description>&lt;p&gt;I have been giving some talks recently on various topics related to
JavaScript, mostly centered around ReactJS and EcmaScript.&lt;/p&gt;

&lt;p&gt;Here is a list of those recent videos:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://vimeo.com/129469530&quot;&gt;Standing on the Shoulders of Giants or How to Read the Internals of React.js&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I gave this talk at AtTheFrontend conference in Denmark in May 2015.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=NSeurgO39Hk&quot;&gt;Introduction to ReactJS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=SlrirWY9JTk&quot;&gt;Introduction to EcmaScript 6&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I gave these talks in meetup groups in Barcelona in March 2015.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=wk6QAD0aLt0&quot;&gt;Taming Complexity with Django and React.js&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This talk was in Djangocon Europe 2014 in May 2014.&lt;/p&gt;

&lt;p&gt;Stay tuned,&lt;/p&gt;

&lt;p&gt;Ustun&lt;/p&gt;
</description>
        <pubDate>Wed, 17 Jun 2015 14:15:29 +0000</pubDate>
        <link>http://ustunozgur.com/javascript/programming/videos/2015/06/17/my-recent-talks-on-javascript.html</link>
        <guid isPermaLink="true">http://ustunozgur.com/javascript/programming/videos/2015/06/17/my-recent-talks-on-javascript.html</guid>
        
        
        <category>javascript</category>
        
        <category>programming</category>
        
        <category>videos</category>
        
      </item>
    
      <item>
        <title>How to Become a Great JavaScript Developer</title>
        <description>&lt;p&gt;When I was growing up, my interests spanned various, seemingly unrelated
fields. I loved maths as much as I loved history. I aimed to be a &lt;a href=&quot;https://en.wikipedia.org/wiki/Renaissance_Man&quot;&gt;Renaissance
man&lt;/a&gt; -a &lt;a href=&quot;https://en.wikipedia.org/wiki/Polymath&quot;&gt;polymath&lt;/a&gt;-, that excelled at multiple fields. This turned out to be an
arduous task and suddenly I faced the danger of being a jack of all trades,
master of none.&lt;/p&gt;

&lt;p&gt;I started thinking about specializing in certain fields so that I could at
least be “a jack of all trades, master of some” man, if not a Renaissance
one. How could I specialize in a field while retaining the vast knowledge
required to do software development?&lt;/p&gt;

&lt;p&gt;In this post, I outline the techniques and resources I used to become a good
JavaScript developer, based on my experience in the last 5 years.&lt;/p&gt;

&lt;p&gt;Most of the web developers nowadays face the same problem: They have to excel
at multiple different fields, from databases to backend architecture to
frontend user interfaces to polishing these UIs with good knowledge of CSS.&lt;/p&gt;

&lt;h1 id=&quot;read-books&quot;&gt;Read Books&lt;/h1&gt;
&lt;p&gt;The first and foremost observation is that you have to make a dedicated effort
to excel. It is true that you can get bits and pieces while doing a half
hearted effort, for example by reading some blog posts from time to time, and
it will seem easier because the initial time investment will be lower. Such an
education will cost you more time in the long term than a dedicated and
distilled learning process. The answer to this dilemma is easy: Read books.&lt;/p&gt;

&lt;p&gt;Books are what our civilization stands on the shoulders of. Written word is
how we pass knowledge from generation to generation, in a concentrated
form. One problem with becoming an expert on Web technologies is that you have
to learn when to stay away from the Web itself. Web itself presents a chaotic
and distracting medium for learning stuff, so the first suggestion I will make
is to read books on the subject matter.&lt;/p&gt;

&lt;p&gt;For JavaScript, start with the following books: &lt;a href=&quot;http://shop.oreilly.com/product/9780596517748.do&quot;&gt;JavaScript the Good Parts&lt;/a&gt; is
like the bible of JavaScript. It is an old one, but still the best for
starting out. &lt;a href=&quot;http://shop.oreilly.com/product/9780596805531.do&quot;&gt;JavaScript: the Definitive Guide&lt;/a&gt; is also a must have, though you
will probably keep it as a reference. jQuery’s principle author John Resig’s
&lt;a href=&quot;www.manning.com/resig/&quot;&gt;Secrets of the JavaScript Ninja&lt;/a&gt; is also notable. If
you are looking for good (and freely available online) books, take a look at
&lt;a href=&quot;https://leanpub.com/javascript-allonge/&quot;&gt;JavaScript Allongé&lt;/a&gt;,
&lt;a href=&quot;https://github.com/getify/You-Dont-Know-JS&quot;&gt;You Don’t Know JS&lt;/a&gt; and
&lt;a href=&quot;http://eloquentjavascript.net/&quot;&gt;Eloquent JavaScript&lt;/a&gt; (see also its annotated version &lt;a href=&quot;https://watchandcode.com/courses/eloquent-javascript-the-annotated-version&quot;&gt;here&lt;/a&gt;). These can be purchased
as ebooks or dead tree format. Also, not a book but Mozilla’s Developer
Network has a good
&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide&quot;&gt;guide on JavaScript&lt;/a&gt;.&lt;/p&gt;

&lt;h1 id=&quot;learn-use-and-read-libraries&quot;&gt;Learn, Use and Read Libraries&lt;/h1&gt;

&lt;p&gt;The next most important step is getting to know the libraries. If the books
teach you how to read a language, the libraries teach you how to speak
it. There are two important things you can do with libraries: use them and
read their source code.&lt;/p&gt;

&lt;p&gt;For using libraries, get acquainted with the following: jQuery, Backbone,
underscore and one of React, Angular or Ember. This is not to say you have to
use these libraries, but any decent JavaScript developer should at least have
some experience (good or bad) with these libraries.&lt;/p&gt;

&lt;p&gt;The second important thing for improving your JavaScript skills is to read
these libraries’ source codes. Out of these, I highly suggest Backbone and
underscore’s source codes, as they are written beautifully. Reading and
understanding underscore will improve your functional programming
skills. Another good library for reading the source code, as recommended to me
by several developers is mootols (I personally don’t have any experience using
mootools or reading it, just conveying the message.)&lt;/p&gt;

&lt;p&gt;Understanding others in the list, such as React, Ember etc. might be harder,
but well worth the effort. At least skim through the source code of other
libraries to see how to structure your code base and try to discover some
patterns. Other notable libraries for using and reading the source code
include d3, highcharts, moment.js.&lt;/p&gt;

&lt;h1 id=&quot;do-exercises-and-ask-questions-to-yourself&quot;&gt;Do Exercises and Ask Questions to Yourself&lt;/h1&gt;

&lt;p&gt;The next step for becoming a good JavaScript developer is to do a lot of
exercises. Ideally, these exercises will be focusing not on DOM, but the
language, so make sure to have a test harness that can run in node.js. Do
small, but plenty exercises in node.js. Do katas and go through different ways
of using JavaScript: closures, prototypes, array-extras (map, filter)
etc. While doing the exercises, always have a list of fundamental ideas in
JavaScript in your mind.&lt;/p&gt;

&lt;p&gt;A friend of mine, &lt;a href=&quot;http://arm.ag/&quot;&gt;Armagan&lt;/a&gt;, who is an excellent JavaScript programmer and
teacher uses the book
&lt;a href=&quot;http://www.apress.com/9781590599082&quot;&gt;Pro JavaScript Design Patterns&lt;/a&gt; in his
lectures, so this book is worth checking out.&lt;/p&gt;

&lt;p&gt;Try to answer questions such as: How does prototypal inheritance work? What
defines a closure? How does the meaning of this keyword change? How does one
use apply/bind/map/filter/call? Gather a list of common source points
JavaScript developers face and try to explain it in your own words. Explaining
these concepts to another person in written or verbal form will help improve
your skills immensely. While doing the exercises, try to go over those where
you discover “What if?” scenarios. For example, “What is the meaning of “this”
if I use bind twice? How does jQuery make sure that the &lt;code class=&quot;highlighter-rouge&quot;&gt;this&lt;/code&gt; keyword refers
to the jQuery object and not the global object? How does this library achieve
a certain feature?” are some common questions you should be asking yourself.&lt;/p&gt;

&lt;h1 id=&quot;learn-the-standards&quot;&gt;Learn the standards&lt;/h1&gt;

&lt;p&gt;The next step is getting to know more about the EcmaScript standards. Grab a
copy of the latest EcmaScript standard and try reading it. Doing this, also
try to learn more about the upcoming features in JavaScript, as brought in ES6
and ES7. There have recently been a flux of new features like promises,
modules, generators, comprehensions and again, reading the standard, along
with a dedicated book such as Nicholas Zakas’
(&lt;a href=&quot;https://leanpub.com/understandinges6&quot;&gt;Understanding EcmaScript 6&lt;/a&gt;) or
Dr. Axel Rauschmayer’s ES6 books (&lt;a href=&quot;http://exploringjs.com/&quot;&gt;Exploring JS&lt;/a&gt;)
will help. The road to expertise is through learning the standard from the
principal source and discovering the new additions to the language.&lt;/p&gt;

&lt;h1 id=&quot;use-resources-on-the-web&quot;&gt;Use Resources on the Web&lt;/h1&gt;

&lt;p&gt;I mentioned earlier the dangers of using the Web to learn about the Web, so my
final recommendations will entail how to get the best out of resources on the
Web. Hacker News is a good source, however tracking it constantly will usually
cost more time than needed, as the signal to noise ratio will be low. Instead,
aim for weekly digests such as &lt;a href=&quot;http://javascriptweekly.com/&quot;&gt;JavaScript Weekly&lt;/a&gt;. Over time, you will see
which libraries or techniques are getting traction. On Twitter, try to find
influential JavaScript developers. This list of
&lt;a href=&quot;http://code.tutsplus.com/articles/33-developers-you-must-subscribe-to-as-a-javascript-junkie--net-18151&quot;&gt;33 JavaScript developers to follow&lt;/a&gt;
by Tutsplus is a good start. Other resources on the web include some blogs
such as &lt;a href=&quot;http://www.toptal.com/section/front-end&quot;&gt;Toptal Blogs&lt;/a&gt;,
&lt;a href=&quot;http://rmurphey.com/&quot;&gt;Rebecca Murphey’s blog&lt;/a&gt; (see also
&lt;a href=&quot;http://rmurphey.com/blog/2015/03/23/a-baseline-for-front-end-developers-2015/&quot;&gt;A Baseline for Front-End [JS] Developers:
2015&lt;/a&gt;
if you are interested in this blog post),
&lt;a href=&quot;http://www.nczonline.net/&quot;&gt;Nicholas Zakas’ blog&lt;/a&gt;. (Email me if you have
pointers to other good blogs and I’ll include it in this list.)&lt;/p&gt;

&lt;p&gt;Another important resource on the Web is conference videos and educational videos. For conferences, JSConf series are high quality. For educational videos, I strongly suggest Pluralsight, as they have an army of experienced developers preparing high quality courses. (no affiliation with Pluralsgiht)&lt;/p&gt;

&lt;h1 id=&quot;tldr-version&quot;&gt;TL;DR Version&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Start with reading books as they give you distilled information.&lt;/li&gt;
  &lt;li&gt;Learn fundamental libraries such as jQuery, underscore, Backbone; but also read their source codes.&lt;/li&gt;
  &lt;li&gt;Do exercises and try to explain common JavaScript concepts such as inheritance in your own words. Give lectures and talks on these subjects.&lt;/li&gt;
  &lt;li&gt;Read through the new versions of the standard, and start using the latest additions to the language.&lt;/li&gt;
  &lt;li&gt;Follow the web resources in batch, through digests or blogs which you frequent once a week or conference and educational videos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;Constantly repeating these and making lots of projects will improve
your JavaScript skills immensely. Always keep in mind to make a dedicated
effort and you can hopefully become an expert after a few years. I consider myself a good JavaScript programmer, and I still have a long way to expertise and these are the techniques I’m following in my journey. Feel free to reach out to me for feedback and corrections at &lt;a mailto=&quot;ustun@ustunozgur.com &quot;&gt;ustun@ustunozgur.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And finally, as Ustun Ozgur Software, we are looking for talented JavaScript developers in Istanbul, Turkey. See &lt;a href=&quot;http://ustunozgur.com&quot;&gt;our company website&lt;/a&gt; for job openings.&lt;/p&gt;

&lt;p&gt;Happy learning,&lt;/p&gt;

&lt;p&gt;Ustun&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you have read so far, consider following me on Twitter at &lt;a href=&quot;http://twitter.com/ustunozgur&quot;&gt;@ustunozgur&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Interested in React.js and Advanced JS Training? See &lt;a href=&quot;http://reactjs-workshops.com&quot;&gt;my training/workshop site&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thanks to &lt;a href=&quot;http://enginarslan.com/&quot;&gt;Engin Arslan&lt;/a&gt; for initiating this discussion with me.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Discuss this on &lt;a href=&quot;https://news.ycombinator.com/item?id=9731230&quot;&gt;HackerNews&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 17 Jun 2015 14:15:29 +0000</pubDate>
        <link>http://ustunozgur.com/javascript/programming/books/videos/2015/06/17/how_to_be_a_great_javascript_software_developer.html</link>
        <guid isPermaLink="true">http://ustunozgur.com/javascript/programming/books/videos/2015/06/17/how_to_be_a_great_javascript_software_developer.html</guid>
        
        
        <category>javascript</category>
        
        <category>programming</category>
        
        <category>books</category>
        
        <category>videos</category>
        
      </item>
    
      <item>
        <title>Welcome to Ustun Ozgur's Blog!</title>
        <description>&lt;p&gt;Hi there!&lt;/p&gt;

&lt;p&gt;This is the first post in &lt;a href=&quot;https://ustunozgur.com&quot;&gt;Ustun Ozgur&lt;/a&gt;’s
blog. In this blog, we will be focusing on the following main topics:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Languages such as JavaScript, Python and Clojure&lt;/li&gt;
  &lt;li&gt;Libraries and frameworks such as Django, React&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stay tuned!&lt;/p&gt;

&lt;p&gt;Ustun&lt;/p&gt;
</description>
        <pubDate>Wed, 17 Jun 2015 14:13:29 +0000</pubDate>
        <link>http://ustunozgur.com/javascript/python/clojure/2015/06/17/welcome-to-jekyll.html</link>
        <guid isPermaLink="true">http://ustunozgur.com/javascript/python/clojure/2015/06/17/welcome-to-jekyll.html</guid>
        
        
        <category>javascript</category>
        
        <category>python</category>
        
        <category>clojure</category>
        
      </item>
    
  </channel>
</rss>
