Ask HN: What do you think is the next Technology worth mastering ?
I have friends who got very deep into iPhone dev a few years back.
Now, they are considered masters of their craft, have managed to build a good name and connections for themselves. (And monetize on it).
Now that I have lots of spare time, I decided to delve into something (very)new. In the hope that two/thee years down the road, I too, can position myself in the same way in a new field.
So what do you think is most worth learning ?
100 comments
[ 1.9 ms ] story [ 206 ms ] threadHe's recently released Mastering Data with O'Reilly, which is essentially an expanded second addition to his dissertation.
http://scpd.stanford.edu/public/category/courseCategoryCerti...
(if the above is broken, http://tinyurl.com/stanford-graduate-certs )
Only after you get a good grasp on basics should you move to advanced topics such as neural networks, SVMs, etc.
People are starting to care but the "adoption rate" is so low because, as you said, people don't understand it. I still struggle with the subject. Not the underlying concepts, but the picture as a whole.
From an "insider's perspective" I can say with confidence that what we hope the Semantic Web will bring us is going to come about. I just personally no longer believe in "well, here is the old Web, and then here's the day we switch on the Semantic Web. See the difference?"
As soon as a technology translates into an edge on the web, it'll get implemented. This fixes the monetary motivation problem, and forces people to solve the other two :)
Parallel execution, map/reduce, hadoop, noSQL datastores;
What I mean is, every algorithm or solution designed with software can always, by definition be implemented in hardware, bringing vast improvements in performance and scalability. This will always happen as long as hardware continues to get faster and there is no reason to believe that it won't continue to get faster exponentially for the foreseeable future. Quantum computing, 3D processors, light based data storage, carbon nanotubes, dna circuits...
Soon, we will have Databases and Web Servers implemented in hardware... When graphics was the rage, Intel put MMX in the CPU. Now we have two CPUs in the CPU, or four. We put SSL in hardware to speed that up. We can and do put it all in hardware eventually.
There are already lots of instant hardware solutions you can burn with EEPROM, PLAs, and the like. I don't see any reason Intel or AMD won't let consumers upload programs to burn right into the silicon. It'll be like embroidering polo shirts.
So yes, any software system can be embodied in hardware, but when a problem is so fiendishly difficult and optimal solutions require (sophisticated) algorithms matched to hardware specifics, then the cost equation tips heavily in favor of hardware embodiment. A significant barrier to the n-core future is pedagogical and I'm guessing that will further tip the balance towards a systemic solution embodied in hardware to hide the concurrency issues.
It's interesting that CISC won out over RISC considering the conversation we are having. It's simpler for the builder. You can repeat yourself less. Imagine doing a quicksort in assembly. No way, right? Not today. Why?
Edit: The replies below are insightful, I should not have been so reductionist.
The problem with current FPGA and CPLD solutions where you would be able to upload your own algorithms is that currently they operate much more slowly than mask manufactured ASICs. Not to say that couldn't change at some point, but even then the line between software and hardware is pretty blurry. Tools for designing correct implementations of an algorithm in hardware that take full advantage of being in hardware (very fine-grained concurrency, etc) are difficult to master.
Sorry, it is hard to hit these points in depth in a short post, but hardware has a set of concerns that are separate from software, and treating them as exactly equivalent is not really accurate, even if functionally and algorithmically they are the same.
I'm working with Altera tools. To do any work, I need to download about 5Gb of stuff. The IDE is painfully slow, badly designed, and crashes about once every hour. Everything is closed-source. Basically, the development process is at least a decade behind that for software work.
Xilinx tools are also closed (don't know if they are as unusable though). I think that if one of the FPGA companies opened up their toolkit, they could win big. But they are too worried about their proprietary routing algorithms to do that.
Pretty much.
For a large number of processors on the right tasks, just getting instruction level parallelism (e.g.) is not even tiny bit as good as using an optimized algorithm.
The differentiation aspect of hardware is that it involves both logical and physical domains, where as software is limited to logic. We may require new approaches to hardware and architectures as the "intrinsic" aspect of the problem is very much rooted in underlying hardware architecture.
(I also wouldn't be surprised at all if the initial successful applications of quantum computing are memory related.)
I am into game dev, music dsp and highly concurrent web application development... but I recognize that these are all fringe activities.
Programming games is fringe programming. I believe that most PCs are used for: CRUD web apps, VB/C# apps, productivity apps, document editors, ecommerce clients, collaboration, and communication clients.
Sure, faster programs would be great! I want it as much as the next person. Sadly, I don't see it being the Next Big Thing. I hope I'm wrong! I do think that the present high-performance community is going to get nicer tooling for parallel programming, and some of that may find its way into your everyday consumer apps but that will be in forms like Grand Central Dispatch or other library adjuncts to existing platforms, and therefore not a technological leap but rather a step in the right direction.
Polling files for modification is an example of not taking advantage of platform capability, where existing performance is "good enough." Most platforms now have filesystem hooks for modification, and if you want to improve the speed of gedit you can register an event handler.
Seriously though, if anyone is interested in learning about this, the best place to start is definitely the nVidia GPU Computing forums: http://forums.nvidia.com/index.php?showforum=62
You can work round that by being vary careful, arranging things so that processors access memory in sequence, which lets reads be coallesced (you're streaming data from continguous addresses, avoiding the "seek time" of random access). But that only works if all the processors are focussed on the same job.
Now you can say I'm just describing the standard problems with GPU, and I'd agree, but my point is that even in Fermi (which is a huge step forwards in many ways) these will still dominate. And it's hard to see how most software fits into such an approach. Hence my warning that they are not becoming general purpose.
I obviously have to be more conservative than you because I have to consider short-term profit as well as risk. So in order to get responses that are along the lines of your question, I'd like to ask HN readers: what do you think is worth concentrating on in 2010 that would lead to good short- and long-term results for an agency specializing in website and web application development, often for relatively small projects?
To answer your question, I think you need to do some thinking about what it is that you want to do. You have to start with something that interests you. Your friends chose something in the realm of mobile development: does that appeal to you? Perhaps they also focused on games: does game programming appeal to you? Someone below suggested "data mining" as a field to focus on. I can say for myself that although I am somewhat interested in this, I am not anywhere close to as interested as I'd need to be to devote several years to it.
It also has to be something with a good chance of paying off, if you are interested in the money side of it. Your friends chose something that was backed by a huge corporation with a proven track record of creating successful devices, so although they ran some risk - the iPhone may not have been a massive hit like it was - they mitigated that risk by choosing something with very good chances. However, any choice that relies on predicting what will be successful in the technological realm in two to three years is bound to be risky, especially if it is "very new" (and thus unproven).
Here's a shot at it: focus on mobile web application development utilizing HTML5 features. Google believes "the web has won", and I agree. If you get really good at building browser-based applications for mobile phones, I think you'll do well.
Similarly, invest in testing technologies for the front-end. Many web-app shops only focus on testing the back-end, but as front-end logic becomes more complex, the advantages of testing become more fortuitous.
This is one of the main fields I have been looking into. The idea of iPhone/Android/Blackberry/etc app, sounds absurd to me with the Internet-Everywhere movement.
Uniform web hosted apps are surely to be here soon.
-I think Android apps will kick off in a much bigger way this year with more people getting their hands on phones supporting the OS. It's still early enough to get into IMO.
-On this page Veera suggested the Semantic Web, and while I have big hopes for the Semantic Web (I should, I blog[ged] about it), it's just not going to mature into what I think you're looking for in the amount of time you're looking for.
-Tichy suggested Data Mining, which I'm getting very into as of late, so maybe I'm not in the best position to give an impartial opinion but I think that will be taking off more. :)
Edit: fixed linebreaks
[I figured since you just got into it ... ]
I took LA in college, but my professor was no where near as good and on topic in relation to computer algorithms as this guy: http://ocw.mit.edu/OcwWeb/Mathematics/18-06Spring-2005/Cours...
Oh, check out R. There are a lot of free papers and example code showing say, how principal component analysis on a dataset of migratory geese can be used to explain so and so, along with generating some pretty pictures.
It's a really nice bit of OSS!
Android is a gamble.
Data Mining will make a lot of money for the person who can explain his data mining app in one sentence without ever using the words data or mining.
Seriously, several of the technologies emerging now are likely to be big (or at least grow substantially) over the next few years. But if you focus on the one you find most interesting it will help keep you focused and motivated which can be an enormous help. It will also help you enjoy what you are doing which simply makes the process more pleasant.
http://news.ycombinator.com/item?id=1006208
Another one: HTML 5 and related.
This probably won't make as much of a splash as AJAX did a few years ago but some of the new things you will be able to do in a web browser present an opportunity to improve on older web apps: e.g. location and gravitation APIs, web sockets, multi-file uploads and drag-and-drop.
Biggest problem with HTML 5: it's going to be years before complete market penetration - but FF, Chome, and Safari all have much tighter upgrade cycles than IE. For intranet stuff or anywhere you have a reasonably captive user base, why not offer better features to your users if they upgrade? Side benefit: it's much more fun to be coding for the future than for the past.
HTML5 could make just as big a splash. Someone making local storage work seamlessly in a large webapp would be noteworthy, and take away the biggest problem with Chrome OS: can't work offline.
If you know enough about dealing with data such that you can be one of the ones building layers on top of the data, then there is a lot of opportunity there.
5 years is a reasonable estimation for this. Before then may be a bit tough.
Another important thing to learn are Location Based Services. The problem is that the applications at the moment have not all been invented yet, and it's not clear when it will reall trickle down to the Ex-VB6 guys.
Letting "business types" write data mining apps is already on the market and has been for a while. Look into "Business Intelligence" applications. The verdict is that a) making it easy to do BI actually makes it very complex and b) making analysis easy does not automatically expose or explain what analysis is salient.
... and for practical reasons ... Scala is one of the only academic-ish languages you can actually use in the real world
How the Brain Encodes Memories at a Cellular Level http://www.sciencedaily.com/releases/2009/12/091223125125.ht...
If you've ever read Mindkiller or Time Pressure by Spider Robinson, then you know where I'm going with this ;-)
Or Flash? I know it's not loved by very many, but expert Flash developers can demand a very good salary. They're also very well positioned to develop cool stuff on new web platforms.
The real problem with the Flash implementation is in the native runtime, not the VM. It just struck me that Flash is a ripe candidate for a Smalltalk-style turtles-all-the-way-down runtime implementation!
b) Alternative databases.
c) Real-world scalability.
ZigBee/WBAN/RFID and the technology around them.
This fields has myriads of required applications: - Firmware upgrades - Control & Monitoring - Inter communication tools - Security and more and more and more