<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Michael Harding</title>
    <description>The latest articles on DEV Community by Michael Harding (@redoxeon).</description>
    <link>https://dev.to/redoxeon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2205%2FgM7pbalI.jpg</url>
      <title>DEV Community: Michael Harding</title>
      <link>https://dev.to/redoxeon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/redoxeon"/>
    <language>en</language>
    <item>
      <title>A Couple Tidbits From My New Favorite College Professor</title>
      <dc:creator>Michael Harding</dc:creator>
      <pubDate>Tue, 01 Oct 2019 22:30:08 +0000</pubDate>
      <link>https://dev.to/redoxeon/a-couple-tidbits-from-my-new-favorite-college-professor-3cl9</link>
      <guid>https://dev.to/redoxeon/a-couple-tidbits-from-my-new-favorite-college-professor-3cl9</guid>
      <description>&lt;p&gt;This semester at Utah Valley University, I'm taking a class called "Analysis of Programming Languages" from Dr. Charles Knutson (&lt;a href="https://www.youtube.com/channel/UCOL1yndN1tJtgpCbBduRqLw"&gt;check out his YouTube channel&lt;/a&gt;). He's by far the best professor I've had here so far while pursuing my CS degree. Part of what makes him so great for me is that he loves programming languages, which gave me more motivation to learn new things about Rust and report back after class to him about cool things I learned. Mostly because I finally had someone IRL who cares enough about programming languages to actually get the hype that I have for it.&lt;/p&gt;

&lt;p&gt;He has also been really good at explaining paradigm concepts. I feel like I've known about these concepts to some degree, but in a way where I didn't think about it. These ideas were always just under the surface for me, like I'd heard of Object Oriented and Functional programming, but I didn't realize how deep those ideas ran. I also didn't know about how iterative programming is not directly a part of object oriented programming, but it's usually included. And, there were things I'd never heard about before, like logical programming (for example, with Prolog).&lt;/p&gt;

&lt;p&gt;Because I've felt like he's so good at explaining things for me, I thought I'd share some of the things I've learned here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NIJltEsW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://i.makeagif.com/media/10-01-2019/8inc5t.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NIJltEsW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://i.makeagif.com/media/10-01-2019/8inc5t.gif" alt="Jacksfilms &amp;quot;Let's just jump into it!&amp;quot;" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  "Language Partisans are Generally Bad"
&lt;/h2&gt;

&lt;p&gt;Essentially what this means is that treating any language as the "one true religion" leads you to make poor decisions and be stuck in one way of doing things. It's like going into your toolbox and it only having dozens of flat-head screwdrivers because you figured out how to do everything you want to do with it, even when a hammer or wrench would be a significantly better choice.&lt;/p&gt;

&lt;p&gt;This isn't to say that having a favorite language is bad. My favorite language to program in is Rust, but that doesn't mean I'm going to try and make everything in Rust when there is a language out there for the job that doesn't suck and is better suited to the use case.&lt;/p&gt;

&lt;p&gt;One way Dr. K illustrated this is by showing the class a simple factorial program. In C, it works fine, it was a run of the mill factorial program. Then he showed us how to do it in SML, looked great, it was functional, and looked nice. Then he showed us how to calculate a factorial in Prolog. That language apparently isn't meant for that kind of program (at least the way he showed us). The takeaway for this was that just because you &lt;em&gt;can&lt;/em&gt; do something in a language doesn't mean you &lt;em&gt;should&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/mCClSS6xbi8us/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/mCClSS6xbi8us/giphy.gif" alt="Jurassic Park just because you can, doesn't mean you should" width="245" height="152"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  "Functional Programming is More Than Just Recursion"
&lt;/h2&gt;

