<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Kannan Chandrasegaran on Medium]]></title>
        <description><![CDATA[Stories by Kannan Chandrasegaran on Medium]]></description>
        <link>https://medium.com/@kannan.chandra?source=rss-2d90b066b4c8------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*8k6FyabjJPryTmTKFuF-Bw.png</url>
            <title>Stories by Kannan Chandrasegaran on Medium</title>
            <link>https://medium.com/@kannan.chandra?source=rss-2d90b066b4c8------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 14:58:23 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@kannan.chandra/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[The Beginner Programmer’s Curse: Why learning to code is frustrating]]></title>
            <link>https://medium.com/hackernoon/the-beginner-programmers-curse-why-learning-to-code-is-frustrating-890b91e0822?source=rss-2d90b066b4c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/890b91e0822</guid>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[entrepreneurship]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Kannan Chandrasegaran]]></dc:creator>
            <pubDate>Fri, 13 Jul 2018 11:16:01 GMT</pubDate>
            <atom:updated>2018-07-13T11:16:01.181Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XWCrOtVijQ8gqcEWKuWMBA.jpeg" /></figure><p>You’re one week into your programming course, and it feels like you’ve already hit a skill ceiling. You’ve checked every line, you’ve been staring at the screen for an hour, and yes you’ve checked the damned semicolons. As if to mock you, the computer’s gone ahead and put a warning on the same line as the error, so you can’t even click both of them at the same time.</p><p>You give up trying to fix this yourself, and ask for help. Your friend looks at your code for two seconds and points her finger at a particular spot.</p><p>“There needs to be a closing bracket right here. Right now this <em>else</em> is inside the<em> if</em>.”</p><p><em>Of course</em>. You just learnt about if-else statements. You’re supposed to know this stuff. You feel like an idiot. <em>If I can’t even get the brackets right, maybe I’m not cut out to be a developer.</em></p><p>Frustrated, you reach over to close your laptop.</p><p><strong><em>Stop.</em></strong></p><p>It’s easy to blame yourself when you make very basic mistakes, but this is something every programmer goes through.</p><p>Like any other craft, programming has skill levels. However, programming is unique in how unforgiving it can be when you mess up.</p><p>Say you’re learning to paint. Learning to use the brush is a lower level skill than composition. But, once you get to a reasonable level of skill with the brush, you can start working on composition. Even if you mess up your brush technique a bit, it doesn’t stop you from practicing higher level skills.</p><p>This is not how programming works, especially at the lower levels. <strong>You miss a bracket, you’re out</strong>. It doesn’t matter if you understood the logic, or you have a brilliant solution to the problem. Your program just stops dead in its tracks.</p><p><strong>This is the beginner programmer’s curse</strong>: to become better, you need to practice writing code; but if you write imperfect code it may not even work.</p><p>So, what do we do? Well, getting good at any programming concept involves <strong>3 different skills</strong>. You need to develop all three, and often what’s holding you back is that you haven’t paid enough attention to one of them.</p><p>We’re going to break down those 3 skills that you need to build to break through that skill ceiling you’re hitting.</p><h3>Skill #1: Knowledge</h3><p>This is the obvious one. You need to know and understand the concept you’re learning.</p><p><em>What’s an if statement? What’s a function? What’s a loop?</em></p><p>You’re smart, and you got this. Trouble is, programming is a skill, not a repository of knowledge.</p><p>Maybe you know what a butterfly stroke is. Maybe you’ve even watched the butterfly stroke event in the Olympics. But if that’s all you’ve got, I don’t think you should sign up for life guard duty at the local pool just yet.</p><p>You need to go beyond just knowing and understanding. There are two more skills you need to develop:</p><h3>Skill #2: Problem Solving</h3><p>It’s one thing to know what an <em>if</em> statement is. Knowing <strong>when</strong> it needs to be used is a whole other skill.</p><blockquote>If you’re having trouble figuring out what to do next, you have a problem with application.</blockquote><p>Application is about knowing which tool in your belt you want to reach for to fix this specific problem.</p><p>The only way to get better at this is practice. Specifically, you want to try many different problems that test the same concept. Try to find a resource that categorizes practice problems by concept (<em>variables</em>, <em>conditionals</em>, etc) for your language.</p><p>Don’t stop after you solve the first and easiest problem. <strong>The point isn’t to prove that you <em>know</em> what an <em>if</em> statement is.</strong> The point is learning to recognize the type of problem that an <em>if</em> statement solves. By doing multiple problems that use the same concept in different contexts, you learn to see the shape of problem that this concept can help you solve.</p><p>When you move on to trying problems for a new concept, your brain will instantly spot all the bits that can be solved using lower level concepts. When picking apart the problem like this, you will much more easily spot the parts of the problem that require the new concept.</p><blockquote>To get better at application, practice with multiple problems that target the same topic.</blockquote><h3>Skill #3: Muscle Memory</h3><p>Programming is a craft. It involves creativity and logic, yes, but it also involves using your eyes and fingers to perform tasks. It’s not enough to know what needs to be done, you need to be able to actually do it effectively.</p><p>You see this in other crafts as well. You might <em>know</em> the notes of the song you want to play on the guitar. Maybe you’re even a trained musician in a different instrument, and your brain is coming up with improvised melodies. But until your fingers know how to listen to your brain, you will not be a guitarist.</p><p>This ever happen to you? You come up with an idea: <em>I need to check if the password string’s length is too short, and then pull up the error message if it is</em>.</p><p>You’re pumped to write the code, but you stop short: <em>How do I get the string out of that text box, again? Wait, is there a round bracket after the “if”?</em></p><p>These tiny questions are easily solvable, but together they hold you back from solving the bigger problem. It becomes frustrating for you to progress to more complex problems, because your brain keeps having to deal with these smaller issues.</p><blockquote>If you’re having trouble actually writing the code, you have a problem with execution.</blockquote><p>How do musicians train execution? They do drills. As a programmer, you want to do something similar.</p><p><strong>Take problems you’ve already solved, and do them again.</strong> This time, there is no logic puzzle. You already know what the solution is. You’re simply training your eyes and fingers, and building <em>muscle memory</em>.</p><p>Doing drills trains you to very quickly spit out the code for a given idea. Want to compare a string’s length? <em>if, open bracket close bracket, open curly close curly, move cursor back inside bracket</em>. Boom. Now you can think about what the conditional should be, instead of how to write one.</p><p>Doing drills also trains your eyes to spot errors more quickly. You get more accustomed to what correct code looks like. So when you miss a semicolon, or a code block is wrongly indented, it jumps out at you immediately.</p><blockquote>Drills make you faster at both coding and debugging.</blockquote><p>As you do this for each new concept, more and more skills move to this subconscious level. Soon, your brain will be planning larger blocks of logic while your fingers spit out the relevant code.</p><p>Initially, simple concepts enter your muscle memory: brackets, semicolons, variable declarations. Soon, things like function definitions, class definitions. Then larger tasks, like adding a new screen to your app and wiring up the relevant code.</p><p>You can hold larger and larger problems in your head because your brain does not need to be distracted by the actual execution.</p><blockquote>To get better at execution, practice the same problems repeatedly over time.</blockquote><h3>Know what to practice</h3><p>When you’re stuck with a programming concept it can feel like you’ve hit a skill ceiling as a programmer. Practice is really the only way to progress past that. But it’s important to know where to focus your practice.</p><p>When you get stuck with a concept, use the guide above to try and identify which of these 3 fundamental skills is holding you back right now.</p><p>Focus on getting better at that skill, and you’ll smash through your skill ceiling in no time.</p><p>If you found this article useful, you can help me out by sharing it! You can also subscribe to my mailing list to be sure not to miss my next article.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fupscri.be%2F30a182%3Fas_embed%3Dtrue&amp;dntp=1&amp;url=https%3A%2F%2Fupscri.be%2F30a182%2F&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=upscri" width="800" height="400" frameborder="0" scrolling="no"><a href="https://medium.com/media/b7ccf6257999d386b8c25d5f8f98f1aa/href">https://medium.com/media/b7ccf6257999d386b8c25d5f8f98f1aa/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=890b91e0822" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/the-beginner-programmers-curse-why-learning-to-code-is-frustrating-890b91e0822">The Beginner Programmer’s Curse: Why learning to code is frustrating</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Neural networks: The 1 minute guide]]></title>
            <link>https://medium.com/hackernoon/neural-networks-the-1-minute-guide-a2909507f350?source=rss-2d90b066b4c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/a2909507f350</guid>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[entrepreneurship]]></category>
            <category><![CDATA[neural-networks]]></category>
            <category><![CDATA[machine-learning]]></category>
            <dc:creator><![CDATA[Kannan Chandrasegaran]]></dc:creator>
            <pubDate>Tue, 21 Nov 2017 18:03:52 GMT</pubDate>
            <atom:updated>2017-11-23T00:50:20.276Z</atom:updated>
            <content:encoded><![CDATA[<p>We want to build systems <a href="https://medium.com/swlh/the-non-techies-guide-to-machine-learning-45337265e01e">that can learn to be intelligent</a>.</p><p>The greatest learning system we know about is the human brain. It’s made of billions of really simple cells called <strong>neurons</strong>. Our intelligence arises from the complex connections between these neurons.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1Jr-Lt9vcEOW2opvZyLbdA.png" /><figcaption>Biological neural networks vs Artificial neural networks</figcaption></figure><p><strong>Neural networks</strong> are modeled after this.</p><p>Each layer of neurons learns something small and passes it onto the next layer. Layer by layer, the network can learn very complex things.</p><p>The exact way we connect and arrange these layers creates networks that are great at different types of problems. Here’s how a network might recognize objects in an image:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bIeRFbrm7D0rrphxPkJ_aA.png" /></figure><p>The first layer simply learns to recognize pixel brightness. The next layer learns to combine them into line segments. Each subsequent layer learns increasingly complex visual features. By the last layer, the network has learnt to identify objects of interest.</p><p>Neural networks are an amazing tool with many applications, from <strong>computer vision</strong> to <strong>natural language processing</strong>.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fupscri.be%2F30a182%3Fas_embed%3Dtrue&amp;dntp=1&amp;url=https%3A%2F%2Fupscri.be%2F30a182%2F&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=upscri" width="800" height="400" frameborder="0" scrolling="no"><a href="https://medium.com/media/b7ccf6257999d386b8c25d5f8f98f1aa/href">https://medium.com/media/b7ccf6257999d386b8c25d5f8f98f1aa/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a2909507f350" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/neural-networks-the-1-minute-guide-a2909507f350">Neural networks: The 1 minute guide</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The non-techie’s guide to machine learning]]></title>
            <link>https://medium.com/swlh/the-non-techies-guide-to-machine-learning-45337265e01e?source=rss-2d90b066b4c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/45337265e01e</guid>
            <category><![CDATA[founders]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[entrepreneurship]]></category>
            <dc:creator><![CDATA[Kannan Chandrasegaran]]></dc:creator>
            <pubDate>Mon, 20 Nov 2017 12:52:59 GMT</pubDate>
            <atom:updated>2018-07-11T21:16:27.204Z</atom:updated>
            <content:encoded><![CDATA[<p>You find yourself at another startup meetup, leaning against the bar and sipping away at your drink. <em>Tonight’s the night</em>, you think to yourself. <em>Tonight, I get some networking done</em>.</p><p>And then you hear it. A fragment of conversation floats over to your ears:</p><p>“…they’re definitely <em>the</em> machine learning startup to watch.”</p><p><em>No…</em></p><p>“Don’t they still use statistical NLP though? Recurrent neural nets seem like the way forward…”</p><p><em>Not again…</em></p><p>And like a virus, it spreads. You watch in horror as, within minutes, everyone at the bar is talking about <strong>machine learning</strong>.</p><p>You’ve heard the term before, of course. Who hasn’t? Machine learning is the way forward, the future of artificial intelligence. Of course it is.</p><p>Trouble is, you don’t have a damned idea what any of that means.</p><p>You down your drink. It’s going to be a long night.</p><h3>The end of the world</h3><p>First, we hear that machine learning bots are taking our blue collar jobs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*P_O1uwvYeg-DeT-TKFc_gQ.png" /></figure><p>Then, we find out white collar jobs aren’t safe either.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZkkkhpUcGhql9CN_3yn6dg.png" /></figure><p>Resigned to our jobless future, we find out that the bots are now talking behind our back.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Mq68xqrOZ-SDaEy3kFE-nQ.png" /></figure><p>Gossiping about us lazy unemployed humans, probably.</p><p>Machine learning is talked about in so many different contexts that it can be hard to grasp what exactly it is. You look it up and get abstract theoretical explanations, high power Scrabble words, and a wall of math and code.</p><p>You just want to know what exactly machine learning is, why it’s a big deal, and maybe a bit about how it works. Honestly, you just want to make sense of all the buzzwords that get thrown around, like curse words in a middle school classroom: everyone’s using them, but you have a feeling nobody else knows what they mean either.</p><h3>Let’s dive in</h3><p>So, machine learning. Is that like… AI?</p><p>That’s a good place to start. We all know what artificial intelligence means. I mean, we’re all thinking of different things, but surely it’s the thought that counts.</p><blockquote>Artificial intelligence (AI) is the study of building systems that can make “intelligent” decisions.</blockquote><p>Basically, if a computer does something that seems somewhat smart, we label it artificial intelligence.</p><p>Let’s use an example you might have come across. Computer games often feature enemy characters who appear intelligent. They follow us around, and they act in ways that make the game a challenge. That’s an example of AI.</p><p>The developer of the game has achieved this by giving the AI a set of rules. <em>Follow the player. If the player is shooting, find cover. If the player stops shooting, try to shoot the player.</em> The more of these rules there are, the more intelligent the game appears to be.</p><p>Thing is, a computer game is usually pretty limited. The player can only perform a few specific actions, and the level was entirely designed by the developer. So, developers can come up with rules for great AI characters that seem really intelligent.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/300/1*Mm83K5rj1EWdPIUBwRMvcA.gif" /><figcaption>Well, <strong>pretty</strong> intelligent.</figcaption></figure><h3>Not all problems can be solved with rules</h3><p>Say we want a computer to detect if this is a picture of a dog.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/908/1*m1a2g-UfcliG3md0FW4FIg.png" /></figure><p>How would we even start defining rules for this task?</p><p>No, really. Try to think of the kinds of rules we need.</p><p>Dogs have four legs?</p><p>Dogs are white in color?</p><p>Dogs have fur?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/517/1*Fvcca681UBtl6gFH23-Lsw.jpeg" /><figcaption>This one already knows “sit”.</figcaption></figure><p><strong>Computer vision</strong> problems, like recognizing an object, are really complex. But our brain solves them almost intuitively. So, it’s really hard for us to come up with explicit rules.</p><h3>Enter machine learning</h3><p>We don’t build a system that recognizes dogs. We build a system that can <strong><em>learn</em></strong> to recognize dogs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*u4rtGZupD4xskh15YH-TOA.png" /></figure><p>We feed it thousands of images, some containing dogs and some not. The system <em>learns</em> the rules that define a picture of a dog.</p><blockquote>Machine learning is the study of building systems that can <strong><em>learn</em></strong> to make intelligent decisions.</blockquote><p>The keyword <strong>“learn”</strong> is what distinguishes machine learning from other types of artificial intelligence.</p><blockquote>“You said the machine can learn the rules. So clearly, the rules do exist. We’re just not trying hard enough to find them.”</blockquote><p>You’re absolutely right. If we tried hard enough we can probably develop a rule-based dog detection masterpiece. It would have thousands of rules covering every possible scenario, and it would be a thing of beauty.</p><p>What if we now want the system to detect pictures containing food? Well, we throw the whole thing away and start from scratch. None of these rules would apply.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*IwD0XXpIyFaGi1nYDoDmGQ.png" /><figcaption>“Well technically, a hot dog <strong>is</strong><em> a dog”</em></figcaption></figure><p>A system that can <em>learn</em> to recognize objects can be trained to recognize food simply by using pictures of food instead of dogs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*O9xbrmS9Wz5MaynPb_8a5g.png" /></figure><p>That’s the power of machine learning. Instead of a fixed set of rules, we have a flexible machine that can learn and adapt.</p><h3>Keeping it real</h3><p>Now, I totally made it sound like we’ve built a living, learning being and taught it to recognize dogs by letting it play with puppies. Then we teach it the meaning of cuteness and the meaning of love, and hopefully convince it to not rise up and kill us all. Right?</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2FvuFbFzDveAJSo%2Ftwitter%2Fiframe&amp;url=https%3A%2F%2Fgiphy.com%2Fgifs%2FvuFbFzDveAJSo&amp;image=https%3A%2F%2Fmedia.giphy.com%2Fmedia%2FvuFbFzDveAJSo%2Fgiphy.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="329" frameborder="0" scrolling="no"><a href="https://medium.com/media/1c5f846e5bc26d1f05c80767d9cded57/href">https://medium.com/media/1c5f846e5bc26d1f05c80767d9cded57/href</a></iframe><p>The reality is a lot less complicated. We want the machine to learn to make decisions, usually based on predictions. So let’s start by asking this: how do <em>humans</em> make predictions?</p><p>Here’s an example of how we make predictions. You might have even done something like this in Science class in middle school.</p><p>Say you conduct an experiment. You collect data, and plot it on a graph.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*k78C5ZMPA4Yt6eQm_VAI3g.png" /><figcaption>Experiment → Data → Plot</figcaption></figure><p>The x-axis is the value you changed, and the y-axis is the result you measured. You then draw a <strong>trend line </strong>(or<strong> best-fit line</strong>)<strong> </strong>on the graph.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GrgB-jf6gxi1pW_y2Oyq1w.png" /></figure><p>This is the line that best models the data.</p><p>Now that you have this line, you can make predictions. You can pick a weight that you’ve never measured before, look it up on the x-axis, and read off the y axis to predict what the spring’s length will be.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6MAQye-PjhNLz4d4MmJzmQ.png" /></figure><p>You used <strong>data</strong>, built a <strong>model</strong>, and used it to make a <strong>prediction</strong>.</p><p>If you wrote a program that can perform these steps, congratulations: that’s machine learning.</p><p>No, really. Finding the linear model and using it to make predictions: that’s totally a machine learning technique, called <strong>linear regression</strong>.</p><p>Couldn’t we just program the model into the system? The system could then make predictions about <em>this </em>spring. But it can’t make predictions about other springs without us writing new code.</p><p>If, instead, we teach the program to perform linear regression itself and <em>learn </em>the model, that’s machine learning.</p><p><em>We </em>don’t provide the model. We let the <em>machine </em>learn the model.</p><h3>Hocus Pocus</h3><p>If there’s one thing you take away from this example, it’s this:</p><blockquote><strong>Machine learning isn’t magic</strong>.</blockquote><p>We’re not building a self aware being that can learn everything. The spring model program will never learn to recognize dogs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/888/1*jj5OsVfhD05wAIe3jO2Eng.jpeg" /><figcaption>Even you, Slinky.</figcaption></figure><p>We built a system that can learn one particular type of model. All we’ve left out is <em>what the model is</em>.</p><p>Almost every machine learning system does some version of the following:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wmdynk92IOBRNRj7mek59Q.png" /></figure><p>The system gives us an <strong>output </strong>based on the model. It <strong>evaluates </strong>that output to determine how bad it was. It then <strong>updates </strong>the model to make future outputs slightly better.</p><p>Machine learning is the art of building a system that can perform this loop for a specific problem.</p><p>The output can be wildly different depending on the problem. It might be a text response from a <strong>chatbot</strong>. Or it might be a decision on whether or not to hit the brakes in a <strong>self-driving car</strong>.</p><p>The actual model could be linear like in our spring problem. It could be a more complex model based on <strong>statistics and probability</strong>. Or, it could be a <strong>neural network</strong>, designed to emulate the way the human brain works:</p><p><a href="https://hackernoon.com/neural-networks-the-1-minute-guide-a2909507f350">Neural networks: The 1 minute guide</a></p><p>Whatever the details are, almost every machine learning system is running that loop. With each cycle, the system improves a tiny bit. After thousands or even millions of cycles, we can get systems that have learned to perform better at that task than any human.</p><p>The sheer variety of applications, and the techniques needed to solve them, is why machine learning intersects with so many other fields. It’s also why machine learning is such an exciting topic right now.</p><h3>There we go</h3><p>Building a machine learning system can be complicated, but understanding machine learning doesn’t have to be.</p><p>So, go conquer that startup meetup. Throw out a few of those newfound buzzwords. Network the heck out of that room. You just need to do it for a few more years, really. By then, I’m sure we’ll have bots who can do that for you, too.</p><p><em>If you found that interesting, check out my </em><a href="https://hackernoon.com/neural-networks-the-1-minute-guide-a2909507f350"><em>1 minute guide to neural networks</em></a><em>!</em></p><p><em>Subscribe to be notified about my next article:</em></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fupscri.be%2F30a182%3Fas_embed%3Dtrue&amp;dntp=1&amp;url=https%3A%2F%2Fupscri.be%2F30a182%2F&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=upscri" width="800" height="400" frameborder="0" scrolling="no"><a href="https://medium.com/media/b7ccf6257999d386b8c25d5f8f98f1aa/href">https://medium.com/media/b7ccf6257999d386b8c25d5f8f98f1aa/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6gfnVvkMRFtjVsWF7vkClA.png" /></figure><h4>This story is published in <a href="https://medium.com/swlh">The Startup</a>, where 260,100+ people come together to read Medium’s leading stories on entrepreneurship.</h4><h4>Subscribe to receive <a href="http://growthsupply.com/the-startup-newsletter/">our top stories here</a>.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6gfnVvkMRFtjVsWF7vkClA.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=45337265e01e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/swlh/the-non-techies-guide-to-machine-learning-45337265e01e">The non-techie’s guide to machine learning</a> was originally published in <a href="https://medium.com/swlh">The Startup</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Hybrid Apps: Explained in a minute.]]></title>
            <link>https://medium.com/hackernoon/hybrid-apps-the-1-minute-guide-4b7fc4638ae4?source=rss-2d90b066b4c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/4b7fc4638ae4</guid>
            <category><![CDATA[entrepreneurship]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[founders]]></category>
            <category><![CDATA[startup]]></category>
            <dc:creator><![CDATA[Kannan Chandrasegaran]]></dc:creator>
            <pubDate>Tue, 14 Nov 2017 18:03:41 GMT</pubDate>
            <atom:updated>2017-11-23T00:50:57.117Z</atom:updated>
            <content:encoded><![CDATA[<p>To build an app for a particular platform, you need to use toolkits provided by that platform’s creator (Apple or Google, for example). Apps built this way — <strong>native apps </strong>— can take full advantage of the platform’s features, and they can be distributed using the app store.</p><p>However, to launch on another platform you need to start over, using that platform’s toolkit.</p><p>An alternative is a <strong>web app </strong>— a web site that offers rich user interaction, just like an app. Built using web technologies like HTML, web apps are accessed using a web browser. You can reach every platform by building just one app!</p><p>The downside: web apps can’t access all of a platform’s functionality, like using Bluetooth or running in the background.</p><p>Meet their love child: the <strong>hybrid app</strong>.</p><p>This is a web app hiding inside of a native <em>wrapper</em> — basically a tiny browser that only ever shows one web app.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LEXsBCuJAoKzBYpb14DFUw.png" /></figure><p>Hybrid frameworks like <a href="https://cordova.apache.org/">Cordova</a> even offer toolkits that let hybrid apps access many native platform functions.</p><p>You write the code just once, but the resulting app can be distributed using the app store on multiple platforms.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fupscri.be%2F30a182%3Fas_embed%3Dtrue&amp;dntp=1&amp;url=https%3A%2F%2Fupscri.be%2F30a182%2F&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=upscri" width="800" height="400" frameborder="0" scrolling="no"><a href="https://medium.com/media/b7ccf6257999d386b8c25d5f8f98f1aa/href">https://medium.com/media/b7ccf6257999d386b8c25d5f8f98f1aa/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4b7fc4638ae4" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/hybrid-apps-the-1-minute-guide-4b7fc4638ae4">Hybrid Apps: Explained in a minute.</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Want to write better? Step away from the keyboard, and speak.]]></title>
            <link>https://medium.com/swlh/want-to-write-better-start-by-speaking-859e5ab430b8?source=rss-2d90b066b4c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/859e5ab430b8</guid>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[writing]]></category>
            <category><![CDATA[entrepreneurship]]></category>
            <category><![CDATA[founders]]></category>
            <category><![CDATA[teaching]]></category>
            <dc:creator><![CDATA[Kannan Chandrasegaran]]></dc:creator>
            <pubDate>Mon, 30 Oct 2017 02:06:22 GMT</pubDate>
            <atom:updated>2017-10-30T08:20:19.883Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*W5vbBi1Nah40KGMRIE1GJw.jpeg" /></figure><p>There’s a difference between the two forms of communication. The written word is visual, whereas the spoken word is auditory. That sounds obvious, but here’s what’s important about that difference:</p><blockquote>Speech is intrinsically tied to time: you hear it one word at a time.</blockquote><p>Written text is a bunch of symbols that are all already on the page. It’s possible to write and consume it out of sequence.</p><p>It’s easy to write a great paragraph that has no link to what came before or what follows.</p><p>This is something you just can’t do with speech. When speaking, you have to start with the setup, and then take the listener through each beat until you reach the conclusion.</p><blockquote>Speaking forces you to consider the narrative momentum of your arguments.</blockquote><p>When writing, it’s very easy to write an article that is just a collection of points. When speaking out loud, you instantly feel awkward when you switch to an unrelated point without the requisite transition.</p><h3>How to use speaking</h3><p>Speaking can be used as a tool to develop your article. It can also be used to refine and edit what you’ve already written. In either case, here’s what you do:</p><ol><li>Step away from the desk. You want to use the speaking part of your brain, so put away your notes or text.</li><li>Start at the top of the section you’re working on, and talk through your points. Think of this as a lesson or speech that you’re giving. When you get stuck, you can stop to think or consult your notes. The start at the top and go again.</li><li>Do not take notes as you speak. Unless you have a spark of brilliance that you must absolutely preserve on paper, stay away from any note taking. Iterate on the text entirely orally. <strong>Use your memory as a quality filter</strong>: if you are forgetting something, chances are it doesn’t belong there. In a cohesive argument, every sentence shows up exactly when needed. If you’re forgetting lines, it might be because you’re delivering a bunch of unrelated points. Try to find a better order and try again.</li><li>1–2 minute is probably all you can hold in your head without memorization. At that point, come back to your desk and start writing.</li></ol><h3>Things to watch for</h3><p>Speech has some distinct characteristics that don’t translate well to the page:</p><ul><li>When speaking, we are prone to repeating ourselves. On the written page, needless repetition stands out.</li><li>Speech is often filled with very long sentences that can still be understood because of tone and pacing. Writing is visual, and a wall of text looks intimidating.</li></ul><p>When writing, remember that you are not <em>transcribing</em> a speech. You are <em>adapting</em> it for text. You will need to break up sentences. You will need to use punctuation and whitespace to bring out the article’s structure. Speaking helps you with structure and flow, but can produce poorer sentences. Bring out your inner writer and editor to fix those problems.</p><p>The point is not that speaking is better than writing. It’s about forcing the article through the speech, writing, and editing parts of your brain. Each brings a different set of competencies to the table, and all of that benefits your article.</p><p>You may not think you’re a great writer. Maybe you don’t think you’re a great speaker or editor either. But by involving all three, you get to cheat. You’re rigging the game, and bringing three of you to the fight.</p><p>Want to write better? Step away from the keyboard, and speak.</p><p><em>To make sure you don’t miss future writing tips, subscribe to my newsletter!</em></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fupscri.be%2F9f3957%3Fas_embed%3Dtrue&amp;url=https%3A%2F%2Fupscri.be%2F9f3957%2F&amp;image=https%3A%2F%2Fe.enpose.co%2F%3Fkey%3DdRXnS9Gplk%26w%3D700%26h%3D425%26url%3Dhttps%253A%252F%252Fupscri.be%252F9f3957%252F%253Fenpose&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=upscri" width="800" height="400" frameborder="0" scrolling="no"><a href="https://medium.com/media/887ae270e407cd1ee1576f6aedc11ae5/href">https://medium.com/media/887ae270e407cd1ee1576f6aedc11ae5/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HDsA-fVWtSRNR-9gu2vPwg.jpeg" /></figure><h4>This story is published in <a href="https://medium.com/swlh">The Startup</a>, Medium’s publication followed by over +256,410 people.</h4><h3>Subscribe to <a href="http://growthsupply.com/the-startup-newsletter/">get the top stories here</a>.</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HDsA-fVWtSRNR-9gu2vPwg.jpeg" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=859e5ab430b8" width="1" height="1" alt=""><hr><p><a href="https://medium.com/swlh/want-to-write-better-start-by-speaking-859e5ab430b8">Want to write better? Step away from the keyboard, and speak.</a> was originally published in <a href="https://medium.com/swlh">The Startup</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Your app is an onion: Why software projects spiral out of control]]></title>
            <link>https://medium.com/swlh/your-app-is-an-onion-why-software-projects-spiral-out-of-control-bb9247d9bdbd?source=rss-2d90b066b4c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/bb9247d9bdbd</guid>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[ux]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[entrepreneurship]]></category>
            <category><![CDATA[founders]]></category>
            <dc:creator><![CDATA[Kannan Chandrasegaran]]></dc:creator>
            <pubDate>Wed, 04 Oct 2017 00:38:32 GMT</pubDate>
            <atom:updated>2017-11-23T00:51:17.644Z</atom:updated>
            <content:encoded><![CDATA[<p>You start with the best of intentions. You hire a developer to build out your startup idea. But almost every week, it feels like the project needs tweaking. Features start creeping in, and the scope slowly expands.</p><p>It’s as if the project has a life of its own, and is trying to destroy your life.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xaCY1ahp_R0VcCTBc9XQsQ.jpeg" /></figure><p>How did this happen? Did you hire a bad developer? Did you fumble the project management? Or was the idea just terrible all along?</p><p>Possible. But there is one core misunderstanding that often dooms a project from the start.</p><p>We assume that our product is defined by a set of features, written on a sheet of paper. Occasionally features get added; occasionally features get cut. But you can see the scope of the project at a glance.</p><p>This assumption is <strong>wrong</strong>.</p><p>Your project is not two dimensional, like a sheet of paper. It has <em>depth</em>.</p><p>Each feature can be peeled back to reveal layer after layer. In fact, if I were inclined towards creating clickbait titles, I’d say that <strong>your app is an onion</strong>. Let me show you what I mean. Let me tell you why, as you peel each layer back, your app makes you cry.</p><h3>The library to end all libraries</h3><p>Let’s look at something concrete. Pitch me an idea.</p><blockquote><strong>People often want books that nearby libraries don’t have. Other people in the area might. So this app lets people send out book requests, and people who have the book will respond. We make money off each transaction.</strong></blockquote><p>Genius.</p><blockquote>I know, right? The feature list is straight forward:</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IY_-Wjq85tqPffss4kiq3w.jpeg" /></figure><blockquote>Time to send the spec off to the developer and start thinking of killer startup names. <strong>kaBooki? lib.rari.ly? reddit?</strong></blockquote><p>Alright, hang on. Let’s take a closer look. Also, reddit is already a thing.</p><p>Let’s probe the idea with some questions and see where it takes us.</p><p>How do users pay each other? Do they just chuck cash at each other when they meet, or do they pay through the app?</p><blockquote>Oh, they should pay by credit card through the app, so we can take a cut.</blockquote><p>How do they actually request a book? I mean, what do they literally do on the app? Do they fill up an open-ended form with the book title and author?</p><blockquote>Oh, hmm. They should search for their book and pick the one they want.</blockquote><p>Okay, so we need a database of books.</p><blockquote>I guess.</blockquote><p>Actually, what <strong>is</strong> a book request? Do book sellers see a list of all requested books? Or do we send out notifications to sellers, like Uber or Thumbtack do?</p><blockquote>That one. We send out requests to other people who have the book.</blockquote><p>So, sellers need to populate the app with all the books they are selling?</p><blockquote>Um, yes.</blockquote><p>How does the book actually get across? Do users send it themselves, or do we handle the delivery?</p><blockquote>We handle the delivery.</blockquote><p>So you’ll need a system that tells you the books that need picking up and where they need to go. I imagine your drivers will want to see the shortest route that connects these, right?</p><blockquote>Okay, no. How about this? Users mail the books to each other.</blockquote><p>So we show the recipient&#39;s address to the sender? How do we handle shipping charges?</p><blockquote>Actually, you know what. These users have to be near each other. They can just go pick it up, and they can make a new friend, okay?</blockquote><p>So, we need to match users who are close by. How do they find each other? Does the app have a real-time map so they can arrange a meet-up?</p><blockquote>Sure. Fine. Whatever.</blockquote><p>Do we set the book’s price? Or do they negotiate the price themselves?</p><blockquote>They talk it out and decide on a price.</blockquote><p>How do they decide? Do we need to build chat into the app?</p><blockquote>They can just call each other on the phone.</blockquote><p>Alright, so do we want to verify that number with a SMS text message? What about… you get the point. We really could go on forever.</p><blockquote>Please don’t.</blockquote><p>Let’s have a look at what the feature list looks like now:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*U1MjZ06Ak1eYU6_zndrxhA.jpeg" /></figure><p>Every single one of those line items can be expanded multiple times. We just peeled the onion back one layer, and look what happened.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2F2WxWfiavndgcM%2Ftwitter%2Fiframe&amp;display_name=Giphy&amp;url=https%3A%2F%2Fgiphy.com%2Fgifs%2Fcrying-2WxWfiavndgcM&amp;image=https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2F2WxWfiavndgcM%2F200.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="246" frameborder="0" scrolling="no"><a href="https://medium.com/media/bf4ceab34cd6d6a7452c7d6f5b3dd1ca/href">https://medium.com/media/bf4ceab34cd6d6a7452c7d6f5b3dd1ca/href</a></iframe><p>Now now, don’t cry.</p><h3>What happened?</h3><p>Let’s be clear about what the reason for the feature explosion is <strong>not</strong>.</p><h4>This is not what is commonly known as feature creep.</h4><p>That’s when new functionality keeps getting added to a product. If you look at our final list of features, each item exists to support the original pitch.</p><h4>This was <strong>not </strong>because of <strong>technical considerations</strong>.</h4><p>For example, what is the most suitable chat system architecture? What payment platform is easiest to integrate?</p><p>We are not talking about those here. A good developer can talk you through various technical options. But a developer can’t decide for you what features need to be built.</p><h4>This was also <strong>not </strong>because of <strong>market considerations</strong>.</h4><p>Do people want to use such a product? What incentivizes early users to sign on when there are few other users? Are users willing to pay for this service?</p><p>These questions have to do with <strong>validating your idea</strong>, identifying <strong>product-market fit</strong>, and <strong>pricing strategy</strong>. Again, these are important issues. But this is <em>not</em> why your feature list blew up.</p><blockquote>Yes and it’s also <strong>not </strong>because of global warming, or the tooth fairy. Are you going to tell me the reason for the onion, or go through every single non-reason?</blockquote><p>Oh, you’re no fun. Here’s what happened.</p><blockquote><em>We fundamentally misunderstood how complexity works</em>.</blockquote><p>We thought each feature is as complex as the description we started with. Hey, maybe it takes time to write code or whatever it is engineers do, but the feature can be fully described with a few words framed in business terms. “User does x with y”. Right?</p><p>This view is <strong>wrong</strong>.</p><h3>Software features are more like <em>fractals</em></h3><p>The closer you look, the more details make themselves apparent.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgfycat.com%2Fifr%2FPerkyRepulsiveFennecfox&amp;url=https%3A%2F%2Fgfycat.com%2Fgifs%2Fdetail%2FPerkyRepulsiveFennecfox&amp;image=https%3A%2F%2Fthumbs.gfycat.com%2FPerkyRepulsiveFennecfox-size_restricted.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=gfycat" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/f4771776ea9d67fee0586aa5497730e8/href">https://medium.com/media/f4771776ea9d67fee0586aa5497730e8/href</a></iframe><blockquote>Onions are fractals?</blockquote><p>No, I’ve switched metaphors. Keep up.</p><p>We started with a big picture description of what the feature is. However, when the app is built (by the developer) or used (by users or yourself), it is at a much smaller scale. It is done by going through the app step by step. At each step, you might encounter problems. To solve the problem, you may need to redesign that step, add new steps, or add entirely new features.</p><p>It’s like planning a journey from your home to your office. Looking at the map, the journey might look like a straight line.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*D7_TZdNk-T8NWSm4wsY0qA.png" /></figure><p>When you get down to a smaller scale, you’ll see that your straight line doesn’t fit in the city grid. You encounter traffic stops, and elevation, and obstructions. Depending on whether the directions are for walking, biking, or driving, you need different routes.</p><p>Building software is much the same. The closer you look, the more detailed you realize your solution is going to have to be.</p><blockquote>Great. Details all the way down. Just what I needed. Does this mean my product will never be finished?</blockquote><p>Well, yes and no. The complexity showed up because we started with a feature description, which is usually an objective. We then zoom in and build every step of the solution to achieve that objective. The more we zoom in, the more complexity we will uncover.</p><p>The complexity isn’t the problem, though. The problem is the way we choose to uncover it. We hand the feature spec to the developer. Weeks later, we get the first version of the app and try it out. For the first time, we are walking through the software step by step, and we see massive holes. We write down our revision notes, and send it off to the developer to build version 2.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/375/1*LoUQhE48anIEGZrffHtAzQ.png" /></figure><p>At the end of this whole process, after doing this a few times, we have a pretty good solution. The trouble is that the development cycle is <strong>really long</strong>. Each loop takes weeks or months.</p><p>While discovering the inherent complexity of your app is a necessity,</p><blockquote>Going back and forth with a developer is an expensive and time-consuming way to discover this complexity.</blockquote><p>What we want to do is this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/375/1*JR89XL603pUvJQz2Rj8lKg.png" /></figure><p>We want to be able to discover as much of this complexity <strong><em>before</em></strong> we write a line of code. We want to peel back the layers to discover a more robust feature list, and we want to do this in a quick and inexpensive way.</p><p>Instead of iterating on the app, we want to iterate on the spec.</p><p>We want to go from this process:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GFLTeVnkNqrrXjBhZtZnXQ.png" /></figure><p>To this process:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Db2JNhJ7ZiyOlTFcMoRAVw.png" /></figure><p>To do this effectively, we need two things. One, we need a way to represent the feature list, so that it can be iterated on. Two, we need a way to interrogate this feature list effectively.</p><p>Let’s talk about how to do this.</p><h3>Mapping out the features</h3><p>We want to stop thinking of this in business terms and start thinking of this like a user. That is the level at which we will have to deal with the complexity of the software.</p><p>First, make a list of <strong>user objectives</strong>. What does the user want to achieve using your app?</p><p>Next, you need to map out the <strong>user flow</strong>. Walk through every step that a user takes to achieve each of your objectives. Record those steps.</p><p>What we are building is a map of how users flow through the app.</p><p>There are many ways to do this. You could just make a simple outline of each step taken. You could draw up <strong>mockups </strong>of each screen the user goes through. You could draw a <strong>flowchart</strong>, either on paper or using software.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rH3IptzoaEEaTsSAjifR1g.png" /><figcaption>An example of the kind of simple mockup you can make - <a href="https://meta.wikimedia.org/wiki/Grants_talk:IEG/Batch_uploader_for_small_GLAM_projects/Mockups">Credit</a></figcaption></figure><p>Whichever you pick, make sure to prioritize <strong>speed</strong>. Unless you’re an expert at Photoshop, put it away and pick up pen and paper.</p><p>Make sure <strong>every screen is represented</strong> in your outline. For example, if a particular step goes through multiple screens in the app, split it up. We want to tease out more details, not less.</p><p>This process alone should start surfacing some of the complexity of your app. Now, we drill deeper.</p><h3>Question everything</h3><p>Asking questions like we did above can be quite open-ended, like we did above. It can be hard to know where to begin.</p><p>To start you off, I’ve put together a list of common questions that apply to most software. These questions are arranged into four broad categories that you can use as a framework when attacking your outline.</p><p>Look at each step of your outline, and ask yourself every question on this list. If the answers reveal new steps, add them to your outline.</p><p>Here’s the list:</p><h4>User inputs</h4><p>These questions are about information that goes from the user to the product.</p><ul><li>What information does the user input?</li><li>Is this input open ended or interactive?</li><li>Open ended examples: free-form text input, choosing an image to upload, recording a video.</li><li>Interactive examples: text input into a search form that displays results to pick from, choosing an address on a map, picking from a predefined collection of options.</li><li>Is there any input that would be considered invalid, and how does the app deal with it?</li><li>Are there any passive inputs? Most common example: user location via GPS.</li><li>What information does the product need <a href="https://www.useronboard.com/">from a new user</a>? Is there a way for the user to change this later?</li></ul><h4>Information presented to the user</h4><p>If the previous section was inputs, you can think of this one as outputs.</p><ul><li>What information is shown to the user on this screen?</li><li>How is this information shown? Examples: text, images, maps, lists, graphs.</li><li>Does the information need to be sorted in some way? Examples: recency, distance from user, relevance.</li><li>Does the product send any active outward communications? Examples: emails, push notifications, SMS messages.</li></ul><h4>Interactions between the pieces</h4><p>These questions are about how different pieces of the experience (users, the product, other services) interact with one another.</p><ul><li>Do users interact with each other? Examples: messaging, adding as friend, “liking” or tagging of other users’ content.</li><li>Do the users interact with external services? Examples: payment services, shipping tracking, social login.</li><li>Does the product interact with external services? Examples: location lookup services, weather APIs, social networks (“Your friend X just joined! Check out their profile!”).</li></ul><h4>Business owner functionality</h4><p>Questions about what <strong>you</strong>, the business owner, need from the product.</p><ul><li>Do you need to be sent alerts or summaries, via email or some other medium?</li><li>Do you need a specialized system for yourself or employees? Examples: driver app for your delivery staff, real-time order management interface for your kitchen staff.</li><li>Do you need an interface for manually approving users/content?</li><li>Do you need a content moderation system? A way for your admins to easily remove user content, disable user accounts.</li></ul><blockquote>That’s… a lot of questions.</blockquote><p>Yep! And it’s really just the common ones that people often forget early in the process. There are many more that will be specific to your product, and that you’ll uncover over time.</p><h3>Bringing it all together</h3><p>This process of building an outline and interrogating it will tell you what’s missing. Repeat this process a few times, and you should have a pretty solid feature list that you are much more confident about.</p><blockquote>You know, I was really hoping you had this one weird trick to fix my project. This sounds like a lot of work.</blockquote><p>It really is. But this is work you would have done at some point in the process <em>anyway</em>.</p><p>Remember why we are doing this. Software features have hidden complexity that you will need to uncover no matter what. You just get to choose <strong><em>when</em></strong><em> </em>you peel the onion.</p><p>Essentially, you have two choices:</p><ol><li>You can discover user objectives, build a mockup or flowchart, question your own assumptions, and peel back the layers like we did above. <strong><em>Or,</em></strong></li><li>You can get a developer to start building your app and uncover these issues with each version, one week at a time. After several months, you will discover the exact same things you could have figured out in a week with pencil and paper.</li></ol><p><strong>This </strong>is why software projects blow up and try to eat you alive.</p><p>So, go and discover your features. Build your outline and question your assumptions. Uncover the bulk of your problems quickly and cheaply.</p><p>Save yourself the stress and pain, release your product out into the world, and let it bloom.</p><blockquote>Do onions even bloom? Your metaphors are stupid.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/716/1*AtqqV3En1RxpYrdH7QORnQ.jpeg" /><figcaption><a href="https://www.thecookierookie.com/baked-blooming-onion/">One Google Image Search later</a>…</figcaption></figure><blockquote>Oh touché.</blockquote><p>If you found this article useful, you can help me out by sharing it! You can also subscribe to my mailing list to be sure not to miss my next article.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fupscri.be%2F30a182%3Fas_embed%3Dtrue&amp;dntp=1&amp;url=https%3A%2F%2Fupscri.be%2F30a182%2F&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=upscri" width="800" height="400" frameborder="0" scrolling="no"><a href="https://medium.com/media/b7ccf6257999d386b8c25d5f8f98f1aa/href">https://medium.com/media/b7ccf6257999d386b8c25d5f8f98f1aa/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HDsA-fVWtSRNR-9gu2vPwg.jpeg" /></figure><h4>This story is published in <a href="https://medium.com/swlh">The Startup</a>, Medium’s leading publication for entrepreneurs and startups.</h4><h3>Join +12,417 people who <a href="http://growthsupply.com/the-startup-newsletter/">get the top stories here</a>.</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HDsA-fVWtSRNR-9gu2vPwg.jpeg" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bb9247d9bdbd" width="1" height="1" alt=""><hr><p><a href="https://medium.com/swlh/your-app-is-an-onion-why-software-projects-spiral-out-of-control-bb9247d9bdbd">Your app is an onion: Why software projects spiral out of control</a> was originally published in <a href="https://medium.com/swlh">The Startup</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The non-techie’s guide to servers]]></title>
            <link>https://medium.com/hackernoon/the-non-techies-guide-to-servers-af1fa3dbf7d8?source=rss-2d90b066b4c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/af1fa3dbf7d8</guid>
            <category><![CDATA[founders]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[entrepreneurship]]></category>
            <dc:creator><![CDATA[Kannan Chandrasegaran]]></dc:creator>
            <pubDate>Thu, 07 Sep 2017 17:23:22 GMT</pubDate>
            <atom:updated>2017-11-23T00:51:37.861Z</atom:updated>
            <content:encoded><![CDATA[<p>You bump into one of your software engineer colleagues. You didn’t mean to; she was heading to the foosball table, and you were getting a refill from the kombucha dispenser. But here the two of you are. Hoping to make conversation, you lead with a tentative,</p><p>“So… what is it you do, exactly?”</p><p>She starts to tell you, and you kind of get it. You know what a user interface is. You’ve used apps. Facebook’s a website. You get it. You nod along to her answer, and the two of you part ways. Awkwardness avoided.</p><p>But sometimes, you meet one of the… other ones. The server engineers. The backend developers. Not knowing what you’re getting yourself into, you enquire about the arcane ways of their kind.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/875/1*lmflUVjLzxpCCYXgnvs9vw.png" /></figure><p>Listening to these foreign words, a barrage of questions runs through your mind. “<strong>What</strong> is an API? <strong>When </strong>do we use databases? And <strong>who</strong> is Jason?”</p><p>What your engineer friend is talking about is a <strong>server</strong>. Maybe you’ve heard the term before, but don’t really have any idea what that is. Today, we change that.</p><h3>Down the rabbit hole</h3><p>When we use an app, all we see is the app. Our experience as a consumer starts and ends there. It seem natural to think of the entire experience as “the app”.</p><p>Truth is, the app is just what’s known as the <strong>front end</strong>. It makes up the entirety of the user experience. But that is not all there is to the functioning of an app.</p><p>Say you send me a message on a messaging platform, such as Whatsapp. It appears like the message goes from your phone to mine. But let’s take a closer look at this. Let’s say that you send the message when my phone is switched off. You then switch your phone off, and I switch mine on. I still get the message, even though our phones were never running at the same time!</p><p>Clearly, we’re missing something here.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/983/1*RexW3oBF7jbn22elxxOvHw.png" /></figure><p>The missing component is the <strong>back end</strong>, or <strong>server</strong>.</p><h3>Servers</h3><p>A server is a computer that is connected to the internet and runs all the time.</p><blockquote>A server has two main roles: storing data, and facilitating communication.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/750/1*HxvYOreg41h_SaJYxSF_PQ.png" /></figure><p>So, when you sent that Whatsapp message, the app on your phone sends the message up to the server, where it is stored. When my app checks in with the server, the server sends along any stored messages.</p><blockquote>A server is where an app “phones home” to.</blockquote><p>When the app needs any information, it asks the server. When the app needs to talk to another user on the app, the server is what facilitates that connection.</p><p>The terms <strong>server</strong>, <strong>backend</strong>, and <strong>API</strong> are often used interchangeably.</p><h3>Storage</h3><p>A primary responsibility of a server is storing things.</p><p>These include <strong>files</strong>, such as photos, videos, and documents. The server stores them in a structured way, similar to folders on your computer, so that they can then be accessed by apps.</p><p>A server also stores <strong>information</strong>. All apps have bits of information that are important to how the app works.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SUGCHQipjmFyGoqMd1PmcQ.png" /></figure><p>You can think of this as a bunch of spreadsheets. For example, apps need to store user information, and their login details, so that they can be authenticated. Your app might be a restaurant directory, in which case the server would store information about each restaurant.</p><p>Along with information, a server also records the <strong>relationships</strong> between bits of info. For example, if a user “likes” a restaurant on the app, the server remembers that relationship between that user and that restaurant.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/971/1*5v-wmmUVA8xIvZEXNtOgBQ.png" /></figure><p>This lets us get answers to many questions, such as:</p><blockquote>“How many people have liked this restaurant?”</blockquote><blockquote>“What restaurants has this user liked?”</blockquote><blockquote>“What cuisines do both of these users like in common?”</blockquote><p>Information and the relationships between them are stored in <strong>databases</strong>. There are many different kinds of databases, but they all have a few core features:</p><ul><li>They can store information</li><li>They can store the relationship between bits of information</li><li>They can be <strong>queried </strong>about the information, whereupon they respond with individual bits of information, or information in bulk, depending on what we asked for</li></ul><p>There are <a href="https://www.eversql.com/most-popular-databases-in-2017-according-to-stackoverflow-survey/">too many different types of databases</a> for me to list, and they each have their own advantages and disadvantages. If you hear someone use terms like “SQL” (pronounced ‘Sequel’), “MongoDB”, “CouchDB”, “Redis”, they’re talking about a database.</p><h3>Communication</h3><p>A key responsibility of a server is communicating with the app and with other servers.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/995/1*havzGeYMKmXQ_jmA_pthSw.png" /></figure><p>Many activities on an app require communication with the server. For example, if the user searches for something, the search terms are sent up to the server, which responds with the results. If the user sends a message to another user, the message goes up to the server. It is then sent to the other user’s app, often in the form of a push notification.</p><p>The interface that the server provides, so that apps can talk to them, is often referred to as an <strong>API</strong>. The individual functions on the interface can be referred to as <strong>endpoints</strong>.</p><p>These communications can look bizarre to the uninitiated. The two most common communication formats are JSON and XML.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/610/1*APPdNRPpV_fESi0v02iEkA.jpeg" /><figcaption>XML on the left, JSON on the right</figcaption></figure><p>At first glance, these formats can seem really hard to read.</p><p>The thing to keep in mind is that a server is just a computer, like your laptop or your phone. An app on your phone takes in user inputs, in the form of touch or voice. It processes that information. It then gives outputs, in the form of images on the screen. A phone is a computer that talks to humans, and so the inputs and outputs are human friendly.</p><p>A server is a computer that only talks to other computers.</p><p>Humans express meaning using things like font size, text color, and layout. But these are not meaningful to a computer.</p><blockquote>Server communications happen in formats that are easy for another computer to parse and understand.</blockquote><h3>Server application</h3><p>Much in the same way you would write an app to run on your phone, you need an application running on the server. A server application is built using a server-side framework. Popular options include <strong>Ruby on Rails</strong>, <strong>PHP</strong>, <strong>ASP.NET</strong>, <strong>Java</strong>, <strong>Node.js</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/888/1*molAT6KpqzRZQTdfeyDNTg.png" /></figure><p>The API is the gateway to your server, and apps know to call there. Your database stores all your information. Your server application is the “brain” that holds everything together.</p><p>It listens and responds to requests that come in on the API, it adds and retrieves information from the database, and it makes decisions. For example, when the app sends up login information, the request comes in through the API, and the correct login info is stored in the database. But it’s the server application’s job to compare the two, and respond appropriately to the app via the API.</p><h3>Hardware</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*oAWn-IAHPTqUzPNT.jpg" /></figure><p>When someone says “server”, this might be what pops into your mind. Racks of blinking lights in a locked room, waiting for Tom Cruise to rappel down from the ceiling and steal from.</p><p>Many larger companies do own such servers. Facebook and Google have hundreds of servers all over the world. When you are running a huge service with millions of users, running your own servers can be cheaper and offer better performance.</p><p>Instead of running their own physical servers, many developers use some kind of cloud service. Services like <a href="https://aws.amazon.com/">Amazon Web Services</a>, <a href="https://azure.microsoft.com/">Azure</a> and <a href="https://www.digitalocean.com/">Digital Ocean</a> can provide “virtual servers”. These services own and maintain the hardware, and the developer just uploads the server application.</p><p>There are even some <a href="https://en.wikipedia.org/wiki/Mobile_backend_as_a_service">Backend as a Service providers</a>, letting you have a simple backend without writing a server application yourself.</p><h3>Do all apps need a backend?</h3><p>Most apps you see probably have a backend component to them. There are definitely apps that don’t, like certain productivity apps. An easy way to figure out if there’s some kind of backend:</p><blockquote>If you switched to airplane mode, would the app still work?</blockquote><p>If the answer is no, there’s probably a backend server involved somewhere.</p><p>Hopefully you now have a better grasp of what the backend of an app looks like. Maybe, the next time you meet your friend, you might even casually drop “JSON” into the conversation.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*e4o5qeUOWt6owx7wL7qY1w.png" /></figure><p>If you found this article useful, you can help me out by sharing it! You can also subscribe to my mailing list to be sure not to miss my next article.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fupscri.be%2F30a182%3Fas_embed%3Dtrue&amp;dntp=1&amp;url=https%3A%2F%2Fupscri.be%2F30a182%2F&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=upscri" width="800" height="400" frameborder="0" scrolling="no"><a href="https://medium.com/media/b7ccf6257999d386b8c25d5f8f98f1aa/href">https://medium.com/media/b7ccf6257999d386b8c25d5f8f98f1aa/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=af1fa3dbf7d8" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/the-non-techies-guide-to-servers-af1fa3dbf7d8">The non-techie’s guide to servers</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The 3 Skills You Need to Build in Your Programming Students]]></title>
            <link>https://medium.com/@kannan.chandra/the-3-skills-you-need-to-build-in-your-programming-students-8acdbfc8f30c?source=rss-2d90b066b4c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/8acdbfc8f30c</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[education]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Kannan Chandrasegaran]]></dc:creator>
            <pubDate>Fri, 25 Mar 2016 06:19:35 GMT</pubDate>
            <atom:updated>2017-11-23T00:51:52.922Z</atom:updated>
            <content:encoded><![CDATA[<p>No matter what platform or language you’re teaching, it can seem like a daunting task. I teach iOS to beginners, and it’s a lot to take in. There’s the language, the programming logic, platform conventions, all the libraries. That’s a lot of things to cover, and it can seem overwhelming.</p><p>When I plan lessons, I start by outlining the main topics to be covered in a course. But it’s important to then switch away from content to skills.</p><p>The students have turned up at my course to learn iOS development. Ostensibly. But the reason they’ve really come here is to <strong><em>become iOS developers</em></strong>. And those are two different things. Knowing the difference means that I need to focus on building their skills as developers.</p><h3>Skill #1: Knowing Things</h3><p>This is the most obvious one. If you want to develop in a certain platform, there are things you need to know.</p><p><em>What’s a view controller? What’s a table view? What’s an if statement?</em></p><p>Because this is the most obvious skill, instructors are usually pretty good with this. We know we need to start with simpler concepts and work our way up that ladder. We know we need to test their understanding by asking questions.</p><blockquote>Knowing the content is important, but it’s not the only skill!</blockquote><h3>Skill #2: Problem Decomposition</h3><p>It’s one thing to know what an “if statement” is. Knowing that it needs to be used is a whole other skill.</p><p>When we teach and run through sample problems on the board, students are generally going to understand what we say. We can take the problem, break it down into steps, and explain each line of code.</p><p>The same student is often going to be sitting at their desk, stunned, staring at a blank file on their computer.</p><blockquote>Understanding the steps on the board doesn’t mean they can look at a problem and identify the sub problems.</blockquote><p>People learning a foreign language often hit the same barrier. A person who can read reasonably well can still have enormous difficulty understanding a native speaker speaking. Why? They know the words, don’t they?</p><p>Here’s why. If a native speaker says “An apple a day”, what you hear is “An apple a day”. Here’s what a learner hears:</p><pre>“A na pe le de”</pre><p>Those are the syllables. And <em>none of those are words</em>. Fluent speakers instantly break that into:</p><pre>“ A n|a pe l|e | de ”<br>“  An  apple a   day”</pre><p>But it’s hard for learners to see the split. Even if they know all the words, they can’t see the words in the collection of syllables.</p><p>Programming students are the same way. They know all the ingredients that make up the solution. But it’s hard for them to see which pieces need to be used in this particular problem. It’s our job to teach them to see those seams.</p><h3>Skill #3: Muscle Memory</h3><p>Every programming instructor has seen students look at their screens filled with red, having missed a semicolon or comma somewhere. This is normal, of course. Eventually students will start getting the details right.</p><p>The way to speed this up is to build up what I like to think of as their <strong><em>muscle memory</em></strong>. This is distinct from knowing the content, or breaking down a problem. This is about actually implementing the solution. The writing of the code, or the creation of the layout.</p><blockquote>It’s not enough for your brain to know how to code; <em>your fingers need to know how to code as well</em>.</blockquote><p>This might sound a bit strange. We tell our fingers what to do. Our fingers don’t move independently. But don’t they seem to, sometimes? You automatically close a bracket that you just opened. You automatically fix the indentation on a new line. There are several tasks that are almost instinctive.</p><p>It’s like speaking a language. We don’t craft every word in our brain and then instruct our tongues. We think thoughts, and the words find their way out into the world. Of course, we can be more deliberate in our words and enunciation if we need to be. But for 90% of communication, we focus on the thoughts, not the production of sound.</p><blockquote>It’s the difference between planning and execution. Both are important, and they are distinct skills.</blockquote><p>When planning lessons, keep an eye out for which of these skills you’re training. All three are important.</p><p>Because here’s the thing. Once you deliver on skill 1, students are going to be satisfied. They showed up to learn X, and you taught them X. The content has been delivered.</p><p>But they’re still not going to be effective developers. <strong><em>And they’re going to blame themselves</em></strong>. When they’re stuck with a problem and you then show them the solution, they’re going to feel stupid.</p><blockquote>“Of course I should have known how to do this. He used variables and ifs. I already know this stuff. I must not be cut out for programming.”</blockquote><blockquote>“How does he always know which bracket is missing in my code, and I can never see it? I guess I don’t have an eye for this sort of thing.”</blockquote><blockquote>It’s your duty as an educator to give students what they need, not just what it says on the title of the course.</blockquote><p>If we keep an eye on all three skills, we’ll be doing just that.</p><h3>Connect Deeper</h3><p>If you resonated with this article, do <a href="http://kannan-chandra.com/teaching-newsletter/">subscribe to my personal blog</a>! You will be notified of any future articles I write on tech education.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8acdbfc8f30c" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>