<?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 Jay Shenk on Medium]]></title>
        <description><![CDATA[Stories by Jay Shenk on Medium]]></description>
        <link>https://medium.com/@jayshenk?source=rss-e8f3da0d9673------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*a0p8b4EOhJ61dzGG-AUkRQ.jpeg</url>
            <title>Stories by Jay Shenk on Medium</title>
            <link>https://medium.com/@jayshenk?source=rss-e8f3da0d9673------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 17:19:49 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@jayshenk/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[How to Prepare for Launch School Assessments]]></title>
            <link>https://medium.com/@jayshenk/how-to-prepare-for-launch-school-assessments-e85f9d083c61?source=rss-e8f3da0d9673------2</link>
            <guid isPermaLink="false">https://medium.com/p/e85f9d083c61</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[launch-school]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[learning-to-code]]></category>
            <category><![CDATA[coding]]></category>
            <dc:creator><![CDATA[Jay Shenk]]></dc:creator>
            <pubDate>Mon, 16 Jan 2017 21:34:21 GMT</pubDate>
            <atom:updated>2017-01-24T21:31:32.776Z</atom:updated>
            <content:encoded><![CDATA[<p>One of the defining characteristics of <a href="https://launchschool.com/">Launch School</a> is the Assessment process. After completing each course, in order to move on to the next one you must pass a written test, coding interview, and/or build a project. These assessments are not easy and take a lot of preparation.</p><p>I haven’t completed all of Launch School yet (I’m in <em>Course 220: Front-End Development with JavaScript</em>), but I have completed enough assessments to have some thoughts on how to prepare. To give you some idea of my experience, I passed all of the Back-end courses and the first Front-end course assessments on my first try, several with perfect or near-perfect scores.</p><p>I also have experienced failing an assessment, when I did the interview for the first JavaScript course without adequate preparation. Through this experience I have some thoughts on how to study for an assessment. Your mileage may vary, and I’m sure this isn’t an exhaustive list, but here are some recommendations that I gleaned from my experience and from other students:</p><h3>Take Multiple Passes Through a Course</h3><p>Launch School courses are long and have a lot of depth. By the time you have completed a course, you may already be beginning to forget what you learned in the beginning of the course. Or you may have completed all of the materials, but realize you are still fuzzy on a lot of the concepts.</p><p>This is why it is important to be willing to go through a course again for the second or third time. As someone who was a musician before learning to code, I know that it takes multiple practice sessions to learn a passage of music. Similarly, it’s not enough to read about a concept once and then move on. See Elizabeth’s post on <a href="https://medium.com/@emctackett/third-times-the-charm-circular-learning-37cf7a56ccb7#.z2y0yqtlf">Circular Learning</a> for more perspective.</p><h3>Utilize Spaced Repetition</h3><p>Because it takes multiple repetitions to remember something well, it’s good to have a system in place that helps you review exercises and concepts on a regular basis. I use a program called <a href="https://apps.ankiweb.net/">Anki</a> to do this. Whenever I come across a new concept or an exercise that trips me up, I make an Anki card for it. What makes Anki cool is that each time you review a card, you can tell the program if it was difficult or easy for you and Anki will use that response to calculate which day you should review the card next. This method works best if you use Anki on a daily basis.</p><p>Several programmers have thought a lot about how to learn with Anki. I especially recommend <a href="https://sivers.org/srs">Derek Siver’s post</a> and the <a href="https://www.jackkinsella.ie/articles/janki-method">Janki Method</a>.</p><h3>Take Notes</h3><p>This is something that I don’t do enough. From talking with other students, I’ve noticed a lot of them have good systems in place for taking notes. Even though our primary work is done on the computer, a number of students have recommended handwriting notes. <a href="http://www.npr.org/2016/04/17/474525392/attention-students-put-your-laptops-away">There is science</a> to back up why handwriting may be helpful.</p><p>One student uses different colored pens as he take notes. I imagine that would make note-taking more fun and your notes more memorable. As far as note-taking apps, I’ve heard <a href="https://itunes.apple.com/us/app/quiver-programmers-notebook/id866773894?mt=12">Quiver</a> recommended.</p><h3>Explain a Concept Out Loud</h3><p>One of the skills you need to have for both the written assessments and the coding interviews is to be able to precisely explain concepts and code examples. This is not a skill that comes naturally, so it’s good to be intentional in how you practice. One student told me that he sometimes paces around while talking through concepts, and I’ve found myself doing the same. I’ve also found doing study sessions with other students is a good way to practice. If you don’t have another student to talk to, maybe try a <a href="https://en.wikipedia.org/wiki/Rubber_duck_debugging">rubber duck</a>.</p><h3>Write a Blog Post</h3><p>By blogging you can take notes, explain a concept, and share your learning with others all at the same time. By writing about a concept, you have to explain it in a step by step way, which is good practice. You also discover gaps in your own knowledge while writing, which can assist you in knowing what to study. And by writing about code, just like speaking about it, you are helping yourself remember syntax and concepts. If you’re having trouble getting started with blogging about code, check out <a href="https://medium.com/@jayshenk/how-to-blog-about-programming-while-youre-a-student-a2f11082f10f#.mlmo23yfe">How to Blog About Programming While You’re a Student</a>.</p><h3>Do the Optional Exercises</h3><p>The one time I failed an assessment (or “Not Yet”, as the instructors like to say), it was because I had gotten overconfident from passing previous assessments and did not adequately prepare. The assessment that tripped me up was a live coding interview where I had to solve a problem using JavaScript. The instructor realized that I needed more practice with solving problems and the JavaScript syntax. He recommended I do the optional <a href="https://launchschool.com/exercises#101109_small_problems">small problems exercises</a> for Ruby (Medium difficulty), but solve them using JavaScript. I did those and shortly after that, Launch School added the <a href="https://launchschool.com/exercises#210_small_problems">JavaScript exercises</a> and I did those as well.</p><p>By going through those exercises, I got a lot more comfortable with the problem-solving process and the JavaScript syntax. When it was time to take the assessment again, I was confident in my skills and passed. Looking back, I’m glad the instructor had me spend the extra time on this subject, as it gave me an important foundation for the next course which is even more challenging.</p><h3>Build a Project</h3><p>After completing a course, consider building a small program or project with what you have learned. This tests your ability to put together all of the concepts from the course. And unlike many of the course exercises, you can’t rely on a walkthrough video to help you along, forcing you to solve all of the problems on your own. Victor combined building a project and taking notes together into his impressive <a href="http://html-css-notes.herokuapp.com/">HTML and CSS Notes</a>.</p><p>If you’re a Launch School student, what have you found helpful in preparing for assessments? If you’re not a Launch School student, but you have experience passing programming tests or coding interviews, your tips are welcome too!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e85f9d083c61" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Blog about Programming While You’re a Student]]></title>
            <link>https://medium.com/@jayshenk/how-to-blog-about-programming-while-youre-a-student-a2f11082f10f?source=rss-e8f3da0d9673------2</link>
            <guid isPermaLink="false">https://medium.com/p/a2f11082f10f</guid>
            <category><![CDATA[blogging]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[learning-to-code]]></category>
            <dc:creator><![CDATA[Jay Shenk]]></dc:creator>
            <pubDate>Mon, 09 Jan 2017 17:26:10 GMT</pubDate>
            <atom:updated>2017-01-09T23:54:19.092Z</atom:updated>
            <content:encoded><![CDATA[<p>I’m a student at <a href="https://launchschool.com/">Launch School</a>, learning to code web applications. Recently a fellow student asked me how to get started with blogging about programming. While I’ve only written one <a href="https://medium.com/launch-school/how-being-stumped-by-one-line-of-code-helped-me-understand-context-in-javascript-2968c83e2771#.qg2wmgycl">technical blog post</a>, I’ve almost written many, so I thought I would share the advice that helped me finally push publish. I also wrote a personal blog for a couple years, so I have some blogging experience even though writing about code is new to me.</p><h3>Tip #1: Be Honest</h3><p>Be transparent about your experience. If you’re a student, say so. If you just learned the concept you’re writing about yesterday, make that clear. Readers are very forgiving if you’re honest about the fact that you’re still learning. What upsets readers is if the writer claims to be an expert at something they are not (yet!).</p><h3>Tip #2: Don’t Worry About Going Viral</h3><p>This may surprise you, but this is a real concern I and others have had when publishing to the internet for the first time. It’s been shown that <a href="http://www.cbsnews.com/news/everyone-thinks-they-are-above-average/">almost everyone thinks they are above average</a>, and likewise many of us feel that the moment we share our amazing wisdom with the world millions of readers on the interwebs will flock to it.</p><p>The reality is, that unless you are <a href="https://www.buzzfeed.com/davidmack/candace-payne-chewbacca-interview?utm_term=.byMrm5j9lb#.loLxM0dvoO">Chewbacca Mom</a>, almost no one will see your first attempts at publicity on the internet. It normally takes years of writing to build a large following, so don’t fret that you might hit the front page of reddit with your post on floating point numbers in Ruby and that thousands of angry commenters are going to descend upon you.</p><h3>Tip #3: Find Inspiration By Talking With Other Students</h3><p>Both my first post and this one were inspired by conversations I had with other students. When you’re describing something you’re learning to another student, you naturally have to explain it in a step by step way. Take that conversation and summarize it as a post. You also may realize that the question another student has was one you also had. This means it’s likely that many students had the same question and would like to read about it!</p><h3>Tip #4: Notice when you’re stuck on a problem and how you got unstuck</h3><p>Keep track of when you don’t understand something. Describe what you didn’t understand and why you were stuck. Then explain the process you took to become unstuck. Learning that process is valuable for other students. Show the process you took, whether it was looking up documentation, experimenting with code, or asking the right question. Students want to know, how do you solve a coding problem you’re stuck on?</p><h3>Tip #5: In the beginning, your blog posts are mostly for yourself</h3><p>Given that not many people are going to read your first posts, and that you aren’t an expert on these topics yet, your first posts are mostly about solidifying your own understanding. By writing about what you’re learning, you are helping yourself remember the concepts you are studying. And by explaining a concept, you often get a better understanding of it.</p><h3>Tip #6: Have someone hold you accountable</h3><p>This is the approach I took with my first post. Tell another student that you are going to write a post and what it will be about. If you’re like me you also tell them you start many posts but don’t finish them. Tell them to hold you accountable that you’ll publish this time. Then, when you feel like giving up, there will be someone that won’t let you get away with it, which is often fun for them as well.</p><p>I hope these tips are helpful for you. I’ll take my own advice and say that I’m new to writing about code and could be wrong about all of this, so if you disagree, please let me know!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a2f11082f10f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How being stumped by one line of code helped me understand context in JavaScript]]></title>
            <link>https://medium.com/launch-school/how-being-stumped-by-one-line-of-code-helped-me-understand-context-in-javascript-2968c83e2771?source=rss-e8f3da0d9673------2</link>
            <guid isPermaLink="false">https://medium.com/p/2968c83e2771</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[launch-school]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[how-to-study]]></category>
            <category><![CDATA[learning-to-code]]></category>
            <dc:creator><![CDATA[Jay Shenk]]></dc:creator>
            <pubDate>Thu, 15 Dec 2016 21:35:07 GMT</pubDate>
            <atom:updated>2017-11-04T23:49:36.492Z</atom:updated>
            <content:encoded><![CDATA[<p>I’m currently enrolled in <em>Course 220: Front End Development with JavaScript</em> at <a href="https://launchschool.com/">Launch School</a>. While preparing for the assessment for this course, I was reviewing the projects I had completed and was struck by one assignment in particular in which we were given an unusual code structure. Here is a simplified version of it:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/e1db8797ebbd99456a269542a337c3f6/href">https://medium.com/media/e1db8797ebbd99456a269542a337c3f6/href</a></iframe><p>On line 1 we declare the inventory variable within the global scope. This way we can access it in the console as we are developing. Then we use an Immediately-Invoked Function Expression (IIFE) to add properties to the inventory object. We use an IIFE so that the properties are private and encapsulated in the inventory object.</p><p>The final line is where I got stumped.</p><p>$(inventory.init.bind(inventory));</p><p>I stared at that line a long time.</p><p>I wondered, why is it necessary to bind the inventory.init method to the inventory object context? And why is this line wrapped in a jQuery function?</p><p>Since it took me a long time and a lot of reading to answer these questions for myself, I thought I would share how I broke down what was happening and what I learned about context in JavaScript and the jQuery function in the process.</p><p>Let’s start with the first question:</p><h4>Why is it necessary to bind the inventory.init method to the inventory object context?</h4><p>In my understanding of context in JavaScript so far, I knew that if you call a method on an object the context is set to the object calling it. So, I thought, couldn’t you just write $(inventory.init)?</p><p>I tried that and got this error:</p><pre>Uncaught TypeError: this.bindEvents is not a function</pre><p>What? But bindEvents is defined in the inventory object, and the inventory object is this right? … Wrong. After using a breakpoint in the console I discovered that this was pointing to the Window, the implicit global context. But how did that happen? Why was the inventory context lost?</p><p>Then came my first a-ha moment. I realized that the inventory.init method was not being immediately called. If it was being called it would be followed by a parenthesis like so: inventory.init().</p><p>And unlike call or apply, bind does not call the function. Instead, its purpose is to permanently bind the context to the object passed to it.</p><p>This is when I remembered an important concept: <strong>function execution context is determined not when the function is defined but instead when it is <em>executed</em>.</strong></p><p>For example:</p><pre>var foo = {<br>  bar: function() {<br>    return this;<br>  }<br>};</pre><pre>var baz = foo.bar;</pre><pre>foo.bar(); // =&gt; returns Object { ... }<br>baz();     // =&gt; returns <strong>Window</strong> { ... }</pre><p>foo.bar() sets this to foo because it is method invocation. However, when we assign foo.bar to baz and then later call baz(), the foo context is lost because we are using <a href="https://rainsoft.io/gentle-explanation-of-this-in-javascript/#2functioninvocation">function invocation</a>, so the implicit Window context is used as this instead.</p><p>To correct this, we would use bind like so:</p><pre>var foo = {<br>  bar: function() {<br>    return this;<br>  }<br>}</pre><pre>var baz = foo.bar.<strong>bind(foo)</strong>;</pre><pre>foo.bar(); // =&gt; returns Object { ... }<br>baz();     // =&gt; returns <strong>Object</strong> { ... }</pre><p>With the first piece of the puzzle solved, it was time to move to the next question:</p><h4>Why is the line wrapped in a jQuery function?</h4><p>Here’s the line in question again for our reference:</p><p>$(inventory.init.bind(inventory));</p><p>The jQuery function, which the $ is a shorthand for, was the other mysterious element to me. Couldn’t we leave it out and just write:</p><p>inventory.init()</p><p>And anyway, I’m used to seeing the jQuery function wrapping selectors like $(&#39;p&#39;), what is it doing wrapping a function?</p><p>That’s when I remembered that a shortcut for writing</p><pre>$(document).ready(function() { } )</pre><p>is</p><pre>$(function() { } );</pre><p>Then I realized that what we were doing was instead of using an anonymous function like the line above, we were telling jQuery to run the inventory.init function after the document was ready.</p><p>Because the jQuery function was not immediately calling the inventory.init function, but instead storing it to be called later when the document was ready, the context is lost if you don’t bind the context to the inventory object.</p><p>This is because when the function is actually called it is being called by the jQuery function, making it function invocation, so the implicit function context of Window is used. This is why we instead write $(inventory.init.bind(inventory)) to permanently bind the function context to the inventory object so that when the jQuery function later calls it the context is retained.</p><p>This also helps explain why on line 10,</p><pre>$(“#add_item”).on(“click”, this.newItem.bind(this)); </pre><p>we have to bind the context again, because we are not immediately calling the this.newItem method, but instead jQuery will call it later using function invocation when the click event fires.</p><p>So, in summary, if we were to explain what happens in the last line of code,</p><pre>$(inventory.init.bind(inventory));</pre><p>we would say that we bind the inventory.init method to the inventory object context and pass it to the jQuery function as a callback that will be called as function invocation after the document has loaded and the DOM is ready.</p><p>Phew! Now I finally understood what was happening on that final line of code and felt I had a better understanding of context in JavaScript and how the jQuery function works.</p><p>For further reading, I highly recommend <a href="https://rainsoft.io/gentle-explanation-of-this-in-javascript/">Gentle explanation of ‘this’ keyword in JavaScript</a>.</p><p><em>Note: Since I’m relatively new to these concepts, it’s very possible there are mistakes in this post that need corrected. Please help me out and add corrections in the comments and I will edit this post.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2968c83e2771" width="1" height="1" alt=""><hr><p><a href="https://medium.com/launch-school/how-being-stumped-by-one-line-of-code-helped-me-understand-context-in-javascript-2968c83e2771">How being stumped by one line of code helped me understand context in JavaScript</a> was originally published in <a href="https://medium.com/launch-school">Launch School</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>