&lt;p&gt;This was a really fun one that we talked about. Recursion is definitely a part of functional programming, and the best way I remember Dr. K explaining it is something like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Let's count the people in the class. Our function, which is me, goes to this desk and asks "How many people are in the class?" and they say, "Me plus everyone else" and then they turn around, and asks the next student the same question, and they get the same response. This will continue until the end, and then when the last person turns around, they'll see no one there. &lt;code&gt;everyone_else&lt;/code&gt; evaluates to 0, so the last student comes back and answers "1 + &lt;code&gt;everyone_else&lt;/code&gt; = 0" which is 1. then it goes back up with each student replying to the next one up the line with "1 + &lt;code&gt;everyone_else&lt;/code&gt;" and we get the actual number of the students in the class.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, Functional programming isn't limited to this. It comes with other nice features, but it's more of a philosophy than it is a set of language features. It's more of the idea that everything is an expression. Pattern matching is usually an expression, recursion is a kind of expression. Basically, the things that go into your expression are things that need to be evaluated and solved more like a math problem than like an imperative program.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;That's all I've got for now. Midterms are coming up soon, so I'll probably have more to share by the end of the semester. I definitely am not avoiding studying and homework by writing this.&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How should I go about setting myself up for my "dream job" at Mozilla?</title>
      <dc:creator>Michael Harding</dc:creator>
      <pubDate>Thu, 20 Jun 2019 17:46:02 +0000</pubDate>
      <link>https://dev.to/redoxeon/how-should-i-go-about-setting-myself-up-for-my-dream-job-at-mozilla-4hdf</link>
      <guid>https://dev.to/redoxeon/how-should-i-go-about-setting-myself-up-for-my-dream-job-at-mozilla-4hdf</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;Background/Lead Up&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I've got about 1.5 years left at university, so I wouldn't be applying for a position for a bit anyways, but I figure it'd be better to prepare for my dream job now rather than when I graduate.&lt;/p&gt;

&lt;p&gt;I've been doing some research about working at Mozilla, I've come across some hacker news and quora threads about it, that seems to confirm that working there could likely be a dream job of mine. &lt;/p&gt;

&lt;p&gt;What I'm not sure about is how I need to go about planning for and getting the kind of job that I want. I'd love to work with either Firefox, Servo, or Rust directly, but I'm not sure which location to look for on the listings page or if it doesn't matter too much? It also seems that they're really good with remote work.&lt;/p&gt;

&lt;p&gt;I'm working on getting my bachelor's degree in computer science right now, and have been considering going for my masters as well, especially if it'd help me get a foot in the door. &lt;/p&gt;

