This post was written in 2 hours, and is very “stream/speed of thought” (read “rough”), but I wanted to share it enjoy…
When I meet other WebDevs, one of the questions I am often asked, after showing them a web project, “What Frameworks/CMS do you use for the backend?” When I say, “None.” Every time I say that, the look I receive is often multifaceted. The look simultaneously says: he’s nuts (Why the hell would any Dev in their right mind do that?), that’s a ton of work, followed by, the realization, “OMG this guy wrote all this stuff from scratch.” The question, “Why?” often comes out. The tone ranges from bewilderment to indignation depending on how set a dev is in their ways and their level of experience.
I tell them the truth, it was once a quick and dirt concept that I sketched out and one that is still evolving, also, I wanted to better understand frameworks by making my own customized version,based on this problem I have with current tool limitations. In short, I am making a sketch, and then abstracting it out to see how easily I can adapt a lightweight framework. Also, I had a bad experience with a framework long ago, when I first started profession web development, that makes me wary of relying too much on them.
The problem that remains with the frameworks is it also abstracts the learning experience and truly understanding programming by removing the need to understand the concepts that encourage using best practices. These things are only learned when you run into problems or you read up on them. Often direct experience is the best teacher, so books only go so far. To truly “get it,” you have to directly experience it. And once you get it, you could write a book for every facet of it, and you realize that books only scratch the surface of how important some things are.
Having an abstraction layer between you and the data to take care of any problems, while great in terms of development speed, does you no good as far as advancing your understanding of the considerations one must make in systems design because some people have already thought about it long and hard, and made the fix for you. Since this is my own project, non-commercial in approach, there is no deadline and I can play with ideas, break things, and fix them at will. Every time I add a feature, I can look for a better technique or see yet another pattern emerge that I should integrate into my own lightweight classes.
Where I’m coming from
Last century, there were no robust frameworks, and in that space I learned database design in that pure vacuum. I built a simple relational DB as part of my job to track report meta data, and would occasionally run into redundancy, because my DB design was not normalized. Although, at the time, I did not know what normalization was. I also assumed only one of a type would ever be used, So I painted myself into a corner when sudden 2 different assets acted on one entry.
So, rather than live with this constant niggling feeling that there was a better way, and having to winch whenever I had to shoe horn something in, I looked up database design, and started reading up. I am very grateful I did: suddenly database design opened my eyes to data and structure in general: everything knowable could be in a database. Sure I suffered from “everything is a nail and DBs are my hammer” syndrome for a bit. But after that passed, I still saw the relevance of understanding the data structure. By studying database design, I understood something much more basic: data structures in both the digital world that are formalized and standardized and the analog world. I did not budget for understanding the real world’s structure. It was — in a sense — Nirvana, it was a spiritual awakening, or like a good hit of acid, if that’s your thing. In a matter of weeks, my mind evolved.
But did I really understand “it?” Well the simple answer is yes and no. I realized my understanding of things was only as good as the amount of information I had about the subject. So, I decided to gather more info about things so I could comprehend more things and see the patterns in both the digital and analog world. Unfortunately, this had a side effect on my consciousness: for the longest time I could not shut it off. My brain was this hyperactive thing constantly looking in multiple dimensions for the overt and underlying pattern, meaning and relationships to everything. To get a sense of this, try opening a web page, then licking every link and reading 2 layer deep for each page that is your subject.
So, that is where I was when I decided to pursue development. I still spend a least a quarter of my time trying to learn new techniques. Either I am reading up or I am trying to make things new to me. I have a long way to go before I begin to consider myself truly fluent in the language that describes data. So, rather than rely on the frameworks and abstracting my understanding, I am learning by doing.
I do not think I will ever stop this exploration. I enjoy learning things. In fact when I was 15 I decided to learn at least 1 new thing a year. For the first 10 years, I did: juggling, guitar, basic electronics, music theory, C, layout, amateur radio operations, color theory, DJing, typography, html (v3), music composition, Database design, CSS(v1), PERL, PHP4… the list goes on. I am now “stuck” in the field of computing because it is limitless. [BTW, I know current version of HTML, CSS and PHP in case you are wondering.] Also, I am a horrible musician, thanks to never practicing regularly or at all in the last few years. But I still love music, art and entertainment despite my current focus. Hopefully, one day I can give back by writing about what I have learned about the inter-relationships of knowledge.
What I’ve learned (off the top of my head)
As far as I can tell, the more you know, the more you know that you don’t know. Also, being able to strip away facades and describe something plainly is just as valuable as being able to describe something technically, because people fall into 2 categories: those who care, and those who don’t. To make your point with those who don’t care, you have put things in a way where they realize that someone caring about the details is important. The end result is that they are less dismissive of a subject if they have a basic grasp of why it is important.
Oh, and communication is another hammer: everything is communication. Whether the message is thermal radiation of a text to the wife… So, try to make sure you encode the information in a way that is compatible with the receiver. To do that you need to understand how the receiver communicates and learns best. Which leads me to psychology… but that’s another topic (and one where I do not have an authoritative amount of study in. So, I will probably leave that to someone more versed.)
That reminds me of a quote of mine: “expertise of one field does not translate as expertise in other fields, even those that are seemingly closely related.” Or more simply: “Just because someone knows one thing, doesn’t mean they know everything.” But I think I covered that somewhere here….
Okay. Time to get up and start the day, see you App.netizens later! You guys rock. (Search “ADN Social Network” of Duckduckgo in case you have no idea what I am talking about.)