<?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>how to become a programmer Archives | Programming Zen</title>
	<atom:link href="https://programmingzen.com/tag/how-to-become-a-programmer/feed/" rel="self" type="application/rss+xml" />
	<link>https://programmingzen.com/tag/how-to-become-a-programmer/</link>
	<description>Meditations on programming, startups, and technology</description>
	<lastBuildDate>Tue, 16 Jun 2020 21:46:48 +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>What to Study to Become a Web Developer</title>
		<link>https://programmingzen.com/what-to-study-to-become-a-web-developer/</link>
					<comments>https://programmingzen.com/what-to-study-to-become-a-web-developer/#comments</comments>
		
		<dc:creator><![CDATA[Antonio Cangiano]]></dc:creator>
		<pubDate>Tue, 16 Jun 2020 21:41:44 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[beginners]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[how to become a programmer]]></category>
		<category><![CDATA[how to become a web developer]]></category>
		<category><![CDATA[how to get a developer job]]></category>
		<category><![CDATA[programming advice]]></category>
		<category><![CDATA[tech stack]]></category>
		<category><![CDATA[tips for young programmers]]></category>
		<category><![CDATA[what to study]]></category>
		<guid isPermaLink="false">https://programmingzen.com/?p=2603</guid>

					<description><![CDATA[<p>In this third article of my, How to Become a Web Developer and Get a Job guide, we&#x2019;ll discuss what to study to become a web developer. In the previous article on front-end vs back-end developers, I covered the existence of front-end and back-end technologies, which in turn have many options to choose from. Too many options, in fact. How do we go about choosing what to study? And what about all the other stuff web developers tend to know, such as the command line, Git, and other developer tools? When you are beginning in this field, not only you </p>
<p>The post <a href="https://programmingzen.com/what-to-study-to-become-a-web-developer/">What to Study to Become a Web Developer</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>In this third article of my, <a href="https://programmingzen.com/how-to-become-a-web-developer-and-get-a-job/">How to Become a Web Developer and Get a Job</a> guide, we&#8217;ll discuss what to study to become a web developer.</p>



<p>In the previous article on <a href="https://programmingzen.com/front-end-vs-back-end-developer/">front-end vs back-end developers</a>, I covered the existence of front-end and back-end technologies, which in turn have many options to choose from.</p>



<p>Too many options, in fact. How do we go about choosing what to study? And what about all the other stuff web developers tend to know, such as the command line, Git, and other developer tools?</p>



<p>When you are beginning in this field, not only you do not know a wide range of things, you are likely also unaware of what you don&#8217;t yet know.</p>



<p>As such, my goal for this section of the guide is to give you a list of things you should get acquainted with, along with some rationale for why you&#8217;d opt for those versus other possible choices.</p>



<p>This list of what to study to become a web developer is necessarily incomplete (I don&#8217;t even list learning to debug), but fear not! You will pick up other skills and tools organically in the process of studying these key topics.</p>



<p>In the next article in the guide, we&#8217;ll discuss how to go about learning those needed elements as well.</p>



<h2 class="wp-block-heading">What to study for front-end development</h2>



<p>As far as the web is concerned, front-end means three main technologies:</p>



<ul class="wp-block-list"><li><strong>HTML</strong>: The structure of your web pages;</li><li><strong>CSS</strong>: The styling of your web pages;</li><li><strong>JavaScript</strong>: To make your web pages more useful and interactive.</li></ul>



<p>You need to become familiar with all three of these areas if you’re going to have much of a hope of getting job as a web developer.</p>



<p>If you don&#8217;t plan to become a front-end developer, you might get away with a superficial knowledge of CSS (and to some extent JavaScript). However, you should still have a fundamental understanding of both.</p>



<p>For CSS, you should become acquainted with both the <em>Flexbox model</em> and <em>Grid layout</em>. While these terms might not mean much to you yet, they will become familiar as soon as you take a course, read a book, or peruse documentation on CSS.</p>



<p>If you plan on becoming a front-end developer, then you need to be quite decent at CSS.</p>



<p>Learn HTML, CSS, and JavaScript regardless of what development role (e.g., front-end, back-end, or full-stack) you may ultimately end up taking on in your career.</p>



<p>In the beginning of your journey, simply focus on these three in their plain/vanilla form. For example, don&#8217;t try to go for fancy JavaScript frameworks like React and Vue right out of the gate.</p>



<p>The only frameworks you might want to explore at this stage are CSS ones like Bootstrap and TailwindCSS, and an old school JavaScript library (i.e., jQuery), to see what they have to offer over vanilla CSS and JavaScript.</p>



<p>What they don&#8217;t do is introduce a whole host of new and confusing concepts (like React does), which are best tackled once you have a decent mastery of the front-end trifecta (i.e., HTML, CSS, and JavaScript).</p>



<h2 class="wp-block-heading">What to study for back-end development</h2>



<p>After you’ve spent a couple of months grasping the fundamentals of HTML, CSS, and JavaScript, I&#8217;d recommend that you start exploring a back-end development language and framework.</p>



<p>You&#8217;ll quickly find that front-end alone limits the type of web applications you can build a fair bit. Want to permanently save and retrieve the data the user gave you? You need back-end tools.</p>



<p>Adding back-end development skills will allow you to create much more useful web applications, as well as to better understand the other side of the coin.</p>



<p>This is useful even if you decide to specialize in front-end development because you&#8217;ll most likely be working with back-end developers and interacting with their work from your front-end code.</p>



<p>So far there hasn&#8217;t been much controversy in this article. Just about everyone can agree that learning HTML, CSS, and JavaScript is a must. Some will fight me on my suggestion of putting off React or Vue until later (or think that looking into jQuery in 2020 is silly), but nothing as of yet has been truly controversial.</p>



<p>Sides are about to be drawn, however, as I proceed to tell you what to study for the back-end side of things. There are countless possible options out there. At least a dozen of which are squarely reasonable choices.</p>



<p>Some of the most worthwhile candidates include:</p>



<ul class="wp-block-list"><li><strong>Python and Django</strong></li><li><strong>JavaScript and Express.js</strong></li><li><strong>Ruby and Ruby on Rails</strong></li></ul>



<p>If you already know, or have a hunch, that you will focus on front-end development, I recommend using a JavaScript server-side framework like Express.js.</p>



<p>This will further solidify your JavaScript skills and will enable you to build complete web applications (and APIs that your front-end can then consume).</p>



<p>I&#8217;m personally not a huge fan of server-side JavaScript (or JavaScript in general), but if you know that you want to become a front-end developer you must become as skilled as you possibly can in JavaScript. It is, hands down, the number one skill that you’ll need to master in this field.</p>



<p>I would skip the JavaScript and Express.js stack if any of the followings apply to you:</p>



<ul class="wp-block-list"><li>You didn&#8217;t particularly enjoy JavaScript while learning it for front-end;</li><li>You are unsure whether front-end development is right for you;</li><li>CSS and JavaScript offended your sensibilities and you are now seeking refuge in back-end development where you&#8217;ll be less likely to work with either of these technologies;</li><li>You want to learn something new and a different programming language is likely to make your profile more appealing to employers.</li></ul>



<p>If that&#8217;s you, I recommend that you consider Python and its associated framework, Django.</p>



<p>Python is one of the most popular programming languages in the world and it is quite pleasant to work with. Nowadays, it is almost a given that most well-rounded programmers will know Python.</p>



<p>It&#8217;s also the ideal language to have at the ready, should you develop an interest in data science and machine learning down the line.</p>



<p>The most popular frameworks to build web applications in for Python are Flask and Django. Ideally, you&#8217;ll want to learn both, but to begin with, I would suggest you focus on Django.</p>



<p>Why Django? It&#8217;s highly productive which means that you&#8217;ll be able to create fancier web applications with less work, which can be quite motivating when you are starting out. It also ships with a lot of sensible conventions that will in turn teach you how to structure and how to think about the architecture of your web application.</p>



<p>Flask is excellent too and likely the better tool if one is focusing on building small apps and APIs. That said, it is best used once you have a better understanding of how web applications work.</p>



<p>What about Ruby and Ruby on Rails? They are also an excellent choice and my favorite among the options listed here. However, Ruby is not quite as popular as Python, and it is mostly used within the scope of web development.</p>



<p>With Python you get a very similar programming language, plus access to all the data science goodies that are not readily available in Ruby.</p>



<p>Should you decide to pick up Ruby and Ruby on Rails down the line, it will be quite easy coming from a Python and Django background.</p>



<p>As you go through this process, regardless of the language and framework you choose, you must become well acquainted with the <em>REST paradigm</em> which will teach you about <em>HTTP requests</em> and <em>responses</em>, <em>HTTP methods</em>, and <em>response codes</em>.</p>



<h2 class="wp-block-heading">What about databases?</h2>



<p>You&#8217;ll also need to become acquainted with databases. For the most part, you&#8217;ll have to master the fundamentals of:</p>



<ul class="wp-block-list"><li><strong>MongoDB</strong>: A document-based database;</li><li><strong>PostgreSQL</strong>: An SQL/relational database.</li></ul>



<p>Mongo is overused. However, it is common and easy enough to learn, so it can certainly be worth picking up. PostgreSQL, on the other hand, is fantastic and an obvious recommendation.</p>



<p>Once you have an SQL foundation in place, you can switch with relative ease to other relational databases, should a project or employer require it.</p>



<h2 class="wp-block-heading">Miscellaneous things</h2>



<p>The front-end and back-end stacks outlined above are enough to make you useful and capable of landing your first job in tech.</p>



<p>There are however several other skills which are taken for granted. If you are not too familiar with them, you&#8217;ll want to invest some time in learning these areas as well.</p>



<ul class="wp-block-list"><li><strong>Git and GitHub</strong>: to store, edit, keep track of changes, share, and release code.</li><li><strong>Basic Linux shell commands</strong>: think <code>ls</code>, <code>cat</code>, <code>echo</code>, <code>source</code>, <code>ps</code>,<code>top</code>, <code>grep</code>, <code>find</code>, <code>curl</code>, etc.</li><li><strong>A code editor</strong>: I recommend <em>Visual Studio Code</em> unless you already have a different favorite. Learn how to use it efficiently, including leveraging popular plugins. For example, plugins that enable you to autocomplete your code, <em>linters</em> to ensure that it follows idiomatic style and formatting, and more.</li><li><strong>Regular Expressions</strong>: quite complex but also handy both within your code and when searching/transforming text via the command line (or within your code editor).</li><li><strong>Web security</strong>: you should be able to prevent common security issues like <em>SQL injection</em>, <em>Cross-Site Scripting</em> (XSS), <em>Cross-Site Request Forgery</em> (CSRF), etc.</li></ul>



<p>I suspect you&#8217;ll pick up many of these skills automatically as you study the rest of the stuff mentioned earlier on.</p>



<p>Just make sure to supplement as needed so that you are not entirely unfamiliar with any of the concepts listed here.</p>



<h2 class="wp-block-heading">More advanced front-end and back-end skills</h2>



<p>Once you have all of these skills above under your belt, you might be ready to tackle more advanced areas.</p>



<p>If you decide to become a front-end developer, I suggest looking into:</p>



<ul class="wp-block-list"><li><strong>Accessibility</strong>;</li><li><strong>User Experience (UX)</strong> principles;</li><li><strong>SEO</strong> (Search Engine Optimization);</li><li>Building <strong>responsive web applications</strong> (web apps that scale to the user&#8217;s device resolution);</li><li><strong>Wireframing</strong> with <em>Figma</em> or <em>Adobe XD</em>;</li><li>Styling with <strong>Sass</strong>;</li><li><strong>Webpack</strong>;</li><li><strong>React/Redux</strong> or <strong>Vue/Vuex</strong>.</li></ul>



<p>If you decide to become a back-end or full-stack developer, I&#8217;d recommend exploring more in depth:</p>



<ul class="wp-block-list"><li><strong>Algorithms</strong>: learn more about traditional algorithms and data structures concepts often taught in computer science university courses, including the concept of Big O notation.</li><li><strong>SQL</strong>, going beyond the language by looking at more advanced features modern relational databases have to offer (triggers, stored procedures, etc).</li><li><strong>Flask</strong> (if you opted for Python) or <strong>Sinatra</strong> (if you opted for Ruby).</li><li><strong>GraphQL</strong>: go beyond REST and see what all the buzz is about.</li><li>Deployment and scaling with <strong>containers</strong> using tools like <em>Docker</em> and <em>Kubernetes</em>.</li></ul>



<p>Note that for all of the technologies I’ve mentioned here, this list is still not an exhaustive one by any means. This is by design, as it really doesn&#8217;t need to be all-encompassing. Most professional web developers have not mastered every entry on this list.</p>



<p>So, if you decide to become a front-end developer, mostly ignore the advanced back-end stuff, and focus on the front-end skills.</p>



<p>Conversely, if you decide to become a back-end developer, focus on the advanced back-end skills by studying, practicing, and building projects without worrying too much about the advanced front-end skills side of things.</p>



<p>You just need to become really good at the key components for the role you decide to take, while not being entirely unfamiliar with the rest of the entries on this list.</p>



<h2 class="wp-block-heading">What&#8217;s next?</h2>



<p>Now that you know what you should be studying, we need to address how to actually go about studying it.</p>



<p>Do you need a degree to become a web developer? Should you enroll in a development bootcamp? We&#8217;ll cover these questions and much more in the next article in this multi-part guide.</p>



<p>Stay tuned and don&#8217;t forget to subscribe, if you haven’t done so ready.</p>
<p>The post <a href="https://programmingzen.com/what-to-study-to-become-a-web-developer/">What to Study to Become a Web Developer</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmingzen.com/what-to-study-to-become-a-web-developer/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2603</post-id>	</item>
		<item>
		<title>How to Become a Web Developer and Get a Job With No Experience (Guide)</title>
		<link>https://programmingzen.com/how-to-become-a-web-developer-and-get-a-job/</link>
					<comments>https://programmingzen.com/how-to-become-a-web-developer-and-get-a-job/#comments</comments>
		
		<dc:creator><![CDATA[Antonio Cangiano]]></dc:creator>
		<pubDate>Thu, 14 May 2020 20:12:18 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[how to become a programmer]]></category>
		<category><![CDATA[how to become a web developer]]></category>
		<category><![CDATA[how to get a developer job]]></category>
		<category><![CDATA[programming advice]]></category>
		<category><![CDATA[tips for young programmers]]></category>
		<guid isPermaLink="false">https://programmingzen.com/?p=2520</guid>

					<description><![CDATA[<p>In this guide, I&#x2019;ll teach you how to become a Web Developer and in turn how to get a job in our industry. I&#x2019;ll split the guide into a series of articles. Once the guide is complete, I will also make it available for free to my subscribers in PDF, EPUB, and MOBI format. Who is this guide for This guide is for anyone who wants to become a Web Developer and get a job as a professional developer. The &#x201C;how to become a Web Developer&#x201D; portion of the guide is going to be specific to web development, but even </p>
<p>The post <a href="https://programmingzen.com/how-to-become-a-web-developer-and-get-a-job/">How to Become a Web Developer and Get a Job With No Experience (Guide)</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>In this guide, I’ll teach you <strong>how to become a Web Developer</strong> and in turn how to get a job in our industry.</p>



<p>I’ll split the guide into a series of articles. Once the guide is complete, I will also make it available for free to my subscribers in PDF, EPUB, and MOBI format.</p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img data-recalc-dims="1" fetchpriority="high" decoding="async" src="https://i0.wp.com/programmingzen.com/wp-content/uploads/2020/05/How-to-Become-a-Web-Developer-and-Get-a-Job.png?resize=600%2C338&#038;ssl=1" alt="How to Become a Web Developer and Get a Job" class="wp-image-2530" width="600" height="338" srcset="https://i0.wp.com/programmingzen.com/wp-content/uploads/2020/05/How-to-Become-a-Web-Developer-and-Get-a-Job.png?w=600&amp;ssl=1 600w, https://i0.wp.com/programmingzen.com/wp-content/uploads/2020/05/How-to-Become-a-Web-Developer-and-Get-a-Job.png?resize=300%2C169&amp;ssl=1 300w" sizes="(max-width: 600px) 100vw, 600px" /></figure></div>



<h2 class="wp-block-heading">Who is this guide for</h2>



<p>This guide is for anyone who wants to become a Web Developer and get a job as a professional developer.</p>



<p>The “<strong>how to become a Web Developer</strong>” portion of the guide is going to be specific to web development, but even those seeking to become other types of developers will likely benefit from its insight.</p>



<p>The “<strong>how to get a job as a developer</strong>” portion is much more generic and will serve you well regardless of your chosen specialization.</p>



<p>I’m writing this guide with two kinds of people in mind. Young people hoping to become professional developers and existing professionals who are hoping to switch careers (or who may be returning to the workforce in the case of stay-at-home parents).</p>



<p>These are the kinds of people I have personally helped in the past and those I have the most experience with. Nevertheless, the advice provided throughout this series should be suitable for anyone whose goal is to land a developer job.</p>



<h2 class="wp-block-heading">Requirements</h2>



<p>I’ll take for granted that you have used a computer before and are somewhat web-savvy. As a litmus test of the sort, I’m assuming you know that Google Chrome and Mozilla Firefox are two browsers and can install an extension/add-on (or could figure it out by Googling it).</p>



<p>I’m also going to assume that you’re smart but not necessarily a genius like I am. That’s a joke, by the way, I’m not a genius. I’m a super genius. 🙂</p>



<p>Jokes aside, the media has created a certain stereotype of what a programmer looks like. The asocial genius wearing a hoodie can be an intimidating benchmark for those starting out.</p>



<p>The truth is developers come in all shapes, sizes, and forms. And although developers are reasonably smart people, being exceptionally gifted is by no means a requirement. You <a href="https://massivesci.com/articles/programming-math-language-python-women-in-science/" target="_blank" rel="noreferrer noopener">don&#8217;t even necessarily need</a> to be good at math.</p>



<p>Technical ability, as we’ll discuss more in-depth soon, is also not the only desirable trait of a great developer. Your communication skills and ability to collaborate are just as, if not more, important. </p>



<h2 class="wp-block-heading">Who am I</h2>



<p>I’m a Software Development Manager and AI Advocate at IBM. I’ve been a professional Web Developer for 20 years.</p>



<p>Within IBM, I’m known as the guy who got the company to adopt Rails and Django, in the early days of these technologies, and more recently I’ve been gradually doing the same for Elixir and Phoenix. (If you don’t know what any of this means, no worries, we’ll cover your options soon.)</p>



<p>Over the years, I’ve provided advice to countless people who were hoping to make it into our industry, many of whom I’ve personally mentored.</p>



<p>For the past twelve years, I’ve been doing the candidate selections for my team. As a result, I must have reviewed thousands of résumés, interviewed hundreds of developers, and hired a few dozen applicants.</p>



<p>I’m also the author of a couple of technical books. One on <a href="https://amzn.to/3fSiVc7" target="_blank" rel="noreferrer noopener">Rails for Microsoft developers</a> (painfully obsolete at this point) and one on <a href="https://pragprog.com/titles/actb2/" target="_blank" rel="noreferrer noopener">Technical Blogging</a> (current and quite useful to those seeking to advance their career in tech).</p>



<p>Among too many other things, I’m also the author of a popular <a href="https://www.coursera.org/learn/building-ai-powered-chatbots" target="_blank" rel="noreferrer noopener">chatbot course</a> that’s been taken by over 100,000 people worldwide on <a href="https://cognitiveclass.ai/" target="_blank" rel="noreferrer noopener">Cognitive Class</a> (a volunteer initiative for which I’m the marketing manager), Coursera, and edX.</p>



<p>This is not to brag (like many of us, I tend to feel underaccomplished at times), but rather to say there is a method to my madness and that my approach appears to have helped a lot of people. I’m hoping that it will help you as well.</p>



<h2 class="wp-block-heading">A disclaimer on how to become a Web Developer</h2>



<p>“How to become a Web Developer” doesn’t mean that I will teach you how to program in HTML, CSS, JavaScript, etc. I could do that, but this svelte guide would become a 1,200-page tome in no time flat. And it would likely be one that would echo a lot of resources that are already available elsewhere.</p>



<p>Instead, I’m going to tell you what to study, along with how and why to study it. I will also point out various useful books and resources where you can learn more about the technical topics I mention.</p>



<p>I’ll give you the roadmap, but I won’t be doing the actual studying for you. 🙂</p>



<p>This is all very doable though, fear not. There are millions of developers, most of who are not any more special than you are. However, it would be a lie to say that there won’t be a lot of work involved on your part.</p>



<p>It will be, but if you’re not afraid of some elbow grease, a better career (and possibly life) awaits you on the other side of that dedicated effort.</p>



<h2 class="wp-block-heading">Why would you want to become a developer</h2>



<p>Instead of elaborate arguments trying to sell you on the profession, I’m going to list a few quick, bullet points in favor of becoming a Web Developer in the 2020s.</p>



<ul class="wp-block-list"><li><strong>Web development is future-proof.</strong> AI will take over a lot of jobs, but most developer jobs won’t be automated away any time soon.</li><li><strong>Web development can be remote.</strong> Most forms of software development, not just web development, can be carried out remotely. So you’re less likely to lose your job if, as if it’s currently the case with COVID–19, you are forced to be inside for extended lengths of time. There are, of course, other variables at play, but this improves your odds of remaining employed.</li><li><strong>Web development is creative</strong>. You’ll be able to engage both the analytical side and the more creative parts of your brain.</li><li><strong>Web development is fun</strong>. Two aspects that make web development really fun are being able to instantly see the results of your work (right in your web browser) and the ability to share it with the world at large. All this, without them having to install anything on their devices.</li><li><strong>Web development doesn’t require a degree</strong>. A degree in Computer Science or Software Engineering is certainly helpful and provides many useful fundamentals. However, it’s by no means required to become a Web Developer or to get a job as a Web Developer.</li><li><strong>Web development pays well</strong>. Try getting a job that pays six figures without a degree in most other fields; they&#8217;ll laugh as they escort you out of the interview room. Sure, your first web development job is unlikely to pay six figures, but you can still expect a generous salary right out of the gate from many companies (in the US, a junior developer will earn, on average, <a rel="noreferrer noopener" href="https://www.indeed.com/career/junior-developer/salaries" target="_blank">$66,695 per year</a>). </li></ul>



<p>Those are some of the major perks but, as you’ll find out if you go through this process, the work itself can definitely be its own reward as well. </p>



<p>Of course, your landlord expects dollars not your sense of accomplishment and self-satisfaction. But thankfully, web development covers you there as well.</p>



<h2 class="wp-block-heading">What to expect next</h2>



<p>This first article in our series is primarily an introduction to what is to come in future entries.</p>



<p>Here are some of the topics that I’ll cover next:</p>



<ul class="wp-block-list"><li><a href="https://programmingzen.com/front-end-vs-back-end-developer/">Front-End VS Back-End Developer</a>: Front-End Developer, Back-end Developer, Full-Stack Developer, DevOps: what are the options, and what do they entail?</li><li><a href="https://programmingzen.com/what-to-study-to-become-a-web-developer/">What set of web development technologies you should study</a>. The ones that maximize your chances of getting a job as a web developer.</li><li>How to study for your chosen web development stack (including specific books, courses, and resources).</li><li>Résumés, Github, and project portfolios.</li><li>Using social media and blogging to stand out from the crowd and attract job offers.</li><li>Finding the right jobs and applying for them.</li><li>Mastering the interview process.</li></ul>



<p>For now, remember that you can do this. Together we can get you in shipshape for your future web development job.</p>



<p>And please don’t forget to subscribe below to ensure you receive the next installments of this guide.</p>
<p>The post <a href="https://programmingzen.com/how-to-become-a-web-developer-and-get-a-job/">How to Become a Web Developer and Get a Job With No Experience (Guide)</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmingzen.com/how-to-become-a-web-developer-and-get-a-job/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2520</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" 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>
		<item>
		<title>Tip #4 for Young Programmers: Get Familiar with the Command Line</title>
		<link>https://programmingzen.com/tip-4-for-young-programmers/</link>
					<comments>https://programmingzen.com/tip-4-for-young-programmers/#comments</comments>
		
		<dc:creator><![CDATA[Antonio Cangiano]]></dc:creator>
		<pubDate>Tue, 31 May 2016 14:00:47 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[how to become a programmer]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[programming advice]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tips for young programmers]]></category>
		<guid isPermaLink="false">http://programmingzen.com/?p=1671</guid>

					<description><![CDATA[<p>Back in my day, and I&#x2019;m not that old, programmers&#xA0;were a subset of people who were &#x201C;really good with computers&#x201D;. It would be hard to find a programmer who didn&#x2019;t know how to use the operating system of their choosing far beyond end user level. These days things are a little different. Now we&#x2019;re encouraging everyone to code and become a programmer, so a lot of newcomers no longer have many a sleepless night fighting with, say, SuSE CDs, under their belts. As a result, you run into people who can be somewhat competent within a given development environment, who </p>
<p>The post <a href="https://programmingzen.com/tip-4-for-young-programmers/">Tip #4 for Young Programmers: Get Familiar with the Command Line</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img data-recalc-dims="1" decoding="async" class="alignright size-thumbnail wp-image-1672" src="https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/05/iterm.png?resize=150%2C150&#038;ssl=1" alt="iTerm" width="150" height="150" srcset="https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/05/iterm.png?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/05/iterm.png?resize=200%2C200&amp;ssl=1 200w, https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/05/iterm.png?zoom=2&amp;resize=150%2C150&amp;ssl=1 300w, https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/05/iterm.png?zoom=3&amp;resize=150%2C150&amp;ssl=1 450w" sizes="(max-width: 150px) 100vw, 150px" />Back in my day, and I’m not that old, programmers were a subset of people who were “really good with computers”. It would be hard to find a programmer who didn’t know how to use the operating system of their choosing far beyond end user level.</p>
<p>These days things are a little different. Now we’re encouraging everyone to code and become a programmer, so a lot of newcomers no longer have many a sleepless night fighting with, say, SuSE CDs, under their belts.</p>
<p>As a result, you run into people who can be somewhat competent within a given development environment, who don’t know how to create a symbolic link or tail a log.</p>
<p>This is not said to disparage newcomers. On the contrary, it’s quite commendable how quickly many young programmers are now able to learn a whole stack of technologies in order to create applications.</p>
<p>It is, however, an impediment to their ability to become productive and successful programmers.</p>
<p>So my advice today is to break free of that limitation by learning the command line. You don’t need to become a wizard, but, as usual, you should get acquainted enough with it that you know how to use the command line to accomplish tasks that are simply not exposed in GUI interfaces.</p>
<p>I’m specifically talking about the Unix-based command line, such as Bash. Technically it can be used on Windows as well, but realistically hardcore Windows programmers might find learning the Windows Powershell to be more useful.</p>
<p>Where to start? There are countless tutorials and books on the subject. I personally recommend Michael Hartl’s <a href="https://programmingzen.com/learnenoughshell">learn enough command line tutorial</a>, as it’s specifically aimed at newer developers.</p>
<p>The post <a href="https://programmingzen.com/tip-4-for-young-programmers/">Tip #4 for Young Programmers: Get Familiar with the Command Line</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmingzen.com/tip-4-for-young-programmers/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1671</post-id>	</item>
		<item>
		<title>Tip #3 for Young Developers: Master an Editor</title>
		<link>https://programmingzen.com/tip-3-for-young-developers/</link>
					<comments>https://programmingzen.com/tip-3-for-young-developers/#comments</comments>
		
		<dc:creator><![CDATA[Antonio Cangiano]]></dc:creator>
		<pubDate>Tue, 10 May 2016 14:00:10 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[Emacs]]></category>
		<category><![CDATA[how to become a programmer]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[programming advice]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tips for young programmers]]></category>
		<category><![CDATA[vim]]></category>
		<guid isPermaLink="false">http://programmingzen.com/?p=1653</guid>

					<description><![CDATA[<p>As a developer, you&#x2019;ll spend a lot of your time writing code. Less than you&#x2019;d think, as we&#x2019;ll see in future tips in the series, but still thousands of hours. It pays dividends to master your code editor. A powerful editor, properly used, will provide a myriad of benefits. Benefits of a code editor The following incomplete list will give you an idea of some of the ways in which an editor can serve you: Speed up the process of writing code by autocompleting parts of the code you write. Highlight and indent your code for readability. Simplify the process </p>
<p>The post <a href="https://programmingzen.com/tip-3-for-young-developers/">Tip #3 for Young Developers: Master an Editor</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>As a developer, you’ll spend a lot of your time writing code. Less than you’d think, as we’ll see in future tips in the series, but still thousands of hours.</p>
<p>It pays dividends to master your code editor. A powerful editor, properly used, will provide a myriad of benefits.</p>
<h3 id="benefitsofacodeeditor">Benefits of a code editor</h3>
<p>The following incomplete list will give you an idea of some of the ways in which an editor can serve you:</p>
<ul>
<li>Speed up the process of writing code by autocompleting parts of the code you write.</li>
<li>Highlight and indent your code for readability.</li>
<li>Simplify the process of refactoring code (e.g., consistently change the name of a variable across your program).</li>
<li>Point out obvious typos.</li>
<li>Easily find code within your project (e.g., through finders or through the ability to jump to definitions).</li>
<li>En mass manipulation of text and code, without having to manually perform changes lines per line (e.g., replacing strings, commenting out large sections of code, etc).</li>
<li>Execute code directly without having to step out of the current window.</li>
<li>Folding your code, so that you can focus on the current method or class, and ignore the rest of your code base.</li>
<li>Visually identify files that have changes from your <a href="/2016/05/03/tip-2-for-young-programmers/">git repo</a>.</li>
</ul>
<p>Honestly, this isn’t even scratching the surface. Just take my word for it, being well acquainted with your editor of choice will eliminate a world of frustration from your coding experience.</p>
<h3 id="choosingaprogrammingeditor">Choosing a programming editor</h3>
<p><img data-recalc-dims="1" loading="lazy" decoding="async" class="alignright size-full wp-image-1654" style="float: right;" src="https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/05/atom-editor.png?resize=256%2C256&#038;ssl=1" alt="Github's Atom editor" width="256" height="256" srcset="https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/05/atom-editor.png?w=256&amp;ssl=1 256w, https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/05/atom-editor.png?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/05/atom-editor.png?resize=200%2C200&amp;ssl=1 200w" sizes="auto, (max-width: 256px) 100vw, 256px" />A natural follow-up question to the previous paragraph would be, “Which programming editor should I use?”. Ask ten programmers and you’ll get at least five different answers. It’s a highly personal choice and people get religious about their editor of choice.</p>
<p>I’m going to share my opinion and you can then find out for yourself what works best for you.</p>
<p>I would divide most editors into five categories:</p>
<ol>
<li>Shell-based text editors. These are historic text editors that include such offerings as such as Vi/Vim and Emacs. <a id="fnref:1" class="footnote" title="see footnote" href="#fn:1">[1]</a> They are extremely powerful and customizable but come at the expense of a high learning curve. <a id="fnref:2" class="footnote" title="see footnote" href="#fn:2">[2]</a></li>
<li>WYSIWYG text editors. Examples of this type of text editor are Notepad++, Atom, and Sublime Text. Much less of a learning curve than something like Vim, but still quite powerful.</li>
<li>Integrated Development Environments (IDE) that are specific to a particular <a href="/2016/04/26/tip-1-for-young-programmers/">development stack</a>. Some will argue that these are not code editors, but they certainly include one, among a whole host of other features, often including a way to visually design your application. Examples of IDEs are Android Studio, XCode (for iOS and Mac OS X apps), and Visual Studio (for .NET applications).</li>
<li>Niche specific editors. For example <a href="https://panic.com/coda/">Coda</a> for front end web design.</li>
<li>Cloud editors that enable you to develop directly from your browser. One example of this sort of editor and development environment is <a href="https://c9.io/">Cloud9</a>.</li>
</ol>
<p>Any editor will do (well, don’t use Microsoft Word), but the choice will be very dependent on the kind of development you intend to do.</p>
<p>For example, if you plan to develop for the web:</p>
<ul>
<li>Learn the basics of Vim or Emacs for when you are remotely shelled into a Linux / BSD server.</li>
<li>Master Atom or Sublime Text for your main development.</li>
</ul>
<p>Conversely, if you plan to develop mobile apps:</p>
<ul>
<li>Learn the basics of Atom or Sublime Text for incidental file editing.</li>
<li>Master your app platform IDE (e.g., Android Studio, XCode, Xamarin).</li>
</ul>
<p>In general, I would recommend that you learn the basics of Vim so that you can quickly change files when connected to a remote server via the shell. <a id="fnref:3" class="footnote" title="see footnote" href="#fn:3">[3]</a></p>
<p>Vim or one of its variants is almost always installed on Linux/Unix servers already or can be easily installed if you have admin rights.</p>
<p>If you love it enough to master it, you might even want to stick with it as your main code editor. Many developers do.</p>
<p>Regardless of what you choose or do, spend the time to become proficient in the tool you decide to use to edit your code (including reading a book on the subject if your editor or IDE is quite advanced).</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">GUI versions of these editors have been developed. Generally speaking, they don’t make the editors all that much easier to learn. <a class="reversefootnote" title="return to article" href="#fnref:1"> ^</a></li>
<li id="fn:2">Technically, there are shell-based text editors that are easy to use, but they’re not as powerful as Vim or Emacs. Nano is one of them. <a class="reversefootnote" title="return to article" href="#fnref:2"> ^</a></li>
<li id="fn:3">Obviously, if you operate in the Windows world, this doesn’t apply to you. <a class="reversefootnote" title="return to article" href="#fnref:3"> ^</a></li>
</ol>
</div>
<p>The post <a href="https://programmingzen.com/tip-3-for-young-developers/">Tip #3 for Young Developers: Master an Editor</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmingzen.com/tip-3-for-young-developers/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1653</post-id>	</item>
		<item>
		<title>Tip #2 for Young Programmers: Learn Revision Control</title>
		<link>https://programmingzen.com/tip-2-for-young-programmers/</link>
					<comments>https://programmingzen.com/tip-2-for-young-programmers/#comments</comments>
		
		<dc:creator><![CDATA[Antonio Cangiano]]></dc:creator>
		<pubDate>Tue, 03 May 2016 14:00:27 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[how to become a programmer]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[programming advice]]></category>
		<category><![CDATA[revision control]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tips for young programmers]]></category>
		<category><![CDATA[version control]]></category>
		<guid isPermaLink="false">http://programmingzen.com/?p=1650</guid>

					<description><![CDATA[<p>A surprising amount of people in our profession are&#xA0;not familiar with revision control software. In the world of computer software engineering, revision control is any kind of practice that tracks and provides control over changes to source code. Software developers sometimes use revision control software to maintain documentation and configuration files as well as source code. &#x2014; Wikipedia Over the past ten years, the growing prominence of open source software has helped to make several best practices far more established, but it&#x2019;s still all too common to encounter developers who are not familiar with revision/version control software such as Git, </p>
<p>The post <a href="https://programmingzen.com/tip-2-for-young-programmers/">Tip #2 for Young Programmers: Learn Revision Control</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>A surprising amount of people in our profession are not familiar with revision control software.</p>
<blockquote><p>In the world of computer software engineering, revision control is any kind of practice that tracks and provides control over changes to source code. Software developers sometimes use revision control software to maintain documentation and configuration files as well as source code. — <a href="https://en.wikipedia.org/wiki/Version_control" target="_blank">Wikipedia</a></p></blockquote>
<p>Over the past ten years, the growing prominence of open source software has helped to make several best practices far more established, but it’s still all too common to encounter developers who are not familiar with revision/version control software such as Git, Mercurial, or Apache Subversion (SVN).</p>
<p>Understandably, this lack of knowledge is much more noticeable among young developers and students.</p>
<p>Let me be absolutely clear about this: there is no software development today without revision control. Anything non-trivial will require that you use revision control, whether developing in a large team, a startup, or even on your own.</p>
<p><img data-recalc-dims="1" loading="lazy" decoding="async" style="float: right;" class="alignright size-medium wp-image-1651" src="https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/05/git-logo.png?resize=300%2C125&#038;ssl=1" alt="Git logo" width="300" height="125" srcset="https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/05/git-logo.png?resize=300%2C125&amp;ssl=1 300w, https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/05/git-logo.png?resize=768%2C321&amp;ssl=1 768w, https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/05/git-logo.png?w=910&amp;ssl=1 910w" sizes="auto, (max-width: 300px) 100vw, 300px" />If you’re an aspiring developer, your career in our field will be enhanced by studying Git. Why Git specifically? It provides several advantages over SVN (mostly due to its distributed nature), and it’s more popular than the also excellent Mercurial.</p>
<p>It’s worth noting that twelve years ago I would have recommended that you learn SVN. Things change, and it’s possible that in another ten or fifteen years, Git will no longer be the reigning king in this arena.</p>
<p>I’m operating, however, under the fair assumption that you want to work today or in the near future. If so, learn Git. <a id="fnref:1" class="footnote" title="see footnote" href="#fn:1">[1]</a></p>
<p>Bear in mind that you don’t need to become an expert in what is a fairly complex system. Just master the basics, so that you’re competent enough to resolve most common situations and collaborate with fellow developers in your team.</p>
<p>Learn how to create a repository, clone it, pull, add, delete, commit, push, create and merge branches, diff files, revert changes, and so on. Basic stuff you’ll do day in and day out when changing code.</p>
<p>It won’t take you more than a couple of weeks of practice to really nail the fundamentals.</p>
<p>Another couple of related suggestions:</p>
<ol>
<li>Add Git to your resume. <a id="fnref:2" class="footnote" title="see footnote" href="#fn:2">[2]</a></li>
<li>You’ll need a place to host your Git repositories. Sign up with <a href="https://github.com">Github</a> <a id="fnref:3" class="footnote" title="see footnote" href="#fn:3">[3]</a> (and if you want a private repository for free,<a href="https://BitBucket.com">BitBucket</a>). Even if you’re not at a point where you can commit code to your repository, you can still practice Git by changing and pushing text files to it.</li>
</ol>
<p>To learn the basics of Git I recommend that you use these two resources:</p>
<ol>
<li><a href="https://try.github.io/levels/1/challenges/1">Try Git</a>.</li>
<li><a href="https://try.github.io/levels/1/challenges/1">https://www.learnenough.com/git-tutorial</a> by Michael Hartl</li>
</ol>
<p>They should get you well on your way to Git productivity.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">The principles of how revision control software works remain the same, even if a different solution were to show up on the market at a later date. <a href="#fnref:1"> ^</a></li>
<li id="fn:2">While interviewers will just assume that you know Git, placing this skill on your resume, especially if you’re a student or inexperienced developer, will clear up any doubts they may have. <a class="reversefootnote" title="return to article" href="#fnref:2"> ^</a></li>
<li id="fn:3">If you have a Github profile that you use to contribute to open source, make sure that it is listed on your resume, too. Watch for more on this specific point in a future post. <a class="reversefootnote" title="return to article" href="#fnref:3"> ^</a></li>
</ol>
</div>
<p>The post <a href="https://programmingzen.com/tip-2-for-young-programmers/">Tip #2 for Young Programmers: Learn Revision Control</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmingzen.com/tip-2-for-young-programmers/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1650</post-id>	</item>
		<item>
		<title>Tip #1 for Young Programmers: Specialize in Something</title>
		<link>https://programmingzen.com/tip-1-for-young-programmers/</link>
					<comments>https://programmingzen.com/tip-1-for-young-programmers/#comments</comments>
		
		<dc:creator><![CDATA[Antonio Cangiano]]></dc:creator>
		<pubDate>Tue, 26 Apr 2016 15:13:33 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[how to become a programmer]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[programming advice]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tips for young programmers]]></category>
		<guid isPermaLink="false">http://programmingzen.com/?p=1647</guid>

					<description><![CDATA[<p>Over the years, I&#x2019;ve toyed with the idea of writing a series of posts aimed at young programmers.  My advice will be aimed at aspiring programmers, students, and programmers who are just starting out. I&#x2019;m going to skip the part in which I motivate you by telling you why learning to code is a great idea and akin to acquiring a super power. In this series, I&#x2019;m just going to assume that you&#x2019;re interested and highly motivated in becoming a programmer. If you&#x2019;re not, find your &#x201C;why&#x201D; first. The why is more important than the how and you&#x2019;re going </p>
<p>The post <a href="https://programmingzen.com/tip-1-for-young-programmers/">Tip #1 for Young Programmers: Specialize in Something</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Over the years, I’ve toyed with the idea of writing a series of posts aimed at young programmers. <a id="fnref:1" class="footnote" title="see footnote" href="#fn:1">[1]</a></p>
<p>My advice will be aimed at aspiring programmers, students, and programmers who are just starting out.<a id="fnref:2" class="footnote" title="see footnote" href="#fn:2">[2]</a></p>
<p>I’m going to skip the part in which I motivate you by telling you why learning to code is a great idea and akin to <a href="https://programmingzen.com/2011/03/21/programming-is-a-super-power/">acquiring a super power</a>.</p>
<p>In this series, I’m just going to assume that you’re interested and highly motivated in becoming a programmer. If you’re not, find your “why” first. The why is more important than the how and you’re going to need both in order to succeed.</p>
<p>My tips are going to be presented in a more or less random fashion, as I don’t have a pre-arranged list that I’m working from. I’m certain that I’ll come up with more as we go along.</p>
<p>I’m going to number them here nevertheless so that it’s easier to reference them in discussions.</p>
<h3 id="tip1:specializeinsomething">Tip #1: Specialize in something</h3>
<p>Last year I interviewed over 100 candidates for IBM.<a id="fnref:3" class="footnote" title="see footnote" href="#fn:3">[3]</a> Most candidates were students from elite universities and were by all accounts, impressive young people.</p>
<p>University had opened them up to a wide variety of topics in computer science. The logic behind such an approach is sound. Syllabuses are intentionally designed to prepare students to think like a computer scientist, and to expose them to as much computer science as they can cram into four years.</p>
<p>The idea is to show students what’s out there so that they can then decide what interests them so that they might pursue further specialization academically or on the job.</p>
<p>The downside of this approach is that unless you do independent work in your spare time, you might graduate with very little code under your belt.</p>
<p>More importantly, you’ll simply be a bundle of potential.<a id="fnref:4" class="footnote" title="see footnote" href="#fn:4">[4]</a> You could specialize in anything you want to. You could become a good programmer, but you haven’t likely reached that point in either case yet.</p>
<p>There are certainly companies willing to hire you on the basis of that potential. I mean, you graduate from an ivy league school, with top grades, and naturally there will be big companies who are interested in you.</p>
<p>To widen your job prospectives, however, I suggest that you specialize on your own.</p>
<p>The market will pay you for the value you bring to it.<a id="fnref:5" class="footnote" title="see footnote" href="#fn:5">[5]</a> This is true whether you are an employee, freelancer, or opt to launch your own startup.</p>
<p>This is why I fully respected, appreciated, and even hired candidates with plenty of potential and not much experience. My favorite candidates, though, remained those who independently developed a keen interest in a particular area of the information technology world, and learned as much as they could in parallel to their more formal studies.</p>
<p>This tip could very be easily phrased as, “Be useful at something”. If I hire you to do something, it really helps if, on top of having the potential, you also have a degree of experience and expertise in that something, that will aid us in developing your skills further.</p>
<p>To date, there are still students around the world who graduate and come to the market with very little knowledge regarding things like the command line, any editor that isn’t an IDE, who have no idea what git is, and whose memories of subjects (e.g., web development) they touched upon a couple of years back are often hazy at best.</p>
<p>Whether you’re a student or not, my first tip is, therefore, to become useful at the creation of a particular type of product.</p>
<p>Here are some examples of “stacks” you can specialize in:</p>
<ul>
<li>Learn how to develop Android apps</li>
<li>Learn how to develop iOS apps</li>
<li>Learn how to develop web applications with Rails</li>
<li>Learn how to do data science with Python (or R)</li>
<li>Learn how to hack hardware</li>
</ul>
<p>No matter what you choose, try to become experienced enough so that you have an essential understanding of the lingo, best practices, and challenges of that particular type of development.</p>
<p>Once you’ve determined the type of software you want to build, it becomes much easier to focus your efforts towards what needs to be learned, what books should be read, and what code you need to write.</p>
<p>Want to become a web app developer? Learn HTML, CSS, JavaScript, Ruby, and the Ruby on Rails web framework, for example. Then start creating projects by first following along with <a href="https://www.railstutorial.org/">tutorials</a>, then on your own.</p>
<p>Want to become an Android developer? Learn Java, then how Android apps are built (you’ll have to become well acquainted with Android Studio and the SDK).</p>
<p>Speaking of Android, I’m particularly reminded of one of the best performing students from my <a href="https://programmingzen.com/2015/07/03/on-assignment-in-san-francisco-for-ibm-leading-to-africa/">LEADing to Africa</a> summer internship in San Francisco.</p>
<p><div id="attachment_1649" style="width: 610px" class="wp-caption aligncenter"><img data-recalc-dims="1" loading="lazy" decoding="async" aria-describedby="caption-attachment-1649" class="size-full wp-image-1649" src="https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/04/my-l2a-summer-interns.jpg?resize=600%2C400&#038;ssl=1" alt="My L2A summer interns" width="600" height="400" srcset="https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/04/my-l2a-summer-interns.jpg?w=600&amp;ssl=1 600w, https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/04/my-l2a-summer-interns.jpg?resize=300%2C200&amp;ssl=1 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /><p id="caption-attachment-1649" class="wp-caption-text">My L2A summer interns</p></div></p>
<p>Not only he had a comparable foundation in computer science to that of other students I&#8217;ve interviewed, but he had also taken the time to independently learn enough Android to be “useful” (or dangerous, depending on who you ask :)) on that front.</p>
<p>You could ask him to create a fairly complex Android app, and he’d know how to approach it and make it happen in a reasonable timeframe. That’s adding value to the market.</p>
<p>Be like that student. Be a mile wide, and an inch deep, but specialize enough in something to be useful.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">I’m not sure why I didn’t commit to it before now. Perhaps, it was because I expected the subjective nature of my advice to elicit the wrong kind of response among fellow programmers (we are after all an unabashedly opinionated bunch). I realized however that there is more value in providing the advice, even if some will disagree with it, then provide no guidance at all. Yes, others have written about this topic. <a href="https://programmingzen.com/recommends/?020161622X">Entire</a> <a href="https://programmingzen.com/recommends/?1934356344">books</a> in fact. But this is my take on it, and it has served me (and those who I mentor) well so far. <a class="reversefootnote" title="return to article" href="#fnref:1"> ^</a></li>
<li id="fn:2">It’s more about experience than age. If you are 60 and only now getting started with programming, this series should help. It’s never too late. <a class="reversefootnote" title="return to article" href="#fnref:2"> ^</a></li>
<li id="fn:3">We ended up hiring a couple of dozens of them (the majority, as interns). <a class="reversefootnote" title="return to article" href="#fnref:3"> ^</a></li>
<li id="fn:4">Hopefully, you learned how to learn; that’s an invaluable skill. <a class="reversefootnote" title="return to article" href="#fnref:4"> ^</a></li>
<li id="fn:5">Money is really a score of the value you’ve created and captured. <a class="reversefootnote" title="return to article" href="#fnref:5"> ^</a></li>
</ol>
</div>
<p>The post <a href="https://programmingzen.com/tip-1-for-young-programmers/">Tip #1 for Young Programmers: Specialize in Something</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmingzen.com/tip-1-for-young-programmers/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1647</post-id>	</item>
	</channel>
</rss>
