Nothing Magical


“Any sufficiently advanced technology is indistinguishable from magic.”

There’s little I’ve found to be more true than Arthur C. Clarke’s famous quote when it comes to building software.

Left right and center you’re tempted with all sorts of magic. Frameworks and languages promise you thorough solutions with very little input on your part. “Trust in me and all your problems will melt away”.

images (2)

When I got interested in JavaScript, there was a burning desire to understand what was happening.

Eschewing the magic of jQuery, I burned myself many times trying to write code that worked in all browsers. I wrote my XMLHTTP requests, pub/sub implementation and eventually a Single Page App using nothing but the things I’d written.

By the time I got around to discovering frameworks, libraries and all the wonders of front-end development, I didn’t need most of it. Nothing was magical.

It may seem like a true waste of time writing my own, knowing there’s code out there that does more than mine, written by smarter people than myself and relied on by bigger, more important sites than I’ve ever worked on.

Why did I bother writing mine? Because it was nothing magical. I didn’t think I was doing anything impressive.

By unintentionally training myself to see building in the browser as nothing magical, I gained the ability to spot high quality tools; what’s worth using and what can be done without.

Today I read a post by a much better (and famous) programmer than myself that captures the same sentiment.

I urge you to read it. He makes the argument for learning taking priority over magic much better than I ever could.

Get New Posts via Email

I don't always post, but when I do, you can get it sent directly to your inbox.

Join 15 other subscribers

  • Adim Ofunne

    I agree with your post and I agree with the guy that wrote the post you linked to. I think advanced developers should know what they are using inside out or make their own. When I was in college I learned Assembly language. I wrote my own screen to keyboard interpreter (as one of my projects) that when i hit the letter “K” on a keyboard it shows up on your screen, this is something that in any language would be one line of code, this program was 200+ lines long cause I was dealing with registers and actual memory on a motherboard

    For several CS projects, we were not allowed to use native data stores in the language, so I have written my own arrays and linked list from scratch many times, and I think i can still do it in my sleep due to how often I have done it. When making Naijalingo and iGbadun, I did not even know that frameworks existed and so Obilo and I built ours from scratch, we didn’t even know what we built was a framework till many years later.

    I have been in the gutter and I cannot lie it has been very valuable, it has saved me hours if not days of work, it has gotten me awesome interviews and jobs with companies and so on. So I owe alot to suffer head, this has been valuable to me because of the path I chose earlier in my life but now I am older and wiser if I was asked to do it again I would do it different, this is because I think I could learn more with less hardship. It might just be my personality but I learned to code not for computer science or the technicality of it, my main attraction to coding is the product. I am a product guy and have been for as long as I remember. I code cause I want to make something that affects lives above all. So when I approach a project, my natural instinct is how can I get this into the hands of people now, how can I affect lives today? Usually the fastest way is using a framework, wether I have mastered it or not.

    Although I agree with both posts, I see a lot of new developers who are just like me, they just want to make something cool but the whole developer ecosystem tells them they are not good enough till they know how to do binary search, or they can move bytes in a register or they know some obscure syntax in their favorite language. I think this path stifles discourages beginners. Most people learn as they fail and then succeed at something, which is easier if you have help (with frameworks). Frameworks like rails have reduced the barrier of entry so much that many people who would have never coded, do today. If you are a good developer, your instincts will guide you in your intermediate level to learn more about your tools and venture to build your own or master what you are using. This is an intermediate and advanced thing, not a beginning step.

    The mediocre or bad programmer get locked into the loop the other author describes, always in search for that holy grail, this is generally cause they really do not understand any programming and frameworks help keep them relevant in a fast moving industry. I 100% agree that mindset is wrong, but I also think the idea the author is passing along is also discouraging to newbies. He says “Do not use a framework till you know you can make it”. How does someone just create things if they need to understand where everything came from first, how can someone experiment if they follow that idea? If you have all the time in the world and coding stuff to help others code is your thing, go ahead and do that, if you want to build a forum for cats, learning about actual coding is a waste of your time. I think a lot of developers need to acknowledge this distinction.

    The summary of what I am saying is this is all well and good but this advice should take into considerations its audience, I do not agree with the anti framework sentiment. I think frameworks have a place and the point the author is making has its own place too. I have always been a use the best tool for the job guy and if for something u need to make your own hammer do that too.

    • Very valid observations.

      The background to this post is how I started using WordPress and how much of a leg up it gave me when it came to building things. There’s much I don’t know about it and I don’t check out its source code (or anyone else’s really, unless I’m patching something).

      My point is there’s nothing wrong with starting out using tools. You don’t know any better and you’ll learn a lot from what they offer.

      Nobody is saying intimate knowledge of whatever language you’re using is a prerequisite for programming.

      The message is if programming is your thing, getting better at it should be an important part of your thought process.

      Nothing will help you get better like trying to understand what tools you’re using.

      I didn’t discover the concept of Ajax myself, nor did I discover pubsub or single page apps.

      I learn by trying to recreate. Some may learn by looking at source code. Whatever your process, the message is learn that these tools aren’t really magical. What they do is isn’t anything you can’t do. That understanding will give you courage to try more things or contribute to open source, because what’s been done isn’t bigger than you.

      • Adim Ofunne

        You know what is interesting. My next post was gonna be called “Whats wrong with magic”. I actually have been formulating it for a week and a half now, hell I have the draft done about how the term “Magical” in the tech community is now met with disdain as if the frameworks did something hidden (even though it is open source), also was pointing out that I find many of the “Magical” frameworks inspiring, some of them give me ideas of cooler ways to execute things than I would have thought. so when I saw the title of your post I was like da fuck? LOL But yeah man I agree, know your tools inside out. Thats the best way to be the great at what you do.

        • Adim Ofunne

          I also was gonna use the quote you started with. This doupleganger shit freaked me out last night. LOL

        • For all our similarities we’re so different: Same topic around the same time, but opposing stands.

          Another big difference is I can’t draft a post. I write it in one sitting, publish then edit it. If I put it aside it will never get out.

  • Pingback: Something Old, Something New - designbymobius()

  • Pingback: ES6 Generators Are Nothing Magical - designbymobius()