[{"data":1,"prerenderedAt":306},["ShallowReactive",2],{"i-lucide:menu":3,"i-lucide:arrow-up-right":8,"i-lucide:moon":10,"i-lucide:sun":12,"i-lucide:rss":14,"i-simple-icons:github":16,"i-simple-icons:linkedin":18,"post-\u002F2011\u002Fopinions-be-a-developer-part-ii":21,"surround-\u002F2011\u002Fopinions-be-a-developer-part-ii":293,"i-lucide:arrow-left":302,"i-lucide:arrow-right":304},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 5h16M4 12h16M4 19h16\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M7 7h10v10M7 17L17 7\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":13},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"4\"\u002F>\u003Cpath d=\"M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":15},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M4 11a9 9 0 0 1 9 9M4 4a16 16 0 0 1 16 16\"\u002F>\u003Ccircle cx=\"5\" cy=\"19\" r=\"1\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":17},"\u003Cpath fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":19,"hidden":20},"\u003Cpath fill=\"currentColor\" d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037c-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85c3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.06 2.06 0 0 1-2.063-2.065a2.064 2.064 0 1 1 2.063 2.065m1.782 13.019H3.555V9h3.564zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0z\"\u002F>",true,{"id":22,"title":23,"body":24,"category":254,"comments":255,"date":271,"description":272,"excerpt":273,"extension":274,"image":273,"meta":275,"navigation":20,"path":276,"readingTime":277,"seo":278,"stem":279,"subtitle":280,"tags":281,"wordCount":291,"__hash__":292},"posts\u002F2011\u002Fopinions-be-a-developer-part-ii.md","Opinions: Be a Developer, Not a Programmer",{"type":25,"value":26,"toc":236},"minimark",[27,37,42,45,48,56,61,64,67,70,73,76,80,83,86,89,92,95,98,102,105,108,111,115,118,121,127,130,133,138,141,144,147,150,155,158,162,165,168,171,175,178,182,185,188,191,195,198,201,204,207,211,214,217,220,223,227,230,233],[28,29,30,31,36],"p",{},"This is a continuation of the previous post, ",[32,33,35],"a",{"href":34},"\u002F2011\u002Fbe-a-developer-not-a-programmer","Be a Developer, Not a Programmer Part I","\".",[38,39,41],"h2",{"id":40},"ando-roots","Ando Roots",[28,43,44],{},"It's true that teachers always try to teach things as they should be... at least the good ones. That's because, as with every learning, we learn things in details that later wear off. If we're told to use design pattern X then there's hope that as years go by, we fall back to design pattern M instead of all the way to A. Also consider that most professors work in the field they teach so they know of the 'real world'... at least in my applied sciences college.",[28,46,47],{},"Even though I haven't done any real agile development before, I don't think it's \"extremely slow\" because in it's heart, Scrum (as an example) is made up of iterations that allow the team quick feedback and the customer control over what to change in the next iteration. So if Twitter invents video chat and FB uses SCRUM, there's hope Facebook's own feature will be out the next week.",[28,49,50,51,55],{},"There are no developers who don't test their own code (or they aren't developers). Any real testing however involves writing automated test cases. Which is notoriously difficult when you work with a person who thinks it's pointless and a waste of time and breaks (my) tests constantly by modifying the code, but not the tests. Do I even dare to dream of version control when \"",[52,53,54],"code",{},"cp folder1 folder2","\" suffices?",[57,58,60],"h3",{"id":59},"framework-restrictions","Framework restrictions",[28,62,63],{},"There ARE restrictive frameworks out there. Some might find the rules comfortable since then it doesn't matter whose code you write\u002Fmodify - you know exactly where to look for something and even if you happen upon an undocumented piece of code, you have a general idea of what's it for.",[28,65,66],{},"On the other hand, there are frameworks that implement a general structure such as how controllers\u002Fmodels are structured and then leave the rest up to you. You can and are encouraged to use the particular conventions of the framework, but you may also deviate and create your own rules. It's the same as with laws: you don't like Estonian, go east - maybe it's just right for your style. In general however, you wouldn't ever want to go all the way to the North Pole where there are no (maybe an exaggeration) rules whatsoever - rules such as \"thou shall not kill\" make life easier.",[28,68,69],{},"I approve of the style of using classes and libraries because that strips away the need to invent a triangular wheel...but on the other hand, doesn't give (for granted) you the separation and all other goodies a truer HMVC approach does.",[28,71,72],{},"My boss and I have long argued over placing functions in classes, his argument being that loading classes takes far more memory than including a function collection. I've never proven it, but my train of thought is that if the rest of the world - including some opinion leaders - do it and succeed in earning their monthly paycheck, it's the way to go.",[28,74,75],{},"What is more, computing power on small-to-medium scale web applications is not an issue anymore. I can allow for some more MB-s of memory on scalable hosting such as the Amazon cloud or Google's own Appengine. And, speaking of the real world again from an (local) Estonian company perspective, most developed application never get such an amount of traffic\u002Fusage that the issue of critical resource depletion comes up.",[57,77,79],{"id":78},"convention-over-configuration","Convention over Configuration",[28,81,82],{},"I disagree with you on the point that complicated tasks should be simplified instead of the simple\u002Fcommon ones. It's far more difficult to guess the particular needs of a complicated task, thus creating the restrictive rules you mentioned. Think for a second: what are the two most common actions a web application does?",[28,84,85],{},"Nope, think some more...",[28,87,88],{},"Yes! The answer is user auth (signup\u002Flogin) and CRUD. If I have Kohana with it's Auth and Formo modules, I can present the user with a working prototype of a password protected memo\u002Ftweet\u002Fwarehouse system within the span of half an hour - that I quite possibly whipped up while (s)he was still going over the details with the company salesman.",[28,90,91],{},"With Frameworks, this kind of a task is trivial. With libraries, it's not: you have to write some code (don't forget your validations!) and HTML forms, instead of creating the database and routing info and leaving the rest up to Convention over Configuration. That's great for prototyping, but also during and after the main development. Adding a new field is as simple as creating the database field and specifying validation rules.",[28,93,94],{},"It's important to go for speed from the start if you're building the next Twitter. It doesn't matter if you're doing a custom-built app for a company of 100 employees. This may be another trap for the impatient ones, too. The client wants results and fast. If none are given, well, there are always other willing parties, especially if you don't do Waterfall, where the contract is \"signed with blood\" ( - P. Leis).",[28,96,97],{},"A word in favor of ditching frameworks tough: you are right that if you indeed work at NASA, you DO reinvent the space shuttle, just so you could have the absolute and total knowledge and control.",[57,99,101],{"id":100},"to-use-a-framework","To use a framework...",[28,103,104],{},"Frameworks are equally important when you're building a front-end for other services, in fact I'd say that's a case where you'd want to use a Framework even more. Why? If you're not doing any complex calculations on the same machine, you have free memory; memory that the framework can use and justify it's existence. I'd say you should pass on the framework when you're building an API. THEN you need all the juice you can get since API-s usually have far bigger loads.",[28,106,107],{},"Speaking of reality (yeah, but we must)... You'd want to use a framework by default, unless special requirements - huge load, knowledge of the future, framework restrictions - point you the other way. You want to develop fast and present the client with a prototype early, so you can get feedback faster, so you can ship a better product. To do that, you use a framework so you don't have to tell the boss that you wrote HTML forms and created validations in the form of a series of if statements for the whole 1st day. You'd also do things the Agile way to adopt to changes fast. And when that doesn't work out, you can always Kanban and be done with it.",[28,109,110],{},"And no, I wouldn't stamp a developer bad just because he's not fast enough. I've seen no scalar attribute by which to grade a developer, with the exception of WTF \u002F minute... and the opinions of developers who have to maintain the other's code in the future.",[57,112,114],{"id":113},"development-a-creative-process","Development - a Creative Process?",[28,116,117],{},"Now comes the part I dread to write, because your last point is the one I disagree with most strongly.",[28,119,120],{},"Writing software IS (with double underlining) a creative process. [big fat period] It's the typical way of thinking for functional programmers who look at the world like this:",[122,123,124],"blockquote",{},[28,125,126],{},"Okay, to solve this problem, I write function X and I can see that function X needs function Y and so I write function Y. Clearly, function Y must calculate the tax return so I have to look up the percentages and just code the function to return the value Z. I don't really fancy writing function Y because I don't like rinse-and-repeat, but I have to do this so I could do the same with function X.",[28,128,129],{},"I'm clearly exaggerating again, but without personal experience, my opinion stands.",[28,131,132],{},"On the other hand, I'm like this:",[122,134,135],{},[28,136,137],{},"Hmm...what an interesting problem! I already see three possible solutions for it. What if I asked the framework to do the calculations for X? Hmm, no, that would expose vulnerability A so I don't do that. What about using an external API? Ahh, damn, that could work for a short while, but I know for a fact the company is going to need B on the next month so I better do this right. Oh! But really, the problem boils down to calculating the tax return rate and I can do this easily by implementing Z! Okay, so it will take 5 minutes longer, but the return value will be far greater than doing X or Y.",[28,139,140],{},"Another exaggeration. But the point is that by thinking things over, by being aware of conventions, of what's happening out there, experimenting and, most importantly, using your own head to seek for solutions - not just going by the book with the rinse-and-repeat method - is so much more than writing software following the user manual or the only “right” way.",[28,142,143],{},"Think of the life of a small town physics professor and his colleague at MIT. They do the exact same thing, but one of them takes and gives far more to the job.",[28,145,146],{},"Code or programming in itself might not be creative in the strict sense of the word, but neither is a blank canvas. It's the idea of the artist that matters. Innovation born of experimentation is what thrives us forward. If you take the act of coding as a mundane task that can never offer you such self-satisfaction as say for an example, an architect seeing his building come to life... what good are you to the society as a whole? I could only see myself as a depressed person forced to write character after character, day after day. None of that when I have the creative freedom to dream up solutions. Then you'll see an excited geek hammering away at the keyboard.",[28,148,149],{},"I'll take your quote",[122,151,152],{},[28,153,154],{},"Software serves creative needs, development it's not creative itself, it's just functional. - K. Vaher",[28,156,157],{},"and use it. So when some of my fellow Developers cross me, I'll tell them to shut it, because they're \"just functional\", like a cogwheel in a big machine called the World.",[57,159,161],{"id":160},"parting-words","Parting words",[28,163,164],{},"It's a passionate topic of discussion. I tried to argument my reasons as best as I could and if it appeared that I only ever argued for the sake of arguing - it's not so.",[28,166,167],{},"There are merits in using no frameworks, there are compromises to be made between idealism and getting things done. Different people have different understandings of what's good and why - and it should be so for if there were no disagreement, we'd be a hive.",[28,169,170],{},"Thank you for being a worthy opponent on the bloody arena of one of the most violent wars since Linux vs. Windows.",[38,172,174],{"id":173},"kristo-vaher","Kristo Vaher",[28,176,177],{},"Alright, for starters, frameworks vs no frameworks is not the bloodiest war since Linux vs Windows. It really is not. I absolutely love web development frameworks. I both like the heavy-handed things like Zend, which I studied when I was a young developer because everybody said it was 'the thing'. I later on loved the speed of Codeigniter and then Kohana, which I think is by far the best framework for website development out there. And I love Wordpress since even a beginner can set up quality website with custom needs there with little problems without sacrificing potential.",[57,179,181],{"id":180},"creativity-before-coding","Creativity Before Coding",[28,183,184],{},"But writing code is not a creative process. You misunderstood my point there. You should never write code out of thin air. You need to have the idea of the system and its components already in your head before writing first lines of code. You should know what is the workflow of registration system, what needs the client has and what the end system has to be able to do while at the same time staying within development budget, which is very restricted in majority of projects I've taken part of.",[28,186,187],{},"The creative process of software development happens before writing a single line of code. Being able to write beautiful functions and classes or having source code that looks so pretty that you'd want to make babies with it is not the goal. A developer has a duty to realize the development plan as well as possible, but 'writing code' itself is not creative. You can solve the same problem multiple ways and since the end user is unable to tell the difference, it's not a creative process since it does not benefit from being one.",[28,189,190],{},"This is the big difference between a software developer and a programmer. Most of the developers that have gone through in my company have been just programmers. They are not creative, they are functional. They know how to solve problems or build modules and they are working on something that has already been designed. Some programmers dabble more into designing the whole system and paying attention to usability, but it is rare. Those that do, dabble into software design, which is indeed a creative process.",[57,192,194],{"id":193},"development-in-reality","Development in Reality",[28,196,197],{},"As for agile development, let's speak again in a few years time when you've tried to implement it in a small company in numerous client projects without wanting to blow your brains out with a shotgun loaded with dynamite. In the end of the day it is all about the budget and agile development costs more time and money 90% of the time. There are projects where this is possible, but very few companies are willing to invest in it and even fewer clients are willing to pay for it. You have to compromise. If you have to test out and confirm every feature as it's being implemented you either have to do multiple projects at the same time or just have a client who is willing to pay a lot of money, which is very rare in Estonia in current economy.",[28,199,200],{},"I totally agree with your idealized vision of software development, but it is vision of software evangelists. In reality it is just not possible. There's not a single system developed that has not compromised bigtime. Facebook is being refactored even today and it is very slow to release features. Twitter refactored large parts of itself last year and is - in general - a really simplistic system. Even Google is known for refactoring (and sometimes breaking) even its own systems and they are known for writing some of the most 'beautiful' code out there. Hacks are nature of software development since getting the feature out in working condition is more important than how good it looks inside. And all of those systems share one very important need for well defined and documented API.",[28,202,203],{},"This returns to the point of if you are making something large, you have to design it without putting much weight on frameworks unless you are able to completely strip it to its bones and only use the essentials that are not hindrance on the end product. In general, if you begin designing something that might have thousands of active users at the same time, you really have to start from the clean sheet and then speed up the process of development by refactoring classes and methods from your pre-existing libraries. It's not the framework that developer uses that makes them valuable, but the tools they have gathered over the years. In my own example, I have an external encrypted hard drive that contains hundreds of code examples, classes and open source packages for any need that might arise without needing me to implement an entire framework.",[28,205,206],{},"Speed and computing power is of critical importance no matter how much computing power you have available. Worst thing that can happen to a system is to become popular and not be able to keep things running. Facebook won the battle of social networking because it implemented gradual releases in different parts of America and then later on in the world, while the big competitor Friendster attempted to bite too much at the same time and suffered with downtimes and slow service. Twitter would never have become what it is today had it suddenly developed problems with performance. While it is true that just buying more computing power could solve that problem, with large systems a more optimized and lean code can save a lot of money.",[57,208,210],{"id":209},"when-to-use-what","When to Use What",[28,212,213],{},"And since API's (which are a must for any public system that isn't just a website or e-shop these days) benefit strongly from being just as lean, frameworks just are not good enough.",[28,215,216],{},"And people speaking of MVC or other software development patterns in a way as if they need a framework to be implemented perhaps have not designed MVC system themselves, because the concept behind MVC is relatively simple and can be set up by less than couple hundred lines of code with all the basics a system might need.",[28,218,219],{},"I strongly recommend frameworks for developing websites and e-shops and simpler info systems and I most certainly recommend studying how frameworks function since that may give better insight into MVC and other patterns than tutorials. But if speed is important you are better off implementing refactored functions and classes and build the system from ground up.",[28,221,222],{},"As a sidenote, in Apple vs Android battles this is also very evident. While Android is a much more flexible system than iOS, iOS implements better native code simply because of being written in Objective-C. iOS app's are simply more smooth and faster. Java is also compiled, but it is quite bloated (and there's a reason why Java frameworks are really not that well known), if not the most bloated system out there.",[57,224,226],{"id":225},"parting-thoughts","Parting Thoughts",[28,228,229],{},"So, to summarize.. There are compromises to both sides, but the choice of going one way or another should depend entirely on the project. Of course once that decision is made, the entire team should work in unison and if project implements a framework, its standards should be followed by the entire team.",[28,231,232],{},"There is no right or wrong answer, but I know that if I am given a choice between two systems that are functionally exactly the same, I will prefer the faster one.",[28,234,235],{},"Still more to come...",{"title":237,"searchDepth":238,"depth":238,"links":239},"",2,[240,248],{"id":40,"depth":238,"text":41,"children":241},[242,244,245,246,247],{"id":59,"depth":243,"text":60},3,{"id":78,"depth":243,"text":79},{"id":100,"depth":243,"text":101},{"id":113,"depth":243,"text":114},{"id":160,"depth":243,"text":161},{"id":173,"depth":238,"text":174,"children":249},[250,251,252,253],{"id":180,"depth":243,"text":181},{"id":193,"depth":243,"text":194},{"id":209,"depth":243,"text":210},{"id":225,"depth":243,"text":226},"Software Development",[256,261,266],{"id":257,"author":258,"author_url":237,"date":259,"content":260},91,"sdogi","2011-10-25 17:00:48 +0300","Not using frameworks and justifying it by saying you can gain more speed\u002Fpower\u002Fwomen this way is actually very common problem that hits young developers.\n\nThis sort of stubbornness is usually caused by the fact that software engineering is difficult and people are slaves to their habits. If somebody learns one programming language\u002Fframework\u002Foperating system they are usually very unlikely to look elsewhere. Specially when these people need to do some project but they have limited time.\n\nSure you can get the job done without using frameworks and justify your choices and say they were the best and what not but often enough when you do objective analysis of the tools used you may find that you weren't using the best ones. Important point is to completely throw your ego and subjectivity generated by experience with certain tools and languages out of the window when doing this analysis.\n\nSaying frameworks are only good for small projects is completely based on such subjectivity.\n\nFirstly assuming that when you use a framework you are limited into doing things in a certain way that framework API forces you to is completely wrong. Frameworks are there to help you DRY and thus do things faster and better. If there are limitations in framework though then what stops you to modify framework code directly? You will be still better off than writing everything from scratch. Usually this is not even required because with most good frameworks you can overload framework classes within your own code base.\n\nAlso if you use a framework what stops you from using optimized non-framework code for parts that require this? If you have been writing software for some time you usually know that when it comes to software speed then there are only quite few places that could be called bottlenecks. It's not like your whole software slows down because you use framework code. Dumping framework to avoid bottlenecks doesn't help but thinking up new design or rewriting critical function to be better optimized usually will. Amusingly enough people who are all about speed and write their software from scratch often enough introduce bottlenecks that wouldn't have happened if they had used a proper framework to build their product.\n\nFrameworks help you to be a better engineer and focus on what is really important. For example your software design(which is a creative process by the way). Who has time to repeat yourself all the time, fix bugs that don't need fixing and most importantly waste time because of bad choice and habits.\n\nIt's ironical Kristo that you mention Twitter and Facebook in your arguments as examples where speed is important.. and I assume where things were written from scratch? Because Twitter was actually written using Ruby on Rails and probably uses bunch of other tools that they haven't written from scratch because they like to concentrate on what makes them different not optimizing stuff that doesn't matter.\n\nFacebook is well known for releasing it's Tornado web server framework. Also they use Hive\u002FHadoop, Scribe, Thrift, Boost C++ framework and probably tons of other stuff. I would dare to say that one of the reasons why Facebook is complete success when it comes to engineering is because they are using all the power they can get from frameworks.\n\nYou can also notice that when there actually isn't a framework for what they need(usually all sorts of concurrent systems) they will develop a framework which is based on some other existing framework. Only then will they proceed with developing something new instead of writing their final product from scratch.\n\nWhen it comes to 99% of the companies though then these days when you want to start building something you usually have lots of frameworks to choose from. So all you have to do is just pick the best one for the job. Obviously this means that you have to spend time on learning the framework but when you do then you can be taken seriously in your niche.\n\nOne very interesting piece of information about frameworks I learned is that people who know more than one or two is usually very scarce. Same probably applies to programming languages, IDE's and operating systems. When people can choose any of these then their first choice is usually by personal taste.\n\nWhat is really bad though is that when we get experienced with our choices then for some reason all want to fight against anything new or competing tools even though they might not even be that bad. It's just that we don't have enough experience with the \"other\" things and when we try to use them it's not as easy. This sadly gets translated to \"other things\" = bad and instead of learning something new and perhaps useful we start a war against it and think up bogus information to back it up.\n\nAlways try to keep an open mind. When choosing something check for facts and honestly not selectively. Tap into other peoples experience but assess these experiences objectively. If somebody says that x is awesome then what does he mean? Is it awesome to mess around, does it maybe just look good or could it be awesome for you too?\n\nOnly thing that matters is results. What if your results suffer because of some past decisions or reluctance to learn thanks to your ego?",{"id":262,"author":174,"author_url":263,"date":264,"content":265},92,"http:\u002F\u002Fwww.waher.net","2011-11-08 20:06:27 +0200","sdogi, thank you for a very detailed response. I do agree with you, I just think you misunderstood my point. It really is not that black and white.\n\nThis is not a framework-vs-reinvent-the-wheel argument. I've developed business critical web-applications for years and I use frameworks whenever I believe it not to hamper my applications performance too much.\n\nBut when it comes to the main, core code, then frameworks do not have to be the starting point, unless you are developing a proof of concept or a prototype. It is bound to be slower and create footprints that will cause performance issues in the long run due to it carrying code that is developed for reasons your application is not intended for.\n\nWhen it comes to 'irony' about me mentioning Twitter and Facebook, then it is interesting indeed. Except that you are a little outdated or you just missed my point. Twitter was, yes, using Ruby on Rails framework for a long time, until performance became an issue. They have now replaced majority of their code with native Scala.\n\nAs for Facebook, Facebook is written on native PHP and without frameworks for the same reason. This includes their HipHop which was intended to get even more out of their performance due to being the most high-traffic website in the world. The rest that you mention, especially Hive\u002FHadoop, Scribe, Thrift and Boost C++ then those are either applications for Apache server or extensions of C++, they have nothing to do with Facebook's native software code and were not at all an issue I was talking about. This would have been more relevant if I had advocated, in any way, against the use of things like PHP or Apache extensions. But that I did not do.\n\nFact remains that a native code that is built only for the specific purpose and needs of the software is always faster than the one built with a framework. Whether doing that is the right call, depends entirely on what the project needs. I do agree completely that writing on top of a framework is often quicker when it comes to development time and often more risk free, of course.\n\nI 'am' using a framework that my team has developed for the past few years, but a framework that is as bare-bones as possible and with as minimal footprint as possible for any new software project. As I said, it is not about whether one should reinvent the wheel or not, but saying that some known framework use is the only right way is simply shortsighted.\n\nAll the best.",{"id":267,"author":268,"author_url":237,"date":269,"content":270},93,"Ando","2011-11-14 12:02:42 +0200","I think all three parts of the discussion could be summarized with a paragraph from Kristo's comment above:\n\n\u003Cblockquote>Fact remains that a native code that is built only for the specific purpose and needs of the software is always faster than the one built with a framework. Whether doing that is the right call, depends entirely on what the project needs. I do agree completely that writing on top of a framework is often quicker when it comes to development time and often more risk free, of course.\u003C\u002Fblockquote>","2011-09-08","This is a continuation of the previous post, Be a Developer, Not a Programmer Part I\".",null,"md",{},"\u002F2011\u002Fopinions-be-a-developer-part-ii","about 16 minutes",{"title":23,"description":272},"2011\u002Fopinions-be-a-developer-part-ii","Part II",[282,283,284,285,286,287,288,289,290],"programming","php","design","kohana","framework","agile","developer","SCRUM","Web application",3023,"E0HmBjQw6FXdmEnAwzqakPiwDe6zqffytoZ9dx4owsc",[294,298],{"title":295,"path":296,"stem":297,"children":-1},"Notes From James Bach's Lecture on Testing","\u002F2011\u002Fnotes-from-james-bachs-lecture-on-testing","2011\u002Fnotes-from-james-bachs-lecture-on-testing",{"title":299,"path":300,"stem":301,"children":-1},"Data Security and Cryptology Lecture #3","\u002F2011\u002Fdata-security-and-cryptology-lecture-3","2011\u002Fdata-security-and-cryptology-lecture-3",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":303},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m12 19l-7-7l7-7m7 7H5\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":305},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 12h14m-7-7l7 7l-7 7\"\u002F>",1790228555613]