<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>learning to program Archives | Programming Zen</title>
	<atom:link href="https://programmingzen.com/tag/learning-to-program/feed/" rel="self" type="application/rss+xml" />
	<link>https://programmingzen.com/tag/learning-to-program/</link>
	<description>Meditations on programming, startups, and technology</description>
	<lastBuildDate>Sun, 17 Mar 2024 18:20:37 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
<site xmlns="com-wordpress:feed-additions:1">1397766</site>	<item>
		<title>I&#8217;m Supposed to Know</title>
		<link>https://programmingzen.com/im-supposed-to-know/</link>
					<comments>https://programmingzen.com/im-supposed-to-know/#respond</comments>
		
		<dc:creator><![CDATA[Antonio Cangiano]]></dc:creator>
		<pubDate>Sun, 17 Mar 2024 18:18:27 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[copilot]]></category>
		<category><![CDATA[learning to program]]></category>
		<category><![CDATA[psychology]]></category>
		<category><![CDATA[tips for young programmers]]></category>
		<category><![CDATA[watsonx code assistant]]></category>
		<guid isPermaLink="false">https://programmingzen.com/?p=2745</guid>

					<description><![CDATA[<p>There are many obstacles to learning but a key one I see repeatedly is: I&#x2019;M SUPPOSED TO KNOW. Let&#x2019;s say that you&#x2019;re trying to accomplish something technical and you don&#x2019;t remember how but can easily look it up, if you feel like you&#x2019;re supposed to know it, you&#x2019;re less satisfied with your ability to get it done. You feel like an impostor. This mindset actively&#xA0;discourages the act of looking up information, which is essential for learning. Imagine that you&#x2019;re a web developer working on a project that requires the implementation of SSO/IdP. A voice inside tells you, &#x201C;I&#x2019;m a professional </p>
<p>The post <a href="https://programmingzen.com/im-supposed-to-know/">I&#8217;m Supposed to Know</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>There are many obstacles to learning but a key one I see repeatedly is: I’M SUPPOSED TO KNOW.<br><br>Let’s say that you’re trying to accomplish something technical and you don’t remember how but can easily look it up, if you feel like you’re supposed to know it, you’re less satisfied with your ability to get it done. You feel like an impostor.</p>



<p>This mindset actively&nbsp;discourages the act of looking up information, which is essential for learning.</p>



<p>Imagine that you&#8217;re a web developer working on a project that requires the implementation of SSO/IdP. A voice inside tells you, &#8220;I&#8217;m a professional web developer. I&#8217;m supposed to know how to do this already.&#8221;</p>



<p>You might spend hours trying to figure it out entirely on your own instead of taking advantage of all the help you can get. And this further adds to your feelings of inadequacy or your Impostor Syndrome.</p>



<p>I suspect technologies like Copilot and watsonx Code Assistant will really challenge those who struggle with this. Remember, it doesn’t matter if you had to look it up. If you got it done, you got it done. This isn’t the Olympics where outside help disqualifies you. Looking up things is an integral part of being a programmer.</p>



<p>(I readily acknowledge that these tools are useful but still being developed and their suggestions can still be inaccurate or suboptimal, but I think the point stands.)<br><br>Embrace the mindset that “it’s okay not to know everything; get it done” and such tools become playgrounds for learning and being more productive. If you take the “I’m supposed to know” approach you’ll just see them as crutches and miss out on their potential. Always watch out for psychological barriers. They can make or break you.</p>
<p>The post <a href="https://programmingzen.com/im-supposed-to-know/">I&#8217;m Supposed to Know</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmingzen.com/im-supposed-to-know/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2745</post-id>	</item>
		<item>
		<title>25 Pitfalls When Learning to Program</title>
		<link>https://programmingzen.com/pitfalls-when-learning-to-program/</link>
					<comments>https://programmingzen.com/pitfalls-when-learning-to-program/#comments</comments>
		
		<dc:creator><![CDATA[Antonio Cangiano]]></dc:creator>
		<pubDate>Thu, 09 Nov 2017 21:47:41 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[how to become a programmer]]></category>
		<category><![CDATA[learning to program]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[programming piftalls]]></category>
		<guid isPermaLink="false">http://programmingzen.com/?p=1786</guid>

					<description><![CDATA[<p>I&#x2019;m going to share with you what I see as &#x201C;25&#x201D; common pitfalls when learning to program (or working towards mastering programming). Many of these points affect both beginners and professionals alike &#x2014; myself very much included. 0. Forgetting that programming is all about people. Yes, the machine will execute your code, but programming is solving problems for people, translating their requirements into code that will be read, maintained, and modified by other people (or yourself down the line). 1. Not spending enough time programming. Depending on your job or schedule, you might spend a lot of time on tasks </p>
<p>The post <a href="https://programmingzen.com/pitfalls-when-learning-to-program/">25 Pitfalls When Learning to Program</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>I&#8217;m going to share with you what I see as &#8220;25&#8221; common pitfalls when learning to program (or working towards mastering programming). Many of these points affect both beginners and professionals alike — myself very much included.</p>
<p><strong>0.</strong> Forgetting that <strong>programming is all about people</strong>. Yes, the machine will execute your code, but programming is solving problems for people, translating their requirements into code that will be read, maintained, and modified by other people (or yourself down the line).</p>
<p><strong>1.</strong> <strong>Not spending enough time programming</strong>. Depending on your job or schedule, you might spend a lot of time on tasks that are related to programming but aren&#8217;t actually programming itself.</p>
<p><strong>2.</strong> <strong>Stopping at the surface</strong> of a given technology you&#8217;re learning. Feeling satisfied with having mastered the basics just enough to get stuff done, without ever exploring further or going behind the scenes all that much.</p>
<p><strong>3.</strong> <strong>The Magpie approach</strong> to learning programming. You start learning Rails, half-way through you realize that Phoenix is out there, oh and you need to learn JavaScript so you might as well go with Node.js&#8230; but wait <a href="https://medium.com/@tjholowaychuk/farewell-node-js-4ba9e7f3e52b" target="_blank" rel="noopener">TJ switched to Go</a>, and hold on&#8230; what about Rust? Soon enough your browser history will have, &#8220;web development or data science career&#8221;, &#8220;is Clojure dead?&#8221;, &#8220;Clojure vs Elixir&#8221;, &#8220;is Crystal mature enough&#8221;, &#8220;any good frameworks for Golang&#8221;, &#8220;Phoenix vs Buffalo&#8221; and &#8220;Kotlin for web development&#8221; all in the same week. 😀</p>
<p><strong>4.</strong> Reading books and watching courses online but <strong>not practicing the skills</strong> presented, therefore quickly forgetting about them.</p>
<p><strong>5</strong>. <strong>Skipping fundamentals</strong>. So you end up learning about continuation-passing style (CPS) but still can&#8217;t do SQL joins without an object-relational mapper.</p>
<p><strong>6.</strong> <strong>Not enough patience</strong> or discipline to progress through the learning process and steps required to master any technology.</p>
<p><strong>7.</strong> <strong>No clear map or schedule for continuing to learn</strong> through available resources, while you tackle more immediate challenges in your day-to-day programming.</p>
<p><strong>8.</strong> <strong>Analysis paralysis</strong>, wasting way too much time choosing amongst various frameworks and libraries (like Angular, React, and Vue), rather than just picking one, using it, and switching to something else only if you actually need to do so. Basically being a <a href="https://www.psychologistworld.com/cognitive/maximizers-satisficers-decision-making" target="_blank" rel="noopener">maximizer instead of a satisficer</a>.</p>
<p><strong>9.</strong> Refusing the polyglot nature of modern-day programming. In most domains, it isn&#8217;t reasonable to expect one programming language to be the best fit for every problem. Likewise, <strong>identifying too much as an X or Y programmer</strong>, rather than just a programmer who prefers X or Y.</p>
<p><strong>10.</strong> <strong>Fear of experimenting with new technology</strong>. Rather than just reading about certain emerging technologies (e.g., blockchain or <a href="https://cognitiveclass.ai/courses/how-to-build-a-chatbot/" target="_blank" rel="noopener">chatbots</a>), actually firing up a VM to try them out yourself, even if it involves getting your hands dirty with a programming language or API you are not familiar with.</p>
<p><strong>11.</strong> <strong>Expecting to know everything upfront</strong>. Being disappointed after finding pointers to the solution via Google, because you didn&#8217;t come up with an elegant solution entirely on your own and kicking yourself while thinking, &#8220;I should have thought of that myself&#8221;.</p>
<p><strong>12.</strong> <strong>Not creating many small katas</strong>, exercises, and projects while learning.</p>
<p><strong>13.</strong> <strong>Fear of sharing code</strong> with others or getting code reviews, lest you be judged.</p>
<p><strong>14.</strong> <strong>Not seeking one-on-one mentorship</strong> from more experienced developers.</p>
<p><strong>15.</strong> Expecting to learn everything at once with <strong>unrealistic timelines</strong> (e.g., master iOS development in a month).</p>
<p><strong>16.</strong> For the more entrepreneur-minded, <strong>not exploring cool projects because they don&#8217;t have a clear path to revenue generation</strong>.</p>
<p><strong>17.</strong> Not asking questions for <strong>fear of coming across as stupid</strong> or as more of a newbie than you actually are.</p>
<p><strong>18.</strong> Feeling like you are not a real programmer if you&#8217;re creating apps by gluing high-level libraries together, in a high-level language instead of doing &#8220;hardcore&#8221; algorithms in more complex languages. I dub this <strong>low-level programming envy</strong>.</p>
<p><strong>19.</strong> <strong>Allowing the desire to learn best practices to hinder your ability to grasp the fundamentals</strong> of a given language or technology. For example, feeling like you need to learn a whole book on design patterns or master TDD/BDD before you start creating projects.</p>
<p><strong>20.</strong> Perfectionism. <strong>Letting perfect be the enemy of good enough.</strong> Never shipping anything, getting stuck in the &#8220;final touches&#8221; phase. (But balance is important, so don&#8217;t ship horribly broken software for the sake of shipping.)</p>
<p><strong>21.</strong> Related to the previous point, <strong>ignoring the progression: make it work, make it faster, make it clean</strong>. Instead, expecting a polished solution from the get-go. It&#8217;s important to accept that the first iteration will be a rough draft to improve upon.</p>
<p><strong>22.</strong> <strong>Impostor Syndrome</strong>. Feeling that you aren&#8217;t good enough. This is particularly bad if you don&#8217;t fit the current developer stereotype, as a lack of role models that you can relate with might mistakenly confirm your doubts. This is part of why women and minorities representation in tech is so key.</p>
<p><strong>23.</strong> Writing code and learning about programming from books, but <strong>never reading other people&#8217;s code</strong>. Open Source gives us an amazing resource that can drastically speed up our understanding of programming and best practices.</p>
<p><strong>24.</strong> <strong>Not getting exposed to other paradigms or domains</strong>. If you&#8217;re a web developer, not learning about other types of development. If you know Object-Oriented programming, not learning about Functional programming.</p>
<p><strong>25.</strong> <strong>Not teaching others what you learn</strong>. Nothing will solidify what you learn as well as trying to explain it to others. Even just studying with the intention of teaching will increase your ability to learn.</p>
<p>There you have it&#8230; <em>25</em> pitfalls. Oh, don&#8217;t forget off-by-one errors, too. 😀</p>
<h3>Conclusion</h3>
<p>All this to say:</p>
<p style="background-color: #ef97b3; text-align: center; font-style: normal; border: 1px solid pink; padding: 10px;">You&#8217;re good enough. You can definitely do it. Just watch out for these pitfalls, make a plan, commit to it, then take it one step at the time.</p>
<p>When learning to program (or improving your current mastery of it), I recommend the code/read/teach method. Code one real project, and many small exercises/katas as you learn. Read books but also other people&#8217;s code. Finally, teach what you learn online and in person. You don&#8217;t need to be an expert to do so.</p>
<p><img data-recalc-dims="1" fetchpriority="high" decoding="async" class="aligncenter wp-image-1790 size-full" title="Learnign to program" src="https://i0.wp.com/programmingzen.com/wp-content/uploads/2017/11/learning-to-program.gif?resize=701%2C271&#038;ssl=1" alt="Learning to program" width="701" height="271" /></p>
<p>I hope this is somewhat useful. If it is, feel free to share the link online. It&#8217;s a list that I, myself, plan to reread once in a while.</p>
<p><em>Initially, I shared these thoughts on learning to program as <a href="https://twitter.com/acangiano/status/928316815876300800" target="_blank" rel="noopener">a series of tweets</a>, but Twitter&#8217;s UI had some issues displaying them as a single thread. So I&#8217;m reposting them here as a post. Incidentally, this ends my <a href="https://programmingzen.com/programming-zen-will-be-on-a-hiatus-due-to-tragic-circumstances/" target="_blank" rel="noopener">one-year hiatus</a> from blogging.</em></p>
<p>The post <a href="https://programmingzen.com/pitfalls-when-learning-to-program/">25 Pitfalls When Learning to Program</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmingzen.com/pitfalls-when-learning-to-program/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1786</post-id>	</item>
	</channel>
</rss>