&lt;p&gt;I'm trying to learn Rust in my free time, and so far it's my favorite language, which is one of the things that got me looking into Mozilla (and yes, I know there's other places that use Rust, but I really like the feeling of altruism that Mozilla puts off). &lt;/p&gt;

&lt;p&gt;I've been chipping away at the Rust track on &lt;a href="https://exercism.io/tracks/rust" rel="noopener noreferrer"&gt;exercism.io&lt;/a&gt;, &lt;a href="https://doc.rust-lang.org/book/index.html" rel="noopener noreferrer"&gt;reading the documentation&lt;/a&gt;, and &lt;a href="http://shop.oreilly.com/product/0636920040385.do" rel="noopener noreferrer"&gt;the book published by O'Reilly&lt;/a&gt;, as well as trying out a few personal projects with it.&lt;/p&gt;

&lt;p&gt;Once I feel confident with the language, I've got some open source projects that I am keen on contributing to, like Smithay (see below), that look fun and would also give some stuff I can show my abilities with. I could probably also start trying to contribute to Firefox, Servo, and Rust to get more familiar with the projects and improve my skills.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Smithay" rel="noopener noreferrer"&gt;
        Smithay
      &lt;/a&gt; / &lt;a href="https://github.com/Smithay/smithay" rel="noopener noreferrer"&gt;
        smithay
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A smithy for rusty wayland compositors
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/20758186/303772811-7a84ab10-e229-4823-bad8-9c647546407b.svg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg0OTEzMTMsIm5iZiI6MTcyODQ5MTAxMywicGF0aCI6Ii8yMDc1ODE4Ni8zMDM3NzI4MTEtN2E4NGFiMTAtZTIyOS00ODIzLWJhZDgtOWM2NDc1NDY0MDdiLnN2Zz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMDklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDA5VDE2MjMzM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE0NDMyNGIxYjlhNzgyZTg0ODcwMjhmNzVhZWRlNmRiMTU3YTE1NzhiZTVlNWFhNWM0NDFkOWUyYjQ2Nzc2ZWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.OGxinu-QJtOMEM5s_aTt2OQpyYVA2927Q3kh_8mkzjA"&gt;&lt;img width="25%" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F20758186%2F303772811-7a84ab10-e229-4823-bad8-9c647546407b.svg%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg0OTEzMTMsIm5iZiI6MTcyODQ5MTAxMywicGF0aCI6Ii8yMDc1ODE4Ni8zMDM3NzI4MTEtN2E4NGFiMTAtZTIyOS00ODIzLWJhZDgtOWM2NDc1NDY0MDdiLnN2Zz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMDklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDA5VDE2MjMzM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE0NDMyNGIxYjlhNzgyZTg0ODcwMjhmNzVhZWRlNmRiMTU3YTE1NzhiZTVlNWFhNWM0NDFkOWUyYjQ2Nzc2ZWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.OGxinu-QJtOMEM5s_aTt2OQpyYVA2927Q3kh_8mkzjA"&gt;&lt;/a&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Smithay&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://crates.io/crates/smithay" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1172d1dc542b92710e7ae3dac4f592ba7a1040fa9041849f4916108e9ad602f3/68747470733a2f2f696d672e736869656c64732e696f2f6372617465732f762f736d69746861792e737667" alt="Crates.io"&gt;&lt;/a&gt;
&lt;a href="https://docs.rs/smithay" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/80012f227392101f2f0a45a195bd5044f7888dce7eb2f552d1f41ababdd75799/68747470733a2f2f646f63732e72732f736d69746861792f62616467652e737667" alt="docs.rs"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Smithay/smithay/actions" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/Smithay/smithay/workflows/Continuous%20Integration/badge.svg" alt="Build Status"&gt;&lt;/a&gt;
&lt;a href="https://matrix.to/#/#smithay:matrix.org" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6ed9f5eac664298bf3ce45ad1fc97498aec1b98c6ab1b96679a6f466c294771c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2535426d2535442d253233736d69746861792533416d61747269782e6f72672d626c75652e737667" alt="Join the chat on matrix at #smithay:matrix.org"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b12cb324ceb29cae161a8b3d177f8cb51fcaa3bb654ea0feebbfa653e78a192e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4952432d253233536d69746861792d626c75652e737667"&gt;&lt;img src="https://camo.githubusercontent.com/b12cb324ceb29cae161a8b3d177f8cb51fcaa3bb654ea0feebbfa653e78a192e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4952432d253233536d69746861792d626c75652e737667" alt="Join the chat via bridge on #smithay on libera.chat"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A smithy for rusty wayland compositors&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Goals&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Smithay aims to provide building blocks to create wayland compositors in Rust. While not
being a full-blown compositor, it'll provide objects and interfaces implementing common
functionalities that pretty much any compositor will need, in a generic fashion.&lt;/p&gt;
&lt;p&gt;It supports the &lt;a href="https://gitlab.freedesktop.org/wayland/wayland" rel="nofollow noopener noreferrer"&gt;core Wayland protocols&lt;/a&gt;, the official &lt;a href="https://gitlab.freedesktop.org/wayland/wayland-protocols" rel="nofollow noopener noreferrer"&gt;protocol extensions&lt;/a&gt;, and &lt;em&gt;some&lt;/em&gt; external extensions, such as those made by and for &lt;a href="https://gitlab.freedesktop.org/wlroots/wlr-protocols" rel="nofollow noopener noreferrer"&gt;wlroots&lt;/a&gt; and &lt;a href="https://invent.kde.org/libraries/plasma-wayland-protocols" rel="nofollow noopener noreferrer"&gt;KDE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Also:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documented:&lt;/strong&gt; Smithay strives to maintain a clear and detailed documentation of its API and its
functionalities. Compiled documentations are available on &lt;a href="https://docs.rs/smithay" rel="nofollow noopener noreferrer"&gt;docs.rs&lt;/a&gt; for released
versions, and &lt;a href="https://smithay.github.io/smithay" rel="nofollow noopener noreferrer"&gt;here&lt;/a&gt; for the master branch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety:&lt;/strong&gt; Smithay will target to be safe to use, because Rust.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modularity:&lt;/strong&gt; Smithay is not a framework, and will not be constraining. If there is a
part you don't want to use, you should not be forced to use it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-level:&lt;/strong&gt; You should be able to not…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Smithay/smithay" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;TL;DR&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Working at Mozilla might be my "Dream Job" from what I've read on internet comments&lt;/li&gt;
&lt;li&gt;Want to work on Firefox, Servo, or Rust itself (could probably start now since they're open source?)&lt;/li&gt;
&lt;li&gt;I'm getting my bachelor's in CS soon, and maybe masters if it'd help, plus the classes look pretty fun&lt;/li&gt;
&lt;li&gt;Learning Rust in free time and trying to get into contributing to OSS as well&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Actual Questions&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Do only certain offices work on the projects I want to do? (Like, is San Fransisco the main place for the projects I want to work on, or would it be likely that I could get in fresh out of college for a remote job on one of those projects?)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Is everything I'm doing/planning to do necessary for getting a job at Mozilla?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What else do I need to be doing?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>help</category>
      <category>rust</category>
      <category>career</category>
    </item>
  </channel>
</rss>
