9 ms·
The Crazy World of Code
- alttab 14y agoLove it. Sometimes I feel like we nerds get caught in the weeds and forget to solve real world problems. We have enough JS frameworks by now... Funny thing is most of them are the same given a few differences. For JS specifically, it's starting to look like there is no "right" clientside model, at least yet. Web apps behave so differently and have different requirements that no one framework will fix it, sort of like rails, or game engines that solve a large class of problems pretty well. For side projects or "helper apps" (I make a lot of them), I still use rails 238 and prototype because I'm productive with it. Think of all the things you could accomplish if you didn't spend all that time fiddling with 0.0.1 version software.
- hobonumber1 14y agoI would somewhat agree with this. I recently wrote a completely client-side app using a variety of different micro-frameworks. I used Parse's JS API for my backend. At the end of the day, I felt that a traditional CRUD system on a LAMP stack would have probably been easier to implement and would have fit the client's requirements just as well
- alttab 14y agoThanks for sharing. I feel like a lot of the time we forget what problem we are solving. The client rarely asks for new technology or a specific stack as much as they ask for web presence, some system integration, or an app to fill a specific need.
- swah 14y agoI'm in exactly the same situation - will try to finish it anyway though, but in general I regret that I didn't go with Flask and instead went with a client-side + REST framework. Even if you're doing a client side app, some views are easier to implement in the server-side "full-page reload" style, and you want to have the option to do that.
- swah 14y agoAlso, its very funny how sometimes I think I don't need the four CRUD operations for some object ("oh no, this one works differently") but in the end always notice I do need them...
- mnutt 14y agoWhile there's nothing wrong with Rails 2.3.8, there's also a lot you're missing out on. Maybe you don't start your next project with bleeding edge software, but it's definitely worth exploring to see what is out there. Web apps behave so differently and have different requirements that no one framework will fix it If that's the case, why stick with one framework? Why not explore as many as you can and then pick the best one for each new project?
- alttab 14y agoI'm not "missing out" on anything. 99% of the time, I don't need the new features. Rails 2.3.8 and prototype do everything I need it to. The best framework for each new project is one that has the features I need, and I'm productive with. Unless I REALLY need the performance improvements, or the modular design of Rails 3.0 why even waste the time? Exploring as many frameworks as I can is the exact problem I want to avoid. Generally I read enough and do research on the side because its fun, and I know what's out there and what I'm missing out on. If I need to create a simple web app to do simple things, and I'm not scaling to a billion users, and I simply need software to help me automate or model something, Rails 2.3.8 works. When you quoted me on different web app behavior, I simply meant the client side. Rich client-side JS driven apps need different things because the data behaves differently (especially if you are doing realtime stuff, versus not, etc). When it comes to the server, Rails 3 isn't providing anything I need for my tools. Now, are we porting to Rails 3 for our flagship product? Yes. And we are doing it because we want the performance enhancement and maintaining the gems we use might be difficult in the future. Anything else though? Much more productive to type 'rails my_app' with my current environment and build something that works.
- connor 14y agoExcellent critique. I feel that HN often blows by rational ignorance with some of it's advice (http://en.wikipedia.org/wiki/Rational_ignorance http://en.wikipedia.org/wiki/Rational_ignorance). Sometimes it's best to do it wrong and actually do something, rather than hopping around per someone else's dogma and never actually making anything. But I think it's also possible that the HN frontpage simply doesn't give a good impression of the average hacker. The average hacker is not welding together the latest js frameworks while tying it all together with node.js and hadoop. Perhaps more articles on "common man" hackers could be beneficial, or at least give some perspective.
- hobonumber1 14y agoCompletely agree with this. HN is great for technical discussions, but at the end of the day, arguing over technical details doesn't solve any real problem for 99% of the users out there.
- malbs 14y agoJust use what you enjoy. I recently had a similar experience - on a whim I decided I would learn python by taking a asp.net mvc app I built and have maintained for the last 3 years and port it. So I just needed to choose a python web framework right? omg. So many, micro, mini, full stack, no stack, template engines, wsgi, uwsgi, whoa! My head was spinning You can be completely overwhelmed just trying to make a decision, I haven't even looked at storage yet but I'll probably just use sqlite (the old .net one used db4o, which ended up being a huge mistake, great tool, pitfa to do maint on) on a side note, loving python, and I settled on bottle, but I wrote my own template framework called canvas, inspired by the seaside component/tag/canvas classes.. essentially it's all just python code, no html.. example usage is https://gist.github.com/3087622 https://gist.github.com/3087622 (i'll push it to github once I'm happy with it, hah!)
- dbaupp 14y agoThat looks pretty neat: the use of context managers seems very nice. But is "canvas" (and "HtmlCanvas") meant to refer to the HTML5 <canvas> element? If not, I can see that being a point of huge confusion.
- malbs 14y agono it isn't, and you raise a good point, I'll change it canvas.canvas() would definitely look weird
- pjmlp 14y ago> Just use what you enjoy. One has to use what the customer or project requires. If it is something that we can enjoy, great, if not it is a job and the customer should always be an happy customer.
- tikhonj 14y agoI think the customers in quite a lot of markets don't care about what language you use to implement your software--they only care about what it does. The same is true for projects: there are relatively few projects that force you to use some particular language. As people like to endlessly repeat, you should choose the best tool for the job. And, unless there are strong reasons against it, the best tool is one you like. On a more cynical note: the job market is great right now. If you don't like the technology you're using, it's a prime time to look at new opportunities. Apply to some cool startups doing cool things with cool technologies--at the very least, it'll be exciting :P.
- moocow01 14y agoI myself have reverted back to doing "everything" myself... I don't use frameworks besides my own crap. The downfalls... 1) stuff can take a LOT longer to develop, 2) sometimes I feel like I'm stuck implementing middleware when I should be developing features, 3) there is more room for bugs to sneak in 4) scaling could be tougher when/if the need arises The positive... 1) I for once feel like I actually know the full flow of execution and this at times makes certain solutions much easier 2) I don't feel that Im on the treadmill of hopping from learning one framework to the other 3) it grows my skill 4) I feel more like Im chiseling something from one stone rather than tying together rocks Im not entirely sure Id recommend what Im doing - in someways its really stupid but I personally get gratification from it and oddly feel more productive than when Im fusing together multiple frameworks.
- 6ren 14y ago> ... in programming there is a wide-spread 1st order theory that one shouldn't build one's own tools, languages, and especially operating systems. This is true—an incredible amount of time and energy has gone down these ratholes. On the 2nd hand, if you can build your own tools, languages and operating systems, then you absolutely should because the leverage that can be obtained (and often the time not wasted in trying to fix other people's not quite right tools) can be incredible. Alan Kay, "The Power Of The Context", p.8, https://docs.google.com/viewer?url=http://www.vpri.org/pdf/m2004001_power.pdf https://docs.google.com/viewer?url=http://www.vpri.org/pdf/m... EDIT google search (mostly) provides a "Quick View" link for pdfs - there's also addons for chrome/FF that add a right-click context menu option to open a file in google view, useful for checking out lecture notes/slides, that often are a list of pdf links.
- chii 14y agothank you for posting a google doc view link!
- iamartnez 14y agoA good middle ground is using a collection of well written libraries that achieve the function you're looking or. Doing that instead of using a monolithic framework has some nice benefits: 1) The libraries are guaranteed to be decoupled. 2) The libraries are better maintained individually. 3) It's much easier (sometimes painless) to replace them if they don't suit your needs. 4) ... probably many more. The hardest part of bootstrapping a new application is the boilerplate. Let someone else take care of managing session state, generating SQL queries, URL routing, DI containers, buffered logging, templating, etc. If you haven't found something that suits your needs, sure, write it yourself. I wouldn't say what you're doing is stupid. Do what makes you successful and happy. Just don't be stubborn ;)
- hluska 14y agoIn marketing, there's something called 'the paradox of choice.' The theory goes (and there's some decent research to back this up) that if you give people too much choice, it decreases the probability that they will make any decision.
- yen223 14y agoThis explains the popularity of the iPhone and the iPad right?
- hobonumber1 14y agoNot necessarily. I don't know if it applies to products. I feel for products, since you get to hold them in your hands, its a much more subjective decision. With a website, you are only relying on your sense of sight to make decisions. With a product, you can use all 5 senses (maybe not taste, haha!). Does that make sense?
- wonderzombie 14y agoDidn't one of the original studies involve choices of jam at a supermarket? Seems like it applies equally well to products. Compare and contrast the number of iPhone or iPad models with the rest of their respective industries. They're delineated along good/better/best and the tradeoffs are obvious. It's a lot easier to shop for an iPad than it is an arbitrary laptop.
- daemin 14y agoIt would apply in the way that there is only one iPad or iPod branded device from one company, which has marketed it as the only thing in its category. While on the other hand there is a plethora of various Android based tablets with many differing features, hence leading to confusion and analysis paralysis.
- hobonumber1 14y agoActually, there's a theory very similar to that in UI/UX design. Menus that are too large often intimidate the user and cause them to bounce out of the site.
- itomek 14y agooh, JavaScript you say? I stopped on jQuery! Everything else sort of flutters by... too much! Especially since .NET is going insane right now with kick-ass magic! So I'm still trying to catch up on .NET stuff and the JavaScript is sort of passing in another lane, but I'm like the old lady who won't take my eyes off of my lane beacuse I'm too scared to let go of the wheel that I'm barely hanging on to. Exhausting as it may seem, its far cooler than 10 years ago! As another reason pointed out, use what you like. ASP.NET MVC - check LINQ - check EntityFramework - check next step, SignalIR! next next step: Metro! :)
- wooUK 14y agoI've used .NET from the start and since 3.5/4.0 its just ramped up. Feels like every day there is a new acronym to master! ASP.NET MVC 4.0 projects now include knockout.js by default. So that may be around for a while if only to support .NET devs who are just using out-of-the-box technologies.
- gizmo686 14y agoI agree that no single person should be jumping around between all of the languages and frameworks out there, but the diversity is a sign that there is an active community that is experimenting with new ways of doing things. If one of them is especially useful for your problem, then you should learn it as a matter of practicality (mind the cost of transition though). If you enjoy language development, then you should definitely switch to a .01 language framework, that is where the interesting research is being done. If you come up with something good, and work out the kinks, then mainstream languages will start to use it.
- wizard_2 14y agoJust make little things. Backbone is fun, make some little backbone views/models, they'll work perfectly with any other JS you have. Want to try rails? Do another little project in rails. Is it too much? try the next one but only use sinatra. Like javascript? Do your next project in Node.js. (and remember jifasnif!) Felt like you're in callback hell? (remember use flow control and streams!) Try out gevent in python on the next project. See my point? It doesn't mater what you use as long as you're making things. Pick something and do something. Iteration can only come after you've completed projects. Eventually you'll figure out what you prefer, and even then it wont hold a candle to what you've made.
- hobonumber1 14y agoCompletely agree with this. However, when I talk to developers who aren't based in tech hotspots, they often tell me they are lost because they dont know what they should learn, because there's so much out there. The side effect of this (which I have seen) is that people write off every new OS project that comes out, because they feel by the time they learn it, something new will be out there. I don't agree with this philosophy but it's something that I have seen with my own eyes.
- einhverfr 14y agoOne of my views is that you should figure out what you want to make before you figure out what you want to learn. Once you have a functional idea of what you are doing, then it is easier to pick something similar, or look to library repositories (CPAN, gems, etc) and decide what you want to do. If you aren't in a tech hotspot and you aren't chasing jobs, it doesn't matter what you learn. It matters what you make and how you can sell yourself.
- Raphael_Amiard 14y agoI respect the sentiment, but for me, this is literally the worst advice i could get, and i suspect it is for other people too. Your whole comment is centered on the technology you use, not what you're doing with it. Also you're talking about every of those piece of tech like it's easy to do something in it. But see, when you switch technology with every project, even if you learn plenty of things, you : 1. Prevent yourself from becoming really fluent in one piece of technology. 2.Force yourself to learn a myriad of details that are really useless to what you ultimately want to do. Ultimately you can burn yourself out, learning 1000 things, and all you have to show for it at the end is a collection of unfinished crap projects. My advice for somebody who feels like this would be quite the opposite : - Find what you want to do - Think about it, in a technology agnostic way - Pick your technology, pick the technology you're the most familiar with at the moment you start realizing the project, even if it seems dull to you, if you're sensible to the kind of syndrome outlined in the OP, it probably isn't :) - Do it. Don't switch techs.
- wellpast 14y agoAs frustrated as I am with what seems like an unnecessarily immature software industry, I am grateful for the plethora of wonderfully crafted free frameworks that I have at my disposal (http://www.jmolly.com/2012/07/01/the-wide-landscape-of-java.html http://www.jmolly.com/2012/07/01/the-wide-landscape-of-java....). I want to solve problems that need solving. I don't want to reinvent wheels. As you grow in expertise, you get better at picking the right framework for the right job. If you're not there yet, just make your best pick and move forward. In the end you can make anything work, you can refactor, you can replace. Software is malleable.
- unimpressive 14y ago> As frustrated as I am with what seems like an unnecessarily immature software industry, Could you expand on this?
- wellpast 14y agoI didn't really phrase that right. I often feel that the software industry should be much 'further along' than it is. It's 2012 and most software interactions are through kludgy, blocky web interfaces, its not uncommon for rather basically behaving systems to be backed by millions of lines of code. I know this is rather a soft lament, but it doesn't feel right. It feels that with all the years we've been at this practice we should have progressed further than we have.
- gaius 14y agoWe spent the 90s and 00s rewriting the 80s again and again. The 10s look like they're going the same way. Same concepts, same functionality, different syntax only, no progress. I'm having a lot of fun right now doing 68000 ASM for my personal projects. Going to try to figure out where we could have been if we didn't get stuck in a rut in the late 80s.
- unimpressive 14y agoAs someone with an interest in this subject, where did we go wrong? Plenty of people say *nix. But I'm not old enough to have witnessed any of that firsthand.
- madrona 14y agoGetting blown from one framework to another so easily means you're not doing a good job of getting traction on your project. Build some positive momentum and then staying the course will become natural.
- powerslave12r 14y agoThis has become a serious problem for me in my search for a better job. Interviews are nothing short of awkward. Interviewer: So what do you like to do? Me: I'm a Python/Ruby guy. I also have worked in Java/C. Currently playing around with node.js, machine learning algorithms, some functional programming and pet project with my Arduino Duemilanove. Interviewer: Sounds good, you'll hear from us in the next few days. :(
- PlanetFunk 14y agoSounds like you're not applying to the right companies. Any developer that comes to me with an obvious love for code moves to the top of the list. If you're coding in your own time for fun, it's not a job, and I'd want to hire you - in some capacity :)
- nick89 14y agoThe growing trend that I've seen now days is companies requiring extensive knowledge in "this" framework. It doesn't help that every company requires a different framework. Interviews are a drag, and none of them like hearing that it will take one month to become fully accustomed (in-depth knowledge) with their framework. They'd prefer someone with limited knowledge who knows their framework rather than one who's well versed in multiple frameworks/languages.
- powerslave12r 14y agoThis is exactly my problem. Finally I have committed what might sound like the ultimate sin and given in to the Java/Spring framework. I'm learning various aspects of Spring, should have a small project up on github and plan on "specializing" in this framework for good. All my other fun work is going to be done on my time alone. I look at it as the 'get serious, time to separate work and play.'
- einhverfr 14y agoIt's a pretty stupid trend too. Let's face it, the best programmers will learn "this" framework quickly, get up to speed etc. Not only that but the programmers you really want to hire are going to be those who love learning, thinking, and critiquing their own code, not specialists in Framework X NG. It seems to me that a better approach would be to put new hires into code maintenance first with a mentor who can help them get up to speed..... But most of us know that HR departments are not always the best judges of talent.
- mnutt 14y agoI understand where the author is coming from, and it can be hard to figure out where to even get started on new projects. On the other hand, I am thankful from the obscene amount of great software coming out of the open source community every day. While things like paradox of choice and project abandonment are worth discussing, let's not forget that thousands of developers have found something that they think is lacking, fixed it, and taken the time to give it to us gratis so that we can use and learn from it. I, for one, am excited.
- lifthrasiir 14y agoIt's an abstraction all the way down. Somewhat related: http://xkcd.com/676/ http://xkcd.com/676/
- gaius 14y agoThis is a phenomenon limited to the frothy world of webdev. See http://prog21.dadgum.com/140.html http://prog21.dadgum.com/140.html
- Morg 14y agoThe first half of the solution is to ignore fads, such as node.js (how could anyone even half-competent use something as slow and fucked up as javascript for their server...) or mongodb (seriously, who'd compare that to a real dbms like pg or orcl ? ) or ruby (too bad but it's still a decade away from reaching "crappy-but-acceptable" speed).
- pjmlp 14y agoCould not agree more. At the end of the day, what is important is to deliver a piece of software that works according to the customer requirements. If the customer dictates the operating system, language, etc. Then it is already decided what to use. If some technology liberty is given, then it should be something that is working as desired at the given deadline, regardless of the technology.
- Kaali 14y agoIf you start your day by reading your favorite software development news aggregation sites, containing news about interesting libraries, frameworks and how different people have succeeded with them; you can get disillusioned about the importance of technology choices. Your project is not the framework you use, nor does it matter which language you chose. It is a non-issue if Facebook or Google uses the same stuff you do. Your projects value is not a combination of buzz-words. Choose technology based on what gets the job done, and all the better if it makes the project fun to do. Don't be paralyzed by the choice, focus on solving the problems of your project instead. Off to write a Clojure compiler in Haskell which can run natively on iOS and translate itself to HTML5 for live development with SocketIO backing the Closure optimized Javascript using node.js for the concurrency model. PS. The last bit is a joke
- gtrak 14y agoNo doubt you've heard of this? https://github.com/jspahrsummers/cocoa-clojure https://github.com/jspahrsummers/cocoa-clojure
- kracekumar 14y agoThe article had all Buzz words(Positive sense) except Python.
- Su-Shee 14y agoWell, this kind of insanity made me step back 10 steps and invest some time (almost a year by now) into the "classics" so to speak. Inspired by Crockford's talks in which he mentioned a couple of times the lack of history and historical knowledge among developers, I suddenly remembered that I got an education in humanities before I even went into programming and really did start with the classics - Greeks and Romans and Philosophy - and I asked myself why on earth I never really considered doing something similar in computing. (Someone called it in some article I've sadly forgotten the Oxford way - you learn Latin and Math and from there you can learn anything anyways ;) So I decided to ignore all fashions, new things, upcoming frameworks and such for some time until I got what I would consider (totally subjectively) a solid foundation (not there yet, will probably take another year at least) of knowledge. I personally decided to define "classics" along the lines of "knowing Unix and its history and concepts well" (re-learning shell and commandline wizardry on top), "understand decent C and Assembler", "becoming familar with the influential languages of important concepts like functional and OO programming (Scheme/Lisp and Smalltalk). This includes really understanding SQL (which I suddenly started to really like to my own surprise). Maybe I add some PostScript and TeX along the way. I also found a new appreciation for Perl's text processing capabilities and its influence from the 1990ies on. Set aside that I constantly have to fight kind-of a "bad conscience" exactly BECAUSE I'm not hurrying along to try out the latest and greatest new fashion, I'm starting to feel a deep change in my programming skills, in my thinking about design and I'm constantly marveling where computing already has been and how much there is to learn from the classics. I also started to get a distinct feeling of "Man, I just don't NEED all this clutter and stuff" and a newly found appreciation of "simplicity" (Watch Rich Hickey's talk about "simple versus easy"..). I started to slow down, to think more carefully, to read a lot more on concepts and ideas. I've finished recently Christopher Alexander's Pattern Language book for example to get a better feel for the "orginal" idea or read up on the history of "lean production" and Toyota's influence or looked again at Dieter Rams' design principles (I'm German and I basically grew up with Braun appliances, I didn't even realize how influential his designs have been to me..) All this changed me and my thinking about programming deeply and made me find kind of a "central theme" or "essence" in programming and design I like and I'm starting to strive for. In the long run, this also gives me a foundation of how I'm judging new tools, ideas, frameworks and programming languages. On top of that, I'm better able to place myself into a certain "style" or "culture" of programming I'm not going to give upon as long as I can afford it. Anyways - I personally think there actually is a choice whether one tries to catch up with everything new or peek into new things selectively or just steps back a little and watches how all this will unfold in the long run. (I also have a long-held, un-proven personal theory that people simply like _writing_ frameworks a lot more than _using_ them - some are just faster to release theirs into the public.. :)
- exDM69 14y agoI think this post is missing the point a little. Being a good programmer, despite what recruitment ads like to portray, is not about being proficient in dozens of frameworks and languages. No, it's about learning the skill of learning new frameworks and languages. Getting into a new platform or familiarizing with a new tool is something you get better at the more you do it. Learning your eleventh programming language will be easier than learning the third. Getting familiar with yet another framework is easier if you know a few already and can compare the similarities and differences. And let's not forget about the fundamentals. Having a strong background in web plumbing, understanding http and html, etc well is the key to being a good web programmer, not which frameworks you know by heart. Knowing a little theory about programming will make it easier to grok new languages faster. If you're tired of constantly learning new frameworks and languages, go learn C and systems programming. That stuff is going to stick around for a long time and will provide secure jobs for the foreseeable future.
- felipemnoa 14y agoThis article is probably appropriate: http://www.joelonsoftware.com/articles/fog0000000339.html http://www.joelonsoftware.com/articles/fog0000000339.html And a quote from the same article: >>Think of the history of data access strategies to come out of Microsoft. ODBC, RDO, DAO, ADO, OLEDB, now ADO.NET - All New! Are these technological imperatives? The result of an incompetent design group that needs to reinvent data access every goddamn year? (That's probably it, actually.) But the end result is just cover fire. The competition has no choice but to spend all their time porting and keeping up, time that they can't spend writing new features. Look closely at the software landscape. The companies that do well are the ones who rely least on big companies and don't have to spend all their cycles catching up and reimplementing and fixing bugs that crop up only on Windows XP. The companies who stumble are the ones who spend too much time reading tea leaves to figure out the future direction of Microsoft. People get worried about .NET and decide to rewrite their whole architecture for .NET because they think they have to. Microsoft is shooting at you, and it's just cover fire so that they can move forward and you can't, because this is how the game is played, Bubby.<< Except that in this case the wounds are self inflicted.
- pnathan 14y agoQuite a few years ago, I decided I would simply not invest my learning efforts into MS tech due to their acronym/framework spinning. It was a waste of my time. Of course, this limits me in some ways, but frees me to study more deeply into other areas. It also happens with other tech areas. So I simply take the road around them unless it looks like I need to use one. My personal work is done with Common Lisp, and I would prefer to keep it that way, by and large. It's a sufficiently extensible language that I can feel comfortable that (1) needed features will be programmed in, using CL, and (2) it will be stable for a long time. But I guess that's a bit eccentric of me. :-)
- terryk88a 14y agoPretty awesome distillation of the history of software tools since, oh, no later than 1980. Back in the dino days, the rate of change was tiny compared to today's daily delta V. We mostly had monthly and a few weekly rags to tell us about the next big thing; there weren't that many next big things, anyway. Hey, it was a really big deal when cartridge tapes came out and we didn't have to thread a 1/2 inch magtape by hand anymore... Geez, who could forget 1-base-T networking? or 9600 baud modems? Whew. Don't get me started on software innovations like Oracle SQL\Forms! ManOhMan! Fergit CICS! Seriously - the barrier of entry is so low now, that the least of us can throw something up on the wall and if it sticks or even just leaves a little residue, the flies are all over it, preaching it up, "This is the best shit ever." There really isn't much new out there, mostly it's just lots of new flavor wheels. Think "Hudsucker Proxy" at times like this...
- nlz1 14y agoJust use mod_perl. Duh!